From f36a9d5e574b25abfa7dd6db6c51aaf373c224e6 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Tue, 10 Oct 2023 22:17:59 -0400 Subject: [PATCH 01/16] Add GITHUB_TOKEN to the repository secrets --- .github/workflows/ci.yml | 21 ++++++++++++++------- test/Logs/Electrolyzer.log | 4 ++++ test/Logs/MethodofMorris.log | 4 ++++ test/Logs/MultiStage.log | 3 +++ test/Logs/PiecewiseFuel_CO2.log | 4 ++++ test/Logs/VREStor.log | 4 ++++ test/test_methodofmorris.jl | 4 ++-- 7 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 test/Logs/Electrolyzer.log create mode 100644 test/Logs/MethodofMorris.log create mode 100644 test/Logs/MultiStage.log create mode 100644 test/Logs/PiecewiseFuel_CO2.log create mode 100644 test/Logs/VREStor.log diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3790d38e53..1b7b7801a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,13 @@ jobs: - x64 steps: - uses: actions/checkout@v3 + - name: Create a new branch for test logs + run: | + if [[ ${{ matrix.version }} == '1' ]]; then + git config --local user.name lbonaldo + git config --local user.email "bonaldo.luca12@gmail.com" + git checkout ${GITHUB_REF#refs/heads/}-testlogs 2>/dev/null || git checkout -b ${GITHUB_REF#refs/heads/}-testlogs + fi - uses: julia-actions/setup-julia@v1 with: version: ${{ matrix.version }} @@ -32,15 +39,15 @@ jobs: - uses: julia-actions/cache@v1 - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 - - name: Commit logs and push to repo + - name: Commit logs and push to repo # only for 1.x versions run: | - git config --local user.name actions-user - git config --local user.email "actions@github.com" - if ! git diff --exit-code; then - git add -f test/Logs - git commit -m "Test logs updated" - git push origin HEAD:${GITHUB_REF#refs/heads/} + if [[ ${{ matrix.version }} == '1' ]]; then + git add -f test/Logs + git commit -m "Test logs updated" + git push origin ${GITHUB_REF#refs/heads/}-testlogs fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v3 with: diff --git a/test/Logs/Electrolyzer.log b/test/Logs/Electrolyzer.log new file mode 100644 index 0000000000..8f5798d275 --- /dev/null +++ b/test/Logs/Electrolyzer.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:37 | 6946.981912630803 ± 0.0001 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(6946.981912630803, 6946.9819126; atol = 0.0001) +2023-10-11 03:01:00 | 6946.981912630803 ± 0.0001 | Test Passed diff --git a/test/Logs/MethodofMorris.log b/test/Logs/MethodofMorris.log new file mode 100644 index 0000000000..dd23446d99 --- /dev/null +++ b/test/Logs/MethodofMorris.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:51 | Build and Run | Test Broken + Expression: built +2023-10-11 03:01:13 | Build and Run | Test Broken + Expression: built diff --git a/test/Logs/MultiStage.log b/test/Logs/MultiStage.log new file mode 100644 index 0000000000..8f0ff0bb7e --- /dev/null +++ b/test/Logs/MultiStage.log @@ -0,0 +1,3 @@ +2023-10-11 02:38:03 | 79734.8003171703 ± 1.0e-5, 41630.03494225143 ± 1.0e-5, 27855.20631474678 ± 1.0e-5 | Test Passed + Expression: all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) +2023-10-11 03:01:23 | 79734.80031717036 ± 1.0e-5, 41630.034942251485 ± 1.0e-5, 27855.206314746796 ± 1.0e-5 | Test Passed diff --git a/test/Logs/PiecewiseFuel_CO2.log b/test/Logs/PiecewiseFuel_CO2.log new file mode 100644 index 0000000000..7466c75b06 --- /dev/null +++ b/test/Logs/PiecewiseFuel_CO2.log @@ -0,0 +1,4 @@ +2023-10-11 02:36:57 | 2341.8230753008047 ± 1.0e-5 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(2341.8230753008047, 2341.8230753; atol = 1.0e-5) +2023-10-11 03:00:24 | 2341.8230753008047 ± 1.0e-5 | Test Passed diff --git a/test/Logs/VREStor.log b/test/Logs/VREStor.log new file mode 100644 index 0000000000..0c4a88778e --- /dev/null +++ b/test/Logs/VREStor.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:34 | 92081.91504226513 ± 1.0e-5 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(92081.91504226513, 92081.915042; atol = 1.0e-5) +2023-10-11 03:00:57 | 92081.91504226513 ± 1.0e-5 | Test Passed diff --git a/test/test_methodofmorris.jl b/test/test_methodofmorris.jl index 0b0ce5e825..c852054a90 100644 --- a/test/test_methodofmorris.jl +++ b/test/test_methodofmorris.jl @@ -48,10 +48,10 @@ try catch BoundsError end -@static if VERSION ≥ v"1.7" +@static if VERSION ≥ VersionNumber(1, 7) test_result = Test.@test built broken = true else - test_result = built ? Test.Pass : Test.Fail + test_result = built ? "Test Passed" : "Test Failed" end # Add the results to the test log From b9926daf55d41cc6e6314d079d0a5560fb89a1a2 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Wed, 11 Oct 2023 10:29:12 -0400 Subject: [PATCH 02/16] Remove logs from develop --- .github/workflows/ci.yml | 15 +++++++++++---- test/Logs/Electrolyzer.log | 4 ---- test/Logs/MethodofMorris.log | 4 ---- test/Logs/MultiStage.log | 3 --- test/Logs/PiecewiseFuel_CO2.log | 4 ---- test/Logs/VREStor.log | 4 ---- 6 files changed, 11 insertions(+), 23 deletions(-) delete mode 100644 test/Logs/Electrolyzer.log delete mode 100644 test/Logs/MethodofMorris.log delete mode 100644 test/Logs/MultiStage.log delete mode 100644 test/Logs/PiecewiseFuel_CO2.log delete mode 100644 test/Logs/VREStor.log diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1b7b7801a3..bc80496f79 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,8 +29,15 @@ jobs: run: | if [[ ${{ matrix.version }} == '1' ]]; then git config --local user.name lbonaldo - git config --local user.email "bonaldo.luca12@gmail.com" - git checkout ${GITHUB_REF#refs/heads/}-testlogs 2>/dev/null || git checkout -b ${GITHUB_REF#refs/heads/}-testlogs + git config --local user.email "39280783+lbonaldo@users.noreply.github.com" + git checkout -b ${GITHUB_REF#refs/heads/}-testlogs + git ls-remote --exit-code --heads origin ${GITHUB_REF#refs/heads/}-testlogs + if [ "$?" == "2" ] ; then # exit-code 2 if the branch doesn't exist + echo "Branch doesn't exist. Skip fetching." + else # if a branch exists, fetch it + git fetch origin ${GITHUB_REF#refs/heads/}-testlogs + git cherry-pick $(git log -n 1 origin/${GITHUB_REF#refs/heads/}-testlogs --pretty=format:"%H") + fi fi - uses: julia-actions/setup-julia@v1 with: @@ -43,8 +50,8 @@ jobs: run: | if [[ ${{ matrix.version }} == '1' ]]; then git add -f test/Logs - git commit -m "Test logs updated" - git push origin ${GITHUB_REF#refs/heads/}-testlogs + git commit -m "Update test logs" + git push -f origin ${GITHUB_REF#refs/heads/}-testlogs fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/test/Logs/Electrolyzer.log b/test/Logs/Electrolyzer.log deleted file mode 100644 index 8f5798d275..0000000000 --- a/test/Logs/Electrolyzer.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:37 | 6946.981912630803 ± 0.0001 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(6946.981912630803, 6946.9819126; atol = 0.0001) -2023-10-11 03:01:00 | 6946.981912630803 ± 0.0001 | Test Passed diff --git a/test/Logs/MethodofMorris.log b/test/Logs/MethodofMorris.log deleted file mode 100644 index dd23446d99..0000000000 --- a/test/Logs/MethodofMorris.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:51 | Build and Run | Test Broken - Expression: built -2023-10-11 03:01:13 | Build and Run | Test Broken - Expression: built diff --git a/test/Logs/MultiStage.log b/test/Logs/MultiStage.log deleted file mode 100644 index 8f0ff0bb7e..0000000000 --- a/test/Logs/MultiStage.log +++ /dev/null @@ -1,3 +0,0 @@ -2023-10-11 02:38:03 | 79734.8003171703 ± 1.0e-5, 41630.03494225143 ± 1.0e-5, 27855.20631474678 ± 1.0e-5 | Test Passed - Expression: all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) -2023-10-11 03:01:23 | 79734.80031717036 ± 1.0e-5, 41630.034942251485 ± 1.0e-5, 27855.206314746796 ± 1.0e-5 | Test Passed diff --git a/test/Logs/PiecewiseFuel_CO2.log b/test/Logs/PiecewiseFuel_CO2.log deleted file mode 100644 index 7466c75b06..0000000000 --- a/test/Logs/PiecewiseFuel_CO2.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:36:57 | 2341.8230753008047 ± 1.0e-5 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(2341.8230753008047, 2341.8230753; atol = 1.0e-5) -2023-10-11 03:00:24 | 2341.8230753008047 ± 1.0e-5 | Test Passed diff --git a/test/Logs/VREStor.log b/test/Logs/VREStor.log deleted file mode 100644 index 0c4a88778e..0000000000 --- a/test/Logs/VREStor.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:34 | 92081.91504226513 ± 1.0e-5 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(92081.91504226513, 92081.915042; atol = 1.0e-5) -2023-10-11 03:00:57 | 92081.91504226513 ± 1.0e-5 | Test Passed From 00dd03113a949d8a3624ce62cd337e53017bd04b Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Tue, 10 Oct 2023 19:10:46 -0400 Subject: [PATCH 03/16] Add GH action to run tests and update test logs --- test/Logs/Electrolyzer.log | 4 ++++ test/Logs/MethodofMorris.log | 4 ++++ test/Logs/MultiStage.log | 3 +++ test/Logs/PiecewiseFuel_CO2.log | 4 ++++ test/Logs/VREStor.log | 4 ++++ 5 files changed, 19 insertions(+) create mode 100644 test/Logs/Electrolyzer.log create mode 100644 test/Logs/MethodofMorris.log create mode 100644 test/Logs/MultiStage.log create mode 100644 test/Logs/PiecewiseFuel_CO2.log create mode 100644 test/Logs/VREStor.log diff --git a/test/Logs/Electrolyzer.log b/test/Logs/Electrolyzer.log new file mode 100644 index 0000000000..8f5798d275 --- /dev/null +++ b/test/Logs/Electrolyzer.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:37 | 6946.981912630803 ± 0.0001 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(6946.981912630803, 6946.9819126; atol = 0.0001) +2023-10-11 03:01:00 | 6946.981912630803 ± 0.0001 | Test Passed diff --git a/test/Logs/MethodofMorris.log b/test/Logs/MethodofMorris.log new file mode 100644 index 0000000000..dd23446d99 --- /dev/null +++ b/test/Logs/MethodofMorris.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:51 | Build and Run | Test Broken + Expression: built +2023-10-11 03:01:13 | Build and Run | Test Broken + Expression: built diff --git a/test/Logs/MultiStage.log b/test/Logs/MultiStage.log new file mode 100644 index 0000000000..8f0ff0bb7e --- /dev/null +++ b/test/Logs/MultiStage.log @@ -0,0 +1,3 @@ +2023-10-11 02:38:03 | 79734.8003171703 ± 1.0e-5, 41630.03494225143 ± 1.0e-5, 27855.20631474678 ± 1.0e-5 | Test Passed + Expression: all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) +2023-10-11 03:01:23 | 79734.80031717036 ± 1.0e-5, 41630.034942251485 ± 1.0e-5, 27855.206314746796 ± 1.0e-5 | Test Passed diff --git a/test/Logs/PiecewiseFuel_CO2.log b/test/Logs/PiecewiseFuel_CO2.log new file mode 100644 index 0000000000..7466c75b06 --- /dev/null +++ b/test/Logs/PiecewiseFuel_CO2.log @@ -0,0 +1,4 @@ +2023-10-11 02:36:57 | 2341.8230753008047 ± 1.0e-5 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(2341.8230753008047, 2341.8230753; atol = 1.0e-5) +2023-10-11 03:00:24 | 2341.8230753008047 ± 1.0e-5 | Test Passed diff --git a/test/Logs/VREStor.log b/test/Logs/VREStor.log new file mode 100644 index 0000000000..0c4a88778e --- /dev/null +++ b/test/Logs/VREStor.log @@ -0,0 +1,4 @@ +2023-10-11 02:37:34 | 92081.91504226513 ± 1.0e-5 | Test Passed + Expression: ≈(obj_test, obj_true, atol = optimal_tol) + Evaluated: ≈(92081.91504226513, 92081.915042; atol = 1.0e-5) +2023-10-11 03:00:57 | 92081.91504226513 ± 1.0e-5 | Test Passed From 6c8ea5119519f71e585e86318c67f9d2ad82866a Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Sat, 7 Oct 2023 18:48:35 -0400 Subject: [PATCH 04/16] Add tests for seven modules. Include GH workflow. --- test/VREStor/Network.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/VREStor/Network.csv b/test/VREStor/Network.csv index 2230639ba4..1a7000a3b6 100644 --- a/test/VREStor/Network.csv +++ b/test/VREStor/Network.csv @@ -1,4 +1,4 @@ Network_zones,Network_Lines,Start_Zone,End_Zone,Line_Max_Flow_MW,Line_Min_Flow_MW,transmission_path_name,Line_Reinforcement_Cost_per_MWyr,Line_Reinforcement_Cost_per_MW,Line_Loss_Percentage,Line_Max_Reinforcement_MW,DerateCapRes_1,CapRes_Excl_1,DerateCapRes_2,CapRes_Excl_2,DerateCapRes_3,CapRes_Excl_3 z1,1.0,1,2,820.0,820.0,EIC_to_TRE,45958.0,948772.0,0.0649,410.0,0.95,0.0,0.95,0.0,0.95,0.0 z2,2.0,1,3,1830.0,1830.0,EIC_to_WECC,71600.0,1478140.0,0.1001,915.0,0.95,0.0,0.95,0.0,0.95,0.0 -z3,,,,,,,,,,,,,,,, \ No newline at end of file +z3,,,,,,,,,,,,,,,, From a313133d2062fe53469d0bfcb8756a93bd39bac8 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Fri, 13 Oct 2023 17:45:25 -0400 Subject: [PATCH 05/16] Add rounding to the objective func value in the tests --- test/test_VREStor.jl | 3 +++ test/test_electrolyzer.jl | 3 +++ test/test_multistage.jl | 3 +++ test/test_piecewisefuel_CO2.jl | 3 +++ test/test_threezones.jl | 3 +++ test/test_utilities.jl | 39 ++++++++++++++++++++++++++++++++++ 6 files changed, 54 insertions(+) create mode 100644 test/test_utilities.jl diff --git a/test/test_VREStor.jl b/test/test_VREStor.jl index 1e9f62583a..9016b5be8b 100644 --- a/test/test_VREStor.jl +++ b/test/test_VREStor.jl @@ -27,6 +27,9 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "dual_feasibility_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance +# Round the objective value to the same number of digits as the tolerance +obj_test = round_objfromtol!(obj_test, optimal_tol) + # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_electrolyzer.jl b/test/test_electrolyzer.jl index 6472cbf96e..497938a4ac 100644 --- a/test/test_electrolyzer.jl +++ b/test/test_electrolyzer.jl @@ -25,6 +25,9 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "ipm_optimality_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance +# Round the objective value to the same number of digits as the tolerance +obj_test = round_objfromtol!(obj_test, optimal_tol) + # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_multistage.jl b/test/test_multistage.jl index ea7f1b646b..97afebf502 100644 --- a/test/test_multistage.jl +++ b/test/test_multistage.jl @@ -40,6 +40,9 @@ optimal_tol_rel = ) optimal_tol = optimal_tol_rel .* obj_test # Convert to absolute tolerance +# Round the objective value to the same number of digits as the tolerance +obj_test = round_objfromtol!.(obj_test, optimal_tol) + # Test the objective value test_result = @test all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) diff --git a/test/test_piecewisefuel_CO2.jl b/test/test_piecewisefuel_CO2.jl index d7d0e8e2c8..b285373462 100644 --- a/test/test_piecewisefuel_CO2.jl +++ b/test/test_piecewisefuel_CO2.jl @@ -21,6 +21,9 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "dual_feasibility_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance +# Round the objective value to the same number of digits as the tolerance +obj_test = round_objfromtol!(obj_test, optimal_tol) + # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_threezones.jl b/test/test_threezones.jl index 4489d4487b..adcbe94413 100644 --- a/test/test_threezones.jl +++ b/test/test_threezones.jl @@ -26,6 +26,9 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "ipm_optimality_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance +# Round the objective value to the same number of digits as the tolerance +obj_test = round_objfromtol!(obj_test, optimal_tol) + # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_utilities.jl b/test/test_utilities.jl new file mode 100644 index 0000000000..38ef32de0a --- /dev/null +++ b/test/test_utilities.jl @@ -0,0 +1,39 @@ +module TestUtilities + +using Test + +include(joinpath(@__DIR__, "utilities.jl")) + +@testset "get_exponent_sciform" begin + @test get_exponent_sciform(0) == 0 + @test get_exponent_sciform(0.005) == -3 + @test get_exponent_sciform(0.0531) == -2 + @test get_exponent_sciform(1) == 0 + @test get_exponent_sciform(1.0000) == 0 + @test get_exponent_sciform(1.0005) == 0 + @test get_exponent_sciform(64.000) == 1 + @test get_exponent_sciform(64.03) == 1 + @test get_exponent_sciform(100) == 2 +end + +@testset "round_objfromtol" begin + @test round_objfromtol!(0, 0) == 0 + @test round_objfromtol!(0.005, 1) == 0 + @test round_objfromtol!(0.005, 0.1) == 0.0 + @test round_objfromtol!(0.005, 0.01) == 0.0 + @test round_objfromtol!(0.005, 0.001) == 0.005 + @test round_objfromtol!(0.005, 0.0001) == 0.005 + @test round_objfromtol!(1.005, 1) == 1 + @test round_objfromtol!(1.005, 0.1) == 1.0 + @test round_objfromtol!(1.005, 0.01) == 1.0 + @test round_objfromtol!(1.005, 0.001) == 1.005 + @test round_objfromtol!(2.006, 0.01) == 2.01 + @test round_objfromtol!(10.65, 10) == 10 + @test round_objfromtol!(10.65, 1) == 11 + @test round_objfromtol!(10.65, 0.1) == 10.6 + @test round_objfromtol!(10.65, 0.01) == 10.65 + @test round_objfromtol!(10.65, 0.001) == 10.65 +end + + +end # module TestUtilities \ No newline at end of file From 86256528e4a95f758a1d7eed8a0fe40a03f03bd1 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Fri, 13 Oct 2023 17:47:52 -0400 Subject: [PATCH 06/16] Removed deprecated setup field --- test/test_methodofmorris.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_methodofmorris.jl b/test/test_methodofmorris.jl index c852054a90..bcf39cc5ff 100644 --- a/test/test_methodofmorris.jl +++ b/test/test_methodofmorris.jl @@ -8,7 +8,6 @@ test_path = "MethodofMorris" # Define test inputs genx_setup = Dict( - "MacOrWindows" => "Mac", "PrintModel" => 0, "NetworkExpansion" => 0, "Trans_Loss_Segments" => 1, From d60ab93bb48442288e2c5f47f1ef370343af954a Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Fri, 13 Oct 2023 17:48:32 -0400 Subject: [PATCH 07/16] Change GH action to push to ext repo --- .github/workflows/ci.yml | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bc80496f79..4c61e30737 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,19 +25,19 @@ jobs: - x64 steps: - uses: actions/checkout@v3 - - name: Create a new branch for test logs + - name: Create a new branch and pull test logs from repo run: | - if [[ ${{ matrix.version }} == '1' ]]; then - git config --local user.name lbonaldo - git config --local user.email "39280783+lbonaldo@users.noreply.github.com" - git checkout -b ${GITHUB_REF#refs/heads/}-testlogs - git ls-remote --exit-code --heads origin ${GITHUB_REF#refs/heads/}-testlogs - if [ "$?" == "2" ] ; then # exit-code 2 if the branch doesn't exist - echo "Branch doesn't exist. Skip fetching." - else # if a branch exists, fetch it - git fetch origin ${GITHUB_REF#refs/heads/}-testlogs - git cherry-pick $(git log -n 1 origin/${GITHUB_REF#refs/heads/}-testlogs --pretty=format:"%H") - fi + git checkout -b ${GITHUB_REF#refs/heads/}-testlogs + mkdir test/Logs; cd test/Logs + git init + git config --local user.name GenXProject + git config --local user.email "84470580+GenXProject@users.noreply.github.com" + git remote add testlog https://github.com/GenXProject/GenX-testlog.git + git pull testlog main + if [ -d Logs_v${{ matrix.version }} ]; then + mv Logs_v${{ matrix.version }}/*.log . + else + mkdir Logs_v${{ matrix.version }} fi - uses: julia-actions/setup-julia@v1 with: @@ -46,13 +46,12 @@ jobs: - uses: julia-actions/cache@v1 - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 - - name: Commit logs and push to repo # only for 1.x versions + - name: Commit logs and push back to repo run: | - if [[ ${{ matrix.version }} == '1' ]]; then - git add -f test/Logs - git commit -m "Update test logs" - git push -f origin ${GITHUB_REF#refs/heads/}-testlogs - fi + mv *.log Logs_v${{ matrix.version }} + git add -f Logs_v${{ matrix.version }} + git commit -m "Update test logs for Julia v${{ matrix.version }}" + git push testlog main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: julia-actions/julia-processcoverage@v1 From 1a48b89a09ac90882e8ce72c9bb53a07f8c8e810 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 16 Oct 2023 18:47:18 -0400 Subject: [PATCH 08/16] Update GH workflow --- .github/workflows/ci.yml | 9 +++++++-- test/Logs/Electrolyzer.log | 4 ---- test/Logs/MethodofMorris.log | 4 ---- test/Logs/MultiStage.log | 3 --- test/Logs/PiecewiseFuel_CO2.log | 4 ---- test/Logs/VREStor.log | 4 ---- 6 files changed, 7 insertions(+), 21 deletions(-) delete mode 100644 test/Logs/Electrolyzer.log delete mode 100644 test/Logs/MethodofMorris.log delete mode 100644 test/Logs/MultiStage.log delete mode 100644 test/Logs/PiecewiseFuel_CO2.log delete mode 100644 test/Logs/VREStor.log diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c61e30737..f8f5e46edb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,16 +29,19 @@ jobs: run: | git checkout -b ${GITHUB_REF#refs/heads/}-testlogs mkdir test/Logs; cd test/Logs + git config --global init.defaultBranch main git init git config --local user.name GenXProject git config --local user.email "84470580+GenXProject@users.noreply.github.com" - git remote add testlog https://github.com/GenXProject/GenX-testlog.git + git remote add testlog https://$LOG_TOKEN@github.com/GenXProject/GenX-testlog.git git pull testlog main if [ -d Logs_v${{ matrix.version }} ]; then mv Logs_v${{ matrix.version }}/*.log . else - mkdir Logs_v${{ matrix.version }} + mkdir Logs_v${{ matrix.version }} fi + env: + LOG_TOKEN: ${{ secrets.LOG_TOKEN }} - uses: julia-actions/setup-julia@v1 with: version: ${{ matrix.version }} @@ -48,9 +51,11 @@ jobs: - uses: julia-actions/julia-runtest@v1 - name: Commit logs and push back to repo run: | + cd ${GITHUB_WORKSPACE}/test/Logs mv *.log Logs_v${{ matrix.version }} git add -f Logs_v${{ matrix.version }} git commit -m "Update test logs for Julia v${{ matrix.version }}" + git pull --rebase testlog main # pull again to avoid conflicts from other versions git push testlog main env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/test/Logs/Electrolyzer.log b/test/Logs/Electrolyzer.log deleted file mode 100644 index 8f5798d275..0000000000 --- a/test/Logs/Electrolyzer.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:37 | 6946.981912630803 ± 0.0001 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(6946.981912630803, 6946.9819126; atol = 0.0001) -2023-10-11 03:01:00 | 6946.981912630803 ± 0.0001 | Test Passed diff --git a/test/Logs/MethodofMorris.log b/test/Logs/MethodofMorris.log deleted file mode 100644 index dd23446d99..0000000000 --- a/test/Logs/MethodofMorris.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:51 | Build and Run | Test Broken - Expression: built -2023-10-11 03:01:13 | Build and Run | Test Broken - Expression: built diff --git a/test/Logs/MultiStage.log b/test/Logs/MultiStage.log deleted file mode 100644 index 8f0ff0bb7e..0000000000 --- a/test/Logs/MultiStage.log +++ /dev/null @@ -1,3 +0,0 @@ -2023-10-11 02:38:03 | 79734.8003171703 ± 1.0e-5, 41630.03494225143 ± 1.0e-5, 27855.20631474678 ± 1.0e-5 | Test Passed - Expression: all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) -2023-10-11 03:01:23 | 79734.80031717036 ± 1.0e-5, 41630.034942251485 ± 1.0e-5, 27855.206314746796 ± 1.0e-5 | Test Passed diff --git a/test/Logs/PiecewiseFuel_CO2.log b/test/Logs/PiecewiseFuel_CO2.log deleted file mode 100644 index 7466c75b06..0000000000 --- a/test/Logs/PiecewiseFuel_CO2.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:36:57 | 2341.8230753008047 ± 1.0e-5 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(2341.8230753008047, 2341.8230753; atol = 1.0e-5) -2023-10-11 03:00:24 | 2341.8230753008047 ± 1.0e-5 | Test Passed diff --git a/test/Logs/VREStor.log b/test/Logs/VREStor.log deleted file mode 100644 index 0c4a88778e..0000000000 --- a/test/Logs/VREStor.log +++ /dev/null @@ -1,4 +0,0 @@ -2023-10-11 02:37:34 | 92081.91504226513 ± 1.0e-5 | Test Passed - Expression: ≈(obj_test, obj_true, atol = optimal_tol) - Evaluated: ≈(92081.91504226513, 92081.915042; atol = 1.0e-5) -2023-10-11 03:00:57 | 92081.91504226513 ± 1.0e-5 | Test Passed From 54a72c9ae096bc9e8db8c8f488bc47bdcf7fdbb1 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Tue, 17 Oct 2023 12:34:23 -0400 Subject: [PATCH 09/16] Fix permission on ci.yml --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f8f5e46edb..b4f3bffd90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,8 @@ jobs: - x64 steps: - uses: actions/checkout@v3 - - name: Create a new branch and pull test logs from repo + - name: Create a new branch and pull test logs from repo # only push logs if PR is not from a fork + if: ${{ ! github.event.pull_request.head.repo.fork }} run: | git checkout -b ${GITHUB_REF#refs/heads/}-testlogs mkdir test/Logs; cd test/Logs @@ -49,7 +50,8 @@ jobs: - uses: julia-actions/cache@v1 - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 - - name: Commit logs and push back to repo + - name: Commit logs and push back to repo # only push logs if PR is not from a fork + if: ${{ ! github.event.pull_request.head.repo.fork }} run: | cd ${GITHUB_WORKSPACE}/test/Logs mv *.log Logs_v${{ matrix.version }} @@ -57,8 +59,6 @@ jobs: git commit -m "Update test logs for Julia v${{ matrix.version }}" git pull --rebase testlog main # pull again to avoid conflicts from other versions git push testlog main - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: julia-actions/julia-processcoverage@v1 - uses: codecov/codecov-action@v3 with: From 7196222aa8a32c2fdbf3c555a3f911309742598e Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 30 Oct 2023 17:38:07 -0400 Subject: [PATCH 10/16] Refactor docs structure. Not deploying yet. --- .../SmallNewEngland/OneZone/Run.jl | 2 +- docs/Project.toml | 3 +- docs/make.jl | 90 ++- docs/src/TDR.md | 11 + docs/src/TDR_input.md | 24 + docs/src/TDR_overview.md | 13 + docs/src/additional_features.md | 12 - docs/src/commercial_solvers.md | 23 + docs/src/configure_multi_stage_inputs.md | 2 +- docs/src/documentation.md | 5 - docs/src/dual_dynamic_programming.md | 5 +- docs/src/endogenous_retirement.md | 6 + docs/src/examples_casestudies.md | 118 +++ docs/src/generate_alternatives.md | 15 + docs/src/how_to_run_genx.md | 140 ---- docs/src/index.md | 80 ++- docs/src/installation.md | 64 ++ docs/src/investment_multi_stage.md | 17 - docs/src/limitations_genx.md | 17 +- docs/src/load_generators_data_multi_stage.md | 5 - docs/src/load_inputs_multi_stage.md | 5 - docs/src/load_network_data_multi_stage.md | 5 - docs/src/maintenance.md | 15 +- docs/src/maintenance_overview.md | 96 +++ docs/src/methodofmorris.md | 5 + docs/src/methodofmorris_input.md | 31 + docs/src/methods.md | 136 ---- docs/src/mga.md | 5 + docs/src/model_configuration.md | 96 +++ .../{data_documentation.md => model_input.md} | 670 +++--------------- docs/src/model_notation.md | 246 +++---- docs/src/model_output.md | 155 ++++ ...model_overview.md => multi_stage_input.md} | 9 +- ..._stage_genx.md => multi_stage_overview.md} | 6 +- docs/src/policies.md | 21 +- docs/src/public_api.md | 7 + docs/src/resources.md | 9 + docs/src/retrofit.md | 5 + docs/src/running_TDR.md | 69 ++ docs/src/running_model.md | 35 + docs/src/slack_variables_overview.md | 51 +- docs/src/solver_configuration.md | 108 ++- docs/src/solver_configuration_api.md | 42 ++ docs/src/storage.md | 5 +- docs/src/unit_testing.md | 5 - docs/src/utility_functions.md | 6 + docs/src/workflow.md | 36 + docs/src/write_outputs.md | 35 +- src/GenX.jl | 3 - src/multi_stage/endogenous_retirement.jl | 2 +- src/simple_operation.jl | 6 - src/write_outputs/write_vre_stor.jl | 1 - 52 files changed, 1364 insertions(+), 1214 deletions(-) create mode 100644 docs/src/TDR.md create mode 100644 docs/src/TDR_input.md create mode 100644 docs/src/TDR_overview.md delete mode 100644 docs/src/additional_features.md create mode 100644 docs/src/commercial_solvers.md delete mode 100644 docs/src/documentation.md create mode 100644 docs/src/endogenous_retirement.md create mode 100644 docs/src/examples_casestudies.md create mode 100644 docs/src/generate_alternatives.md delete mode 100644 docs/src/how_to_run_genx.md create mode 100644 docs/src/installation.md delete mode 100644 docs/src/investment_multi_stage.md delete mode 100644 docs/src/load_generators_data_multi_stage.md delete mode 100644 docs/src/load_inputs_multi_stage.md delete mode 100644 docs/src/load_network_data_multi_stage.md create mode 100644 docs/src/maintenance_overview.md create mode 100644 docs/src/methodofmorris.md create mode 100644 docs/src/methodofmorris_input.md delete mode 100644 docs/src/methods.md create mode 100644 docs/src/mga.md create mode 100644 docs/src/model_configuration.md rename docs/src/{data_documentation.md => model_input.md} (59%) create mode 100644 docs/src/model_output.md rename docs/src/{multi_stage_model_overview.md => multi_stage_input.md} (98%) rename docs/src/{multi_stage_genx.md => multi_stage_overview.md} (63%) create mode 100644 docs/src/public_api.md create mode 100644 docs/src/resources.md create mode 100644 docs/src/retrofit.md create mode 100644 docs/src/running_TDR.md create mode 100644 docs/src/running_model.md create mode 100644 docs/src/solver_configuration_api.md delete mode 100644 docs/src/unit_testing.md create mode 100644 docs/src/utility_functions.md create mode 100644 docs/src/workflow.md diff --git a/Example_Systems/SmallNewEngland/OneZone/Run.jl b/Example_Systems/SmallNewEngland/OneZone/Run.jl index b44ca23ec1..7ce1891834 100644 --- a/Example_Systems/SmallNewEngland/OneZone/Run.jl +++ b/Example_Systems/SmallNewEngland/OneZone/Run.jl @@ -1,3 +1,3 @@ using GenX -run_genx_case!(dirname(@__FILE__)) +run_genx_case!(dirname(@__FILE__)) \ No newline at end of file diff --git a/docs/Project.toml b/docs/Project.toml index 8fa9639426..47a02ccab4 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,4 +1,5 @@ [deps] +DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" GenX = "5d317b1e-30ec-4ed6-a8ce-8d2d88d7cfac" -DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +Revise = "295af30f-e4ad-537b-8983-00126c2a3abe" diff --git a/docs/make.jl b/docs/make.jl index 48042b517c..ac7eedc4f0 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,8 +1,4 @@ -push!(LOAD_PATH,"../src/") -#=cd("../") -include(joinpath(pwd(), "package_activate.jl")) -genx_path = joinpath(pwd(), "src") -push!(LOAD_PATH, genx_path)=# +push!(LOAD_PATH, "../src/") import DataStructures: OrderedDict using GenX using Documenter @@ -13,18 +9,38 @@ push!(LOAD_PATH, genx_docpath) pages = OrderedDict( "Welcome Page" => [ "GenX: Introduction" => "index.md", - "Running GenX Cases" => "how_to_run_genx.md", - "Multi-Stage Capacity Expansion Planning with GenX" => "multi_stage_genx.md", + "Installation Guide" => "installation.md", "Limitation of GenX" => "limitations_genx.md", "Third Party Extensions" => "third_party_genx.md" ], + "Getting Started" => [ + "Running GenX" => "examples_casestudies.md", + "Commertial solvers" => "commercial_solvers.md", + ], + "User Guide" => [ + "Overall workflow" => "workflow.md", + "Model Configuration" => "model_configuration.md", + "Solver Configuration" => "solver_configuration.md", + "Model Inputs" => "model_input.md", + "TDR Inputs" => "TDR_input.md", + "Running the TDR" => "running_TDR.md", + "MGA package" => "generate_alternatives.md", + "Multi-stage Model" => "multi_stage_input.md", + "Method of Morris Inputs" => "methodofmorris_input.md", + "Running the Model" => "running_model.md", + "Model Outputs" => "model_output.md", + ], "Model Concept and Overview" => [ "Model Introduction" => "model_introduction.md", "Notation" => "model_notation.md", "Objective Function" => "objective_function.md", - "Power Balance" => "power_balance.md" + "Power Balance" => "power_balance.md", + "Slack Variables for Policies" => "slack_variables_overview.md", + "Maintenance" => "maintenance_overview.md", + "Time Domain Reduction" => "TDR_overview.md", + "Multi-Stage Modeling" => "multi_stage_overview.md", ], - "Model Function Reference" => [ + "Reference" => [ "Core" => "core.md", "Resources" => [ "Curtailable Variable Renewable" => "curtailable_variable_renewable.md", @@ -50,49 +66,51 @@ pages = OrderedDict( "Thermal No Commit" => "thermal_no_commit.md" ], "Hydrogen Electrolyzers" => "electrolyzers.md", + "Retrofit" => "retrofit.md", + "Resources API" => "resources.md", "Scheduled maintenance for various resources" => "maintenance.md", "Resource types" => "resource.md" ], - "Multi_stage" => [ - "Configure multi-stage inputs" => "configure_multi_stage_inputs.md", - "Model multi stage: Dual Dynamic Programming Algorithm" => "dual_dynamic_programming.md", - ], "Policies" => "policies.md", - "Slack Variables for Policies" => "slack_variables_overview.md", - ], - "Methods" => "methods.md", - "Solver Configurations" => "solver_configuration.md", - "Solving the Model" => "solve_model.md", - "Model Inputs/Outputs Documentation" => [ - "Single-stage Model" => "data_documentation.md", - "Multi-stage Model" => "multi_stage_model_overview.md", + "Solver Configurations" => "solver_configuration_api.md", + "Inputs Functions" => "load_inputs.md", + "Utility Functions" => "utility_functions.md", + "TDR" => "TDR.md", + "Multi-stage" => [ + "Configure multi-stage inputs" => "configure_multi_stage_inputs.md", + "Model multi stage: Dual Dynamic Programming Algorithm" => "dual_dynamic_programming.md", + "Endogenous Retirement" => "endogenous_retirement.md", + ], + "Public API" => "public_api.md", + "Solving the Model" => "solve_model.md", + "Outputs Functions" => "write_outputs.md", + "Modeling to Generate Alternatives" => "mga.md", + "Method of Morris" => "methodofmorris.md", ], - "GenX Inputs Functions" => "load_inputs.md", - "GenX Outputs Functions" =>"write_outputs.md", - "Additional Features" => "additional_features.md", "Third Party Extensions" => "additional_third_party_extensions.md", "Developer Docs" => "developer_guide.md", ) makedocs(; modules=[GenX], authors="Jesse Jenkins, Nestor Sepulveda, Dharik Mallapragada, Aaron Schwartz, Neha Patankar, Qingyu Xu, Jack Morris, Sambuddha Chakrabarti", - #repo="https://github.com/sambuddhac/GenX.jl/blob/{commit}{path}#{line}", sitename="GenX", format=Documenter.HTML(; prettyurls=get(ENV, "CI", "false") == "true", - canonical="https://genxproject.github.io/GenX/stable", + canonical="https://github.com/lbonaldo/GenX/stable", assets=String[], + collapselevel=1 ), pages=[p for p in pages] + # warnonly=true ) -deploydocs(; - repo="github.com/GenXProject/GenX.git", - target = "build", - branch = "gh-pages", - devbranch = "main", - devurl = "dev", - push_preview=true, - versions = ["stable" => "v^", "v#.#"], - forcepush = false, -) +# deploydocs(; +# repo="github.com/GenXProject/GenX.git", +# target = "build", +# branch = "gh-pages", +# devbranch = "main", +# devurl = "dev", +# push_preview=true, +# versions = ["stable" => "v^", "v#.#"], +# forcepush = false, +# ) diff --git a/docs/src/TDR.md b/docs/src/TDR.md new file mode 100644 index 0000000000..64c0021aba --- /dev/null +++ b/docs/src/TDR.md @@ -0,0 +1,11 @@ +# Time Domain Reduction (TDR) + +```@autodocs +Modules = [GenX] +Pages = ["time_domain_reduction.jl"] +Order = [:type, :function] +``` + +```@docs +GenX.run_timedomainreduction! +``` \ No newline at end of file diff --git a/docs/src/TDR_input.md b/docs/src/TDR_input.md new file mode 100644 index 0000000000..4c4b9c34f6 --- /dev/null +++ b/docs/src/TDR_input.md @@ -0,0 +1,24 @@ +# Time-domain reduction + +Modeling grid operations for each hour of the year can be computationally expensive for models with many zones and resources. Time-domain reduction is often employed in capacity expansion models as a way to balance model spatial and temporal resolution as well as representation of dispatch, while ensuring reasonable computational times. GenX allows the option of performing time-domain reduction on the user supplied time-series input data to produce a representative time series at the desired level of temporal resolution. The below table summarizes the list of parameters to be specified by the user to perform the time domain reduction implemented in GenX. These parameters are passed to GenX via the YAML file `time_domain_reduction_settings.yml`. + +**Structure of the time\_domain\_reduction.yml file** + +|**Key** | **Description**| +| :------------ | :-----------| +|Timesteps\_per\_period | The number of timesteps (e.g., hours) in each representative period (i.e. 168 for weeks, 24 for days, 72 for three-day periods, etc).| +|UseExtremePeriods | 1 = Include outliers (by performance or demand/resource extreme) as their own representative extreme periods. This setting automatically includes periods based on criteria outlined in the dictionary `ExtremePeriods`. Extreme periods can be selected based on following criteria applied to demand profiles or solar and wind capacity factors profiles, at either the zonal or system level. A) absolute (timestep with min/max value) statistic (minimum, maximum) and B) integral (period with min/max summed value) statistic (minimum, maximum). For example, the user could want the hour with the most demand across the whole system to be included among the extreme periods. They would select Demand, System, Absolute, and Max.| +||0 = Do not include extreme periods.| +|ExtremePeriods | If **UseExtremePeriods = 1**, use this dictionary to select which types of extreme periods to use. Select by profile type (Demand, PV, or Wind), geography (Zone or System), grouping by timestep or by period (Absolute or Integral), and statistic (Maximum or Minimum).| +|ClusterMethod |Either `kmeans` or `kmedoids`, the method used to cluster periods and determine each time step's representative period.| +|ScalingMethod |Either `N` or `S`, the decision to normalize ([0,1]) or standardize (mean 0, variance 1) the input data prior to clustering.| +|MinPeriods |The minimum number of representative periods used to represent the input data. If using UseExtremePeriods, this must be greater or equal to the number of selected extreme periods. If `IterativelyAddPeriods` is off, this will be the total number of representative periods.| +|MaxPeriods| The maximum number of representative periods - both clustered and extreme - that may be used to represent the input data.| +|IterativelyAddPeriods |1 = Add representative periods until the error threshold between input data and represented data is met or the maximum number of representative periods is reached.| +||0 = Use only the minimum number of representative periods. This minimum value includes the selected extreme periods if `UseExtremePeriods` is on.| +|Threshold |Iterative period addition will end if the period farthest from its representative period (as measured using Euclidean distance) is within this percentage of the total possible error (for normalization) or 95% of the total possible error (± 2 σ for standardization). E.g., for a threshold of 0.01, each period must be within 1% of the spread of possible error before the clustering iterations will terminate (or until the maximum is reached).| +|IterateMethod | Either ‘cluster' (Default) or ‘extreme', whether to increment the number of clusters to the kmeans/kmedoids method or to set aside the worst-fitting periods as a new extreme periods.| +|nReps |Default = 200, the number of kmeans/kmedoids repetitions at the same setting.| +|DemandWeight| Default = 1, a multiplier on demand columns to optionally prioritize better fits for demand profiles over resource capacity factor or fuel price profiles.| +|WeightTotal |Default = 8760, the sum to which the relative weights of representative periods will be scaled.| +|ClusterFuelPrices| Either 1 or 0, whether or not to use the fuel price time series in `Fuels_data.csv` in the clustering process. If 'no', this function will still write `Fuels_data.csv` in the TimeDomainReductionFolder with reshaped fuel prices based on the number and size of the representative periods but will not use the fuel price time series for selection of representative periods.| diff --git a/docs/src/TDR_overview.md b/docs/src/TDR_overview.md new file mode 100644 index 0000000000..74de9b3364 --- /dev/null +++ b/docs/src/TDR_overview.md @@ -0,0 +1,13 @@ +# Time Domain Reduction (TDR) + +Rather than modeling and optimizing power grid operations at a high temporal resolution (e.g., hourly, over a full year) while evaluating new capacity investments, which can be computationally expensive for large-scale studies with several resources, it may be useful to consider a reduced temporal resolution to model annual grid operations. +Such a time-domain reduction is often employed in capacity expansion models as a way to balance model spatial and temporal resolution as well as representation of dispatch, while ensuring reasonable computational times. +The time-domain reduction method provided allows the user to automate these features while specifying the various parameters of the time-domain reduction 'clustering' algorithm to be used in formulating the resulting optimization model. + +### Running a case with Time Domain Reduction + +There are two ways to run a case with a reduced (e.g. less than full-year) temporal resolution. +1. Let GenX perform the time domain reduction before optimizing. +2. Bring your own clustered data + +It's also possible for GenX perform clustering separately from the optimization task. Check out the [Running the TDR](@ref) section for more information. \ No newline at end of file diff --git a/docs/src/additional_features.md b/docs/src/additional_features.md deleted file mode 100644 index acbfdd22b4..0000000000 --- a/docs/src/additional_features.md +++ /dev/null @@ -1,12 +0,0 @@ -# Additional Features - -## Modeling to Generate Alternatives -```@autodocs -Modules = [GenX] -Pages = ["modeling_to_generate_alternatives.jl"] -``` -## Method of Morris -```@autodocs -Modules = [GenX] -Pages = ["method_of_morris.jl"] -``` diff --git a/docs/src/commercial_solvers.md b/docs/src/commercial_solvers.md new file mode 100644 index 0000000000..a27b653664 --- /dev/null +++ b/docs/src/commercial_solvers.md @@ -0,0 +1,23 @@ +## Using commercial solvers: Gurobi or CPLEX + +If you want to use the commercial solvers Gurobi or CPLEX: + +- Make sure you have a valid license and the actual solvers for either of Gurobi or CPLEX installed on your machine +- Add Gurobi or CPLEX to the Julia Project. + +``` +$ julia --project=/home/youruser/GenX + +julia> +(GenX) pkg> add Gurobi +-or- +(GenX) pkg> add CPLEX +``` +```@meta +#TODO: Add instructions for adding Gurobi or CPLEX to the Julia Project with the new PR. +``` + +- Set the appropriate solver in the genx_settings.yml file of your case + +!!! warning "Warning" + Note that if you have not already installed the required Julia packages or you do not have a valid Gurobi license on your host machine, you will receive an error message and Run.jl will not run to completion. \ No newline at end of file diff --git a/docs/src/configure_multi_stage_inputs.md b/docs/src/configure_multi_stage_inputs.md index ae1c6f3e98..05b5120e2c 100644 --- a/docs/src/configure_multi_stage_inputs.md +++ b/docs/src/configure_multi_stage_inputs.md @@ -1,4 +1,4 @@ -# configure multi stage inputs +# Configure multi stage inputs ```@autodocs Modules = [GenX] Pages = ["configure_multi_stage_inputs.jl"] diff --git a/docs/src/documentation.md b/docs/src/documentation.md deleted file mode 100644 index 02c1f9ab04..0000000000 --- a/docs/src/documentation.md +++ /dev/null @@ -1,5 +0,0 @@ -# Documentation -```@autodocs -Modules = [GenX] -Pages = ["documentation.jl"] -``` \ No newline at end of file diff --git a/docs/src/dual_dynamic_programming.md b/docs/src/dual_dynamic_programming.md index ca999976f3..27fa03bc72 100644 --- a/docs/src/dual_dynamic_programming.md +++ b/docs/src/dual_dynamic_programming.md @@ -2,7 +2,4 @@ ```@autodocs Modules = [GenX] Pages = ["dual_dynamic_programming.jl"] -``` - -## Suggested Reading -The solution strategy implemented for solving the multi-stage investment planning model follows the decomposition algorithm described in [Lara et al, Deterministic electric power infrastructure planning: Mixed-integer programming model and nested decomposition algorithm, European Journal of Operations Research, 271(3), 1037-1054, 2018](https://www.sciencedirect.com/science/article/pii/S0377221718304466). The decomposition algorithm adapts previous nested Benders methods by handling integer and continuous state variables, although at the expense of losing its finite convergence property due to potential duality gap. \ No newline at end of file +``` \ No newline at end of file diff --git a/docs/src/endogenous_retirement.md b/docs/src/endogenous_retirement.md new file mode 100644 index 0000000000..84b44db745 --- /dev/null +++ b/docs/src/endogenous_retirement.md @@ -0,0 +1,6 @@ +# Endogenous Retirement + +```@autodocs +Modules = [GenX] +Pages = ["endogenous_retirement.jl"] +``` \ No newline at end of file diff --git a/docs/src/examples_casestudies.md b/docs/src/examples_casestudies.md new file mode 100644 index 0000000000..0aabdc7d3a --- /dev/null +++ b/docs/src/examples_casestudies.md @@ -0,0 +1,118 @@ +# Running GenX + +This section describes how to run GenX with the examples provided in the repository and with user-defined cases. To have a deeper understanding of how to structure the input files and the settings, please refer to the [GenX Inputs](@ref) and [Model settings parameters](@ref) sections of the [User Guide](@ref). + +## GenX examples and case studies +GenX repository contains several examples to get you started with GenX. These examples are located in the [Example_Systems](https://github.com/GenXProject/GenX/tree/main/Example_Systems) folder of the repository and are designed to be easy to run and to demonstrate the main features of GenX. + +The available examples are: + +- SmallNewEngland +- RealSystemExample +- RetrofitExample +- MethodofMorrisExample +- Input_data_explained + +### Running an example + +!!! note "Note" + The following instructions assume that you have already installed GenX and its dependencies. If you haven't, please follow the instructions in the [Installation Guide](@ref). + +Each example folder contains a set of `.csv` files for the inputs of GenX, a `Settings` folder for the configuration of the model and the solver, and a `Run.jl` file that can be used to run each example. For instance, to run the `SmallNewEngland` example with a single zone, follow these steps: +1. Open a terminal and navigate to the `GenX` repository. +2. Run the following command: +``` +$ julia --project Example_Systems/SmallNewEngland/OneZone/Run.jl` +``` +This command will run the `Run.jl` file located in the `Example_Systems/SmallNewEngland/OneZone` folder. The `--project` flag tells Julia to activate the environment defined in the `Project.toml` file located in the `GenX` folder. This file contains the correct list dependencies to run GenX. The `Run.jl` file will read the inputs of GenX from the `.csv` files located in the `Example_Systems/SmallNewEngland/OneZone` folder and will write the results in a `Results` folder located in the same directory as `Run.jl`. + +!!! tip "Tip" + Running the command + ``` + $ julia --project Example_Systems/SmallNewEngland/OneZone/Run.jl` + ``` + from the `GenX` folder is equivalent to open a Julia REPL and call the `Run.jl` file using the `include` function: + ``` + $ julia --project + julia> include("Example_Systems/SmallNewEngland/OneZone/Run.jl") + ``` + The second option is recommended if you want to run GenX multiple times with different settings because it avoids the overhead of recompiling the code every time you run it. + +To run an example from a different directory, you can use the following command: + +``` +$ julia --project="/path/to/GenX" /path/to/GenX/Example_Systems/SmallNewEngland/OneZone/Run.jl` +``` +where `/path/to/GenX` is the path to the `GenX` repository. + +!!! note "Note" + The default solver for GenX is [HiGHS](https://github.com/jump-dev/HiGHS.jl). + +For more information on what happens when you run a GenX case, see the [Running GenX](@ref) section. + +## Running GenX with user-defined cases +To run GenX with a user-defined case, you need to create a folder `MyCase` with the following structure: +``` +MyCase +├── Demand_data.csv +├── Energy_share_requirements.csv +├── Fuel_data.csv +├── Generators_data.csv +├── Generators_variability.csv +[...] # Other input files +├── Settings +│ ├── genx_settings.yml # GenX settings +│ ├── [solver_name]_settings.yml # Solver settings +| [optional] +│ ├── multi_stage_settings.yml # Multi-stage settings +│ └── time_domain_reduction.yml # Time-domain clustering settings +└── Run.jl +``` +where `MyCase` is the name of the folder of the case. The `Run.jl` file is the entry point for running GenX and it should contain the following code: +```julia +using GenX +run_genx_case!(dirname(@__FILE__)) +``` +To run the case, open a terminal and run the following command: +``` +$ julia --project="/path/to/GenX" /path/to/MyCase/Run.jl +``` +where `/path/to/GenX` is the path to the `GenX` repository, and `/path/to/MyCase` is the path to the folder of the `MyCase` case. +Alternatively, you can run the case from a Julia REPL: +``` +$ julia --project="/path/to/GenX" +julia> include("/path/to/MyCase/Run.jl") +``` + +## What happens when you run a case +*Added in 0.3.4* + +The entry point for running a GenX case is the `run_genx_case!("path/to/case")` function, where `path/to/case` is the path to the case directory that contains the `.csv` files with the inputs for GenX and the `Settings` folder with the configuration files. + +The following are the main steps performed in that function: + +1. Establish path to environment setup files and GenX source files. +2. Read in model settings `genx_settings.yml` from the example directory. +3. Configure solver settings. +4. Load the model inputs from the example directory and perform time-domain clustering if required. +5. Generate a GenX model instance. +6. Solve the model. +7. Write the output files to a specified directory. + +After the script runs to completion, results will be written to a folder called `Results`, located in the current working directory. + +## Additional method for running GenX cases +Added in 0.3.4 + +An alternative method for running GenX cases is to use the `run_genx_case!` function directly from a Julia REPL. This is particularly useful if one wants to run multiple GenX cases in sequence, as GenX needs only to be compiled by Julia once, and can be somewhat faster. + +Start Julia pointed at the GenX environment, and then proceed as follows: + +``` +$ julia --project=/path/to/GenX + +julia> using GenX + +julia> run_genx_case!("/path/to/case") +``` +where `/path/to/case` is the path to the case directory that contains the `.csv` files with the inputs for GenX and the `Settings` folder with the configuration files. All output will be written in that case's folder, as usual. Examples can be run in this way as well by using the path to the example directory in place of `/path/to/case`. diff --git a/docs/src/generate_alternatives.md b/docs/src/generate_alternatives.md new file mode 100644 index 0000000000..580629af75 --- /dev/null +++ b/docs/src/generate_alternatives.md @@ -0,0 +1,15 @@ +## Running Modeling to Generate Alternatives with GenX + +GenX includes a modeling to generate alternatives (MGA) package that can be used to automatically enumerate a diverse set of near cost-optimal solutions to electricity system planning problems. To use the MGA algorithm, user will need to perform the following tasks: + +1. Add a `Resource_Type` column in all the resource `.csv` files denoting the type of each technology. +2. Add a `MGA` column in all the resource `.csv` files denoting the availability of the technology. +3. Set the `ModelingToGenerateAlternatives` flag in the `GenX_Settings.yml` file to 1. +4. Set the `ModelingtoGenerateAlternativeSlack` flag in the `GenX_Settings.yml` file to the desirable level of slack. +5. Create a `Rand_mga_objective_coefficients.csv` file to provide random objective function coefficients for each MGA iteration. + +For each iteration, number of rows in the `Rand_mga_objective_coefficients`.csv file represents the number of distinct technology types while number of columns represent the number of model zones. + +Solve the model using `Run.jl` file. + +Results from the MGA algorithm would be saved in MGA_max and MGA_min folders in the `Example_Systems/` folder. \ No newline at end of file diff --git a/docs/src/how_to_run_genx.md b/docs/src/how_to_run_genx.md deleted file mode 100644 index c27640509f..0000000000 --- a/docs/src/how_to_run_genx.md +++ /dev/null @@ -1,140 +0,0 @@ -# Requirements - -GenX currently exists in version 0.3.6 and runs only on Julia v1.5.x, 1.6.x, 1.7.x, 1.8.x, and 1.9.x, where x>=0 and a minimum version of JuMP v1.1.1. We recommend the users to either stick to a particular version of Julia to run GenX. If however, the users decide to switch between versions, it's very important to delete the old Manifest.toml file and do a fresh build of GenX when switching between Julia versions. -For those users who has previously cloned GenX, and has been running it successfully so far, -and therefore might be unwilling to run it on the latest version of Julia: -please look into the GitHub branch, [old_version](https://github.com/GenXProject/GenX/tree/old_version). -It is currently setup to use one of the following open-source freely available solvers: -(A) the default solver: [HiGHS](https://github.com/jump-dev/HiGHS.jl) for linear programming and MILP, -(B) [Clp](https://github.com/jump-dev/Clp.jl) for linear programming (LP) problems, -(C) [Cbc](https://github.com/jump-dev/Cbc.jl) for mixed integer linear programming (MILP) problems -We also provide the option to use one of these two commercial solvers: -(D) [Gurobi](https://www.gurobi.com), or -(E) [CPLEX](https://www.ibm.com/analytics/cplex-optimizer). -Note that using Gurobi and CPLEX requires a valid license on the host machine. -There are two ways to run GenX with either type of solver options (open-source free or, licensed commercial) as detailed in the section, `Running an Instance of GenX`. - -The file `Project.toml` in the parent directory lists all of the packages and their versions needed to run GenX. -You can see all of the packages installed in your Julia environment and their version numbers by running `pkg> status` on the package manager command line in the Jula REPL. - -## Documentation - -Detailed documentation for GenX can be found [here](https://genxproject.github.io/GenX/dev). -It includes details of each of GenX's methods, required and optional input files, and outputs. -Interested users may also want to browse through [prior publications](https://energy.mit.edu/genx/#publications) that have used GenX to understand the various features of the tool. - -## Running an Instance of GenX -1. Download or clone the GenX repository on your machine. -For this tutorial it will be assumed to be within your home directory: `/home/youruser/GenX`. -### Creating the Julia environment and installing dependencies -2. Start a terminal and navigate into the `GenX` folder. -3. Type `julia --project=.` to start an instance of the `julia` kernel with the `project` set to the current folder. - The `.` indicates the current folder. On Windows the location of Julia can also be specified as e.g., 'C:\julia-1.6.0\bin\julia.exe --project=.' - - If it's your first time running GenX (or, if you have pulled after some major upgrades/release/version) execute steps 3-6. - -4. Type `]` to bring up the package system `(GenX) pkg >` prompt. This indicates that the GenX project was detected. If you see `(@v1.6) pkg>` as the prompt, then the `project` was not successfully set. -5. Type `instantiate` from the `(GenX) pkg` prompt. - On Windows there is an issue with the prepopulated MUMPS_seq_jll v5.5.1 that prevents compilation of the solvers. To avoid this issue type 'add MUMPS_seq_jll@5.4.1' after running instantiate. -6. Type `st` to check that the dependecies have been installed. If there is no error, it has been successful. -7. Type the back key to come back to the `julia>` prompt. - - These steps can be skipped on subsequent runs. - - Steps 2-5 are shown in Figure 1 and Steps 6-8 are shown in Figure 2. - - ![Creating the Julia environment and installing dependencies: Steps 2-7](assets/GenX_setup_tutorial_part_1.png) - *Figure 1. Creating the Julia environment and installing dependencies from Project.toml file from inside the GenX folder: Steps 2-5* - -8. Since we have already started Julia, we can run a case by executing the command `julia> include(“/Run.jl”)`. - -For example, in order to run the OneZone case within the `Example_Systems/SmallNewEngland` folder, -type `include("Example_Systems/SmallNewEngland/OneZone/Run.jl")` from the `julia>` prompt. - -![Creating the Julia environment and installing dependencies: Steps 6-8](assets/GenX_setup_tutorial_part_2.png) -*Figure 2. Creating the Julia environment and installing dependencies from Project.toml file from inside the GenX folder: Steps 6-8* - -After the script runs to completion, results will be written to a folder called “Results”, located in the same directory as `Run.jl`. - -### Running a case - -Once Steps 1-6 have been performed, a case can be run from the terminal in a single line. -There's no need to be in a certain folder to run a case, but it is required to point `julia` to the project that you created. - -For example, from inside the `GenX` folder: -`/home/youruser/GenX > julia --project=. /home/youruser/GenX/Example_Systems/SmallNewEngland/OneZone/Run.jl` - -Or from another folder - -`/arbitrary/location > julia --project="/home/youruser/GenX" /home/youruser/GenX/Example_Systems/SmallNewEngland/OneZone/Run.jl` - -In fact, a best practice is to place your cases outside of the GenX repository: - -`/arbitrary/location > julia --project="/home/youruser/GenX" /your/custom/case/Run.jl` - -### What happens when you run a case - -The Run.jl file in each of the example systems calls a function `run_genx_case!("path/to/case")` which is suitable for capacity expansion modeling of several varieties. -The following are the main steps performed in that function: - -1. Establish path to environment setup files and GenX source files. -2. Read in model settings `genx_settings.yml` from the example directory. -3. Configure solver settings. -4. Load the model inputs from the example directory and perform time-domain clustering if required. -5. Generate a GenX model instance. -6. Solve the model. -7. Write the output files to a specified directory. - -If your needs are more complex, it is possible to use a customized run script in place of simply calling `run_genx_case!`; the contents of that function could be a starting point. - -## Using commercial solvers: Gurobi or CPLEX -If you want to use the commercial solvers Gurobi or CPLEX: - -1. Make sure you have a valid license and the actual solvers for either of Gurobi or CPLEX installed on your machine -2. Add Gurobi or CPLEX to the Julia Project. - -``` -> julia --project=/home/youruser/GenX - -julia> -(GenX) pkg> add Gurobi --or- -(GenX) pkg> add CPLEX -``` -3. At the beginning of the `GenX/src/GenX.jl` file, uncomment `using Gurobi` and/or `using CPLEX`. -4. Set the appropriate solver in the `genx_settings.yml` file of your case - -Note that if you have not already installed the required Julia packages or you do not have a valid Gurobi license on your host machine, you will receive an error message and Run.jl will not run to completion. - - -## Running Modeling to Generate Alternatives with GenX -GenX includes a modeling to generate alternatives (MGA) package that can be used to automatically enumerate a diverse set of near cost-optimal solutions to electricity system planning problems. To use the MGA algorithm, user will need to perform the following tasks: - -1. Add a `Resource_Type` column in all the resource `.csv` files denoting the type of each technology. -2. Add a `MGA` column in all the resource `.csv` files denoting the availability of the technology. -3. Set the `ModelingToGenerateAlternatives` flag in the `GenX_Settings.yml` file to 1. -4. Set the `ModelingtoGenerateAlternativeSlack` flag in the `GenX_Settings.yml` file to the desirable level of slack. -5. Create a `Rand_mga_objective_coefficients.csv` file to provide random objective function coefficients for each MGA iteration. - For each iteration, number of rows in the `Rand_mga_objective_coefficients.csv` file represents the number of distinct technology types while number of columns represent the number of model zones. -6. Solve the model using `Run.jl` file. - -Results from the MGA algorithm would be saved in `MGA_max` and `MGA_min` folders in the `Example_Systems/` folder. - -## Additional method for running GenX cases -_Added in 0.3.4_ - -The `GenX` module exports a function called `run_genx_case!`. -This function is designed to be used in a script; in fact it is used in each `Run.jl` file. -If one wants to run multiple GenX cases in sequence, this can be especially useful, as `GenX` needs only to be compiled by Julia once, and can be somewhat faster. - - -Start julia pointed at the appropriate Project, and then proceed as follows: -``` -> julia --project=/home/youruser/GenX - -julia> using GenX - -julia> run_genx_case!("/path/to/case") -``` -All output will be written in that case's folder, as usual. - diff --git a/docs/src/index.md b/docs/src/index.md index 29e54bf482..c5a094a620 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,10 +1,7 @@ # GenX Documentation +Welcome to the GenX documentation! -```@meta -CurrentModule = GenX -``` - -## Overview +## What is GenX? GenX is a highly-configurable, [open source](https://github.com/GenXProject/GenX/blob/main/LICENSE) electricity resource capacity expansion model that incorporates several state-of-the-art practices in electricity system planning to offer improved decision support for a changing electricity landscape. @@ -12,10 +9,79 @@ The model was [originally developed](https://energy.mit.edu/publication/enhanced GenX is a constrained linear or mixed integer linear optimization model that determines the portfolio of electricity generation, storage, transmission, and demand-side resource investments and operational decisions to meet electricity demand in one or more future planning years at lowest cost, while subject to a variety of power system operational constraints, resource availability limits, and other imposed environmental, market design, and policy constraints. -GenX features a modular and transparent code structure developed in [Julia](http://julialang.org/) + [JuMP](http://jump.dev/). The model is designed to be highly flexible and configurable for use in a variety of applications from academic research and technology evaluation to public policy and regulatory analysis and resource planning. Depending on the planning problem or question to be studied, GenX can be configured with varying levels of model resolution and scope, with regards to: (1) temporal resolution of time series data such as electricity demand and renewable energy availability; (2) power system operational detail and unit commitment constraints; and (3) geospatial resolution and transmission network representation. The model is also capable of representing a full range of conventional and novel electricity resources, including thermal generators, variable renewable resources (wind and solar), run-of-river, reservoir and pumped-storage hydroelectric generators, energy storage devices, demand-side flexibility, demand response, and several advanced technologies such as long-duration energy storage. +GenX features a modular and transparent code structure developed in [Julia](http://julialang.org/) + [JuMP](http://jump.dev/). The model is designed to be highly flexible and configurable for use in a variety of applications from academic research and technology evaluation to public policy and regulatory analysis and resource planning. See the **User Guide** for more information on how to use GenX. +```@meta +# and the **Developer Guide** for more information on how to contribute to GenX. +``` + +## Uses + +From a centralized planning perspective, the GenX model can help to determine the investments needed to supply future electricity demand at minimum cost, as is common in least-cost utility planning or integrated resource planning processes. In the context of liberalized markets, the model can be used by regulators and policy makers for indicative energy planning or policy analysis in order to establish a long-term vision of efficient market and policy outcomes. The model can also be used for techno-economic assessment of emerging electricity generation, storage, and demand-side resources and to enumerate the effect of parametric uncertainty (e.g., technology costs, fuel costs, demand, policy decisions) on the system-wide value or role of different resources. ## How to cite GenX We recommend users of GenX to cite it in their academic publications and patent filings. Here's the text to put up as the citation for GenX: -`MIT Energy Initiative and Princeton University ZERO lab. [GenX](https://github.com/GenXProject/GenX): a configurable power system capacity expansion model for studying low-carbon energy futures n.d. https://github.com/GenXProject/GenX +`MIT Energy Initiative and Princeton University ZERO lab. [GenX](https://github.com/GenXProject/GenX): a configurable power system capacity expansion model for studying low-carbon energy futures n.d. https://github.com/GenXProject/GenX. + +## Package Manual + +```@contents +Pages = ["running_genx.md", + "commercial_solvers.md", + "generate_alternatives.md", + "workflow.md", + "model_configuration.md", + "solver_configuration.md", + "model_input.md", + "TDR_input.md", + "running_TDR.md", + "multi_stage_input.md", + "methodofmorris_input.md", + "running_model.md", + "model_output.md", + "model_introduction.md", + "model_notation.md", + "objective_function.md", + "power_balance.md", + "slack_variables_overview.md", + "TDR_overview.md", + "multi_stage_overview.md", + "additional_third_party_extensions.md"] +Depth = 2 +``` + +## Index + +```@index +Pages = ["core.md", + "curtailable_variable_renewable.md", + "flexible_demand.md", + "hydro_res.md", + "hydro_inter_period_linkage.md", + "must_run.md", + "storage.md", + "investment_charge.md", + "investment_energy.md", + "long_duration_storage.md", + "storage_all.md", + "storage_asymmetric.md", + "storage_symmetric.md", + "vre_stor.md", + "thermal.md", + "thermal_commit.md", + "thermal_no_commit.md", + "electrolyzers.md", + "maintenance.md", + "policies.md", + "solver_configuration.md", + "load_inputs.md", + "TDR.md", + "configure_multi_stage_inputs.md", + "dual_dynamic_programming.md", + "solve_model.md", + "mga.md", + "methodofmorris.md", + "write_outputs.md"] +``` +## License \ No newline at end of file diff --git a/docs/src/installation.md b/docs/src/installation.md new file mode 100644 index 0000000000..6f51ec9915 --- /dev/null +++ b/docs/src/installation.md @@ -0,0 +1,64 @@ +# Installation Guide +This guide will walk you through the steps to install Julia, the GenX package, and the required dependencies to run GenX. + +## Installing Julia +GenX currently exists in version 0.3.6 and runs only on Julia v1.5.x, 1.6.x, 1.7.x, 1.8.x, and 1.9.x, where x>=0 and a minimum version of [JuMP](https://jump.dev/JuMP.jl/stable/) v1.1.1. To install Julia, please follow the instructions on the [Julia website](https://julialang.org/downloads/). + +!!! note "Note" + We recommend the users to stick to a particular version of Julia to run GenX. If however, the users decide to switch between versions, it's very important to delete the old `Manifest.toml` file and do a fresh build of GenX. + +## Downloading GenX and installing dependencies +After installing Julia, you can download GenX by either cloning the repository or downloading the zip file from the [GenX GitHub page](https://github.com/GenXProject/GenX). For this tutorial it will be assumed to be within your home directory: `/home/youruser/GenX`. +Once you have downloaded GenX, you can install the dependencies by following the steps below: + +1\. Start a terminal and navigate into the `GenX` folder. + +2\. Type `julia --project=.` to start an instance of the `julia` kernel with the `project` set to the current folder. The flag `--project=.` indicates that Julia will activate the project environment using the `Project.toml` present in the current folder, `.`. If running on Windows, the location of Julia can also be specified as e.g., `C:\julia-1.6.0\bin\julia.exe --project=.`. + +!!! tip "Tip" + The file `Project.toml` in the parent directory lists all of the dependencies and their versions needed to run GenX. You can see all of the packages installed in your Julia environment and their version numbers by running `pkg> status` or `pkg> st` on the package manager command line in the Jula REPL (for more information on the Julia package manager, read the documentation for the [Pkg.jl](https://pkgdocs.julialang.org/v1/environments/) or for the [Julia standard library](https://docs.julialang.org/en/v1/stdlib/Pkg/)). + +!!! tip "Tip" + `julia --project` is a shortcut for `julia --project=.` + +3\. Type `]` to bring up the package system `(GenX) pkg >` prompt. This indicates that the GenX project was detected. + +!!! warning "Warning" + If you see `(@v1.6) pkg>` as the prompt, then the `project` was not successfully set. + +4\. Type `instantiate` from the `(GenX) pkg` prompt. + +!!! note "Note for Windows users" + On Windows there is an issue with the prepopulated `MUMPS_seq_jll v5.5.1` that prevents compilation of the solvers. To avoid this issue type `add MUMPS_seq_jll@5.4.1` after running instantiate. + +5\. Type `st` to check that the dependecies have been installed. If there is no error, it has been successful. + +!!! tip "Tip" + Type the back key to come back to the `julia>` prompt from the package manager. + +The above steps are shown in Figure 1 and Figure 2. + +![Creating the Julia environment and installing dependencies: Steps 2-4](assets/GenX_setup_tutorial_part_1.png) +*Figure 1. Creating the Julia environment and installing dependencies from Project.toml file from inside the GenX folder.* + +![Creating the Julia environment and installing dependencies: Step 5](assets/GenX_setup_tutorial_part_2.png) +*Figure 2. Creating the Julia environment and installing dependencies from Project.toml file from inside the GenX folder: Step 5* + +## Installing solvers +GenX requires a solver to be installed to solve the optimization problem. By default, GenX uses one of the following open-source freely available solvers: + +1. [HiGHS](https://github.com/jump-dev/HiGHS.jl) for linear programming and MILP (default solver) +2. [Clp](https://github.com/jump-dev/Clp.jl) for linear programming (LP) problems +3. [Cbc](https://github.com/jump-dev/Cbc.jl) for mixed integer linear programming (MILP) problems + +We also provide the option to use one of these two commercial solvers: +4. [Gurobi](https://www.gurobi.com) +5. [CPLEX](https://www.ibm.com/analytics/cplex-optimizer). + +!!! note "Note on commercial solvers" + Using Gurobi and CPLEX requires a valid license on the host machine. + +## Notes on previous versions of GenX +For those users who has previously cloned GenX, and has been running it successfully so far, and therefore might be unwilling to run it on the latest version of Julia: please look into the GitHub branch, [old_version](https://github.com/GenXProject/GenX/tree/old_version). + + diff --git a/docs/src/investment_multi_stage.md b/docs/src/investment_multi_stage.md deleted file mode 100644 index a05a517318..0000000000 --- a/docs/src/investment_multi_stage.md +++ /dev/null @@ -1,17 +0,0 @@ -# Investment multi stage -```@autodocs -Modules = [GenX] -Pages = ["investment_multi_stage.jl"] -``` - -# Storage multi stage -```@autodocs -Modules = [GenX] -Pages = ["storage_multi_stage.jl"] -``` - -# Transmission multi stage -```@autodocs -Modules = [GenX] -Pages = ["transmission_multi_stage.jl"] -``` \ No newline at end of file diff --git a/docs/src/limitations_genx.md b/docs/src/limitations_genx.md index a8314a43ed..e717c9c178 100644 --- a/docs/src/limitations_genx.md +++ b/docs/src/limitations_genx.md @@ -1,24 +1,25 @@ # Limitations of the GenX Model While the benefits of an openly available generation and transmission expansion model are high, many approximations have been made due to missing data or to manage computational tractability. The assumptions of the GenX model are listed below. It serves as a caveat to the user and as an encouragement to improve the approximations. -## Time period +#### 1. Time period GenX makes the simplifying assumption that each time period contains n copies of a single, representative year. GenX optimizes generation and transmission capacity for just this characteristic year within each time period, assuming the results for different years in the same time period are identical. However, the GenX objective function accounts only for the cost of the final model time period. -## Cost +#### 2. Cost The GenX objective function assumes that the cost of powerplants is specified in the unit of currency per unit of capacity. GenX also assumes that the capital cost of technologies is paid through loans. -## Market +#### 3.Market GenX is a bottom-up (technology-explicit), partial equilibrium model that assumes perfect markets for commodities. In other words, each commodity is produced such that the sum of producer and consumer surplus is maximized. -## Technology +#### 4. Technology Behavioral response and acceptance of new technology are often modeled simplistically as a discount rate or by externally fixing the technology capacity. A higher, technology-specific discount rate represents consumer reluctance to accept newer technologies. -## Uncertainty -Because each model realization assumes a particular state of the world based on the input values drawn, the parameter uncertainty is propagated through the model in the case of myopic model runs -## Decision-making +#### 5. Uncertainty +Because each model realization assumes a particular state of the world based on the input values drawn, the parameter uncertainty is propagated through the model in the case of myopic model runs. + +#### 6. Decision-making GenX assumes rational decision making, with perfect information and perfect foresight, and simultaneously optimizes all decisions over the user-specified time horizon. -## Demand +#### 7. Demand GenX assumes price-elastic demand segments that are represented using piece-wise approximation rather than an inverse demand curve to keep the model linear. diff --git a/docs/src/load_generators_data_multi_stage.md b/docs/src/load_generators_data_multi_stage.md deleted file mode 100644 index a6fc67326c..0000000000 --- a/docs/src/load_generators_data_multi_stage.md +++ /dev/null @@ -1,5 +0,0 @@ -# load generators data multi stage -```@autodocs -Modules = [GenX] -Pages = ["load_generators_data_multi_stage.jl"] -``` diff --git a/docs/src/load_inputs_multi_stage.md b/docs/src/load_inputs_multi_stage.md deleted file mode 100644 index 23914f6d68..0000000000 --- a/docs/src/load_inputs_multi_stage.md +++ /dev/null @@ -1,5 +0,0 @@ -# load inputs multi stage -```@autodocs -Modules = [GenX] -Pages = ["load_inputs_multi_stage.jl"] -``` diff --git a/docs/src/load_network_data_multi_stage.md b/docs/src/load_network_data_multi_stage.md deleted file mode 100644 index 93256b3b59..0000000000 --- a/docs/src/load_network_data_multi_stage.md +++ /dev/null @@ -1,5 +0,0 @@ -# load network data multi stage -```@autodocs -Modules = [GenX] -Pages = ["load_network_data_multi_stage.jl"] -``` diff --git a/docs/src/maintenance.md b/docs/src/maintenance.md index 8ada7c6b38..bfa9c76cde 100644 --- a/docs/src/maintenance.md +++ b/docs/src/maintenance.md @@ -92,10 +92,11 @@ The maintenance formulation is applied on a per-resource basis, by calling the f ```@docs GenX.maintenance_formulation! -``` - -See `maintenance_formulation_thermal_commit!` for an example of how to apply it to a new resource. - -* The resource must have a `vCOMMIT`-like variable which is proportional to maximum the power output, etc at any given timestep. -* The resource must have a `eTotalCap`-like quantity and a `Cap_Size`-like parameter; only the ratio of the two is used. - +GenX.resources_with_maintenance +GenX.maintenance_down_name +GenX.maintenance_shut_name +GenX.controlling_maintenance_start_hours +GenX.ensure_maintenance_variable_records! +GenX.has_maintenance +GenX.maintenance_down_variables +``` \ No newline at end of file diff --git a/docs/src/maintenance_overview.md b/docs/src/maintenance_overview.md new file mode 100644 index 0000000000..b4ffaa6035 --- /dev/null +++ b/docs/src/maintenance_overview.md @@ -0,0 +1,96 @@ +# Optimized Scheduled Maintenance +_Added in v0.4_ + +In the real world, some types of resources (notably, fission) require regular scheduled maintenance, which often takes several weeks. +During this time, the plant produces no power. +This module allows GenX to find the best time of year for plants to undergo maintenance. + +Scheduled maintenance is implemented **only** for thermal plants with unit commitment (THERM=1). + +## Description of the maintenance model +A plant requires a single contiguous period of $h \ge 1$ hours of maintenance, every $y \ge 1$ years. +For each plant, the best time to start the maintenance period is determined by the optimizer. + +During maintenance, the plant cannot be "commited", and therefore + +* uses no fuel, +* produces no power, +* and does not contribute to reserves. + +Additionally, + +* the plant does not contribute to any Capacity Reserve Margin. + +### Treatment of plants that require maintenance only every few years +GenX models a long-term equilibrium, +and each problem generally represents a single full year. +If a plant requires maintenance every $y$ years, we take the simplification that at least $1/y$ of the plants must undergo maintenance in the modeled year. + +See also "Interaction with integer unit commitment" below. + +### Reduction of number of possible start dates +This module creates constraints which work across long periods, and consequently can be very expensive to solve. +In order to reduce the expense, the set of possible maintenance start dates can be limited. +Rather than have maintenance potentially start every hour, one can have possible start dates which are once per day, once per week, etc. +(In reality, maintenance is likely scheduled months in advance, so optimizing down to the hour may not be realistic anyway.) + +## How to use +There are four columns which need to be added to the plant data, i.e. in `Generators_data.csv`: + +1. `MAINT` should be `1` for plants that require maintenance and `0` otherwise. +2. `Maintenance_Duration` is the number of hours the maintenance period lasts. +3. `Maintenance_Cycle_Length_Years`. If `1`, maintenance every year, if `3` maintenance every 3 years, etc. +4. `Maintenance_Begin_Cadence`. Spacing between hours in which maintenance can start. + +The last three fields must be integers which are greater than 0. +They are ignored for any plants which do not require maintenance. + +`Maintenance_Duration` must be less than the total number of hours in the year. + +If `Maintenance_Begin_Cadence` is `1` then the maintenance can begin in any hour. +If it is `168` then it can begin in hours 1, 169, 337, etc. + +## Restrictions on use +The maintenance module has these restrictions: + +- More than a single maintenance period per year (i.e. every three months) is not possible in the current formulation. +- Only full-year cases can be run; there must be only one "representative period". +It would not make sense to model a *month*-long maintenance period when the year is modeled as a series of representative *weeks*, for example. + +### Interaction with integer unit commitment +If integer unit commitment is on (`UCommit=1`) this module may not produce correct results; there may be more maintenance than the user wants. +This is because the formulation specifies that the number of plants that go down for maintenance in the simulated year must be at least (the number of plants in the zone)/(the maintenance cycle length in years). +As a reminder, the number of plants is `eTotalCap / Cap_Size`. + +If there were three 500 MW plants (total 1500 MW) in a zone, and they require maintenance every three years (`Maintenance_Cycle_Length_Years=3`), +the formulation will work properly: one of the three plants will go under maintenance. + +But if there was only one 500 MW plant, and it requires maintenance every 3 years, the constraint will still make it do maintenance **every year**, because `ceil(1/3)` is `1`. The whole 500 MW plant will do maintenance. This is the unexpected behavior. + +However, if integer unit commitment was relaxed to "linearized" unit commitment (`UCommit=2`), the model will have only 500 MW / 3 = 166.6 MW worth of this plant do maintenance. + +## Hint: pre-scheduling maintenance +If you want to pre-schedule when maintenance occurs, you might not need this module. +Instead, you could set the maximum power output of the plant to zero for a certain period, or make its fuel extremely expensive during that time. +However, the plant would still be able to contribute to the Capacity Reserve Margin. + +## Outputs produced +If at least one plant has `MAINT=1`, a file `maint_down.csv` will be written listing how many plants are down for maintenance in each timestep. + +## Notes on mathematical formulation +The formulation of the maintenance state is very similar to the formulation of unit commitment. + +There is a variable called something like `vMSHUT` which is analogous to `vSTART` and controls the start of the maintenance period. +There is another variable called something like `vMDOWN` analogous to `vCOMMIT` which controls the maintenance status in any hour. + +A constraint ensures that the value of `vMDOWN` in any hour is always more than the number of `vMSHUT`s in the previous `Maintenance_Duration` hours. + +Another constraint ensures that the number of plants committed (`vCOMMIT`) at any one time plus the number of plants under maintenance (`vMDOWN`) is less than the total number of plants. + +## Developer note: adding maintenance to a resource +The maintenance formulation is applied on a per-resource basis, by calling the function [`GenX.maintenance_formulation!`](@ref). + +See [`GenX.maintenance_formulation_thermal_commit!`](@ref) for an example of how to apply it to a new resource. + +* The resource must have a `vCOMMIT`-like variable which is proportional to maximum the power output, etc at any given timestep. +* The resource must have a `eTotalCap`-like quantity and a `Cap_Size`-like parameter; only the ratio of the two is used. diff --git a/docs/src/methodofmorris.md b/docs/src/methodofmorris.md new file mode 100644 index 0000000000..b55484ad40 --- /dev/null +++ b/docs/src/methodofmorris.md @@ -0,0 +1,5 @@ +# Method of Morris +```@autodocs +Modules = [GenX] +Pages = ["method_of_morris.jl"] +``` diff --git a/docs/src/methodofmorris_input.md b/docs/src/methodofmorris_input.md new file mode 100644 index 0000000000..f643bb1182 --- /dev/null +++ b/docs/src/methodofmorris_input.md @@ -0,0 +1,31 @@ +# Method\_of\_morris\_range.csv ([Example](https://github.com/GenXProject/GenX/blob/main/Example_Systems/MethodofMorrisExample/OneZone/Method_of_morris_range.csv)) + +This file contains the settings parameters required to run the Method of Morris algorithm in GenX. + +!!! note "Note" + This file is needed if the `MethodofMorris` flag is ON in the YAML file `genx_settings.yml`. + +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource | This column contains **unique** names of resources available to the model. Resources can include generators, storage, and flexible or time shiftable demand.| +|Zone | Integer representing zone number where the resource is located. | +|Lower\_bound | Percentage lower deviation from the nominal value| +|Upper\_bound| Percentage upper deviation from the nominal value| +|Parameter| Column from the `Generators_data.csv` file containing uncertain parameters| +|Group| Group the uncertain parameters that will be changed all at once while performing the sensitivity analysis. For example, if the fuel price of natural gas is uncertain, all generators consuming natural gas should be in the same group. Group name is user defined| +|p_steps| Number of steps between upper and lower bound| +|total\_num\_trajectory| Total number of trakectories through the design matrix| +|num\_trajectory| Selected number of trajectories throigh the design matrix| +|len\_design\_mat| Length of the design matrix| +|policy| Name of the policy| + +Notes: +1. Upper and lower bounds are specified in terms of percentage deviation from the nominal value. +2. Percentage variation for uncertain parameters in a given group is identical. For example, if solar cluster 1 and solar cluster 2 both belong to the ‘solar’ group, their `Lower_bound` and `Upper_bound` must be identical. +3. `P_steps` should at least be = 1%, i.e., `Upper_bound – Lower_bound < p_steps` +4. `P_steps` for parameters in one group must be identical +5. `Total_num_trajectory` should be around 3 to 4 times the total number of uncertain parameters +6. `num_trajectory` should be approximately equal to the total number of uncertain parameters +7. `len_design_mat` should be 1.5 to 2 times the total number of uncertain parameters +8. Higher number of `num_trajectory` and `len_design_mat` would lead to higher accuracy +9. Upper and lower bounds should be specified for all the resources included in the `Generators_data.csv` file. If a parameter related to a particular resource is not uncertain, specify upper bound = lower bound = 0. \ No newline at end of file diff --git a/docs/src/methods.md b/docs/src/methods.md deleted file mode 100644 index 2dfe075e00..0000000000 --- a/docs/src/methods.md +++ /dev/null @@ -1,136 +0,0 @@ -# Methods -## Time Domain Reduction (TDR) - -Rather than modeling and optimizing power grid operations at a high temporal resolution (e.g., hourly, over a full year) while evaluating new capacity investments, which can be computationally expensive for large-scale studies with several resources, it may be useful to consider a reduced temporal resolution to model annual grid operations. -Such a time-domain reduction is often employed in capacity expansion models as a way to balance model spatial and temporal resolution as well as representation of dispatch, while ensuring reasonable computational times. -The time-domain reduction method provided allows the user to automate these features while specifying the various parameters of the time-domain reduction 'clustering' algorithm to be used in formulating the resulting optimization model. - -### Running a case with Time Domain Reduction - -There are two ways to run a case with a reduced (e.g. less than full-year) temporal resolution. -1. Let GenX perform the time domain reduction before optimizing. -2. Bring your own clustered data - -It's also possible for GenX perform clustering separately from the optimization task. - -### Method 1: Let GenX perform the time domain reduction (clustering) - -Set `TimeDomainReduction: 1` in the GenX settings for the case. - -When the case is run (but before the optimization model is built), -reduced time series data will be output to a folder within the case, (typically) `TDR_Results`. -Note that if the data already exists in that folder, it will *not* be overwritten. -If a user wants to change the time domain reduction settings and try again, the folder should be deleted before the case is run. - -The clustering is done according to the settings in `time_domain_reduction.yml`. -These are described in the Inputs section of [data_documentation](data_documentation.md). - -Time domain clustering can only be performed on data which represents a single contiguous period: typically a year of 8760 or 8736 hours. - -The header of the file `Demand_data.csv` (formerly `Load_data.csv`) in the main case folder will typically look like this: -``` -..., Rep_Periods, Timesteps_per_Rep_Period, Sub_Weights, ... - 1, 8760, 8760, -``` - -For an example that uses this method, see `Example_Systems/RealSystemExample/ISONE_Singlezone`. - -Note that for co-located VRE and storage resources, if GenX performs the time domain reduction clustering, all variable renewable energy variabilities must be in the `Generators_variability.csv` in addition to these files existing in the inputs folder because GenX will separate the wind and solar PV capacity factors after the clustering has been completed into `Vre_and_stor_solar_variability.csv` and `Vre_and_stor_wind_variability.csv`. -However, if a user brings their own clustered data, these three files must be separated by the user (and no co-located VRE variabilities should be found in `Generators_variability.csv`). - -### Method 2: Bring your own clustered data -The second method is to use an external program to generate the reduced ('clustered') time series data. -For instance, [PowerGenome](https://github.com/PowerGenome/PowerGenome) has a capability to construct GenX cases with clustered time series data. - -Running using this method **requires** setting `TimeDomainReduction: 0` in the GenX settings for the case. - -Clustered time series data requires specifying the clustering data using three columns in `Demand_data.csv`: `Rep_Periods`, `Timesteps_per_Rep_Period`, and `Sub_Weights`. -For example, a problem representing a full year via 3 representative weeks, and where the first week represents one which is twice as common as the others, would look like - -``` -..., Rep_Periods, Timesteps_per_Rep_Period, Sub_Weights, ... - 3, 168, 4368.0, - 2184.0, - 2184.0, -``` -In this example, the first week represents a total of `26*168 = 4368` hours over a full year. - -The time series data are written in single unbroken columns: in this example, the `Time_Index` ranges from 1 to 504. - -For problems involving Long Duration Storage, a file `Period_map.csv` is necessary to describe how these representative periods occur throughout the modeled year. - -See also the Inputs section of [data_documentation](data_documentation.md). - -For an example that uses this method, see `Example_Systems/RealSystemExample/ISONE_Trizone`. - -### Performing time domain reduction (TDR) separately from optimization -_Added in 0.3.4_ - -It may be useful to perform time domain reduction (TDR) (or "clustering") on a set of inputs before using them as part of full GenX optimization task. -For example, a user might want to test various TDR settings and examine the resulting clustered inputs. -This can now be performed using the `run_timedomainreduction!` function. - -``` -> julia --project=/home/youruser/GenX - -julia> using GenX -julia> run_timedomainreduction!("/path/to/case") -``` - -This function will obey the settings in `path/to/case/Settings/time_domain_reduction_settings.yml`. -It will output the resulting clustered time series files in the case. - -Running this function will *overwrite* these files in the case. -This is done with the expectation that the user is trying out various settings. - - -### Developer's docs for internal functions related to time domain reduction - -```@autodocs -Modules = [GenX] -Pages = ["time_domain_reduction.jl"] -Order = [:type, :function] -``` - -## Multi-Stage Modeling - -GenX can be configured for multi-stage modeling with perfect foresight. The dual dynamic program (DDP) algorithm is a well-known approach for solving multi-stage optimization problems in a computationally efficient manner, first proposed by Pereira and -Pinto (1991). This algorithm splits up a multi-stage investment planning problem into multiple, single-period sub-problems. Each period is solved iteratively as a separate linear program sub-problem (“forward pass”), and information from future periods is shared with past periods (“backwards pass”) so that investment decisions made in subsequent iterations reflect the contributions of present-day investments to future costs. Multi-period modeling functionality is designed as a "wrapper" around GenX, and to the extent possible, existing methods were left unchanged. - -The time-domain reduction method provided allows the user to automate these feature by specifying the various parameters related to the time-domain reduction algorithm (via time\_domain\_reduction\_settings.yml described under Model Inputs/Outputs documentations/Inputs), including the desired level of temporal resolution to be used in formulating the resulting optimization model. - -```@autodocs -Modules = [GenX] -Pages = ["dual_dynamic_programming.jl"] -Order = [:type, :function] -``` - -```@autodocs -Modules = [GenX] -Pages = ["configure_multi_stage_inputs.jl"] -Order = [:type, :function] -``` - -```@autodocs -Modules = [GenX] -Pages = ["investment_multi_stage.jl"] -Order = [:type, :function] -``` - -```@autodocs -Modules = [GenX] -Pages = ["storage_multi_stage.jl"] -Order = [:type, :function] -``` - -```@autodocs -Modules = [GenX] -Pages = ["transmission_multi_stage.jl"] -Order = [:type, :function] -``` - -```@autodocs -Modules = [GenX] -Pages = ["write_capacity_multi_stage.jl"] -Order = [:type, :function] -``` diff --git a/docs/src/mga.md b/docs/src/mga.md new file mode 100644 index 0000000000..187684bf08 --- /dev/null +++ b/docs/src/mga.md @@ -0,0 +1,5 @@ +# Modeling to Generate Alternatives +```@autodocs +Modules = [GenX] +Pages = ["modeling_to_generate_alternatives.jl"] +``` diff --git a/docs/src/model_configuration.md b/docs/src/model_configuration.md new file mode 100644 index 0000000000..c6c0ea59c5 --- /dev/null +++ b/docs/src/model_configuration.md @@ -0,0 +1,96 @@ +# Model settings parameters + +The first step in configuring a GenX model is to specify the model settings parameters. These parameters are specified in a `genx_settings.yml` file inside a `Settings` folder which must be located in the current working directory. Settings include those related to model structure, solution strategy and outputs, policy constraints, and others. In particular: +- Model structure related settings parameters affect the formulation of the model constraints and objective function. +- Computational performance related parameters affect the accuracy of the solution. +- Policy related parameters specify the policy type and policy goal. +- Network related parameters specify settings related to transmission network expansion and losses. +Note that all settings parameters are case sensitive. + +(Optional) The user can also select the output files that they want to export using the `output_settings.yml` file. This file containes a list of `yes/no` options for each output file, and should be located in the `Settings` folder. By default, if `output_settings.yml` is not included, GenX will export all output files. + +The following tables summarize the model settings parameters and their default/possible values. + +## 1. Model structure related settings parameters + +|**Parameter** | **Description**| +| :------------ | :-----------| +|UCommit | Select technical resolution of of modeling thermal generators.| +||0 = no unit commitment.| +||1 = unit commitment with integer clustering.| +||2 = unit commitment with linearized clustering.| +|Reserves | Flag for modeling operating reserves .| +||0 = No operating reserves considered. | +||1 = Consider regulation (primary) and spinning (secondary) reserves. | +|StorageLosses | Flag to account for storage related losses.| +||0 = VRE and CO2 constraints DO NOT account for energy lost. | +||1 = constraints account for energy lost. | +|TimeDomainReduction | 1 = Use time domain reduced inputs available in the folder with the name defined by settings parameter `TimeDomainReductionFolder`. If such a folder does not exist or it is empty, time domain reduction will reduce the input data and save the results there.| +||0 = Use the data in the main case folder; do not perform clustering.| +|TimeDomainReductionFolder | Name of the folder insie the current working directory where time domain reduced input data is stored.| +|VirtualChargeDischargeCost | Hypothetical cost of charging and discharging storage resources (in $/MWh).| + +## 2. Solution strategy + +|**Parameter** | **Description**| +| :------------ | :-----------| +|ParameterScale | Flag to turn on parameter scaling wherein demand, capacity and power variables defined in GW rather than MW. This flag aides in improving the computational performance of the model. | +||1 = Scaling is activated. | +||0 = Scaling is not activated. | +|MultiStage | Model multiple planning stages | +||1 = Model multiple planning stages as specified in `multi_stage_settings.yml` | +||0 = Model single planning stage | +|ModelingToGenerateAlternatives | Modeling to Generate Alternative Algorithm. For details, see [here](https://genxproject.github.io/GenX/dev/additional_features/#Modeling-to-Generate-Alternatives)| +||1 = Use the algorithm. | +||0 = Do not use the algorithm. | +|ModelingtoGenerateAlternativeSlack | value used to define the maximum deviation from the least-cost solution as a part of Modeling to Generate Alternative Algorithm. Can take any real value between 0 and 1. | +|MethodofMorris | Method of Morris algorithm | +||1 = Use the algorithm. | +||0 = Do not use the algorithm. | + +## 3. Policy related + +|**Parameter** | **Description**| +| :------------ | :-----------| +|CO2Cap | Flag for specifying the type of CO2 emission limit constraint.| +|| 0 = no CO2 emission limit| +|| 1 = mass-based emission limit constraint| +|| 2 = demand + rate-based emission limit constraint| +|| 3 = generation + rate-based emission limit constraint| +|EnergyShareRequirement | Flag for specifying regional renewable portfolio standard (RPS) and clean energy standard policy (CES) related constraints.| +|| Default = 0 (No RPS or CES constraints).| +|| 1 = activate energy share requirement related constraints. | +|CapacityReserveMargin | Flag for Capacity Reserve Margin constraints. | +|| Default = 0 (No Capacity Reserve Margin constraints)| +|| 1 = activate Capacity Reserve Margin related constraints | +|MinCapReq | Minimum technology carve out requirement constraints.| +|| 1 = if one or more minimum technology capacity constraints are specified| +|| 0 = otherwise| +|MaxCapReq | Maximum system-wide technology capacity limit constraints.| +|| 1 = if one or more maximum technology capacity constraints are specified| +|| 0 = otherwise| + +## 4. Network related + +|**Parameter** | **Description**| +| :------------ | :-----------| +|NetworkExpansion | Flag for activating or deactivating inter-regional transmission expansion.| +||1 = active| +||0 = modeling single zone or for multi-zone problems in which inter regional transmission expansion is not allowed.| +|Trans\_Loss\_Segments | Number of segments to use in piece-wise linear approximation of losses.| +||1: linear| +||>=2: piece-wise quadratic| + +## 5. Outputs + +|**Parameter** | **Description**| +| :------------ | :-----------| +|PrintModel | Flag for printing the model equations as .lp file.| +||1 = including the model equation as an output| +||0 = the model equation won't be included as an output| +|WriteShadowPrices | Get the optimal values of dual variables of various model related constraints, including to estimate electricity prices, stored value of energy and the marginal CO2 prices.| +| WriteOutputs | Flag for writing the model outputs with hourly resolution or just the annual sum.| +|| "full" = write the model outputs with hourly resolution.| +|| "annual" = write only the annual sum of the model outputs.| + +The next step in configuring a GenX model is to specify the solver settings parameters using a `[solver_name]_settings.yml` file inside the `Settings` folder. The solver settings parameters are solver specific and are described in the following section. diff --git a/docs/src/data_documentation.md b/docs/src/model_input.md similarity index 59% rename from docs/src/data_documentation.md rename to docs/src/model_input.md index 487085e16c..b34d4ae77b 100644 --- a/docs/src/data_documentation.md +++ b/docs/src/model_input.md @@ -1,178 +1,33 @@ -# GenX Database Documentation +# GenX Inputs -## 1 Model setup parameters +All input files are in CSV format. Running the GenX model requires a minimum of five **mandatory input files**: -Model settings parameters are specified in a `genx_settings.yml` file which should be located in the current working directory (or to specify an alternative location, edit the `settings_path` variable in your `Run.jl` file). -Settings include those related to model structure, solution strategy and outputs, policy constraints, and others. Model structure related settings parameters affect the formulation of the model constraints and objective function. -Computational performance related parameters affect the accuracy of the solution. -Policy related parameters specify the policy type and policy goal. Network related parameters specify settings related to transmission network expansion and losses. -Note that all settings parameters are case sensitive. +1. Fuels\_data.csv: specify fuel type, CO2 emissions intensity, and time-series of fuel prices. +2. Network.csv: specify network topology, transmission fixed costs, capacity and loss parameters. +3. Demand\_data.csv: specify time-series of demand profiles for each model zone, weights for each time step, demand shedding costs, and optional time domain reduction parameters. +4. Generators\_variability.csv: specify time-series of capacity factor/availability for each resource. +5. Generators\_data.csv: specify cost and performance data for generation, storage and demand flexibility resources. + +Additionally, the user may need to specify eight more **settings-specific** input files based on model configuration and type of scenarios of interest: +1. Reserves.csv: specify operational reserve requirements as a function of demand and renewables generation and penalty for not meeting these requirements. +2. Energy\_share\_requirement.csv: specify regional renewable portfolio standard and clean energy standard style policies requiring minimum energy generation from qualifying resources. +3. CO2\_cap.csv: specify regional CO2 emission limits. +4. Capacity\_reserve\_margin.csv: specify regional capacity reserve margin requirements. +5. Minimum\_capacity\_requirement.csv: specify regional minimum technology capacity deployment requirements. +6. Vre\_and\_stor\_data.csv: specify cost and performance data for co-located VRE and storage resources. +7. Vre\_and\_stor\_solar\_variability.csv: specify time-series of capacity factor/availability for each solar PV resource that exists for every co-located VRE and storage resource (in DC terms). +8. Vre\_and\_stor\_wind\_variability.csv: specify time-series of capacity factor/availability for each wind resource that exists for every co-located VRE and storage resource (in AC terms). -###### Table 1a: Summary of the Model settings parameters ---- -|**Settings Parameter** | **Description**| -| :------------ | :-----------| -|**Model structure related**|| -|TimeDomainReduction | 1 = Use time domain reduced inputs available in the folder with the name defined by settings parameter `TimeDomainReductionFolder`. If such a folder does not exist or it is empty, time domain reduction will reduce the input data and save the results there.| -||0 = Use the data in the main case folder; do not perform clustering.| -|TimeDomainReductionFolder | Name of the folder where time domain reduced input data is stored.| -|UCommit | Select technical resolution of of modeling thermal generators.| -||0 = no unit commitment.| -||1 = unit commitment with integer clustering.| -||2 = unit commitment with linearized clustering.| -|NetworkExpansion | Flag for activating or deactivating inter-regional transmission expansion.| -||1 = active| -||0 = modeling single zone or for multi-zone problems in which inter regional transmission expansion is not allowed.| -|Trans\_Loss\_Segments | Number of segments to use in piece-wise linear approximation of losses.| -||1: linear| -||>=2: piece-wise quadratic| -|Reserves | Flag for modeling operating reserves .| -||0 = No operating reserves considered. | -||1 = Consider regulation (primary) and spinning (secondary) reserves. | -|StorageLosses | Flag to account for storage related losses.| -||0 = VRE and CO2 constraints DO NOT account for energy lost. | -||1 = constraints account for energy lost. | -|VirtualChargeDischargeCost | Hypothetical cost of charging and discharging storage resources (in $/MWh).| -|**Policy related**| -|EnergyShareRequirement | Flag for specifying regional renewable portfolio standard (RPS) and clean energy standard policy (CES) related constraints.| -|| Default = 0 (No RPS or CES constraints).| -|| 1 = activate energy share requirement related constraints. | -|CO2Cap | Flag for specifying the type of CO2 emission limit constraint.| -|| 0 = no CO2 emission limit| -|| 1 = mass-based emission limit constraint| -|| 2 = demand + rate-based emission limit constraint| -|| 3 = generation + rate-based emission limit constraint| -|CapacityReserveMargin | Flag for Capacity Reserve Margin constraints. | -|| Default = 0 (No Capacity Reserve Margin constraints)| -|| 1 = activate Capacity Reserve Margin related constraints | -|MinCapReq | Minimum technology carve out requirement constraints.| -|| 1 = if one or more minimum technology capacity constraints are specified| -|| 0 = otherwise| -|MaxCapReq | Maximum system-wide technology capacity limit constraints.| -|| 1 = if one or more maximum technology capacity constraints are specified| -|| 0 = otherwise| -|**Solution strategy and outputs**|| -|ParameterScale | Flag to turn on parameter scaling wherein demand, capacity and power variables defined in GW rather than MW. This flag aides in improving the computational performance of the model. | -||1 = Scaling is activated. | -||0 = Scaling is not activated. | -|ModelingToGenerateAlternatives | Modeling to Generate Alternative Algorithm. For details, see [here](https://genxproject.github.io/GenX/dev/additional_features/#Modeling-to-Generate-Alternatives)| -||1 = Use the algorithm. | -||0 = Do not use the algorithm. | -|ModelingtoGenerateAlternativeSlack | value used to define the maximum deviation from the least-cost solution as a part of Modeling to Generate Alternative Algorithm. Can take any real value between 0 and 1. | -|WriteShadowPrices | Get the optimal values of dual variables of various model related constraints, including to estimate electricity prices, stored value of energy and the marginal CO2 prices.| -|MultiStage | Model multiple planning stages | -||1 = Model multiple planning stages as specified in `multi_stage_settings.yml` | -||0 = Model single planning stage | -|MethodofMorris | Method of Morris algorithm | -||1 = Use the algorithm. | -||0 = Do not use the algorithm. | -|**Miscellaneous**|| -|PrintModel | Flag for printing the model equations as .lp file.| -||1 = including the model equation as an output| -||0 = the model equation won't be included as an output| -| WriteOutputs | Flag for writing the model outputs with hourly resolution or just the annual sum.| -|| "full" = write the model outputs with hourly resolution.| -|| "annual" = write only the annual sum of the model outputs.| - -Additionally, Solver related settings parameters are specified in the appropriate .yml file (e.g. `gurobi_settings.yml` or `cplex_settings.yml`), -which should be located in the current working directory. -Note that GenX supplies default settings for most solver settings in the various solver-specific functions found in the `src/configure_solver/` directory. -To overwrite default settings, you can specify the below Solver specific settings. -Settings are specific to each solver. - -(Optional) The user can also select the output files that they want to export using the `output_settings.yml` file. This file containes a list of `yes/no` options for each output file, and should be located in the `Settings` folder. By default, if `output_settings.yml` is not included, GenX will export all output files. - -###### Table 1b: Summary of the Solver settings parameters ---- -|**Settings Parameter** | **Description**| -| :------------ | :-----------| -|**Solver settings**|| -|Method | Algorithm used to solve continuous models or the root node of a MIP model. Generally, barrier method provides the fastest run times for real-world problem set.| -|| CPLEX: CPX\_PARAM\_LPMETHOD - Default = 0; See [link](https://www.ibm.com/docs/en/icos/20.1.0?topic=parameters-algorithm-continuous-linear-problems) for more specifications.| -|| Gurobi: Method - Default = -1; See [link](https://www.gurobi.com/documentation/8.1/refman/method.html) for more specifications.| -|| clp: SolveType - Default = 5; See [link](https://www.coin-or.org/Doxygen/Clp/classClpSolve.html) for more specifications.| -|| HiGHS: Method - Default = "choose"; See [link](https://ergo-code.github.io/HiGHS/dev/options/definitions/) -|BarConvTol | Convergence tolerance for barrier algorithm.| -|| CPLEX: CPX\_PARAM\_BAREPCOMP - Default = 1e-8; See [link](https://www.ibm.com/docs/en/icos/12.8.0.0?topic=parameters-convergence-tolerance-lp-qp-problems) for more specifications.| -|| Gurobi: BarConvTol - Default = 1e-8; See [link](https://www.gurobi.com/documentation/8.1/refman/barconvtol.html)link for more specifications.| -|Feasib\_Tol | All constraints must be satisfied as per this tolerance. Note that this tolerance is absolute.| -|| CPLEX: CPX\_PARAM\_EPRHS - Default = 1e-6; See [link](https://www.ibm.com/docs/en/icos/20.1.0?topic=parameters-feasibility-tolerance) for more specifications.| -|| Gurobi: FeasibilityTol - Default = 1e-6; See [link](https://www.gurobi.com/documentation/9.1/refman/feasibilitytol.html) for more specifications.| -|| clp: PrimalTolerance - Default = 1e-7; See [link](https://www.coin-or.org/Clp/userguide/clpuserguide.html) for more specifications.| -|| clp: DualTolerance - Default = 1e-7; See [link](https://www.coin-or.org/Clp/userguide/clpuserguide.html) for more specifications.| -|Optimal\_Tol | Reduced costs must all be smaller than Optimal\_Tol in the improving direction in order for a model to be declared optimal.| -|| CPLEX: CPX\_PARAM\_EPOPT - Default = 1e-6; See [link](https://www.ibm.com/docs/en/icos/12.8.0.0?topic=parameters-optimality-tolerance) for more specifications.| -|| Gurobi: OptimalityTol - Default = 1e-6; See [link](https://www.gurobi.com/documentation/8.1/refman/optimalitytol.html) for more specifications.| -|Pre\_Solve | Controls the presolve level.| -|| Gurobi: Presolve - Default = -1; See [link](https://www.gurobi.com/documentation/8.1/refman/presolve.html) for more specifications.| -|| clp: PresolveType - Default = 5; See [link](https://www.coin-or.org/Doxygen/Clp/classClpSolve.html) for more specifications.| -|Crossover | Determines the crossover strategy used to transform the interior solution produced by barrier algorithm into a basic solution.| -|| CPLEX: CPX\_PARAM\_SOLUTIONTYPE - Default = 2; See [link](https://www.ibm.com/docs/en/icos/12.8.0.0?topic=parameters-optimality-tolerance) for more specifications.| -|| Gurobi: Crossover - Default = 0; See [link](https://www.gurobi.com/documentation/9.1/refman/crossover.html#:~:text=Use%20value%200%20to%20disable,interior%20solution%20computed%20by%20barrier.) for more specifications.| -|NumericFocus | Controls the degree to which the code attempts to detect and manage numerical issues.| -|| CPLEX: CPX\_PARAM\_NUMERICALEMPHASIS - Default = 0; See [link](https://www.ibm.com/docs/en/icos/12.8.0.0?topic=parameters-numerical-precision-emphasis) for more specifications.| -|| Gurobi: NumericFocus - Default = 0; See [link](https://www.gurobi.com/documentation/9.1/refman/numericfocus.html) for more specifications.| -|TimeLimit | Time limit to terminate the solution algorithm, model could also terminate if it reaches MIPGap before this time.| -|| CPLEX: CPX\_PARAM\_TILIM- Default = 1e+75; See [link](https://www.ibm.com/docs/en/icos/12.8.0.0?topic=parameters-optimizer-time-limit-in-seconds) for more specifications.| -|| Gurobi: TimeLimit - Default = infinity; See [link](https://www.gurobi.com/documentation/9.1/refman/timelimit.html) for more specifications.| -|| clp: MaximumSeconds - Default = -1; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|MIPGap | Optimality gap in case of mixed-integer program.| -|| CPLEX: CPX\_PARAM\_EPGAP- Default = 1e-4; See [link](https://www.ibm.com/docs/en/icos/20.1.0?topic=parameters-relative-mip-gap-tolerance) for more specifications.| -|| Gurobi: MIPGap - Default = 1e-4; See [link](https://www.gurobi.com/documentation/9.1/refman/mipgap2.html) for more specifications.| -|DualObjectiveLimit | When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit.| -|| clp: DualObjectiveLimit - Default = 1e308; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|MaximumIterations | Terminate after performing this number of simplex iterations.| -|| clp: MaximumIterations - Default = 2147483647; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|LogLevel | Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output.| -|| clp: logLevel - Default = 1; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|| cbc: logLevel - Default = 1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| -|InfeasibleReturn | Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well).| -|| clp: InfeasibleReturn - Default = 0; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|Scaling | Sets or unsets scaling; 0 -off, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic(later).| -|| clp: Scaling - Default = 3; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|Perturbation | Perturbs problem; Switch on perturbation (50), automatic (100), don't try perturbing (102).| -|| clp: Perturbation - Default = 3; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| -|maxSolutions | Terminate after this many feasible solutions have been found.| -|| cbc: maxSolutions - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| -|maxNodes | Terminate after this many branch-and-bound nodes have been evaluated| -|| cbc: maxNodes - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| -| allowableGap | Terminate after optimality gap is less than this value (on an absolute scale)| -|| cbc: allowableGap - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| -|ratioGap | Terminate after optimality gap is smaller than this relative fraction.| -|| cbc: ratioGap - Default = Inf; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| -|threads | Set the number of threads to use for parallel branch & bound.| -|| cbc: threads - Default = 1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| - - -## 2 Inputs - -All input files are in CSV format. Running the GenX model requires a minimum of five input files. Additionally, the user may need to specify five more input files based on model configuration and type of scenarios of interest. Description and column details of all potential input files are included in the `Input_data_explained` folder in the `Example_Systems` folder. Names of the input files and their functionality is also given below. Note that names of the input files are case sensitive. - - -###### Table 2: Summary of the input files ---- -|**Column Name** | **Description**| -| :------------ | :-----------| -|**Mandatory Files**|| -|Fuels\_data.csv |Specify fuel type, CO2 emissions intensity, and time-series of fuel prices. | -|Network.csv |Specify network topology, transmission fixed costs, capacity and loss parameters.| -|Demand\_data.csv |Specify time-series of demand profiles for each model zone, weights for each time step, demand shedding costs, and optional time domain reduction parameters.| -|Generators\_variability.csv |Specify time-series of capacity factor/availability for each resource.| -|Generators\_data.csv |Specify cost and performance data for generation, storage and demand flexibility resources.| -|**Settings-specific Files**|| -|Reserves.csv |Specify operational reserve requirements as a function of demand and renewables generation and penalty for not meeting these requirements.| -|Energy\_share\_requirement.csv |Specify regional renewable portfolio standard and clean energy standard style policies requiring minimum energy generation from qualifying resources.| -|CO2\_cap.csv |Specify regional CO2 emission limits.| -|Capacity\_reserve\_margin.csv |Specify regional capacity reserve margin requirements.| -|Minimum\_capacity\_requirement.csv |Specify regional minimum technology capacity deployment requirements.| -|Vre\_and\_stor\_data.csv |Specify cost and performance data for co-located VRE and storage resources.| -|Vre\_and\_stor\_solar\_variability.csv |Specify time-series of capacity factor/availability for each solar PV resource that exists for every co-located VRE and storage resource (in DC terms).| -|Vre\_and\_stor\_wind\_variability.csv |Specify time-series of capacity factor/availability for each wind resource that exists for every co-located VRE and storage resource (in AC terms).| - -### 2.1 Mandatory input data - - -#### 2.1.1 Fuels\_data.csv +Description and column details of all potential input files are included in the `Input_data_explained` folder in the `Example_Systems` folder. Names of the input files and their functionality is also given below. + +!!! note "Note" + Names of the input files are case sensitive. + + +## 1 Mandatory input data + + +### 1.1 Fuels\_data.csv • **First row:** names of all fuels used in the model instance which should match the labels used in `Fuel` column in one of the resource `.csv` file in the `Resources` folder. For renewable resources or other resources that do not consume a fuel, the name of the fuel is `None`. @@ -183,7 +38,7 @@ All input files are in CSV format. Running the GenX model requires a minimum of * ** First column:** The first column in this file denotes, Time\_index, represents the index of time steps in a model instance. -#### 2.1.2 Network.csv +### 1.2 Network.csv This input file contains input parameters related to: 1) definition of model zones (regions between which transmission flows are explicitly modeled) and 2) definition of transmission network topology, existing capacity, losses and reinforcement costs. The following table describe each of the mandatory parameter inputs need to be specified to run an instance of the model, along with comments for the model configurations when they are needed. @@ -218,13 +73,11 @@ There are two interfaces implemented for specifying the network topology itself: Only one choice is permitted in a given file. The list interface consists of a column for the lines start zone and one for the line's end zone. -Here is a snippet of the Network.csv file for a map with three zones and two lines: ``` Network_Lines, Start_Zone, End_Zone, 1, 1, 2, 2, 1, 3, ``` - The matrix interface requires N columns labeled `z1, z2, z3 ... zN`, and L rows, one for each network line (or interregional path), with a `1` in the column corresponding to the 'start' zone and a `-1` in the column corresponding to the 'end' zone for each line. @@ -239,7 +92,7 @@ Note that in either case, positive flows indicate flow from start to end zone; negative flows indicate flow from end to start zone. -#### 2.1.3 Demand\_data.csv (Load\_data.csv) +### 1.3 Demand\_data.csv (Load\_data.csv) This file includes parameters to characterize model temporal resolution to approximate annual grid operations, electricity demand for each time step for each zone, and cost of load shedding. Note that GenX is designed to model hourly time steps. With some care and effort, finer (e.g. 15 minute) or courser (e.g. 2 hour) time steps can be modeled so long as all time-related parameters are scaled appropriately (e.g. time period weights, heat rates, ramp rates and minimum up and down times for generators, variable costs, etc). @@ -258,8 +111,7 @@ This file includes parameters to characterize model temporal resolution to appro |Timesteps\_per\_Rep\_Period |Number of timesteps per representative period (e.g. 168 if period is set as a week using hour-long time steps). This is always a single entry: all representative periods have the same length. For a full-year model, this entry is equal to the number of time steps.| |Sub\_Weights |Number of annual time steps (e.g. hours) represented by each timestep in a representative period. The length of this column is equal to the number of representative periods. The sum of the elements should be equal to the total number of time steps in a model time horizon (e.g. 8760 hours if modeling 365 days or 8736 if modeling 52 weeks).| - -#### 2.1.4 Resources input files +### 1.4 Resources input files The `Resources` folder contains the input files for each resource type. At the current version of GenX, the following resources are included in the model: 1) thermal generators, specified in the `Thermal.csv` file, @@ -685,7 +537,32 @@ This file contains PiecewiseFuelUsage-related parameters required if any resourc |PWFU\_Heat\_Rate\_MMBTU\_per\_MWh\_*i| The slope of fuel usage function of the segment i.| |PWFU\_Load\_Point\_MW\_*i| The end of segment i (MW).| -#### 2.1.5 Generator\_variability.csv +This file contains additional setting and performance parameters for specifically thermal resources that use multiple fuels. +These variables must be explicitly listed in the `Thermal.csv`. + +###### Table 18: Settings-specific columns in the Thermal.csv file to use multi fuels +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Technology type flags**| +|MULTI_FUELS | {0, 1}, Flag to indicate membership in set of thermal resources that can burn multiple fuels at the same time (e.g., natural gas combined cycle cofiring with hydrogen, coal power plant cofiring with natural gas.| +||MULTI_FUELS = 0: Not part of set (default) | +||MULTI_FUELS = 1: Resources that can use fuel blending. | +|**Technical performance parameters**| +|Num\_Fuels |Number of fuels that a multi-fuel generator (MULTI_FUELS = 1) can use at the same time. The length of ['Fuel1', 'Fuel2', ...] should be equal to 'Num\_Fuels'. Each fuel will requires its corresponding heat rate, min cofire level, and max cofire level. | +|Fuel1 |Frist fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | +|Fuel2 |Second fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | +|Heat1\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel1. | +|Heat2\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel2. | +|Fuel1\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel1\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel1\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel1\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel2\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel2\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | +|Fuel2\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | +|Fuel2\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | + +#### 1.5 Generator\_variability.csv This file contains the time-series of capacity factors / availability of each resource included in the resource `.csv` file in the `Resources` folder for each time step (e.g. hour) modeled. @@ -706,46 +583,35 @@ This file contains the time-series of capacity factors / availability of each re |Max\_Flexible\_Demand\_Advance |Maximum number of hours that demand can be scheduled in advance of the original schedule. Applies to resources with FLEX type 1 (hours). | |Flexible\_Demand\_Energy\_Eff |[0,1], Energy efficiency associated with time shifting demand. Represents energy losses due to time shifting (or 'snap back' effect of higher consumption due to delay in use) that may apply to some forms of flexible demand. Applies to resources with FLEX type 1 (hours). For example, one may need to pre-cool a building more than normal to advance demand. | -### 2.2 Optional inputs files +#### 1.6 Vre\_and\_stor\_solar\_variability.csv -#### 2.2.1 Online Time-domain reduction +This file contains the time-series of capacity factors / availability of the solar PV component (DC capacity factors) of each co-located resource included in the `Vre_and_stor_data.csv` file for each time step (e.g. hour) modeled. -Modeling grid operations for each hour of the year can be computationally expensive for models with many zones and resources. Time-domain reduction is often employed in capacity expansion models as a way to balance model spatial and temporal resolution as well as representation of dispatch, while ensuring reasonable computational times. GenX allows the option of performing time-domain reduction on the user supplied time-series input data to produce a representative time series at the desired level of temporal resolution. The below table summarizes the list of parameters to be specified by the user to perform the time domain reduction implemented in GenX. These parameters are passed to GenX via the YAML file `time_domain_reduction_settings.yml`. +• first column: The first column contains the time index of each row (starting in the second row) from 1 to N. -###### Table 7: Structure of the time_domain_reduction.yml file ---- -|**Key** | **Description**| -| :------------ | :-----------| -|Timesteps\_per\_period | The number of timesteps (e.g., hours) in each representative period (i.e. 168 for weeks, 24 for days, 72 for three-day periods, etc).| -|UseExtremePeriods | 1 = Include outliers (by performance or demand/resource extreme) as their own representative extreme periods. This setting automatically includes periods based on criteria outlined in the dictionary `ExtremePeriods`. Extreme periods can be selected based on following criteria applied to demand profiles or solar and wind capacity factors profiles, at either the zonal or system level. A) absolute (timestep with min/max value) statistic (minimum, maximum) and B) integral (period with min/max summed value) statistic (minimum, maximum). For example, the user could want the hour with the most demand across the whole system to be included among the extreme periods. They would select Demand, System, Absolute, and Max.| -||0 = Do not include extreme periods.| -|ExtremePeriods | If UseExtremePeriods = 1, use this dictionary to select which types of extreme periods to use. Select by profile type (Demand, PV, or Wind), geography (Zone or System), grouping by timestep or by period (Absolute or Integral), and statistic (Maximum or Minimum).| -|ClusterMethod |Either `kmeans` or `kmedoids`, the method used to cluster periods and determine each time step's representative period.| -|ScalingMethod |Either ‘N' or ‘S', the decision to normalize ([0,1]) or standardize (mean 0, variance 1) the input data prior to clustering.| -|MinPeriods |The minimum number of representative periods used to represent the input data. If using UseExtremePeriods, this must be greater or equal to the number of selected extreme periods. If `IterativelyAddPeriods` is off, this will be the total number of representative periods.| -|MaxPeriods| The maximum number of representative periods - both clustered and extreme - that may be used to represent the input data.| -|IterativelyAddPeriods |1 = Add representative periods until the error threshold between input data and represented data is met or the maximum number of representative periods is reached.| -||0 = Use only the minimum number of representative periods. This minimum value includes the selected extreme periods if `UseExtremePeriods` is on.| -|Threshold |Iterative period addition will end if the period farthest from its representative period (as measured using Euclidean distance) is within this percentage of the total possible error (for normalization) or 95% of the total possible error (± 2 σ for standardization). E.g., for a threshold of 0.01, each period must be within 1% of the spread of possible error before the clustering iterations will terminate (or until the maximum is reached).| -|IterateMethod | Either ‘cluster' (Default) or ‘extreme', whether to increment the number of clusters to the kmeans/kmedoids method or to set aside the worst-fitting periods as a new extreme periods.| -|nReps |Default 200, the number of kmeans/kmedoids repetitions at the same setting.| -|DemandWeight| Default 1, a multiplier on demand columns to optionally prioritize better fits for demand profiles over resource capacity factor or fuel price profiles.| -|WeightTotal |Default 8760, the sum to which the relative weights of representative periods will be scaled.| -|ClusterFuelPrices| Either 1 or 0, whether or not to use the fuel price time series in `Fuels_data.csv` in the clustering process. If 'no', this function will still write `Fuels_data.csv` in the TimeDomainReductionFolder with reshaped fuel prices based on the number and size of the representative periods but will not use the fuel price time series for selection of representative periods.| - - - -#### 2.2.2 Reserves.csv +• Second column onwards: Resources are listed from the second column onward with headers matching each resource name in the `Vre_stor.csv` files in any order. The availability for each resource at each time step is defined as a fraction of installed capacity and should be between 0 and 1. Note that for this reason, resource names specified in all the resource `.csv` files must be unique. + +#### 1.7 Vre\_and\_stor\_wind\_variability.csv + +This file contains the time-series of capacity factors / availability of the wind component (AC capacity factors) of each co-located resource included in the `Vre_and_stor_data.csv` file for each time step (e.g. hour) modeled. + +• First column: The first column contains the time index of each row (starting in the second row) from 1 to N. + +• Second column onwards: Resources are listed from the second column onward with headers matching each resource name in the `Vre_stor.csv` files in any order. The availability for each resource at each time step is defined as a fraction of installed capacity and should be between 0 and 1. Note that for this reason, resource names specified in all the resource `.csv` files must be unique. + +## 2. Optional inputs files + +### 2.1 Reserves.csv This file includes parameter inputs needed to model time-dependent procurement of regulation and spinning reserves. This file is needed if `Reserves` flag is activated in the YAML file `genx_settings.yml`. -###### Table 8: Structure of the Reserves.csv file +###### Table 7: Structure of the Reserves.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| -|Reg\_Req\_Percent\_Demand |[0,1], Regulation requirement as a percent of time-dependent demand; here demand is the total across all model zones.| +|Reg\_Req\_Percent\_Load |[0,1], Regulation requirement as a percent of time-dependent load; here load is the total across all model zones.| |Reg\_Req\_Percent\_VRE |[0,1], Regulation requirement as a percent of time-dependent wind and solar generation (summed across all model zones).| -|Rsv\_Req\_Percent\_Demand [0,1], |Spinning up or contingency reserve requirement as a percent of time-dependent demand (which is summed across all zones).| +|Rsv\_Req\_Percent\_Load [0,1], |Spinning up or contingency reserve requirement as a percent of time-dependent load (which is summed across all zones).| |Rsv\_Req\_Percent\_VRE |[0,1], Spinning up or contingency reserve requirement as a percent of time-dependent wind and solar generation (which is summed across all zones).| |Unmet\_Rsv\_Penalty\_Dollar\_per\_MW |Penalty for not meeting time-dependent spinning reserve requirement ($/MW per time step).| |Dynamic\_Contingency |Flags to include capacity (generation or transmission) contingency to be added to the spinning reserve requirement.| @@ -755,13 +621,13 @@ This file includes parameter inputs needed to model time-dependent procurement o -#### 2.2.3 Energy\_share\_requirement.csv +### 2.2 Energy\_share\_requirement.csv This file contains inputs specifying minimum energy share requirement policies, such as Renewable Portfolio Standard (RPS) or Clean Energy Standard (CES) policies. This file is needed if parameter EnergyShareRequirement has a non-zero value in the YAML file `genx_settings.yml`. Note: this file should use the same region name as specified in the the resource `.csv` file (inside the `Resource`). -###### Table 9: Structure of the Energy\_share\_requirement.csv file +###### Table 8: Structure of the Energy\_share\_requirement.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| @@ -771,11 +637,11 @@ Note: this file should use the same region name as specified in the the resource -#### 2.2.4 CO2\_cap.csv +### 2.3 CO2\_cap.csv This file contains inputs specifying CO2 emission limits policies (e.g. emissions cap and permit trading programs). This file is needed if `CO2Cap` flag is activated in the YAML file `genx_settings.yml`. `CO2Cap` flag set to 1 represents mass-based (tCO2 ) emission target. `CO2Cap` flag set to 2 is specified when emission target is given in terms of rate (tCO2/MWh) and is based on total demand met. `CO2Cap` flag set to 3 is specified when emission target is given in terms of rate (tCO2 /MWh) and is based on total generation. -###### Table 10: Structure of the CO2\_cap.csv file +###### Table 9: Structure of the CO2\_cap.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| @@ -786,15 +652,13 @@ This file contains inputs specifying CO2 emission limits policies (e.g. emission |CO\_2\_Max\_Mtons_* |Emission limit in absolute values, in Million of tons | | | where in the above inputs, * represents the number of the emission limit constraints. For example, if the model has 2 emission limit constraints applied separately for 2 zones, the above CSV file will have 2 columns for specifying emission limit in terms on rate: CO\_2\_Max\_tons\_MWh\_1 and CO\_2\_Max\_tons\_MWh\_2.| - - -#### 2.2.5 Capacity\_reserve\_margin.csv +### 2.4 Capacity\_reserve\_margin.csv This file contains the regional capacity reserve margin requirements. This file is needed if parameter CapacityReserveMargin has a non-zero value in the YAML file `genx_settings.yml`. Note: this file should use the same region name as specified in the resource `.csv` file (inside the `Resource`). -###### Table 11: Structure of the Capacity\_reserve\_margin.csv file +###### Table 10: Structure of the Capacity\_reserve\_margin.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| @@ -804,11 +668,11 @@ Note: this file should use the same region name as specified in the resource `.c -#### 2.2.6 Minimum\_capacity\_requirement.csv +### 2.5 Minimum\_capacity\_requirement.csv This file contains the minimum capacity carve-out requirement to be imposed (e.g. a storage capacity mandate or offshore wind capacity mandate). This file is needed if the `MinCapReq` flag has a non-zero value in the YAML file `genx_settings.yml`. -###### Table 12: Structure of the Minimum\_capacity\_requirement.csv file +###### Table 11: Structure of the Minimum\_capacity\_requirement.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| @@ -819,12 +683,12 @@ This file contains the minimum capacity carve-out requirement to be imposed (e.g Some of the columns specified in the input files in Section 2.2 and 2.1 are not used in the GenX model formulation. These columns are necessary for interpreting the model outputs and used in the output module of the GenX. -#### 2.2.7 Maximum\_capacity\_requirement.csv +### 2.6 Maximum\_capacity\_requirement.csv This contains the maximum capacity limits to be imposed (e.g. limits on total deployment of solar, wind, or batteries in the system as a whole or in certain collections of zones). It is required if the `MaxCapReq` flag has a non-zero value in `genx_settings.yml`. -###### Table 13: Structure of the Maximum\_capacity\_requirement.csv file +###### Table 12: Structure of the Maximum\_capacity\_requirement.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| @@ -835,15 +699,15 @@ It is required if the `MaxCapReq` flag has a non-zero value in `genx_settings.ym Some of the columns specified in the input files in Section 2.2 and 2.1 are not used in the GenX model formulation. These columns are necessary for interpreting the model outputs and used in the output module of the GenX. -#### 2.2.8 Method\_of\_morris\_range.csv +### 2.7 Method\_of\_morris\_range.csv This file contains the settings parameters required to run the Method of Morris algorithm in GenX. This file is needed if the `MethodofMorris` flag is ON in the YAML file `genx_settings.yml`. -###### Table 14: Structure of the Method\_of\_morris\_range.csv file +###### Table 13: Structure of the Method\_of\_morris\_range.csv file --- |**Column Name** | **Description**| | :------------ | :-----------| -|Resource | This column contains **unique** names of resources available to the model. Resources can include generators, storage, and flexible or time shiftable demand.| +|Resource | This column contains **unique** names of resources available to the model. Resources can include generators, storage, and flexible or time shiftable demand/loads.| |Zone | Integer representing zone number where the resource is located. | |Lower\_bound | Percentage lower deviation from the nominal value| |Upper\_bound| Percentage upper deviation from the nominal value| @@ -855,7 +719,7 @@ This file contains the settings parameters required to run the Method of Morris |len\_design\_mat| Length of the design matrix| |policy| Name of the policy| -Notes: +!!! note "Notes" 1. Upper and lower bounds are specified in terms of percentage deviation from the nominal value. 2. Percentage variation for uncertain parameters in a given group is identical. For example, if solar cluster 1 and solar cluster 2 both belong to the ‘solar’ group, their Lower_bound and Upper_bound must be identical 3. P\_steps should at least be = 1\%, i.e., Upper\_bound – Lower\_bound $<$ p\_steps @@ -866,359 +730,3 @@ Notes: 8. Higher number of num\_trajectory and len_design_mat would lead to higher accuracy 9. Upper and lower bounds should be specified for all the resources included in the resource `.csv` file (inside the `Resource`). If a parameter related to a particular resource is not uncertain, specify upper bound = lower bound = 0. - - - - - - - - - -###### Table 16: Mandatory columns in the Vre\_and\_stor\_data.csv file - - - - - -|**MultiStage == 1**| -|Capital\_Recovery\_Period_DC |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the inverter component. | -|Capital\_Recovery\_Period_Solar |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the solar PV component. | -|Capital\_Recovery\_Period_Wind |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the wind component. | -|Capital\_Recovery\_Period_Discharge_DC |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the discharge DC component when `STOR_DC_DISCHARGE = 2 `. | -|Capital\_Recovery\_Period_Charge_DC |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the charge DC component when `STOR_DC_CHARGE = 2 `. | -|Capital\_Recovery\_Period_Discharge_AC |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the discharge AC component when `STOR_AC_DISCHARGE = 2 `. | -|Capital\_Recovery\_Period_Charge_AC |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs for the charge AC component when `STOR_AC_CHARGE = 2 `. | -|Min\_Retired\_Cap\_Inverter\_MW |Minimum required inverter capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Solar\_MW |Minimum required solar capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Wind\_MW |Minimum required wind capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Discharge_DC\_MW |Minimum required discharge capacity retirements in the current model period for storage resources with `STOR_DC_DISCHARGE = 2`. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Charge_DC\_MW |Minimum required charge capacity retirements in the current model period for storage resources with `STOR_DC_CHARGE = 2`. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Discharge_AC\_MW |Minimum required discharge capacity retirements in the current model period for storage resources with `STOR_AC_DISCHARGE = 2`. This field can be used to enforce lifetime retirements of existing capacity.| -|Min\_Retired\_Cap\_Charge_AC\_MW |Minimum required charge capacity retirements in the current model period for storage resources with `STOR_AC_CHARGE = 2`. This field can be used to enforce lifetime retirements of existing capacity.| -| WACC\_DC | The line-specific weighted average cost of capital for the inverter component. | -| WACC\_Solar | The line-specific weighted average cost of capital for the solar PV component. | -| WACC\_Wind | The line-specific weighted average cost of capital for the wind component. | -| WACC\_Discharge\_DC | The line-specific weighted average cost of capital for the discharging DC storage component with `STOR_DC_DISCHARGE = 2`. | -| WACC\_Charge\_DC | The line-specific weighted average cost of capital for the charging DC storage component with `STOR_DC_CHARGE = 2`. | -| WACC\_Discharge\_AC | The line-specific weighted average cost of capital for the discharging AC storage component with `STOR_AC_DISCHARGE = 2`. | -| WACC\_Charge\_AC | The line-specific weighted average cost of capital for the charging AC storage component with `STOR_AC_CHARGE = 2`. | - -###### Table 17: Settings-specific columns in the Vre\_stor\_data.csv file ---- -|**Column Name** | **Description**| -| :------------ | :-----------| -|**EnergyShareRequirement > 0**|| -|ESRVreStor\_*| Flag to indicate which resources are considered for the Energy Share Requirement constraint. | -||1- included| -||0- excluded| -|**CapacityReserveMargin > 0**|| -|CapResVreStor\_* |[0,1], Fraction of the resource capacity eligible for contributing to the capacity reserve margin constraint (e.g. derate factor). | -|**MinCapReq = 1**| -|MinCapTagSolar\_*| Eligibility of resources with a solar PV component (multiplied by the inverter efficiency for AC terms) to participate in Minimum Technology Carveout constraint. \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`. | -|MinCapTagWind\_*| Eligibility of resources with a wind component to participate in Minimum Technology Carveout constraint (AC terms). \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`. | -|MinCapTagStor\_*| Eligibility of resources with a storage component to participate in Minimum Technology Carveout constraint (discharge capacity in AC terms). \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`.| -|**MaxCapReq = 1**| -|MaxCapTagSolar\_*| Eligibility of resources with a solar PV component (multiplied by the inverter efficiency for AC terms) to participate in Maximum Technology Carveout constraint. \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`. | -|MaxCapTagWind\_*| Eligibility of resources with a wind component to participate in Maximum Technology Carveout constraint (AC terms). \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`. | -|MaxCapTagStor\_*| Eligibility of resources with a storage component to participate in Maximum Technology Carveout constraint (discharge capacity in AC terms). \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`.| - -#### 2.2.10 Vre\_and\_stor\_solar\_variability.csv - -This file contains the time-series of capacity factors / availability of the solar PV component (DC capacity factors) of each co-located resource included in the `Vre_and_stor_data.csv` file for each time step (e.g. hour) modeled. - -• first column: The first column contains the time index of each row (starting in the second row) from 1 to N. - -• Second column onwards: Resources are listed from the second column onward with headers matching each resource name in the `Vre_stor.csv` files in any order. The availability for each resource at each time step is defined as a fraction of installed capacity and should be between 0 and 1. Note that for this reason, resource names specified in all the resource `.csv` files must be unique. - -#### 2.2.11 Vre\_and\_stor\_wind\_variability.csv - -This file contains the time-series of capacity factors / availability of the wind component (AC capacity factors) of each co-located resource included in the `Vre_and_stor_data.csv` file for each time step (e.g. hour) modeled. - -• First column: The first column contains the time index of each row (starting in the second row) from 1 to N. - -• Second column onwards: Resources are listed from the second column onward with headers matching each resource name in the `Vre_stor.csv` files in any order. The availability for each resource at each time step is defined as a fraction of installed capacity and should be between 0 and 1. Note that for this reason, resource names specified in all the resource `.csv` files must be unique. - -#### 2.2.12 Settings-specific columns in the Generators\_data.csv to use multi fuels - -This file contains additional setting and performance parameters for specifically thermal resources that use multiple fuels. -These variables must be explicitly listed in the `Generators_data.csv`. - -###### Table 17: Settings-specific columns in the Generators\_data.csv file to use multi fuels -|**Column Name** | **Description**| -| :------------ | :-----------| -|**Technology type flags**| -|MULTI_FUELS | {0, 1}, Flag to indicate membership in set of thermal resources that can burn multiple fuels at the same time (e.g., natural gas combined cycle cofiring with hydrogen, coal power plant cofiring with natural gas.| -||MULTI_FUELS = 0: Not part of set (default) | -||MULTI_FUELS = 1: Resources that can use fuel blending. | -|**Technical performance parameters**| -|Num\_Fuels |Number of fuels that a multi-fuel generator (MULTI_FUELS = 1) can use at the same time. The length of ['Fuel1', 'Fuel2', ...] should be equal to 'Num\_Fuels'. Each fuel will requires its corresponding heat rate, min cofire level, and max cofire level. | -|Fuel1 |Frist fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | -|Fuel2 |Second fuel needed for a mulit-fuel generator (MULTI_FUELS = 1). The names should match with the ones in the `Fuels_data.csv`. | -|Heat1\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel1. | -|Heat2\_Rate\_MMBTU\_per\_MWh |Heat rate of a multi-fuel generator (MULTI_FUELS = 1) for Fuel2. | -|Fuel1\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | -|Fuel1\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | -|Fuel1\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | -|Fuel1\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel1' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | -|Fuel2\_Min\_Cofire\_Level |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | -|Fuel2\_Min\_Cofire_Level\_Start |The minimum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | -|Fuel2\_Max\_Cofire\_Level |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the normal generation process. | -|Fuel2\_Max\_Cofire_Level\_Start |The maximum blendng level of 'Fuel2' in total heat inputs of a mulit-fuel generator (MULTI_FUELS = 1) during the start-up process. | - -## 3 Outputs - -The table below summarizes the units of each output variable reported as part of the various CSV files produced after each model run. The reported units are also provided. If a result file includes time-dependent values, the value will not include the hour weight in it. An annual sum ("AnnualSum") column/row will be provided whenever it is possible (e.g., `emissions.csv`). - -### 3.1 Default output files - - -#### 3.1.1 capacity.csv - -Reports optimal values of investment variables (except StartCap, which is an input) - -###### Table 15: Structure of the capacity.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -| StartCap |Initial power capacity of each resource type in each zone; this is an input |MW | -| RetCap |Retired power capacity of each resource type in each zone |MW | -| NewCap |Installed capacity of each resource type in each zone |MW| -| EndCap| Total power capacity of each resource type in each zone |MW | -| CapacityConstraintDual |Shadow price of the capacity limit set by Max_Cap_MW for each resource type in each zone. Values are multiplied by -1 so that the output is >=0. |$/MW | -| StartEnergyCap |Initial energy capacity of each resource type in each zone; this is an input and applies only to storage tech.| MWh | -| RetEnergyCap |Retired energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| NewEnergyCap| Installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| EndEnergyCap |Total installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| StartChargeCap| Initial charging power capacity of `STOR = 2` resource type in each zone; this is an input |MW | -| RetChargeCap |Retired charging power capacity of `STOR = 2` resource type in each zone |MW | -| NewChargeCap |Installed charging capacity of each resource type in each zone |MW | -| EndChargeCap |Total charging power capacity of each resource type in each zone |MW| - - - -#### 3.1.2 costs.csv - -Reports optimal objective function value and contribution of each term by zone. - -###### Table 16: Structure of the costs.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -| cTotal |Total objective function value |$ | -| cFix |Total annualized investment and fixed operating & maintainenance (FOM) costs associated with all resources |$ | -| cVar |Total annual variable cost associated with all resources; includes fuel costs for thermal plants |$| -| cNSE |Total annual cost of non-served energy |$| -| cStart |Total annual cost of start-up of thermal power plants| $| -| cUnmetRsv |Total annual cost of not meeting time-dependent operating reserve (spinning) requirements |$ | -| cNetworkExp |Total cost of network expansion |$| -| cEmissionsRevenue |Total and zonal emissions revenue |$ | -| cEmissionsCost |Total an zonal emissions cost |$ | - - - -#### 3.1.3 emissions.csv - -Reports CO2 emissions by zone at each hour; an annual sum row will be provided. If any emission cap is present, emission prices each zone faced by each cap will be copied on top of this table with the following strucutre. - -###### Table 17: Structure of emission prices in the emissions.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -|CO_2\_price |Marginal CO2 abatement cost associated with constraint on maximum annual CO2 emissions; will be same across zones if CO2 emissions constraint is applied for the entire region and not zone-wise |\$/ tonne CO2. | - - - -#### 3.1.4 nse.csv - -Reports non-served energy for every model zone, time step and cost-segment. - - -#### 3.1.5 power.csv - -Reports power discharged by each resource (generation, storage, demand response) in each model time step. - - -#### 3.1.6 reliability.csv - -Reports dual variable of maximum non-served energy constraint (shadow price of reliability constraint) for each model zone and time step. - - -#### 3.1.7 prices.csv - -Reports marginal electricity price for each model zone and time step. Marginal electricity price is equal to the dual variable of the power balance constraint. If GenX is configured as a mixed integer linear program, then this output is only generated if `WriteShadowPrices` flag is activated. If configured as a linear program (i.e. linearized unit commitment or economic dispatch) then output automatically available. - - -#### 3.1.8 status.csv - -Reports computational performance of the model and objective function related information. - -###### Table 18: Structure of the status.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -|Status | termination criteria (optimal, timelimit etc.).|| -|solve | Solve time including time for pre-solve |seconds | -|Objval | Optimal objective function value |$| -|Objbound | Best objective lower bound | $ | -|FinalMIPGap |Optimality gap at termination in case of a mixed-integer linear program (MIP gap); when using Gurobi, the lower bound and MIP gap is reported excluding constant terms (E.g. fixed cost of existing generators that cannot be retired) in the objective function and hence may not be directly usable. |Fraction| - - - -#### 3.1.9 NetRevenue.csv - -This file summarizes the cost, revenue and profit for each generation technology for each region. - -###### Table 19: Stucture of the NetRevenue.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -| Fixed\_OM\_cost\_MW | Fixed Operation and Maintenance cost of the MW capacity. |$| -| Fixed\_OM\_cost\_MWh| Fixed Operation and Maintenance cost of the MWh capacity. Only applicable to energy storage.| $ | -| Var\_OM\_cost\_out| Variable Operation and Maintenance cost of the power generation or discharge. |$ | -| Var\_OM\_cost\_in |Variable Operation and Maintenance cost of the power charge/pumping. Only applicable to energy storage. |$ | -| Fuel\_cost| Fuel cost of the power generation. Only applicable to generation that burns fuel. |$ | -| Charge\_cost |Cost of charging power (due to the payment for electricity) Only applicable to energy storage. |$| -| EmissionsCost| Cost of buying emission credit. |$ | -| StartCost |Cost of generator start-up. |$ | -| Inv\_cost\_MW |Cost of building MW capacity. |$ | -| Inv\_cost\_MWh| Cost of building MWh capacity. |$ | -| EnergyRevenue |Revenue of generating power.| $ | -| SubsidyRevenue| Revenue of Min\_Cap subsidy. |$ | -| ReserveMarginRevenue| Revenue earned from capacity reserve margin constraints. |$| -| ESRRevenue| Revenue selling renewable/clean energy credits. |$ | -| Revenue| Total Revenue.| $ | -| Cost| Total Cost. |$ | -| Profit |Revenue minus Cost. |$ | - - - -### 3.2 Settings-specific outputs - -This section includes the output files that GenX will print if corresponding function is specified in the Settings. - - -#### 3.2.1 CapacityValue.csv - -This file includes the time-dependent capacity value calculated for each generator. GenX will print this file only if the capacity reserve margin constraints are modeled through the setting file. Each row of the file (excluding the header) corresponds to a generator specified in the inputs. Each column starting from the t1 to the second last one stores the result of capacity obligation provided in each hour divided by the total capacity. Thus the number is unitless. If the capacity margin reserve is not binding for one hour, GenX will return zero. The last column specified the name of the corresponding capacity reserve constraint. Note that, if the user calculates the hour-weight-averaged capacity value for each generator using data of the binding hours, the result is what RTO/ISO call capacity credit. - - - - -#### 3.2.2 EnergyRevenue.csv - -This file includes the energy revenue in $ earned by each generator through injecting into the grid. Only annual sum values are available. - - -#### 3.2.3 ChargingCost.csv - -This file includes the charging cost in $ of earned by each generator through withdrawing from the grid. Only annual sum values are available. - - -#### 3.2.4 ReserveMargin.csv - -This file includes the shadow prices of the capacity reserve margin constraints. GenX will print this file only when capacity reserve margin is modeled and the shadow price can be obtained form the solver, as described earlier. Each row (except the header) corresponds to a capacity reserve margin constraint, and each column corresponds to an time step. As a reminder, GenX models the capacity reserve margin (aka capacity market) at the time-dependent level, and each constraint either stands for an overall market or a locality constraint. - - -#### 3.2.5 ReserveMarginRevenue.csv - -This file includes the capacity revenue earned by each generator listed in the input file. GenX will print this file only when capacity reserve margin is modeled and the shadow price can be obtained form the solver. Each row corresponds to a generator, and each column starting from the 6th to the second last is the total revenue from each capacity reserve margin constraint. The revenue is calculated as the capacity contribution of each time steps multiplied by the shadow price, and then the sum is taken over all modeled time steps. The last column is the total revenue received from all capacity reserve margin constraints. As a reminder, GenX models the capacity reserve margin (aka capacity market) at the time-dependent level, and each constraint either stands for an overall market or a locality constraint. - - -#### 3.2.6 ESR\_prices.csv - -This file includes the renewable/clean energy credit price of each modeled RPS/CES constraint. GenX will print this file only when RPS/CES is modeled and the shadow price can be obtained form the solver. The unit is $/MWh. - - -#### 3.2.7 ESR\_Revenue.csv - -This file includes the renewable/clean credit revenue earned by each generator listed in the input file. GenX will print this file only when RPS/CES is modeled and the shadow price can be obtained form the solver. Each row corresponds to a generator, and each column starting from the 6th to the second last is the total revenue earned from each RPS constraint. The revenue is calculated as the total annual generation (if elgible for the corresponding constraint) multiplied by the RPS/CES price. The last column is the total revenue received from all constraint. The unit is $. - - -#### 3.2.8 SubsidyRevenue.csv - -This file includes subsidy revenue earned if a generator specified Min\_Cap is provided in the input file. GenX will print this file only the shadow price can be obtained form the solver. Do not confuse this with the Minimum Capacity Carveout constraint, which is for a subset of generators, and a separate revenue term will be calculated in other files. The unit is $. - -#### 3.2.9 vre_stor_capacity.csv - -Reports optimal values of investment variables (except StartCap, which is an input) for co-located VRE and storage resources - -###### Table 14: Structure of the vre_stor_capacity.csv file ---- -|**Output** |**Description** |**Units** | -| :------------ | :-----------|:-----------| -| StartCapSolar |Initial solar PV capacity of each resource type in each zone; this is an input |MW DC| -| RetCapSolar |Retired solar PV capacity of each resource type in each zone |MW DC| -| NewCapSolar |Installed solar PV capacity of each resource type in each zone |MW DC| -| EndCapSolar| Total solar PV capacity of each resource type in each zone |MW DC| -| StartCapWind |Initial wind capacity of each resource type in each zone; this is an input |MW AC| -| RetCapWind |Retired wind capacity of each resource type in each zone |MW AC| -| NewCapWind |Installed wind capacity of each resource type in each zone |MW AC| -| EndCapWind| Total wind capacity of each resource type in each zone |MW AC| -| StartCapDC |Initial inverter capacity of each resource type in each zone; this is an input |MW AC| -| RetCapDC |Retired inverter capacity of each resource type in each zone |MW AC| -| NewCapDC |Installed inverter capacity of each resource type in each zone |MW AC| -| EndCapDC| Total inverter capacity of each resource type in each zone |MW AC| -| StartCapGrid |Initial grid connection capacity of each resource type in each zone; this is an input |MW AC| -| RetCapGrid |Retired grid connection capacity of each resource type in each zone |MW AC| -| NewCapGrid |Installed grid connection capacity of each resource type in each zone |MW AC| -| EndCapGrid| Total gri connection capacity of each resource type in each zone |MW AC| -| StartEnergyCap |Initial energy capacity of each resource type in each zone; this is an input and applies only to storage tech.| MWh | -| RetEnergyCap |Retired energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| NewEnergyCap| Installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| EndEnergyCap |Total installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | -| StartChargeACCap| Initial charging AC power capacity of `STOR_AC_CHARGE = 2` resource type in each zone; this is an input |MW AC| -| RetChargeACCap |Retired charging AC power capacity of `STOR_AC_CHARGE = 2` resource type in each zone |MW AC| -| NewChargeACCap |Installed charging AC capacity of each resource type in each zone |MW AC| -| EndChargeAC Cap |Total charging power AC capacity of each resource type in each zone |MW AC| -| StartChargeDCCap| Initial charging DC power capacity of `STOR_DC_CHARGE = 2` resource type in each zone; this is an input |MW DC| -| RetChargeDCCap |Retired charging DC power capacity of `STOR_DC_CHARGE = 2` resource type in each zone |MW DC| -| NewChargeDCCap |Installed charging DC capacity of each resource type in each zone |MW DC| -| EndChargeDC Cap |Total charging power DC capacity of each resource type in each zone |MW DC| -| StartDischargeACCap| Initial discharging AC power capacity of `STOR_AC_DISCHARGE = 2` resource type in each zone; this is an input |MW AC| -| RetDischargeACCap |Retired discharging AC power capacity of `STOR_AC_DISCHARGE = 2` resource type in each zone |MW AC| -| NewDischargeACCap |Installed discharging AC capacity of each resource type in each zone |MW AC| -| EndDischargeAC Cap |Total discharging power AC capacity of each resource type in each zone |MW AC| -| StartDischargeDCCap| Initial discharging DC power capacity of `STOR_DC_DISCHARGE = 2` resource type in each zone; this is an input |MW DC| -| RetDischargeDCCap |Retired discharging DC power capacity of `STOR_DC_DISCHARGE = 2` resource type in each zone |MW DC| -| NewDischargeDCCap |Installed discharging DC capacity of each resource type in each zone |MW DC| -| EndDischargeDC Cap |Total discharging power DC capacity of each resource type in each zone |MW DC| - -#### 3.2.10 vre_stor_dc_charge.csv - -Reports DC charging by each co-located VRE and storage resource (could include grid or BTM charging) in each model time step. - -#### 3.2.11 vre_stor_ac_charge.csv - -Reports AC charging by each co-located VRE and storage resource (could include grid or BTM charging) in each model time step. - -#### 3.2.12 vre_stor_dc_discharge.csv - -Reports storage DC discharging by each co-located VRE and storage resource in each model time step. - -#### 3.2.13 vre_stor_ac_discharge.csv - -Reports storage AC discharging charging by each co-located VRE and storage resource in each model time step. - - -#### 3.2.14 vre_stor_solar_power.csv - -Reports solar PV generation in AC terms by each co-located VRE and storage resource in each model time step. - -#### 3.2.15 vre_stor_wind_power.csv - -Reports wind generation in AC terms by each co-located VRE and storage resource in each model time step. - -#### 3.2.16 maint_down.csv - -Only written if at least one plant has the scheduled maintenance formulation enabled. -Reports the number of resource-components which are under maintenance during each model time step. diff --git a/docs/src/model_notation.md b/docs/src/model_notation.md index aa8d39df27..b461a83511 100644 --- a/docs/src/model_notation.md +++ b/docs/src/model_notation.md @@ -66,84 +66,84 @@ $\mathcal{W} \subseteq \mathcal{G}$ | where $\mathcal{W}$ set of hydroelectric g --- |**Notation** | **Description**| | :------------ | :-----------| -|$\Omega_{y,z} \in \mathbb{R}_+$ | Installed capacity in terms of the number of units (each unit, being of size $\overline{\Omega}_{y,z}^{size}$) of resource $y$ in zone $z$ [Dimensionless] (Note that for co-located VRE and storage resources, this value represents the installed capacity of the grid connection in MW AC)| -|$\Omega^{energy}_{y,z} \in \mathbb{R}_+$ | Installed energy capacity of resource $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that for co-located VRE and storage resources, this value represents the installed capacity of the storage component in MWh)| -|$\Omega^{charge}_{y,z} \in \mathbb{R}_+$ | Installed charging power capacity of resource $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ [MW]| -|$\Omega^{pv}_{y,z} \in \mathbb{R}_+$ | Installed solar PV capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\Omega^{wind}_{y,z} \in \mathbb{R}_+$ | Installed wind capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\Omega^{inv}_{y,z} \in \mathbb{R}_+$ | Installed inverter capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\Omega^{dc,dis}_{y,z} \in \mathbb{R}_+$ | Installed storage DC discharge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\Omega^{dc,cha}_{y,z} \in \mathbb{R}_+$ | Installed storage DC charge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\Omega^{ac,dis}_{y,z} \in \mathbb{R}_+$ | Installed storage AC discharge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\Omega^{ac,cha}_{y,z} \in \mathbb{R}_+$ | Installed storage AC charge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [MW AC]| -|$\Delta_{y,z} \in \mathbb{R}_+$ | Retired capacity of technology $y$ from existing capacity in zone $z$ [MW] (Note that for co-located VRE and storage resources, this value represents the retired capacity of the grid connection in MW AC)| -|$\Delta^{energy}_{y,z} \in \mathbb{R}_+$ | Retired energy capacity of technology $y$ from existing capacity in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that for co-located VRE and storage resources, this value represents the retired capacity of the storage component in MWh)| -|$\Delta^{charge}_{y,z} \in \mathbb{R}_+$ | Retired charging capacity of technology $y$ from existing capacity in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$[MW]| -|$\Delta^{pv}_{y,z} \in \mathbb{R}_+$ | Retired solar PV capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\Delta^{wind}_{y,z} \in \mathbb{R}_+$ | Retired wind capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\Delta^{inv}_{y,z} \in \mathbb{R}_+$ | Retired inverter capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\Delta^{dc,dis}_{y,z} \in \mathbb{R}_+$ | Retired storage DC discharge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\Delta^{dc,cha}_{y,z} \in \mathbb{R}_+$ | Retired storage DC charge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\Delta^{ac,dis}_{y,z} \in \mathbb{R}_+$ | Retired storage AC discharge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\Delta^{ac,cha}_{y,z} \in \mathbb{R}_+$ | Retired storage AC charge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [MW AC]| -|$\Delta_{y,z}^{total} \in \mathbb{R}_+$ | Total installed capacity of technology $y$ in zone $z$ [MW] (Note that co-located VRE and storage resources, this value represents the total capacity of the grid connection in MW AC) | -|$\Delta_{y,z}^{total,energy} \in \mathbb{R}_+$ | Total installed energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that co-located VRE and storage resources, this value represents the total installed energy capacity of the storage component in MWh) | -|$\Delta_{y,z}^{total,charge} \in \mathbb{R}_+$ | Total installed charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ [MW]| -|$\Delta_{y,z}^{total,pv} \in \mathbb{R}_+$ | Total installed solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\Delta_{y,z}^{total,wind} \in \mathbb{R}_+$ | Total installed wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\Delta_{y,z}^{total,inv} \in \mathbb{R}_+$ | Total installed inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\Delta_{y,z}^{total,dc,dis} \in \mathbb{R}_+$ | Total installed storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\Delta_{y,z}^{total,dc,cha} \in \mathbb{R}_+$ | Total installed storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\Delta_{y,z}^{total,ac,dis} \in \mathbb{R}_+$ | Total installed storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\Delta_{y,z}^{total,ac,cha} \in \mathbb{R}_+$ | Total installed storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [MW AC]| -|$\bigtriangleup\varphi^{max}_{l}$ | Additional transmission capacity added to line $l$ [MW] | -|$\Theta_{y,z,t} \in \mathbb{R}_+$ | Energy injected into the grid by technology $y$ at time step $t$ in zone $z$ [MWh]| -|$\Theta^{pv}_{y,z,t} \in \mathbb{R}_+$ | Energy generated by the solar PV component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MWh]| -|$\Theta^{wind}_{y,z,t} \in \mathbb{R}_+$ | Energy generated by the wind component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MWh]| -|$\Theta^{dc}_{y,z,t} \in \mathbb{R}_+$ | Energy discharged by the storage DC component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a discharge DC component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ [MWh]| -|$\Theta^{ac}_{y,z,t} \in \mathbb{R}_+$ | Energy discharged by the storage AC component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a discharge AC component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ [MWh]| -|$\Pi_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from grid by technology $y$ at time step $t$ in zone $z$ [MWh]| -|$\Pi^{dc}_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from the VRE and grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a charge DC component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ [MWh]| -|$\Pi^{ac}_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from the VRE and grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a charge AC component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ [MWh]| -|$\Gamma_{y,z,t} \in \mathbb{R}_+$ | Stored energy level of technology $y$ at end of time step $t$ in zone $z$ [MWh]| -|$\Lambda_{s,z,t} \in \mathbb{R}_+$ | Non-served energy/curtailed demand from the price-responsive demand segment $s$ in zone $z$ at time step $t$ [MWh] | -|$l_{l,t} \in \mathbb{R}_+$ | Losses in line $l$ at time step $t$ [MWh]| -|$\varrho_{y,z,t}\in \mathbb{R}_+$ | Spillage from a reservoir technology $y$ at end of time step $t$ in zone $z$ [MWh]| -|$f_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves from technology $y$ in zone $z$ at time $t$\footnote{Regulation reserve contribution are modeled to be symmetric, consistent with current practice in electricity markets} | -|$r_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] from technology $y$ in zone $z$ at time $t$\footnote{we are not modeling down spinning reserves since these are usually never binding for high variable renewable energy systems}| -|$f^{charge}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves from charging storage technology $y$ in zone $z$ at time $t$ | -|$f^{discharge}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves from discharging storage technology $y$ in zone $z$ at time $t$ | -|$r^{charge}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] from charging storage technology $y$ in zone $z$ at time $t$| -|$r^{discharge}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] from discharging storage technology $y$ in zone $z$ at time $t$| +|$\Omega_{y,z} \in \mathbb{R}_+$ | Installed capacity in terms of the number of units (each unit, being of size $\overline{\Omega}_{y,z}^{size}$) of resource $y$ in zone $z$ \[Dimensionless\] (Note that for co-located VRE and storage resources, this value represents the installed capacity of the grid connection in \[MW AC\])| +|$\Omega^{energy}_{y,z} \in \mathbb{R}_+$ | Installed energy capacity of resource $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh] (Note that for co-located VRE and storage resources, this value represents the installed capacity of the storage component in MWh)| +|$\Omega^{charge}_{y,z} \in \mathbb{R}_+$ | Installed charging power capacity of resource $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ \[MW\]| +|$\Omega^{pv}_{y,z} \in \mathbb{R}_+$ | Installed solar PV capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\Omega^{wind}_{y,z} \in \mathbb{R}_+$ | Installed wind capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\Omega^{inv}_{y,z} \in \mathbb{R}_+$ | Installed inverter capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\Omega^{dc,dis}_{y,z} \in \mathbb{R}_+$ | Installed storage DC discharge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\Omega^{dc,cha}_{y,z} \in \mathbb{R}_+$ | Installed storage DC charge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\Omega^{ac,dis}_{y,z} \in \mathbb{R}_+$ | Installed storage AC discharge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\Omega^{ac,cha}_{y,z} \in \mathbb{R}_+$ | Installed storage AC charge capacity of resource $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ \[MW AC\]| +|$\Delta_{y,z} \in \mathbb{R}_+$ | Retired capacity of technology $y$ from existing capacity in zone $z$ \[MW\] (Note that for co-located VRE and storage resources, this value represents the retired capacity of the grid connection in MW AC)| +|$\Delta^{energy}_{y,z} \in \mathbb{R}_+$ | Retired energy capacity of technology $y$ from existing capacity in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh] (Note that for co-located VRE and storage resources, this value represents the retired capacity of the storage component in MWh)| +|$\Delta^{charge}_{y,z} \in \mathbb{R}_+$ | Retired charging capacity of technology $y$ from existing capacity in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$\[MW\]| +|$\Delta^{pv}_{y,z} \in \mathbb{R}_+$ | Retired solar PV capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\Delta^{wind}_{y,z} \in \mathbb{R}_+$ | Retired wind capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\Delta^{inv}_{y,z} \in \mathbb{R}_+$ | Retired inverter capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\Delta^{dc,dis}_{y,z} \in \mathbb{R}_+$ | Retired storage DC discharge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\Delta^{dc,cha}_{y,z} \in \mathbb{R}_+$ | Retired storage DC charge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\Delta^{ac,dis}_{y,z} \in \mathbb{R}_+$ | Retired storage AC discharge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\Delta^{ac,cha}_{y,z} \in \mathbb{R}_+$ | Retired storage AC charge capacity of technology $y$ from existing capacity in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ \[MW AC\]| +|$\Delta_{y,z}^{total} \in \mathbb{R}_+$ | Total installed capacity of technology $y$ in zone $z$ \[MW\] (Note that co-located VRE and storage resources, this value represents the total capacity of the grid connection in MW AC) | +|$\Delta_{y,z}^{total,energy} \in \mathbb{R}_+$ | Total installed energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh] (Note that co-located VRE and storage resources, this value represents the total installed energy capacity of the storage component in MWh) | +|$\Delta_{y,z}^{total,charge} \in \mathbb{R}_+$ | Total installed charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ \[MW\]| +|$\Delta_{y,z}^{total,pv} \in \mathbb{R}_+$ | Total installed solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\Delta_{y,z}^{total,wind} \in \mathbb{R}_+$ | Total installed wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\Delta_{y,z}^{total,inv} \in \mathbb{R}_+$ | Total installed inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\Delta_{y,z}^{total,dc,dis} \in \mathbb{R}_+$ | Total installed storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\Delta_{y,z}^{total,dc,cha} \in \mathbb{R}_+$ | Total installed storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\Delta_{y,z}^{total,ac,dis} \in \mathbb{R}_+$ | Total installed storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\Delta_{y,z}^{total,ac,cha} \in \mathbb{R}_+$ | Total installed storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ \[MW AC\]| +|$\bigtriangleup\varphi^{max}_{l}$ | Additional transmission capacity added to line $l$ \[MW\] | +|$\Theta_{y,z,t} \in \mathbb{R}_+$ | Energy injected into the grid by technology $y$ at time step $t$ in zone $z$ \[MWh]| +|$\Theta^{pv}_{y,z,t} \in \mathbb{R}_+$ | Energy generated by the solar PV component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MWh]| +|$\Theta^{wind}_{y,z,t} \in \mathbb{R}_+$ | Energy generated by the wind component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MWh]| +|$\Theta^{dc}_{y,z,t} \in \mathbb{R}_+$ | Energy discharged by the storage DC component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a discharge DC component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ \[MWh]| +|$\Theta^{ac}_{y,z,t} \in \mathbb{R}_+$ | Energy discharged by the storage AC component into the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a discharge AC component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ \[MWh]| +|$\Pi_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from grid by technology $y$ at time step $t$ in zone $z$ \[MWh]| +|$\Pi^{dc}_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from the VRE and grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a charge DC component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ \[MWh]| +|$\Pi^{ac}_{y,z,t} \in \mathbb{R}_+$ | Energy withdrawn from the VRE and grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with a charge AC component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ \[MWh]| +|$\Gamma_{y,z,t} \in \mathbb{R}_+$ | Stored energy level of technology $y$ at end of time step $t$ in zone $z$ \[MWh]| +|$\Lambda_{s,z,t} \in \mathbb{R}_+$ | Non-served energy/curtailed demand from the price-responsive demand segment $s$ in zone $z$ at time step $t$ \[MWh] | +|$l_{l,t} \in \mathbb{R}_+$ | Losses in line $l$ at time step $t$ \[MWh]| +|$\varrho_{y,z,t}\in \mathbb{R}_+$ | Spillage from a reservoir technology $y$ at end of time step $t$ in zone $z$ \[MWh]| +|$f_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves from technology $y$ in zone $z$ at time $t$\footnote{Regulation reserve contribution are modeled to be symmetric, consistent with current practice in electricity markets} | +|$r_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] from technology $y$ in zone $z$ at time $t (we are not modeling down spinning reserves since these are usually never binding for high variable renewable energy systems)| +|$f^{charge}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves from charging storage technology $y$ in zone $z$ at time $t$ | +|$f^{discharge}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves from discharging storage technology $y$ in zone $z$ at time $t$ | +|$r^{charge}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] from charging storage technology $y$ in zone $z$ at time $t$| +|$r^{discharge}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] from discharging storage technology $y$ in zone $z$ at time $t$| |$r^{unmet}_t \in \mathbb{R}_+$ | Shortfall in provision of upward operating spinning reserves during each time period $t \in T$ | -|$f^{pv}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the solar PV component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ | -|$r^{pv}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the solar PV component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ | -|$f^{wind}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the wind component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ | -|$r^{wind}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the wind component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ | -|$f^{dc,dis}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the storage DC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC discharge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ | -|$r^{dc,dis}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the storage DC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC discharge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ | -|$f^{dc,cha}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the storage DC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC charge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ | -|$r^{dc,cha}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the storage DC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC charge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ | -|$f^{ac,dis}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the storage AC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC discharge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ | -|$r^{ac,dis}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the storage AC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC discharge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ | -|$f^{ac,cha}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution [MW] for up and down reserves for the storage AC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC charge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ | -|$r^{ac,cha}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution [MW] for the storage AC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC charge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ | +|$f^{pv}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the solar PV component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ | +|$r^{pv}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the solar PV component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ | +|$f^{wind}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the wind component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ | +|$r^{wind}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the wind component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ | +|$f^{dc,dis}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the storage DC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC discharge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ | +|$r^{dc,dis}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the storage DC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC discharge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,dis}$ | +|$f^{dc,cha}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the storage DC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC charge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ | +|$r^{dc,cha}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the storage DC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage DC charge component, $y \in \mathcal{VS}^{sym,dc} \cup y \in \mathcal{VS}^{asym,dc,cha}$ | +|$f^{ac,dis}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the storage AC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC discharge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ | +|$r^{ac,dis}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the storage AC discharge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC discharge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,dis}$ | +|$f^{ac,cha}_{y,z,t}\in \mathbb{R}_+$ | Frequency regulation contribution \[MW\] for up and down reserves for the storage AC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC charge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ | +|$r^{ac,cha}_{y,z,t} \in \mathbb{R}_+$ | Upward spinning reserves contribution \[MW\] for the storage AC charge component from technology $y$ in zone $z$ at time $t$ - only applicable for co-located VRE and storage resources with a storage AC charge component, $y \in \mathcal{VS}^{sym,ac} \cup y \in \mathcal{VS}^{asym,ac,cha}$ | |$\alpha^{Contingency,Aux}_{y,z} \in \{0,1\}$ | Binary variable that is set to be 1 if the total installed capacity $\Delta^{\text{total}}_{y,z} > 0$ for any generator $y \in \mathcal{UC}$ and zone $z$, and can be 0 otherwise | -|$\Phi_{l,t} \in \mathbb{R}_+$ | Power flow in line $l$ at time step $t$ [MWh]| +|$\Phi_{l,t} \in \mathbb{R}_+$ | Power flow in line $l$ at time step $t$ \[MWh]| |$v_{y,z,t}$ | Commitment state of the generation cluster $y$ in zone $z$ at time $t$| |$\mathcal{X}_{y,z,t}$ | Number of startup decisions, of the generation cluster $y$ in zone $z$ at time $t$| |$\zeta_{y,z,t}$ | Number of shutdown decisions, of the generation cluster $y$ in zone $z$ at time $t$| -|$\mathcal{Q}_{o,n} \in \mathbb{R}_+$ | Inventory of storage of type $o$ at the beginning of input period $n$ [MWh]| -|$\Delta\mathcal{Q}_{o,m} \in \mathbb{R}$ | Excess storage inventory built up during representative period $m$ [MWh]| +|$\mathcal{Q}_{o,n} \in \mathbb{R}_+$ | Inventory of storage of type $o$ at the beginning of input period $n$ \[MWh]| +|$\Delta\mathcal{Q}_{o,m} \in \mathbb{R}$ | Excess storage inventory built up during representative period $m$ \[MWh]| |$ON^{+}_{l,t} \in \{0,1\} $ | Binary variable to activate positive flows on line $l$ in time $t$| -|$TransON^{+}_{l,t} \in \mathbb{R}_+$ | Variable defining maximum positive flow in line $l$ in time $t$ [MW]| -|$\Theta^{CRM}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage resource that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for storage resources with activated capacity reserve margin policies, $y \in \mathcal{O}$ [MWh]| -|$\Pi^{CRM}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage resource from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for storage resources with activated capacity reserve margin policies, $y \in \mathcal{O}$ [MWh]| -|$\Theta^{CRM,dc}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage DC component that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ [MWh]| -|$\Pi^{CRM,dc}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage DC component from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ [MWh]| -|$\Theta^{CRM,ac}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage AC component that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ [MWh]| -|$\Pi^{CRM,ac}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage AC component from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ [MWh]| -|$\Gamma^{CRM}_{y,z,t} \in \mathbb{R}_+$ | Total "virtual" state of charge being held in reserves for technology $y$ at time step $t$ in zone $z$ - only applicable for standalone storage and co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh]| +|$TransON^{+}_{l,t} \in \mathbb{R}_+$ | Variable defining maximum positive flow in line $l$ in time $t$ \[MW\]| +|$\Theta^{CRM}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage resource that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for storage resources with activated capacity reserve margin policies, $y \in \mathcal{O}$ \[MWh]| +|$\Pi^{CRM}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage resource from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for storage resources with activated capacity reserve margin policies, $y \in \mathcal{O}$ \[MWh]| +|$\Theta^{CRM,dc}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage DC component that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ \[MWh]| +|$\Pi^{CRM,dc}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage DC component from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ \[MWh]| +|$\Theta^{CRM,ac}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy discharged by a storage AC component that contributes to the capacity reserve margin for technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ \[MWh]| +|$\Pi^{CRM,ac}_{y,z,t} \in \mathbb{R}_+$ | "Virtual" energy withdrawn by a storage AC component from the grid by technology $y$ at time step $t$ in zone $z$ - only applicable for co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{VS}^{stor}$ \[MWh]| +|$\Gamma^{CRM}_{y,z,t} \in \mathbb{R}_+$ | Total "virtual" state of charge being held in reserves for technology $y$ at time step $t$ in zone $z$ - only applicable for standalone storage and co-located VRE and storage resources with activated capacity reserve margin policies, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh]| --- @@ -151,55 +151,55 @@ $\mathcal{W} \subseteq \mathcal{G}$ | where $\mathcal{W}$ set of hydroelectric g --- |**Notation** | **Description**| | :------------ | :-----------| -|$D_{z,t}$ | Electricity demand in zone $z$ and at time step $t$ [MWh]| +|$D_{z,t}$ | Electricity demand in zone $z$ and at time step $t$ \[MWh\]| |$\tau^{period}$ | number of time steps in each representative period $w \in \mathcal{W}^{rep}$ and each input period $w \in \mathcal{W}^{input}$| -|$\omega_{t}$ | weight of each model time step $\omega_t =1 \forall t \in T$ when modeling each time step of the year at an hourly resolution [1/year]| -|$n_s^{slope}$ | Cost of non-served energy/demand curtailment for price-responsive demand segment $s$ [\$/MWh]| -|$n_s^{size}$ | Size of price-responsive demand segment $s$ as a fraction of the hourly zonal demand [%]| -|$\overline{\Omega}_{y,z}$ | Maximum capacity of technology $y$ in zone $z$ [MW] (Note that for co-located VRE and storage resources, this value represents the maximum grid connection capacity in MW AC)| -|$\underline{\Omega}_{y,z}$ | Minimum capacity of technology $y$ in zone $z$ [MW] (Note that for co-located VRE and storage resources, this value represents the minimum grid connection capacity in MW AC)| -|$\overline{\Omega}^{energy}_{y,z}$ | Maximum energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that for co-located VRE and storage resources, this value represents the maximum storage component in MWh)| -|$\underline{\Omega}^{energy}_{y,z}$ | Minimum energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that for co-located VRE and storage resources, this value represents the minimum storage component in MWh)| -|$\overline{\Omega}^{charge}_{y,z}$ | Maximum charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ [MW]| -|$\underline{\Omega}^{charge}_{y,z}$ | Minimum charging capacity of technology $y$ in zone $z$- only applicable for storage resources, $y \in \mathcal{O}^{asym}$ [MW]| -|$\overline{\Omega}^{pv}_{y,z}$ | Maximum solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\underline{\Omega}^{pv}_{y,z}$ | Minimum solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\overline{\Omega}^{wind}_{y,z}$ | Maximum wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\underline{\Omega}^{wind}_{y,z}$ | Minimum wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\overline{\Omega}^{inv}_{y,z}$ | Maximum inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\underline{\Omega}^{inv}_{y,z}$ | Minimum inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\overline{\Omega}^{dc,dis}_{y,z}$ | Maximum storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\underline{\Omega}^{dc,dis}_{y,z}$ | Minimum storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\overline{\Omega}^{dc,cha}_{y,z}$ | Maximum storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\underline{\Omega}^{dc,cha}_{y,z}$ | Minimum storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\overline{\Omega}^{ac,dis}_{y,z}$ | Maximum storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\underline{\Omega}^{ac,dis}_{y,z}$ | Minimum storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\overline{\Omega}^{ac,cha}_{y,z}$ | Maximum storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [MW AC]| -|$\underline{\Omega}^{ac,cha}_{y,z}$ | Minimum storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [MW AC]| -|$\overline{\Delta}_{y,z}$ | Existing installed capacity of technology $y$ in zone $z$ [MW] (Note that for co-located VRE and storage resources, this value represents the existing installed capacity of the grid connection in MW AC)| -|$\overline{\Delta^{energy}_{y,z}}$ | Existing installed energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [MWh] (Note that for co-located VRE and storage resources, this value represents the existing installed energy capacity of the storage component in MWh)| -|$\overline{\Delta^{charge}_{y,z}}$ | Existing installed charging capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ [MW]| -|$\overline{\Delta^{pv}_{y,z}}$ | Existing installed solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [MW DC]| -|$\overline{\Delta^{wind}_{y,z}}$ | Existing installed wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [MW AC]| -|$\overline{\Delta^{inv}_{y,z}}$ | Existing installed inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [MW AC]| -|$\overline{\Delta^{dc,dis}_{y,z}}$ | Existing installed storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [MW DC]| -|$\overline{\Delta^{dc,cha}_{y,z}}$ | Existing installed storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW DC]| -|$\overline{\Delta^{ac,dis}_{y,z}}$ | Existing installed storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [MW AC]| -|$\overline{\Delta^{dc,cha}_{y,z}}$ | Existing installed storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [MW AC]| -|$\overline{\Omega}_{y,z}^{size}$ | Unit size of technology $y$ in zone $z$ [MW]| -|$\pi_{y,z}^{INVEST}$ | Investment cost (annual amortization of total construction cost) for power capacity of technology $y$ in zone $z$ [\$/MW-yr] (Note that for co-located VRE and storage resources, this value represents the investment cost of the grid connection capacity in \$/MW AC-yr)| -|$\pi_{y,z}^{INVEST,energy}$ | Investment cost (annual amortization of total construction cost) for energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{pv}$ [\$/MWh-yr] (Note that for co-located VRE and storage resources, this value represents the investment cost of the energy capacity of the storage component in \$/MWh-yr)| -|$\pi_{y,z}^{INVEST,charge}$ | Investment cost (annual amortization of total construction cost) for charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ [\$/MW-yr]| -|$\pi_{y,z}^{INVEST,pv}$ | Investment cost (annual amortization of total construction cost) for solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [\$/MW DC-yr]| -|$\pi_{y,z}^{INVEST,wind}$ | Investment cost (annual amortization of total construction cost) for wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [\$/MW AC-yr]| -|$\pi_{y,z}^{INVEST,inv}$ | Investment cost (annual amortization of total construction cost) for inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [\$/MW AC-yr]| +|$\omega_{t}$ | weight of each model time step $\omega_t =1 \forall t \in T$ when modeling each time step of the year at an hourly resolution \[1/year\]| +|$n_s^{slope}$ | Cost of non-served energy/demand curtailment for price-responsive demand segment $s$ \[\$/MWh\]| +|$n_s^{size}$ | Size of price-responsive demand segment $s$ as a fraction of the hourly zonal demand \[%\]| +|$\overline{\Omega}_{y,z}$ | Maximum capacity of technology $y$ in zone $z$ \[MW\] (Note that for co-located VRE and storage resources, this value represents the maximum grid connection capacity in MW AC)| +|$\underline{\Omega}_{y,z}$ | Minimum capacity of technology $y$ in zone $z$ \[MW\] (Note that for co-located VRE and storage resources, this value represents the minimum grid connection capacity in MW AC)| +|$\overline{\Omega}^{energy}_{y,z}$ | Maximum energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh\] (Note that for co-located VRE and storage resources, this value represents the maximum storage component in MWh)| +|$\underline{\Omega}^{energy}_{y,z}$ | Minimum energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh\] (Note that for co-located VRE and storage resources, this value represents the minimum storage component in MWh)| +|$\overline{\Omega}^{charge}_{y,z}$ | Maximum charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}^{asym}$ \[MW\]| +|$\underline{\Omega}^{charge}_{y,z}$ | Minimum charging capacity of technology $y$ in zone $z$- only applicable for storage resources, $y \in \mathcal{O}^{asym}$ \[MW\]| +|$\overline{\Omega}^{pv}_{y,z}$ | Maximum solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\underline{\Omega}^{pv}_{y,z}$ | Minimum solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\overline{\Omega}^{wind}_{y,z}$ | Maximum wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\underline{\Omega}^{wind}_{y,z}$ | Minimum wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\overline{\Omega}^{inv}_{y,z}$ | Maximum inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\underline{\Omega}^{inv}_{y,z}$ | Minimum inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\overline{\Omega}^{dc,dis}_{y,z}$ | Maximum storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\underline{\Omega}^{dc,dis}_{y,z}$ | Minimum storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\overline{\Omega}^{dc,cha}_{y,z}$ | Maximum storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\underline{\Omega}^{dc,cha}_{y,z}$ | Minimum storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\overline{\Omega}^{ac,dis}_{y,z}$ | Maximum storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\underline{\Omega}^{ac,dis}_{y,z}$ | Minimum storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\overline{\Omega}^{ac,cha}_{y,z}$ | Maximum storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ \[MW AC\]| +|$\underline{\Omega}^{ac,cha}_{y,z}$ | Minimum storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ \[MW AC\]| +|$\overline{\Delta}_{y,z}$ | Existing installed capacity of technology $y$ in zone $z$ \[MW\] (Note that for co-located VRE and storage resources, this value represents the existing installed capacity of the grid connection in \[MW AC\])| +|$\overline{\Delta^{energy}_{y,z}}$ | Existing installed energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[MWh] (Note that for co-located VRE and storage resources, this value represents the existing installed energy capacity of the storage component in MWh)| +|$\overline{\Delta^{charge}_{y,z}}$ | Existing installed charging capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ \[MW\]| +|$\overline{\Delta^{pv}_{y,z}}$ | Existing installed solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[MW DC\]| +|$\overline{\Delta^{wind}_{y,z}}$ | Existing installed wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[MW AC\]| +|$\overline{\Delta^{inv}_{y,z}}$ | Existing installed inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[MW AC\]| +|$\overline{\Delta^{dc,dis}_{y,z}}$ | Existing installed storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ \[MW DC\]| +|$\overline{\Delta^{dc,cha}_{y,z}}$ | Existing installed storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW DC\]| +|$\overline{\Delta^{ac,dis}_{y,z}}$ | Existing installed storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ \[MW AC\]| +|$\overline{\Delta^{dc,cha}_{y,z}}$ | Existing installed storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an asymmetric storage AC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ \[MW AC\]| +|$\overline{\Omega}_{y,z}^{size}$ | Unit size of technology $y$ in zone $z$ \[MW\]| +|$\pi_{y,z}^{INVEST}$ | Investment cost (annual amortization of total construction cost) for power capacity of technology $y$ in zone $z$ \[\$/MW-yr\] (Note that for co-located VRE and storage resources, this value represents the investment cost of the grid connection capacity in \$/MW AC-yr)| +|$\pi_{y,z}^{INVEST,energy}$ | Investment cost (annual amortization of total construction cost) for energy capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{pv}$ \[\$/MWh-yr\] (Note that for co-located VRE and storage resources, this value represents the investment cost of the energy capacity of the storage component in \$/MWh-yr)| +|$\pi_{y,z}^{INVEST,charge}$ | Investment cost (annual amortization of total construction cost) for charging power capacity of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ \[\$/MW-yr\]| +|$\pi_{y,z}^{INVEST,pv}$ | Investment cost (annual amortization of total construction cost) for solar PV capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ \[\$/MW DC-yr\]| +|$\pi_{y,z}^{INVEST,wind}$ | Investment cost (annual amortization of total construction cost) for wind capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ \[\$/MW AC-yr\]| +|$\pi_{y,z}^{INVEST,inv}$ | Investment cost (annual amortization of total construction cost) for inverter capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ \[\$/MW AC-yr\]| |$\pi_{y,z}^{INVEST,dc,dis}$ | Investment cost (annual amortization of total construction cost) for storage DC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a storage DC discharge component, $y \in \mathcal{VS}^{asym,dc,dis}$ [\$/MW DC-yr]| |$\pi_{y,z}^{INVEST,dc,cha}$ | Investment cost (annual amortization of total construction cost) for storage DC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a storage DC charge component, $y \in \mathcal{VS}^{asym,dc,cha}$ [\$/MW DC-yr]| |$\pi_{y,z}^{INVEST,ac,dis}$ | Investment cost (annual amortization of total construction cost) for storage AC discharge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a storage AC discharge component, $y \in \mathcal{VS}^{asym,ac,dis}$ [\$/MW AC-yr]| |$\pi_{y,z}^{INVEST,ac,cha}$ | Investment cost (annual amortization of total construction cost) for storage AC charge capacity of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a storage AC charge component, $y \in \mathcal{VS}^{asym,ac,cha}$ [\$/MW AC-yr]| -|$\pi_{y,z}^{FOM}$ | Fixed O&M cost of technology $y$ in zone $z$ [\$/MW-yr] (Note that for co-located VRE and storage resources, this value represents the fixed O&M cost of the grid connection capacity in \$/MW AC-yr) | -|$\pi_{y,z}^{FOM,energy}$ | Fixed O&M cost of energy component of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ [\$/MWh-yr] (Note that for co-located VRE and storage resources, this value represents the fixed O&M cost of the storage energy capacity in \$/MWh-yr)| -|$\pi_{y,z}^{FOM,charge}$ | Fixed O&M cost of charging power component of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ [\$/MW-yr]| +|$\pi_{y,z}^{FOM}$ | Fixed O&M cost of technology $y$ in zone $z$ \[\$/MW-yr\] (Note that for co-located VRE and storage resources, this value represents the fixed O&M cost of the grid connection capacity in \$/MW AC-yr) | +|$\pi_{y,z}^{FOM,energy}$ | Fixed O&M cost of energy component of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O} \cup y \in \mathcal{VS}^{stor}$ \[\$/MWh-yr\] (Note that for co-located VRE and storage resources, this value represents the fixed O&M cost of the storage energy capacity in \$/MWh-yr)| +|$\pi_{y,z}^{FOM,charge}$ | Fixed O&M cost of charging power component of technology $y$ in zone $z$ - only applicable for storage resources, $y \in \mathcal{O}$ \[\$/MW-yr\]| |$\pi_{y,z}^{FOM,pv}$ | Fixed O&M cost of the solar PV component of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a solar PV component, $y \in \mathcal{VS}^{pv}$ [\$/MW DC-yr]| |$\pi_{y,z}^{FOM,wind}$ | Fixed O&M cost of the wind component of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with a wind component, $y \in \mathcal{VS}^{wind}$ [\$/MW AC-yr]| |$\pi_{y,z}^{FOM,inv}$ | Fixed O&M cost of the inverter component of technology $y$ in zone $z$ - only applicable for co-located VRE and storage resources with an inverter component, $y \in \mathcal{VS}^{inv}$ [\$/MW AC-yr]| @@ -219,15 +219,15 @@ $\mathcal{W} \subseteq \mathcal{G}$ | where $\mathcal{W}$ set of hydroelectric g |$\pi_{y,z}^{START}$ | Startup cost of technology $y$ in zone $z$ [\$/startup]| |$\upsilon^{reg}_{y,z}$ | Maximum fraction of capacity that a resource $y$ in zone $z$ can contribute to frequency regulation reserve requirements| |$\upsilon^{rsv}_{y,z}$ | Maximum fraction of capacity that a resource $y$ in zone $z$ can contribute to upward operating (spinning) reserve requirements| -|$\pi^{Unmet}_{rsv}$ | Cost of unmet spinning reserves in [\$/MW]| +|$\pi^{Unmet}_{rsv}$ | Cost of unmet spinning reserves in [\$/MW\]| |$\epsilon^{demand}_{reg}$ | Frequency regulation reserve requirement as a fraction of forecasted demand in each time step | |$\epsilon^{vre}_{reg}$ | Frequency regulation reserve requirement as a fraction of variable renewable energy generation in each time step | |$\epsilon^{demand}_{rsv}$ | Operating (spinning) reserve requirement as a fraction of forecasted demand in each time step | |$\epsilon^{vre}_{rsv}$ | Operating (spinning) reserve requirement as a fraction of forecasted variable renewable energy generation in each time step | |$\epsilon_{y,z}^{CO_2}$ | CO$_2$ emissions per unit energy produced by technology $y$ in zone $z$ [metric tons/MWh]| |$\epsilon_{y,z,p}^{MinTech}$ | Equals to 1 if a generator of technology $y$ in zone $z$ is eligible for minimum capacity carveout policy $p \in \mathcal{P}^{MinTech}$, otherwise 0| -|$REQ_p^{MinTech}$ | The minimum capacity requirement of minimum capacity carveout policy $p \in \mathcal{P}^{MinTech}$ [MW]| -|$REQ_p^{MaxTech}$ | The maximum capacity requirement of minimum capacity carveout policy $p \in \mathcal{P}^{MinTech}$ [MW]| +|$REQ_p^{MinTech}$ | The minimum capacity requirement of minimum capacity carveout policy $p \in \mathcal{P}^{MinTech}$ [MW\]| +|$REQ_p^{MaxTech}$ | The maximum capacity requirement of minimum capacity carveout policy $p \in \mathcal{P}^{MinTech}$ [MW\]| |$\epsilon_{y,z,p}^{CRM}$ | Capacity derating factor of technology $y$ in zone $z$ for capacity reserve margin policy $p \in \mathcal{P}^{CRM}$ [fraction]| |$RM_{z,p}^{CRM}$ | Reserve margin of zone $z$ of capacity reserve margin policy $p \in \mathcal{P}^{CRM}$ [fraction]| |$\epsilon_{z,p,mass}^{CO_2}$ | Emission budget of zone $z$ under the emission cap $p \in \mathcal{P}^{CO_2}_{mass}$ [ million of metric tonnes]| @@ -249,7 +249,7 @@ $\mathcal{W} \subseteq \mathcal{G}$ | where $\mathcal{W}$ set of hydroelectric g |$\eta_{y,z}^{inverter}$ | Inverter efficiency representing losses from converting DC to AC power and vice versa for technology $y$ in zone $z$ for co-located VRE and storage resources [%]| |$\eta_{y,z}^{ILR,pv}$ | Inverter loading ratio (the solar PV capacity sizing to the inverter capacity built) of technology $y$ in zone $z$ for co-located VRE and storage resources with a solar PV component [%]| |$\eta_{y,z}^{ILR,wind}$ | Inverter loading ratio (the wind PV capacity sizing to the grid connection capacity built) of technology $y$ in zone $z$ for co-located VRE and storage resources with a wind component [%]| -|$\mu_{y,z}^{stor}$ | Ratio of energy capacity to discharge power capacity for storage technology (and hydro reservoir) $y$ in zone $z$ [MWh/MW]| +|$\mu_{y,z}^{stor}$ | Ratio of energy capacity to discharge power capacity for storage technology (and hydro reservoir) $y$ in zone $z$ [MWh/MW\]| |$\mu_{y,z}^{dc,stor}$ | Ratio of discharge power capacity to energy capacity for the storage DC component of co-located VRE and storage technology $y$ in zone $z$ [MW/MWh]| |$\mu_{y,z}^{ac,stor}$ | Ratio of discharge power capacity to energy capacity for the storage AC component of co-located VRE and storage technology $y$ in zone $z$ [MW/MWh]| |$\mu_{y,z}^{\mathcal{DF}}$ | Maximum percentage of hourly demand that can be shifted by technology $y$ in zone $z$ [%]| @@ -262,7 +262,7 @@ $\mathcal{W} \subseteq \mathcal{G}$ | where $\mathcal{W}$ set of hydroelectric g |$\eta_{y,z}^{dflex}$ | energy losses associated with shifting the flexible demand [%]| |$\mu_{p,z}^{\mathcal{ESR}}$ | share of total demand in each model zone $z \in \mathcal{ESR}^{p}$ that must be served by qualifying renewable energy resources $y \in \mathcal{G}^{ESR}_{p}$| |$f(n)$ | Mapping each modeled period $n \in \mathcal{N}$ to corresponding representative period $w \in \mathcal{W}$| -|$\eta_{y}^{electrolyzer}$ | Efficiency of the electrolyzer $y$ in megawatt-hours (MWh) of electricity per metric tonne of hydrogen produced [MWh/t] (optional parameter)| -|$\$^{hydrogen}_y}$ | Price of hydrogen per metric tonne for electrolyzer $y$ [\$/t] (optional parameter)| -|$\mathcal{Min kt}_y$ | Minimum annual quantity of hydrogen that must be produced by electrolyzer $y$ in kilotonnes [kt] (optional parameter)| +|$\eta_{y}^{electrolyzer}$ | Efficiency of the electrolyzer $y$ in megawatt-hours (MWh) of electricity per metric tonne of hydrogen produced \[MWh/t\] (optional parameter)| +|$\$^{hydrogen}_y$ | Price of hydrogen per metric tonne for electrolyzer $y$ \[\$/t\] (optional parameter)| +|$\mathcal{Min kt}_y$ | Minimum annual quantity of hydrogen that must be produced by electrolyzer $y$ in kilotonnes \[kt\] (optional parameter)| --- diff --git a/docs/src/model_output.md b/docs/src/model_output.md new file mode 100644 index 0000000000..18cf1a18ca --- /dev/null +++ b/docs/src/model_output.md @@ -0,0 +1,155 @@ +# GenX Outputs + +The table below summarizes the units of each output variable reported as part of the various CSV files produced after each model run. The reported units are also provided. If a result file includes time-dependent values, the value will not include the hour weight in it. An annual sum ("AnnualSum") column/row will be provided whenever it is possible (e.g., `emissions.csv`). + +## 1 Default output files + +### 1.1 capacity.csv + +Reports optimal values of investment variables (except StartCap, which is an input) + +###### Table 15: Structure of the capacity.csv file +--- +|**Output** |**Description** |**Units** | +| :------------ | :-----------|:-----------| +| StartCap |Initial power capacity of each resource type in each zone; this is an input |MW | +| RetCap |Retired power capacity of each resource type in each zone |MW | +| NewCap |Installed capacity of each resource type in each zone |MW| +| EndCap| Total power capacity of each resource type in each zone |MW | +| StartEnergyCap |Initial energy capacity of each resource type in each zone; this is an input and applies only to storage tech.| MWh | +| RetEnergyCap |Retired energy capacity of each resource type in each zone; applies only to storage tech. |MWh | +| NewEnergyCap| Installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | +| EndEnergyCap |Total installed energy capacity of each resource type in each zone; applies only to storage tech. |MWh | +| StartChargeCap| Initial charging power capacity of `STOR = 2` resource type in each zone; this is an input |MW | +| RetChargeCap |Retired charging power capacity of `STOR = 2` resource type in each zone |MW | +| NewChargeCap |Installed charging capacity of each resource type in each zone |MW | +| EndChargeCap |Total charging power capacity of each resource type in each zone |MW| + +### 1.2 costs.csv + +Reports optimal objective function value and contribution of each term by zone. + +###### Table 16: Structure of the costs.csv file +--- +|**Output** |**Description** |**Units** | +| :------------ | :-----------|:-----------| +| cTotal |Total objective function value |$ | +| cFix |Total annualized investment and fixed operating & maintainenance (FOM) costs associated with all resources |$ | +| cVar |Total annual variable cost associated with all resources; includes fuel costs for thermal plants |$| +| cNSE |Total annual cost of non-served energy |$| +| cStart |Total annual cost of start-up of thermal power plants| $| +| cUnmetRsv |Total annual cost of not meeting time-dependent operating reserve (spinning) requirements |$ | +| cNetworkExp |Total cost of network expansion |$| +| cEmissionsRevenue |Total and zonal emissions revenue |$ | +| cEmissionsCost |Total an zonal emissions cost |$ | + +### 1.3 emissions.csv + +Reports CO2 emissions by zone at each hour; an annual sum row will be provided. If any emission cap is present, emission prices each zone faced by each cap will be copied on top of this table with the following strucutre. + +###### Table 17: Structure of emission prices in the emissions.csv file +--- +|**Output** |**Description** |**Units** | +| :------------ | :-----------|:-----------| +|CO_2\_price |Marginal CO2 abatement cost associated with constraint on maximum annual CO2 emissions; will be same across zones if CO2 emissions constraint is applied for the entire region and not zone-wise |\$/ tonne CO2. | + +### 1.4 nse.csv + +Reports non-served energy for every model zone, time step and cost-segment. + +### 1.5 power.csv + +Reports power discharged by each resource (generation, storage, demand response) in each model time step. + +### 1.6 reliability.csv + +Reports dual variable of maximum non-served energy constraint (shadow price of reliability constraint) for each model zone and time step. + +### 1.7 prices.csv + +Reports marginal electricity price for each model zone and time step. Marginal electricity price is equal to the dual variable of the load balance constraint. If GenX is configured as a mixed integer linear program, then this output is only generated if `WriteShadowPrices` flag is activated. If configured as a linear program (i.e. linearized unit commitment or economic dispatch) then output automatically available. + +### 1.8 status.csv + +Reports computational performance of the model and objective function related information. + +###### Table 18: Structure of the status.csv file +--- +|**Output** |**Description** |**Units** | +| :------------ | :-----------|:-----------| +|Status | termination criteria (optimal, timelimit etc.).|| +|solve | Solve time including time for pre-solve |seconds | +|Objval | Optimal objective function value |$| +|Objbound | Best objective lower bound | $ | +|FinalMIPGap |Optimality gap at termination in case of a mixed-integer linear program (MIP gap); when using Gurobi, the lower bound and MIP gap is reported excluding constant terms (E.g. fixed cost of existing generators that cannot be retired) in the objective function and hence may not be directly usable. |Fraction| + +### 1.9 NetRevenue.csv + +This file summarizes the cost, revenue and profit for each generation technology for each region. + +###### Table 19: Stucture of the NetRevenue.csv file +--- +|**Output** |**Description** |**Units** | +| :------------ | :-----------|:-----------| +| Fixed\_OM\_cost\_MW | Fixed Operation and Maintenance cost of the MW capacity. |$| +| Fixed\_OM\_cost\_MWh| Fixed Operation and Maintenance cost of the MWh capacity. Only applicable to energy storage.| $ | +| Var\_OM\_cost\_out| Variable Operation and Maintenance cost of the power generation or discharge. |$ | +| Var\_OM\_cost\_in |Variable Operation and Maintenance cost of the power charge/pumping. Only applicable to energy storage. |$ | +| Fuel\_cost| Fuel cost of the power generation. Only applicable to generation that burns fuel. |$ | +| Charge\_cost |Cost of charging power (due to the payment for electricity) Only applicable to energy storage. |$| +| EmissionsCost| Cost of buying emission credit. |$ | +| StartCost |Cost of generator start-up. |$ | +| Inv\_cost\_MW |Cost of building MW capacity. |$ | +| Inv\_cost\_MWh| Cost of building MWh capacity. |$ | +| EnergyRevenue |Revenue of generating power.| $ | +| SubsidyRevenue| Revenue of Min\_Cap subsidy. |$ | +| ReserveMarginRevenue| Revenue earned from capacity reserve margin constraints. |$| +| ESRRevenue| Revenue selling renewable/clean energy credits. |$ | +| Revenue| Total Revenue.| $ | +| Cost| Total Cost. |$ | +| Profit |Revenue minus Cost. |$ | + +## 2 Settings-specific outputs + +This section includes the output files that GenX will print if corresponding function is specified in the Settings. + +### 2.1 CapacityValue.csv + +This file includes the time-dependent capacity value calculated for each generator. GenX will print this file only if the capacity reserve margin constraints are modeled through the setting file. Each row of the file (excluding the header) corresponds to a generator specified in the inputs. Each column starting from the t1 to the second last one stores the result of capacity obligation provided in each hour divided by the total capacity. Thus the number is unitless. If the capacity margin reserve is not binding for one hour, GenX will return zero. The last column specified the name of the corresponding capacity reserve constraint. Note that, if the user calculates the hour-weight-averaged capacity value for each generator using data of the binding hours, the result is what RTO/ISO call capacity credit. + + + +### 2.2 EnergyRevenue.csv + +This file includes the energy revenue in $ earned by each generator through injecting into the grid. Only annual sum values are available. + +### 2.3 ChargingCost.csv + +This file includes the charging cost in $ of earned by each generator through withdrawing from the grid. Only annual sum values are available. + +### 2.4 ReserveMargin.csv + +This file includes the shadow prices of the capacity reserve margin constraints. GenX will print this file only when capacity reserve margin is modeled and the shadow price can be obtained form the solver, as described earlier. Each row (except the header) corresponds to a capacity reserve margin constraint, and each column corresponds to an time step. As a reminder, GenX models the capacity reserve margin (aka capacity market) at the time-dependent level, and each constraint either stands for an overall market or a locality constraint. + +### 2.5 ReserveMarginRevenue.csv + +This file includes the capacity revenue earned by each generator listed in the input file. GenX will print this file only when capacity reserve margin is modeled and the shadow price can be obtained form the solver. Each row corresponds to a generator, and each column starting from the 6th to the second last is the total revenue from each capacity reserve margin constraint. The revenue is calculated as the capacity contribution of each time steps multiplied by the shadow price, and then the sum is taken over all modeled time steps. The last column is the total revenue received from all capacity reserve margin constraints. As a reminder, GenX models the capacity reserve margin (aka capacity market) at the time-dependent level, and each constraint either stands for an overall market or a locality constraint. + +### 2.6 ESR\_prices.csv + +This file includes the renewable/clean energy credit price of each modeled RPS/CES constraint. GenX will print this file only when RPS/CES is modeled and the shadow price can be obtained form the solver. The unit is $/MWh. + +### 2.7 ESR\_Revenue.csv + +This file includes the renewable/clean credit revenue earned by each generator listed in the input file. GenX will print this file only when RPS/CES is modeled and the shadow price can be obtained form the solver. Each row corresponds to a generator, and each column starting from the 6th to the second last is the total revenue earned from each RPS constraint. The revenue is calculated as the total annual generation (if elgible for the corresponding constraint) multiplied by the RPS/CES price. The last column is the total revenue received from all constraint. The unit is $. + +### 2.8 SubsidyRevenue.csv + +This file includes subsidy revenue earned if a generator specified Min\_Cap is provided in the input file. GenX will print this file only the shadow price can be obtained form the solver. Do not confuse this with the Minimum Capacity Carveout constraint, which is for a subset of generators, and a separate revenue term will be calculated in other files. The unit is $. diff --git a/docs/src/multi_stage_model_overview.md b/docs/src/multi_stage_input.md similarity index 98% rename from docs/src/multi_stage_model_overview.md rename to docs/src/multi_stage_input.md index ee33fbb0b1..34b4132f59 100644 --- a/docs/src/multi_stage_model_overview.md +++ b/docs/src/multi_stage_input.md @@ -1,4 +1,5 @@ -# Multi-stage modeling overview +# Multi-stage setup + This section describes the available features, inputs and model components related to formulating and solving multi-stage investment planning problems. Two different types of multi-stage problems can be setup: * Perfect foresight: A single multi-stage investment planning problem that simultaneously optimizes capacity and operations across all specified investment stages * Myopic: Sequential solution of single-stage investment planning for each investment stage, where capacity additions and retirements from the previous stages are used to determine initial (or existing) capacity at the beginning of the current stage. @@ -11,9 +12,9 @@ The table below summarizes the key differences in the two model setups. | Objective function cost basis | Net present value | Annualized costs | | Price/dual variable information available? | No | Yes | -## Additional inputs needed for multi-stage modeling (need to convert to tables) +### Additional inputs needed for multi-stage modeling -### Input data files +#### Input data files Instead of one set of input files, there is one directory of input files that needs to be provided for each planning period or stage (e.g., “Inputs/Inputs_p1/” for the first period “Inputs/Inputs_p2/” for the second period, etc.). Below we list the additional parameters that must be provided in the corresponding stage-specific input files to instantiate a multi-stage planning problem. @@ -57,7 +58,7 @@ Instead of one set of input files, there is one directory of input files that ne | WACC | The line-specific weighted average cost of capital. | -### Settings Files +#### Settings Files A separate settings.yml file includes a list of parameters to be specified to formulate the multi-stage planning model. | | **multi\_stage\_settings.yml** | diff --git a/docs/src/multi_stage_genx.md b/docs/src/multi_stage_overview.md similarity index 63% rename from docs/src/multi_stage_genx.md rename to docs/src/multi_stage_overview.md index 33c9f6b447..3ac665f6bd 100644 --- a/docs/src/multi_stage_genx.md +++ b/docs/src/multi_stage_overview.md @@ -1,12 +1,12 @@ -## Multi-stage investment planning +# Multi-stage investment planning _Added in 0.3_ GenX can be used to study the long-term evolution of the power system across multiple investment stages, in the following two ways: * The user can formulate and solve a deterministic **multi-stage planning problem with perfect foresight** i.e. demand, cost, and policy assumptions about all stages are known and exploited to determine the least-cost investment trajectory for the entire period. - The solution of this multi-stage problem relies on exploiting the decomposable nature of the multi-stage problem via the implementation of the dual dynamic programming algorithm, described in [Lara et al. 2018 here](https://www.sciencedirect.com/science/article/abs/pii/S0377221718304466). + The solution of this multi-stage problem relies on exploiting the decomposable nature of the multi-stage problem via the implementation of the dual dynamic programming algorithm, described in [Lara et al. 2018 here](https://www.sciencedirect.com/science/article/abs/pii/S0377221718304466). This algorithm splits up a multi-stage investment planning problem into multiple, single-period sub-problems. Each period is solved iteratively as a separate linear program sub-problem (“forward pass”), and information from future periods is shared with past periods (“backwards pass”) so that investment decisions made in subsequent iterations reflect the contributions of present-day investments to future costs. The decomposition algorithm adapts previous nested Benders methods by handling integer and continuous state variables, although at the expense of losing its finite convergence property due to potential duality gap. * The user can formulate a **sequential, myopic multi-stage planning problem**, where the model solves a sequence of single-stage investment planning problems wherein investment decisions in each stage are individually optimized to meet demand given assumptions for the current planning stage and with investment decisions from previous stages treated as inputs for the current stage. We refer to this as "myopic" (or shortsighted) mode since the solution does not account for information about future stages in determining investments for a given stage. This version is generally more computationally efficient than the deterministic multi-stage expansion with perfect foresight mode. -More information on this feature can be found in the section on `Multi-stage` under the `Model function reference` tab. +More information on this feature can be found in the section [Multi-stage setup](@ref). \ No newline at end of file diff --git a/docs/src/policies.md b/docs/src/policies.md index 38f793805f..9735354c1d 100644 --- a/docs/src/policies.md +++ b/docs/src/policies.md @@ -1,26 +1,23 @@ # Emission mitigation policies ## Capacity Reserve Margin -```@autodocs -Modules = [GenX] -Pages = ["cap_reserve_margin.jl"] +```@docs +GenX.cap_reserve_margin! ``` ## CO$_2$ Constraint Policy -```@autodocs -Modules = [GenX] -Pages = ["co2_cap.jl"] +```@docs +GenX.co2_cap! ``` ## Energy Share Requirement -```@autodocs -Modules = [GenX] -Pages = ["energy_share_requirement.jl"] +```@docs +GenX.load_energy_share_requirement! +GenX.energy_share_requirement! ``` ## Minimum Capacity Requirement -```@autodocs -Modules = [GenX] -Pages = ["minimum_capacity_requirement.jl"] +```@docs +GenX.minimum_capacity_requirement! ``` ## Maximum Capacity Requirement diff --git a/docs/src/public_api.md b/docs/src/public_api.md new file mode 100644 index 0000000000..1c44dbae43 --- /dev/null +++ b/docs/src/public_api.md @@ -0,0 +1,7 @@ +# Public Documentation + +Documentation for GenX public interface. + +```@docs +GenX.run_genx_case! +``` \ No newline at end of file diff --git a/docs/src/resources.md b/docs/src/resources.md new file mode 100644 index 0000000000..921c36134e --- /dev/null +++ b/docs/src/resources.md @@ -0,0 +1,9 @@ +# Resources API +_Added in v0.4_ + +```@docs +GenX.check_resource_type_flags +GenX.check_longdurationstorage_applicability +GenX.check_maintenance_applicability +GenX.check_resource +``` \ No newline at end of file diff --git a/docs/src/retrofit.md b/docs/src/retrofit.md new file mode 100644 index 0000000000..011377e0de --- /dev/null +++ b/docs/src/retrofit.md @@ -0,0 +1,5 @@ +## Retrofit + +```@docs +GenX.retrofit +``` \ No newline at end of file diff --git a/docs/src/running_TDR.md b/docs/src/running_TDR.md new file mode 100644 index 0000000000..c52e819cc5 --- /dev/null +++ b/docs/src/running_TDR.md @@ -0,0 +1,69 @@ +# Running the TDR + +## Running a case with Time Domain Reduction + +There are two ways to run a case with a reduced (e.g. less than full-year) temporal resolution. +1. Let GenX perform the time domain reduction before optimizing. +2. Bring your own clustered data + +It's also possible for GenX perform clustering separately from the optimization task. + +## Method 1: Let GenX perform the time domain reduction (clustering) + +Set `TimeDomainReduction: 1 `in the GenX settings for the case. + +When the case is run (but before the optimization model is built), reduced time series data will be output to a folder within the case, (typically) `TDR_Results`. Note that if the data already exists in that folder, it will not be overwritten. If a user wants to change the time domain reduction settings and try again, the folder should be deleted before the case is run. + +The clustering is done according to the settings in `time_domain_reduction.yml`. These are described in the Inputs section of data_documentation. + +Time domain clustering can only be performed on data which represents a single contiguous period: typically a year of 8760 or 8736 hours. + +The header of the file `Load_data.csv` in the main case folder will typically look like this: + +``` +..., Rep_Periods, Timesteps_per_Rep_Period, Sub_Weights, ... + 1, 8760, 8760, +``` + +For an example that uses this method, see `Example_Systems/RealSystemExample/ISONE_Singlezone`. + +## Method 2: Bring your own clustered data + +The second method is to use an external program to generate the reduced ('clustered') time series data. For instance, PowerGenome has a capability to construct GenX cases with clustered time series data. + +Running using this method **requires** setting `TimeDomainReduction: 0` in the GenX settings for the case. + +Clustered time series data requires specifying the clustering data using three columns in `Load_data.csv`: `Rep_Periods`, `Timesteps_per_Rep_Period`, and `Sub_Weights`. For example, a problem representing a full year via 3 representative weeks, and where the first week represents one which is twice as common as the others, would look like + +``` +..., Rep_Periods, Timesteps_per_Rep_Period, Sub_Weights, ... + 3, 168, 4368.0, + 2184.0, + 2184.0, +``` + +In this example, the first week represents a total of `26*168 = 4368` hours over a full year. + +The time series data are written in single unbroken columns: in this example, the `Time_Index` ranges from 1 to 504. + +For problems involving Long Duration Storage, a file `Period_map.csv` is necessary to describe how these representative periods occur throughout the modeled year. + +See also the [Time-domain reduction](@ref). + +For an example that uses this method, see `Example_Systems/RealSystemExample/ISONE_Trizone`. + +## Performing time domain reduction (TDR) separately from optimization +*Added in 0.3.4* + +It may be useful to perform time domain reduction (TDR) (or "clustering") on a set of inputs before using them as part of full GenX optimization task. For example, a user might want to test various TDR settings and examine the resulting clustered inputs. This can now be performed using the run_timedomainreduction! function. + +``` +$ julia --project=/home/youruser/GenX + +julia> using GenX +julia> run_timedomainreduction!("/path/to/case") +``` + +This function will obey the settings in `path/to/case/Settings/time_domain_reduction_settings.yml`. It will output the resulting clustered time series files in the case. + +Running this function will overwrite these files in the case. This is done with the expectation that the user is trying out various settings. \ No newline at end of file diff --git a/docs/src/running_model.md b/docs/src/running_model.md new file mode 100644 index 0000000000..2192f2117d --- /dev/null +++ b/docs/src/running_model.md @@ -0,0 +1,35 @@ +# Running the model + +When running a new case, it is recommended to create a new folder for the case outside of the `GenX` repository. This folder should contain all the `.csv` input files described in the [GenX Inputs](@ref) section, as well as the `Settings` folder containing at least the `genx_settings.yml` and `[solver_name].yml` files. + +!!! tip "Tip" + Check out the [Running GenX](@ref) for additional information on how to run GenX and what happens when you run a case. + +Once the model and the solver are set up, and once all the `.csv` input files are ready, GenX can be run using the following command: + +``` +$ julia --project=/path/to/GenX + +julia> using GenX +julia> run_genx_case!("/path/to/case") +``` + +where `/path/to/GenX` is the path to the `GenX` repository, and `/path/to/case` is the path to the folder of the case. + +Alternatively, you can create a `Run.jl` file with the following code: + +```julia +using GenX +run_genx_case!(dirname(@__FILE__)) +``` +and and place it in the case folder. Then, you can run the case by opening a terminal and running the following command: + +```bash +$ julia --project="/path/to/GenX" /path/to/case/Run.jl +``` +where `/path/to/GenX` is the path to the `GenX` repository, and `/path/to/case` is the path to the folder of the case. + +The output files will be saved in the `Results` folder inside the case folder. Check out the [GenX Outputs](@ref) section for more information on the output files. + +!!! note "Slack Variables" + To run a case with **slack variables**, check out the [Policy Slack Variables](@ref) section. \ No newline at end of file diff --git a/docs/src/slack_variables_overview.md b/docs/src/slack_variables_overview.md index 5b9830f317..47b44b2cc5 100644 --- a/docs/src/slack_variables_overview.md +++ b/docs/src/slack_variables_overview.md @@ -18,26 +18,30 @@ Slack variables will only be activated when the relevant policy type is itself a For some policy types, slack variables are activated by providing a new input file, while for others they are activated by modifying an existing file. Instructions for each policy type are listed below: -### Capacity Reserve Margin +## Capacity Reserve Margin + Slack variables for Capacity Reserve Margin constraints are created when GenX detects the presence of the file `Capacity_reserve_margin_slack.csv` in the Inputs folder. This file should contain two columns: one titled 'CRM_Constraint' naming the individual Capacity Reserve Margin constraints in the same order in which they are listed in the first row of `Capacity_reserve_margin.csv`, and a second titled 'PriceCap' containing the price thresholds for each constraint. The units for these thresholds are $/MW. -### CO2 Cap +## CO2 Cap Slack variables for CO2 Cap constraints are created when GenX detects the presence of the file `CO2_cap_slack.csv` in the Inputs folder. This file should contain two columns: one titled 'CO2_Cap_Constraint' naming the individual CO2 Cap constraints in the same order in which they are listed in the first row of `CO2_Cap.csv`, and a second titled 'PriceCap' containing the price thresholds for each constraint. The units for these thresholds are $/ton. The CO2 Cap slack variable itself is always in units of tons of CO2, even if the CO2 Cap is a rate-based cap. -### Energy Share Requirement +## Energy Share Requirement + Slack variables for Energy Share Requirement constraints are created when GenX detects the presence of the file `Energy_share_requirement_slack.csv` in the Inputs folder. This file should contain two columns: one titled 'ESR_Constraint' naming the individual Energy Share Requirement constraints in the same order in which they are listed in the first row of `Energy_share_requirement.csv`, and a second titled 'PriceCap' containing the price thresholds for each constraint. The units for these thresholds are \$/MWh. -### Minimum Capacity Requirement +## Minimum Capacity Requirement + Slack variables for Minimum Capacity Requirement constraints are created when GenX detects the presence of a column titled 'PriceCap' in the file `Minimum_capacity_requirement.csv`. This column contains the price thresholds for each Minimum Capacity Requirement constraint, in units of \$/MW. -### Maximum Capacity Requirement +## Maximum Capacity Requirement + Slack variables for Maximum Capacity Requirement constraints are created when GenX detects the presence of a column titled 'PriceCap' in the file `Maximum_capacity_requirement.csv`. This column contains the price thresholds for each Maximum Capacity Requirement constraint, in units of \$/MW. @@ -53,39 +57,4 @@ GenX will also print the total cost associated with each activated slack variabl The folder `Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example` contains examples of the input files needed to activate slack variables for each of the policy types in GenX. Running this example with a given set of policy constraints activated will generate the relevant slack variables and print their outputs. - -## Relevant Files - -### Capacity Reserve Margin -```@autodocs -Modules = [GenX] -Pages = ["cap_reserve_margin.jl"] -``` - - -### CO2 Cap -```@autodocs -Modules = [GenX] -Pages = ["co2_cap.jl"] -``` - - -### Energy Share Requirement -```@autodocs -Modules = [GenX] -Pages = ["energy_share_requirement.jl"] -``` - - -### Minimum Capacity Requirement -```@autodocs -Modules = [GenX] -Pages = ["minimum_capacity_requirement.jl"] -``` - - -### Maximum Capacity Requirement -```@autodocs -Modules = [GenX] -Pages = ["maximum_capacity_requirement.jl"] -``` + \ No newline at end of file diff --git a/docs/src/solver_configuration.md b/docs/src/solver_configuration.md index 559d9c358c..4466b90914 100644 --- a/docs/src/solver_configuration.md +++ b/docs/src/solver_configuration.md @@ -1,42 +1,80 @@ -# Configuring the Solvers -```@autodocs -Modules = [GenX] -Pages = ["configure_solver.jl"] -``` +# Solver Configuration -## Configuring HiGHS -```@autodocs -Modules = [GenX] -Pages = ["configure_highs.jl"] -``` +To define and solve the optimization problems, GenX relies on [JuMP](https://jump.dev/JuMP.jl/stable/), a domain-specific modeling language for mathematical optimization written in Julia, and on a variety of open-source and commercial solvers. GenX supports the following solvers: +- [Cbc](https://github.com/coin-or/Cbc) (open-source) +- [Clp](https://github.com/coin-or/Clp) (open-source) +- [CPLEX](https://www.ibm.com/analytics/cplex-optimizer) (commercial) +- [Gurobi](https://www.gurobi.com/) (commercial) +- [HiGHS](https://highs.dev/) (open-source) +- [SCIP](https://scip.zib.de/) (open-source) -## Configuring Gurobi -```@autodocs -Modules = [GenX] -Pages = ["configure_gurobi.jl"] -``` +Solver related settings parameters are specified in the appropriate .yml file (e.g. `highs_settings.yml`, `gurobi_settings.yml`, etc.), which should be located in the `Settings` folder inside the current working directory (the same `Settings` folder where `genx_settings.yml` is located). Settings are specific to each solver. Check the `Example_Systems` folder for examples of solver settings files and parameters. -## Configuring CPLEX -```@autodocs -Modules = [GenX] -Pages = ["configure_cplex.jl"] -``` +!!! note "Note" + GenX supplies default settings for most solver settings in the various solver-specific functions found in the `src/configure_solver/` directory. + To overwrite default settings, you can specify the below Solver specific settings. -## Configuring Clp -```@autodocs -Modules = [GenX] -Pages = ["configure_clp.jl"] -``` +The following table summarizes the solver settings parameters and their default/possible values. +!!! tip "Tip" + Since each solver has its own set of parameters names, together with a description of the parameter, the table provides a reference to the the corresponding solver specific parameter name. -## Configuring Cbc -```@autodocs -Modules = [GenX] -Pages = ["configure_cbc.jl"] -``` +#### Solver settings parameters** -## Configuring SCIP -```@autodocs -Modules = [GenX] -Pages = ["configure_scip.jl"] -``` \ No newline at end of file +|**Settings Parameter** | **Description**| +|:----------------------|:---------------| +|Method | Algorithm used to solve continuous models or the root node of a MIP model. Generally, barrier method provides the fastest run times for real-world problem set.| +|| **CPLEX**: CPX\_PARAM\_LPMETHOD - Default = 0; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-algorithm-continuous-linear-problems) for more specifications.| +|| **Gurobi**: Method - Default = -1; See [link](https://www.gurobi.com/documentation/8.1/refman/method.html) for more specifications.| +|| **clp**: SolveType - Default = 5; See [link](https://www.coin-or.org/Doxygen/Clp/classClpSolve.html) for more specifications.| +|| **HiGHS**: Method - Default = "choose"; See [link](https://ergo-code.github.io/HiGHS/dev/options/definitions/) for more specifications.| +|BarConvTol | Convergence tolerance for barrier algorithm.| +|| **CPLEX**: CPX\_PARAM\_BAREPCOMP - Default = 1e-8; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-convergence-tolerance-lp-qp-problems) for more specifications.| +|| **Gurobi**: BarConvTol - Default = 1e-8; See [link](https://www.gurobi.com/documentation/8.1/refman/barconvtol.html) for more specifications.| +|Feasib\_Tol | All constraints must be satisfied as per this tolerance. Note that this tolerance is absolute.| +|| **CPLEX**: CPX\_PARAM\_EPRHS - Default = 1e-6; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-feasibility-tolerance) for more specifications.| +|| **Gurobi**: FeasibilityTol - Default = 1e-6; See [link](https://www.gurobi.com/documentation/9.1/refman/feasibilitytol.html) for more specifications.| +|| **clp**: PrimalTolerance - Default = 1e-7; See [link](https://www.coin-or.org/Clp/userguide/clpuserguide.html) for more specifications.| +|| **clp**: DualTolerance - Default = 1e-7; See [link](https://www.coin-or.org/Clp/userguide/clpuserguide.html) for more specifications.| +|Optimal\_Tol | Reduced costs must all be smaller than Optimal\_Tol in the improving direction in order for a model to be declared optimal.| +|| **CPLEX**: CPX\_PARAM\_EPOPT - Default = 1e-6; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-optimality-tolerance) for more specifications.| +|| **Gurobi**: OptimalityTol - Default = 1e-6; See [link](https://www.gurobi.com/documentation/8.1/refman/optimalitytol.html) for more specifications.| +|Pre\_Solve | Controls the presolve level.| +|| **Gurobi**: Presolve - Default = -1; See [link](https://www.gurobi.com/documentation/8.1/refman/presolve.html) for more specifications.| +|| **clp**: PresolveType - Default = 5; See [link](https://www.coin-or.org/Doxygen/Clp/classClpSolve.html) for more specifications.| +|Crossover | Determines the crossover strategy used to transform the interior solution produced by barrier algorithm into a basic solution.| +|| **CPLEX**: CPX\_PARAM\_SOLUTIONTYPE - Default = 2; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-optimality-tolerance) for more specifications.| +|| **Gurobi**: Crossover - Default = 0; See [link](https://www.gurobi.com/documentation/9.1/refman/crossover.html#:~:text=Use%20value%200%20to%20disable,interior%20solution%20computed%20by%20barrier.) for more specifications.| +|NumericFocus | Controls the degree to which the code attempts to detect and manage numerical issues.| +|| **CPLEX**: CPX\_PARAM\_NUMERICALEMPHASIS - Default = 0; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-numerical-precision-emphasis) for more specifications.| +|| **Gurobi**: NumericFocus - Default = 0; See [link](https://www.gurobi.com/documentation/9.1/refman/numericfocus.html) for more specifications.| +|TimeLimit | Time limit to terminate the solution algorithm, model could also terminate if it reaches MIPGap before this time.| +|| **CPLEX**: CPX\_PARAM\_TILIM- Default = 1e+75; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-optimizer-time-limit-in-seconds) for more specifications.| +|| **Gurobi**: TimeLimit - Default = infinity; See [link](https://www.gurobi.com/documentation/9.1/refman/timelimit.html) for more specifications.| +|| **clp**: MaximumSeconds - Default = -1; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|MIPGap | Optimality gap in case of mixed-integer program.| +|| **CPLEX**: CPX\_PARAM\_EPGAP- Default = 1e-4; See [link](https://www.ibm.com/docs/en/icos/22.1.1?topic=parameters-relative-mip-gap-tolerance) for more specifications.| +|| **Gurobi**: MIPGap - Default = 1e-4; See [link](https://www.gurobi.com/documentation/9.1/refman/mipgap2.html) for more specifications.| +|DualObjectiveLimit | When using dual simplex (where the objective is monotonically changing), terminate when the objective exceeds this limit.| +|| **clp**: DualObjectiveLimit - Default = 1e308; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|MaximumIterations | Terminate after performing this number of simplex iterations.| +|| **clp**: MaximumIterations - Default = 2147483647; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|LogLevel | Set to 1, 2, 3, or 4 for increasing output. Set to 0 to disable output.| +|| **clp**: logLevel - Default = 1; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|| **cbc**: logLevel - Default = 1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| +|InfeasibleReturn | Set to 1 to return as soon as the problem is found to be infeasible (by default, an infeasibility proof is computed as well).| +|| **clp**: InfeasibleReturn - Default = 0; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|Scaling | Sets or unsets scaling; 0 -off, 1 equilibrium, 2 geometric, 3 auto, 4 dynamic(later).| +|| **clp**: Scaling - Default = 3; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|Perturbation | Perturbs problem; Switch on perturbation (50), automatic (100), don't try perturbing (102).| +|| **clp**: Perturbation - Default = 3; See [link](https://www.coin-or.org/Doxygen/Clp/classClpModel.html) for more specifications.| +|maxSolutions | Terminate after this many feasible solutions have been found.| +|| **cbc**: maxSolutions - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| +|maxNodes | Terminate after this many branch-and-bound nodes have been evaluated| +|| **cbc**: maxNodes - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| +| allowableGap | Terminate after optimality gap is less than this value (on an absolute scale)| +|| **cbc**: allowableGap - Default = -1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| +|ratioGap | Terminate after optimality gap is smaller than this relative fraction.| +|| **cbc**: ratioGap - Default = Inf; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| +|threads | Set the number of threads to use for parallel branch & bound.| +|| **cbc**: threads - Default = 1; See [link](https://www.coin-or.org/Doxygen/Cbc/classCbcModel.html#a244a08213674ce52ddcf33ab4ff53380a185d42e67d2c4cb7b79914c0ed322b5f) for more specifications.| diff --git a/docs/src/solver_configuration_api.md b/docs/src/solver_configuration_api.md new file mode 100644 index 0000000000..559d9c358c --- /dev/null +++ b/docs/src/solver_configuration_api.md @@ -0,0 +1,42 @@ +# Configuring the Solvers +```@autodocs +Modules = [GenX] +Pages = ["configure_solver.jl"] +``` + +## Configuring HiGHS +```@autodocs +Modules = [GenX] +Pages = ["configure_highs.jl"] +``` + + +## Configuring Gurobi +```@autodocs +Modules = [GenX] +Pages = ["configure_gurobi.jl"] +``` + +## Configuring CPLEX +```@autodocs +Modules = [GenX] +Pages = ["configure_cplex.jl"] +``` + +## Configuring Clp +```@autodocs +Modules = [GenX] +Pages = ["configure_clp.jl"] +``` + +## Configuring Cbc +```@autodocs +Modules = [GenX] +Pages = ["configure_cbc.jl"] +``` + +## Configuring SCIP +```@autodocs +Modules = [GenX] +Pages = ["configure_scip.jl"] +``` \ No newline at end of file diff --git a/docs/src/storage.md b/docs/src/storage.md index 63cc7277d5..c6057a2289 100644 --- a/docs/src/storage.md +++ b/docs/src/storage.md @@ -1,5 +1,4 @@ # Storage -```@autodocs -Modules = [GenX] -Pages = ["storage.jl"] +```@docs +GenX.storage! ``` diff --git a/docs/src/unit_testing.md b/docs/src/unit_testing.md deleted file mode 100644 index cab62de281..0000000000 --- a/docs/src/unit_testing.md +++ /dev/null @@ -1,5 +0,0 @@ -# Unit Testing Modules (Currently under Active Development) -```@autodocs -Modules = [GenX] -Pages = ["simple_operation.jl"] -``` \ No newline at end of file diff --git a/docs/src/utility_functions.md b/docs/src/utility_functions.md new file mode 100644 index 0000000000..21fe42da40 --- /dev/null +++ b/docs/src/utility_functions.md @@ -0,0 +1,6 @@ +# Utility Functions + +```@autodocs +Modules = [GenX] +Pages = ["utility.jl"] +``` \ No newline at end of file diff --git a/docs/src/workflow.md b/docs/src/workflow.md new file mode 100644 index 0000000000..cbcd51232a --- /dev/null +++ b/docs/src/workflow.md @@ -0,0 +1,36 @@ +# User Guide + +## Introduction +GenX is a constrained **linear** or **mixed integer linear optimization model** that determines the portfolio of electricity generation, storage, transmission, and demand-side resource investments and operational decisions to meet electricity demand in one or more future planning years at lowest cost, while subject to a variety of power system operational constraints, resource availability limits, and other imposed environmental, market design, and policy constraints. + +Depending on the planning problem or question to be studied, GenX can be configured with varying levels of model resolution and scope, with regards to: +1. Temporal resolution of time series data such as **electricity demand** and **renewable energy availability**; +2. Power system **operational detail** and unit **commitment constraints**; +3. **Geospatial resolution** and **transmission network** representation. + +The model is also capable of representing a full range of conventional and novel electricity resources, including thermal generators, variable renewable resources (wind and solar), run-of-river, reservoir and pumped-storage hydroelectric generators, energy storage devices, demand-side flexibility, demand response, and several advanced technologies such as long-duration energy storage. + +## Workflow +The flexibility of GenX is achieved through a modular and transparent code structure developed in [Julia](http://julialang.org/) + [JuMP](http://jump.dev/). The software workflow includes two main steps: + +1. **Model configuration** and **building**: this step involves the specification of the planning problem to be studied, including time dependent data like electricity demand, renewable energy availability and fuel prices, number and type of resources included in the model, graph representation of the transmission network, and the set of constraints and objectives to be imposed. + +2. **Model execution**: once the model is configured, a solver is called to find the optimal solution to the planning problem. The solution is then post-processed to generate a set of output files that can be used for further analysis. + +The next sections in this guide provide more details on how to perform all the steps in the workflow: +1. [Model settings parameters](@ref): `genx_settings.yml` +2. [Solver Configuration](@ref): `[solver_name]_settings.yml` +3. [GenX Inputs](@ref) +4. [Time-domain reduction](@ref): `time_domain_reduction.yml` (optional) +5. [Multi-stage setup](@ref): `multi_stage_settings.yml` (optional) +6. [Running the model](@ref) +7. [GenX Outputs](@ref) + +## Single and Multi-stage investment planning + +In addition to the standard single-stage planning mode, in which the produces a single snapshot of the minimum-cost generation capacity mix to meet demand at least cost under some pre-specified future conditions, recent improvements in the GenX source code (part of v0.3 release) enable its use for studying **long-term evolution** of the power system across multiple investment stages. GenX can be used to study multi-stage power system planning in the following two ways: + +- The user can formulate and solve a deterministic multi-stage planning problem with perfect foresight i.e. demand, cost, and policy assumptions about all stages are known and exploited to determine the least-cost investment trajectory for the entire period. The solution relies on exploiting the decomposable nature of the multi-stage problem via the implementation of the dual dynamic programming algorithm, described in [Lara et al. 2018 here](https://www.sciencedirect.com/science/article/abs/pii/S0377221718304466). + +- The user can formulate a sequential, myopic multi-stage planning problem, where the model solves a sequence of single-stage investment planning problems wherein investment decisions in each stage are individually optimized to meet demand given assumptions for the current planning stage and with investment decisions from previous stages treated as inputs for the current stage. We refer to this as "myopic" (or shortsighted) mode since the solution does not account for information about future stages in determining investments for a given stage. This version is generally more computationally efficient than the deterministic multi-stage expansion with perfect foresight mode. + diff --git a/docs/src/write_outputs.md b/docs/src/write_outputs.md index 6940ea5e53..06f9789514 100644 --- a/docs/src/write_outputs.md +++ b/docs/src/write_outputs.md @@ -1,7 +1,7 @@ # Functions for Writing the Different Results/Outputs to Separate Files ```@autodocs Modules = [GenX] -Pages = ["write_outputs.jl"] +Pages = ["write_outputs.jl", "choose_output_dir.jl", "dftranspose.jl"] ``` ## Write Status @@ -10,12 +10,22 @@ Modules = [GenX] Pages = ["write_status.jl"] ``` +## Write CO_2 Cap +```@docs +GenX.write_co2_cap +``` + ## Write Costs ```@autodocs Modules = [GenX] Pages = ["write_costs.jl"] ``` +## Write Fuel Consumption +```@docs +GenX.write_fuel_consumption +``` + ## Write Emissions ```@autodocs Modules = [GenX] @@ -118,13 +128,26 @@ Pages = ["write_net_revenue.jl"] ``` ## Write Co-Located VRE and Storage files -```@autodocs -Modules = [GenX] -Pages = ["write_vre_stor.jl"] +```@docs +GenX.write_vre_stor +GenX.write_vre_stor_capacity +GenX.write_vre_stor_charge +GenX.write_vre_stor_discharge +``` + +## Write Multi-stage files +```@docs +GenX.write_multi_stage_costs +GenX.write_multi_stage_stats +GenX.write_multi_stage_settings +GenX.write_multi_stage_network_expansion +GenX.write_multi_stage_capacities_charge +GenX.write_multi_stage_capacities_energy ``` -## Write Settings files +## Write maintenance files ```@autodocs Modules = [GenX] -Pages = ["write_settings.jl"] +Pages = ["write_maintenance.jl"] ``` + diff --git a/src/GenX.jl b/src/GenX.jl index 508fccceb6..d0a53378c2 100644 --- a/src/GenX.jl +++ b/src/GenX.jl @@ -72,9 +72,6 @@ include_all_in_folder("write_outputs") include("time_domain_reduction/time_domain_reduction.jl") include("time_domain_reduction/precluster.jl") -#Just for unit testing; Under active development -include("simple_operation.jl") - include_all_in_folder("multi_stage") include_all_in_folder("additional_tools") diff --git a/src/multi_stage/endogenous_retirement.jl b/src/multi_stage/endogenous_retirement.jl index 5aa21599db..68fb8a700f 100644 --- a/src/multi_stage/endogenous_retirement.jl +++ b/src/multi_stage/endogenous_retirement.jl @@ -1,5 +1,5 @@ @doc raw""" - function get_retirement_stage(cur_stage::Int, stage_len::Int, lifetime::Int, stage_lens::Array{Int, 1}) + get_retirement_stage(cur_stage::Int, stage_len::Int, lifetime::Int, stage_lens::Array{Int, 1}) This function determines the model stage before which all newly built capacity must be retired. Used to enforce endogenous lifetime retirements in multi-stage modeling. diff --git a/src/simple_operation.jl b/src/simple_operation.jl index 3afe8a5385..aa6d784cb2 100644 --- a/src/simple_operation.jl +++ b/src/simple_operation.jl @@ -1,9 +1,3 @@ -@doc raw""" - simple_operation(num1::Float64, num2::Float64) - -This is just a simple function for adding two numbers intended to start off the unit testing. This function -isn't used in GenX and will be replaced by the ones that are used as we develop the fully-grown unit testing. -""" function simple_operation(num1::Float64, num2::Float64) num3 = num1 + num2 return num3 diff --git a/src/write_outputs/write_vre_stor.jl b/src/write_outputs/write_vre_stor.jl index a7af4bf5ea..6f7e617ec1 100644 --- a/src/write_outputs/write_vre_stor.jl +++ b/src/write_outputs/write_vre_stor.jl @@ -3,7 +3,6 @@ Function for writing the vre-storage specific files. """ - function write_vre_stor(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) ### CAPACITY DECISIONS ### From 84d56d5afbf15122779a6d2272461a59036bbe7e Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Thu, 9 Nov 2023 15:03:02 -0500 Subject: [PATCH 11/16] Fix electrolyzer docs --- docs/src/electrolyzers.md | 3 ++- src/model/resources/hydrogen/electrolyzer.jl | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/electrolyzers.md b/docs/src/electrolyzers.md index 82a3570d73..aac49708e0 100644 --- a/docs/src/electrolyzers.md +++ b/docs/src/electrolyzers.md @@ -1,5 +1,6 @@ # Hydrogen Electrolyzers + ```@autodocs Modules = [GenX] -Pages = ["electrolyzers.jl"] +Pages = ["electrolyzer.jl"] ``` diff --git a/src/model/resources/hydrogen/electrolyzer.jl b/src/model/resources/hydrogen/electrolyzer.jl index 7d74de7d34..1ece2e686e 100644 --- a/src/model/resources/hydrogen/electrolyzer.jl +++ b/src/model/resources/hydrogen/electrolyzer.jl @@ -77,7 +77,6 @@ This optional constraint (enabled by setting `HydrogenHourlyMatching==1` in `gen This constraint permits modeling of the 'three pillars' requirements for clean hydrogen supply of (1) new clean supply (if only new clean resources are designated as eligible), (2) that is deliverable to the electrolyzer (assuming co-location within the same modeled zone = deliverability), and (3) produced within the same hour as the electrolyzer consumes power (otherwise known as 'additionality/new supply', 'deliverability', and 'temporal matching requirements') See Ricks, Xu & Jenkins (2023), ''Minimizing emissions from grid-based hydrogen production in the United States'' *Environ. Res. Lett.* 18 014025 [doi:10.1088/1748-9326/acacb5](https://iopscience.iop.org/article/10.1088/1748-9326/acacb5/meta) for more. """ - function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) println("Electrolyzer Resources Module") From 1a05de274a990382fe22bf66304d6751959afa39 Mon Sep 17 00:00:00 2001 From: "Chakrabarti, Sambuddha (Sam)" Date: Tue, 27 Feb 2024 15:15:02 -0500 Subject: [PATCH 12/16] Added the license sentence on the opening page, which has been missing --- docs/src/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/index.md b/docs/src/index.md index c5a094a620..4127a3ab1e 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -84,4 +84,6 @@ Pages = ["core.md", "write_outputs.md"] ``` -## License \ No newline at end of file +## License + +GenX is released under the General Public License, GPL-2.0 \ No newline at end of file From 344dfb96f214e6aa2825a13098bbddd9dfb65e8d Mon Sep 17 00:00:00 2001 From: "Chakrabarti, Sambuddha (Sam)" Date: Tue, 27 Feb 2024 17:14:17 -0500 Subject: [PATCH 13/16] Modified ordering of Package Manual --- docs/src/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/src/index.md b/docs/src/index.md index 4127a3ab1e..a26902baf2 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -26,18 +26,18 @@ We recommend users of GenX to cite it in their academic publications and patent ## Package Manual ```@contents -Pages = ["running_genx.md", - "commercial_solvers.md", - "generate_alternatives.md", - "workflow.md", - "model_configuration.md", - "solver_configuration.md", +Pages = ["workflow.md", "model_input.md", "TDR_input.md", "running_TDR.md", "multi_stage_input.md", "methodofmorris_input.md", + "model_configuration.md", + "solver_configuration.md", "running_model.md", + "running_genx.md", + "commercial_solvers.md", + "generate_alternatives.md", "model_output.md", "model_introduction.md", "model_notation.md", From b79a4ca4458995cf0c255aba5cc08a5ee4014877 Mon Sep 17 00:00:00 2001 From: "Chakrabarti, Sambuddha (Sam)" Date: Tue, 27 Feb 2024 21:05:16 -0500 Subject: [PATCH 14/16] Changed the GenX version number to 0.4 in installation guide; put the name and email of Luca in the issue tracker contacts section --- docs/make.jl | 4 ++-- docs/src/installation.md | 2 +- docs/src/third_party_genx.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index ac7eedc4f0..efb1382539 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -100,8 +100,8 @@ makedocs(; assets=String[], collapselevel=1 ), - pages=[p for p in pages] - # warnonly=true + pages=[p for p in pages], + warnonly=true ) # deploydocs(; diff --git a/docs/src/installation.md b/docs/src/installation.md index 6f51ec9915..1f63b72f8f 100644 --- a/docs/src/installation.md +++ b/docs/src/installation.md @@ -2,7 +2,7 @@ This guide will walk you through the steps to install Julia, the GenX package, and the required dependencies to run GenX. ## Installing Julia -GenX currently exists in version 0.3.6 and runs only on Julia v1.5.x, 1.6.x, 1.7.x, 1.8.x, and 1.9.x, where x>=0 and a minimum version of [JuMP](https://jump.dev/JuMP.jl/stable/) v1.1.1. To install Julia, please follow the instructions on the [Julia website](https://julialang.org/downloads/). +GenX currently exists in version 0.4.0 and runs only on Julia v1.5.x, 1.6.x, 1.7.x, 1.8.x, and 1.9.x, where x>=0 and a minimum version of [JuMP](https://jump.dev/JuMP.jl/stable/) v1.1.1. To install Julia, please follow the instructions on the [Julia website](https://julialang.org/downloads/). !!! note "Note" We recommend the users to stick to a particular version of Julia to run GenX. If however, the users decide to switch between versions, it's very important to delete the old `Manifest.toml` file and do a fresh build of GenX. diff --git a/docs/src/third_party_genx.md b/docs/src/third_party_genx.md index 3392f5a865..f4aefe5d8d 100644 --- a/docs/src/third_party_genx.md +++ b/docs/src/third_party_genx.md @@ -7,4 +7,4 @@ Python users can now run GenX from a thin-python-wrapper interface, developed by It is now possible to run a list of GenX cases as separate batch jobs. Alternatively, they can also be run locally in sequence, as one job. It has been developed by [Jacob Schwartz](https://github.com/cfe316). This tool is called `SimpleGenXCaseRunner` and can be cloned from the github page: [SimpleGenXCaseRunner](https://github.com/cfe316/SimpleGenXCaseRunner) ## Bug and feature requests and contact info -If you would like to report a bug in the code or request a feature, please use our [Issue Tracker](https://github.com/GenXProject/GenX/issues). If you're unsure or have questions on how to use GenX that are not addressed by the above documentation, please reach out to Sambuddha Chakrabarti (sc87@princeton.edu), Jesse Jenkins (jdj2@princeton.edu) or Dharik Mallapragada (dharik@mit.edu). +If you would like to report a bug in the code or request a feature, please use our [Issue Tracker](https://github.com/GenXProject/GenX/issues). If you're unsure or have questions on how to use GenX that are not addressed by the above documentation, please reach out to Sambuddha Chakrabarti (sc87@princeton.edu), Luca Bonaldo (lucabonaldo@princeton.edu), Jesse Jenkins (jdj2@princeton.edu) or Dharik Mallapragada (dharik@mit.edu). From c38bd0bbd15a176f1b204c821019eb0e2c1dc146 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Mon, 30 Oct 2023 17:38:07 -0400 Subject: [PATCH 15/16] Refactor docs structure. Not deploying yet. --- docs/src/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/index.md b/docs/src/index.md index a26902baf2..c6212aadf8 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -86,4 +86,4 @@ Pages = ["core.md", ## License -GenX is released under the General Public License, GPL-2.0 \ No newline at end of file +GenX is released under the General Public License, GPL-2.0 From 3da767a5a16ab446536c3e1446c14b6806f60f26 Mon Sep 17 00:00:00 2001 From: lbonaldo Date: Tue, 27 Feb 2024 22:20:36 -0500 Subject: [PATCH 16/16] Clean branch --- .../Settings/output_settings.yml | 27 -- docs/src/index.md | 2 +- docs/src/workflow.md | 65 ++++ test/Electrolyzer/Generators_data.csv | 7 - test/Electrolyzer/Generators_variability.csv | 2 +- test/MethodofMorris/CO2_cap.csv | 2 - .../Capacity_reserve_margin.csv | 2 - test/MethodofMorris/Demand_data.csv | 121 ------ .../Energy_share_requirement.csv | 2 - test/MethodofMorris/Fuels_data.csv | 122 ------ test/MethodofMorris/Generators_data.csv | 5 - .../MethodofMorris/Generators_variability.csv | 121 ------ .../MethodofMorris/Method_of_morris_range.csv | 9 - .../Minimum_capacity_requirement.csv | 4 - test/MethodofMorris/Period_map.csv | 366 ------------------ test/MethodofMorris/highs_settings.yml | 11 - .../Inputs_p1/Capacity_reserve_margin.csv | 2 - .../Inputs_p1/Energy_share_requirement.csv | 2 - test/MultiStage/Inputs_p1/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Inputs_p2/Capacity_reserve_margin.csv | 2 - .../Inputs_p2/Energy_share_requirement.csv | 2 - test/MultiStage/Inputs_p2/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Inputs_p3/Capacity_reserve_margin.csv | 2 - .../Inputs_p3/Energy_share_requirement.csv | 2 - test/MultiStage/Inputs_p3/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - test/PiecewiseFuel_CO2/Generators_data.csv | 4 - test/TDR/Generators_data.csv | 5 - test/TDR/clusters_true.jld2 | Bin 50060 -> 0 bytes test/ThreeZones/Capacity_reserve_margin.csv | 4 - test/ThreeZones/Energy_share_requirement.csv | 4 - test/ThreeZones/Generators_data.csv | 11 - test/VREStor/Generators_data.csv | 272 ------------- test/VREStor/Vre_and_stor_data.csv | 64 --- test/runtests.jl | 21 - test/test_VREStor.jl | 3 - test/test_electrolyzer.jl | 3 - test/test_methodofmorris.jl | 59 --- test/test_multistage.jl | 3 - test/test_piecewisefuel_CO2.jl | 3 - test/test_threezones.jl | 3 - test/test_utilities.jl | 39 -- 44 files changed, 67 insertions(+), 1338 deletions(-) delete mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Settings/output_settings.yml delete mode 100644 test/Electrolyzer/Generators_data.csv delete mode 100644 test/MethodofMorris/CO2_cap.csv delete mode 100644 test/MethodofMorris/Capacity_reserve_margin.csv delete mode 100644 test/MethodofMorris/Demand_data.csv delete mode 100644 test/MethodofMorris/Energy_share_requirement.csv delete mode 100644 test/MethodofMorris/Fuels_data.csv delete mode 100644 test/MethodofMorris/Generators_data.csv delete mode 100644 test/MethodofMorris/Generators_variability.csv delete mode 100644 test/MethodofMorris/Method_of_morris_range.csv delete mode 100644 test/MethodofMorris/Minimum_capacity_requirement.csv delete mode 100644 test/MethodofMorris/Period_map.csv delete mode 100644 test/MethodofMorris/highs_settings.yml delete mode 100644 test/MultiStage/Inputs_p1/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Inputs_p1/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Inputs_p1/Generators_data.csv delete mode 100644 test/MultiStage/Inputs_p1/Minimum_capacity_requirement.csv delete mode 100644 test/MultiStage/Inputs_p2/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Inputs_p2/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Inputs_p2/Generators_data.csv delete mode 100644 test/MultiStage/Inputs_p2/Minimum_capacity_requirement.csv delete mode 100644 test/MultiStage/Inputs_p3/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Inputs_p3/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Inputs_p3/Generators_data.csv delete mode 100644 test/MultiStage/Inputs_p3/Minimum_capacity_requirement.csv delete mode 100644 test/PiecewiseFuel_CO2/Generators_data.csv delete mode 100644 test/TDR/Generators_data.csv delete mode 100644 test/TDR/clusters_true.jld2 delete mode 100644 test/ThreeZones/Capacity_reserve_margin.csv delete mode 100644 test/ThreeZones/Energy_share_requirement.csv delete mode 100644 test/ThreeZones/Generators_data.csv delete mode 100644 test/VREStor/Generators_data.csv delete mode 100644 test/VREStor/Vre_and_stor_data.csv delete mode 100644 test/test_methodofmorris.jl delete mode 100644 test/test_utilities.jl diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Settings/output_settings.yml b/Example_Systems/RealSystemExample/ISONE_Singlezone/Settings/output_settings.yml deleted file mode 100644 index 283e141ca7..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Singlezone/Settings/output_settings.yml +++ /dev/null @@ -1,27 +0,0 @@ -WriteCosts: false -WriteCapacity: false -WriteCapacityValue: false -WriteCapacityFactor: false -WriteCharge: false -WriteChargingCost: false -WriteCO2: false -WriteCO2Cap: false -WriteCommit: false -WriteCurtailment: false -WriteEmissions: false -WriteEnergyRevenue: false -WriteESRPrices: false -WriteESRRevenue: false -WriteFuelConsumption: false -WriteHourlyMatchingPrices: false -WriteHydrogenPrices: false -WriteMaintenance: false -WriteMaxCapReq: false -WriteMinCapReq: false -WriteNetRevenue: false -WriteNSE: false -WriteNWExpansion: false -WriteTransmissionFlows: false -WriteTransmissionLosses: false -WriteVirtualDischarge: false -WriteVREStor: false \ No newline at end of file diff --git a/docs/src/index.md b/docs/src/index.md index c6212aadf8..a26902baf2 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -86,4 +86,4 @@ Pages = ["core.md", ## License -GenX is released under the General Public License, GPL-2.0 +GenX is released under the General Public License, GPL-2.0 \ No newline at end of file diff --git a/docs/src/workflow.md b/docs/src/workflow.md index cbcd51232a..decb46bf13 100644 --- a/docs/src/workflow.md +++ b/docs/src/workflow.md @@ -26,6 +26,71 @@ The next sections in this guide provide more details on how to perform all the s 6. [Running the model](@ref) 7. [GenX Outputs](@ref) +## Details of running a GenX case +This section details as to what happens in the process of running a GenX case. As a first step, the GenX package and the desired solver (is it's anyting other than the default solver, HiGHS; for instance, Gurobi) are loaded + +```@example pcm +using GenX +using Gurobi +optimizer=Gurobi.Optimizer +``` +The next command the user needs to run is the following: + +```@example pcm +run_genx_case!("", optimizer) +``` +Contingent upon whether a single stage model or a multi-stage model is intended to be run, the above function, inturn makes calls to either of these two functions: +For single-stage case: +```@example pcm +run_genx_case_simple!(case, mysetup, optimizer) +``` +From within this function, if time-domain reduction (TDR) is needed, GenX first checks whether there already is time domain clustered data (in order to avoid duplication of efforts) by running +```@example pcm +prevent_doubled_timedomainreduction(case) +``` +and if the function +```@example pcm +!time_domain_reduced_files_exist(TDRpath) +``` +returns true value, it then runs +```@example pcm +cluster_inputs(case, settings_path, mysetup) +``` +to generate the time-domain clustered data for the time-series. +-OR- +For multi-stage case: + +```@example pcm +run_genx_case_multistage!(case, mysetup, optimizer) +``` +In this case also, the TDR clustering is done in a similar way, exxcept for the fact that if TDRSettingsDict["MultiStageConcatenate"] is set to 0, the TDR clustering is done individually for each stage. Otherwise, the clustering is done for all the stages together. The next step is configuring the solver, which is done by +```@example pcm +OPTIMIZER = configure_solver(settings_path, optimizer) +``` +The call to configure_solver first gets the particular solver that is being used to solve the particular case at hand, which then calls a function specific to that solver in order to use either the default values of the solver settings parameter or, any other set of values, specified in the settings YAML file for that particular solver. + +The configuration of solver is followed by loading the input files by running the following function: +```@example pcm +myinputs = load_inputs(mysetup, case) +``` +The above function in its turn calls separate functions to load different resources, demand data, fuels data etc. and returns the dictionary myinputs populated by the input data. The next function call is to generate the model +```@example pcm +time_elapsed = @elapsed EP = generate_model(mysetup, myinputs, OPTIMIZER) +println("Time elapsed for model building is") +println(time_elapsed) +``` +The above function call instantiates the different decision variables, constraints, and objective function expressions from the input data. It can be seen that we also keep track of the time required to build the model. Follwoing this, the solve_model function makes the call to the solver and return the results as well as the solve time. +```@example pcm +EP, solve_time = solve_model(EP, mysetup) +myinputs["solve_time"] = solve_time # Store the model solve time in myinputs +``` +For writing the results, we invoke the following function: +```@example pcm +outputs_path = get_default_output_folder(case) +elapsed_time = @elapsed outputs_path = write_outputs(EP, outputs_path, mysetup, myinputs) +``` +The call to the write_outputs() function in turn calls a series of functions (write_capacity, write_power etc.) each of which querries the respective decision variables and creates dataframes, eventually outputting the results to separate CSV files. + ## Single and Multi-stage investment planning In addition to the standard single-stage planning mode, in which the produces a single snapshot of the minimum-cost generation capacity mix to meet demand at least cost under some pre-specified future conditions, recent improvements in the GenX source code (part of v0.3 release) enable its use for studying **long-term evolution** of the power system across multiple investment stages. GenX can be used to study multi-stage power system planning in the following two ways: diff --git a/test/Electrolyzer/Generators_data.csv b/test/Electrolyzer/Generators_data.csv deleted file mode 100644 index 5ec3ec16b5..0000000000 --- a/test/Electrolyzer/Generators_data.csv +++ /dev/null @@ -1,7 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,ELECTROLYZER,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,ESR_1,ESR_2,region,cluster,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,natural_gas_fired_combined_cycle,0,0,NE,1,0,0,0,0 -solar_pv,1,0,0,0,0,0,1,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,solar_photovoltaic,1,1,NE,1,0,0,0,1 -onshore_wind,1,0,0,0,0,0,1,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,onshore_wind_turbine,1,1,NE,1,0,0,0,1 -battery,1,0,0,1,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,battery_mid,0,0,NE,0,0,0,0,0 -electrolyzer,1,0,0,0,0,0,0,0,1,0,1,0,0,0,-1,-1,-1,-1,0,0,125000,0,0,15000,0,0,0,0,0,None,1,0,0,0,0,1,1,0,0,0,0,0,0,0,hydrogen_electrolyzer,0,1,NE,0,55,1000,1000,0 -battery_for_electrolyzer,1,0,0,1,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,21542,24743,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,battery_mid,0,0,NE,0,0,0,0,1 \ No newline at end of file diff --git a/test/Electrolyzer/Generators_variability.csv b/test/Electrolyzer/Generators_variability.csv index 55296ad3b1..1a6a2caf86 100644 --- a/test/Electrolyzer/Generators_variability.csv +++ b/test/Electrolyzer/Generators_variability.csv @@ -118,4 +118,4 @@ Time_Index,solar_pv,onshore_wind 117,0,0.006259252 118,0,0.008088858 119,0,0.008165604 -120,0,0.007110484 +120,0,0.007110484 \ No newline at end of file diff --git a/test/MethodofMorris/CO2_cap.csv b/test/MethodofMorris/CO2_cap.csv deleted file mode 100644 index 1b5869ce2e..0000000000 --- a/test/MethodofMorris/CO2_cap.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,CO_2_Cap_Zone_1,CO_2_Max_tons_MWh_1,CO_2_Max_Mtons_1 -NE,z1,1,0.05,0.018 diff --git a/test/MethodofMorris/Capacity_reserve_margin.csv b/test/MethodofMorris/Capacity_reserve_margin.csv deleted file mode 100644 index 1cda938c80..0000000000 --- a/test/MethodofMorris/Capacity_reserve_margin.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,CapRes_1 -NE,z1,0.156 diff --git a/test/MethodofMorris/Demand_data.csv b/test/MethodofMorris/Demand_data.csv deleted file mode 100644 index 473c675be1..0000000000 --- a/test/MethodofMorris/Demand_data.csv +++ /dev/null @@ -1,121 +0,0 @@ -Voll,Demand_Segment,Cost_of_Demand_Curtailment_per_MW,Max_Demand_Curtailment,Rep_Periods,Timesteps_per_Rep_Period,Sub_Weights,Time_Index,Demand_MW_z1 -50000,1,1,1,5,24,24.0,1,11122.0 -,,,,,,3672.0,2,10655.0 -,,,,,,5016.0,3,10441.0 -,,,,,,24.0,4,10365.0 -,,,,,,24.0,5,10639.0 -,,,,,,,6,11577.0 -,,,,,,,7,13349.0 -,,,,,,,8,14550.0 -,,,,,,,9,14922.0 -,,,,,,,10,15165.0 -,,,,,,,11,15328.0 -,,,,,,,12,15380.0 -,,,,,,,13,15275.0 -,,,,,,,14,15154.0 -,,,,,,,15,14953.0 -,,,,,,,16,14885.0 -,,,,,,,17,15340.0 -,,,,,,,18,16003.0 -,,,,,,,19,15767.0 -,,,,,,,20,15236.0 -,,,,,,,21,14663.0 -,,,,,,,22,13889.0 -,,,,,,,23,12855.0 -,,,,,,,24,11809.0 -,,,,,,,25,9702.0 -,,,,,,,26,9229.0 -,,,,,,,27,9004.0 -,,,,,,,28,8951.0 -,,,,,,,29,9188.0 -,,,,,,,30,10087.0 -,,,,,,,31,11929.0 -,,,,,,,32,13166.0 -,,,,,,,33,13504.0 -,,,,,,,34,13632.0 -,,,,,,,35,13724.0 -,,,,,,,36,13742.0 -,,,,,,,37,13665.0 -,,,,,,,38,13641.0 -,,,,,,,39,13501.0 -,,,,,,,40,13366.0 -,,,,,,,41,13376.0 -,,,,,,,42,13524.0 -,,,,,,,43,13736.0 -,,,,,,,44,14401.0 -,,,,,,,45,14006.0 -,,,,,,,46,13006.0 -,,,,,,,47,11658.0 -,,,,,,,48,10416.0 -,,,,,,,49,10219.0 -,,,,,,,50,9671.0 -,,,,,,,51,9383.0 -,,,,,,,52,9269.0 -,,,,,,,53,9483.0 -,,,,,,,54,10103.0 -,,,,,,,55,11573.0 -,,,,,,,56,13059.0 -,,,,,,,57,13905.0 -,,,,,,,58,14430.0 -,,,,,,,59,14873.0 -,,,,,,,60,15179.0 -,,,,,,,61,15323.0 -,,,,,,,62,15515.0 -,,,,,,,63,15537.0 -,,,,,,,64,15481.0 -,,,,,,,65,15485.0 -,,,,,,,66,15440.0 -,,,,,,,67,15208.0 -,,,,,,,68,15028.0 -,,,,,,,69,15221.0 -,,,,,,,70,14913.0 -,,,,,,,71,13573.0 -,,,,,,,72,12159.0 -,,,,,,,73,14935.0 -,,,,,,,74,14062.0 -,,,,,,,75,13498.0 -,,,,,,,76,13146.0 -,,,,,,,77,13178.0 -,,,,,,,78,13712.0 -,,,,,,,79,15192.0 -,,,,,,,80,17114.0 -,,,,,,,81,18656.0 -,,,,,,,82,20020.0 -,,,,,,,83,21201.0 -,,,,,,,84,22009.0 -,,,,,,,85,22567.0 -,,,,,,,86,23070.0 -,,,,,,,87,23388.0 -,,,,,,,88,23629.0 -,,,,,,,89,23770.0 -,,,,,,,90,23575.0 -,,,,,,,91,23034.0 -,,,,,,,92,22325.0 -,,,,,,,93,21921.0 -,,,,,,,94,21122.0 -,,,,,,,95,19311.0 -,,,,,,,96,17514.0 -,,,,,,,97,11232.0 -,,,,,,,98,10825.0 -,,,,,,,99,10632.0 -,,,,,,,100,10622.0 -,,,,,,,101,10948.0 -,,,,,,,102,11984.0 -,,,,,,,103,13879.0 -,,,,,,,104,14890.0 -,,,,,,,105,15134.0 -,,,,,,,106,15241.0 -,,,,,,,107,15360.0 -,,,,,,,108,15407.0 -,,,,,,,109,15385.0 -,,,,,,,110,15372.0 -,,,,,,,111,15285.0 -,,,,,,,112,15482.0 -,,,,,,,113,16544.0 -,,,,,,,114,17247.0 -,,,,,,,115,17114.0 -,,,,,,,116,16657.0 -,,,,,,,117,15936.0 -,,,,,,,118,14783.0 -,,,,,,,119,13342.0 -,,,,,,,120,12052.0 diff --git a/test/MethodofMorris/Energy_share_requirement.csv b/test/MethodofMorris/Energy_share_requirement.csv deleted file mode 100644 index 50c97b4b39..0000000000 --- a/test/MethodofMorris/Energy_share_requirement.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,ESR_1,ESR_2 -NE,z1,0.259,0.348 diff --git a/test/MethodofMorris/Fuels_data.csv b/test/MethodofMorris/Fuels_data.csv deleted file mode 100644 index 4c5f7bc799..0000000000 --- a/test/MethodofMorris/Fuels_data.csv +++ /dev/null @@ -1,122 +0,0 @@ -Time_Index,NG,None -0,0.05306,0.0 -1,5.28,0.0 -2,5.28,0.0 -3,5.28,0.0 -4,5.28,0.0 -5,5.28,0.0 -6,5.28,0.0 -7,5.28,0.0 -8,5.28,0.0 -9,5.28,0.0 -10,5.28,0.0 -11,5.28,0.0 -12,5.28,0.0 -13,5.28,0.0 -14,5.28,0.0 -15,5.28,0.0 -16,5.28,0.0 -17,5.28,0.0 -18,5.28,0.0 -19,5.28,0.0 -20,5.28,0.0 -21,5.28,0.0 -22,5.28,0.0 -23,5.28,0.0 -24,5.28,0.0 -25,3.69,0.0 -26,3.69,0.0 -27,3.69,0.0 -28,3.69,0.0 -29,3.69,0.0 -30,3.69,0.0 -31,3.69,0.0 -32,3.69,0.0 -33,3.69,0.0 -34,3.69,0.0 -35,3.69,0.0 -36,3.69,0.0 -37,3.69,0.0 -38,3.69,0.0 -39,3.69,0.0 -40,3.69,0.0 -41,3.69,0.0 -42,3.69,0.0 -43,3.69,0.0 -44,3.69,0.0 -45,3.69,0.0 -46,3.69,0.0 -47,3.69,0.0 -48,3.69,0.0 -49,2.23,0.0 -50,2.23,0.0 -51,2.23,0.0 -52,2.23,0.0 -53,2.23,0.0 -54,2.23,0.0 -55,2.23,0.0 -56,2.23,0.0 -57,2.23,0.0 -58,2.23,0.0 -59,2.23,0.0 -60,2.23,0.0 -61,2.23,0.0 -62,2.23,0.0 -63,2.23,0.0 -64,2.23,0.0 -65,2.23,0.0 -66,2.23,0.0 -67,2.23,0.0 -68,2.23,0.0 -69,2.23,0.0 -70,2.23,0.0 -71,2.23,0.0 -72,2.23,0.0 -73,2.34,0.0 -74,2.34,0.0 -75,2.34,0.0 -76,2.34,0.0 -77,2.34,0.0 -78,2.34,0.0 -79,2.34,0.0 -80,2.34,0.0 -81,2.34,0.0 -82,2.34,0.0 -83,2.34,0.0 -84,2.34,0.0 -85,2.34,0.0 -86,2.34,0.0 -87,2.34,0.0 -88,2.34,0.0 -89,2.34,0.0 -90,2.34,0.0 -91,2.34,0.0 -92,2.34,0.0 -93,2.34,0.0 -94,2.34,0.0 -95,2.34,0.0 -96,2.34,0.0 -97,2.74,0.0 -98,2.74,0.0 -99,2.74,0.0 -100,2.74,0.0 -101,2.74,0.0 -102,2.74,0.0 -103,2.74,0.0 -104,2.74,0.0 -105,2.74,0.0 -106,2.74,0.0 -107,2.74,0.0 -108,2.74,0.0 -109,2.74,0.0 -110,2.74,0.0 -111,2.74,0.0 -112,2.74,0.0 -113,2.74,0.0 -114,2.74,0.0 -115,2.74,0.0 -116,2.74,0.0 -117,2.74,0.0 -118,2.74,0.0 -119,2.74,0.0 -120,2.74,0.0 diff --git a/test/MethodofMorris/Generators_data.csv b/test/MethodofMorris/Generators_data.csv deleted file mode 100644 index 1aa6863cee..0000000000 --- a/test/MethodofMorris/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1 -onshore_wind,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1 -battery,1,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,battery_mid,0.95,0,0,NE,0 diff --git a/test/MethodofMorris/Generators_variability.csv b/test/MethodofMorris/Generators_variability.csv deleted file mode 100644 index 509dadf457..0000000000 --- a/test/MethodofMorris/Generators_variability.csv +++ /dev/null @@ -1,121 +0,0 @@ -Time_Index,natural_gas_combined_cycle,solar_pv,onshore_wind,battery -1,1.0,0.0,0.523972332,1.0 -2,1.0,0.0,0.657110274,1.0 -3,1.0,0.0,0.757477045,1.0 -4,1.0,0.0,0.644009769,1.0 -5,1.0,0.0,0.467615873,1.0 -6,1.0,0.0,0.553678334,1.0 -7,1.0,0.0,0.77921623,1.0 -8,1.0,0.0,0.725531518,1.0 -9,1.0,0.0,0.786552846,1.0 -10,1.0,0.003,0.589495063,1.0 -11,1.0,0.0852,0.436854541,1.0 -12,1.0,0.1324,0.533977807,1.0 -13,1.0,0.1041,0.54939425,1.0 -14,1.0,0.1276,0.297182679,1.0 -15,1.0,0.1108,0.108885378,1.0 -16,1.0,0.0825,0.097908288,1.0 -17,1.0,0.0043,0.092191279,1.0 -18,1.0,0.0,0.112537816,1.0 -19,1.0,0.0,0.366680771,1.0 -20,1.0,0.0,0.794670165,1.0 -21,1.0,0.0,0.931621909,1.0 -22,1.0,0.0,1.0,1.0 -23,1.0,0.0,1.0,1.0 -24,1.0,0.0,1.0,1.0 -25,1.0,0.0,0.676885605,1.0 -26,1.0,0.0,0.738456726,1.0 -27,1.0,0.0,0.703836918,1.0 -28,1.0,0.0,0.697715104,1.0 -29,1.0,0.0,0.578294039,1.0 -30,1.0,0.0,0.478842616,1.0 -31,1.0,0.0,0.57159102,1.0 -32,1.0,0.0216,0.389114857,1.0 -33,1.0,0.1372,0.520889282,1.0 -34,1.0,0.3468,0.376534432,1.0 -35,1.0,0.3952,0.327963144,1.0 -36,1.0,0.4551,0.407575041,1.0 -37,1.0,0.5095,0.536571622,1.0 -38,1.0,0.5567,0.576452434,1.0 -39,1.0,0.5691,0.562025309,1.0 -40,1.0,0.4904,0.422575682,1.0 -41,1.0,0.3087,0.521396458,1.0 -42,1.0,0.1034,0.710955501,1.0 -43,1.0,0.0,0.683217525,1.0 -44,1.0,0.0,0.635520697,1.0 -45,1.0,0.0,0.5644238,1.0 -46,1.0,0.0,0.61978668,1.0 -47,1.0,0.0,0.516743779,1.0 -48,1.0,0.0,0.470443606,1.0 -49,1.0,0.0,0.500380576,1.0 -50,1.0,0.0,0.512022793,1.0 -51,1.0,0.0,0.404206336,1.0 -52,1.0,0.0,0.142279267,1.0 -53,1.0,0.0,0.133046106,1.0 -54,1.0,0.1356,0.133957967,1.0 -55,1.0,0.1041,0.041104347,1.0 -56,1.0,0.2399,0.029715812,1.0 -57,1.0,0.3785,0.064291924,1.0 -58,1.0,0.4837,0.043738909,1.0 -59,1.0,0.5323,0.056054953,1.0 -60,1.0,0.5114,0.101633437,1.0 -61,1.0,0.5175,0.238559932,1.0 -62,1.0,0.5099,0.194997847,1.0 -63,1.0,0.502,0.190832943,1.0 -64,1.0,0.4113,0.26438266,1.0 -65,1.0,0.3017,0.273810387,1.0 -66,1.0,0.1773,0.195969075,1.0 -67,1.0,0.0811,0.235671312,1.0 -68,1.0,0.0006,0.188544422,1.0 -69,1.0,0.0,0.179863051,1.0 -70,1.0,0.0,0.223087296,1.0 -71,1.0,0.0,0.457369655,1.0 -72,1.0,0.0,0.715852976,1.0 -73,1.0,0.0,0.280310601,1.0 -74,1.0,0.0,0.603805244,1.0 -75,1.0,0.0,0.741859972,1.0 -76,1.0,0.0,0.44207269,1.0 -77,1.0,0.0,0.534612,1.0 -78,1.0,0.0259,0.587511122,1.0 -79,1.0,0.096,0.48241505,1.0 -80,1.0,0.2133,0.226682097,1.0 -81,1.0,0.3624,0.376575917,1.0 -82,1.0,0.4795,0.272142261,1.0 -83,1.0,0.5633,0.132447034,1.0 -84,1.0,0.5708,0.091180928,1.0 -85,1.0,0.534,0.420845181,1.0 -86,1.0,0.5641,0.543866694,1.0 -87,1.0,0.5537,0.943579316,1.0 -88,1.0,0.457,0.83001256,1.0 -89,1.0,0.3439,0.698711514,1.0 -90,1.0,0.1642,0.536995411,1.0 -91,1.0,0.0638,0.770702124,1.0 -92,1.0,0.0,0.569594324,1.0 -93,1.0,0.0,0.668922722,1.0 -94,1.0,0.0,0.759383678,1.0 -95,1.0,0.0,0.672967851,1.0 -96,1.0,0.0,0.861851215,1.0 -97,1.0,0.0,0.000154842,1.0 -98,1.0,0.0,5.75e-5,1.0 -99,1.0,0.0,7.18e-5,1.0 -100,1.0,0.0,3.65e-5,1.0 -101,1.0,0.0,3.0e-5,1.0 -102,1.0,0.0,0.0,1.0 -103,1.0,0.0,0.000772537,1.0 -104,1.0,0.0,0.000930232,1.0 -105,1.0,0.1029,0.000778525,1.0 -106,1.0,0.2427,0.000131503,1.0 -107,1.0,0.3353,0.005792293,1.0 -108,1.0,0.3693,0.00257458,1.0 -109,1.0,0.321,1.01e-5,1.0 -110,1.0,0.2798,0.000134685,1.0 -111,1.0,0.2887,0.000516413,1.0 -112,1.0,0.1717,0.001232307,1.0 -113,1.0,0.0,0.002655152,1.0 -114,1.0,0.0,0.003173271,1.0 -115,1.0,0.0,0.003878384,1.0 -116,1.0,0.0,0.005781263,1.0 -117,1.0,0.0,0.006259252,1.0 -118,1.0,0.0,0.008088858,1.0 -119,1.0,0.0,0.008165604,1.0 -120,1.0,0.0,0.007110484,1.0 diff --git a/test/MethodofMorris/Method_of_morris_range.csv b/test/MethodofMorris/Method_of_morris_range.csv deleted file mode 100644 index 7a985f1a57..0000000000 --- a/test/MethodofMorris/Method_of_morris_range.csv +++ /dev/null @@ -1,9 +0,0 @@ -Resource,Zone,ID,Lower_bound,Upper_bound,Parameter,Group,p_steps,total_num_trajectory,num_trajectory,len_design_mat,policy -natural_gas_combined_cycle,1,1,-5,5,Inv_Cost_per_MWyr,ng,10,2,2,15,reference -solar_pv,1,2,-10,10,Inv_Cost_per_MWyr,solar,20,,,, -onshore_wind,1,3,-7,7,Inv_Cost_per_MWyr,wind,14,,,, -battery,1,4,-20,20,Inv_Cost_per_MWyr,battery,40,,,, -natural_gas_combined_cycle,1,1,-5,5,Fixed_OM_Cost_per_MWyr,ng,10,,,, -solar_pv,1,2,-10,10,Fixed_OM_Cost_per_MWyr,solar,20,,,, -onshore_wind,1,3,-7,7,Fixed_OM_Cost_per_MWyr,wind,14,,,, -battery,1,4,-20,20,Fixed_OM_Cost_per_MWyr,battery,40,,,, diff --git a/test/MethodofMorris/Minimum_capacity_requirement.csv b/test/MethodofMorris/Minimum_capacity_requirement.csv deleted file mode 100644 index 8593a5abcc..0000000000 --- a/test/MethodofMorris/Minimum_capacity_requirement.csv +++ /dev/null @@ -1,4 +0,0 @@ -MinCapReqConstraint,ConstraintDescription,Min_MW -1,PV,5000 -2,Wind,10000 -3,Batteries,6000 diff --git a/test/MethodofMorris/Period_map.csv b/test/MethodofMorris/Period_map.csv deleted file mode 100644 index 72f49e820b..0000000000 --- a/test/MethodofMorris/Period_map.csv +++ /dev/null @@ -1,366 +0,0 @@ -Period_Index,Rep_Period,Rep_Period_Index -1,72,2 -2,72,2 -3,72,2 -4,72,2 -5,72,2 -6,72,2 -7,72,2 -8,72,2 -9,72,2 -10,72,2 -11,72,2 -12,72,2 -13,72,2 -14,72,2 -15,72,2 -16,72,2 -17,72,2 -18,72,2 -19,72,2 -20,72,2 -21,72,2 -22,72,2 -23,72,2 -24,72,2 -25,72,2 -26,72,2 -27,27,1 -28,72,2 -29,72,2 -30,72,2 -31,72,2 -32,72,2 -33,72,2 -34,72,2 -35,72,2 -36,72,2 -37,72,2 -38,72,2 -39,72,2 -40,72,2 -41,72,2 -42,72,2 -43,72,2 -44,72,2 -45,72,2 -46,72,2 -47,72,2 -48,72,2 -49,72,2 -50,72,2 -51,72,2 -52,72,2 -53,72,2 -54,72,2 -55,72,2 -56,72,2 -57,72,2 -58,72,2 -59,72,2 -60,72,2 -61,72,2 -62,72,2 -63,72,2 -64,72,2 -65,72,2 -66,72,2 -67,72,2 -68,72,2 -69,72,2 -70,72,2 -71,72,2 -72,72,2 -73,72,2 -74,72,2 -75,72,2 -76,72,2 -77,72,2 -78,72,2 -79,72,2 -80,72,2 -81,72,2 -82,72,2 -83,72,2 -84,72,2 -85,72,2 -86,72,2 -87,72,2 -88,72,2 -89,72,2 -90,72,2 -91,72,2 -92,72,2 -93,72,2 -94,72,2 -95,72,2 -96,72,2 -97,72,2 -98,72,2 -99,72,2 -100,72,2 -101,72,2 -102,72,2 -103,72,2 -104,72,2 -105,72,2 -106,72,2 -107,72,2 -108,72,2 -109,170,3 -110,72,2 -111,72,2 -112,72,2 -113,72,2 -114,72,2 -115,72,2 -116,72,2 -117,72,2 -118,72,2 -119,72,2 -120,72,2 -121,72,2 -122,170,3 -123,170,3 -124,170,3 -125,170,3 -126,170,3 -127,170,3 -128,170,3 -129,170,3 -130,170,3 -131,170,3 -132,170,3 -133,170,3 -134,170,3 -135,170,3 -136,170,3 -137,170,3 -138,170,3 -139,170,3 -140,170,3 -141,170,3 -142,170,3 -143,170,3 -144,170,3 -145,170,3 -146,170,3 -147,170,3 -148,170,3 -149,170,3 -150,170,3 -151,170,3 -152,170,3 -153,170,3 -154,170,3 -155,170,3 -156,170,3 -157,170,3 -158,170,3 -159,170,3 -160,170,3 -161,170,3 -162,170,3 -163,170,3 -164,170,3 -165,170,3 -166,170,3 -167,170,3 -168,170,3 -169,170,3 -170,170,3 -171,170,3 -172,170,3 -173,170,3 -174,170,3 -175,170,3 -176,170,3 -177,170,3 -178,170,3 -179,170,3 -180,170,3 -181,170,3 -182,170,3 -183,170,3 -184,170,3 -185,170,3 -186,170,3 -187,170,3 -188,170,3 -189,170,3 -190,170,3 -191,170,3 -192,170,3 -193,170,3 -194,170,3 -195,170,3 -196,170,3 -197,170,3 -198,198,4 -199,170,3 -200,170,3 -201,170,3 -202,170,3 -203,170,3 -204,170,3 -205,170,3 -206,170,3 -207,170,3 -208,170,3 -209,170,3 -210,170,3 -211,170,3 -212,170,3 -213,170,3 -214,170,3 -215,170,3 -216,170,3 -217,170,3 -218,170,3 -219,170,3 -220,170,3 -221,170,3 -222,170,3 -223,170,3 -224,170,3 -225,170,3 -226,170,3 -227,170,3 -228,170,3 -229,170,3 -230,170,3 -231,170,3 -232,170,3 -233,170,3 -234,170,3 -235,170,3 -236,170,3 -237,170,3 -238,170,3 -239,170,3 -240,170,3 -241,170,3 -242,170,3 -243,170,3 -244,170,3 -245,170,3 -246,170,3 -247,170,3 -248,170,3 -249,170,3 -250,170,3 -251,170,3 -252,170,3 -253,170,3 -254,170,3 -255,170,3 -256,170,3 -257,170,3 -258,170,3 -259,170,3 -260,170,3 -261,170,3 -262,170,3 -263,170,3 -264,170,3 -265,170,3 -266,170,3 -267,170,3 -268,170,3 -269,170,3 -270,170,3 -271,170,3 -272,170,3 -273,170,3 -274,170,3 -275,170,3 -276,170,3 -277,170,3 -278,170,3 -279,170,3 -280,170,3 -281,170,3 -282,170,3 -283,170,3 -284,170,3 -285,170,3 -286,170,3 -287,170,3 -288,170,3 -289,170,3 -290,170,3 -291,170,3 -292,170,3 -293,170,3 -294,170,3 -295,170,3 -296,170,3 -297,170,3 -298,170,3 -299,170,3 -300,170,3 -301,170,3 -302,170,3 -303,170,3 -304,170,3 -305,170,3 -306,170,3 -307,72,2 -308,72,2 -309,170,3 -310,170,3 -311,170,3 -312,72,2 -313,170,3 -314,170,3 -315,170,3 -316,170,3 -317,170,3 -318,170,3 -319,170,3 -320,170,3 -321,170,3 -322,170,3 -323,170,3 -324,170,3 -325,170,3 -326,170,3 -327,170,3 -328,72,2 -329,170,3 -330,170,3 -331,331,5 -332,170,3 -333,170,3 -334,170,3 -335,170,3 -336,72,2 -337,72,2 -338,72,2 -339,72,2 -340,72,2 -341,72,2 -342,72,2 -343,72,2 -344,72,2 -345,72,2 -346,72,2 -347,72,2 -348,72,2 -349,72,2 -350,72,2 -351,72,2 -352,72,2 -353,72,2 -354,72,2 -355,72,2 -356,72,2 -357,72,2 -358,72,2 -359,72,2 -360,72,2 -361,72,2 -362,72,2 -363,72,2 -364,72,2 -365,72,2 diff --git a/test/MethodofMorris/highs_settings.yml b/test/MethodofMorris/highs_settings.yml deleted file mode 100644 index f447d088e3..0000000000 --- a/test/MethodofMorris/highs_settings.yml +++ /dev/null @@ -1,11 +0,0 @@ -# HiGHS Solver Parameters -# Common solver settings -Feasib_Tol: 1.0e-05 # Primal feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07] -Optimal_Tol: 1.0e-05 # Dual feasibility tolerance # [type: double, advanced: false, range: [1e-10, inf], default: 1e-07] -TimeLimit: 1.0e23 # Time limit # [type: double, advanced: false, range: [0, inf], default: inf] -Pre_Solve: choose # Presolve option: "off", "choose" or "on" # [type: string, advanced: false, default: "choose"] -Method: ipm #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] - -# run the crossover routine for ipx -# [type: string, advanced: "on", range: {"off", "on"}, default: "off"] -run_crossover: "off" diff --git a/test/MultiStage/Inputs_p1/Capacity_reserve_margin.csv b/test/MultiStage/Inputs_p1/Capacity_reserve_margin.csv deleted file mode 100644 index 1cda938c80..0000000000 --- a/test/MultiStage/Inputs_p1/Capacity_reserve_margin.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,CapRes_1 -NE,z1,0.156 diff --git a/test/MultiStage/Inputs_p1/Energy_share_requirement.csv b/test/MultiStage/Inputs_p1/Energy_share_requirement.csv deleted file mode 100644 index 50c97b4b39..0000000000 --- a/test/MultiStage/Inputs_p1/Energy_share_requirement.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,ESR_1,ESR_2 -NE,z1,0.259,0.348 diff --git a/test/MultiStage/Inputs_p1/Generators_data.csv b/test/MultiStage/Inputs_p1/Generators_data.csv deleted file mode 100644 index 775a348389..0000000000 --- a/test/MultiStage/Inputs_p1/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,10000,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,2,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1,0.039,20,20,0,0,0,0 -solar_pv,1,0,0,0,0,0,1,1,1,500,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,7,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1,0.017,20,20,0,0,0,0 -onshore_wind,1,0,0,0,0,0,1,1,1,1000,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,6,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1,0.024,20,20,0,0,0,0 -battery,1,0,0,1,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,5622,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,12,0,0,1,0,battery_mid,0.95,0,0,NE,0,0.027,20,20,0,0,0,0 diff --git a/test/MultiStage/Inputs_p1/Minimum_capacity_requirement.csv b/test/MultiStage/Inputs_p1/Minimum_capacity_requirement.csv deleted file mode 100644 index 8593a5abcc..0000000000 --- a/test/MultiStage/Inputs_p1/Minimum_capacity_requirement.csv +++ /dev/null @@ -1,4 +0,0 @@ -MinCapReqConstraint,ConstraintDescription,Min_MW -1,PV,5000 -2,Wind,10000 -3,Batteries,6000 diff --git a/test/MultiStage/Inputs_p2/Capacity_reserve_margin.csv b/test/MultiStage/Inputs_p2/Capacity_reserve_margin.csv deleted file mode 100644 index 1cda938c80..0000000000 --- a/test/MultiStage/Inputs_p2/Capacity_reserve_margin.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,CapRes_1 -NE,z1,0.156 diff --git a/test/MultiStage/Inputs_p2/Energy_share_requirement.csv b/test/MultiStage/Inputs_p2/Energy_share_requirement.csv deleted file mode 100644 index 50c97b4b39..0000000000 --- a/test/MultiStage/Inputs_p2/Energy_share_requirement.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,ESR_1,ESR_2 -NE,z1,0.259,0.348 diff --git a/test/MultiStage/Inputs_p2/Generators_data.csv b/test/MultiStage/Inputs_p2/Generators_data.csv deleted file mode 100644 index 343e52b9c5..0000000000 --- a/test/MultiStage/Inputs_p2/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,2,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1,0.039,20,20,0,0,0,0 -solar_pv,1,0,0,0,0,0,1,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,7,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1,0.017,20,20,0,0,0,0 -onshore_wind,1,0,0,0,0,0,1,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,6,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1,0.024,20,20,0,0,0,0 -battery,1,0,0,1,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,5622,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,12,0,0,1,0,battery_mid,0.95,0,0,NE,0,0.027,20,20,0,0,0,0 diff --git a/test/MultiStage/Inputs_p2/Minimum_capacity_requirement.csv b/test/MultiStage/Inputs_p2/Minimum_capacity_requirement.csv deleted file mode 100644 index 8593a5abcc..0000000000 --- a/test/MultiStage/Inputs_p2/Minimum_capacity_requirement.csv +++ /dev/null @@ -1,4 +0,0 @@ -MinCapReqConstraint,ConstraintDescription,Min_MW -1,PV,5000 -2,Wind,10000 -3,Batteries,6000 diff --git a/test/MultiStage/Inputs_p3/Capacity_reserve_margin.csv b/test/MultiStage/Inputs_p3/Capacity_reserve_margin.csv deleted file mode 100644 index 1cda938c80..0000000000 --- a/test/MultiStage/Inputs_p3/Capacity_reserve_margin.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,CapRes_1 -NE,z1,0.156 diff --git a/test/MultiStage/Inputs_p3/Energy_share_requirement.csv b/test/MultiStage/Inputs_p3/Energy_share_requirement.csv deleted file mode 100644 index 50c97b4b39..0000000000 --- a/test/MultiStage/Inputs_p3/Energy_share_requirement.csv +++ /dev/null @@ -1,2 +0,0 @@ -,Network_zones,ESR_1,ESR_2 -NE,z1,0.259,0.348 diff --git a/test/MultiStage/Inputs_p3/Generators_data.csv b/test/MultiStage/Inputs_p3/Generators_data.csv deleted file mode 100644 index 343e52b9c5..0000000000 --- a/test/MultiStage/Inputs_p3/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,2,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1,0.039,20,20,0,0,0,0 -solar_pv,1,0,0,0,0,0,1,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,7,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1,0.017,20,20,0,0,0,0 -onshore_wind,1,0,0,0,0,0,1,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,6,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1,0.024,20,20,0,0,0,0 -battery,1,0,0,1,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,5622,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,12,0,0,1,0,battery_mid,0.95,0,0,NE,0,0.027,20,20,0,0,0,0 diff --git a/test/MultiStage/Inputs_p3/Minimum_capacity_requirement.csv b/test/MultiStage/Inputs_p3/Minimum_capacity_requirement.csv deleted file mode 100644 index 8593a5abcc..0000000000 --- a/test/MultiStage/Inputs_p3/Minimum_capacity_requirement.csv +++ /dev/null @@ -1,4 +0,0 @@ -MinCapReqConstraint,ConstraintDescription,Min_MW -1,PV,5000 -2,Wind,10000 -3,Batteries,6000 diff --git a/test/PiecewiseFuel_CO2/Generators_data.csv b/test/PiecewiseFuel_CO2/Generators_data.csv deleted file mode 100644 index b0c67824f8..0000000000 --- a/test/PiecewiseFuel_CO2/Generators_data.csv +++ /dev/null @@ -1,4 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Eff_Up,Eff_Down,Resource_Type,region,cluster,PWFU_Fuel_Usage_Zero_Load_MMBTU_per_h,PWFU_Heat_Rate_MMBTU_per_MWh_1,PWFU_Heat_Rate_MMBTU_per_MWh_2,PWFU_Load_Point_MW_1,PWFU_Load_Point_MW_2,CO2_Capture_Fraction,CO2_Capture_Fraction_Startup,CCS_Disposal_Cost_per_Metric_Ton,Biomass -onshore_wind,1,0,0,0,0,0,1,0,1,0,15000,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,None,100,0,0,0,0,1,1,0,1,1,onshore_wind_turbine,NE,1,0,0,0,0,0,0,0,0,0 -natural_gas_combined_cycle_ccs,1,1,0,0,0,0,0,0,0,0,15000,0,0,-1,-1,-1,0,0,0,0,0,0,0,5,0,0,NG,250,91,2,6,6,0.64,0.64,0.468,1,1,natural_gas_fired_combined_cycle_ccs,NE,1,400,6,7.2,160,250,0.9,0.6,20,0 -biomass_ccs,1,1,0,0,0,0,0,0,0,0,300,0,0,-1,-1,-1,0,0,0,0,0,0,0,10,0,10,Biomass,300,91,2,6,6,0.64,0.64,0.468,1,1,biomass_ccs,NE,1,0,0,0,0,0,0.9,0.6,20,1 diff --git a/test/TDR/Generators_data.csv b/test/TDR/Generators_data.csv deleted file mode 100644 index 9393ab0727..0000000000 --- a/test/TDR/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,1,solar_photovoltaic,0.8,1,1,NE,1 -onshore_wind,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,1,onshore_wind_turbine,0.8,1,1,NE,1 -battery,1,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,0,1,0,battery_mid,0.95,0,0,NE,0 diff --git a/test/TDR/clusters_true.jld2 b/test/TDR/clusters_true.jld2 deleted file mode 100644 index 577756f73d6d67eb822c86808e0c61d29212848b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50060 zcmeFZ2UHc$vNyVk3W8uHC;}!>qKGJ>76=Fef+R&n0SO8s*+?*gsED8_f+!#;Nkx>T zfCZ9s&S{h52KL_MAaA^X&$-|G-nZ6w&$;)$v%dH2wKg>~-BVptRQL4!x~kMw4(*aS zYvyceA*6B1*4j)+#mvP_=#ahBMKc$1q05#|&eryJLei2uBzKU6ME`2CLsDLHr;wbi z#93<>AuZKyq(9~VSPk4)S2@JV&d<)cbSa6%_}61B{w_Y*f1QtH{za$m)+OnvtLQP3 z?lB!8DasMeg@_tEvx}A_lKct=5;t)sP5c;$ABnV-7`%Qynj2tVs8I$7li(H!NuOi%=Xt!B+(s0K!6^_vz`VE+B~U#xzy{2O}~ z;yB>jXZQ!${X#T*;WuKlbpJ0YE}XEmW?0)P6;6iB47-w(*Nn#AzGGNGje#KX*x z@wx-Y9`~rhZ~H%d*}&F^+V5<&=VL~ZBxZW{ zBL@vN_I;Q^20DI^suS}WrlHpNu%1sODkfKoWj;L8i+ammMeQn!K+n9F67^2CkR7A3 zhcem(Q3?aMKR#;#(cWd7Y7|?6q9kn^SJw=A>C>(!X!X#ncU;4%wgv=SA99|Tt$?1P z9EM|`OTcZxI19acX}*I6P`N>B!y%?ss)8E9;Aa z+nJqx#kWfQo@sM(W?LT$$lch=AUTGM%I2l!5j3ox(Ri7XMMuN5n32s@bWHBAi(f}P z*ST-fLEE?Wqxzu-YD?O`U}XPfq~lB#ypmqKOt!opB2IpEfr^dD-Qg zQBw`@mMh0Y!m}0@Sa;Vr-l~SZmQ_u6SC+#jD=xW8onmOZ^VE_~u7>N!R@ZU3cfrHy z_4E|)J}8!>aWP%%har>cRgMQbf%RH_LQqu!_>CqiM+H}7wvJe;?ec!?H?h&IjvhlT zsSm0Vl5`Xi)!CVMdK}lV2=uJFG>+Uw^&E`3G}PfJF(!W>z?~(6J#()!@#=RU8*NGj z2yk4=Yx1mz+x}Pgx>z^Crm#oat43R(PA#`5{Y48{&L57ucBc_6I&OF$OREQp@|_=F z{i>mT$ZH^0z6zetoO!cws{w9G@?^-2cSE2JpDf9%9|G?3g~*HdL;9Csit)})Xvk80 zT(_kNwrG-Smr|?H*#B}z!1q23nGKgTy)lNSD_b};meBF)wyOIu`uv zJHXtzXSr2m7YKhhWNbXv1(gT9y4I|1frjOuw{1UzAj+Tf^VXGG_fYM}CmL)rMo zJQyoJq1m66ghsE6&!m+!W5@yjcNTF2_zk&Qj+;@jj_ZN0E6+G8Wh!0ye0Ks*wtrqV zx_%OGZq%PM`!Io3zsH5uvIqTc=3__}4&u9&-H#i(-6LcLThWO1N2`xq2~skcWRz4g zuxHLm`5O0EJd~hpPORxSn@( z7^}M_sPu*gV`c{P297jnD5xB~^PLV-#tHeWbjN{Pb0Xs0dMX^|oH>5DXcT_t+Ejh{ zI0%!vO@^On&EO-tJ$Pq*Jyf_QUrF8701~B}IrpD!0@4RP(du<%h)t{E`Shp_PVj%^ z`>~}12J2g%g+1?rmiQa~vQb?y*_>L?=-&&gS2#DC&ox7zW?E#6N*9P+=s5O}vlFVe z+Q02uXop19niuwJ2j1->7OMwZ;GnYC!OgNwFrE?9)~ZQ{F&0k#6yp6YXO)(lbg2Ux zRi8GdKO;ldo`Hc<&ITx@26%1VQx6UNqzk9I$#9&sl5$L^1AO8-Qu5w(L*=qQ&n>k> z5bKbvZ6`Md@;YbgINYevyLUEsGKdDf-9d}@ z)HtiXFO3#~c#ou$kW~xlE1R;qI@ZFXvdBI2lvbqlRsh%CMS$)tk)` zUr=PqUCG3+07Wkx^z*1|K>;2zFK_pfz{#?COwFF3A|r5^UG8r9WA z-e@|7psC_O&~=&1$T(MeeJuMMn6?{mujMTT$yM_=a?R_ZXZ*k`mmQ5z*Hd23#@Ge* zA-5i6`*%Y8I!WFVs~#{t>X0+YMuxpUCzX@xTEXYbQDqozfsRa}*!qHcNcW*J6dq}X z^$eSH6Lr<(;JrM!l)9fkd~Fqw`E5UPw`akk8&`z^YYql)34XU^ zYZ;1k_a;r|m1Bx-z~_qb3RGu5Zxh($hneb$;&vx(@a95p!!-LP&^md2B3a@KL@!q_ z@I9FT^D?6bVmWUi*6r}uQunV?0$5%Jh8iZMSl0 zQ?DrSTUQBU2eve}GvbJ>7*gd3R^6py#j>yHejt(b4jdk6_*H_Ykb>fIZ z>e>(RGRC(1z{5P)!5ixTGp`b=E%~l57M8-i)Y)iGn-Vw@|M2uh_gc^rUet3;F9DjT zw7Q;EGn`40h|pVB2aMh)9@{Tef+O#_KEv5+kl`FVx-X*!j`hE9mQk#NSPmVjT((^3 z)hqbU-258Tj+G0)bj`xqBL_=d`f8BP>EiQa%fF&l?MXZPv^OZdxT2lW?lp#K1sIBL zjYrD{z4~PjzQWaE-@8oxc(TX*NP9p9Jmo9d zaay<AootUHav8NfJp>Z!CIqvI(Q&`iN~CtdbcOb%PkphXWWDSASV{ zU?!WSDB^D=yhU~jx->RBUs~D)P7b=Fu4OI%aXJ1`xqr83=I7xUjPApl8@hX>pEu*R z?O%u5Rmsp-c}u9XfR<+M^%O!;}OEuh^0WNIaLdh5M$NEqClon$=@FF#y|c&iD}zH#q;E{XPJ9oZa zv5NxR9&%bRKqc6?m(_T%cKo-?ukJ5Ld-AFeQx5P}P#(2lt)@&~7-JLMGhw)Gx@ioC zvi9)#^G$=iuX%@y>MTSi=4%Rj%)qh6Z;4xW%z!M<{^_3zQ*g{G)#PRMD5MAy`6w<%q1#uYi2-gC^Va*I1Vl2RvsJGM!+@s>B)o9bs&8of?3z5g5;JO%HfhEmT}9o(K-4QeMdN~%5oar=M#iR8_d z(~S@EyQ+@*4x-Drs?3HK3f?HZYoWJt6kBTLo$CxnF!X6%Z#=^gJ{V)-T36GJA8z|O zJk4vtjot^}?5oT{pQoyfo{R5cW%I$3i!pg{k-e>@_*w~sto;T}ZYAJ+&5d$wMLsBu z>u%Y3F&k<(ea&syR{&aT?E1r(b;7vrzRS;gMq!=NtA``+M&WEbXD}^i5ZpbFO?eWy zV%j0Q;$2T_phl9bRc`GkRIxaHI?JO4Z|I)bC?VO0ZYM4=bkm2B!#LnN?<56zO*B`v z5VWq&`t!K%Aa3AvGkVNJ#@nqaMTU=Kz;OOpepGfN_?=5*QWoljUBzpRB<6d-IF0#| z==FXe^9k3-==MWJlCT=%?p`>uPvOVuz;5Wx{rOcpl~~`XimxAg(FK%=@?ox+fRnfiL~|k9Eva!eAbTRNGldi zh!lz#^`p;j`YwD=!J?xXJa0FTA={nD?#FeJuH*4PGns!D_viCy*r>e_K?S2?M zvijl3X`KIT>Kv4Naa)bsYOUfxFvseH)F1^{F5EvmxXvW%urdY7BUN>D*I~ zF67e`clWv2j~@3Z=bXO};*Z9?cUD&qqR3>U(5m`gT)XXslH&GSoC~N~J`vpjqmBZf zQlkgp(Al1=+pLB_|6^Nl=*$oZcCugy>o5o%$(T|N8-$P5g~yyT2|MBx+XrQR5NUnz zbpNJa7|eenwQ;@|maeQFGB`2@9ujT2q-&EPp=Xp_&Op!+P4-#hd$3FOQ1kY)qcG|H zxtKMk6Gjdm|L7W)0G#Wc&ZWdOVBPVjU2~GXD4P|t;`XBkd^ z3`NUfl_Auqj9zxYxE*VHuhG9>EC8Oi*6In5E(q(ro6O173tehK`{md7fswchPtvnK zSh#oFr$4S2k^(TK<{?=V!Q5EEO`FaOr{Kl0}nyijy>lp-}SrVVe01dKI zR^Feir-F*lK{ml5(3UgG~BY zmPor?kcl0>>L-v7r9t|SR7P5%_L(AQyYn!}yqQ>Mo;(D@u0B+E(OytZ8F(8nLxxpN zH7=1mD}a7wx8x(yPk7}}^p1^5jd%qs9#D)K6#vjadiY}pf5yR|dEg(L2Uy>6&s%(; z!Tq#hOUw@FZ@IIrhN1g^H+Kr6%d=qf~ z{M!whsx+wG@zIhao(_7lv`vmYeK4P2#03^v+ahnzlK=A5a3LozG0gb`u!SGiK zR0z^N^0rgpnzL5X&fZ}d3tG1=esw1txbV4qYiJdmYknnti#Z>n&xP!ro(KUKSAB09 zXA0`^(_ii`EX8Q`#Sg1fD)7)HQq0qnFVVyC!o}>&X1HDa#@Jq}8@3wE3se^lLRgV= zTi7xxd~UxK?X{Y~jdv}(^hJUKXS0^2ecU<#y3Yq1F0)Jm<(9|6T`m)FfVt{NKsFWT zz8x1`%SnOSz{^JEY6Gy-W&Pv>ok1{&^6+SK7=zDhaa#ktdx`h;%7hiyhCtl;<54GG zGJM|u>iFh8)c}6Md^0Q3!B5EK`9wuI`1P2XT{Lb2@n>(v7fp%xeRWU}+m8-l8XV9S z_3eS@d+JsnbRGbXtyS}$gg#TN;=N7I(jiZ^I{1|9tgb1W1miQ@gWtl3;B~*i zqP6lcL=-3$4H?nEKK%N<%J~V9dGeuP{qspcStl2BlW~aUm0P zdzZp72GSW_N$2gyK=keTRoz@8;MsWfy-~mjbk{D|9U#^@Zg1+WGpD;@q~p`=g&Hz! zI@nl}n%o1&SNQz!j;n&IvD=2ztQDYDWE9P8R}QR#QDK|;%V1K9jOHp85We3akSd!E zllK?CrBQ03{xaL>HzP7svnDD$E@_9F8wOv`#Wn$3r>~Xm&lVud_nh?0j0S_x)0XLX z>fpqk8NP}8mEfiM<8rZYJ7izE+(serJJb02YYhoSa3!LBOnfW>+?H92vh5GUHk}vm zHaz``!^X0jx114|*6Xrt8&1F@M^qSm?eY+YBZ{RgiT(W`8NZ>IHF)P1$*C%>2G4G} zAlxmQk4Fa|`t^*I0f3oEI*@`zJ2DU^Q4x>X?WL)12vHvV-Vds6d8P}?uDR$Iq z!a>8n_^nSm@I%@C!pEOGka;O>QKqyMH=n98n>*75^NqYR4rOgnL1UWwYkwG+3jdAIn28eBB-XL0A2QPvv z-dtj-1D!`7FTMzD0Jez;w+Y=&$hmCTed=-_BrXWwax5Bv&t@!lPbW|y<-#$$!|YT@ zwN_T8G>*Z86{MlE)B(6D?Q@IsN*|Por)%y{>W3>C6eX`Ey}-|?Wqk-bz^2f5eU5G& zI2i^-zPRuOycbTrVe!etWye`mYLAto=-~G8wx%+?8YiY6^C%C)%YflTPX)ehxywFl zTY*;A?%|pKKQQMOJ`GNc1-nX7K{mfOIMW$ddH!7&F#m{edp|J>&Ie!YvD!Wkb-wCd zMIJO*vtCd~)rkf{=Yu{xd@v4+LwbUgGh+~4Lb0ea8V7~n_}f2A`42lh_9171y0XS5 zM*=tT&1qQN<~aw)wNg~ArNO;b`Z3&kEih8t`at_z!@o@a$5vHgGW1-mG-$ZBsNW0wS~nX` zU7rA^@vNuzn`YsLdz%!4+Z>dy(Vji^W)^sV_PjWGVjPlA+o*R6b-{I6kGVD4E+0-dz>_&c?2N1bm&sq9q@qtAXv74{y66Gx zENEOFvU}~_L8!jkcT4{S9X1$jon2j3CemeFY%_%fWqmsE!vWpz3C6dGN>-Y?psPrby2K z+w!Lm=J*MGD)#7^hCQ8dLQ;~Rm0tBv%P&&hef!hZ4%C{3dAS_}7`2}IMlzd%OSGTg z*C-yvyDLWPaF&AM!ZQNzD7|POYxqRCrxF^Zk(9EOgNJzoBt1bI&HZlx?@{!u(RF%~up7ZZ6it6$E+TFa12dQ0aaV$-%%C!Kjv z;WJfx88HVwv3+(AN2bAI;^amz0uRbPd|}CG^#m|93*6a2qQcQQi@bw%ZE#lX8t=&F zBs|n3SY)-Q9d9bWzP4^9Bv!96ev4cH$BfNuO zL@yV8Y;9w=JZ*p-GQFwef&Flpa*ijFnF^V!!}eJUOu*C1j`bZwQ*f=wj^tW40}k`f z&r`n;^4*OQ%y}>mCYhp7gG1-xRfcfYxkvNR>v?dy``tO%%y?}+GIbhW7@arwv7Ur7 zY5gak#wOrpZ;;%wtyJLrp`M(kMF!`6mw&R=zr*%TIdZp1tr+Zo(6J?>7p-JnIIT;E z(68uX;B^AWk~+{@wjpE~4;NT|+au9~V`}m*g}Dncn^be)yHqX6J!IMyw5|^-nx~rxaF@HvT)YR52Kv=d%-!jQXkc;BmTid({f)AAZ zc1VyE1#j~nI+?Tx$Hw{c@2*<_fi2Mw$_r*eI{2zF3eE!0Ywx9Ab`x;TDTv4ac|Xj~ z2WC%u6hQvA3;Mev%P_yBc8%}}G9Ed>#9vY0gCauLH4nS=BTfGM;@HkU6cK(R%*EM` z&vQKN{2LwtmsyI;y-%HxeMx6J_T(5yo`21swQdsLF%~@TlAQx{Mdl+;Z9lUx2px7nq^cxk!tkW&XYm0 zH2%%bGHH@xJEzN+>b;9_ooT#GYsD;xlLLEV4voPL%V9_VT}?2+bb%+C`VK>H3A{Fp zuSF!~A6`~V#ytkX)grVm{B(?TLa(3bH`sWIml+f8|e(+wH-a+8hc7- zogNJYoqp&vdrw2fm*9plfuA7ERT>hd%%J$v`E1FZ5=O;ShJ)g3H!&-Ah}M$DvzQg@ z3pKx-Dq&XiIl9V=@_{TdKJUHgbD(;vsqgr+QBXRNoCv5SJ3i8_mb}ZN*vaaRr|214VMatPWiBQVR`Y} zI!5Ded@O#UXmq+07uRM6d{=7549r!rP>n%%mq?|j)-B+-Q*QTZu3~Xh}7eze_LOSzCiGT9lm6$8#`-zI2IWZXrs$AE|Y;YC--RnF8|` zeRz|98Ry3zqgW`yJjSa+#o$~y(U+G-@T*it*X~yoe4kYgrPKYWaiL0K#q&NKrs&o4|ziYgz3C&j* z6k3*4V!361a+UUHNS~6ZD}Gvtkhr^fM(z`VhgHY4xc@*)#p5(Hmn1BYw4XeFvlxr) zhgQ*FH(`78%2m{sDom*9b**%&!zQmd&3nGhC~@m9$BWrvWRiJCb0iI81pDr~=!#)9 zzQfPb?A43ul!`6yjJi>Hv*^>x6`d&6#bH$DScluI8jjDU7ZLttWyYU13Xmh(ct+5& z5+|n(mB!YVW2CapM`iU&H1BHpvg%S z5etD^-qNguQ%S`2mU5>1I^=M$(yyuif74lE!mWteM#84^QwO_3p zP=2A7rD;iCb?G2}t(zKw_1 zx)lLyz{Iq;5h_=qo(Ts70l6iv&x;udsWxJ-cpWHy+)` zcxz>SA9nR=L={}>L8w%{%hKA773((sH2K+u*Y+hd-1^>&8@c+dH{2lXD3I#qVcUrV zj4ee%(_}o#z!JW~wjH0EQtC@iwWH$P+&jg~m3XLDcrKGu`At7a@u#BUx?E~=4A zF!tHeKDV}axcAhLa}FN<5PsB=MXDwVa>N}^8h(8b%dei>ptLFn1y0;czG0P(+}tB6 zz77N)o<4hUqOT6wnat1dJ9gu~QH6;Yg2NbaB8vU+$`Rz=JNZ5zM{%liD=Yg|3TnBJ z4+Zk{;UTEIsH4`2oK(KAU6S=k=JpK?(X2u%KGFpy>jF#;5V#+JsxSQ8;X_;-eBD2-W29SMkM#@J;);OXPiHc(>BqOmd=i759$(TRz_1edtW^B5@*)!9(5)bcU zp&VW)#?^|?KRBiTKtI|cs{ zfg3uBaeL*+=ASLtGBfdTmm|WB0|)1(4ErEoZ;#N06gptoxvEA2zmih0kJ2rkg{L)U z+NN`}a4v?;!tCT6JRMrEd+Y2pygKl5&m(s#tPKBRXkXa@nKY-m)AAX3i0xFMhr`LM3qImli@*HY3o!hc!AatOeXO z*!7>P<>8L~_oKrTJF&IbEotfJzW*}$*=y$HxNW-8eK_)i^OknBukg1mIR6$HC*Xsz zQZJC(KJAbJIyh<{>g17{1^Z20gX@>f!KO`e2Szr}K~%t|(~B2oVJug~u1t6e#B9@U zF-VU=l)=Pdahnz>U5qf?ADfGTMgHh5wAv*CrU$Te$R#M?S zZ1*d$ZX&RmTp7aca=!P!O#ijt z*FA9+>cZ2x%~7B3x8te_fn~SKQ^C5G)G0RE3#K+#hF&t#L3emGxHEJbq)D2uQ~PE> zV)M1RNZDCn8wlCcL7cbqMa8)voP-;9cJS@99s$AdQrlf?8X#UXIhRML45y7W(sEvP zBY$9XYwzfPo%|igPA&DY>p_EhH&GMD4y^d@^6EiMIPAx_i{xe^ekCMfeS;|#K2`K8 z4GK*NnP_mRFW!v_n`du3(Ej)GKTvH-vAHsaN*mZ$3aHXi zAXb8FTg*6?@(g;%=8WV0*eZ?QJ{m3+3rXRs8pH{MrmMS4$}oC|+)j4aEXdtx^kDyz zDmdD3f_aybj51Giajhxh@lF2Wr9~& zchy3RK&6vXbU%c9ZXN2|P6Z}a#dOh<5jc0pfNev4KUg;n$6e{`fEP35mBO86V12KR zW?7w&bGMW(2NLTRLk69tUw4h7$2+NFw@Mlg@GS;GjF_srP5cYw=jx9XtT7YfQGEzY&8vqG<^HybEFY@49DAgDJ!=2;u>18&1;P)%vy1KwSaUj^mumN z*52O&r0=`V+`ZZk{#>7zv)(7e`&H^rN+x93`R$C|S+h1+HI$eIlvc2ey_+B9MZ_E3 zx7b7z=>U3(4*z*wVxK%=aM|YW3AmB*UapStSO03W%wU589bClYHJ*Eo!qoB0pFCf6 z!HVp(YE{Rtka{#UHd(6?-TaMX_8jQLzze+tOkamFiEl|+t->hYs(C4^nmLLuH;m_e zEhqf?vh|n9vyjoX;apsTZzePcy}5RWL$ZWO^+T$37ae z=35zGHxUoD>PLonCv5tb|73wqhET!zeJ{D&fj%kmHT+Ho6x_IbI9hZJx-C~Iah#ik zjtxU%g zgR5*k*q){gB2|Oy+Ur9Ud^*9?an6x~Jc2&m>SY5cW|}|a8Qp^PCS&HJZTV3Bf#tlW zV+U-TtlKh^+YO|o|t5s*KZtKa^$515~n zFg(0T{GTmJVbNXzpxF8Fm5*}^4rxMay7B;a4C~LD<&7f8Wsfh$cd58A$02rnD-HP+ z*q@q)QL#|(e*ZQX!jIB(%k92vJ(wu|+;fjin%bH#K#-sx53@RJ9YCPZH2akffSZtI!;M7gmfkE#|(D6EaIe1Ab#yBmGTsTC=7dq19 zz0JhDvUzfQea;x(d2>Um=Q<59Mz2nq+($?IF4wO)WE##~FzwwhPDR`*5q&0o2ouWwt!*^;TTi=dC_|xj4XJh?v z%KFWv&EYNJ@U82#t>R6*!uY*PHmVix>YtCqPjvW0|LEb59sC&wf98RIY#uO=k~TTF zv~$4Nad@*%XV%aA)U(DAk#Me5B7` zeC%!)jz*NaS`+aN4UKmfU#GMoIWscEz>UCzu6a7daJ8U#b4|vr<7Fsol6k{Astq-@ zD%3YKH{zqqA&d8YtI#n2N@(S>HX^T&-E#@6T6`*MQL}!y3cq&sFL>UlKvT}nQn3Gy zaTOap_K4rdXTW~Hu=5)>@47K-aU>trXlh?rURU5#Zovg|Nn8m6CYt_Six8k@1- zXSiu8x962#GA5{2schq}BH{??c}X#KsJVAYYX8VunRc%I>L8VE|W zCP;I(!Ygrd*kkokNKy`a@^*j%!^)Y~%R-01y~v2pS}+VRgjJopi8!UJeOen&+#7^O z4NVap&Ot~o71W$~&<{Jw+=YW|e@Py7_JCN;cwx@=c09Sdpi2&_$zC=kg zI1Wp^>)BQdQ>^N`x2{x!^7i;%3)UY%_QQ$n#8yqxl@76bV`o@RRjpmIeh39t|#JxX4RF)`rytd6Fr@MLlD;inV45av@frBg8swdXsx`4E1-O9UdbqYjS2sg2J|>PVd+p~>PS{HPgPS>F?$jSUbw zw(PdAUl%BMyweb}X@DhS?eJ<@V;A344?N?PsZxp^g5B@#k3I<|?!TT|!ETWU zqxM%8D=G!)xrpWi6?x# zt1UWlQ~1Vn^RC^xji*aOl4WW@x z-2Bb70Tkk+U(C{J$BfQzZOds*Xd}#>a!rVglf1c?SrRHSDS~-y@V-BCdoSS?CgRDx zBD#0CGv&4&v_7@K=)5YU~t zWAa9GATz!~!Tv`LWcIB}_3`S3HMJjHhUNOfREuHy4iR7VpY@-ty;)Wi-x81auZKjj z%@XtPZ~r$6!)JjtrQ@)3)hDWw-ULX~i?+porou7-cDC%!A=n}i^lep9JaVfFrfoXi z`%n8{{b%L>TF@d9vh+JTU}d0!dpG3Aa~_}-QsJV_ZGYN!;`{G)uK0o-9d4XtGr1c@ zgXxMMS#|{qe6Vy`-}bH=3N9*~cTep3m&w0RudR8%)MxZ`_xVJZB;xNfeun;A?FY_nor2QsSrS_^CSi+Ajah8-Fznt-+rE*AgHZNx z;u8@nhlY2@mZ*R3{+G#LEWuYbQ8XZ>kdDvcEHVm2h;*rxy`4GCBav?$U zUpIb9yypho8}m@)z(xK}t5z@`U>u_j4MVQ7_w@3Iqd+x-nQ_YzNNgC^DE&MJ4A#r8 z_ziXgSJ~Uy$uH@^SMZAcB=2=2NK4j>m+vY;iT&Y4s}ys9(ZF;U>&gmH_fs%B+*Jhwcf1bg zhE+p;bYl;jbrt+L^uCMCUJloOrFxa-i$Ow5Gt04&dUA5?WC| z3Kz{@GQ{_fz$({+*O`d-OhCAt@P&^ZV8<&v=`=;OXHIq?g;k@Qfk6ER`#yYs=3V^; zBCp|IHTsHIT~yr3y)VYd5(@;%{d~g4H0$1Vq>0lhxi6(dZPuJ}Wg1AGj zedbj)uyRdScf5K7_)C~LIh56dPKm~lN>UwYUSJ$IeOUucuiku5jjVul{r1Md;$j$6 zZ=hN*=Yfm5VpT0m0VGrzG5g6A`JU9@`SkG<{@)jp4yu9ViB4?4+suA(z8`}Reehi8ID%o-;Vao$smPY}O#g=m z6~D3>xV{x0!5@Yk4~~g-;=yk#wuBr?2i~Q=Bh&YqA#w1GQ&wgN^z*CC1}*P~;R*KV z33)xRJm9K`zEmH4bj>uA+tvq1?U(6)?(G9dhRYIZ5BtHJBwuBxJq-H~esh+1NrR6Y zJuc<1or0wHWci}pNtmEXb9&^{AU!tZ=k>iK(AMcaTcFqmBA3(EBtOTa!tvdA_WW$e zTMB*K$_EFKy{GX(9TB%|l2*Rj|Hc?f#nTgRyN#im$!64*qo8ysT{~}{$nUcvrE61Q z60Gksc)(5MS@niu*1-BMa19VJ=eFwsy8(N=&)f$(TMG*p_4~l5Rj(o-lgLl=HPW7Q zcMo{Gu{VAq;zb6xswK!&bpz#^{9}8&5%3T=66&KzhxavISvreUpe%kHR3PHwzo*i8 zHm3H%IX__`%GoOT^u&EuB&Zm9U$?3;-|Ru_E8G)X_mAL;X&q<($5brYt0}0~LBsWa zI@NKLw7>s9zN+`emlFOXJXhD}*}RWJW>fRw*R>T;bjU1ziC)d$^LQ3qc~#_nx*D?8 z{71IvRDhkKbAeA@4yfdf6Fh<9Yjaj=@Y3;X$?BMgdLy{xN#FaR z`EJxa;az}G70fbHi4R3N542yX$4P!;(+Tlb9LYA_ zbWW9wS2an-ee!Mi(Pe^H?K9y`8d4|e__p%z<6LWCg!)cD4x~F9di8w2qek`IMXj~< z*id$)dcRK(N^NsGmdrnfZF(w>8lvNvI7aiWs+`2-ZIf?wwWrb4Z9n<^4sv@pOrgn@o}>szA}{f8`?}z1wY=ri!FO(DMCA@Hi-l#GUc`rjiNhH<~i%#AV|IywhUFJVe4{zL!h;g22s83%vn zfq!rwpq~{G+P}OXLR8454<+*~k88yhTq|Pm zqxh=FbqdcRf&Yx|bD3dyCK`C#;{7;yUg-^b98v{ubXYPB4wLcc>Gtz;_5EmcgX?&} zMFO{ExE%2@j*iWRoSgKFM1Jk~ad`(FI__3se!=*Tj$5eLUp^!9=6_C>TBwhwW9bn} z(s3ex`?AiPGIlw1lr7|;IOo!l{$Zz(2SGnS9apX^ren}@nRC1;bi95zJ=B@V^FF-f zL}|Sq4PR^DvKA!v`HltjPn;E@6YJcH#54^W(zXTZmJZQzM)!K-*FmD+)Q||Heme5a zaO|rbAovOF+RshY7yBxoPVJ#%#wm^Ix6O3S@3=2~Et!rxqAXJ0exqamc%0V52Xw>; zyIZ4ybo?R}J(p`i$M>wIKB4tAthpo9m_p!9-y)QLEbbaY->ZDDOG~?O2yA*repF(e zP*zfGPzmm|=(l{{M7j12(Vq>Om%dl z5%KVvhTEy5pw8^DB$tR|-`+Y?QnG0jD8cF; z*Pa=OQhggxK_>FXb_N=5PMQK;>Jrg?wse??H&uTAY7)+i`v^?!qr+T&&#kzIY1nd) zf4RQ!G-PU9MmArbhQ5lPsM$j^uyV`Fa;=a#pw;&mTvnKd1=(lQ)X%ffV)XNyV9+$! zhDKT~q|QNLQ>Yc^>?|BNr6g>(m<5~hd$g+B8IW9|d|bDG3gom`FFh_Z4b!g^Y8U0F z!1XTm#>9yRIK1VFlmx>#FiCNyo(&@6+)nt9kT*}lo%Z#1Y3s*fP1RH?-^(5d)s+3T zNFE0DLf5K~&uYOX^kWVsqydKQlGh15O@biW4*neVcBse?dES>Z0MCvF>|g$13`BSi zAD9)M1gi~$C%;tAz@pKhwwS^!R9^ek&P^rqtCeZ@d@Ln{&T=0<2is;OsY}@CNR6QV z5p|O6Ln@xI3!GthqM=`j7~@-gDlS=fvuiJrSLs8!N4ioB6}`^& zreR;3*)fB=gg?NG6H=LtV>o+iN`J#1DmH2bS`0W)|LO1klFKE_1Bv-lZOI_A_`wJdB6AEBgCG&F!nHor2-P6aL)(A)bulC*q8mqVM8@?z~QAA3EG@(MM zB;mM7qezNEBr>EDl`>U^L^DZb%B%sIr*N3(WS)nM%RJ8)m!Wq*_rLD-z4yEB@4lbs z{lCw*-u3vH+F;bsG=BxZ@B7~^|G#?w@A98~ zdH>+j5Cz^T>~r=so`CtF`}cQn%|h35(V^)sI&6Otlx{OU18cwT*jc}Q7BUiUlRj&A{;?W$bxFBBM&y zEk-T|@>8|~YJM7tJh4&NU2_+StRB@HGl~%)s~USPR}2W38s?BW(*r7I3r2qm>@1*Hn*S9Un9RN zm9R(e?Qs3T&C><>_4%pN>l**t`+t<1Xr#@#X5^GF7RZTihl>lJxcOKop!%zB_!@IM z97}&Q{n&wsJI)`JJJ?9Xi?8?32v(Sfi-y~y2ZW|!bTIkLN`WqriCwwpHmUZ%tpDp2 zHJzEIGbrw2H1OP-j#YsPa}9xW$WiTlj8F4RK^#``(b!`{+&q9^GVWmIU zhoKqU_c-nY_wnw2T}jn7Zg|)H!-^a2t~i}(l?30S(ca~yW{*o&nYe>r78OPj1 zg7fM-Xjtbcup`fF7S|Zar!1?aqf7VaK+iRExG-3}dxiTfdXs2spExJ6?P^N;4+eZ{;fb=fWX7@Q!CwW*QWTZJLXuXTsIfwm(A#(jagNGqcpi zZ@|?&a{Z(GS4cHC9*~U+1kRy?>4efaIQnykU*x_*2)oG4LRnV}Ir&EEytj#c`E32z z{0;)|n`dr^CM_RzqXnAZKkmZYRfUFc^T+VeVChdIvuT{vEwgtSnIZ6F<4p|@&@uIz z++@#fI zD8H&Hy&4A>Pc#%ans|V=WmlMtl^487`7+JD<|*)P3{Q-|qzNCFeKsksPDR!aaVM70 z{E$8nGcs`|8M0`>^&cKo!O6=%r3>q-AimM{uEXv^V2^a!c1|M)$82L)yG&D2MNa3% z^Q~i8H^de6n0*>;9`#&WOq{_b)60cp*3xln(A`@Tx^z5Mt2EFwID_-!U*;!>?;FER zj_X{EojX#R&ured!wi1gwb{A%N?T==0rh-u?jDu`SncJI zXmT$WdUq~1ji(mi?I%ygGVXUEW%r}FtzSm)JpHR>MCBwJn#AH@G!2a%l7)FCXHlN9 z;f`DVEE;yvc~_Xv;unqdzQ7kW+&;^?M#+2v{i6bwR}~H7=QWp~BxrV^`}G3tDBC&| ze?AS}nU%TJkV7#LnE0;t&T2|O6#rd>i zsNAl&%3IaQDD1)S?~{a$`>t>lT4tiGUTMd&)5R!$`s&JzgH3pEv!QA4)?O5`w^5vk zA?&t0NH%wLrcvYQll$VIW^vJo^O?Z8IlTRqr1qL={_o>@?4pKL$tyaJmz}(|y_kk` zdk4zc9!(&3R?f**wn1Eb(ra1Du1?IbJ~}LWhk~_lC#9VfTaa~aK_k_q86`n%?Xvr= zsCT*Oj;Ig?`=|DWKB6?&cy&pfeeE#A6c><>f8Y-#=M*ot3)x-ZU`vG^H#6U$uKmH~E zs)zqdKX4Ne4H4ej0Y?IwDUaovAl*nzoBe1llnCV)WpGu1hvkXTrT*n0DH!W68d41> zzC~=z3d#pk`91~VW`K}@AIh1giJ;Q*P;YP-t z-SBain^lCstyHPIAt$duf$Sv5QOymNkmFR!?QpmiMr1#Uk2_ z$u|h_HZN*(`!MVr6iA;Y{1zD#Pnyc`^??Fqqgd|_f){f@=;gNHewfL;zA(OZ6eQS$ zHrbYqg4YrLGrmIOaJ+wmlho;PU^0F0QD!v?OdtL2`D90-ZmId+6QUz9+?24H>Gl8! z>+NQE_q7kEO}PqYN+`fTyx+`lOBo#NO8(Bnor~7V9?rGzEgy!N51YX%1c9$Gb8U?cp}lVU$U)K z8v|uZ z{HcUL?Xqx(%~{vF(L1i0!{3aGn;A1x9rCDnGR4C3Zetg!@A779nd(CBu0_q~+lctY zdtqHP(JVYq)6o}QQ;D&Y5`{97b-2{w-ARrm-_eDhf2z(b36I^-Ph}$3b*_7so?HDS z9FHZ1c1G`Wqo?q>jr#dICDxyt`JH5`CUOHR;bcbm}J42L-3ZadLbcR2urkU7PiaPg9=qz zmonG{E8N_JtT)wz?FlNAASo7%eNG>|aDm_{%6OM+QD0Bs4JOS!Sl0nuawT6b+x39g zNJ+YBN-O+OArA{0_k$vnyfDwX0nl+A@LhAU7lg$V8ndX~aL3jx@AQElP|{abaS!YP zwScX`rp6R_=C^f&I$^K0(_2T5kLiLNkqs|PV>&^0_+dfs(hgX$qu0>)X9v)yyKOl? z5O$%>6T7$G?S!XC_HNG=>VmX@_c5Xdz0kpX)9gZOKP(Ne$nW(TglC0ZO}Atzg#Thz zzW3KIf=|O}Yh+*-q$c;JDyX-E=4sdSFRi-ZdiCaLM!inpTwkv>aJ~gT8|xdbXY2<0 zS?3Ev9R1K6Xfv*QjM%@g{&xSmSv$liY$KjK6O8)3RK!-dLPz$ zqi&qQ?1vXQcrPT});1^;Gq1hi5qV^Zc6#a(bin{@pAgC^EEI3oON&$fmkaNkpoPR65fN`OsEM6D0{`|R1o8Yr-C%Nd&8G76YDhFw^%-T^ni z=+(`zbwd5uJrN?K-LOcGxA35LfI{ozOYtjufF%H=72VrG{?pgwBm)ZACN6ddCsSZ* z>)zt;J`JMs-JM2*|3iay3TixP8p2Cl}hWwon-E3^u~d@OUuXM-?d*o z8}z*Q$fgTb9xkNZ8tlY0+HkJ_*L>8GGJi8Z&;Z9`lw(ew9D=6I6S00o94edhn5)W2ycU`k=LT^$n@g5GqnO}(vzAHseG)%>N{%`mkmZm|O&FHe`$ zCUElpUA_L@>kdBN)|oEei(9V04>l0)M2WzFI5(zBG*T;ce;M8k76)F-bFlY=)`sic z?ecjxi3#{}-xPNl%i@KJDo$)=^vM*(Kj@KgLJ3s77p z_pESd7p9EzWSH~x{^|PveoxcwsrUF22s{?%f_^R2TD<$!v%!2*3-BsdrpM$C!X1Oj zV*0Uh*h$g2r}bh2JlZ1O-g-mel}c_~XUjPT57nAomJ1C+?1?j)qyv>O={fp^<4rXN zPbjz5?CwTWi|Z3Fw)~&dpDE|oDZbVoWWG@q$n-Q7=TpyHc-D7Aaq)bnz;Xibuy5gH zhvq!NpCA&gbz_0R8=xOaHd}zgqbJ0t9?iq65CK}zb{gDyaQ;9}$^b}a2?mN-MFLGX zHF2`41J9Hsk3F3J^Zjv8KDxTW?RX~&n1~-ysO-euO5MykCWXi&mi6qmWit#`^{XB_ zO8kD)odXRM27py)u&!}QKkO4~lXCMNguc?@3geVvcxxBGe^o;dEUIzDaa?MGZRanu zuJl3NYT+czH{5{}{_a}_)Bb$@SL6D2E@dhfcN=`|`QC{m&G!S}Z2X39v-cL(-0KBt znFPk{(P@ZP)97A!vIx$>ry}H@kjVEGoVJo;NaTmpdQX2SlE@iX>&7GX=md@-gJKU6 zKVH~rp?18)9`5>W+<1Q*6%TvSY2yC}{Gp#7Iv4fIsT*f^7x*aHbz+Fjg!_dR1vq24 zK}GK^v94m&Y>fRr3eR6$l8(7R1IeP(at^aJ;Bnz>fUy}cx+hTZxs(pCqd4s!6LHF? zEw8`)n%M{B=PU1j_I`?aCv>%561WvOcg6110K=P!Rq6IskfNhk6MnoB zUhDY09BZfr!#JKNPqLdqOVUs?*rNs5Ln)%iJ6d4efYarSY8|+xa3u4HK7{v|1Ns+% zg8YY%O9ab|AkW-}&~Gm%k+-t@$Foy39Cv*6L^^5)Lq}P(DfAh9KT^E?tRoE%U6pt{ zxqlp!&bU0wB2lnQ+Iw7$EdrIDEV#bMWD?=}vS$0#%L#s(Gfod*)j{np`6-bQ0%zW6 zDUH>!8P?s`riw0U1@f8+ersakU3_ABhMap7q{g`&esGEc($QpP$1PNNqO!75&43DD z>%wgtku$rFwSs3kYZ~XB9O!?r zw05mr9a{0+{rYJ203Ps9^9m;X2F6A+csEo`p<4v|Qit0#lnYR9_%T95n_Ayf{*lw@ zBW@yW-!O)^_b+6$C{b{g+%0H45{nzDJR%%KJp9?81Eub#D}aFjb>V(r|Mz+}nc(1G znb8DKMrHXFIGTa(RWG*rWdkUP`P}-jq8>bwhJq9p8o^rab%;OVKfS?w4TDZ3F`wCu z9cftC49CeACWGj8pyT14S>KpI@S=TkjudJ{5w%#8AeBK>ofoX9XiZ?>#X_?-)oJY9 zxpq%Q9}T&;#$@wdp25qg)9{8-1;#%m@D;fC9@;6}fev~`uY!!SP+^yUg%N8U z%wLY;vwT$oPA7N_ZAPo%{Ijy9OvJj_PBT)nj<+6GeJYYEU)cb&cYm;+ldpp))rbD` z#6JFQb_qd?g*td0vg70-ay?9{!j+ov} z!{sJ3nG&lIm&I$fPrS*)&tua1=va(>$CUS}HWVY1&;I5lo($x9v02@Fw+rsJnB4WD z*aa>mWF(#6?T)Ly4N=)TV$j)dH?yg4Ir^Ua>baAc$5W>?J8Xp*)G(o2Qz?jZ5_T?NE$m>crlPame zQKbf}Jic-iU<)=}BqI^0cKCG8X%FzP(HRY?iG$_WirYh2;^0~W)9f{gxA5sIkMPfu zA2@pK@LHGCU8vgD9Q=u}pOampgG0V`{a-8VIu%qEZ+7GVt@5sJegCJUefXFBs~-L< z{owNDyq!%Sdhsv$|4lvY=FM30{(Ur>2burK>H2`v2NJ{UoAS|fvwo)K6T;q>(j2>% ztqf&_^QSK<7h%Mzv<@lO8f1MWB}d=Xj$(ZM8+Oc5ur=t(_?e=5lxA4hQ}Un|y8~xw zs-YEFx>-f)Ky@DBM@5S$>-IwjSuTrrCi(D~qH@Raa~iytx?YjW~od7~l$2^xfML_uQ#_d0OT%g0kr`+^@9BwSr&q^z7 zz#j^nt_{Z;amBSd%att@9N&EJn+y>r@v+&fXFq!tzOfp4$J9^oGju=d;%Uo89(JaQ z&$-#i^h|3t!>Jt9J>-AJ^+P4fzw8d*EZT~%H3fS2dHuja20k$slWM%tNM>%@Q-{9a ze@?YQK1#F{<_0=8qL}vZ{GqI79Q3igCtA{mD(Oc%b;xZP_)UMA+S4X%I~G=`(?h{y zK_Xa^-;N$PlIV5!Z z&@=Mrv3(-FNI4_`{_6?;QBvF%^LImdRbKeqhu~i9DifNVJ=llVQicjSIDoIsQ~2(C z4PyVAnLKk!2MPsf@UmLBVcFI=mQj5wN?g$!zh~WuC*KxTHhgJDJ4c%z(t4#RN4^tr zWg!*6Iix;JR7}9Y)xPE}g88^bNyj3OwHXVxwyLj7sKI-2LbdNC8}ac>!pqcG?P${a zzW?4=D*9->J8Kctg}1(WI#?xip@H7?;>(yGoK2i|UL^Edy>HAIM@!DFe8ILZUDa^`lJ%bH>#7Uc7yE-=iY!E>~zeE zYp@$HKN?HE#ovjHk*BT(v{KPu{dV7sK|eAwWxYBPID#?lBi4QjV_30UGeu)!48@1u z#f>i;NAseyo-4{m@e5C?)U&Y>c-F_Y)AJWQ=u8CbIw9)?xGvEDH~2Fc6_-AeVQ;u%_dp`PGEf~}TM&cyo*uH9jS0n`$+JpoXHw9=&0fA$m*6XX z6%sLd^Al=Zw!RiMn2!Crd+%~}6yc_pj^_^!wZHgVJx;!?h~r(fJD#tTW_tdZ4q_;@lr>BYHjyzn-KA>b4hQ`RXB zZg-;Kk;sF(uc#fU8aEdrRnmcv!hCK&Cb#2kWqOJ$F9q9*o67h%wV+krg`o5Mt5JT+ zWH|a%2|7f+cocrT0N0U>W!8-)VXNb+WfSa(Bdt}Y1j8~VWp35D|0gP z7;iX_er5l*ozA8wLvUGkCpvJ{R`eYsc&y?or39ZRLVz$!LBdQw$cgeD4tPHe&Zc+h zWo2^^WO98u*Mm7QO070!Cj9uaipSpFx28km#Cj{<_0!N}z|S}rJ^-uhWbHdViXeem zHFtGY1Af)s%=+q87n)3LXBgS^=h@-xopNojG<9Pfw*)6Oj#%ekxB9s>Efs0p<>!Y9 zaEL%*uW!j-qtI=2$V)qNl8Cp?`mA?t3POC+&)U8q{K6Brj_Q7$grZyyr(pI`sC=8m zZ(>Y^zylA3`aA*%zLo3kGX>4K>v?yd_DKTgS2~3`jF`WE+b#chebF5It^m} zF14p7VOk?`&?qP3T(zYUH~F3xJLlest2a&Y7yAEs zaq&Fn5u`_2o!GsyJ>e!X+TZ#;J}+H=7i~s!9cFj+0ms>RVMn(q$h^LK?b*dSuvHjs zPrN!0p`n@e>fH12)7nMMY0Vsn4^OY$_IVm6w_egu?HvT0k21?vLJ6d4?g=5B+Hh`# zwvJIc6*Fgh_nNW(d3JP$9qp#o1dcW%gLoosp&iSVZctD1M59pBsHuE=CmgcATi!;W z0IR%%aSzCJXfTZuKf7rTwC02790?rOH5|{$aU-)Jrsfxqggu=eCeD*i@D7&9(UTst zAG5qIR6azlo}+Y=+A=QxaB#n6SDvY1Du_%Gr-^aF=D}X z0-g*%Q?-B91FOHgoZPeh3pk`EtW&>5@YfB+DL9_&#QE2)f#)6my#7Ng)_Nm!wgbga zJ?)8MZ^v)P@=7e%*<#=sk(mIE9?&X{Ab(#^@EQr|(zV#=5E^;3eZAT&v~Q&N33d{= ztL{$9=5Yjn{r2c}Vo#?4*3$WvU;r{zb$?o^=0e__#T}kKjX1yv9wV_-+$rNpid^{D z^-u4bnb9bl!tb1+{YFhRe0{(E2SdUPuG5IE*N&XQ!7-LnzRGFz+8Dl~vySj{dfT{k zS4lJebklhA$Pge(A<8O)fE2@fXEx+&f*h4FR1wbYq>0+;#^{LLblR++`XDp-@vNIeo?52VX?Lm%jBFO$Zb8BZZuU659BLr8=Xrb*>b(C9cM9^xbC@BP?ZhR^-iw}6;mKT#fpjT zLj)GMM^Louu>?eGCWVnHlEQ+J3NN z+Fl@)IS~0G4xUk!O2l>50%DSKvG~r?$*BFwYdEsxe3WuS8f1U%^mPQ%ar+Ex2sjN!xMiAz1hD5&WnCwSN`6Q?$2e|CG}hEioKj@29uf*8^& zSDCYMkof+BpH4~wD7%gC(~*q;`LGRFM`XjGif3+K8rT~# zimojRYa11((Ep9g2gYwS{Ag5AAwl@7s;E8F_#rflFZWe53I!AXhKdHV;s)b*{zun% z=`$)uCMD{yw-@2sGc}z#lu#s--$sjsgg~->OCCu$3HGI#2iKG1L60;{?(_AAk~)Q! z)cuagTQDhQZt>1ju$DC$R z&_*D5!}JV_H26oYS0ZpM4i<7SZlA_9PA{*>bwnJG*c+yRPXicpl6zzzoZul)SJ%YCpBoL`b_01mBc(Vm5T_Zc~R<&cL+RvMU1ML{)T5$+1 zDHz>qCljmHh}5+-szqlNMt_{&Wvx?!VGO$j+RgHbb*A5~utyE(chAWw@_rAxRYi$N z9vegJFZGY3a0ZzbnGX!n0~lOM~W4%1O31(u5F2! zI;BLzqc#)sHH06l`jfh&13w4RQci7Wv2hm$N_KdL1h=D9&;AP;SK5#s7kZQ1qYcOX z1@Iy9yBGHGX0XQnPITE*)NoS23-76{*3=!KBCmQzyWD3Aj-KR@@x0fFyLDAF)r$+U zDLy1RNh1p;c=gMp{m@-; zQeULIAKtCmU$*$94Lp}W-Dk-`@H^WJaB!a-0K+b}eO)&O!SZ}`HMist;U{Ai&hUN^ zE`AR551b!^hE11Of3}|j)myUrt{$8LWl7E>SI9F!=P$Z9YeRzyp~w@pfis}`J+ObD z?*u4axb>Xn={V@!Y6)v~nE<2HCC$a;G4T7I!zN)j3M4;yr`27ApXM{uYBu8gw0_(B zBo4JnIJQc%x;AwXr03^egXARiKj#XcBTc}$!sq$<(Ub7SsU<5VW(;KCOjb&TPC`n2 zo$#Y~WAI&N)FSofILO~T{*1qD1k^eFYbFT42qPmwi7K~IIP%FMpVfC5n6I8WU`rbY z7L$dx+gpcWSZ+90>M_APenDsC*2WItUX~sbcTQW_7^TSW5l*&BZ%||)%oTnW(@4eSjvZV?SIB;{=MyFtgn3@@%do&zo z*n8*g<2WFTUVBoh5({*#8m)A*ILHs}alJ}HI4VWq3}|l$XpbM~+20GSr%o2m6t)BV z57H7_X96$Xe)mXET?dS_jq)Dx>xHt5M{hU`b%2gyd0gk#Ua;D1a{QHZ2k-_Tk=G{t z5TvfLK3_T01}n`Ho=#gg0zb7)SNTyrTxJg*i{&Hu#a}3QJsv9uZ*`0Q_m=Nb^K@Fn z3n3r)&YtL9yDtM+NQP8SfdcTq&4g=-?}0K^se&V(bf3&C*YRqPouiACNw>wLWEk7s1J<(foxuV}dTlaC<+wEC7DK>wvbux2 zUN?k>N8(EwPs_1@zWphCXy`Qy2T)nHffQsMg> zFJ!*rd3nW$baYgr#C?C8kJfp&!(Ee-VNLW*hxd3XtdgF~_E}R1m5l9L<|oVHNG09* zd08_kJlI#`y{Q*u?|=7C_3Z!=?L%H`cT*ro^I=@fKqDB}3QPH2Nr&vyo4=ds=Rns= zy}Nym`9L|k5pi`z`7;g95Y-R8`8Fa7DeDmH>3;H7oKOTH&LfAFudW>EWkCkY6ghSIN2ruIohE_#OEK?jo0tP}vK?qC+j?L@5QBQkm|S zs&+$1%BcXJ#(uc&`%Fu9q!;e&ctn4;whJEY-qmYU+6NIoxGuY>b%XZit;2!THaKCU zJiard8MZBr4TxcGhgRM7u^7}2uJ>)RNUR^aD8_t%m)8x3=y3IliR}=+EeBUejWD9%NG|w zs=Loj}^USAe+*JBQ6dy zkUI{u53c&aKpqO_6kN~GNY)vdd7<)g5$+`_b#}j<23bEw5x$E(P~)hXCeWLSw=*Yb zN9F&u-Q*wj`d8=Am*~2;iuEGXM%~**Pbj#vWw-=Pioq&QyJ`M1!HfLKZkbE`9At|Y z``h-D$j)-1d3s?C1He~;)b24eoZ zan~{|-meg;&D@;k1Rv|a(&s;$&%f~Mph`vc`|s%aK|H=g|IgR|_xrlgn)FjIQt;N?zVyO~e0Y+|mS{3J z1j${A)em`RfNgPC_jhFm@=W~2(*+-Y!kHD{X5S@~$d@OX1ZCwJ$h9x8Pq3^bk$>ZX zDsKt!5LN1fOk+D(TJa5OGpwW9@aN;1N-WfT-Rjnbnk%*)5-=yeQ@2(7$7P^Vr^=)ZF9lJBQV+R>5Y zvyPL>H{e&l!FTy>AJo&91vvOkf!#`pj#a&Mi2JZ(?e0?yOO`DzkjS^2-8`#b-){=elvrZfH0^LP4hx%5~1 z?|S=v{#*V||7X&bY1H|T7R>l(EyzW*CLjF01^2Hc?f*%<_V1P?;RcDJ3T-l}G4PI( z)eZ9bF}cuX9aqVlN>d5r;0>~CtJ%@({MX3I8oRt63}}$+>u)46ik>4+<}QzY^+=a& zwmy9Q^%))V`V$-$HTjpxUK!I&+t28b?d;1~c4ruoGr{U;Y^pBV?n8EJ#`6p0cqz|e z*0Wd0UetYi6?|36X1kK5ILpqG&4!;9JkT&A@0jZj60N*RRw?|JG25d_c0Jia;$b;Y zrlj25tgLKErbNj+S+d7~Ou4kInc|>NW~cEAc)4C82jp`Ku{^y<4%o#gXLbEN*=wNR z*?pf8Sup#J=wgH+neXtSP&S7v<w{{jYBA+nI*x)mDjr^;@NRqo}*Ka5`B-<@UF zk1brpfGpV~Giwxgjr^&syYFu;NqX`>55<+gO8j4j;w2I>6fgd2*#G$dkK^yx|2qHO zb$;iw{YwAcC4cAtqf~jLIq`==rvI}-zsK_bqL9LWC_&5-zY6$W;D1&jGV@Q`9|gNI zuKAB={rrbx#otCBGZ!)KursiT{&9$j{wnq#(#7l9e`N^$lK-ywec%7%`f3ri+kdF$ z{{N~P&)-yIJ95L~&Rv7sXY@=A^zSbI?OjMDWR diff --git a/test/ThreeZones/Capacity_reserve_margin.csv b/test/ThreeZones/Capacity_reserve_margin.csv deleted file mode 100644 index 55077ad095..0000000000 --- a/test/ThreeZones/Capacity_reserve_margin.csv +++ /dev/null @@ -1,4 +0,0 @@ -,Network_zones,CapRes_1 -MA,z1,0.156 -CT,z2,0.156 -ME,z3,0.156 diff --git a/test/ThreeZones/Energy_share_requirement.csv b/test/ThreeZones/Energy_share_requirement.csv deleted file mode 100644 index 3d49badae7..0000000000 --- a/test/ThreeZones/Energy_share_requirement.csv +++ /dev/null @@ -1,4 +0,0 @@ -,Network_zones,ESR_1,ESR_2 -MA,z1,0.259,0.348 -CT,z2,0.44,0.44 -ME,z3,0.776,0.776 diff --git a/test/ThreeZones/Generators_data.csv b/test/ThreeZones/Generators_data.csv deleted file mode 100644 index 015f1e3a52..0000000000 --- a/test/ThreeZones/Generators_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Existing_Cap_MW,Existing_Cap_MWh,Existing_Charge_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Max_Charge_Cap_MW,Min_Cap_MW,Min_Cap_MWh,Min_Charge_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Up_Time,Down_Time,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3,MGA,Resource_Type,CapRes_1,ESR_1,ESR_2,region,cluster -MA_natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,MA,1 -MA_solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,solar_photovoltaic,0.8,1,1,MA,1 -CT_natural_gas_combined_cycle,2,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,9698,0,0,3.57,0,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0,1,1,0,0,0,0,1,0.133332722,0.266665444,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,CT,1 -CT_onshore_wind,2,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,onshore_wind_turbine,0.8,1,1,CT,1 -CT_solar_pv,2,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.16,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,solar_photovoltaic,0.8,1,1,CT,1 -ME_natural_gas_combined_cycle,3,1,0,0,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,65400,0,0,16291,0,0,4.5,0,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0,1,1,0,0,0,0,1,0.033333333,0.066666667,0,0,0,0,0,1,natural_gas_fired_combined_cycle,0.93,0,0,ME,1 -ME_onshore_wind,3,0,0,0,0,0,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,1,onshore_wind_turbine,0.8,1,1,ME,1 -MA_battery,1,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,battery_mid,0.95,0,0,MA,0 -CT_battery,2,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,battery_mid,0.95,0,0,CT,0 -ME_battery,3,0,0,1,0,0,0,0,0,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,0,0,0,0,1,1,0,0,0,0.92,0.92,1,10,0,0,1,0,0,0,0,0,0,1,0,battery_mid,0.95,0,0,ME,0 diff --git a/test/VREStor/Generators_data.csv b/test/VREStor/Generators_data.csv deleted file mode 100644 index 2ee5795bff..0000000000 --- a/test/VREStor/Generators_data.csv +++ /dev/null @@ -1,272 +0,0 @@ -region,Resource,technology,cluster,R_ID,Zone,Num_VRE_Bins,THERM,VRE,MUST_RUN,STOR,FLEX,HYDRO,LDS,CapRes_1,Min_Share,Max_Share,Existing_Cap_MWh,Existing_Cap_MW,Existing_Charge_Cap_MW,num_units,unmodified_existing_cap_mw,New_Build,Cap_Size,Min_Cap_MW,Max_Cap_MW,Max_Cap_MWh,Min_Cap_MWh,Max_Charge_Cap_MW,Min_Charge_Cap_MW,Min_Share_percent,Max_Share_percent,capex_mw,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,capex_mwh,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,heat_rate_mmbtu_mwh_iqr,heat_rate_mmbtu_mwh_std,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,Max_Flexible_Demand_Delay,Max_Flexible_Demand_Advance,Flexible_Demand_Energy_Eff,CO2_Capture_Rate,CO2_Capture_Cost_per_Metric_Ton,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,spur_miles,spur_inv_mwyr,spur_capex,offshore_spur_miles,offshore_spur_capex,tx_miles,tx_capex,interconnect_annuity,regional_cost_multiplier,cap_recovery_years,wacc_real,ids,MISO_CleanPower,NY_CleanPower,PJM_CleanPower,SERC_CleanPower,variable_CF,RETRO,Num_RETRO_Sources,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr,MinCapTag_1,MinCapTag_2,MinCapTag_3,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,CapRes_2,CapRes_3,VRE_STOR -EIC,EIC_batteries_1,Batteries,1,1,1,0,0,0,0,1,0,0,0,0.95,0,0,1424.4,712.2,0,42,712.194,-1,16.96,0,0.0,0,0,0,0,0,0,0.0,0.0,6235,0.0,0,0,0.15,0.15,0,0,0,0.0,10.34,0.0,0.0,None,0.041,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_biomass_1,Biomass,1,2,1,0,0,0,1,0,0,0,0,0.93,0,0,0.0,1722.5,0,1351,6256.481,-1,1.27,0,0.0,0,0,0,0,0,0,0.0,0.0,150850,0.0,0,0,7.32,0.0,0,0,172,0.0,17.03,1.056,3.066,biomass,0.308,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_conventional_hydroelectric_1,Conventional Hydroelectric,1,3,1,0,0,0,0,0,0,1,0,0.8,0,0,0.0,24200.8,0,748,24200.792,-1,32.35,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.273,0,1.0,1.0,1,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.344661608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_conventional_steam_coal_1,Conventional Steam Coal,1,4,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,12806.9,0,72,12806.928,0,177.87,0,0.0,0,0,0,0,0,0,0.0,0.0,78258,0.0,0,0,1.88,0.0,0,0,124,16.5,13.34,2.921,4.478,east_north_central_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_conventional_steam_coal_2,Conventional Steam Coal,2,5,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,109345.4,0,187,109345.445,0,584.74,0,0.0,0,0,0,0,0,0,0.0,0.0,64567,0.0,0,0,1.88,0.0,0,0,124,16.5,10.89,1.402,1.167,east_north_central_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_hydroelectric_pumped_storage_1,Hydroelectric Pumped Storage,1,6,1,0,0,0,0,1,0,0,0,0.95,0,0,275638.0,17783.1,0,104,17783.064,-1,170.99,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.15,0.15,0,0,0,0.0,10.34,0.0,0.0,None,0.524,0,0.866,0.866,0,1,20,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,7,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,27155.3,0,166,27155.276,0,163.59,0,0.0,0,0,0,0,0,0,0.0,0.0,16322,0.0,0,0,4.53,0.0,0,0,92,2.0,9.24,2.047,2.71,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,8,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,169897.4,0,266,169897.392,0,638.71,0,0.0,0,0,0,0,0,0,0.0,0.0,11042,0.0,0,0,3.58,0.0,0,0,92,2.0,7.34,0.657,0.613,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,9,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,98926.5,0,988,98926.464,0,100.13,0,0.0,0,0,0,0,0,0,0.0,0.0,10031,0.0,0,0,5.28,0.0,0,0,119,3.5,12.03,2.186,2.031,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,10,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,10412.9,0,333,10412.91,0,31.27,0,0.0,0,0,0,0,0,0,0.0,0.0,13557,0.0,0,0,5.28,0.0,0,0,119,3.5,14.66,4.035,4.747,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,11,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,2578.5,0,581,2578.478,0,4.44,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,5.29,0.0,0,0,38,0.0,10.29,1.183,3.689,east_north_central_naturalgas,0.18,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,12,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,39625.2,0,195,39625.17,0,203.21,0,0.0,0,0,0,0,0,0,0.0,0.0,35537,0.0,0,0,1.06,0.0,0,0,87,13.7,12.8,2.36,4.946,east_north_central_naturalgas,0.5,0,1.0,1.0,0,0,0,0.63,1.26,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_nuclear_1,Nuclear,1,13,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,82406.6,0,80,82406.56,0,1030.08,0,0.0,0,0,0,0,0,0,0.0,0.0,214812,0.0,0,0,2.84,0.0,0,0,248,0.0,10.45,0.0,0.006,east_north_central_uranium,0.5,0,1.0,1.0,0,0,0,0.041666667,0.083333333,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshore_wind_turbine_1,Offshore Wind Turbine,1,14,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,29.3,0,1,29.3,0,29.3,0,0.0,0,0,0,0,0,0,0.0,0.0,111496,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_onshore_wind_turbine_1,Onshore Wind Turbine,1,15,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,47407.4,0,710,47407.41,0,66.77,0,0.0,0,0,0,0,0,0,0.0,0.0,43000,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.296887743,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_petroleum_liquids_1,Petroleum Liquids,1,16,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,23196.2,0,2328,23196.192,0,9.96,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,7.97,0.0,0,0,38,0.0,15.5,3.607,4.446,east_north_central_distillate,0.18,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_small_hydroelectric_1,Small Hydroelectric,1,17,1,0,0,0,1,0,0,0,0,0.8,0,0,0.0,1672.2,0,1579,3633.279,-1,1.06,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.273,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.344661608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_solar_photovoltaic_1,Solar Photovoltaic,1,18,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,8533.9,0,1435,8533.945,0,5.95,0,0.0,0,0,0,0,0,0,0.0,0.0,22623,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.199617603,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_batteries_1,Batteries,1,19,2,0,0,0,0,1,0,0,0,0.0,0,0,721.4,360.7,0,8,360.704,-1,45.09,0,0.0,0,0,0,0,0,0,0.0,0.0,6235,0.0,0,0,0.15,0.15,0,0,0,0.0,10.34,0.0,0.0,None,0.001,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -TRE,TRE_biomass_1,Biomass,1,20,2,0,0,0,1,0,0,0,0,0.0,0,0,0.0,44.5,0,30,162.9,-1,1.48,0,0.0,0,0,0,0,0,0,0.0,0.0,150850,0.0,0,0,6.51,0.0,0,0,172,0.0,15.15,0.636,1.888,biomass,0.591,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_conventional_hydroelectric_1,Conventional Hydroelectric,1,21,2,0,0,0,0,0,0,1,0,0.0,0,0,0.0,477.0,0,19,476.995,-1,25.1,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,1,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.094297837,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_conventional_steam_coal_1,Conventional Steam Coal,1,22,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,5063.6,0,7,5063.597,0,723.37,0,0.0,0,0,0,0,0,0,0.0,0.0,60405,0.0,0,0,1.88,0.0,0,0,124,16.5,10.33,0.655,0.422,west_south_central_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_conventional_steam_coal_2,Conventional Steam Coal,2,23,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,3713.0,0,7,3713.003,0,530.43,0,0.0,0,0,0,0,0,0,0.0,0.0,68432,0.0,0,0,1.88,0.0,0,0,124,16.5,12.13,1.016,0.74,west_south_central_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,24,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,30139.1,0,52,30139.096,0,579.6,0,0.0,0,0,0,0,0,0,0.0,0.0,10912,0.0,0,0,3.59,0.0,0,0,92,2.0,7.72,0.514,0.965,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,25,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,6317.6,0,20,6317.6,0,315.88,0,0.0,0,0,0,0,0,0,0.0,0.0,15698,0.0,0,0,4.36,0.0,0,0,92,2.0,9.8,2.241,2.318,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,26,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,2924.0,0,36,2923.992,0,81.22,0,0.0,0,0,0,0,0,0,0.0,0.0,10001,0.0,0,0,5.28,0.0,0,0,119,3.5,14.08,0.577,1.146,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,27,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,2826.9,0,56,2826.88,0,50.48,0,0.0,0,0,0,0,0,0,0.0,0.0,11926,0.0,0,0,5.28,0.0,0,0,119,3.5,11.11,1.398,1.008,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,28,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,502.7,0,47,502.712,0,10.7,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,4.72,0.0,0,0,38,0.0,9.18,0.648,0.328,west_south_central_naturalgas,0.18,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,29,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,8249.5,0,35,8249.5,0,235.7,0,0.0,0,0,0,0,0,0,0.0,0.0,34182,0.0,0,0,1.06,0.0,0,0,87,13.7,13.24,2.888,3.381,west_south_central_naturalgas,0.5,0,1.0,1.0,0,0,0,0.63,1.26,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_nuclear_1,Nuclear,1,30,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,5120.0,0,4,5120.0,0,1280.0,0,0.0,0,0,0,0,0,0,0.0,0.0,193275,0.0,0,0,2.84,0.0,0,0,248,0.0,10.45,0.0,0.0,west_south_central_uranium,0.5,0,1.0,1.0,0,0,0,0.041666667,0.083333333,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_onshore_wind_turbine_1,Onshore Wind Turbine,1,31,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,21683.1,0,133,21683.123,0,163.03,0,0.0,0,0,0,0,0,0,0.0,0.0,43000,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.32023413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_petroleum_liquids_1,Petroleum Liquids,1,32,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,23.7,0,16,23.696,0,1.48,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,6.38,0.0,0,0,38,0.0,12.4,0.0,4.068,west_south_central_distillate,0.18,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_small_hydroelectric_1,Small Hydroelectric,1,33,2,0,0,0,1,0,0,0,0,0.0,0,0,0.0,11.2,0,15,54.795,-1,0.75,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.094297837,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_solar_photovoltaic_1,Solar Photovoltaic,1,34,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,1821.5,0,28,1821.512,0,65.05,0,0.0,0,0,0,0,0,0,0.0,0.0,22623,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.223940321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -WECC,WECC_batteries_1,Batteries,1,35,3,0,0,0,0,1,0,0,0,0.0,0,0,3611.0,1357.5,0,48,1357.488,-1,28.28,0,0.0,0,0,0,0,0,0,0.0,0.0,6235,0.0,0,0,0.15,0.15,0,0,0,0.0,10.34,0.0,0.0,None,0.02,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -WECC,WECC_biomass_1,Biomass,1,36,3,0,0,0,1,0,0,0,0,0.0,0,0,0.0,551.0,0,274,1535.496,-1,2.01,0,0.0,0,0,0,0,0,0,0.0,0.0,150850,0.0,0,0,7.14,0.0,0,0,172,0.0,16.63,2.779,3.894,biomass,0.362,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_conventional_hydroelectric_1,Conventional Hydroelectric,1,37,3,0,0,0,0,0,0,1,0,0.0,0,0,0.0,46528.0,0,640,46528.0,-1,72.7,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.214,0,1.0,1.0,1,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.438570496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_conventional_steam_coal_1,Conventional Steam Coal,1,38,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,11415.2,0,23,11415.199,0,496.31,0,0.0,0,0,0,0,0,0,0.0,0.0,64165,0.0,0,0,1.88,0.0,0,0,124,16.5,10.63,0.447,0.29,mountain_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_conventional_steam_coal_2,Conventional Steam Coal,2,39,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,2074.5,0,16,2074.496,0,129.66,0,0.0,0,0,0,0,0,0,0.0,0.0,77721,0.0,0,0,1.88,0.0,0,0,124,16.5,12.2,1.109,0.961,mountain_coal,0.5,0,1.0,1.0,0,0,0,0.095,0.19,0,0,0,0,0,0.0,0,0.57,0.57,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_geothermal_1,Geothermal,1,40,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,1752.4,0,146,2752.246,-1,12.0,0,0.0,0,0,0,0,0,0,0.0,0.0,209101,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_hydroelectric_pumped_storage_1,Hydroelectric Pumped Storage,1,41,3,0,0,0,0,1,0,0,0,0.0,0,0,70790.0,4567.1,0,45,4567.095,-1,101.49,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.15,0.15,0,0,0,0.0,10.34,0.0,0.0,None,0.175,0,0.866,0.866,0,1,20,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -WECC,WECC_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,42,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,37593.3,0,79,37593.335,0,475.86,0,0.0,0,0,0,0,0,0,0.0,0.0,10399,0.0,0,0,3.6,0.0,0,0,92,2.0,7.78,0.722,1.232,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,43,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,12502.4,0,79,12502.382,0,158.26,0,0.0,0,0,0,0,0,0,0.0,0.0,16492,0.0,0,0,4.55,0.0,0,0,92,2.0,8.51,2.587,2.585,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,44,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,15252.7,0,213,15252.717,0,71.61,0,0.0,0,0,0,0,0,0,0.0,0.0,10479,0.0,0,0,5.28,0.0,0,0,119,3.5,11.06,1.753,1.288,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,45,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,6281.6,0,225,6281.55,0,27.92,0,0.0,0,0,0,0,0,0,0.0,0.0,13486,0.0,0,0,5.28,0.0,0,0,119,3.5,12.78,4.552,3.282,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,46,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,1282.7,0,197,1282.667,0,6.51,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,4.88,0.0,0,0,38,0.0,9.49,1.759,1.665,mountain_naturalgas,0.18,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,47,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,2669.5,0,28,2669.492,0,95.34,0,0.0,0,0,0,0,0,0,0.0,0.0,51303,0.0,0,0,1.06,0.0,0,0,87,13.7,12.4,4.616,3.843,mountain_naturalgas,0.5,0,1.0,1.0,0,0,0,0.63,1.26,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_nuclear_1,Nuclear,1,48,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,5175.0,0,4,5175.0,0,1293.75,0,0.0,0,0,0,0,0,0,0.0,0.0,211822,0.0,0,0,2.84,0.0,0,0,248,0.0,10.45,0.0,0.0,mountain_uranium,0.5,0,1.0,1.0,0,0,0,0.041666667,0.083333333,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_onshore_wind_turbine_1,Onshore Wind Turbine,1,49,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,20644.2,0,300,20644.2,0,68.81,0,0.0,0,0,0,0,0,0,0.0,0.0,43000,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.303506275,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_petroleum_liquids_1,Petroleum Liquids,1,50,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,636.2,0,150,636.15,0,4.24,0,0.0,0,0,0,0,0,0,0.0,0.0,21000,0.0,0,0,7.2,0.0,0,0,38,0.0,14.0,2.319,4.938,mountain_distillate,0.18,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_small_hydroelectric_1,Small Hydroelectric,1,51,3,0,0,0,1,0,0,0,0,0.0,0,0,0.0,1064.3,0,659,2966.818,-1,1.62,0,0.0,0,0,0,0,0,0,0.0,0.0,47048,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.181,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.438570496,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_solar_photovoltaic_1,Solar Photovoltaic,1,52,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,14659.8,0,986,14659.848,0,14.87,0,0.0,0,0,0,0,0,0,0.0,0.0,22623,0.0,0,0,0.0,0.0,0,0,0,0.0,10.34,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.252030487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_distributed_generation_1,distributed_generation,1,53,3,0,0,0,1,0,0,0,0,0.0,0,0,0.0,250535.0,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.24602032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -EIC,EIC_distributed_generation_1,distributed_generation,1,54,1,0,0,0,1,0,0,0,0,0.8,0,0,0.0,1770000.0,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.22735468,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_distributed_generation_1,distributed_generation,1,55,2,0,0,0,1,0,0,0,0,0.0,0,0,0.0,17006.0,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.214929566,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -EIC,EIC_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,56,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,880383.916,56026.0,28000,0.0,0,0,2.0,0.0,0,0,106,2.0,6.36,0.0,0.0,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,1.186,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,57,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,45192.0,21000,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,east_north_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,1.128,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_battery_moderate_0,Battery_*_Moderate,0,58,1,0,0,0,0,1,0,0,0,0.95,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,238220.323,19978.0,5955,141861.827,11897,3546,0.15,0.15,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,1.03,15,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,59,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,2120000.0,120812.0,67000,0.0,0,0,6.0,0.0,0,0,106,0.0,7.16,0.0,0.0,east_north_central_naturalgas,0.6,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.9,27,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,1.062,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,60,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,6590000.0,45000.0,0,0.0,0,0,2.84,0.0,0,0,285,0.0,10.44,0.0,0.0,east_north_central_uranium,0.5,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,1.133,40,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,61,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,-1,-1.0,-1,0,-1,-1,0,0,0.0,0.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,1.03,25,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,62,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,14198.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14197.521,1.266,30,0.03,0,0,0,0,0,0.46646145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,63,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,17082.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,17082.104,1.266,30,0.03,0,0,0,0,0,0.506161809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,64,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,17267.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,17266.619,1.266,30,0.03,0,0,0,0,0,0.428973228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,65,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,25483.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,25482.635,1.266,30,0.03,0,0,0,0,0,0.470765114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,66,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,16488.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,16487.938,1.266,30,0.03,0,0,0,0,0,0.369812936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,67,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,25720.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,25719.606,1.266,30,0.03,0,0,0,0,0,0.434300929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,68,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,21224.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,21223.571,1.266,30,0.03,0,0,0,0,0,0.325287282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,69,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,32633.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,32632.921,1.266,30,0.03,0,0,0,0,0,0.405135185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,70,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,28526.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,28526.156,1.266,30,0.03,0,0,0,0,0,0.301312625,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,71,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,244462.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,244461.674,1.266,30,0.03,0,0,0,0,0,0.479932398,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,72,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,8863.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,8863.386,1.017,30,0.026,0,0,0,0,0,0.26517567,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,73,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,4464.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,4464.156,1.017,30,0.026,0,0,0,0,0,0.246608377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,74,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,14630.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14629.711,1.017,30,0.026,0,0,0,0,0,0.262942463,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,75,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,10126.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,10125.593,1.017,30,0.026,0,0,0,0,0,0.247017696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,76,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,16248.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,16248.012,1.017,30,0.026,0,0,0,0,0,0.250704974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,77,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,22825.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,22825.004,1.017,30,0.026,0,0,0,0,0,0.268118054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,78,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,24566.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,24565.988,1.017,30,0.026,0,0,0,0,0,0.258166939,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,79,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,21181.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,21180.786,1.017,30,0.026,0,0,0,0,0,0.245459273,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,80,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,32414.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,32414.229,1.017,30,0.026,0,0,0,0,0,0.247877195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,81,1,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,148669.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,148668.665,1.017,30,0.026,0,0,0,0,0,0.270195067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -EIC,EIC_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,82,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,65762.8,-1,0,0,0,0,0,1730000.0,147250.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,51161.657,1.0,30,0.036,0,0,0,0,0,0.453892708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,83,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,14399.2,-1,0,0,0,0,0,1730000.0,157328.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,61239.476,1.0,30,0.036,0,0,0,0,0,0.495629996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,84,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,34280.8,-1,0,0,0,0,0,1730000.0,153961.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,57872.369,1.0,30,0.036,0,0,0,0,0,0.451629132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,85,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,101840.5,-1,0,0,0,0,0,1730000.0,168852.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,72763.911,1.0,30,0.036,0,0,0,0,0,0.495775014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,86,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,118605.0,-1,0,0,0,0,0,1730000.0,164784.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,68695.909,1.0,30,0.036,0,0,0,0,0,0.466509044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,87,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18875.6,-1,0,0,0,0,0,1730000.0,146792.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,50703.558,1.0,30,0.036,0,0,0,0,0,0.354788363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,88,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,79943.7,-1,0,0,0,0,0,1730000.0,144977.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,48888.699,1.0,30,0.036,0,0,0,0,0,0.291283697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,89,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23454.7,-1,0,0,0,0,0,1730000.0,347411.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,251322.456,1.0,30,0.036,0,0,0,0,0,0.440021217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,90,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,59461.7,-1,0,0,0,0,0,1730000.0,393568.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,297479.514,1.0,30,0.036,0,0,0,0,0,0.434866041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,91,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,73503.9,-1,0,0,0,0,0,1730000.0,155384.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,59295.695,1.0,30,0.036,0,0,0,0,0,0.288762152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,92,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,65762.8,-1,0,0,0,0,0,1730000.0,147250.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,51161.657,1.0,30,0.036,0,0,0,0,0,0.453892708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,93,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,14399.2,-1,0,0,0,0,0,1730000.0,157328.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,61239.476,1.0,30,0.036,0,0,0,0,0,0.495629996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,94,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,34280.8,-1,0,0,0,0,0,1730000.0,153961.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,57872.369,1.0,30,0.036,0,0,0,0,0,0.451629132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,95,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,101840.5,-1,0,0,0,0,0,1730000.0,168852.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,72763.911,1.0,30,0.036,0,0,0,0,0,0.495775014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,96,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,118605.0,-1,0,0,0,0,0,1730000.0,164784.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,68695.909,1.0,30,0.036,0,0,0,0,0,0.466509044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,97,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18875.6,-1,0,0,0,0,0,1730000.0,146792.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,50703.558,1.0,30,0.036,0,0,0,0,0,0.354788363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,98,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,79943.7,-1,0,0,0,0,0,1730000.0,144977.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,48888.699,1.0,30,0.036,0,0,0,0,0,0.291283697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,99,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23454.7,-1,0,0,0,0,0,1730000.0,347411.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,251322.456,1.0,30,0.036,0,0,0,0,0,0.440021217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,100,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,59461.7,-1,0,0,0,0,0,1730000.0,393568.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,297479.514,1.0,30,0.036,0,0,0,0,0,0.434866041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,101,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,73503.9,-1,0,0,0,0,0,1730000.0,155384.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,59295.695,1.0,30,0.036,0,0,0,0,0,0.288762152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,102,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,65762.8,-1,0,0,0,0,0,2770000.0,204577.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,51161.657,1.0,30,0.036,0,0,0,0,0,0.453892708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,103,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,14399.2,-1,0,0,0,0,0,2770000.0,214655.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,61239.476,1.0,30,0.036,0,0,0,0,0,0.495629996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,104,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,34280.8,-1,0,0,0,0,0,2770000.0,211288.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,57872.369,1.0,30,0.036,0,0,0,0,0,0.451629132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,105,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,101840.5,-1,0,0,0,0,0,2770000.0,226179.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,72763.911,1.0,30,0.036,0,0,0,0,0,0.495775014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,106,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,118605.0,-1,0,0,0,0,0,2770000.0,222111.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,68695.909,1.0,30,0.036,0,0,0,0,0,0.466509044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,107,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18875.6,-1,0,0,0,0,0,2770000.0,204119.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,50703.558,1.0,30,0.036,0,0,0,0,0,0.354788363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,108,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,79943.7,-1,0,0,0,0,0,2770000.0,202304.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,48888.699,1.0,30,0.036,0,0,0,0,0,0.291283697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,109,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23454.7,-1,0,0,0,0,0,2770000.0,404738.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,251322.456,1.0,30,0.036,0,0,0,0,0,0.440021217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,110,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,59461.7,-1,0,0,0,0,0,2770000.0,450895.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,297479.514,1.0,30,0.036,0,0,0,0,0,0.434866041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,111,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,73503.9,-1,0,0,0,0,0,2770000.0,212711.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,59295.695,1.0,30,0.036,0,0,0,0,0,0.288762152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,112,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,65762.8,-1,0,0,0,0,0,2770000.0,204577.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,51161.657,1.0,30,0.036,0,0,0,0,0,0.453892708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,113,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,14399.2,-1,0,0,0,0,0,2770000.0,214655.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,61239.476,1.0,30,0.036,0,0,0,0,0,0.495629996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,114,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,34280.8,-1,0,0,0,0,0,2770000.0,211288.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,57872.369,1.0,30,0.036,0,0,0,0,0,0.451629132,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,115,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,101840.5,-1,0,0,0,0,0,2770000.0,226179.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,72763.911,1.0,30,0.036,0,0,0,0,0,0.495775014,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,116,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,118605.0,-1,0,0,0,0,0,2770000.0,222111.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,68695.909,1.0,30,0.036,0,0,0,0,0,0.466509044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,117,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18875.6,-1,0,0,0,0,0,2770000.0,204119.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,50703.558,1.0,30,0.036,0,0,0,0,0,0.354788363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,118,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,79943.7,-1,0,0,0,0,0,2770000.0,202304.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,48888.699,1.0,30,0.036,0,0,0,0,0,0.291283697,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,119,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23454.7,-1,0,0,0,0,0,2770000.0,404738.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,251322.456,1.0,30,0.036,0,0,0,0,0,0.440021217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,120,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,59461.7,-1,0,0,0,0,0,2770000.0,450895.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,297479.514,1.0,30,0.036,0,0,0,0,0,0.434866041,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -EIC,EIC_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,121,1,1,0,1,0,0,0,0,0,0.8,0,0,0.0,0.0,0,0,0.0,1,1.0,0,73503.9,-1,0,0,0,0,0,2770000.0,212711.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,59295.695,1.0,30,0.036,0,0,0,0,0,0.288762152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,122,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,880383.916,42007.0,28000,0.0,0,0,2.0,0.0,0,0,106,2.0,6.36,0.0,0.0,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.889,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,123,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,35319.0,21000,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,west_south_central_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.882,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_battery_moderate_0,Battery_*_Moderate,0,124,2,0,0,0,0,1,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,238220.323,19389.0,5955,141861.827,11546,3546,0.15,0.15,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,1.0,15,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -TRE,TRE_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,125,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,2120000.0,106685.0,67000,0.0,0,0,6.0,0.0,0,0,106,0.0,7.16,0.0,0.0,west_south_central_naturalgas,0.6,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.9,27,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,0.938,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,126,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,6590000.0,450000.0,0,0.0,0,0,2.84,0.0,0,0,285,0.0,10.44,0.0,0.0,west_south_central_uranium,0.5,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,0.944,40,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -TRE,TRE_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,127,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,-1,-1.0,-1,0,-1,-1,0,0,0.0,0.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,1.0,25,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,128,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,14393.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14392.776,0.933,30,0.03,0,0,0,0,0,0.468758494,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,129,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,20298.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,20297.809,0.933,30,0.03,0,0,0,0,0,0.50884968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,130,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,14755.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14755.103,0.933,30,0.03,0,0,0,0,0,0.428581536,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,131,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,23630.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,23630.35,0.933,30,0.03,0,0,0,0,0,0.463753909,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,132,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,12498.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,12498.46,0.933,30,0.03,0,0,0,0,0,0.393514663,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,133,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,23788.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,23787.558,0.933,30,0.03,0,0,0,0,0,0.431482643,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,134,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,15633.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,15633.08,0.933,30,0.03,0,0,0,0,0,0.37748757,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,135,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,29021.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,29020.777,0.933,30,0.03,0,0,0,0,0,0.418603808,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,136,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,40897.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,40896.604,0.933,30,0.03,0,0,0,0,0,0.350026488,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,137,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,146712.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,146712.274,0.933,30,0.03,0,0,0,0,0,0.489716798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,138,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,6412.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,6412.182,0.968,30,0.026,0,0,0,0,0,0.254278213,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,139,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,8461.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,8460.982,0.968,30,0.026,0,0,0,0,0,0.262568802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,140,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,10479.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,10478.698,0.968,30,0.026,0,0,0,0,0,0.252687842,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,141,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,14103.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14103.154,0.968,30,0.026,0,0,0,0,0,0.264333636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,142,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,14224.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,14224.435,0.968,30,0.026,0,0,0,0,0,0.253560722,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,143,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,18539.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,18539.404,0.968,30,0.026,0,0,0,0,0,0.26726374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,144,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,22325.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,22324.625,0.968,30,0.026,0,0,0,0,0,0.265551984,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,145,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,17464.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,17463.888,0.968,30,0.026,0,0,0,0,0,0.251154423,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,146,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,74721.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,74721.211,0.968,30,0.026,0,0,0,0,0,0.276522815,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,147,2,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,29582.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,29582.346,0.968,30,0.026,0,0,0,0,0,0.252619147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -TRE,TRE_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,148,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,13077.5,-1,0,0,0,0,0,1730000.0,145004.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,51156.858,0.977,30,0.036,0,0,0,0,0,0.371246308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,149,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9995.0,-1,0,0,0,0,0,1730000.0,158104.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,64256.422,0.977,30,0.036,0,0,0,0,0,0.415583521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,150,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,22842.5,-1,0,0,0,0,0,1730000.0,140443.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,46595.365,0.977,30,0.036,0,0,0,0,0,0.357092798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,151,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,895.0,-1,0,0,0,0,0,1730000.0,157772.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,63924.883,0.977,30,0.036,0,0,0,0,0,0.377708793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,152,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20865.0,-1,0,0,0,0,0,1730000.0,142961.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,49113.588,0.977,30,0.036,0,0,0,0,0,0.351203203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,153,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,4480.0,-1,0,0,0,0,0,1730000.0,166128.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,72280.844,0.977,30,0.036,0,0,0,0,0,0.416367918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,154,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23652.0,-1,0,0,0,0,0,1730000.0,166849.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,73001.164,0.977,30,0.036,0,0,0,0,0,0.405127913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,155,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,10070.0,-1,0,0,0,0,0,1730000.0,157895.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,64047.233,0.977,30,0.036,0,0,0,0,0,0.345421404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,156,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20680.0,-1,0,0,0,0,0,1730000.0,167576.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,73728.515,0.977,30,0.036,0,0,0,0,0,0.392506152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,157,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,16746.0,-1,0,0,0,0,0,1730000.0,156072.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,62224.897,0.977,30,0.036,0,0,0,0,0,0.369584978,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,158,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,13077.5,-1,0,0,0,0,0,1730000.0,145004.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,51156.858,0.977,30,0.036,0,0,0,0,0,0.371246308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,159,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9995.0,-1,0,0,0,0,0,1730000.0,158104.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,64256.422,0.977,30,0.036,0,0,0,0,0,0.415583521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,160,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,22842.5,-1,0,0,0,0,0,1730000.0,140443.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,46595.365,0.977,30,0.036,0,0,0,0,0,0.357092798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,161,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,895.0,-1,0,0,0,0,0,1730000.0,157772.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,63924.883,0.977,30,0.036,0,0,0,0,0,0.377708793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,162,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20865.0,-1,0,0,0,0,0,1730000.0,142961.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,49113.588,0.977,30,0.036,0,0,0,0,0,0.351203203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,163,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,4480.0,-1,0,0,0,0,0,1730000.0,166128.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,72280.844,0.977,30,0.036,0,0,0,0,0,0.416367918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,164,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23652.0,-1,0,0,0,0,0,1730000.0,166849.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,73001.164,0.977,30,0.036,0,0,0,0,0,0.405127913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,165,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,10070.0,-1,0,0,0,0,0,1730000.0,157895.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,64047.233,0.977,30,0.036,0,0,0,0,0,0.345421404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,166,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20680.0,-1,0,0,0,0,0,1730000.0,167576.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,73728.515,0.977,30,0.036,0,0,0,0,0,0.392506152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,167,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,16746.0,-1,0,0,0,0,0,1730000.0,156072.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,62224.897,0.977,30,0.036,0,0,0,0,0,0.369584978,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,168,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,13077.5,-1,0,0,0,0,0,2770000.0,200994.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,51156.858,0.977,30,0.036,0,0,0,0,0,0.371246308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,169,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9995.0,-1,0,0,0,0,0,2770000.0,214094.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,64256.422,0.977,30,0.036,0,0,0,0,0,0.415583521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,170,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,22842.5,-1,0,0,0,0,0,2770000.0,196433.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,46595.365,0.977,30,0.036,0,0,0,0,0,0.357092798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,171,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,895.0,-1,0,0,0,0,0,2770000.0,213762.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,63924.883,0.977,30,0.036,0,0,0,0,0,0.377708793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,172,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20865.0,-1,0,0,0,0,0,2770000.0,198951.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,49113.588,0.977,30,0.036,0,0,0,0,0,0.351203203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,173,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,4480.0,-1,0,0,0,0,0,2770000.0,222118.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,72280.844,0.977,30,0.036,0,0,0,0,0,0.416367918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,174,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23652.0,-1,0,0,0,0,0,2770000.0,222839.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,73001.164,0.977,30,0.036,0,0,0,0,0,0.405127913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,175,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,10070.0,-1,0,0,0,0,0,2770000.0,213885.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,64047.233,0.977,30,0.036,0,0,0,0,0,0.345421404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,176,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20680.0,-1,0,0,0,0,0,2770000.0,223566.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,73728.515,0.977,30,0.036,0,0,0,0,0,0.392506152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,177,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,16746.0,-1,0,0,0,0,0,2770000.0,212062.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,62224.897,0.977,30,0.036,0,0,0,0,0,0.369584978,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,178,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,13077.5,-1,0,0,0,0,0,2770000.0,200994.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,51156.858,0.977,30,0.036,0,0,0,0,0,0.371246308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,179,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9995.0,-1,0,0,0,0,0,2770000.0,214094.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,64256.422,0.977,30,0.036,0,0,0,0,0,0.415583521,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,180,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,22842.5,-1,0,0,0,0,0,2770000.0,196433.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,46595.365,0.977,30,0.036,0,0,0,0,0,0.357092798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,181,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,895.0,-1,0,0,0,0,0,2770000.0,213762.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,63924.883,0.977,30,0.036,0,0,0,0,0,0.377708793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,182,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20865.0,-1,0,0,0,0,0,2770000.0,198951.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,49113.588,0.977,30,0.036,0,0,0,0,0,0.351203203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,183,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,4480.0,-1,0,0,0,0,0,2770000.0,222118.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,72280.844,0.977,30,0.036,0,0,0,0,0,0.416367918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,184,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,23652.0,-1,0,0,0,0,0,2770000.0,222839.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,73001.164,0.977,30,0.036,0,0,0,0,0,0.405127913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,185,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,10070.0,-1,0,0,0,0,0,2770000.0,213885.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,64047.233,0.977,30,0.036,0,0,0,0,0,0.345421404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,186,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,20680.0,-1,0,0,0,0,0,2770000.0,223566.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,73728.515,0.977,30,0.036,0,0,0,0,0,0.392506152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -TRE,TRE_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,187,2,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,16746.0,-1,0,0,0,0,0,2770000.0,212062.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,62224.897,0.977,30,0.036,0,0,0,0,0,0.369584978,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.8,0.0,0 -WECC,WECC_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,188,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,880383.916,59543.0,28000,0.0,0,0,2.0,0.0,0,0,106,2.0,6.36,0.0,0.0,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,1.26,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,189,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,45587.0,21000,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,mountain_naturalgas,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,1.138,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_battery_moderate_0,Battery_*_Moderate,0,190,3,0,0,0,0,1,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,238220.323,20202.0,5955,141861.827,12030,3546,0.15,0.15,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.92,0.92,0,1,10,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,0.0,1.042,15,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -WECC,WECC_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,191,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,2120000.0,119927.0,67000,0.0,0,0,6.0,0.0,0,0,106,0.0,7.16,0.0,0.0,mountain_naturalgas,0.6,0,1.0,1.0,0,0,0,0.106666667,0.213333333,0,0,0,0,0,0.9,27,0.64,0.64,6,6,0,0,0,0,0,0,0,0.0,1.054,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,192,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,500.0,0,-1.0,-1,0,0,0,0,0,6590000.0,450000.0,0,0.0,0,0,2.84,0.0,0,0,285,0.0,10.44,0.0,0.0,mountain_uranium,0.5,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.25,0.25,24,24,0,0,0,0,0,0,0,0.0,1.19,40,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 -WECC,WECC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,193,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,-1,-1.0,-1,0,-1,-1,0,0,0.0,0.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,1.042,25,0.026,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,194,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,20294.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,20294.121,1.657,30,0.03,0,0,0,0,0,0.42223382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,195,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,19872.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,19872.298,1.657,30,0.03,0,0,0,0,0,0.511292398,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,196,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,27185.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,27184.562,1.657,30,0.03,0,0,0,0,0,0.365831107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,197,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,19137.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,19137.494,1.657,30,0.03,0,0,0,0,0,0.310294747,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,198,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,26039.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,26038.936,1.657,30,0.03,0,0,0,0,0,0.289241701,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,199,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,133609.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,133608.575,1.657,30,0.03,0,0,0,0,0,0.465454966,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,200,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,29900.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,29899.759,1.657,30,0.03,0,0,0,0,0,0.244902343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,201,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,160193.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,160192.842,1.657,30,0.03,0,0,0,0,0,0.443443388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,202,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,38235.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,38235.186,1.657,30,0.03,0,0,0,0,0,0.225780696,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,203,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,879445.731,274991.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,274991.331,1.657,30,0.03,0,0,0,0,0,0.472337902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,204,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,10320.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,10320.26,1.059,30,0.026,0,0,0,0,0,0.29553619,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,205,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,6016.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,6015.782,1.059,30,0.026,0,0,0,0,0,0.271998376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,206,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,19411.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,19411.252,1.059,30,0.026,0,0,0,0,0,0.290274531,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,207,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,3992.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,3991.741,1.059,30,0.026,0,0,0,0,0,0.23989968,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,208,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,25714.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,25713.501,1.059,30,0.026,0,0,0,0,0,0.286481887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,209,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,8052.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,8051.656,1.059,30,0.026,0,0,0,0,0,0.229081407,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,210,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,33457.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,33456.861,1.059,30,0.026,0,0,0,0,0,0.283349633,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,211,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,16842.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,16841.98,1.059,30,0.026,0,0,0,0,0,0.233366475,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,212,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,105939.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,105939.452,1.059,30,0.026,0,0,0,0,0,0.278691798,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,213,3,0,0,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,-1.0,-1,0,0,0,0,0,630556.245,28290.0,0,0.0,0,0,0.15,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,28289.909,1.059,30,0.026,0,0,0,0,0,0.222730413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,1 -WECC,WECC_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,214,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,26916.5,-1,0,0,0,0,0,1730000.0,174794.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,78705.752,1.0,30,0.036,0,0,0,0,0,0.485625327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,215,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,29943.3,-1,0,0,0,0,0,1730000.0,179346.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,83257.787,1.0,30,0.036,0,0,0,0,0,0.543219388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,216,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,39553.5,-1,0,0,0,0,0,1730000.0,177553.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,81464.449,1.0,30,0.036,0,0,0,0,0,0.499437243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,217,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18780.0,-1,0,0,0,0,0,1730000.0,162737.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,66648.117,1.0,30,0.036,0,0,0,0,0,0.412348032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,218,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,19994.0,-1,0,0,0,0,0,1730000.0,174072.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,77983.329,1.0,30,0.036,0,0,0,0,0,0.458608687,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,219,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,36016.0,-1,0,0,0,0,0,1730000.0,175097.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,79008.616,1.0,30,0.036,0,0,0,0,0,0.473246485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,220,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,53762.0,-1,0,0,0,0,0,1730000.0,174641.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,78552.631,1.0,30,0.036,0,0,0,0,0,0.42923066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,221,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,1544.0,-1,0,0,0,0,0,1730000.0,151442.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,55353.297,1.0,30,0.036,0,0,0,0,0,0.336571634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,222,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,44128.0,-1,0,0,0,0,0,1730000.0,176829.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,80740.015,1.0,30,0.036,0,0,0,0,0,0.404276967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,223,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9122.0,-1,0,0,0,0,0,1730000.0,151351.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,55262.315,1.0,30,0.036,0,0,0,0,0,0.298123151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,224,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,26916.5,-1,0,0,0,0,0,1730000.0,174794.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,78705.752,1.0,30,0.036,0,0,0,0,0,0.485625327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,225,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,29943.3,-1,0,0,0,0,0,1730000.0,179346.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,83257.787,1.0,30,0.036,0,0,0,0,0,0.543219388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,226,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,39553.5,-1,0,0,0,0,0,1730000.0,177553.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,81464.449,1.0,30,0.036,0,0,0,0,0,0.499437243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,227,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18780.0,-1,0,0,0,0,0,1730000.0,162737.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,66648.117,1.0,30,0.036,0,0,0,0,0,0.412348032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,228,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,19994.0,-1,0,0,0,0,0,1730000.0,174072.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,77983.329,1.0,30,0.036,0,0,0,0,0,0.458608687,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,229,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,36016.0,-1,0,0,0,0,0,1730000.0,175097.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,79008.616,1.0,30,0.036,0,0,0,0,0,0.473246485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,230,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,53762.0,-1,0,0,0,0,0,1730000.0,174641.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,78552.631,1.0,30,0.036,0,0,0,0,0,0.42923066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,231,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,1544.0,-1,0,0,0,0,0,1730000.0,151442.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,55353.297,1.0,30,0.036,0,0,0,0,0,0.336571634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,232,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,44128.0,-1,0,0,0,0,0,1730000.0,176829.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,80740.015,1.0,30,0.036,0,0,0,0,0,0.404276967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,233,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9122.0,-1,0,0,0,0,0,1730000.0,151351.0,78449,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,55262.315,1.0,30,0.036,0,0,0,0,0,0.298123151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,234,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,26916.5,-1,0,0,0,0,0,2770000.0,232121.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,78705.752,1.0,30,0.036,0,0,0,0,0,0.485625327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,235,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,29943.3,-1,0,0,0,0,0,2770000.0,236673.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,83257.787,1.0,30,0.036,0,0,0,0,0,0.543219388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,236,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,39553.5,-1,0,0,0,0,0,2770000.0,234880.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,81464.449,1.0,30,0.036,0,0,0,0,0,0.499437243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,237,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18780.0,-1,0,0,0,0,0,2770000.0,220064.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,66648.117,1.0,30,0.036,0,0,0,0,0,0.412348032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,238,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,19994.0,-1,0,0,0,0,0,2770000.0,231399.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,77983.329,1.0,30,0.036,0,0,0,0,0,0.458608687,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,239,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,36016.0,-1,0,0,0,0,0,2770000.0,232424.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,79008.616,1.0,30,0.036,0,0,0,0,0,0.473246485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,240,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,53762.0,-1,0,0,0,0,0,2770000.0,231968.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,78552.631,1.0,30,0.036,0,0,0,0,0,0.42923066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,241,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,1544.0,-1,0,0,0,0,0,2770000.0,208769.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,55353.297,1.0,30,0.036,0,0,0,0,0,0.336571634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,242,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,44128.0,-1,0,0,0,0,0,2770000.0,234156.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,80740.015,1.0,30,0.036,0,0,0,0,0,0.404276967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,243,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9122.0,-1,0,0,0,0,0,2770000.0,208678.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,55262.315,1.0,30,0.036,0,0,0,0,0,0.298123151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,244,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,26916.5,-1,0,0,0,0,0,2770000.0,232121.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,78705.752,1.0,30,0.036,0,0,0,0,0,0.485625327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,245,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,29943.3,-1,0,0,0,0,0,2770000.0,236673.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,83257.787,1.0,30,0.036,0,0,0,0,0,0.543219388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,246,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,39553.5,-1,0,0,0,0,0,2770000.0,234880.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,81464.449,1.0,30,0.036,0,0,0,0,0,0.499437243,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,247,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,18780.0,-1,0,0,0,0,0,2770000.0,220064.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,66648.117,1.0,30,0.036,0,0,0,0,0,0.412348032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,248,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,19994.0,-1,0,0,0,0,0,2770000.0,231399.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,77983.329,1.0,30,0.036,0,0,0,0,0,0.458608687,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,249,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,36016.0,-1,0,0,0,0,0,2770000.0,232424.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,79008.616,1.0,30,0.036,0,0,0,0,0,0.473246485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,250,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,53762.0,-1,0,0,0,0,0,2770000.0,231968.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,78552.631,1.0,30,0.036,0,0,0,0,0,0.42923066,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,251,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,1544.0,-1,0,0,0,0,0,2770000.0,208769.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,55353.297,1.0,30,0.036,0,0,0,0,0,0.336571634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,252,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,44128.0,-1,0,0,0,0,0,2770000.0,234156.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,80740.015,1.0,30,0.036,0,0,0,0,0,0.404276967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,253,3,1,0,1,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,1.0,0,9122.0,-1,0,0,0,0,0,2770000.0,208678.0,68827,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,1.0,1.0,0,0,0,0,0,0,0,0,0,55262.315,1.0,30,0.036,0,0,0,0,0,0.298123151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.8,0 -WECC,WECC_trans_light_duty_1,trans_light_duty,1,254,3,0,0,0,0,0,1,0,0,0.0,0,0,0.0,88930.5,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,5,0,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.304267582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -EIC,EIC_trans_light_duty_1,trans_light_duty,1,255,1,0,0,0,0,0,1,0,0,0.95,0,0,0.0,227552.1,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,5,0,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.29105489,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_trans_light_duty_1,trans_light_duty,1,256,2,0,0,0,0,0,1,0,0,0.0,0,0,0.0,34387.8,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,5,0,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.253653324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -WECC,WECC_comm_water_heat_1,comm_water_heat,1,257,3,0,0,0,0,0,1,0,0,0.0,0,0,0.0,1130.3,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.575245441,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -EIC,EIC_comm_water_heat_1,comm_water_heat,1,258,1,0,0,0,0,0,1,0,0,0.95,0,0,0.0,2922.1,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.545242595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_comm_water_heat_1,comm_water_heat,1,259,2,0,0,0,0,0,1,0,0,0.0,0,0,0.0,368.7,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.48278806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -WECC,WECC_res_water_heat_1,res_water_heat,1,260,3,0,0,0,0,0,1,0,0,0.0,0,0,0.0,2578.7,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.341639384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -EIC,EIC_res_water_heat_1,res_water_heat,1,261,1,0,0,0,0,0,1,0,0,0.95,0,0,0.0,8238.2,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.358667559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_res_water_heat_1,res_water_heat,1,262,2,0,0,0,0,0,1,0,0,0.0,0,0,0.0,1049.5,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,2,2,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.350966509,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -WECC,WECC_comm_space_heat_cool_1,comm_space_heat_cool,1,263,3,0,0,0,0,0,1,0,0,0.0,0,0,0.0,7483.3,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.172929324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -EIC,EIC_comm_space_heat_cool_1,comm_space_heat_cool,1,264,1,0,0,0,0,0,1,0,0,0.95,0,0,0.0,41624.8,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.155632777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_comm_space_heat_cool_1,comm_space_heat_cool,1,265,2,0,0,0,0,0,1,0,0,0.0,0,0,0.0,6978.6,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.09675803,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -WECC,WECC_res_space_heat_cool_1,res_space_heat_cool,1,266,3,0,0,0,0,0,1,0,0,0.0,0,0,0.0,12467.5,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.244983674,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.95,0 -EIC,EIC_res_space_heat_cool_1,res_space_heat_cool,1,267,1,0,0,0,0,0,1,0,0,0.95,0,0,0.0,47457.0,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.208288887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_res_space_heat_cool_1,res_space_heat_cool,1,268,2,0,0,0,0,0,1,0,0,0.0,0,0,0.0,7585.9,0,0,0.0,-1,0.0,0,0.0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0.0,0.0,0,0,0,0.0,0.0,0.0,0.0,None,0.0,0,0.0,0.0,0,0,0,0.0,0.0,0,0,1,1,1,0.0,0,0.0,0.0,0,0,0,0,0,0,0,0,0,0.0,0.0,0,0.0,0,0,0,0,0,0.190117881,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0.0,0 -EIC,EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,269,1,0,1,0,0,0,0,0,0,0.93,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,61000.0,0,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,zerocarbon_fuel,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,1.128,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.0,0 -TRE,TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,270,2,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,61000.0,0,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,zerocarbon_fuel,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,0.882,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.93,0.0,0 -WECC,WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,271,3,0,1,0,0,0,0,0,0,0.0,0,0,0.0,0.0,0,0,0.0,1,100.0,0,-1.0,-1,0,0,0,0,0,746250.365,61000.0,0,0.0,0,0,5.0,0.0,0,0,137,3.5,9.72,0.0,0.0,zerocarbon_fuel,0.3,0,1.0,1.0,0,0,0,0.0,0.0,0,0,0,0,0,0.0,0,3.78,3.78,1,1,0,0,0,0,0,0,0,0.0,1.138,30,0.033,0,0,0,0,0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0,0.93,0 diff --git a/test/VREStor/Vre_and_stor_data.csv b/test/VREStor/Vre_and_stor_data.csv deleted file mode 100644 index e47236a878..0000000000 --- a/test/VREStor/Vre_and_stor_data.csv +++ /dev/null @@ -1,64 +0,0 @@ -region,Resource,technology,cluster,R_ID,Zone,LDS_VRE_STOR,CapResVreStor_1,MinCapTag_1,MinCapTag_2,MinCapTag_3,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,CapResVreStor_2,CapResVreStor_3,Resource_Type,Inv_Cost_Solar_per_MWyr,Inv_Cost_Inverter_per_MWyr,Inv_Cost_Wind_per_MWyr,Fixed_OM_Solar_Cost_per_MWyr,Fixed_OM_Inverter_Cost_per_MWyr,Fixed_OM_Wind_Cost_per_MWyr,SOLAR,WIND,STOR_DC_DISCHARGE,STOR_DC_CHARGE,MinCapTagStor_1,MinCapTagSolar_1,MinCapTagWind_1,MinCapTagStor_2,MinCapTagSolar_2,MinCapTagWind_2,MinCapTagStor_3,MinCapTagSolar_3,MinCapTagWind_3,MaxCapTagStor_1,MaxCapTagSolar_1,MaxCapTagWind_1,MaxCapTagStor_2,MaxCapTagSolar_2,MaxCapTagWind_2,MaxCapTagStor_3,MaxCapTagSolar_3,MaxCapTagWind_3,STOR_AC_DISCHARGE,STOR_AC_CHARGE,Existing_Cap_Inverter_MW,Existing_Cap_Solar_MW,Existing_Cap_Wind_MW,Existing_Cap_Charge_DC_MW,Existing_Cap_Charge_AC_MW,Existing_Cap_Discharge_DC_MW,Existing_Cap_Discharge_AC_MW,Min_Cap_Inverter_MW,Min_Cap_Charge_AC_MW,Min_Cap_Discharge_AC_MW,Min_Cap_Charge_DC_MW,Min_Cap_Discharge_DC_MW,Min_Cap_Solar_MW,Min_Cap_Wind_MW,Inv_Cost_Discharge_DC_per_MWyr,Inv_Cost_Charge_DC_per_MWyr,Inv_Cost_Discharge_AC_per_MWyr,Inv_Cost_Charge_AC_per_MWyr,Fixed_OM_Cost_Discharge_DC_per_MWyr,Fixed_OM_Cost_Charge_DC_per_MWyr,Fixed_OM_Cost_Discharge_AC_per_MWyr,Fixed_OM_Cost_Charge_AC_per_MWyr,Var_OM_Cost_per_MWh_Solar,Var_OM_Cost_per_MWh_Wind,Var_OM_Cost_per_MWh_Charge_AC,Var_OM_Cost_per_MWh_Discharge_AC,Max_Cap_Inverter_MW,Max_Cap_Charge_AC_MW,Max_Cap_Discharge_AC_MW,Max_Cap_Charge_DC_MW,Max_Cap_Discharge_DC_MW,Max_Cap_Solar_MW,Max_Cap_Wind_MW,Inverter_Ratio_Wind,Inverter_Ratio_Solar,Var_OM_Cost_per_MWh_Charge_DC,Var_OM_Cost_per_MWh_Discharge_DC,Eff_Up_DC,Eff_Down_DC,Eff_Up_AC,Eff_Down_AC,EtaInverter,Power_to_Energy_DC,Power_to_Energy_AC -EIC,EIC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,61,1,1,0.95,0,0,0,0,0,0,0,0,standalone_storage,0,7522,0,0,1875,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,62,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,117315.5,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,63,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56817,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,139803.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,64,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,114313.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,65,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,81237.6,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,66,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,81092.2,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,67,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,54453.3,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,68,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,82417.2,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,69,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,26531.1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,70,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56817,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,58187.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,71,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,194921.8,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,72,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1351663.04,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,73,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,787394.14,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,74,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1683583.59,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,75,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1148387.24,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,76,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,2254699.98,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,77,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,879389.55,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,78,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1998829.95,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,79,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1123362.89,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,80,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,2501477.94,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -EIC,EIC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,81,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_pv,22706,7522,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,326479.4,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,127,2,1,0,0,0,0,0,0,0,0.95,0,standalone_storage,0,7303,0,0,1875,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,128,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41880,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,20796.6,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,129,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41880,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,27529.5,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,130,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41881,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,22035.5,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,131,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41881,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,22639.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,132,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41881,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,21021.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,133,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41880,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,21153.5,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,134,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41881,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,32345.3,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,135,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41880,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,12398.9,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,136,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41880,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,34789.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,137,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_wind,0,7303,41881,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,2448.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,138,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,249716.61,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,139,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,150550.53,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,140,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,340227.68,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,141,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,232869.52,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,142,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,409644.17,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,143,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,224977.87,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,144,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,393113.89,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,145,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,248585.87,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,146,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,124347.08,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -TRE,TRE_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,147,2,1,0,0,0,0,0,0,0,0.95,0,hybrid_pv,21612,7303,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,477756.89,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,193,3,1,0,0,0,0,0,0,0,0,0.95,standalone_storage,0,7609,0,0,1875,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,194,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74338,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,109860.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,195,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74338,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,47257.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,196,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74337,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,88662.6,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,197,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74338,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,40824.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,198,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74337,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,109163.8,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,199,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74337,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,25095.7,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,200,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74337,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,100227,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,201,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74337,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,34790.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,202,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74338,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,64367.5,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,203,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_wind,0,7609,74338,0,1875,36613,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,77014.4,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,204,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,775652.15,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,205,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,207870.65,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,206,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1143504.83,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,207,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,35742.72,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,208,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1185544.36,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,209,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,31049.98,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,210,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1023622.34,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,211,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,82238,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,212,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,1134234.27,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 -WECC,WECC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,213,3,1,0,0,0,0,0,0,0,0,0.95,hybrid_pv,23643,7609,0,12550,1875,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,94348.41,-1,-1,-1,0.15,0.15,0.65,0.65,0.65,0.65,0.967,0.005,0.005 \ No newline at end of file diff --git a/test/runtests.jl b/test/runtests.jl index fedf4b986d..94099304ea 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -53,24 +53,3 @@ end include("test_compute_conflicts.jl") end end - - @testset "PiecewiseFuel CO2" begin - include("test_piecewisefuel_CO2.jl") - end - - @testset "VRE and storage" begin - include("test_VREStor.jl") - end - - @testset "Electrolyzer" begin - include("test_electrolyzer.jl") - end - - @testset "Method of Morris" begin - include("test_methodofmorris.jl") - end - - @testset "Multi Stage" begin - include("test_multistage.jl") - end -end \ No newline at end of file diff --git a/test/test_VREStor.jl b/test/test_VREStor.jl index 9016b5be8b..1e9f62583a 100644 --- a/test/test_VREStor.jl +++ b/test/test_VREStor.jl @@ -27,9 +27,6 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "dual_feasibility_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance -# Round the objective value to the same number of digits as the tolerance -obj_test = round_objfromtol!(obj_test, optimal_tol) - # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_electrolyzer.jl b/test/test_electrolyzer.jl index 497938a4ac..6472cbf96e 100644 --- a/test/test_electrolyzer.jl +++ b/test/test_electrolyzer.jl @@ -25,9 +25,6 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "ipm_optimality_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance -# Round the objective value to the same number of digits as the tolerance -obj_test = round_objfromtol!(obj_test, optimal_tol) - # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_methodofmorris.jl b/test/test_methodofmorris.jl deleted file mode 100644 index bcf39cc5ff..0000000000 --- a/test/test_methodofmorris.jl +++ /dev/null @@ -1,59 +0,0 @@ -module TestMethodOfMorris - -using Test - -include(joinpath(@__DIR__, "utilities.jl")) - -test_path = "MethodofMorris" - -# Define test inputs -genx_setup = Dict( - "PrintModel" => 0, - "NetworkExpansion" => 0, - "Trans_Loss_Segments" => 1, - "Reserves" => 0, - "EnergyShareRequirement" => 0, - "CapacityReserveMargin" => 0, - "CO2Cap" => 0, - "StorageLosses" => 1, - "MinCapReq" => 0, - "MaxCapReq" => 0, - "Solver" => "HiGHS", - "ParameterScale" => 1, - "WriteShadowPrices" => 1, - "UCommit" => 0, - "TimeDomainReductionFolder" => "TDR_Results", - "TimeDomainReduction" => 0, - "ModelingToGenerateAlternatives" => 0, - "ModelingtoGenerateAlternativeSlack" => 0.1, - "ModelingToGenerateAlternativeIterations" => 3, - "MethodofMorris" => 1, - "EnableJuMPStringNames" => false, - "MultiStage" => 0, - "IncludeLossesInESR" => 0, -) - -# Run the case and check if the model was built -built = false -try - Morris_range = redirect_stdout(devnull) do - EP, inputs, OPTIMIZER = run_genx_case_testing(test_path, genx_setup) - morris(EP, test_path, genx_setup, inputs, test_path, OPTIMIZER) - rm(joinpath(@__DIR__, test_path, "morris.csv")) - end - #TODO: test Morris range - built = true - -catch BoundsError -end - -@static if VERSION ≥ VersionNumber(1, 7) - test_result = Test.@test built broken = true -else - test_result = built ? "Test Passed" : "Test Failed" -end - -# Add the results to the test log -write_testlog(test_path, "Build and Run", test_result) - -end # module TestMethodOfMorris diff --git a/test/test_multistage.jl b/test/test_multistage.jl index 97afebf502..ea7f1b646b 100644 --- a/test/test_multistage.jl +++ b/test/test_multistage.jl @@ -40,9 +40,6 @@ optimal_tol_rel = ) optimal_tol = optimal_tol_rel .* obj_test # Convert to absolute tolerance -# Round the objective value to the same number of digits as the tolerance -obj_test = round_objfromtol!.(obj_test, optimal_tol) - # Test the objective value test_result = @test all(obj_true .- optimal_tol .<= obj_test .<= obj_true .+ optimal_tol) diff --git a/test/test_piecewisefuel_CO2.jl b/test/test_piecewisefuel_CO2.jl index b285373462..d7d0e8e2c8 100644 --- a/test/test_piecewisefuel_CO2.jl +++ b/test/test_piecewisefuel_CO2.jl @@ -21,9 +21,6 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "dual_feasibility_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance -# Round the objective value to the same number of digits as the tolerance -obj_test = round_objfromtol!(obj_test, optimal_tol) - # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_threezones.jl b/test/test_threezones.jl index adcbe94413..4489d4487b 100644 --- a/test/test_threezones.jl +++ b/test/test_threezones.jl @@ -26,9 +26,6 @@ obj_test = objective_value(EP) optimal_tol_rel = get_attribute(EP, "ipm_optimality_tolerance") optimal_tol = optimal_tol_rel * obj_test # Convert to absolute tolerance -# Round the objective value to the same number of digits as the tolerance -obj_test = round_objfromtol!(obj_test, optimal_tol) - # Test the objective value test_result = @test obj_test ≈ obj_true atol = optimal_tol diff --git a/test/test_utilities.jl b/test/test_utilities.jl deleted file mode 100644 index 38ef32de0a..0000000000 --- a/test/test_utilities.jl +++ /dev/null @@ -1,39 +0,0 @@ -module TestUtilities - -using Test - -include(joinpath(@__DIR__, "utilities.jl")) - -@testset "get_exponent_sciform" begin - @test get_exponent_sciform(0) == 0 - @test get_exponent_sciform(0.005) == -3 - @test get_exponent_sciform(0.0531) == -2 - @test get_exponent_sciform(1) == 0 - @test get_exponent_sciform(1.0000) == 0 - @test get_exponent_sciform(1.0005) == 0 - @test get_exponent_sciform(64.000) == 1 - @test get_exponent_sciform(64.03) == 1 - @test get_exponent_sciform(100) == 2 -end - -@testset "round_objfromtol" begin - @test round_objfromtol!(0, 0) == 0 - @test round_objfromtol!(0.005, 1) == 0 - @test round_objfromtol!(0.005, 0.1) == 0.0 - @test round_objfromtol!(0.005, 0.01) == 0.0 - @test round_objfromtol!(0.005, 0.001) == 0.005 - @test round_objfromtol!(0.005, 0.0001) == 0.005 - @test round_objfromtol!(1.005, 1) == 1 - @test round_objfromtol!(1.005, 0.1) == 1.0 - @test round_objfromtol!(1.005, 0.01) == 1.0 - @test round_objfromtol!(1.005, 0.001) == 1.005 - @test round_objfromtol!(2.006, 0.01) == 2.01 - @test round_objfromtol!(10.65, 10) == 10 - @test round_objfromtol!(10.65, 1) == 11 - @test round_objfromtol!(10.65, 0.1) == 10.6 - @test round_objfromtol!(10.65, 0.01) == 10.65 - @test round_objfromtol!(10.65, 0.001) == 10.65 -end - - -end # module TestUtilities \ No newline at end of file