From 448d724bef12f9a1755a7ee4b42a6350d2d0a350 Mon Sep 17 00:00:00 2001 From: Luca Bonaldo <39280783+lbonaldo@users.noreply.github.com> Date: Wed, 14 Feb 2024 20:52:32 -0500 Subject: [PATCH] Split of Generators_data.csv (#612) This PR splits Generators_data.csv into a set of input files, one for each type of generator. This allows each file to contain only the attributes related to the specific type of generator for which it is meant. Each resource is now an instance of a Julia type. --- .gitignore | 4 +- CHANGELOG.md | 4 + .../Electrolyzer_Example/Generators_data.csv | 7 - .../Resources/Electrolyzer.csv | 2 + .../Resources/Storage.csv | 3 + .../Resources/Thermal.csv | 2 + .../Electrolyzer_Example/Resources/Vre.csv | 3 + .../OneZone/Generators_data.csv | 5 - .../OneZone/Resources/Storage.csv | 2 + .../OneZone/Resources/Thermal.csv | 2 + .../OneZone/Resources/Vre.csv | 3 + .../Generators_data.csv | 4 - .../Resources/Thermal.csv | 3 + .../Resources/Vre.csv | 2 + .../ProprietarySolver/Generators_data.csv | 5 - .../Resource_capacity_reserve_margin.csv | 5 + .../Resource_maximum_capacity_requirement.csv | 4 + .../ProprietarySolver/Resources/Storage.csv | 2 + .../ProprietarySolver/Resources/Thermal.csv | 2 + .../ProprietarySolver/Resources/Vre.csv | 3 + .../ISONE_Singlezone/Generators_data.csv | 59 - .../Resources/Flex_demand.csv | 4 + .../ISONE_Singlezone/Resources/Hydro.csv | 4 + .../ISONE_Singlezone/Resources/Must_run.csv | 4 + .../Resource_capacity_reserve_margin.csv | 59 + .../Resource_energy_share_requirement.csv | 27 + .../Resource_minimum_capacity_requirement.csv | 9 + .../ISONE_Singlezone/Resources/Storage.csv | 6 + .../ISONE_Singlezone/Resources/Thermal.csv | 30 + .../ISONE_Singlezone/Resources/Vre.csv | 16 + .../Energy_share_requirement.csv | 2 +- .../ISONE_Trizone/Generators_data.csv | 62 - .../ISONE_Trizone/Resources/Flex_demand.csv | 4 + .../ISONE_Trizone/Resources/Hydro.csv | 4 + .../ISONE_Trizone/Resources/Must_run.csv | 4 + .../Resource_capacity_reserve_margin.csv | 62 + .../Resource_energy_share_requirement.csv | 27 + .../Resource_minimum_capacity_requirement.csv | 9 + .../ISONE_Trizone/Resources/Storage.csv | 9 + .../ISONE_Trizone/Resources/Thermal.csv | 30 + .../ISONE_Trizone/Resources/Vre.csv | 16 + .../Generators_data.csv | 59 - .../Resources/Flex_demand.csv | 4 + .../Resources/Hydro.csv | 4 + .../Resources/Must_run.csv | 4 + .../Resource_capacity_reserve_margin.csv | 59 + .../Resource_energy_share_requirement.csv | 27 + .../Resource_minimum_capacity_requirement.csv | 9 + .../Resources/Storage.csv | 6 + .../Resources/Thermal.csv | 30 + .../Resources/Vre.csv | 16 + .../Inputs/Inputs_p1/Generators_data.csv | 59 - .../Inputs_p1/Resources/Flex_demand.csv | 4 + .../Inputs/Inputs_p1/Resources/Hydro.csv | 4 + .../Inputs/Inputs_p1/Resources/Must_run.csv | 4 + .../Resources/Resource_multistage_data.csv | 59 + .../Inputs/Inputs_p1/Resources/Storage.csv | 6 + .../Inputs/Inputs_p1/Resources/Thermal.csv | 30 + .../Inputs/Inputs_p1/Resources/Vre.csv | 16 + .../Inputs/Inputs_p2/Generators_data.csv | 59 - .../Inputs_p2/Resources/Flex_demand.csv | 4 + .../Inputs/Inputs_p2/Resources/Hydro.csv | 4 + .../Inputs/Inputs_p2/Resources/Must_run.csv | 4 + .../Resources/Resource_multistage_data.csv | 59 + .../Inputs/Inputs_p2/Resources/Storage.csv | 6 + .../Inputs/Inputs_p2/Resources/Thermal.csv | 30 + .../Inputs/Inputs_p2/Resources/Vre.csv | 16 + .../Inputs/Inputs_p3/Generators_data.csv | 59 - .../Inputs_p3/Resources/Flex_demand.csv | 4 + .../Inputs/Inputs_p3/Resources/Hydro.csv | 4 + .../Inputs/Inputs_p3/Resources/Must_run.csv | 4 + .../Resources/Resource_multistage_data.csv | 59 + .../Inputs/Inputs_p3/Resources/Storage.csv | 6 + .../Inputs/Inputs_p3/Resources/Thermal.csv | 30 + .../Inputs/Inputs_p3/Resources/Vre.csv | 16 + .../.~lock.Fuels_data_clustered.csv# | 1 - .../Generators_data.csv | 59 - .../Resources/Flex_demand.csv | 4 + .../Resources/Hydro.csv | 4 + .../Resources/Must_run.csv | 4 + .../Resource_capacity_reserve_margin.csv | 59 + .../Resource_energy_share_requirement.csv | 27 + .../Resource_minimum_capacity_requirement.csv | 9 + .../Resources/Storage.csv | 6 + .../Resources/Thermal.csv | 30 + .../Resources/Vre.csv | 16 + .../Inputs/Inputs_p1/Generators_data.csv | 18 - .../Inputs/Inputs_p1/Resources/Hydro.csv | 2 + .../Inputs/Inputs_p1/Resources/Must_run.csv | 3 + .../Resources/Resource_multistage_data.csv | 18 + .../Inputs/Inputs_p1/Resources/Storage.csv | 4 + .../Inputs/Inputs_p1/Resources/Thermal.csv | 12 + .../Inputs/Inputs_p1/Resources/Vre.csv | 3 + .../Inputs/Inputs_p2/Generators_data.csv | 18 - .../Inputs/Inputs_p2/Resources/Hydro.csv | 2 + .../Inputs/Inputs_p2/Resources/Must_run.csv | 3 + .../Resources/Resource_multistage_data.csv | 18 + .../Inputs/Inputs_p2/Resources/Storage.csv | 4 + .../Inputs/Inputs_p2/Resources/Thermal.csv | 12 + .../Inputs/Inputs_p2/Resources/Vre.csv | 3 + .../Inputs/Inputs_p3/Generators_data.csv | 18 - .../Inputs/Inputs_p3/Resources/Hydro.csv | 2 + .../Inputs/Inputs_p3/Resources/Must_run.csv | 3 + .../Resources/Resource_multistage_data.csv | 18 + .../Inputs/Inputs_p3/Resources/Storage.csv | 4 + .../Inputs/Inputs_p3/Resources/Thermal.csv | 12 + .../Inputs/Inputs_p3/Resources/Vre.csv | 3 + .../RetrofitExample_MultiStage/README.txt | 2 +- .../OneZone/Generators_data.csv | 5 - .../Resource_capacity_reserve_margin.csv | 5 + .../Resource_energy_share_requirement.csv | 4 + .../Resource_maximum_capacity_requirement.csv | 4 + .../Resource_minimum_capacity_requirement.csv | 4 + .../OneZone/Resources/Storage.csv | 2 + .../OneZone/Resources/Thermal.csv | 2 + .../SmallNewEngland/OneZone/Resources/Vre.csv | 3 + .../OneZone_3VREBin/Generators_data.csv | 7 - .../SmallNewEngland/OneZone_3VREBin/README.md | 2 +- .../OneZone_3VREBin/Resources/Storage.csv | 2 + .../OneZone_3VREBin/Resources/Thermal.csv | 2 + .../OneZone_3VREBin/Resources/Vre.csv | 5 + .../Inputs/Inputs_p1/Generators_data.csv | 5 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs/Inputs_p1/Resources/Storage.csv | 2 + .../Inputs/Inputs_p1/Resources/Thermal.csv | 2 + .../Inputs/Inputs_p1/Resources/Vre.csv | 3 + .../Inputs/Inputs_p2/Generators_data.csv | 5 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs/Inputs_p2/Resources/Storage.csv | 2 + .../Inputs/Inputs_p2/Resources/Thermal.csv | 2 + .../Inputs/Inputs_p2/Resources/Vre.csv | 3 + .../Inputs/Inputs_p3/Generators_data.csv | 5 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs/Inputs_p3/Resources/Storage.csv | 2 + .../Inputs/Inputs_p3/Resources/Thermal.csv | 2 + .../Inputs/Inputs_p3/Resources/Vre.csv | 3 + .../OneZone_MultiStage/README.md | 2 +- .../Simple_Test_Case/Generators_data.csv | 5 - .../Simple_Test_Case/Resources/Storage.csv | 2 + .../Simple_Test_Case/Resources/Thermal.csv | 2 + .../Simple_Test_Case/Resources/Vre.csv | 3 + .../Test_Down_Time/Generators_data.csv | 4 - .../Test_Down_Time/Resources/Storage.csv | 2 + .../Test_Down_Time/Resources/Thermal.csv | 2 + .../Test_Down_Time/Resources/Vre.csv | 2 + .../Test_Up_Time/Generators_data.csv | 4 - .../Test_Up_Time/Resources/Storage.csv | 2 + .../Test_Up_Time/Resources/Thermal.csv | 2 + .../Test_Up_Time/Resources/Vre.csv | 2 + .../ThreeZones/Generators_data.csv | 11 - .../Resource_minimum_capacity_requirement.csv | 11 + .../ThreeZones/Resources/Storage.csv | 4 + .../ThreeZones/Resources/Thermal.csv | 4 + .../ThreeZones/Resources/Vre.csv | 5 + .../Inputs/Inputs_p1/Generators_data.csv | 11 - .../Inputs/Inputs_p1/Resources/Storage.csv | 4 + .../Inputs/Inputs_p1/Resources/Thermal.csv | 4 + .../Inputs/Inputs_p1/Resources/Vre.csv | 5 + .../Inputs/Inputs_p2/Generators_data.csv | 11 - .../Inputs/Inputs_p2/Resources/Storage.csv | 4 + .../Inputs/Inputs_p2/Resources/Thermal.csv | 4 + .../Inputs/Inputs_p2/Resources/Vre.csv | 5 + .../Inputs/Inputs_p3/Generators_data.csv | 11 - .../Inputs/Inputs_p3/Resources/Storage.csv | 4 + .../Inputs/Inputs_p3/Resources/Thermal.csv | 4 + .../Inputs/Inputs_p3/Resources/Vre.csv | 5 + .../ThreeZones_MultiStage/README.md | 2 +- .../Generators_data.csv | 11 - .../Resources/Storage.csv | 4 + .../Resources/Thermal.csv | 4 + .../Resources/Vre.csv | 5 + .../VREStor_Example/Generators_data.csv | 272 --- .../VREStor_Example/Resources/Flex_demand.csv | 16 + .../VREStor_Example/Resources/Hydro.csv | 4 + .../VREStor_Example/Resources/Must_run.csv | 10 + .../Resource_capacity_reserve_margin.csv | 272 +++ .../Resource_maximum_capacity_requirement.csv | 2 + .../Resource_minimum_capacity_requirement.csv | 272 +++ .../VREStor_Example/Resources/Storage.csv | 9 + .../VREStor_Example/Resources/Thermal.csv | 46 + .../VREStor_Example/Resources/Vre.csv | 129 ++ .../VREStor_Example/Resources/Vre_stor.csv | 64 + README.md | 4 +- docs/make.jl | 3 +- docs/src/assets/type_hierarchy.png | Bin 0 -> 116425 bytes docs/src/data_documentation.md | 657 +++--- docs/src/developer_guide.md | 347 ++++ docs/src/how_to_run_genx.md | 4 +- docs/src/load_inputs.md | 2 +- docs/src/maintenance.md | 2 +- docs/src/multi_stage_model_overview.md | 4 +- docs/src/resource.md | 10 + src/GenX.jl | 6 + src/additional_tools/method_of_morris.jl | 9 +- .../modeling_to_generate_alternatives.jl | 22 +- src/configure_settings/configure_settings.jl | 3 +- src/load_inputs/load_dataframe.jl | 17 + src/load_inputs/load_generators_data.jl | 664 ------ .../load_generators_variability.jl | 4 +- src/load_inputs/load_inputs.jl | 4 +- src/load_inputs/load_multistage_data.jl | 22 + src/load_inputs/load_reserves.jl | 6 +- src/load_inputs/load_resources_data.jl | 1133 ++++++++++ src/load_inputs/load_vre_stor_variability.jl | 2 +- src/model/core/co2.jl | 30 +- src/model/core/discharge/discharge.jl | 8 +- .../core/discharge/investment_discharge.jl | 38 +- src/model/core/fuel.jl | 29 +- src/model/core/reserves.jl | 15 +- src/model/core/ucommit.jl | 4 - src/model/policies/co2_cap.jl | 3 - .../curtailable_variable_renewable.jl | 32 +- .../flexible_demand/flexible_demand.jl | 22 +- .../hydro/hydro_inter_period_linkage.jl | 9 +- src/model/resources/hydro/hydro_res.jl | 28 +- src/model/resources/hydrogen/electrolyzer.jl | 29 +- src/model/resources/must_run/must_run.jl | 8 +- src/model/resources/resources.jl | 989 +++++++-- src/model/resources/retrofits/retrofits.jl | 4 +- .../resources/storage/investment_charge.jl | 15 +- .../resources/storage/investment_energy.jl | 19 +- .../storage/long_duration_storage.jl | 14 +- src/model/resources/storage/storage.jl | 6 +- src/model/resources/storage/storage_all.jl | 40 +- .../resources/storage/storage_asymmetric.jl | 1 - src/model/resources/thermal/thermal.jl | 13 +- src/model/resources/thermal/thermal_commit.jl | 85 +- .../resources/thermal/thermal_no_commit.jl | 21 +- src/model/resources/vre_stor/vre_stor.jl | 431 ++-- src/model/utility.jl | 24 +- .../configure_multi_stage_inputs.jl | 49 +- src/multi_stage/endogenous_retirement.jl | 118 +- .../time_domain_reduction.jl | 12 +- .../effective_capacity.jl | 6 +- .../write_capacity_value.jl | 32 +- .../write_reserve_margin_revenue.jl | 39 +- .../write_reserve_margin_slack.jl | 2 +- .../write_virtual_discharge.jl | 8 +- .../write_esr_revenue.jl | 37 +- .../hydrogen/write_hourly_matching_prices.jl | 2 +- .../write_opwrap_lds_dstor.jl | 8 +- .../write_opwrap_lds_stor_init.jl | 8 +- .../write_operating_reserve_price_revenue.jl | 12 +- src/write_outputs/reserves/write_reg.jl | 7 +- src/write_outputs/reserves/write_rsv.jl | 7 +- .../transmission/write_transmission_flows.jl | 2 +- .../transmission/write_transmission_losses.jl | 2 +- src/write_outputs/ucommit/write_commit.jl | 8 +- src/write_outputs/ucommit/write_shutdown.jl | 8 +- src/write_outputs/ucommit/write_start.jl | 8 +- src/write_outputs/write_capacity.jl | 44 +- src/write_outputs/write_capacityfactor.jl | 10 +- src/write_outputs/write_charge.jl | 8 +- src/write_outputs/write_charging_cost.jl | 17 +- src/write_outputs/write_co2.jl | 14 +- src/write_outputs/write_costs.jl | 12 +- src/write_outputs/write_curtailment.jl | 12 +- src/write_outputs/write_emissions.jl | 5 +- src/write_outputs/write_energy_revenue.jl | 12 +- src/write_outputs/write_fuel_consumption.jl | 14 +- src/write_outputs/write_net_revenue.jl | 65 +- src/write_outputs/write_nse.jl | 3 +- src/write_outputs/write_power.jl | 8 +- src/write_outputs/write_power_balance.jl | 20 +- src/write_outputs/write_price.jl | 2 +- src/write_outputs/write_reliability.jl | 2 +- src/write_outputs/write_storage.jl | 8 +- src/write_outputs/write_storagedual.jl | 7 +- src/write_outputs/write_subsidy_revenue.jl | 50 +- src/write_outputs/write_vre_stor.jl | 67 +- test/ComputeConflicts/Generators_data.csv | 5 - test/ComputeConflicts/Resources/Storage.csv | 2 + test/ComputeConflicts/Resources/Thermal.csv | 2 + test/ComputeConflicts/Resources/Vre.csv | 3 + test/Electrolyzer/Generators_data.csv | 7 - test/Electrolyzer/Generators_variability.csv | 242 +-- test/Electrolyzer/Resources/Electrolyzer.csv | 2 + .../Resource_energy_share_requirement.csv | 4 + test/Electrolyzer/Resources/Storage.csv | 3 + test/Electrolyzer/Resources/Thermal.csv | 2 + test/Electrolyzer/Resources/Vre.csv | 3 + .../test_gen_non_colocated/CO2_cap.csv | 4 + .../Capacity_reserve_margin.csv | 4 + .../test_gen_non_colocated/Demand_data.csv | 481 +++++ .../Energy_share_requirement.csv | 4 + .../test_gen_non_colocated/Fuels_data.csv | 482 +++++ .../Generators_variability.csv | 481 +++++ .../Minimum_capacity_requirement.csv | 4 + .../test_gen_non_colocated/Network.csv | 4 + .../test_gen_non_colocated/Period_map.csv | 92 + .../test_gen_non_colocated/Reserves.csv | 2 + .../Resources/Electrolyzer.csv | 2 + .../Resources/Flex_demand.csv | 4 + .../Resources/Hydro.csv | 4 + .../Resources/Must_run.csv | 4 + .../Resource_capacity_reserve_margin.csv | 56 + .../Resource_energy_share_requirement.csv | 28 + .../Resource_minimum_capacity_requirement.csv | 9 + .../Resources/Resource_multistage_data.csv | 63 + .../Resources/Storage.csv | 9 + .../Resources/Thermal.csv | 30 + .../test_gen_non_colocated/Resources/Vre.csv | 16 + .../Settings/genx_settings.yml | 12 + .../Settings/highs_settings.yml | 13 + .../time_domain_reduction_settings.yml | 25 +- .../generators_data.csv | 63 + .../inputs_after_loadgen.jld2 | Bin 0 -> 1257989 bytes .../inputs_before_loadgen.jld2 | Bin 0 -> 95662 bytes .../test_gen_vre_stor/CO2_cap.csv | 4 + .../Capacity_reserve_margin.csv | 4 + .../test_gen_vre_stor/Demand_data.csv | 25 + .../Energy_share_requirement.csv | 4 + .../test_gen_vre_stor/Fuels_data.csv | 26 + .../Generators_variability.csv | 25 + .../Maximum_capacity_requirement.csv | 4 + .../Minimum_capacity_requirement.csv | 4 + .../test_gen_vre_stor/Network.csv | 4 + .../test_gen_vre_stor/Reserves.csv | 2 + .../Resources/Flex_demand.csv | 16 + .../test_gen_vre_stor/Resources/Hydro.csv | 4 + .../test_gen_vre_stor/Resources/Must_run.csv | 10 + .../Resource_capacity_reserve_margin.csv | 272 +++ .../Resource_energy_share_requirement.csv | 2 + .../Resource_maximum_capacity_requirement.csv | 2 + .../Resource_minimum_capacity_requirement.csv | 2 + .../test_gen_vre_stor/Resources/Storage.csv | 9 + .../test_gen_vre_stor/Resources/Thermal.csv | 46 + .../test_gen_vre_stor/Resources/Vre.csv | 129 ++ .../test_gen_vre_stor/Resources/Vre_stor.csv | 64 + .../Settings/genx_settings.yml | 12 + .../Settings/highs_settings.yml | 13 + .../time_domain_reduction_settings.yml | 59 + .../test_gen_vre_stor}/Vre_and_stor_data.csv | 128 +- .../Vre_and_stor_solar_variability.csv | 25 + .../Vre_and_stor_wind_variability.csv | 25 + .../test_gen_vre_stor/generators_data.csv | 272 +++ .../inputs_after_loadgen.jld2 | Bin 0 -> 5334016 bytes .../inputs_before_loadgen.jld2 | Bin 0 -> 18636 bytes .../Inputs_p1/Capacity_reserve_margin.csv | 2 - .../Inputs_p1/Energy_share_requirement.csv | 2 - .../Can_Retire/Inputs_p1/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p1/Resources/Storage.csv | 2 + .../Inputs_p1/Resources/Thermal.csv | 2 + .../Can_Retire/Inputs_p1/Resources/Vre.csv | 3 + .../Inputs_p2/Capacity_reserve_margin.csv | 2 - .../Inputs_p2/Energy_share_requirement.csv | 2 - .../Can_Retire/Inputs_p2/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p2/Resources/Storage.csv | 2 + .../Inputs_p2/Resources/Thermal.csv | 2 + .../Can_Retire/Inputs_p2/Resources/Vre.csv | 3 + .../Inputs_p3/Capacity_reserve_margin.csv | 2 - .../Inputs_p3/Energy_share_requirement.csv | 2 - .../Can_Retire/Inputs_p3/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p3/Resources/Storage.csv | 2 + .../Inputs_p3/Resources/Thermal.csv | 2 + .../Can_Retire/Inputs_p3/Resources/Vre.csv | 3 + .../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 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p1/Resources/Storage.csv | 2 + .../Inputs_p1/Resources/Thermal.csv | 2 + test/MultiStage/Inputs_p1/Resources/Vre.csv | 3 + .../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 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p2/Resources/Storage.csv | 2 + .../Inputs_p2/Resources/Thermal.csv | 2 + test/MultiStage/Inputs_p2/Resources/Vre.csv | 3 + .../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 - .../Resources/Resource_multistage_data.csv | 5 + .../Inputs_p3/Resources/Storage.csv | 2 + .../Inputs_p3/Resources/Thermal.csv | 2 + test/MultiStage/Inputs_p3/Resources/Vre.csv | 3 + .../Inputs_p1/Capacity_reserve_margin.csv | 2 - .../Inputs_p1/Energy_share_requirement.csv | 2 - .../New_Build/Inputs_p1/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../New_Build/Inputs_p1/Resources/Storage.csv | 2 + .../New_Build/Inputs_p1/Resources/Thermal.csv | 2 + .../New_Build/Inputs_p1/Resources/Vre.csv | 3 + .../Inputs_p2/Capacity_reserve_margin.csv | 2 - .../Inputs_p2/Energy_share_requirement.csv | 2 - .../New_Build/Inputs_p2/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../New_Build/Inputs_p2/Resources/Storage.csv | 2 + .../New_Build/Inputs_p2/Resources/Thermal.csv | 2 + .../New_Build/Inputs_p2/Resources/Vre.csv | 3 + .../Inputs_p3/Capacity_reserve_margin.csv | 2 - .../Inputs_p3/Energy_share_requirement.csv | 2 - .../New_Build/Inputs_p3/Generators_data.csv | 5 - .../Minimum_capacity_requirement.csv | 4 - .../Resources/Resource_multistage_data.csv | 5 + .../New_Build/Inputs_p3/Resources/Storage.csv | 2 + .../New_Build/Inputs_p3/Resources/Thermal.csv | 2 + .../New_Build/Inputs_p3/Resources/Vre.csv | 3 + test/PiecewiseFuel_CO2/Generators_data.csv | 4 - test/PiecewiseFuel_CO2/Resources/Thermal.csv | 3 + test/PiecewiseFuel_CO2/Resources/Vre.csv | 2 + test/TDR/Generators_data.csv | 5 - .../Resource_capacity_reserve_margin.csv | 5 + .../Resource_energy_share_requirement.csv | 3 + .../Resource_maximum_capacity_requirement.csv | 4 + .../Resource_minimum_capacity_requirement.csv | 4 + test/TDR/Resources/Storage.csv | 2 + test/TDR/Resources/Thermal.csv | 2 + test/TDR/Resources/Vre.csv | 3 + test/TDR/TDR_Results_test/Demand_data.csv | 1849 ---------------- test/TDR/TDR_Results_test/Fuels_data.csv | 1850 ----------------- .../Generators_variability.csv | 1849 ---------------- test/TDR/TDR_Results_test/Period_map.csv | 53 - test/ThreeZones/Capacity_reserve_margin.csv | 4 - test/ThreeZones/Energy_share_requirement.csv | 4 - test/ThreeZones/Generators_data.csv | 11 - .../Resource_minimum_capacity_requirement.csv | 11 + test/ThreeZones/Resources/Storage.csv | 4 + test/ThreeZones/Resources/Thermal.csv | 4 + test/ThreeZones/Resources/Vre.csv | 5 + test/VREStor/Generators_data.csv | 272 --- test/VREStor/Resources/Flex_demand.csv | 16 + test/VREStor/Resources/Hydro.csv | 4 + test/VREStor/Resources/Must_run.csv | 10 + .../Resource_capacity_reserve_margin.csv | 272 +++ .../Resource_maximum_capacity_requirement.csv | 2 + .../Resource_minimum_capacity_requirement.csv | 272 +++ test/VREStor/Resources/Storage.csv | 9 + test/VREStor/Resources/Thermal.csv | 46 + test/VREStor/Resources/Vre.csv | 129 ++ test/VREStor/Resources/Vre_stor.csv | 64 + test/VREStor/Vre_and_stor_data.csv | 64 - test/runtests.jl | 18 +- test/test_VREStor.jl | 2 +- test/test_electrolyzer.jl | 1 + test/test_load_resource_data.jl | 445 ++++ test/test_multistage.jl | 7 +- test/test_threezones.jl | 2 +- test/test_time_domain_reduction.jl | 3 +- test/utilities.jl | 64 +- 452 files changed, 10534 insertions(+), 9074 deletions(-) delete mode 100644 Example_Systems/Electrolyzer_Example/Generators_data.csv create mode 100644 Example_Systems/Electrolyzer_Example/Resources/Electrolyzer.csv create mode 100644 Example_Systems/Electrolyzer_Example/Resources/Storage.csv create mode 100644 Example_Systems/Electrolyzer_Example/Resources/Thermal.csv create mode 100644 Example_Systems/Electrolyzer_Example/Resources/Vre.csv delete mode 100644 Example_Systems/MethodofMorrisExample/OneZone/Generators_data.csv create mode 100644 Example_Systems/MethodofMorrisExample/OneZone/Resources/Storage.csv create mode 100644 Example_Systems/MethodofMorrisExample/OneZone/Resources/Thermal.csv create mode 100644 Example_Systems/MethodofMorrisExample/OneZone/Resources/Vre.csv delete mode 100644 Example_Systems/PiecewiseFuel_CO2_Example/Generators_data.csv create mode 100644 Example_Systems/PiecewiseFuel_CO2_Example/Resources/Thermal.csv create mode 100644 Example_Systems/PiecewiseFuel_CO2_Example/Resources/Vre.csv delete mode 100644 Example_Systems/ProprietarySolver/Generators_data.csv create mode 100644 Example_Systems/ProprietarySolver/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/ProprietarySolver/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 Example_Systems/ProprietarySolver/Resources/Storage.csv create mode 100644 Example_Systems/ProprietarySolver/Resources/Thermal.csv create mode 100644 Example_Systems/ProprietarySolver/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_energy_share_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_energy_share_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv delete mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv delete mode 100755 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/.~lock.Fuels_data_clustered.csv# delete mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Generators_data.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Hydro.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Must_run.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Storage.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Thermal.csv create mode 100644 Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Vre.csv delete mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Generators_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv delete mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Generators_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv delete mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Generators_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv create mode 100644 Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/OneZone/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Resource_energy_share_requirement.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/OneZone_3VREBin/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/Simple_Test_Case/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/Test_Down_Time/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/Test_Up_Time/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/ThreeZones/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv delete mode 100644 Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Generators_data.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Storage.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Thermal.csv create mode 100644 Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Vre.csv delete mode 100644 Example_Systems/VREStor_Example/Generators_data.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Flex_demand.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Hydro.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Must_run.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Resource_capacity_reserve_margin.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Storage.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Thermal.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Vre.csv create mode 100644 Example_Systems/VREStor_Example/Resources/Vre_stor.csv create mode 100644 docs/src/assets/type_hierarchy.png create mode 100644 docs/src/developer_guide.md create mode 100644 docs/src/resource.md delete mode 100644 src/load_inputs/load_generators_data.jl create mode 100644 src/load_inputs/load_multistage_data.jl create mode 100644 src/load_inputs/load_resources_data.jl delete mode 100644 test/ComputeConflicts/Generators_data.csv create mode 100644 test/ComputeConflicts/Resources/Storage.csv create mode 100644 test/ComputeConflicts/Resources/Thermal.csv create mode 100644 test/ComputeConflicts/Resources/Vre.csv delete mode 100644 test/Electrolyzer/Generators_data.csv create mode 100644 test/Electrolyzer/Resources/Electrolyzer.csv create mode 100644 test/Electrolyzer/Resources/Resource_energy_share_requirement.csv create mode 100644 test/Electrolyzer/Resources/Storage.csv create mode 100644 test/Electrolyzer/Resources/Thermal.csv create mode 100644 test/Electrolyzer/Resources/Vre.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/CO2_cap.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Capacity_reserve_margin.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Demand_data.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Energy_share_requirement.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Fuels_data.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Generators_variability.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Minimum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Network.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Period_map.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Reserves.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Electrolyzer.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Flex_demand.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Hydro.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Must_run.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Resource_capacity_reserve_margin.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Resource_energy_share_requirement.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Resource_multistage_data.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Storage.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Resources/Vre.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/Settings/genx_settings.yml create mode 100644 test/LoadResourceData/test_gen_non_colocated/Settings/highs_settings.yml rename test/{TDR/TDR_Results_test => LoadResourceData/test_gen_non_colocated/Settings}/time_domain_reduction_settings.yml (89%) create mode 100644 test/LoadResourceData/test_gen_non_colocated/generators_data.csv create mode 100644 test/LoadResourceData/test_gen_non_colocated/inputs_after_loadgen.jld2 create mode 100644 test/LoadResourceData/test_gen_non_colocated/inputs_before_loadgen.jld2 create mode 100644 test/LoadResourceData/test_gen_vre_stor/CO2_cap.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Capacity_reserve_margin.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Demand_data.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Energy_share_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Fuels_data.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Generators_variability.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Maximum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Minimum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Network.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Reserves.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Flex_demand.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Hydro.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Must_run.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Resource_capacity_reserve_margin.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Resource_energy_share_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Storage.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Thermal.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Vre.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Resources/Vre_stor.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Settings/genx_settings.yml create mode 100644 test/LoadResourceData/test_gen_vre_stor/Settings/highs_settings.yml create mode 100644 test/LoadResourceData/test_gen_vre_stor/Settings/time_domain_reduction_settings.yml rename {Example_Systems/VREStor_Example => test/LoadResourceData/test_gen_vre_stor}/Vre_and_stor_data.csv (53%) create mode 100644 test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_solar_variability.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_wind_variability.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/generators_data.csv create mode 100644 test/LoadResourceData/test_gen_vre_stor/inputs_after_loadgen.jld2 create mode 100644 test/LoadResourceData/test_gen_vre_stor/inputs_before_loadgen.jld2 delete mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Generators_data.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Resources/Storage.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Resources/Thermal.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p1/Resources/Vre.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Generators_data.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Resources/Storage.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Resources/Thermal.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p2/Resources/Vre.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Energy_share_requirement.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Generators_data.csv delete mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Resources/Storage.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Resources/Thermal.csv create mode 100644 test/MultiStage/Can_Retire/Inputs_p3/Resources/Vre.csv 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 create mode 100644 test/MultiStage/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Inputs_p1/Resources/Storage.csv create mode 100644 test/MultiStage/Inputs_p1/Resources/Thermal.csv create mode 100644 test/MultiStage/Inputs_p1/Resources/Vre.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 create mode 100644 test/MultiStage/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Inputs_p2/Resources/Storage.csv create mode 100644 test/MultiStage/Inputs_p2/Resources/Thermal.csv create mode 100644 test/MultiStage/Inputs_p2/Resources/Vre.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 create mode 100644 test/MultiStage/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/Inputs_p3/Resources/Storage.csv create mode 100644 test/MultiStage/Inputs_p3/Resources/Thermal.csv create mode 100644 test/MultiStage/Inputs_p3/Resources/Vre.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p1/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p1/Energy_share_requirement.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p1/Generators_data.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p1/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/New_Build/Inputs_p1/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/New_Build/Inputs_p1/Resources/Storage.csv create mode 100644 test/MultiStage/New_Build/Inputs_p1/Resources/Thermal.csv create mode 100644 test/MultiStage/New_Build/Inputs_p1/Resources/Vre.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p2/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p2/Energy_share_requirement.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p2/Generators_data.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p2/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/New_Build/Inputs_p2/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/New_Build/Inputs_p2/Resources/Storage.csv create mode 100644 test/MultiStage/New_Build/Inputs_p2/Resources/Thermal.csv create mode 100644 test/MultiStage/New_Build/Inputs_p2/Resources/Vre.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p3/Capacity_reserve_margin.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p3/Energy_share_requirement.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p3/Generators_data.csv delete mode 100644 test/MultiStage/New_Build/Inputs_p3/Minimum_capacity_requirement.csv create mode 100644 test/MultiStage/New_Build/Inputs_p3/Resources/Resource_multistage_data.csv create mode 100644 test/MultiStage/New_Build/Inputs_p3/Resources/Storage.csv create mode 100644 test/MultiStage/New_Build/Inputs_p3/Resources/Thermal.csv create mode 100644 test/MultiStage/New_Build/Inputs_p3/Resources/Vre.csv delete mode 100644 test/PiecewiseFuel_CO2/Generators_data.csv create mode 100644 test/PiecewiseFuel_CO2/Resources/Thermal.csv create mode 100644 test/PiecewiseFuel_CO2/Resources/Vre.csv delete mode 100644 test/TDR/Generators_data.csv create mode 100644 test/TDR/Resources/Resource_capacity_reserve_margin.csv create mode 100644 test/TDR/Resources/Resource_energy_share_requirement.csv create mode 100644 test/TDR/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 test/TDR/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 test/TDR/Resources/Storage.csv create mode 100644 test/TDR/Resources/Thermal.csv create mode 100644 test/TDR/Resources/Vre.csv delete mode 100644 test/TDR/TDR_Results_test/Demand_data.csv delete mode 100644 test/TDR/TDR_Results_test/Fuels_data.csv delete mode 100644 test/TDR/TDR_Results_test/Generators_variability.csv delete mode 100644 test/TDR/TDR_Results_test/Period_map.csv 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 create mode 100644 test/ThreeZones/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 test/ThreeZones/Resources/Storage.csv create mode 100644 test/ThreeZones/Resources/Thermal.csv create mode 100644 test/ThreeZones/Resources/Vre.csv delete mode 100644 test/VREStor/Generators_data.csv create mode 100644 test/VREStor/Resources/Flex_demand.csv create mode 100644 test/VREStor/Resources/Hydro.csv create mode 100644 test/VREStor/Resources/Must_run.csv create mode 100644 test/VREStor/Resources/Resource_capacity_reserve_margin.csv create mode 100644 test/VREStor/Resources/Resource_maximum_capacity_requirement.csv create mode 100644 test/VREStor/Resources/Resource_minimum_capacity_requirement.csv create mode 100644 test/VREStor/Resources/Storage.csv create mode 100644 test/VREStor/Resources/Thermal.csv create mode 100644 test/VREStor/Resources/Vre.csv create mode 100644 test/VREStor/Resources/Vre_stor.csv delete mode 100644 test/VREStor/Vre_and_stor_data.csv create mode 100644 test/test_load_resource_data.jl diff --git a/.gitignore b/.gitignore index a7a0dd19b3..37885fb785 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,6 @@ test_get_retirement_period.jl # Test files test/TDR/TDR_Results_test -test/MethodofMorris/morris.csv \ No newline at end of file +test/MethodofMorris/morris.csv +!test/VREStor/Results_true/ +!test/ThreeZones/Results_true/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f37e4b45ac..0e4ff8b392 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - In the examples, change Reg_Max and Rsv_Max of any MUST_RUN generators to 0. This mitigates but does not fully fix (#576). - Expressions of virtual charging and discharging costs in storage_all.jl and vre_stor.jl +- The input file `Generators_data.csv` has been split into different files, one for each type of generator. + The new files are: `Thermal.csv`, `Hydro.csv`, `Vre.csv`, `Storage.csv`, `Flex_demand.csv`, `Must_run.csv`, + `Electrolyzer.csv`, and `Vre_stor.csv`. The examples have been updated, and new tests have been added to + check the new data format (#612). ### Deprecated - The above `load` keys, which generally refer to electrical demand, are being deprecated. diff --git a/Example_Systems/Electrolyzer_Example/Generators_data.csv b/Example_Systems/Electrolyzer_Example/Generators_data.csv deleted file mode 100644 index eca69e60ae..0000000000 --- a/Example_Systems/Electrolyzer_Example/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,Can_Retire,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,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,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,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,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,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,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 diff --git a/Example_Systems/Electrolyzer_Example/Resources/Electrolyzer.csv b/Example_Systems/Electrolyzer_Example/Resources/Electrolyzer.csv new file mode 100644 index 0000000000..7fb4932de4 --- /dev/null +++ b/Example_Systems/Electrolyzer_Example/Resources/Electrolyzer.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Resource_Type,region,cluster,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply +electrolyzer,1,0,1,1,0,-1,-1,125000,15000,0.0,0.0,None,1,0,0,1.0,1.0,0.0,hydrogen_electrolyzer,NE,0,55,1000,1000,0 diff --git a/Example_Systems/Electrolyzer_Example/Resources/Storage.csv b/Example_Systems/Electrolyzer_Example/Resources/Storage.csv new file mode 100644 index 0000000000..0528309a15 --- /dev/null +++ b/Example_Systems/Electrolyzer_Example/Resources/Storage.csv @@ -0,0 +1,3 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster,Qualified_Hydrogen_Supply +battery,1,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0.0,0,0.92,0.92,1,10,battery_mid,NE,0,0 +battery_for_electrolyzer,1,1,0,1,1,0,0,0,-1,-1,-1,0,0,0,21542,24743,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0.0,0,0.92,0.92,1,10,battery_mid,NE,0,1 diff --git a/Example_Systems/Electrolyzer_Example/Resources/Thermal.csv b/Example_Systems/Electrolyzer_Example/Resources/Thermal.csv new file mode 100644 index 0000000000..a5afc0dc7f --- /dev/null +++ b/Example_Systems/Electrolyzer_Example/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Resource_Type,region,cluster,Qualified_Hydrogen_Supply +natural_gas_combined_cycle,1,1,0,1,1,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,natural_gas_fired_combined_cycle,NE,1,0 diff --git a/Example_Systems/Electrolyzer_Example/Resources/Vre.csv b/Example_Systems/Electrolyzer_Example/Resources/Vre.csv new file mode 100644 index 0000000000..d9758bf3d7 --- /dev/null +++ b/Example_Systems/Electrolyzer_Example/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Resource_Type,region,cluster,Qualified_Hydrogen_Supply +solar_pv,1,0,1,1,1,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0.0,solar_photovoltaic,NE,1,1 +onshore_wind,1,0,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0.0,onshore_wind_turbine,NE,1,1 diff --git a/Example_Systems/MethodofMorrisExample/OneZone/Generators_data.csv b/Example_Systems/MethodofMorrisExample/OneZone/Generators_data.csv deleted file mode 100644 index f089945913..0000000000 --- a/Example_Systems/MethodofMorrisExample/OneZone/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,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,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,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,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/Example_Systems/MethodofMorrisExample/OneZone/Resources/Storage.csv b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Storage.csv new file mode 100644 index 0000000000..bf656d0278 --- /dev/null +++ b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,NE,0 diff --git a/Example_Systems/MethodofMorrisExample/OneZone/Resources/Thermal.csv b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Thermal.csv new file mode 100644 index 0000000000..69bb843c0a --- /dev/null +++ b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,NE,1 diff --git a/Example_Systems/MethodofMorrisExample/OneZone/Resources/Vre.csv b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Vre.csv new file mode 100644 index 0000000000..48d0d25386 --- /dev/null +++ b/Example_Systems/MethodofMorrisExample/OneZone/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,NE,1 +onshore_wind,1,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,NE,1 diff --git a/Example_Systems/PiecewiseFuel_CO2_Example/Generators_data.csv b/Example_Systems/PiecewiseFuel_CO2_Example/Generators_data.csv deleted file mode 100644 index a60a81192d..0000000000 --- a/Example_Systems/PiecewiseFuel_CO2_Example/Generators_data.csv +++ /dev/null @@ -1,4 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,1,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,1,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,1,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/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Thermal.csv b/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Thermal.csv new file mode 100644 index 0000000000..22848e5d5c --- /dev/null +++ b/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Thermal.csv @@ -0,0 +1,3 @@ +Resource,Zone,Model,Num_VRE_Bins,New_Build,Can_Retire,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 +natural_gas_combined_cycle_ccs,1,1,0,0,1,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,1,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 \ No newline at end of file diff --git a/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Vre.csv b/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Vre.csv new file mode 100644 index 0000000000..2c8960f7d0 --- /dev/null +++ b/Example_Systems/PiecewiseFuel_CO2_Example/Resources/Vre.csv @@ -0,0 +1,2 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,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,1,0,1,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 \ No newline at end of file diff --git a/Example_Systems/ProprietarySolver/Generators_data.csv b/Example_Systems/ProprietarySolver/Generators_data.csv deleted file mode 100644 index 8f0d856757..0000000000 --- a/Example_Systems/ProprietarySolver/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,Resource_Type,CapRes_1,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,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.468,0,1,1,0,0,0,0,0,natural_gas_fired_combined_cycle,0.93,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,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,1,1,0,0,1,0,0,solar_photovoltaic,0.8,NE,1 -onshore_wind,1,0,0,0,0,0,1,0,1,1,0,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,1,1,0,0,0,1,0,onshore_wind_turbine,0.8,NE,1 -battery,1,0,0,1,0,0,0,0,0,1,0,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.92,0.92,1,10,0,0,1,battery_mid,0.95,NE,0 diff --git a/Example_Systems/ProprietarySolver/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/ProprietarySolver/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..d2b3c6dc02 --- /dev/null +++ b/Example_Systems/ProprietarySolver/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,5 @@ +Resource,Derating_Factor +natural_gas_combined_cycle,0.93 +solar_pv,0.8 +onshore_wind,0.8 +battery,0.95 \ No newline at end of file diff --git a/Example_Systems/ProprietarySolver/Resources/Resource_maximum_capacity_requirement.csv b/Example_Systems/ProprietarySolver/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..68736c15dc --- /dev/null +++ b/Example_Systems/ProprietarySolver/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Max_Cap_1,Max_Cap_2,Max_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/Example_Systems/ProprietarySolver/Resources/Storage.csv b/Example_Systems/ProprietarySolver/Resources/Storage.csv new file mode 100644 index 0000000000..03fd2b1a46 --- /dev/null +++ b/Example_Systems/ProprietarySolver/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster +battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0.0,0,0.92,0.92,1,10,battery_mid,NE,0 diff --git a/Example_Systems/ProprietarySolver/Resources/Thermal.csv b/Example_Systems/ProprietarySolver/Resources/Thermal.csv new file mode 100644 index 0000000000..424365b1e7 --- /dev/null +++ b/Example_Systems/ProprietarySolver/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,natural_gas_fired_combined_cycle,NE,1 diff --git a/Example_Systems/ProprietarySolver/Resources/Vre.csv b/Example_Systems/ProprietarySolver/Resources/Vre.csv new file mode 100644 index 0000000000..58e3419bcc --- /dev/null +++ b/Example_Systems/ProprietarySolver/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0.0,solar_photovoltaic,NE,1 +onshore_wind,1,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0.0,onshore_wind_turbine,NE,1 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Generators_data.csv deleted file mode 100644 index af5bd40785..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Singlezone/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,STOR,HYDRO,FLEX,MUST_RUN,VRE,LDS,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3 -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,0,0,0,0,0,0,0,0.93,1,1,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,1,0,0,0,0,0,0.8,0,1,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,0,0,0,0.95,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,0,0,0,0,0,0,0,0.93,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,0,0,0,0,0,0,0,0.93,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,0,0,0,0,0,0,0,0.93,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,0,0,0,0,0,0,0,0.93,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,0,0,0,0,0,0,0,0.93,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,0,0,0,0,0,0,0.93,0,1,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,1,0,1,0.8,1,1,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,1,0,1,0.8,1,1,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,1,0,0,0,0,1,1,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,1,0,1,0.8,1,1,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,1,1,0,0,0,0,0,0,0,0.93,1,1,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,1,0,0,1,0,0,0,0,0,0.8,0,1,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,1,0,1,0,0,0,0,0,0,0.95,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,1,1,0,0,0,0,0,0,0,0.93,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,1,1,0,0,0,0,0,0,0,0.93,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,1,1,0,0,0,0,0,0,0,0.93,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,1,1,0,0,0,0,0,0,0,0.93,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,1,1,0,0,0,0,0,0,0,0.93,0,1,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,1,0,0,0,0,0,1,0,1,0.8,1,1,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,1,0,0,0,0,1,0,0,0,0,1,1,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,1,0,0,0,0,0,1,0,1,0.8,1,1,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,1,1,0,0,0,0,0,0,0,0.93,1,1,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,1,0,0,1,0,0,0,0,0,0.8,0,1,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,1,1,0,0,0,0,0,0,0,0.93,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,1,1,0,0,0,0,0,0,0,0.93,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,1,1,0,0,0,0,0,0,0,0.93,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,1,0,0,0,0,0,1,0,1,0.8,1,1,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,1,0,0,0,0,1,0,0,0,0,1,1,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,1,0,0,0,0,0,1,0,1,0.8,1,1,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,1,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,1,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,1,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,1,0,0,0,0,0.95,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,1,0,0,0,1,0,0,0,0,0.95,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,1,0,0,0,1,0,0,0,0,0.95,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Flex_demand.csv new file mode 100644 index 0000000000..f76b1cff20 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,1,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,1,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Hydro.csv new file mode 100644 index 0000000000..07abd184f4 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,1,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,1,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Must_run.csv new file mode 100644 index 0000000000..a8d26c6ffe --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,1,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,1,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..4512c70f6a --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,59 @@ +Resource,Derating_Factor_1 +NENGREST_biomass_1,0.93 +NENGREST_conventional_hydroelectric_1,0.8 +NENGREST_hydroelectric_pumped_storage_1,0.95 +NENGREST_natural_gas_fired_combined_cycle_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_2,0.93 +NENGREST_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_natural_gas_fired_combustion_turbine_2,0.93 +NENGREST_natural_gas_steam_turbine_1,0.93 +NENGREST_nuclear_1,0.93 +NENGREST_offshore_wind_turbine_1,0.8 +NENGREST_onshore_wind_turbine_1,0.8 +NENGREST_small_hydroelectric_1,0 +NENGREST_solar_photovoltaic_1,0.8 +NENG_CT_biomass_1,0.93 +NENG_CT_conventional_hydroelectric_1,0.8 +NENG_CT_hydroelectric_pumped_storage_1,0.95 +NENG_CT_natural_gas_fired_combined_cycle_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_2,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.93 +NENG_CT_nuclear_1,0.93 +NENG_CT_onshore_wind_turbine_1,0.8 +NENG_CT_small_hydroelectric_1,0 +NENG_CT_solar_photovoltaic_1,0.8 +NENG_ME_biomass_1,0.93 +NENG_ME_conventional_hydroelectric_1,0.8 +NENG_ME_natural_gas_fired_combined_cycle_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_2,0.93 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.93 +NENG_ME_onshore_wind_turbine_1,0.8 +NENG_ME_small_hydroelectric_1,0 +NENG_ME_solar_photovoltaic_1,0.8 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.93 +NENGREST_naturalgas_ccavgcf_mid_0,0.93 +NENGREST_naturalgas_ctavgcf_mid_0,0.93 +NENGREST_battery_mid_0,0.95 +NENGREST_naturalgas_ccs100_mid_0,0.93 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.8 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccavgcf_mid_0,0.93 +NENG_CT_naturalgas_ctavgcf_mid_0,0.93 +NENG_CT_battery_mid_0,0.95 +NENG_CT_naturalgas_ccs100_mid_0,0.93 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccavgcf_mid_0,0.93 +NENG_ME_naturalgas_ctavgcf_mid_0,0.93 +NENG_ME_battery_mid_0,0.95 +NENG_ME_naturalgas_ccs100_mid_0,0.93 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.8 +NENGREST_heat_load_shifting_1,0.95 +NENG_CT_heat_load_shifting_1,0.95 +NENG_ME_heat_load_shifting_1,0.95 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_energy_share_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..8a7934a9ae --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,27 @@ +Resource,ESR_1,ESR_2 +NENGREST_biomass_1,1,1 +NENGREST_conventional_hydroelectric_1,0,1 +NENGREST_nuclear_1,0,1 +NENGREST_offshore_wind_turbine_1,1,1 +NENGREST_onshore_wind_turbine_1,1,1 +NENGREST_small_hydroelectric_1,1,1 +NENGREST_solar_photovoltaic_1,1,1 +NENG_CT_biomass_1,1,1 +NENG_CT_conventional_hydroelectric_1,0,1 +NENG_CT_nuclear_1,0,1 +NENG_CT_onshore_wind_turbine_1,1,1 +NENG_CT_small_hydroelectric_1,1,1 +NENG_CT_solar_photovoltaic_1,1,1 +NENG_ME_biomass_1,1,1 +NENG_ME_conventional_hydroelectric_1,0,1 +NENG_ME_onshore_wind_turbine_1,1,1 +NENG_ME_small_hydroelectric_1,1,1 +NENG_ME_solar_photovoltaic_1,1,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,1,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..4a95218f53 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,9 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +NENGREST_offshore_wind_turbine_1,1,1,0 +NENGREST_onshore_wind_turbine_1,1,0,0 +NENGREST_solar_photovoltaic_1,0,0,1 +NENG_ME_onshore_wind_turbine_1,1,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,0,0 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0,0,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,0,0 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Storage.csv new file mode 100644 index 0000000000..b7668e8970 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,LDS,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,1,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,1,1,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,1,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,1,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Thermal.csv new file mode 100644 index 0000000000..b2eaea8e91 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,1,1,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,1,1,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,1,1,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,1,1,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,1,1,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,1,1,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,1,1,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,1,1,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,1,1,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,1,1,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,1,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,1,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,1,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,1,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,1,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,1,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,1,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,1,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Vre.csv new file mode 100644 index 0000000000..132bb04a95 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Singlezone/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Num_VRE_Bins,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,1,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,1,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,1,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,1,0,1,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,1,0,1,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,1,0,1,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,1,0,1,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,1,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,1,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,1,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,1,0,1,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,1,0,1,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,1,0,1,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,1,0,1,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,1,0,1,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Energy_share_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Energy_share_requirement.csv index 749ddfeaf1..421e6aabb3 100644 --- a/Example_Systems/RealSystemExample/ISONE_Trizone/Energy_share_requirement.csv +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Energy_share_requirement.csv @@ -1,4 +1,4 @@ ,Network_zones,ESR_1,ESR_2 NENGREST,z1,0.259,0.348 NENG_CT,z2,0.44,0.44 -NENG_ME,z3,0.776,0.776 +NENG_ME,z3,0.776,0.776 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Generators_data.csv deleted file mode 100644 index b7de48ae2a..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Trizone/Generators_data.csv +++ /dev/null @@ -1,62 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,STOR,HYDRO,FLEX,MUST_RUN,VRE,Num_VRE_Bins,LDS,CapRes_1,ESR_1,ESR_2,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3 -NENGREST,1,NENGREST_biomass_1,biomass,1,1,1,1,0,0,0,0,0,0,0,0.93,1,1,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,conventional_hydroelectric,1,2,1,0,0,1,0,0,0,0,1,0.8,0,1,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,0,0,0,0.95,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,4,1,1,0,0,0,0,0,0,0,0.93,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,5,1,1,0,0,0,0,0,0,0,0.93,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,6,1,1,0,0,0,0,0,0,0,0.93,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,7,1,1,0,0,0,0,0,0,0,0.93,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas_steam_turbine,1,8,1,1,0,0,0,0,0,0,0,0.93,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,0,0,0,0,0,0,0.93,0,1,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind_turbine,1,10,1,0,0,0,0,0,1,1,0,0.8,1,1,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind_turbine,1,11,1,0,0,0,0,0,1,1,0,0.8,1,1,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,small_hydroelectric,1,12,1,0,0,0,0,1,0,0,0,0,1,1,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar_photovoltaic,1,13,1,0,0,0,0,0,1,1,0,0.8,1,1,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENG_CT,1,NENG_CT_biomass_1,biomass,1,14,2,1,0,0,0,0,0,0,0,0.93,1,1,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,conventional_hydroelectric,1,15,2,0,0,1,0,0,0,0,1,0.8,0,1,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,0,0,0,0.95,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,17,2,1,0,0,0,0,0,0,0,0.93,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,18,2,1,0,0,0,0,0,0,0,0.93,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,19,2,1,0,0,0,0,0,0,0,0.93,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,20,2,1,0,0,0,0,0,0,0,0.93,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,0,0,0,0,0,0,0,0.93,0,1,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind_turbine,1,22,2,0,0,0,0,0,1,1,0,0.8,1,1,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,small_hydroelectric,1,23,2,0,0,0,0,1,0,0,0,0,1,1,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar_photovoltaic,1,24,2,0,0,0,0,0,1,1,0,0.8,1,1,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,biomass,1,25,3,1,0,0,0,0,0,0,0,0.93,1,1,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,conventional_hydroelectric,1,26,3,0,0,1,0,0,0,0,1,0.8,0,1,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,27,3,1,0,0,0,0,0,0,0,0.93,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,28,3,1,0,0,0,0,0,0,0,0.93,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,29,3,1,0,0,0,0,0,0,0,0.93,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind_turbine,1,30,3,0,0,0,0,0,1,1,0,0.8,1,1,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,small_hydroelectric,1,31,3,0,0,0,0,1,0,0,0,0,1,1,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar_photovoltaic,1,32,3,0,0,0,0,0,1,1,0,0.8,1,1,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,33,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,34,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,35,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,37,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,landbasedwind_ltrg1_mid_130,1,38,1,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,39,1,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,40,1,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,41,2,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,42,2,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,43,2,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,45,2,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,46,2,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,47,2,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,48,2,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,49,3,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,50,3,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,51,3,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,53,3,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,54,3,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,utilitypv_losangeles_mid_100_0_2,1,55,3,0,0,0,0,0,1,1,0,0.8,1,1,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,1,56,1,0,0,0,1,0,0,0,0,0.95,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,1,57,2,0,0,0,1,0,0,0,0,0.95,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,1,58,3,0,0,0,1,0,0,0,0,0.95,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_hydrogen_storage_1,hydrogen_storage,0,59,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,39761,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_hydrogen_storage_1,hydrogen_storage,0,60,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,49333,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_hydrogen_storage_1,hydrogen_storage,0,61,3,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,38489,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Flex_demand.csv new file mode 100644 index 0000000000..1bd8f77c73 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,1,56,1,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,1,57,2,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,1,58,3,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Hydro.csv new file mode 100644 index 0000000000..1bdb6f44bb --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_conventional_hydroelectric_1,conventional_hydroelectric,1,2,1,1,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.117,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,conventional_hydroelectric,1,15,2,1,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,conventional_hydroelectric,1,26,3,1,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Must_run.csv new file mode 100644 index 0000000000..2b34e7182f --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_small_hydroelectric_1,small_hydroelectric,1,12,1,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.117,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,small_hydroelectric,1,23,2,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,small_hydroelectric,1,31,3,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..786d10a3d1 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,62 @@ +Resource,Derating_Factor_1 +NENGREST_biomass_1,0.93 +NENGREST_conventional_hydroelectric_1,0.8 +NENGREST_hydroelectric_pumped_storage_1,0.95 +NENGREST_natural_gas_fired_combined_cycle_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_2,0.93 +NENGREST_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_natural_gas_fired_combustion_turbine_2,0.93 +NENGREST_natural_gas_steam_turbine_1,0.93 +NENGREST_nuclear_1,0.93 +NENGREST_offshore_wind_turbine_1,0.8 +NENGREST_onshore_wind_turbine_1,0.8 +NENGREST_small_hydroelectric_1,0 +NENGREST_solar_photovoltaic_1,0.8 +NENG_CT_biomass_1,0.93 +NENG_CT_conventional_hydroelectric_1,0.8 +NENG_CT_hydroelectric_pumped_storage_1,0.95 +NENG_CT_natural_gas_fired_combined_cycle_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_2,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.93 +NENG_CT_nuclear_1,0.93 +NENG_CT_onshore_wind_turbine_1,0.8 +NENG_CT_small_hydroelectric_1,0 +NENG_CT_solar_photovoltaic_1,0.8 +NENG_ME_biomass_1,0.93 +NENG_ME_conventional_hydroelectric_1,0.8 +NENG_ME_natural_gas_fired_combined_cycle_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_2,0.93 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.93 +NENG_ME_onshore_wind_turbine_1,0.8 +NENG_ME_small_hydroelectric_1,0 +NENG_ME_solar_photovoltaic_1,0.8 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.93 +NENGREST_naturalgas_ccavgcf_mid_0,0.93 +NENGREST_naturalgas_ctavgcf_mid_0,0.93 +NENGREST_battery_mid_0,0.95 +NENGREST_naturalgas_ccs100_mid_0,0.93 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.8 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccavgcf_mid_0,0.93 +NENG_CT_naturalgas_ctavgcf_mid_0,0.93 +NENG_CT_battery_mid_0,0.95 +NENG_CT_naturalgas_ccs100_mid_0,0.93 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccavgcf_mid_0,0.93 +NENG_ME_naturalgas_ctavgcf_mid_0,0.93 +NENG_ME_battery_mid_0,0.95 +NENG_ME_naturalgas_ccs100_mid_0,0.93 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.8 +NENGREST_heat_load_shifting_1,0.95 +NENG_CT_heat_load_shifting_1,0.95 +NENG_ME_heat_load_shifting_1,0.95 +NENGREST_hydrogen_storage_1,0 +NENG_CT_hydrogen_storage_1,0 +NENG_ME_hydrogen_storage_1,0 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_energy_share_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..44e4d35879 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,27 @@ +Resource,ESR_1,ESR_2 +NENGREST_conventional_hydroelectric_1,0,1 +NENGREST_nuclear_1,0,1 +NENG_CT_conventional_hydroelectric_1,0,1 +NENG_CT_nuclear_1,0,1 +NENG_ME_conventional_hydroelectric_1,0,1 +NENGREST_biomass_1,1,1 +NENGREST_offshore_wind_turbine_1,1,1 +NENGREST_onshore_wind_turbine_1,1,1 +NENGREST_small_hydroelectric_1,1,1 +NENGREST_solar_photovoltaic_1,1,1 +NENG_CT_biomass_1,1,1 +NENG_CT_onshore_wind_turbine_1,1,1 +NENG_CT_small_hydroelectric_1,1,1 +NENG_CT_solar_photovoltaic_1,1,1 +NENG_ME_biomass_1,1,1 +NENG_ME_onshore_wind_turbine_1,1,1 +NENG_ME_small_hydroelectric_1,1,1 +NENG_ME_solar_photovoltaic_1,1,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,1,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..058075909a --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,9 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +NENGREST_onshore_wind_turbine_1,1,0,0 +NENG_ME_onshore_wind_turbine_1,1,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,0,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,0,0 +NENGREST_offshore_wind_turbine_1,1,1,0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,0 +NENGREST_solar_photovoltaic_1,0,0,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0,0,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Storage.csv new file mode 100644 index 0000000000..6528bbf4b8 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Storage.csv @@ -0,0 +1,9 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,LDS,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,1,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,1,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,1,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_hydrogen_storage_1,hydrogen_storage,0,59,1,1,1,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,39761,5000,404,0,38914,29750,4.3,0.0,0,0.0,0.0,None,0.0,0,0.67,0.4,0.0,48,2000,1.0,1.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_hydrogen_storage_1,hydrogen_storage,0,60,2,1,1,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,49333,5000,404,0,38914,29750,4.3,0.0,0,0.0,0.0,None,0.0,0,0.67,0.4,0.0,48,2000,1.0,1.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_hydrogen_storage_1,hydrogen_storage,0,61,3,1,1,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,38489,5000,404,0,38914,29750,4.3,0.0,0,0.0,0.0,None,0.0,0,0.67,0.4,0.0,48,2000,1.0,1.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Thermal.csv new file mode 100644 index 0000000000..0f61cc751c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_biomass_1,biomass,1,1,1,1,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,4,1,1,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,5,1,1,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,6,1,1,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,7,1,1,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas_steam_turbine,1,8,1,1,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_CT,1,NENG_CT_biomass_1,biomass,1,14,2,1,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,17,2,1,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,18,2,1,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,19,2,1,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,20,2,1,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_ME,1,NENG_ME_biomass_1,biomass,1,25,3,1,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,27,3,1,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,28,3,1,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,29,3,1,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,33,1,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,34,1,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,35,1,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,37,1,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,41,2,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,42,2,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,43,2,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,45,2,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,49,3,1,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,50,3,1,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,51,3,1,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,53,3,1,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Vre.csv new file mode 100644 index 0000000000..2125a12189 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Num_VRE_Bins,LDS,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind_turbine,1,10,1,1,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind_turbine,1,11,1,1,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar_photovoltaic,1,13,1,1,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind_turbine,1,22,2,1,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar_photovoltaic,1,24,2,1,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind_turbine,1,30,3,1,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar_photovoltaic,1,32,3,1,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,landbasedwind_ltrg1_mid_130,1,38,1,1,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,39,1,1,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,40,1,1,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,46,2,1,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,47,2,1,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,48,2,1,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,54,3,1,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,utilitypv_losangeles_mid_100_0_2,1,55,3,1,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Generators_data.csv deleted file mode 100644 index 33ebb463a5..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,Commit,STOR,HYDRO,FLEX,MUST_RUN,VRE,LDS,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3 -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,0,0,0,0,0.93,0,1,0,0,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,0,0,0,0,0.93,0,1,0,0,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,0,1,0,0,0,0,1,1,0,0,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,0,1,0,0,0,0,1,1,0,0,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv new file mode 100644 index 0000000000..4688819b38 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Hydro.csv new file mode 100644 index 0000000000..9a5ee8f6c5 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Must_run.csv new file mode 100644 index 0000000000..4b21dc5d08 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..4512c70f6a --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,59 @@ +Resource,Derating_Factor_1 +NENGREST_biomass_1,0.93 +NENGREST_conventional_hydroelectric_1,0.8 +NENGREST_hydroelectric_pumped_storage_1,0.95 +NENGREST_natural_gas_fired_combined_cycle_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_2,0.93 +NENGREST_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_natural_gas_fired_combustion_turbine_2,0.93 +NENGREST_natural_gas_steam_turbine_1,0.93 +NENGREST_nuclear_1,0.93 +NENGREST_offshore_wind_turbine_1,0.8 +NENGREST_onshore_wind_turbine_1,0.8 +NENGREST_small_hydroelectric_1,0 +NENGREST_solar_photovoltaic_1,0.8 +NENG_CT_biomass_1,0.93 +NENG_CT_conventional_hydroelectric_1,0.8 +NENG_CT_hydroelectric_pumped_storage_1,0.95 +NENG_CT_natural_gas_fired_combined_cycle_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_2,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.93 +NENG_CT_nuclear_1,0.93 +NENG_CT_onshore_wind_turbine_1,0.8 +NENG_CT_small_hydroelectric_1,0 +NENG_CT_solar_photovoltaic_1,0.8 +NENG_ME_biomass_1,0.93 +NENG_ME_conventional_hydroelectric_1,0.8 +NENG_ME_natural_gas_fired_combined_cycle_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_2,0.93 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.93 +NENG_ME_onshore_wind_turbine_1,0.8 +NENG_ME_small_hydroelectric_1,0 +NENG_ME_solar_photovoltaic_1,0.8 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.93 +NENGREST_naturalgas_ccavgcf_mid_0,0.93 +NENGREST_naturalgas_ctavgcf_mid_0,0.93 +NENGREST_battery_mid_0,0.95 +NENGREST_naturalgas_ccs100_mid_0,0.93 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.8 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccavgcf_mid_0,0.93 +NENG_CT_naturalgas_ctavgcf_mid_0,0.93 +NENG_CT_battery_mid_0,0.95 +NENG_CT_naturalgas_ccs100_mid_0,0.93 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccavgcf_mid_0,0.93 +NENG_ME_naturalgas_ctavgcf_mid_0,0.93 +NENG_ME_battery_mid_0,0.95 +NENG_ME_naturalgas_ccs100_mid_0,0.93 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.8 +NENGREST_heat_load_shifting_1,0.95 +NENG_CT_heat_load_shifting_1,0.95 +NENG_ME_heat_load_shifting_1,0.95 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..44e4d35879 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,27 @@ +Resource,ESR_1,ESR_2 +NENGREST_conventional_hydroelectric_1,0,1 +NENGREST_nuclear_1,0,1 +NENG_CT_conventional_hydroelectric_1,0,1 +NENG_CT_nuclear_1,0,1 +NENG_ME_conventional_hydroelectric_1,0,1 +NENGREST_biomass_1,1,1 +NENGREST_offshore_wind_turbine_1,1,1 +NENGREST_onshore_wind_turbine_1,1,1 +NENGREST_small_hydroelectric_1,1,1 +NENGREST_solar_photovoltaic_1,1,1 +NENG_CT_biomass_1,1,1 +NENG_CT_onshore_wind_turbine_1,1,1 +NENG_CT_small_hydroelectric_1,1,1 +NENG_CT_solar_photovoltaic_1,1,1 +NENG_ME_biomass_1,1,1 +NENG_ME_onshore_wind_turbine_1,1,1 +NENG_ME_small_hydroelectric_1,1,1 +NENG_ME_solar_photovoltaic_1,1,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,1,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..058075909a --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,9 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +NENGREST_onshore_wind_turbine_1,1,0,0 +NENG_ME_onshore_wind_turbine_1,1,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,0,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,0,0 +NENGREST_offshore_wind_turbine_1,1,1,0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,0 +NENGREST_solar_photovoltaic_1,0,0,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0,0,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Storage.csv new file mode 100644 index 0000000000..83574879d2 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Model,LDS,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Thermal.csv new file mode 100644 index 0000000000..6a63efd8e0 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Vre.csv new file mode 100644 index 0000000000..9e005490f1 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_FullTimeseries/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Num_VRE_Bins,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,1,0,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,1,0,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,1,0,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,1,0,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,1,0,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,1,0,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,1,0,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,1,0,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,1,0,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,1,0,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,1,0,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,1,0,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,1,0,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,1,0,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,1,0,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Generators_data.csv deleted file mode 100644 index 157c1ac300..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,Commit,STOR,HYDRO,FLEX,MUST_RUN,VRE,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,0,0,0,0.93,1,1,0,0,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,1,0,0,0,0,0.8,0,1,0,0,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,99,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,0,0,0,0.93,0,1,0,0,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,0,1,0,0,0,1,1,0,0,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,0,0,0,0.93,1,1,0,0,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,1,0,0,0,0,0.8,0,1,0,0,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,0,0,0,0.93,0,1,0,0,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,0,1,0,0,0,1,1,0,0,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,0,0,0,0.93,1,1,0,0,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,1,0,0,0,0,0.8,0,1,0,0,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,0,1,0,0,0,1,1,0,0,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,1,0,0,0,0.95,0,0,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,1,0,0,0,0.95,0,0,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,1,0,0,0,0.95,0,0,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Flex_demand.csv new file mode 100644 index 0000000000..4073c5319c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv new file mode 100644 index 0000000000..1705eaa64d --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv new file mode 100644 index 0000000000..17706b2c07 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..bd6b7a7ad5 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv @@ -0,0 +1,59 @@ +Resource WACC Capital_Recovery_Period Lifetime Min_Retired_Cap_MW Min_Retired_Energy_Cap_MW Min_Retired_Charge_Cap_MW +NENGREST_biomass_1 0.024 20 20 0 0 0 +NENGREST_conventional_hydroelectric_1 0.024 20 20 0 0 0 +NENGREST_hydroelectric_pumped_storage_1 0.039 20 20 0 0 0 +NENGREST_natural_gas_fired_combined_cycle_1 0.039 20 20 0 0 0 +NENGREST_natural_gas_fired_combined_cycle_2 0.039 20 20 0 0 0 +NENGREST_natural_gas_fired_combustion_turbine_1 0.039 20 20 0 0 0 +NENGREST_natural_gas_fired_combustion_turbine_2 0.039 20 20 0 0 0 +NENGREST_natural_gas_steam_turbine_1 0.039 20 20 0 0 0 +NENGREST_nuclear_1 0.039 20 20 0 0 0 +NENGREST_offshore_wind_turbine_1 0.024 20 20 0 0 0 +NENGREST_onshore_wind_turbine_1 0.024 20 20 0 0 0 +NENGREST_small_hydroelectric_1 0.024 20 20 0 0 0 +NENGREST_solar_photovoltaic_1 0.017 20 20 0 0 0 +NENG_CT_biomass_1 0.024 20 20 0 0 0 +NENG_CT_conventional_hydroelectric_1 0.024 20 20 0 0 0 +NENG_CT_hydroelectric_pumped_storage_1 0.039 20 20 0 0 0 +NENG_CT_natural_gas_fired_combined_cycle_1 0.039 20 20 0 0 0 +NENG_CT_natural_gas_fired_combined_cycle_2 0.039 20 20 0 0 0 +NENG_CT_natural_gas_fired_combustion_turbine_1 0.039 20 20 0 0 0 +NENG_CT_natural_gas_fired_combustion_turbine_2 0.039 20 20 0 0 0 +NENG_CT_nuclear_1 0.039 20 20 0 0 0 +NENG_CT_onshore_wind_turbine_1 0.024 20 20 0 0 0 +NENG_CT_small_hydroelectric_1 0.024 20 20 0 0 0 +NENG_CT_solar_photovoltaic_1 0.017 20 20 0 0 0 +NENG_ME_biomass_1 0.024 20 20 0 0 0 +NENG_ME_conventional_hydroelectric_1 0.024 20 20 0 0 0 +NENG_ME_natural_gas_fired_combined_cycle_1 0.039 20 20 0 0 0 +NENG_ME_natural_gas_fired_combined_cycle_2 0.039 20 20 0 0 0 +NENG_ME_natural_gas_fired_combustion_turbine_1 0.039 20 20 0 0 0 +NENG_ME_onshore_wind_turbine_1 0.024 20 20 0 0 0 +NENG_ME_small_hydroelectric_1 0.024 20 20 0 0 0 +NENG_ME_solar_photovoltaic_1 0.017 20 20 0 0 0 +NENGREST_naturalgas_ccccsavgcf_mid_0 0.039 20 20 0 0 0 +NENGREST_naturalgas_ccavgcf_mid_0 0.039 20 20 0 0 0 +NENGREST_naturalgas_ctavgcf_mid_0 0.039 20 20 0 0 0 +NENGREST_battery_mid_0 0.027 20 20 0 0 0 +NENGREST_naturalgas_ccs100_mid_0 0.039 20 20 0 0 0 +NENGREST_landbasedwind_ltrg1_mid_130_1 0.024 20 20 0 0 0 +NENGREST_utilitypv_losangeles_mid_80_0_2_1 0.017 20 20 0 0 0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1 0.024 20 20 0 0 0 +NENG_CT_naturalgas_ccccsavgcf_mid_0 0.039 20 20 0 0 0 +NENG_CT_naturalgas_ccavgcf_mid_0 0.039 20 20 0 0 0 +NENG_CT_naturalgas_ctavgcf_mid_0 0.039 20 20 0 0 0 +NENG_CT_battery_mid_0 0.027 20 20 0 0 0 +NENG_CT_naturalgas_ccs100_mid_0 0.039 20 20 0 0 0 +NENG_CT_landbasedwind_ltrg1_mid_110_1 0.024 20 20 0 0 0 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1 0.017 20 20 0 0 0 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1 0.024 20 20 0 0 0 +NENG_ME_naturalgas_ccccsavgcf_mid_0 0.039 20 20 0 0 0 +NENG_ME_naturalgas_ccavgcf_mid_0 0.039 20 20 0 0 0 +NENG_ME_naturalgas_ctavgcf_mid_0 0.039 20 20 0 0 0 +NENG_ME_battery_mid_0 0.027 20 20 0 0 0 +NENG_ME_naturalgas_ccs100_mid_0 0.039 20 20 0 0 0 +NENG_ME_landbasedwind_ltrg1_mid_110_1 0.024 20 20 0 0 0 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1 0.017 20 20 0 0 0 +NENGREST_heat_load_shifting_1 0.039 20 20 0 0 0 +NENG_CT_heat_load_shifting_1 0.039 20 20 0 0 0 +NENG_ME_heat_load_shifting_1 0.039 20 20 0 0 0 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv new file mode 100644 index 0000000000..318fa0e587 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Model,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv new file mode 100644 index 0000000000..420298129c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0,99,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv new file mode 100644 index 0000000000..e33d14a24b --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Num_VRE_Bins,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,1,0,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0,8,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,1,0,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,1,0,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,1,0,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,1,0,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,1,0,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,1,0,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,1,0,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,1,0,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,1,0,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,1,0,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,1,0,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,1,0,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,1,0,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,1,0,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Generators_data.csv deleted file mode 100644 index 157c1ac300..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,Commit,STOR,HYDRO,FLEX,MUST_RUN,VRE,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,0,0,0,0.93,1,1,0,0,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,1,0,0,0,0,0.8,0,1,0,0,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,99,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,0,0,0,0.93,0,1,0,0,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,0,1,0,0,0,1,1,0,0,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,0,0,0,0.93,1,1,0,0,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,1,0,0,0,0,0.8,0,1,0,0,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,0,0,0,0.93,0,1,0,0,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,0,1,0,0,0,1,1,0,0,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,0,0,0,0.93,1,1,0,0,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,1,0,0,0,0,0.8,0,1,0,0,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,0,1,0,0,0,1,1,0,0,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,1,0,0,0,0.95,0,0,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,1,0,0,0,0.95,0,0,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,1,0,0,0,0.95,0,0,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Flex_demand.csv new file mode 100644 index 0000000000..4073c5319c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv new file mode 100644 index 0000000000..1705eaa64d --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv new file mode 100644 index 0000000000..17706b2c07 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..ac128a1a2b --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv @@ -0,0 +1,59 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NENGREST_biomass_1,0.024,20,20,0,0,0 +NENGREST_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENGREST_hydroelectric_pumped_storage_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_2,0.039,20,20,0,0,0 +NENGREST_natural_gas_steam_turbine_1,0.039,20,20,0,0,0 +NENGREST_nuclear_1,0.039,20,20,0,0,0 +NENGREST_offshore_wind_turbine_1,0.024,20,20,0,0,0 +NENGREST_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENGREST_small_hydroelectric_1,0.024,20,20,0,0,0 +NENGREST_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENG_CT_biomass_1,0.024,20,20,0,0,0 +NENG_CT_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENG_CT_hydroelectric_pumped_storage_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.039,20,20,0,0,0 +NENG_CT_nuclear_1,0.039,20,20,0,0,0 +NENG_CT_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENG_CT_small_hydroelectric_1,0.024,20,20,0,0,0 +NENG_CT_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENG_ME_biomass_1,0.024,20,20,0,0,0 +NENG_ME_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENG_ME_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENG_ME_small_hydroelectric_1,0.024,20,20,0,0,0 +NENG_ME_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_battery_mid_0,0.027,20,20,0,0,0 +NENGREST_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.024,20,20,0,0,0 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.017,20,20,0,0,0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.024,20,20,0,0,0 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_battery_mid_0,0.027,20,20,0,0,0 +NENG_CT_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.024,20,20,0,0,0 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.017,20,20,0,0,0 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.024,20,20,0,0,0 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_battery_mid_0,0.027,20,20,0,0,0 +NENG_ME_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.024,20,20,0,0,0 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.017,20,20,0,0,0 +NENGREST_heat_load_shifting_1,0.039,20,20,0,0,0 +NENG_CT_heat_load_shifting_1,0.039,20,20,0,0,0 +NENG_ME_heat_load_shifting_1,0.039,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv new file mode 100644 index 0000000000..318fa0e587 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Model,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv new file mode 100644 index 0000000000..420298129c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0,99,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv new file mode 100644 index 0000000000..e33d14a24b --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Num_VRE_Bins,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,1,0,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0,8,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,1,0,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,1,0,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,1,0,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,1,0,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,1,0,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,1,0,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,1,0,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,1,0,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,1,0,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,1,0,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,1,0,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,1,0,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,1,0,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,1,0,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Generators_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Generators_data.csv deleted file mode 100644 index 157c1ac300..0000000000 --- a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,Commit,STOR,HYDRO,FLEX,MUST_RUN,VRE,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MinCapTag_1,MinCapTag_2,MinCapTag_3,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,0,0,0,0.93,1,1,0,0,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,1,0,0,0,0,0.8,0,1,0,0,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,99,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,0,0,0,0.93,0,1,0,0,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,0,1,0,0,0,1,1,0,0,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,0,0,0,0.93,1,1,0,0,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,1,0,0,0,0,0.8,0,1,0,0,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,11,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,0,0,0,0.93,0,1,0,0,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,0,1,0,0,0,1,1,0,0,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,0,0,0,0.93,1,1,0,0,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,10,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,1,0,0,0,0,0.8,0,1,0,0,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,4,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,0,1,0,0,0,1,1,0,0,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,15,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,1,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,1,1,0,0.024,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,0,0,0,0.024,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,8,0,0,0,0.024,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,3,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,0,1,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,12,0,0,0,0.027,20,20,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,6,1,0,0,0.024,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,0,0,0,0,1,1,0.8,1,1,0,0,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,7,0,0,0,0.017,20,20,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,1,0,0,0,0.95,0,0,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,1,0,0,0,0.95,0,0,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,1,0,0,0,0.95,0,0,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Flex_demand.csv new file mode 100644 index 0000000000..4073c5319c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0,0,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv new file mode 100644 index 0000000000..1705eaa64d --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0,4,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv new file mode 100644 index 0000000000..17706b2c07 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0,15,0.024,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..ac128a1a2b --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv @@ -0,0 +1,59 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NENGREST_biomass_1,0.024,20,20,0,0,0 +NENGREST_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENGREST_hydroelectric_pumped_storage_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_2,0.039,20,20,0,0,0 +NENGREST_natural_gas_steam_turbine_1,0.039,20,20,0,0,0 +NENGREST_nuclear_1,0.039,20,20,0,0,0 +NENGREST_offshore_wind_turbine_1,0.024,20,20,0,0,0 +NENGREST_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENGREST_small_hydroelectric_1,0.024,20,20,0,0,0 +NENGREST_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENG_CT_biomass_1,0.024,20,20,0,0,0 +NENG_CT_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENG_CT_hydroelectric_pumped_storage_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.039,20,20,0,0,0 +NENG_CT_nuclear_1,0.039,20,20,0,0,0 +NENG_CT_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENG_CT_small_hydroelectric_1,0.024,20,20,0,0,0 +NENG_CT_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENG_ME_biomass_1,0.024,20,20,0,0,0 +NENG_ME_conventional_hydroelectric_1,0.024,20,20,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_1,0.039,20,20,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_2,0.039,20,20,0,0,0 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.039,20,20,0,0,0 +NENG_ME_onshore_wind_turbine_1,0.024,20,20,0,0,0 +NENG_ME_small_hydroelectric_1,0.024,20,20,0,0,0 +NENG_ME_solar_photovoltaic_1,0.017,20,20,0,0,0 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENGREST_battery_mid_0,0.027,20,20,0,0,0 +NENGREST_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.024,20,20,0,0,0 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.017,20,20,0,0,0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.024,20,20,0,0,0 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENG_CT_battery_mid_0,0.027,20,20,0,0,0 +NENG_CT_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.024,20,20,0,0,0 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.017,20,20,0,0,0 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.024,20,20,0,0,0 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_naturalgas_ccavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_naturalgas_ctavgcf_mid_0,0.039,20,20,0,0,0 +NENG_ME_battery_mid_0,0.027,20,20,0,0,0 +NENG_ME_naturalgas_ccs100_mid_0,0.039,20,20,0,0,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.024,20,20,0,0,0 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.017,20,20,0,0,0 +NENGREST_heat_load_shifting_1,0.039,20,20,0,0,0 +NENG_CT_heat_load_shifting_1,0.039,20,20,0,0,0 +NENG_ME_heat_load_shifting_1,0.039,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv new file mode 100644 index 0000000000..318fa0e587 --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Model,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0,11,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0,12,0.027,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv new file mode 100644 index 0000000000..420298129c --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,Commit,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0,99,0.039,20,20,0,0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0,5,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0,10,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,2,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0,3,0.039,20,20,0,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0,13,0.039,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv new file mode 100644 index 0000000000..e33d14a24b --- /dev/null +++ b/Example_Systems/RealSystemExample/ISONE_Trizone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Num_VRE_Bins,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,LDS +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,1,0,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0,8,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,1,0,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,1,0,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,1,0,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,1,0,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,1,0,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,1,0,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,1,0,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,1,0,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,1,0,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,1,0,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,1,0,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,1,0,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,8,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,1,0,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,6,0.024,20,20,0,0,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,1,0,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0,7,0.017,20,20,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/.~lock.Fuels_data_clustered.csv# b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/.~lock.Fuels_data_clustered.csv# deleted file mode 100755 index fd489000cd..0000000000 --- a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/.~lock.Fuels_data_clustered.csv# +++ /dev/null @@ -1 +0,0 @@ -,samie,samie-Inspiron-5737,08.04.2021 07:19,file:///home/samie/.config/libreoffice/4; \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Generators_data.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Generators_data.csv deleted file mode 100644 index 33ebb463a5..0000000000 --- a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Generators_data.csv +++ /dev/null @@ -1,59 +0,0 @@ -region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,Commit,STOR,HYDRO,FLEX,MUST_RUN,VRE,LDS,Num_VRE_Bins,CapRes_1,ESR_1,ESR_2,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3 -NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,106.062,0,0,0,0,3.21,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,662.983,0,0,0,0,11.24,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,0,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,0,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,0,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,0,0,0,0,0.93,0,1,0,0,1242,0,0,0,1,1242,0,0,0,-1,0,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,30,0,0,0,1,30,0,0,0,-1,0,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0 -NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,145.8,0,0,0,1,9.75,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,186.355,0,0,0,0,0.79,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.116,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,821.4,0,0,0,1,2.6,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,27.248,0,0,0,0,3.41,0,0,0,-1,0,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,None,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,67.7,0,0,0,0,13.54,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,0,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,434,0,0,0,1,54.25,0,0,0,-1,0,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,0,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,0,0,0,0,0.93,0,1,0,0,2162.9,0,0,0,1,1081.45,0,0,0,-1,0,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,6.5,0,0,0,1,5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,0,1,0,0,0,0,1,1,0,0,18.711,0,0,0,0,0.57,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,374.6,0,0,0,1,5.67,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,0,0,0,0,0.93,1,1,0,0,24.95,0,0,0,0,2.5,0,0,0,-1,0,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,1,0,0,0,0,0,0.8,0,1,0,0,327.81,0,0,0,0,7.8,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,0,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,0,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,0,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,1190.9,0,0,0,1,48.5,0,0,0,-1,0,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,0,1,0,0,0,0,1,1,0,0,195.266,0,0,0,0,1.1,0,0,0,-1,0,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,11.8,0,0,0,1,1.5,0,0,0,-1,0,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,4888.236,0,-1,0,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20835.569,0,-1,0,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1 -NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,9848.442,0,-1,0,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0 -NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,1982.895,0,-1,0,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,17063.264,0,-1,0,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,477.5,0,-1,0,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,0,-1,0,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,0,-1,0,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0 -NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,0,1,0,0,0,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,0,1,500,0,-1,0,-1,0,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0 -NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,20430.499,0,-1,0,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0 -NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,0,0,0,0,1,0,1,0.8,1,1,0,0,0,0,0,1,1,1,0,21535.709,0,-1,0,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0 -NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,165.52,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,47.27,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 -NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,1,0,0,0,0,0.95,0,0,0,0,22.56,0,0,0,0,0,0,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,1,0,0,0,0,0,0,0,0,0,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv new file mode 100644 index 0000000000..4688819b38 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,0,56,1,0,0,0,0,165.52,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,0,57,2,0,0,0,0,47.27,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,0,58,3,0,0,0,0,22.56,0,0,0.0,0,0.0,0,0,0.0,0,0.0,0.0,None,0.0,0.0,0,4,1,0.0,0.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Hydro.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Hydro.csv new file mode 100644 index 0000000000..9a5ee8f6c5 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Hydro.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_conventional_hydroelectric_1,other_renewables,0,2,1,0,0,0,0,662.983,0,0,11.24,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,other_renewables,0,15,2,0,0,0,0,67.7,0,0,13.54,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,0.083,0.083,0.006916667,0.013833333,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,other_renewables,0,26,3,0,0,0,0,327.81,0,0,7.8,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.402,1.0,0.083,0.083,0.006916667,0.013833333,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Must_run.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Must_run.csv new file mode 100644 index 0000000000..4b21dc5d08 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Must_run.csv @@ -0,0 +1,4 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_small_hydroelectric_1,other_renewables,0,12,1,0,0,0,0,186.355,0,0,0.79,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.116,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,other_renewables,0,23,2,0,0,0,0,18.711,0,0,0.57,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.18,1.0,1.0,1.0,0.0,0.0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,other_renewables,0,31,3,0,0,0,0,195.266,0,0,1.1,0,0.0,0,46475,0.0,0,0.0,9.12,None,0.192,1.0,1.0,1.0,0.0,0.0,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..4512c70f6a --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,59 @@ +Resource,Derating_Factor_1 +NENGREST_biomass_1,0.93 +NENGREST_conventional_hydroelectric_1,0.8 +NENGREST_hydroelectric_pumped_storage_1,0.95 +NENGREST_natural_gas_fired_combined_cycle_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_2,0.93 +NENGREST_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_natural_gas_fired_combustion_turbine_2,0.93 +NENGREST_natural_gas_steam_turbine_1,0.93 +NENGREST_nuclear_1,0.93 +NENGREST_offshore_wind_turbine_1,0.8 +NENGREST_onshore_wind_turbine_1,0.8 +NENGREST_small_hydroelectric_1,0 +NENGREST_solar_photovoltaic_1,0.8 +NENG_CT_biomass_1,0.93 +NENG_CT_conventional_hydroelectric_1,0.8 +NENG_CT_hydroelectric_pumped_storage_1,0.95 +NENG_CT_natural_gas_fired_combined_cycle_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_2,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.93 +NENG_CT_nuclear_1,0.93 +NENG_CT_onshore_wind_turbine_1,0.8 +NENG_CT_small_hydroelectric_1,0 +NENG_CT_solar_photovoltaic_1,0.8 +NENG_ME_biomass_1,0.93 +NENG_ME_conventional_hydroelectric_1,0.8 +NENG_ME_natural_gas_fired_combined_cycle_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_2,0.93 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.93 +NENG_ME_onshore_wind_turbine_1,0.8 +NENG_ME_small_hydroelectric_1,0 +NENG_ME_solar_photovoltaic_1,0.8 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.93 +NENGREST_naturalgas_ccavgcf_mid_0,0.93 +NENGREST_naturalgas_ctavgcf_mid_0,0.93 +NENGREST_battery_mid_0,0.95 +NENGREST_naturalgas_ccs100_mid_0,0.93 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.8 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccavgcf_mid_0,0.93 +NENG_CT_naturalgas_ctavgcf_mid_0,0.93 +NENG_CT_battery_mid_0,0.95 +NENG_CT_naturalgas_ccs100_mid_0,0.93 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccavgcf_mid_0,0.93 +NENG_ME_naturalgas_ctavgcf_mid_0,0.93 +NENG_ME_battery_mid_0,0.95 +NENG_ME_naturalgas_ccs100_mid_0,0.93 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.8 +NENGREST_heat_load_shifting_1,0.95 +NENG_CT_heat_load_shifting_1,0.95 +NENG_ME_heat_load_shifting_1,0.95 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..44e4d35879 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,27 @@ +Resource,ESR_1,ESR_2 +NENGREST_conventional_hydroelectric_1,0,1 +NENGREST_nuclear_1,0,1 +NENG_CT_conventional_hydroelectric_1,0,1 +NENG_CT_nuclear_1,0,1 +NENG_ME_conventional_hydroelectric_1,0,1 +NENGREST_biomass_1,1,1 +NENGREST_offshore_wind_turbine_1,1,1 +NENGREST_onshore_wind_turbine_1,1,1 +NENGREST_small_hydroelectric_1,1,1 +NENGREST_solar_photovoltaic_1,1,1 +NENG_CT_biomass_1,1,1 +NENG_CT_onshore_wind_turbine_1,1,1 +NENG_CT_small_hydroelectric_1,1,1 +NENG_CT_solar_photovoltaic_1,1,1 +NENG_ME_biomass_1,1,1 +NENG_ME_onshore_wind_turbine_1,1,1 +NENG_ME_small_hydroelectric_1,1,1 +NENG_ME_solar_photovoltaic_1,1,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,1,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..058075909a --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,9 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +NENGREST_onshore_wind_turbine_1,1,0,0 +NENG_ME_onshore_wind_turbine_1,1,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,0,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,0,0 +NENGREST_offshore_wind_turbine_1,1,1,0 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,0 +NENGREST_solar_photovoltaic_1,0,0,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0,0,1 \ No newline at end of file diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Storage.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Storage.csv new file mode 100644 index 0000000000..83574879d2 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Storage.csv @@ -0,0 +1,6 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,Model,LDS,Min_Share,Max_Share,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,1768.002,0,280635.2381,0,0,294.67,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.532,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,30.999,0,4920.47619,0,0,10.33,0,0.0,0,-1,0,-1,0,40113,0,0,0,0,0.0,0.0,0,0.0,0.0,None,0.871,0,0.866,0.866,158.730159,0,200,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0.0,0,0.0,1,1,1.0,0,-1.0,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0.0,0.0,None,0.0,0,0.92,0.92,1.0,1,10,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Thermal.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Thermal.csv new file mode 100644 index 0000000000..6a63efd8e0 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Thermal.csv @@ -0,0 +1,30 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Model,Commit,LDS,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_biomass_1,other_renewables,0,1,1,1,1,0,0,0,106.062,0,0,3.21,0,0.0,0,122976,5.08,0,0.0,14.58,None,0.45,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas,1,4,1,1,1,0,0,0,7077.3,0,1,471.82,0,0.0,0,10287,3.55,91,2.0,7.43,NENGREST_NG,0.468,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas,1,5,1,1,1,0,0,0,2684.803,0,1,244.07,0,0.0,0,16291,4.5,91,2.0,8.29,NENGREST_NG,0.507,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas,1,6,1,1,1,0,0,0,302.701,0,1,43.24,0,0.0,0,12080,4.6,118,3.5,10.13,NENGREST_NG,0.456,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas,1,7,1,1,1,0,0,0,62.704,0,1,7.84,0,0.0,0,13991,4.6,118,3.5,4.74,NENGREST_NG,0.488,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas,1,8,1,1,1,0,0,0,0.6,0,1,0.6,0,0.0,0,50678,1.04,86,13.7,0.0,NENGREST_NG,0.0,0.0,0.0,0.0,0,0,0.0,0.0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,1,0,0,0,1242.0,0,1,1242.0,0,0.0,0,271818,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_CT,1,NENG_CT_biomass_1,other_renewables,0,14,2,1,1,0,0,0,27.248,0,0,3.41,0,0.0,0,122976,5.37,0,0.0,15.33,None,0.348,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas,1,17,2,1,1,0,0,0,3488.704,0,1,436.09,0,0.0,0,9698,3.57,91,2.0,7.12,NENG_CT_NG,0.338,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas,1,18,2,1,1,0,0,0,35.2,0,1,17.6,0,0.0,0,16291,4.5,91,2.0,10.77,NENG_CT_NG,0.466,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas,1,19,2,1,1,0,0,0,434.0,0,1,54.25,0,0.0,0,10609,4.6,118,3.5,11.06,NENG_CT_NG,0.124,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas,1,20,2,1,1,0,0,0,124.9,0,1,24.98,0,0.0,0,13991,4.6,118,3.5,8.35,NENG_CT_NG,0.476,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,1,0,0,0,2162.9,0,1,1081.45,0,0.0,0,190920,2.32,245,0.0,10.46,new_england_uranium,0.5,1.0,0.25,0.25,24,24,0.020833333,0.041666667,0,0 +NENG_ME,1,NENG_ME_biomass_1,other_renewables,0,25,3,1,1,0,0,0,24.95,0,0,2.5,0,0.0,0,122976,4.85,0,0.0,13.84,None,0.404,1.0,1.0,1.0,0,0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas,1,27,3,1,1,0,0,0,274.5,0,1,137.25,0,0.0,0,16291,4.5,91,2.0,12.62,NENG_ME_NG,0.474,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas,1,28,3,1,1,0,0,0,1114.1,0,1,557.05,0,0.0,0,9668,3.57,91,2.0,7.65,NENG_ME_NG,0.386,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas,1,29,3,1,1,0,0,0,163.5,0,1,54.5,0,0.0,0,11540,4.6,118,3.5,4.75,NENG_ME_NG,0.697,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,33,1,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENGREST_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,natural_gas,1,34,1,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENGREST_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,natural_gas,1,35,1,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENGREST_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,natural_gas_CCS,1,37,1,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENGREST_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,41,2,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_CT_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,natural_gas,1,42,2,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_CT_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,natural_gas,1,43,2,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_CT_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,natural_gas_CCS,1,45,2,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_CT_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,natural_gas_CCS,1,49,3,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,229388,27483,5.82,103,0.0,7.52,NENG_ME_NG_ccs90,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,natural_gas,1,50,3,1,1,0,0,0,0.0,1,1,500.0,0,-1.0,110025,12441,1.61,103,2.0,6.27,NENG_ME_NG,0.2,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,natural_gas,1,51,3,1,1,0,0,0,0.0,1,1,100.0,0,-1.0,81998,6960,4.49,134,3.5,9.9,NENG_ME_NG,0.3,1.0,3.78,3.78,1,1,0.315,0.63,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,natural_gas_CCS,1,53,3,1,1,0,0,0,0.0,0,1,500.0,0,-1.0,239841,37153,6.26,103,0.0,7.89,NENG_ME_NG_ccs100,0.6,1.0,0.64,0.64,6,6,0.053333333,0.106666667,0,0 diff --git a/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Vre.csv b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Vre.csv new file mode 100644 index 0000000000..9e005490f1 --- /dev/null +++ b/Example_Systems/RealSystemExample/MGA_ISONE_Trizone_FullTimeseries/Resources/Vre.csv @@ -0,0 +1,16 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,Commit,LDS,Num_VRE_Bins,Min_Share,Max_Share,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Hydro_Energy_to_Power_Ratio,Ramp_Up_Percentage,Ramp_Dn_Percentage,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind,1,10,1,0,0,1,0,0,30.0,0,1,30.0,0,0.0,0,128440,0.0,0,0.0,9.12,None,0.0,0.0,0.0,0.0,0.0,0.0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind,1,11,1,0,0,1,0,0,145.8,0,1,9.75,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar,1,13,1,0,0,1,0,0,821.4,0,1,2.6,0,0.0,0,18760,0.0,0,0.0,9.13,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind,1,22,2,0,0,1,0,0,6.5,0,1,5.0,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar,1,24,2,0,0,1,0,0,374.6,0,1,5.67,0,0.0,0,18760,0.0,0,0.0,9.16,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind,1,30,3,0,0,1,0,0,1190.9,0,1,48.5,0,0.0,0,43205,-18.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar,1,32,3,0,0,1,0,0,11.8,0,1,1.5,0,0.0,0,18760,0.0,0,0.0,9.12,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,onshore_wind,1,38,1,0,0,1,0,0,0.0,1,1,1.0,0,4888.236,194100,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,solar,1,39,1,0,0,1,0,0,0.0,1,1,1.0,0,20835.569,99283,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,40,1,0,0,1,0,0,0.0,1,1,1.0,0,9848.442,260044,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,46,2,0,0,1,0,0,0.0,1,1,1.0,0,1982.895,185181,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,solar,1,47,2,0,0,1,0,0,0.0,1,1,1.0,0,17063.264,98631,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshore_wind,1,48,2,0,0,1,0,0,0.0,1,1,1.0,0,477.5,247542,91549,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,onshore_wind,1,54,3,0,0,1,0,0,0.0,1,1,1.0,0,20430.499,233173,41460,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,solar,1,55,3,0,0,1,0,0,0.0,1,1,1.0,0,21535.709,98706,13055,0.0,0,0.0,0.0,None,0.0,1.0,1.0,1.0,0.083333333,0.166666667,0,0 diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Generators_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Generators_data.csv deleted file mode 100644 index 8ac782893c..0000000000 --- a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Generators_data.csv +++ /dev/null @@ -1,18 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr -NGCC_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,3400,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCC_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,8200,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGST,1,1,0,0,0,0,0,0,0,0,0,0,1,1060,0,0,-1,-1,-1,0,0,0,0,0,0,11000,0,0,4,0,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGST,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Coal,1,1,0,0,0,0,0,0,0,0,0,0,1,14700,0,0,-1,-1,-1,0,0,0,0,0,0,30000,0,0,5,0,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Coal,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Nuclear,1,1,1,0,0,0,0,0,0,0,0,0,1,2360,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,2,0,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Biomass,1,1,0,0,0,0,0,0,0,0,0,0,0,20,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,5,0,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Biomass,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -SolarPV,1,0,0,0,0,0,1,1,0,0,0,1,1,40,0,0,-1,-1,-1,0,0,0,36000,0,0,10000,0,0,0,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,SolarPV,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Wind,1,0,0,0,0,0,1,1,0,0,0,1,1,5720,0,0,-1,-1,-1,0,0,0,60000,0,0,40000,0,0,0.1,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Wind,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Hydro,1,0,0,0,0,1,0,0,0,0,0,0,0,480,0,0,-1,-1,-1,0,0,0,0,0,0,18000,0,0,0.1,0,0,None,1600,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Hydro,0.8,1,1,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -PHS,1,0,0,1,0,0,0,0,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,PHS,0.95,0,0,MO,0,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Li-ion,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,Li-ion,0.95,0,0,MO,0,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Retro_NGCC_CCS,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,60000,0,0,16000,0,0,3,0,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC_CCS,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 -Retro_NGCC_H2,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Hydrogen,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 -Retro_Coal_TES,1,0,0,2,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.995,0.55,1,10,0,0,1,0,0,0,0,0,0,1,0,TES,0.95,0,0,MO,0,0.04,20,20,0,0,0,Coal,0.85,33300,None,0,-1 -Retro_Coal_SMR,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,0,0,6200,0,0,0.75,0,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,20,20,0,0,0,Coal,0.85,195000,None,0,-1 diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv new file mode 100644 index 0000000000..3db39ce985 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Hydro.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Hydro,1,0,0,0,0,0,480,-1,0,0,18000,0.1,0,None,1600,0,0,1,1,0,0,0,0,0,0,1,Hydro,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv new file mode 100644 index 0000000000..7fba4ecaca --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Must_run.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Nuclear,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Retro_Coal_SMR,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..9daadfeb88 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv @@ -0,0 +1,18 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NGCC_bf,0.04,30,30,0,0,0 +NGCC_gf,0.04,30,30,0,0,0 +NGCT_bf,0.04,30,30,0,0,0 +NGCT_gf,0.04,30,30,0,0,0 +NGST,0.04,40,40,0,0,0 +Coal,0.04,40,40,0,0,0 +Nuclear,0.04,40,40,0,0,0 +Biomass,0.04,30,30,0,0,0 +SolarPV,0.04,20,20,0,0,0 +Wind,0.04,20,20,0,0,0 +Hydro,0.04,40,40,0,0,0 +PHS,0.04,40,40,0,0,0 +Li-ion,0.04,20,20,0,0,0 +Retro_NGCC_CCS,0.04,20,20,0,0,0 +Retro_NGCC_H2,0.04,20,20,0,0,0 +Retro_Coal_TES,0.04,20,20,0,0,0 +Retro_Coal_SMR,0.04,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv new file mode 100644 index 0000000000..e34c2ccc8a --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,Fuel,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Retro_Coal_TES,1,2,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,None,0,0.995,0.55,1,10,0,0,0,0,MO,0,Coal,0.85,33300,None,0,-1 +PHS,1,1,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,None,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 +Li-ion,1,1,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,None,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv new file mode 100644 index 0000000000..d7541aa257 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv @@ -0,0 +1,12 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +NGCC_bf,1,1,0,0,0,0,1,3400,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCC_gf,1,1,0,0,0,1,1,0,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCT_bf,1,1,0,0,0,0,1,8200,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGCT_gf,1,1,0,0,0,1,1,0,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGST,1,1,0,0,0,0,1,1060,-1,0,0,11000,4,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGST,MO,1,None,0,-1,None,0,-1 +Coal,1,1,0,0,0,0,1,14700,-1,0,0,30000,5,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Coal,MO,1,None,0,-1,None,0,-1 +Nuclear,1,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Biomass,1,1,0,0,0,0,0,20,-1,0,0,100000,5,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Biomass,MO,1,None,0,-1,None,0,-1 +Retro_NGCC_CCS,1,1,0,1,2,1,1,0,-1,0,60000,16000,3,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC_CCS,MO,1,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 +Retro_NGCC_H2,1,1,0,1,2,1,1,0,-1,0,40000,12000,3,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Hydrogen,MO,1,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 +Retro_Coal_SMR,1,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv new file mode 100644 index 0000000000..1f850f8db3 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +SolarPV,1,1,0,0,0,1,1,40,-1,0,36000,10000,0,0,None,1,0,0,1,1,0,0,0,0,0,0,1,SolarPV,MO,1,None,0,-1,None,0,-1 +Wind,1,1,0,0,0,1,1,5720,-1,0,60000,40000,0.1,0,None,1,0,0,1,1,0,0,0,0,0,0,1,Wind,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Generators_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Generators_data.csv deleted file mode 100644 index 8ac782893c..0000000000 --- a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Generators_data.csv +++ /dev/null @@ -1,18 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr -NGCC_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,3400,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCC_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,8200,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGST,1,1,0,0,0,0,0,0,0,0,0,0,1,1060,0,0,-1,-1,-1,0,0,0,0,0,0,11000,0,0,4,0,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGST,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Coal,1,1,0,0,0,0,0,0,0,0,0,0,1,14700,0,0,-1,-1,-1,0,0,0,0,0,0,30000,0,0,5,0,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Coal,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Nuclear,1,1,1,0,0,0,0,0,0,0,0,0,1,2360,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,2,0,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Biomass,1,1,0,0,0,0,0,0,0,0,0,0,0,20,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,5,0,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Biomass,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -SolarPV,1,0,0,0,0,0,1,1,0,0,0,1,1,40,0,0,-1,-1,-1,0,0,0,36000,0,0,10000,0,0,0,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,SolarPV,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Wind,1,0,0,0,0,0,1,1,0,0,0,1,1,5720,0,0,-1,-1,-1,0,0,0,60000,0,0,40000,0,0,0.1,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Wind,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Hydro,1,0,0,0,0,1,0,0,0,0,0,0,0,480,0,0,-1,-1,-1,0,0,0,0,0,0,18000,0,0,0.1,0,0,None,1600,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Hydro,0.8,1,1,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -PHS,1,0,0,1,0,0,0,0,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,PHS,0.95,0,0,MO,0,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Li-ion,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,Li-ion,0.95,0,0,MO,0,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Retro_NGCC_CCS,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,60000,0,0,16000,0,0,3,0,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC_CCS,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 -Retro_NGCC_H2,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Hydrogen,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 -Retro_Coal_TES,1,0,0,2,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.995,0.55,1,10,0,0,1,0,0,0,0,0,0,1,0,TES,0.95,0,0,MO,0,0.04,20,20,0,0,0,Coal,0.85,33300,None,0,-1 -Retro_Coal_SMR,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,0,0,6200,0,0,0.75,0,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,20,20,0,0,0,Coal,0.85,195000,None,0,-1 diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv new file mode 100644 index 0000000000..3db39ce985 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Hydro.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Hydro,1,0,0,0,0,0,480,-1,0,0,18000,0.1,0,None,1600,0,0,1,1,0,0,0,0,0,0,1,Hydro,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv new file mode 100644 index 0000000000..7fba4ecaca --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Must_run.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Nuclear,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Retro_Coal_SMR,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..9daadfeb88 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv @@ -0,0 +1,18 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NGCC_bf,0.04,30,30,0,0,0 +NGCC_gf,0.04,30,30,0,0,0 +NGCT_bf,0.04,30,30,0,0,0 +NGCT_gf,0.04,30,30,0,0,0 +NGST,0.04,40,40,0,0,0 +Coal,0.04,40,40,0,0,0 +Nuclear,0.04,40,40,0,0,0 +Biomass,0.04,30,30,0,0,0 +SolarPV,0.04,20,20,0,0,0 +Wind,0.04,20,20,0,0,0 +Hydro,0.04,40,40,0,0,0 +PHS,0.04,40,40,0,0,0 +Li-ion,0.04,20,20,0,0,0 +Retro_NGCC_CCS,0.04,20,20,0,0,0 +Retro_NGCC_H2,0.04,20,20,0,0,0 +Retro_Coal_TES,0.04,20,20,0,0,0 +Retro_Coal_SMR,0.04,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv new file mode 100644 index 0000000000..eb2597060b --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,Fuel,Up_Time,Down_Time,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Retro_Coal_TES,1,2,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,None,0,0,0,0.995,0.55,1,10,0,0,0,0,MO,0,Coal,0.85,33300,None,0,-1 +PHS,1,1,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,None,0,0,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 +Li-ion,1,1,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,None,0,0,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv new file mode 100644 index 0000000000..d7541aa257 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv @@ -0,0 +1,12 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +NGCC_bf,1,1,0,0,0,0,1,3400,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCC_gf,1,1,0,0,0,1,1,0,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCT_bf,1,1,0,0,0,0,1,8200,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGCT_gf,1,1,0,0,0,1,1,0,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGST,1,1,0,0,0,0,1,1060,-1,0,0,11000,4,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGST,MO,1,None,0,-1,None,0,-1 +Coal,1,1,0,0,0,0,1,14700,-1,0,0,30000,5,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Coal,MO,1,None,0,-1,None,0,-1 +Nuclear,1,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Biomass,1,1,0,0,0,0,0,20,-1,0,0,100000,5,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Biomass,MO,1,None,0,-1,None,0,-1 +Retro_NGCC_CCS,1,1,0,1,2,1,1,0,-1,0,60000,16000,3,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC_CCS,MO,1,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 +Retro_NGCC_H2,1,1,0,1,2,1,1,0,-1,0,40000,12000,3,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Hydrogen,MO,1,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 +Retro_Coal_SMR,1,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv new file mode 100644 index 0000000000..1f850f8db3 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +SolarPV,1,1,0,0,0,1,1,40,-1,0,36000,10000,0,0,None,1,0,0,1,1,0,0,0,0,0,0,1,SolarPV,MO,1,None,0,-1,None,0,-1 +Wind,1,1,0,0,0,1,1,5720,-1,0,60000,40000,0.1,0,None,1,0,0,1,1,0,0,0,0,0,0,1,Wind,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Generators_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Generators_data.csv deleted file mode 100644 index 8ac782893c..0000000000 --- a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Generators_data.csv +++ /dev/null @@ -1,18 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr -NGCC_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,3400,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCC_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_bf,1,1,0,0,0,0,0,0,0,0,0,0,1,8200,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGCT_gf,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,30000,0,0,11000,0,0,4,0,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCT,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -NGST,1,1,0,0,0,0,0,0,0,0,0,0,1,1060,0,0,-1,-1,-1,0,0,0,0,0,0,11000,0,0,4,0,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGST,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Coal,1,1,0,0,0,0,0,0,0,0,0,0,1,14700,0,0,-1,-1,-1,0,0,0,0,0,0,30000,0,0,5,0,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Coal,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Nuclear,1,1,1,0,0,0,0,0,0,0,0,0,1,2360,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,2,0,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Biomass,1,1,0,0,0,0,0,0,0,0,0,0,0,20,0,0,-1,-1,-1,0,0,0,0,0,0,100000,0,0,5,0,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Biomass,0.93,0,0,MO,1,0.04,30,30,0,0,0,None,0,-1,None,0,-1 -SolarPV,1,0,0,0,0,0,1,1,0,0,0,1,1,40,0,0,-1,-1,-1,0,0,0,36000,0,0,10000,0,0,0,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,1,0,0,1,SolarPV,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Wind,1,0,0,0,0,0,1,1,0,0,0,1,1,5720,0,0,-1,-1,-1,0,0,0,60000,0,0,40000,0,0,0.1,0,0,None,1,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Wind,0.8,1,1,MO,1,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Hydro,1,0,0,0,0,1,0,0,0,0,0,0,0,480,0,0,-1,-1,-1,0,0,0,0,0,0,18000,0,0,0.1,0,0,None,1600,0,0,0,0,1,1,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,1,Hydro,0.8,1,1,MO,1,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -PHS,1,0,0,1,0,0,0,0,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,PHS,0.95,0,0,MO,0,0.04,40,40,0,0,0,None,0,-1,None,0,-1 -Li-ion,1,0,0,1,0,0,0,0,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,0,None,1,0,0,0,0,1,1,0,0,0,0.9,0.9,1,10,0,0,1,0,0,0,0,0,0,1,0,Li-ion,0.95,0,0,MO,0,0.04,20,20,0,0,0,None,0,-1,None,0,-1 -Retro_NGCC_CCS,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,60000,0,0,16000,0,0,3,0,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,NGCC_CCS,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 -Retro_NGCC_H2,1,1,0,0,0,0,0,0,0,1,2,1,1,0,0,0,-1,-1,-1,0,0,0,40000,0,0,12000,0,0,3,0,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Hydrogen,0.93,0,0,MO,1,0.04,20,20,0,0,0,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 -Retro_Coal_TES,1,0,0,2,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,0,None,1,0,0,0,0,1,1,0,0,0,0.995,0.55,1,10,0,0,1,0,0,0,0,0,0,1,0,TES,0.95,0,0,MO,0,0.04,20,20,0,0,0,Coal,0.85,33300,None,0,-1 -Retro_Coal_SMR,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,0,0,6200,0,0,0.75,0,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0,1,1,0,0,0,0,1,0.25,0.5,0,0,0,0,0,1,Nuclear,0.93,0,0,MO,1,0.04,20,20,0,0,0,Coal,0.85,195000,None,0,-1 diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv new file mode 100644 index 0000000000..3db39ce985 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Hydro.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Hydro,1,0,0,0,0,0,480,-1,0,0,18000,0.1,0,None,1600,0,0,1,1,0,0,0,0,0,0,1,Hydro,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv new file mode 100644 index 0000000000..7fba4ecaca --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Must_run.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Nuclear,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Retro_Coal_SMR,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..9daadfeb88 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv @@ -0,0 +1,18 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NGCC_bf,0.04,30,30,0,0,0 +NGCC_gf,0.04,30,30,0,0,0 +NGCT_bf,0.04,30,30,0,0,0 +NGCT_gf,0.04,30,30,0,0,0 +NGST,0.04,40,40,0,0,0 +Coal,0.04,40,40,0,0,0 +Nuclear,0.04,40,40,0,0,0 +Biomass,0.04,30,30,0,0,0 +SolarPV,0.04,20,20,0,0,0 +Wind,0.04,20,20,0,0,0 +Hydro,0.04,40,40,0,0,0 +PHS,0.04,40,40,0,0,0 +Li-ion,0.04,20,20,0,0,0 +Retro_NGCC_CCS,0.04,20,20,0,0,0 +Retro_NGCC_H2,0.04,20,20,0,0,0 +Retro_Coal_TES,0.04,20,20,0,0,0 +Retro_Coal_SMR,0.04,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv new file mode 100644 index 0000000000..eb2597060b --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,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,Fuel,Up_Time,Down_Time,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +Retro_Coal_TES,1,2,0,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,0,200,220,260,10,0,0.1,0.1,None,0,0,0,0.995,0.55,1,10,0,0,0,0,MO,0,Coal,0.85,33300,None,0,-1 +PHS,1,1,1,0,0,0,1,480,0,0,-1,-1,-1,0,0,0,0,0,0,15000,5000,0,0.1,0.1,None,0,0,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 +Li-ion,1,1,0,0,0,1,1,0,0,0,-1,-1,-1,0,0,0,20000,25000,0,5000,6000,0,0.15,0.15,None,0,0,0,0.9,0.9,1,10,0,0,0,0,MO,0,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv new file mode 100644 index 0000000000..d7541aa257 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv @@ -0,0 +1,12 @@ +Resource,Zone,Model,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +NGCC_bf,1,1,0,0,0,0,1,3400,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCC_gf,1,1,0,0,0,1,1,0,-1,0,40000,12000,3,7.3,ng,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC,MO,1,None,0,-1,None,0,-1 +NGCT_bf,1,1,0,0,0,0,1,8200,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGCT_gf,1,1,0,0,0,1,1,0,-1,0,30000,11000,4,14.3,ng,100,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGCT,MO,1,None,0,-1,None,0,-1 +NGST,1,1,0,0,0,0,1,1060,-1,0,0,11000,4,12.1,ng,500,90,1,6,1,0.64,0.64,0,0.2,0.25,0.5,0,0,1,NGST,MO,1,None,0,-1,None,0,-1 +Coal,1,1,0,0,0,0,1,14700,-1,0,0,30000,5,10.4,coal,500,150,10,6,6,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Coal,MO,1,None,0,-1,None,0,-1 +Nuclear,1,1,0,0,0,0,1,2360,-1,0,0,100000,2,7.43,uranium,1000,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,None,0,-1,None,0,-1 +Biomass,1,1,0,0,0,0,0,20,-1,0,0,100000,5,13,biomass,100,90,2,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Biomass,MO,1,None,0,-1,None,0,-1 +Retro_NGCC_CCS,1,1,0,1,2,1,1,0,-1,0,60000,16000,3,7.3,ng_ccs,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,NGCC_CCS,MO,1,NGCC_bf,0.85,60000,NGCC_gf,0.9,55000 +Retro_NGCC_H2,1,1,0,1,2,1,1,0,-1,0,40000,12000,3,7.3,h2,200,70,1,6,2,0.64,0.64,0,0.4,0.25,0.5,0,0,1,Hydrogen,MO,1,NGCC_bf,0.85,40000,NGCC_gf,0.9,35000 +Retro_Coal_SMR,1,1,0,1,1,1,1,0,-1,0,0,6200,0.75,7.43,uranium,200,0,0,0,0,0.64,0.64,0,0,0.25,0.5,0,0,1,Nuclear,MO,1,Coal,0.85,195000,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv new file mode 100644 index 0000000000..1f850f8db3 --- /dev/null +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,LDS,RETRO,Num_RETRO_Sources,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster,Retro1_Source,Retro1_Efficiency,Retro1_Inv_Cost_per_MWyr,Retro2_Source,Retro2_Efficiency,Retro2_Inv_Cost_per_MWyr +SolarPV,1,1,0,0,0,1,1,40,-1,0,36000,10000,0,0,None,1,0,0,1,1,0,0,0,0,0,0,1,SolarPV,MO,1,None,0,-1,None,0,-1 +Wind,1,1,0,0,0,1,1,5720,-1,0,60000,40000,0.1,0,None,1,0,0,1,1,0,0,0,0,0,0,1,Wind,MO,1,None,0,-1,None,0,-1 \ No newline at end of file diff --git a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/README.txt b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/README.txt index be15dea29a..ce4eebea71 100644 --- a/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/README.txt +++ b/Example_Systems/RetrofitExample/RetrofitExample_MultiStage/README.txt @@ -6,7 +6,7 @@ Multi-Stage Retrofit Example Description: One zone, few technologies, retrofit options include CCS, H2, SMR, and TES. -All changes necessary in the inputs in enable retrofit modeling are located in Generators_data.csv. +All changes necessary in the inputs in enable retrofit modeling are located in the resource `.csv` files. New fields: diff --git a/Example_Systems/SmallNewEngland/OneZone/Generators_data.csv b/Example_Systems/SmallNewEngland/OneZone/Generators_data.csv deleted file mode 100644 index 5ba2a9f42a..0000000000 --- a/Example_Systems/SmallNewEngland/OneZone/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,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,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,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,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/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..9a3e81610b --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,5 @@ +Resource,Derating_Factor_1 +natural_gas_combined_cycle,0.93 +solar_pv,0.8 +onshore_wind,0.8 +battery,0.95 diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_energy_share_requirement.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..bac25bef38 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,4 @@ +Resource,ESR_1,ESR_2 +solar_pv,1,1 +onshore_wind,1,1 + diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_maximum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..68736c15dc --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Max_Cap_1,Max_Cap_2,Max_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..509b7ef9ab --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +solar_pv,1,0,0 +onshore_wind,0,1,0 +battery,0,0,1 diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Storage.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Storage.csv new file mode 100644 index 0000000000..bf656d0278 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,NE,0 diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Thermal.csv new file mode 100644 index 0000000000..69bb843c0a --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,NE,1 diff --git a/Example_Systems/SmallNewEngland/OneZone/Resources/Vre.csv b/Example_Systems/SmallNewEngland/OneZone/Resources/Vre.csv new file mode 100644 index 0000000000..48d0d25386 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,NE,1 +onshore_wind,1,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,NE,1 diff --git a/Example_Systems/SmallNewEngland/OneZone_3VREBin/Generators_data.csv b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Generators_data.csv deleted file mode 100644 index 2572ef197f..0000000000 --- a/Example_Systems/SmallNewEngland/OneZone_3VREBin/Generators_data.csv +++ /dev/null @@ -1,7 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,RPS_1,RPS_2,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,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,0,924417,-1,-1,0,0,0,50920.18439,0,0,8490.038196,0,0,0,0,0,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,1,0,0,0,0,0,1,0,3,1,0,0,0,0,63489,-1,-1,0,0,0,80100,0,0,34568.125,0,0,0.1,0,0,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 -onshore_wind_2,1,0,0,0,0,0,1,0,0,1,0,0,0,0,49396,-1,-1,0,0,0,83401,0,0,34568.125,0,0,0.1,0,0,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 -onshore_wind_3,1,0,0,0,0,0,1,0,0,1,0,0,0,0,10465,-1,-1,0,0,0,84336,0,0,34568.125,0,0,0.1,0,0,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,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,1,battery_mid,0.95,0,0,NE,0 diff --git a/Example_Systems/SmallNewEngland/OneZone_3VREBin/README.md b/Example_Systems/SmallNewEngland/OneZone_3VREBin/README.md index 1559780daa..822ffc67a8 100644 --- a/Example_Systems/SmallNewEngland/OneZone_3VREBin/README.md +++ b/Example_Systems/SmallNewEngland/OneZone_3VREBin/README.md @@ -1,6 +1,6 @@ # Small New England: One Zone + VRE Bins -**SmallNewEngland** is set of a simplified versions of the more detailed example system RealSystemExample. It is condensed for easy comprehension and quick testing of different components of the GenX. **SmallNewEngland/OneZone_3VREBin** is an iteration on our most basic model. Like the basic model, this is a one-year example with hourly resolution containing only one zone representing New England. In addition, it divides its wind resource into three separate bins with different parameters as defined in `Generators_data.csv` and `Generators_variability.csv`. This division into bins of different costs, capacities, and capacity factors allows the user to model more realistic supply curves of each resource. +**SmallNewEngland** is set of a simplified versions of the more detailed example system RealSystemExample. It is condensed for easy comprehension and quick testing of different components of the GenX. **SmallNewEngland/OneZone_3VREBin** is an iteration on our most basic model. Like the basic model, this is a one-year example with hourly resolution containing only one zone representing New England. In addition, it divides its wind resource into three separate bins with different parameters as defined in `Vre.csv` and `Generators_variability.csv`. This division into bins of different costs, capacities, and capacity factors allows the user to model more realistic supply curves of each resource. To run the model, first navigate to the example directory at `GenX/Example_Systems/SmallNewEngland/OneZone_3VREBin`: diff --git a/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Storage.csv b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Storage.csv new file mode 100644 index 0000000000..e32d31b727 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,RPS_1,RPS_2,region,cluster +battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584.0,22494,0,4895.0,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,1,battery_mid,0,0,NE,0 diff --git a/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Thermal.csv new file mode 100644 index 0000000000..66b067f691 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,RPS_1,RPS_2,region,cluster +natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400.0,10287.0,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,0,0,NE,1 diff --git a/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Vre.csv b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Vre.csv new file mode 100644 index 0000000000..edea4389a9 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_3VREBin/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,RPS_1,RPS_2,region,cluster +solar_pv,1,0,1,1,0,0,924417,0,50920.18439,8490.038196,0.0,0.0,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,1,1,NE,1 +onshore_wind_1,1,0,3,1,0,0,63489,0,80100.0,34568.125,0.1,0.0,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,1,1,NE,1 +onshore_wind_2,1,0,0,1,0,0,49396,0,83401.0,34568.125,0.1,0.0,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,1,1,NE,1 +onshore_wind_3,1,0,0,1,0,0,10465,0,84336.0,34568.125,0.1,0.0,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,1,1,NE,1 diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Generators_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Generators_data.csv deleted file mode 100644 index 8100822625..0000000000 --- a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/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,Can_Retire,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,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,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,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,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/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..b85258c53d --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Resource_multistage_data.csv @@ -0,0 +1,5 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +natural_gas_combined_cycle,0.039,20,20,0,0,0 +solar_pv,0.017,20,20,0,0,0 +onshore_wind,0.024,20,20,0,0,0 +battery,0.027,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv new file mode 100644 index 0000000000..906f5d13c3 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Max_Cap_MW,Max_Cap_MWh,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,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,Self_disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster +battery,1,1,1,1,0,0,-1,-1,0,0,19584,22494,4895,5622,5622,0.15,0.15,0,0.92,0.92,1,10,battery_mid,NE,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv new file mode 100644 index 0000000000..a06b672285 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,1,1,10000,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv new file mode 100644 index 0000000000..b6f20427d5 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,MGA,Resource_Type,region,cluster +solar_pv,1,1,1,1,500,-1,0,85300,18760,0,9.13,1,solar_photovoltaic,NE,1 +onshore_wind,1,1,1,1,1000,-1,0,97200,43205,0.1,9.12,1,onshore_wind_turbine,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Generators_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Generators_data.csv deleted file mode 100644 index 37d6c4d751..0000000000 --- a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/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,Can_Retire,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,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,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,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,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/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..b85258c53d --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Resource_multistage_data.csv @@ -0,0 +1,5 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +natural_gas_combined_cycle,0.039,20,20,0,0,0 +solar_pv,0.017,20,20,0,0,0 +onshore_wind,0.024,20,20,0,0,0 +battery,0.027,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv new file mode 100644 index 0000000000..906f5d13c3 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Max_Cap_MW,Max_Cap_MWh,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,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,Self_disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster +battery,1,1,1,1,0,0,-1,-1,0,0,19584,22494,4895,5622,5622,0.15,0.15,0,0.92,0.92,1,10,battery_mid,NE,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv new file mode 100644 index 0000000000..a06b672285 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,1,1,10000,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv new file mode 100644 index 0000000000..b6f20427d5 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,MGA,Resource_Type,region,cluster +solar_pv,1,1,1,1,500,-1,0,85300,18760,0,9.13,1,solar_photovoltaic,NE,1 +onshore_wind,1,1,1,1,1000,-1,0,97200,43205,0.1,9.12,1,onshore_wind_turbine,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Generators_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Generators_data.csv deleted file mode 100644 index 37d6c4d751..0000000000 --- a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/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,Can_Retire,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,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,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,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,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/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..b85258c53d --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Resource_multistage_data.csv @@ -0,0 +1,5 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +natural_gas_combined_cycle,0.039,20,20,0,0,0 +solar_pv,0.017,20,20,0,0,0 +onshore_wind,0.024,20,20,0,0,0 +battery,0.027,20,20,0,0,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv new file mode 100644 index 0000000000..906f5d13c3 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Max_Cap_MW,Max_Cap_MWh,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,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,Self_disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster +battery,1,1,1,1,0,0,-1,-1,0,0,19584,22494,4895,5622,5622,0.15,0.15,0,0.92,0.92,1,10,battery_mid,NE,0 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv new file mode 100644 index 0000000000..a06b672285 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,1,1,10000,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv new file mode 100644 index 0000000000..b6f20427d5 --- /dev/null +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,MGA,Resource_Type,region,cluster +solar_pv,1,1,1,1,500,-1,0,85300,18760,0,9.13,1,solar_photovoltaic,NE,1 +onshore_wind,1,1,1,1,1000,-1,0,97200,43205,0.1,9.12,1,onshore_wind_turbine,NE,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/OneZone_MultiStage/README.md b/Example_Systems/SmallNewEngland/OneZone_MultiStage/README.md index 9c476e4d92..0a1ed3e621 100644 --- a/Example_Systems/SmallNewEngland/OneZone_MultiStage/README.md +++ b/Example_Systems/SmallNewEngland/OneZone_MultiStage/README.md @@ -10,7 +10,7 @@ Next, ensure that your settings in `GenX_settings.yml` are correct. The default The `multi_stage_settings.yml` file contains settings parameters specific to multi-stage modeling. This example is configured for three model periods (`NumPeriods: 3`) of 10 years in length each (`PeriodLength: 10`). -Multi-period modeling in GenX requires a separate set of model inputs for each period to be modeled, which are located in the directories `Inputs/Inputs_p$`, where `$` is the number of the model period. Although separate model periods can have different costs and policy parameters, the resources names and types, specified in each `Generators_data.csv` must be identical across model periods. In addition, multi-stage modeling with a single zone requires an additional input file, `Generators_data_multi_stage.csv`, also located in the `Inputs/` directory, which contains fields related to resource lifetimes, capital recovery periods, and endogenous retirements. +Multi-period modeling in GenX requires a separate set of model inputs for each period to be modeled, which are located in the directories `Inputs/Inputs_p$`, where `$` is the number of the model period. Although separate model periods can have different costs and policy parameters, the resources names and types, specified in each resource `.csv` files (included in the `Resources` folder) must be identical across model periods. In addition, multi-stage modeling with a single zone requires an additional input file, `Generators_data_multi_stage.csv`, also located in the `Inputs/` directory, which contains fields related to resource lifetimes, capital recovery periods, and endogenous retirements. A rate-based carbon cap becomes more stringent across the three model periods, declining from of 1,000 gCO2 per kWh in the first period, 500 gCO2 per kWh in the second period, and 50 gCO2 per kWh in the third period, as specified in the `CO2_cap.csv` input files in `Inputs/Inputs_p1`, `Inputs/Inputs_p2`, and `Inputs/Inputs_p3` respectively. diff --git a/Example_Systems/SmallNewEngland/Simple_Test_Case/Generators_data.csv b/Example_Systems/SmallNewEngland/Simple_Test_Case/Generators_data.csv deleted file mode 100644 index 9f14181f1b..0000000000 --- a/Example_Systems/SmallNewEngland/Simple_Test_Case/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,0,0,0,65400,0,0,10287,0,0,3.55,0,7.43,NG,250,0.64,0.64,0.468,0,1,1,0,0,natural_gas_fired_combined_cycle,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,0,-1,-1,-1,0,0,0,85300,0,0,18760,0,0,0,0,9.13,None,0,1,1,0,0,1,1,0,0,solar_photovoltaic,NE,1 -onshore_wind,1,0,0,0,0,0,1,0,1,1,0,0,0,0,-1,-1,-1,0,0,0,97200,0,0,43205,0,0,0.1,0,9.12,None,0,1,1,0,0,1,1,0,0,onshore_wind_turbine,NE,1 -battery,1,0,0,1,0,0,0,0,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0,None,0,1,1,0,0,0.92,0.92,1,10,battery_mid,NE,0 diff --git a/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Storage.csv b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Storage.csv new file mode 100644 index 0000000000..a2b149c868 --- /dev/null +++ b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,region,cluster +battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,1.0,1.0,0.0,0,0.92,0.92,1,10,battery_mid,NE,0 diff --git a/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Thermal.csv new file mode 100644 index 0000000000..6687ae10d2 --- /dev/null +++ b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,NG,250,0.64,0.64,0.468,natural_gas_fired_combined_cycle,NE,1 diff --git a/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Vre.csv b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Vre.csv new file mode 100644 index 0000000000..834ead70ed --- /dev/null +++ b/Example_Systems/SmallNewEngland/Simple_Test_Case/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Ramp_Up_Percentage,Ramp_Dn_Percentage,Min_Power,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,1.0,1.0,0.0,solar_photovoltaic,NE,1 +onshore_wind,1,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,1.0,1.0,0.0,onshore_wind_turbine,NE,1 diff --git a/Example_Systems/SmallNewEngland/Test_Down_Time/Generators_data.csv b/Example_Systems/SmallNewEngland/Test_Down_Time/Generators_data.csv deleted file mode 100644 index ef4ac4e2db..0000000000 --- a/Example_Systems/SmallNewEngland/Test_Down_Time/Generators_data.csv +++ /dev/null @@ -1,4 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,Min_Power,Reg_Cost,Rsv_Cost,Hydro_Energy_to_Power_Ratio,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MGA,Resource_Type,region,cluster -thermal_plant,1,1,0,0,0,0,0,0,0,0,0,1,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,10,0,1,NG,1,0,0,4,6,1,1,1.0,0,0,0,0,1,1,0,0,1,thermal_plant,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,1,None,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,1,solar_photovoltaic,NE,1 -dummy_storage,1,0,0,1,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,None,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,dummy_storage,NE,0 diff --git a/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Storage.csv b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Storage.csv new file mode 100644 index 0000000000..9baa2231ff --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Min_Power,Reg_Cost,Rsv_Cost,Hydro_Energy_to_Power_Ratio,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MGA,Resource_Type,region,cluster +dummy_storage,1,1,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,1,1,0.0,0,0,0,0,1,1,0,0,0,dummy_storage,NE,0 diff --git a/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Thermal.csv new file mode 100644 index 0000000000..3cc571faf4 --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Cost,Rsv_Cost,Hydro_Energy_to_Power_Ratio,MGA,Resource_Type,region,cluster +thermal_plant,1,1,0,0,0,1,-1,0,0,0,10,1,NG,1,0,0,4,6,1,1,1.0,0,0,0,1,thermal_plant,NE,1 diff --git a/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Vre.csv b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Vre.csv new file mode 100644 index 0000000000..76fd594c7f --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Down_Time/Resources/Vre.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Cost,Rsv_Cost,Hydro_Energy_to_Power_Ratio,MGA,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,0,0,0,1,None,0,0,0,0,0,1,1,0.0,0,0,0,1,solar_photovoltaic,NE,1 diff --git a/Example_Systems/SmallNewEngland/Test_Up_Time/Generators_data.csv b/Example_Systems/SmallNewEngland/Test_Up_Time/Generators_data.csv deleted file mode 100644 index 02b530add4..0000000000 --- a/Example_Systems/SmallNewEngland/Test_Up_Time/Generators_data.csv +++ /dev/null @@ -1,4 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,Min_Power,Hydro_Energy_to_Power_Ratio,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MGA,Resource_Type,region,cluster -thermal_plant,1,1,0,0,0,0,0,0,0,0,0,1,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,10,0,1,NG,1,0,0,4,6,1,1,1.0,0,0,1,1,0,0,1,thermal_plant,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,1,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,1,solar_photovoltaic,NE,1 -dummy_storage,1,0,0,1,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,None,0,0,0,0,0,1,1,0,0,0,1,1,0,0,0,dummy_storage,NE,0 diff --git a/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Storage.csv b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Storage.csv new file mode 100644 index 0000000000..89dd24583a --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Min_Power,Hydro_Energy_to_Power_Ratio,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MGA,Resource_Type,region,cluster +dummy_storage,1,1,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,1,1,0.0,0,0,1,1,0,0,0,dummy_storage,NE,0 diff --git a/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Thermal.csv new file mode 100644 index 0000000000..f79b9e8206 --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Hydro_Energy_to_Power_Ratio,MGA,Resource_Type,region,cluster +thermal_plant,1,1,0,0,0,1,-1,0,0,0,10,1,NG,1,0,0,4,6,1,1,1.0,0,1,thermal_plant,NE,1 diff --git a/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Vre.csv b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Vre.csv new file mode 100644 index 0000000000..76d3783140 --- /dev/null +++ b/Example_Systems/SmallNewEngland/Test_Up_Time/Resources/Vre.csv @@ -0,0 +1,2 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Hydro_Energy_to_Power_Ratio,MGA,Resource_Type,region,cluster +solar_pv,1,0,1,1,0,0,-1,0,0,0,0,1,None,0,0,0,0,0,1,1,0.0,0,1,solar_photovoltaic,NE,1 diff --git a/Example_Systems/SmallNewEngland/ThreeZones/Generators_data.csv b/Example_Systems/SmallNewEngland/ThreeZones/Generators_data.csv deleted file mode 100644 index f878193357..0000000000 --- a/Example_Systems/SmallNewEngland/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,Can_Retire,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,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,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,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,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,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,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,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,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,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,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/Example_Systems/SmallNewEngland/ThreeZones/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..d16e886d07 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,11 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +MA_natural_gas_combined_cycle,0,0,0 +MA_solar_pv,1,0,0 +CT_natural_gas_combined_cycle,0,0,0 +CT_onshore_wind,0,1,0 +CT_solar_pv,0,0,0 +ME_natural_gas_combined_cycle,0,0,0 +ME_onshore_wind,0,0,0 +MA_battery,0,0,1 +CT_battery,0,0,1 +ME_battery,0,0,1 \ No newline at end of file diff --git a/Example_Systems/SmallNewEngland/ThreeZones/Resources/Storage.csv b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Storage.csv new file mode 100644 index 0000000000..31d9d93a89 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,MA,0 +CT_battery,2,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,CT,0 +ME_battery,3,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,ME,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Thermal.csv new file mode 100644 index 0000000000..f078838d34 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Thermal.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,MA,1 +CT_natural_gas_combined_cycle,2,1,0,1,0,0,-1,0,65400,9698,3.57,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0.133332722,0.266665444,0,0,1,natural_gas_fired_combined_cycle,CT,1 +ME_natural_gas_combined_cycle,3,1,0,1,0,0,-1,0,65400,16291,4.5,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0.033333333,0.066666667,0,0,1,natural_gas_fired_combined_cycle,ME,1 diff --git a/Example_Systems/SmallNewEngland/ThreeZones/Resources/Vre.csv b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Vre.csv new file mode 100644 index 0000000000..7b80e308d7 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,MA,1 +CT_onshore_wind,2,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,CT,1 +CT_solar_pv,2,0,1,1,0,0,-1,0,85300,18760,0.0,9.16,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,CT,1 +ME_onshore_wind,3,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,ME,1 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Generators_data.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Generators_data.csv deleted file mode 100644 index 3d19fcac98..0000000000 --- a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Generators_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Can_Retire,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,WACC,CapRes_1,ESR_1,ESR_2,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS -MA_natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,MA,1,0 -MA_solar_pv,1,0,0,0,0,0,1,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.017,0.8,1,1,20,20,0,0,0,MA,1,0 -CT_natural_gas_combined_cycle,2,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,CT,1,0 -CT_onshore_wind,2,0,0,0,0,0,1,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.024,0.8,1,1,20,20,0,0,0,CT,1,0 -CT_solar_pv,2,0,0,0,0,0,1,1,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,7,0,0,0,1,solar_photovoltaic,0.017,0.8,1,1,20,20,0,0,0,CT,1,0 -ME_natural_gas_combined_cycle,3,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,ME,1,0 -ME_onshore_wind,3,0,0,0,0,0,1,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,0,0,1,onshore_wind_turbine,0.024,0.8,1,1,20,20,0,0,0,ME,1,0 -MA_battery,1,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,MA,0,0 -CT_battery,2,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,CT,0,0 -ME_battery,3,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv new file mode 100644 index 0000000000..2cb742ee94 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_battery,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,MA,0,0 +CT_battery,2,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,CT,0,0 +ME_battery,3,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv new file mode 100644 index 0000000000..2ac20a154f --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Thermal.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_natural_gas_combined_cycle,1,1,1,1,0,-1,0,65400,10287,3.55,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,MA,1,0 +CT_natural_gas_combined_cycle,2,1,1,1,0,-1,0,65400,9698,3.57,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0.133332722,0.266665444,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,CT,1,0 +ME_natural_gas_combined_cycle,3,1,1,1,0,-1,0,65400,16291,4.5,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0.033333333,0.066666667,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv new file mode 100644 index 0000000000..9d63b9d261 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p1/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_solar_pv,1,1,1,1,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,MA,1,0 +CT_onshore_wind,2,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,CT,1,0 +CT_solar_pv,2,1,1,1,0,-1,0,85300,18760,0.0,9.16,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,CT,1,0 +ME_onshore_wind,3,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Generators_data.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Generators_data.csv deleted file mode 100644 index 3d19fcac98..0000000000 --- a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Generators_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Can_Retire,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,WACC,CapRes_1,ESR_1,ESR_2,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS -MA_natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,MA,1,0 -MA_solar_pv,1,0,0,0,0,0,1,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.017,0.8,1,1,20,20,0,0,0,MA,1,0 -CT_natural_gas_combined_cycle,2,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,CT,1,0 -CT_onshore_wind,2,0,0,0,0,0,1,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.024,0.8,1,1,20,20,0,0,0,CT,1,0 -CT_solar_pv,2,0,0,0,0,0,1,1,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,7,0,0,0,1,solar_photovoltaic,0.017,0.8,1,1,20,20,0,0,0,CT,1,0 -ME_natural_gas_combined_cycle,3,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,ME,1,0 -ME_onshore_wind,3,0,0,0,0,0,1,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,0,0,1,onshore_wind_turbine,0.024,0.8,1,1,20,20,0,0,0,ME,1,0 -MA_battery,1,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,MA,0,0 -CT_battery,2,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,CT,0,0 -ME_battery,3,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv new file mode 100644 index 0000000000..2cb742ee94 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_battery,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,MA,0,0 +CT_battery,2,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,CT,0,0 +ME_battery,3,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv new file mode 100644 index 0000000000..2ac20a154f --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Thermal.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_natural_gas_combined_cycle,1,1,1,1,0,-1,0,65400,10287,3.55,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,MA,1,0 +CT_natural_gas_combined_cycle,2,1,1,1,0,-1,0,65400,9698,3.57,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0.133332722,0.266665444,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,CT,1,0 +ME_natural_gas_combined_cycle,3,1,1,1,0,-1,0,65400,16291,4.5,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0.033333333,0.066666667,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv new file mode 100644 index 0000000000..9d63b9d261 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p2/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_solar_pv,1,1,1,1,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,MA,1,0 +CT_onshore_wind,2,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,CT,1,0 +CT_solar_pv,2,1,1,1,0,-1,0,85300,18760,0.0,9.16,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,CT,1,0 +ME_onshore_wind,3,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Generators_data.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Generators_data.csv deleted file mode 100644 index 3d19fcac98..0000000000 --- a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Generators_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,Num_VRE_Bins,New_Build,Can_Retire,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,WACC,CapRes_1,ESR_1,ESR_2,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS -MA_natural_gas_combined_cycle,1,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,MA,1,0 -MA_solar_pv,1,0,0,0,0,0,1,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.017,0.8,1,1,20,20,0,0,0,MA,1,0 -CT_natural_gas_combined_cycle,2,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,CT,1,0 -CT_onshore_wind,2,0,0,0,0,0,1,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.024,0.8,1,1,20,20,0,0,0,CT,1,0 -CT_solar_pv,2,0,0,0,0,0,1,1,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,7,0,0,0,1,solar_photovoltaic,0.017,0.8,1,1,20,20,0,0,0,CT,1,0 -ME_natural_gas_combined_cycle,3,1,0,0,0,0,0,0,1,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,2,0,0,0,1,natural_gas_fired_combined_cycle,0.039,0.93,0,0,20,20,0,0,0,ME,1,0 -ME_onshore_wind,3,0,0,0,0,0,1,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,0,0,1,onshore_wind_turbine,0.024,0.8,1,1,20,20,0,0,0,ME,1,0 -MA_battery,1,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,MA,0,0 -CT_battery,2,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,CT,0,0 -ME_battery,3,0,0,1,0,0,0,0,1,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,12,0,0,1,0,battery_mid,0.027,0.95,0,0,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv new file mode 100644 index 0000000000..2cb742ee94 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_battery,1,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,MA,0,0 +CT_battery,2,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,CT,0,0 +ME_battery,3,1,1,1,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,12,0,battery_mid,0.027,20,20,0,0,0,ME,0,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv new file mode 100644 index 0000000000..2ac20a154f --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Thermal.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_natural_gas_combined_cycle,1,1,1,1,0,-1,0,65400,10287,3.55,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,MA,1,0 +CT_natural_gas_combined_cycle,2,1,1,1,0,-1,0,65400,9698,3.57,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0.133332722,0.266665444,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,CT,1,0 +ME_natural_gas_combined_cycle,3,1,1,1,0,-1,0,65400,16291,4.5,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0.033333333,0.066666667,0,0,2,1,natural_gas_fired_combined_cycle,0.039,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv new file mode 100644 index 0000000000..9d63b9d261 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/Inputs/Inputs_p3/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag,MGA,Resource_Type,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW,region,cluster,LDS +MA_solar_pv,1,1,1,1,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,MA,1,0 +CT_onshore_wind,2,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,CT,1,0 +CT_solar_pv,2,1,1,1,0,-1,0,85300,18760,0.0,9.16,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,7,1,solar_photovoltaic,0.017,20,20,0,0,0,CT,1,0 +ME_onshore_wind,3,1,1,1,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,6,1,onshore_wind_turbine,0.024,20,20,0,0,0,ME,1,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/README.md b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/README.md index 895a1db94a..61a974867d 100644 --- a/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/README.md +++ b/Example_Systems/SmallNewEngland/ThreeZones_MultiStage/README.md @@ -10,7 +10,7 @@ Next, ensure that your settings in `GenX_settings.yml` are correct. The default The `multi_stage_settings.yml` file contains settings parameters specific to multi-stage modeling. This example is configured for three model periods (`NumPeriods: 3`) of 10 years in length each (`PeriodLength: 10`). -Multi-period modeling in GenX requires a separate set of model inputs for each period to be modeled, which are located in the directories `Inputs/Inputs_p$`, where `$` is the number of the model period. Although separate model periods can have different costs and policy parameters, the resources names and types, specified in each `Generators_data.csv` must be identical across model periods. In addition, multi-stage modeling with a single zone requires an additional input file, `Generators_data_multi_stage.csv`, also located in the `Inputs/` directory, which contains fields related to resource lifetimes, capital recovery periods, and endogenous retirements. +Multi-period modeling in GenX requires a separate set of model inputs for each period to be modeled, which are located in the directories `Inputs/Inputs_p$`, where `$` is the number of the model period. Although separate model periods can have different costs and policy parameters, the resources names and types, specified in each resource `.csv` files (included in the `Resources` folder) must be identical across model periods. In addition, multi-stage modeling with a single zone requires an additional input file, `Generators_data_multi_stage.csv`, also located in the `Inputs/` directory, which contains fields related to resource lifetimes, capital recovery periods, and endogenous retirements. A rate-based carbon cap becomes more stringent across the three model periods and for each zone, declining from of 1,000 gCO2 per kWh in the first period, 500 gCO2 per kWh in the second period, and 50 gCO2 per kWh in the third period, as specified in the `CO2_cap.csv` input files in `Inputs/Inputs_p1`, `Inputs/Inputs_p2`, and `Inputs/Inputs_p3` respectively. diff --git a/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Generators_data.csv b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Generators_data.csv deleted file mode 100644 index dce2d29e41..0000000000 --- a/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Generators_data.csv +++ /dev/null @@ -1,11 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,MaxCapTag_1,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,battery_mid,0.95,0,0,MA,0 -CT_battery,2,0,0,1,0,0,0,0,0,1,0,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,battery_mid,0.95,0,0,CT,0 -ME_battery,3,0,0,1,0,0,0,0,0,1,0,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,battery_mid,0.95,0,0,ME,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Storage.csv b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Storage.csv new file mode 100644 index 0000000000..31d9d93a89 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Storage.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,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,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_battery,1,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,MA,0 +CT_battery,2,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,CT,0 +ME_battery,3,1,0,1,0,0,0,0,-1,-1,-1,0,0,0,19584,22494,0,4895,5622,0,0.15,0.15,0.0,None,0,0,0,1.0,1.0,0,0.0,0,0.92,0.92,1,10,0.0,0.0,0,0,0,battery_mid,ME,0 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Thermal.csv b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Thermal.csv new file mode 100644 index 0000000000..f078838d34 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Thermal.csv @@ -0,0 +1,4 @@ +Resource,Zone,Model,LDS,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_natural_gas_combined_cycle,1,1,0,1,0,0,-1,0,65400,10287,3.55,7.43,MA_NG,250,91,2,6,6,0.64,0.64,0,0.468,0.25,0.5,0,0,1,natural_gas_fired_combined_cycle,MA,1 +CT_natural_gas_combined_cycle,2,1,0,1,0,0,-1,0,65400,9698,3.57,7.12,CT_NG,250,91,2,6,6,0.64,0.64,0,0.338,0.133332722,0.266665444,0,0,1,natural_gas_fired_combined_cycle,CT,1 +ME_natural_gas_combined_cycle,3,1,0,1,0,0,-1,0,65400,16291,4.5,12.62,ME_NG,250,91,2,6,6,0.64,0.64,0,0.474,0.033333333,0.066666667,0,0,1,natural_gas_fired_combined_cycle,ME,1 diff --git a/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Vre.csv b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Vre.csv new file mode 100644 index 0000000000..7b80e308d7 --- /dev/null +++ b/Example_Systems/SmallNewEngland/ThreeZones_Slack_Variables_Example/Resources/Vre.csv @@ -0,0 +1,5 @@ +Resource,Zone,LDS,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Cap_Size,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Ramp_Up_Percentage,Ramp_Dn_Percentage,Hydro_Energy_to_Power_Ratio,Min_Power,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MGA,Resource_Type,region,cluster +MA_solar_pv,1,0,1,1,0,0,-1,0,85300,18760,0.0,9.13,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,MA,1 +CT_onshore_wind,2,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,CT,1 +CT_solar_pv,2,0,1,1,0,0,-1,0,85300,18760,0.0,9.16,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,solar_photovoltaic,CT,1 +ME_onshore_wind,3,0,1,1,0,0,-1,0,97200,43205,0.1,9.12,None,0,0,0,1.0,1.0,0,0.0,0.0,0.0,0,0,1,onshore_wind_turbine,ME,1 diff --git a/Example_Systems/VREStor_Example/Generators_data.csv b/Example_Systems/VREStor_Example/Generators_data.csv deleted file mode 100644 index be63750d27..0000000000 --- a/Example_Systems/VREStor_Example/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,Can_Retire,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,0,0,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,0,0,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,0,0,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,1,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,1,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,0,0,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,0,0,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,1,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,0,0,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,0,0,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,0,0,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,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,0,0,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,1,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,0,0,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,0,0,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,0,0,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,1,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,1,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,0,0,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,0,0,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,1,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,0,0,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,1,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,0,0,0.0,0,0.0,0,0,0,0,0,0,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,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,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,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/Example_Systems/VREStor_Example/Resources/Flex_demand.csv b/Example_Systems/VREStor_Example/Resources/Flex_demand.csv new file mode 100644 index 0000000000..8f187e97d2 --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Flex_demand.csv @@ -0,0 +1,16 @@ +Resource,Zone,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Max_Flexible_Demand_Delay,Max_Flexible_Demand_Advance,Flexible_Demand_Energy_Eff,region,technology,cluster +WECC_trans_light_duty_1,3,0,88930.5,0,0,0,0,0,5,0,1,WECC,trans_light_duty,1 +EIC_trans_light_duty_1,1,0,227552.1,0,0,0,0,0,5,0,1,EIC,trans_light_duty,1 +TRE_trans_light_duty_1,2,0,34387.8,0,0,0,0,0,5,0,1,TRE,trans_light_duty,1 +WECC_comm_water_heat_1,3,0,1130.3,0,0,0,0,0,2,2,1,WECC,comm_water_heat,1 +EIC_comm_water_heat_1,1,0,2922.1,0,0,0,0,0,2,2,1,EIC,comm_water_heat,1 +TRE_comm_water_heat_1,2,0,368.7,0,0,0,0,0,2,2,1,TRE,comm_water_heat,1 +WECC_res_water_heat_1,3,0,2578.7,0,0,0,0,0,2,2,1,WECC,res_water_heat,1 +EIC_res_water_heat_1,1,0,8238.2,0,0,0,0,0,2,2,1,EIC,res_water_heat,1 +TRE_res_water_heat_1,2,0,1049.5,0,0,0,0,0,2,2,1,TRE,res_water_heat,1 +WECC_comm_space_heat_cool_1,3,0,7483.3,0,0,0,0,0,1,1,1,WECC,comm_space_heat_cool,1 +EIC_comm_space_heat_cool_1,1,0,41624.8,0,0,0,0,0,1,1,1,EIC,comm_space_heat_cool,1 +TRE_comm_space_heat_cool_1,2,0,6978.6,0,0,0,0,0,1,1,1,TRE,comm_space_heat_cool,1 +WECC_res_space_heat_cool_1,3,0,12467.5,0,0,0,0,0,1,1,1,WECC,res_space_heat_cool,1 +EIC_res_space_heat_cool_1,1,0,47457,0,0,0,0,0,1,1,1,EIC,res_space_heat_cool,1 +TRE_res_space_heat_cool_1,2,0,7585.9,0,0,0,0,0,1,1,1,TRE,res_space_heat_cool,1 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Hydro.csv b/Example_Systems/VREStor_Example/Resources/Hydro.csv new file mode 100644 index 0000000000..c73b4b625d --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Hydro.csv @@ -0,0 +1,4 @@ +Resource Zone Existing_Cap_MWh Existing_Cap_MW New_Build Can_Retire Cap_Size Min_Cap_MW Max_Cap_MW Inv_Cost_per_MWyr Fixed_OM_Cost_per_MWyr Var_OM_Cost_per_MWh Heat_Rate_MMBTU_per_MWh Fuel Min_Power Self_Disch Eff_Up Eff_Down Hydro_Energy_to_Power_Ratio Ramp_Up_Percentage Ramp_Dn_Percentage Up_Time Down_Time region technology cluster +EIC_conventional_hydroelectric_1 1 0 24200.8 0 0 32.35 0 0 0 47048 0 10.34 None 0.273 0 1 1 1 1 1 0 0 EIC Conventional Hydroelectric 1 +TRE_conventional_hydroelectric_1 2 0 477 0 0 25.1 0 0 0 47048 0 10.34 None 0 0 1 1 1 1 1 0 0 TRE Conventional Hydroelectric 1 +WECC_conventional_hydroelectric_1 3 0 46528 0 0 72.7 0 0 0 47048 0 10.34 None 0.214 0 1 1 1 1 1 0 0 WECC Conventional Hydroelectric 1 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Must_run.csv b/Example_Systems/VREStor_Example/Resources/Must_run.csv new file mode 100644 index 0000000000..300177484d --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Must_run.csv @@ -0,0 +1,10 @@ +Resource Zone Existing_Cap_MWh Existing_Cap_MW New_Build Can_Retire Cap_Size Min_Cap_MW Max_Cap_MW Inv_Cost_per_MWyr Fixed_OM_Cost_per_MWyr Var_OM_Cost_per_MWh Start_Cost_per_MW Heat_Rate_MMBTU_per_MWh Fuel Min_Power Self_Disch Eff_Up Eff_Down Ramp_Up_Percentage Ramp_Dn_Percentage Up_Time Down_Time region technology cluster +EIC_biomass_1 1 0 1722.5 0 0 1.27 0 0 0 150850 7.32 172 17.03 biomass 0.308 0 1 1 1 1 0 0 EIC Biomass 1 +EIC_small_hydroelectric_1 1 0 1672.2 0 0 1.06 0 0 0 47048 0 0 10.34 None 0.273 0 1 1 1 1 0 0 EIC Small Hydroelectric 1 +TRE_biomass_1 2 0 44.5 0 0 1.48 0 0 0 150850 6.51 172 15.15 biomass 0.591 0 1 1 1 1 0 0 TRE Biomass 1 +TRE_small_hydroelectric_1 2 0 11.2 0 0 0.75 0 0 0 47048 0 0 10.34 None 0 0 1 1 1 1 0 0 TRE Small Hydroelectric 1 +WECC_biomass_1 3 0 551 0 0 2.01 0 0 0 150850 7.14 172 16.63 biomass 0.362 0 1 1 1 1 0 0 WECC Biomass 1 +WECC_small_hydroelectric_1 3 0 1064.3 0 0 1.62 0 0 0 47048 0 0 10.34 None 0.181 0 1 1 1 1 0 0 WECC Small Hydroelectric 1 +WECC_distributed_generation_1 3 0 250535 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 WECC distributed_generation 1 +EIC_distributed_generation_1 1 0 1770000 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 EIC distributed_generation 1 +TRE_distributed_generation_1 2 0 17006 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 TRE distributed_generation 1 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Resource_capacity_reserve_margin.csv b/Example_Systems/VREStor_Example/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..7d65450b31 --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,272 @@ +Resource,Derating_Factor_1,Derating_Factor_2,Derating_Factor_3 +EIC_advnuclear_atb_moderate_0,0.93,0,0 +EIC_batteries_1,0.95,0,0 +EIC_battery_moderate_0,0.95,0,0 +EIC_biomass_1,0.93,0,0 +EIC_comm_space_heat_cool_1,0.95,0,0 +EIC_comm_water_heat_1,0.95,0,0 +EIC_conventional_hydroelectric_1,0.8,0,0 +EIC_conventional_steam_coal_1,0.93,0,0 +EIC_conventional_steam_coal_2,0.93,0,0 +EIC_distributed_generation_1,0.8,0,0 +EIC_hydroelectric_pumped_storage_1,0.95,0,0 +EIC_natural_gas_fired_combined_cycle_1,0.93,0,0 +EIC_natural_gas_fired_combined_cycle_2,0.93,0,0 +EIC_natural_gas_fired_combustion_turbine_1,0.93,0,0 +EIC_natural_gas_fired_combustion_turbine_2,0.93,0,0 +EIC_natural_gas_internal_combustion_engine_1,0.93,0,0 +EIC_natural_gas_steam_turbine_1,0.93,0,0 +EIC_naturalgas_ccavgcf_moderate_0,0.93,0,0 +EIC_naturalgas_ccccsavgcf_conservative_0,0.93,0,0 +EIC_naturalgas_ctavgcf_moderate_0,0.93,0,0 +EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,0.93,0,0 +EIC_nuclear_1,0.93,0,0 +EIC_offshore_wind_turbine_1,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_0,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_1,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_138,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_139,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_28,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_29,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_68,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_69,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_8,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_9,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_0,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_1,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_18,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_19,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_38,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_39,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_6,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_68,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_69,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_7,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_0,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_1,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_10,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_11,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_18,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_19,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_28,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_29,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_4,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_0_5,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_0,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_1,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_2,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_3,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_4,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_5,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_6,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_7,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_8,0.8,0,0 +EIC_offshorewind_class3_moderate_fixed_1_9,0.8,0,0 +EIC_onshore_wind_turbine_1,0.8,0,0 +EIC_petroleum_liquids_1,0.93,0,0 +EIC_res_space_heat_cool_1,0.95,0,0 +EIC_res_water_heat_1,0.95,0,0 +EIC_small_hydroelectric_1,0.8,0,0 +EIC_solar_photovoltaic_1,0.8,0,0 +EIC_trans_light_duty_1,0.95,0,0 +TRE_advnuclear_atb_moderate_0,0,0.93,0 +TRE_batteries_1,0,0.95,0 +TRE_battery_moderate_0,0,0.95,0 +TRE_biomass_1,0,0.93,0 +TRE_comm_space_heat_cool_1,0,0.95,0 +TRE_comm_water_heat_1,0,0.95,0 +TRE_conventional_hydroelectric_1,0,0.8,0 +TRE_conventional_steam_coal_1,0,0.93,0 +TRE_conventional_steam_coal_2,0,0.93,0 +TRE_distributed_generation_1,0,0.8,0 +TRE_natural_gas_fired_combined_cycle_1,0,0.93,0 +TRE_natural_gas_fired_combined_cycle_2,0,0.93,0 +TRE_natural_gas_fired_combustion_turbine_1,0,0.93,0 +TRE_natural_gas_fired_combustion_turbine_2,0,0.93,0 +TRE_natural_gas_internal_combustion_engine_1,0,0.93,0 +TRE_natural_gas_steam_turbine_1,0,0.93,0 +TRE_naturalgas_ccavgcf_moderate_0,0,0.93,0 +TRE_naturalgas_ccccsavgcf_conservative_0,0,0.93,0 +TRE_naturalgas_ctavgcf_moderate_0,0,0.93,0 +TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0.93,0 +TRE_nuclear_1,0,0.93,0 +TRE_offshorewind_class12_moderate_floating_0_0,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_1,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_138,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_139,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_28,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_29,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_68,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_69,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_8,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_9,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_0,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_1,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_18,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_19,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_38,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_39,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_6,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_68,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_69,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_7,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_0,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_1,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_10,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_11,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_18,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_19,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_28,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_29,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_4,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_0_5,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_0,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_1,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_2,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_3,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_4,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_5,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_6,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_7,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_8,0,0.8,0 +TRE_offshorewind_class3_moderate_fixed_1_9,0,0.8,0 +TRE_onshore_wind_turbine_1,0,0.8,0 +TRE_petroleum_liquids_1,0,0.93,0 +TRE_res_space_heat_cool_1,0,0.95,0 +TRE_res_water_heat_1,0,0.95,0 +TRE_small_hydroelectric_1,0,0.8,0 +TRE_solar_photovoltaic_1,0,0.8,0 +TRE_trans_light_duty_1,0,0.95,0 +WECC_advnuclear_atb_moderate_0,0,0,0.93 +WECC_batteries_1,0,0,0.95 +WECC_battery_moderate_0,0,0,0.95 +WECC_biomass_1,0,0,0.93 +WECC_comm_space_heat_cool_1,0,0,0.95 +WECC_comm_water_heat_1,0,0,0.95 +WECC_conventional_hydroelectric_1,0,0,0.8 +WECC_conventional_steam_coal_1,0,0,0.93 +WECC_conventional_steam_coal_2,0,0,0.93 +WECC_distributed_generation_1,0,0,0.8 +WECC_geothermal_1,0,0,0.93 +WECC_hydroelectric_pumped_storage_1,0,0,0.95 +WECC_natural_gas_fired_combined_cycle_1,0,0,0.93 +WECC_natural_gas_fired_combined_cycle_2,0,0,0.93 +WECC_natural_gas_fired_combustion_turbine_1,0,0,0.93 +WECC_natural_gas_fired_combustion_turbine_2,0,0,0.93 +WECC_natural_gas_internal_combustion_engine_1,0,0,0.93 +WECC_natural_gas_steam_turbine_1,0,0,0.93 +WECC_naturalgas_ccavgcf_moderate_0,0,0,0.93 +WECC_naturalgas_ccccsavgcf_conservative_0,0,0,0.93 +WECC_naturalgas_ctavgcf_moderate_0,0,0,0.93 +WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0.93 +WECC_nuclear_1,0,0,0.93 +WECC_offshorewind_class12_moderate_floating_0_0,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_1,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_138,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_139,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_28,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_29,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_68,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_69,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_8,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_9,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_0,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_1,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_18,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_19,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_38,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_39,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_6,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_68,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_69,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_7,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_0,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_1,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_10,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_11,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_18,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_19,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_28,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_29,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_4,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_5,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_0,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_1,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_2,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_3,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_4,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_5,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_6,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_7,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_8,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_1_9,0,0,0.8 +WECC_onshore_wind_turbine_1,0,0,0.8 +WECC_petroleum_liquids_1,0,0,0.93 +WECC_res_space_heat_cool_1,0,0,0.95 +WECC_res_water_heat_1,0,0,0.95 +WECC_small_hydroelectric_1,0,0,0.8 +WECC_solar_photovoltaic_1,0,0,0.8 +WECC_trans_light_duty_1,0,0,0.95 +EIC_landbasedwind_class1_moderate_0,0.95,0,0 +EIC_landbasedwind_class1_moderate_1,0.95,0,0 +EIC_landbasedwind_class1_moderate_2,0.95,0,0 +EIC_landbasedwind_class1_moderate_3,0.95,0,0 +EIC_landbasedwind_class1_moderate_4,0.95,0,0 +EIC_landbasedwind_class1_moderate_5,0.95,0,0 +EIC_landbasedwind_class1_moderate_6,0.95,0,0 +EIC_landbasedwind_class1_moderate_7,0.95,0,0 +EIC_landbasedwind_class1_moderate_8,0.95,0,0 +EIC_landbasedwind_class1_moderate_9,0.95,0,0 +EIC_storage_metalair_advanced_0,0.95,0,0 +EIC_utilitypv_class1_moderate_0,0.95,0,0 +EIC_utilitypv_class1_moderate_1,0.95,0,0 +EIC_utilitypv_class1_moderate_2,0.95,0,0 +EIC_utilitypv_class1_moderate_3,0.95,0,0 +EIC_utilitypv_class1_moderate_4,0.95,0,0 +EIC_utilitypv_class1_moderate_5,0.95,0,0 +EIC_utilitypv_class1_moderate_6,0.95,0,0 +EIC_utilitypv_class1_moderate_7,0.95,0,0 +EIC_utilitypv_class1_moderate_8,0.95,0,0 +EIC_utilitypv_class1_moderate_9,0.95,0,0 +TRE_landbasedwind_class1_moderate_0,0,0.95,0 +TRE_landbasedwind_class1_moderate_1,0,0.95,0 +TRE_landbasedwind_class1_moderate_2,0,0.95,0 +TRE_landbasedwind_class1_moderate_3,0,0.95,0 +TRE_landbasedwind_class1_moderate_4,0,0.95,0 +TRE_landbasedwind_class1_moderate_5,0,0.95,0 +TRE_landbasedwind_class1_moderate_6,0,0.95,0 +TRE_landbasedwind_class1_moderate_7,0,0.95,0 +TRE_landbasedwind_class1_moderate_8,0,0.95,0 +TRE_landbasedwind_class1_moderate_9,0,0.95,0 +TRE_storage_metalair_advanced_0,0,0.95,0 +TRE_utilitypv_class1_moderate_0,0,0.95,0 +TRE_utilitypv_class1_moderate_1,0,0.95,0 +TRE_utilitypv_class1_moderate_2,0,0.95,0 +TRE_utilitypv_class1_moderate_3,0,0.95,0 +TRE_utilitypv_class1_moderate_4,0,0.95,0 +TRE_utilitypv_class1_moderate_5,0,0.95,0 +TRE_utilitypv_class1_moderate_6,0,0.95,0 +TRE_utilitypv_class1_moderate_7,0,0.95,0 +TRE_utilitypv_class1_moderate_8,0,0.95,0 +TRE_utilitypv_class1_moderate_9,0,0.95,0 +WECC_landbasedwind_class1_moderate_0,0,0,0.95 +WECC_landbasedwind_class1_moderate_1,0,0,0.95 +WECC_landbasedwind_class1_moderate_2,0,0,0.95 +WECC_landbasedwind_class1_moderate_3,0,0,0.95 +WECC_landbasedwind_class1_moderate_4,0,0,0.95 +WECC_landbasedwind_class1_moderate_5,0,0,0.95 +WECC_landbasedwind_class1_moderate_6,0,0,0.95 +WECC_landbasedwind_class1_moderate_7,0,0,0.95 +WECC_landbasedwind_class1_moderate_8,0,0,0.95 +WECC_landbasedwind_class1_moderate_9,0,0,0.95 +WECC_storage_metalair_advanced_0,0,0,0.95 +WECC_utilitypv_class1_moderate_0,0,0,0.95 +WECC_utilitypv_class1_moderate_1,0,0,0.95 +WECC_utilitypv_class1_moderate_2,0,0,0.95 +WECC_utilitypv_class1_moderate_3,0,0,0.95 +WECC_utilitypv_class1_moderate_4,0,0,0.95 +WECC_utilitypv_class1_moderate_5,0,0,0.95 +WECC_utilitypv_class1_moderate_6,0,0,0.95 +WECC_utilitypv_class1_moderate_7,0,0,0.95 +WECC_utilitypv_class1_moderate_8,0,0,0.95 +WECC_utilitypv_class1_moderate_9,0,0,0.95 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Resource_maximum_capacity_requirement.csv b/Example_Systems/VREStor_Example/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..365b05d024 --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,2 @@ +Resource,Max_Cap_1,Max_Cap_2,Max_Cap_3,Max_Cap_Stor_1,Max_Cap_Solar_1,Max_Cap_Wind_1,Max_Cap_Stor_2,Max_Cap_Solar_2,Max_Cap_Wind_2,Max_Cap_Stor_3,Max_Cap_Solar_3,Max_Cap_Wind_3 +EIC_landbasedwind_class1_moderate_0,0,0,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Resource_minimum_capacity_requirement.csv b/Example_Systems/VREStor_Example/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..b0e5718026 --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,272 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +EIC_storage_metalair_advanced_0,0,0,0 +EIC_landbasedwind_class1_moderate_0,0,0,0 +EIC_landbasedwind_class1_moderate_1,0,0,0 +EIC_landbasedwind_class1_moderate_2,0,0,0 +EIC_landbasedwind_class1_moderate_3,0,0,0 +EIC_landbasedwind_class1_moderate_4,0,0,0 +EIC_landbasedwind_class1_moderate_5,0,0,0 +EIC_landbasedwind_class1_moderate_6,0,0,0 +EIC_landbasedwind_class1_moderate_7,0,0,0 +EIC_landbasedwind_class1_moderate_8,0,0,0 +EIC_landbasedwind_class1_moderate_9,0,0,0 +EIC_utilitypv_class1_moderate_0,0,0,0 +EIC_utilitypv_class1_moderate_1,0,0,0 +EIC_utilitypv_class1_moderate_2,0,0,0 +EIC_utilitypv_class1_moderate_3,0,0,0 +EIC_utilitypv_class1_moderate_4,0,0,0 +EIC_utilitypv_class1_moderate_5,0,0,0 +EIC_utilitypv_class1_moderate_6,0,0,0 +EIC_utilitypv_class1_moderate_7,0,0,0 +EIC_utilitypv_class1_moderate_8,0,0,0 +EIC_utilitypv_class1_moderate_9,0,0,0 +TRE_storage_metalair_advanced_0,0,0,0 +TRE_landbasedwind_class1_moderate_0,0,0,0 +TRE_landbasedwind_class1_moderate_1,0,0,0 +TRE_landbasedwind_class1_moderate_2,0,0,0 +TRE_landbasedwind_class1_moderate_3,0,0,0 +TRE_landbasedwind_class1_moderate_4,0,0,0 +TRE_landbasedwind_class1_moderate_5,0,0,0 +TRE_landbasedwind_class1_moderate_6,0,0,0 +TRE_landbasedwind_class1_moderate_7,0,0,0 +TRE_landbasedwind_class1_moderate_8,0,0,0 +TRE_landbasedwind_class1_moderate_9,0,0,0 +TRE_utilitypv_class1_moderate_0,0,0,0 +TRE_utilitypv_class1_moderate_1,0,0,0 +TRE_utilitypv_class1_moderate_2,0,0,0 +TRE_utilitypv_class1_moderate_3,0,0,0 +TRE_utilitypv_class1_moderate_4,0,0,0 +TRE_utilitypv_class1_moderate_5,0,0,0 +TRE_utilitypv_class1_moderate_6,0,0,0 +TRE_utilitypv_class1_moderate_7,0,0,0 +TRE_utilitypv_class1_moderate_8,0,0,0 +TRE_utilitypv_class1_moderate_9,0,0,0 +WECC_storage_metalair_advanced_0,0,0,0 +WECC_landbasedwind_class1_moderate_0,0,0,0 +WECC_landbasedwind_class1_moderate_1,0,0,0 +WECC_landbasedwind_class1_moderate_2,0,0,0 +WECC_landbasedwind_class1_moderate_3,0,0,0 +WECC_landbasedwind_class1_moderate_4,0,0,0 +WECC_landbasedwind_class1_moderate_5,0,0,0 +WECC_landbasedwind_class1_moderate_6,0,0,0 +WECC_landbasedwind_class1_moderate_7,0,0,0 +WECC_landbasedwind_class1_moderate_8,0,0,0 +WECC_landbasedwind_class1_moderate_9,0,0,0 +WECC_utilitypv_class1_moderate_0,0,0,0 +WECC_utilitypv_class1_moderate_1,0,0,0 +WECC_utilitypv_class1_moderate_2,0,0,0 +WECC_utilitypv_class1_moderate_3,0,0,0 +WECC_utilitypv_class1_moderate_4,0,0,0 +WECC_utilitypv_class1_moderate_5,0,0,0 +WECC_utilitypv_class1_moderate_6,0,0,0 +WECC_utilitypv_class1_moderate_7,0,0,0 +WECC_utilitypv_class1_moderate_8,0,0,0 +WECC_utilitypv_class1_moderate_9,0,0,0 +WECC_trans_light_duty_1,0,0,0 +EIC_trans_light_duty_1,0,0,0 +TRE_trans_light_duty_1,0,0,0 +WECC_comm_water_heat_1,0,0,0 +EIC_comm_water_heat_1,0,0,0 +TRE_comm_water_heat_1,0,0,0 +WECC_res_water_heat_1,0,0,0 +EIC_res_water_heat_1,0,0,0 +TRE_res_water_heat_1,0,0,0 +WECC_comm_space_heat_cool_1,0,0,0 +EIC_comm_space_heat_cool_1,0,0,0 +TRE_comm_space_heat_cool_1,0,0,0 +WECC_res_space_heat_cool_1,0,0,0 +EIC_res_space_heat_cool_1,0,0,0 +TRE_res_space_heat_cool_1,0,0,0 +EIC_conventional_hydroelectric_1,0,0,0 +TRE_conventional_hydroelectric_1,0,0,0 +WECC_conventional_hydroelectric_1,0,0,0 +EIC_biomass_1,0,0,0 +EIC_small_hydroelectric_1,0,0,0 +TRE_biomass_1,0,0,0 +TRE_small_hydroelectric_1,0,0,0 +WECC_biomass_1,0,0,0 +WECC_small_hydroelectric_1,0,0,0 +WECC_distributed_generation_1,0,0,0 +EIC_distributed_generation_1,0,0,0 +TRE_distributed_generation_1,0,0,0 +EIC_batteries_1,0,0,0 +EIC_hydroelectric_pumped_storage_1,0,0,0 +TRE_batteries_1,0,0,0 +WECC_batteries_1,0,0,0 +WECC_hydroelectric_pumped_storage_1,0,0,0 +EIC_battery_moderate_0,0,0,0 +TRE_battery_moderate_0,0,0,0 +WECC_battery_moderate_0,0,0,0 +EIC_conventional_steam_coal_1,0,0,0 +EIC_conventional_steam_coal_2,0,0,0 +EIC_natural_gas_fired_combined_cycle_1,0,0,0 +EIC_natural_gas_fired_combined_cycle_2,0,0,0 +EIC_natural_gas_fired_combustion_turbine_1,0,0,0 +EIC_natural_gas_fired_combustion_turbine_2,0,0,0 +EIC_natural_gas_internal_combustion_engine_1,0,0,0 +EIC_natural_gas_steam_turbine_1,0,0,0 +EIC_nuclear_1,0,0,0 +EIC_petroleum_liquids_1,0,0,0 +TRE_conventional_steam_coal_1,0,0,0 +TRE_conventional_steam_coal_2,0,0,0 +TRE_natural_gas_fired_combined_cycle_1,0,0,0 +TRE_natural_gas_fired_combined_cycle_2,0,0,0 +TRE_natural_gas_fired_combustion_turbine_1,0,0,0 +TRE_natural_gas_fired_combustion_turbine_2,0,0,0 +TRE_natural_gas_internal_combustion_engine_1,0,0,0 +TRE_natural_gas_steam_turbine_1,0,0,0 +TRE_nuclear_1,0,0,0 +TRE_petroleum_liquids_1,0,0,0 +WECC_conventional_steam_coal_1,0,0,0 +WECC_conventional_steam_coal_2,0,0,0 +WECC_natural_gas_fired_combined_cycle_1,0,0,0 +WECC_natural_gas_fired_combined_cycle_2,0,0,0 +WECC_natural_gas_fired_combustion_turbine_1,0,0,0 +WECC_natural_gas_fired_combustion_turbine_2,0,0,0 +WECC_natural_gas_internal_combustion_engine_1,0,0,0 +WECC_natural_gas_steam_turbine_1,0,0,0 +WECC_nuclear_1,0,0,0 +WECC_petroleum_liquids_1,0,0,0 +EIC_naturalgas_ccavgcf_moderate_0,0,0,0 +EIC_naturalgas_ctavgcf_moderate_0,0,0,0 +EIC_naturalgas_ccccsavgcf_conservative_0,0,0,0 +EIC_advnuclear_atb_moderate_0,0,0,0 +TRE_naturalgas_ccavgcf_moderate_0,0,0,0 +TRE_naturalgas_ctavgcf_moderate_0,0,0,0 +TRE_naturalgas_ccccsavgcf_conservative_0,0,0,0 +TRE_advnuclear_atb_moderate_0,0,0,0 +WECC_naturalgas_ccavgcf_moderate_0,0,0,0 +WECC_naturalgas_ctavgcf_moderate_0,0,0,0 +WECC_naturalgas_ccccsavgcf_conservative_0,0,0,0 +WECC_advnuclear_atb_moderate_0,0,0,0 +EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0 +TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0 +WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0 +EIC_offshore_wind_turbine_1,0,0,0 +EIC_onshore_wind_turbine_1,0,0,0 +EIC_solar_photovoltaic_1,0,0,0 +TRE_onshore_wind_turbine_1,0,0,0 +TRE_solar_photovoltaic_1,0,0,0 +WECC_geothermal_1,0,0,0 +WECC_onshore_wind_turbine_1,0,0,0 +WECC_solar_photovoltaic_1,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_0,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_1,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_2,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_3,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_4,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_5,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_6,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_7,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_8,0,0,0 +EIC_offshorewind_class3_moderate_fixed_1_9,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_0,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_1,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_4,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_5,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_10,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_11,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_18,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_19,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_28,0,0,0 +EIC_offshorewind_class3_moderate_fixed_0_29,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_0,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_1,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_6,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_7,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_18,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_19,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_38,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_39,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_68,0,0,0 +EIC_offshorewind_class12_moderate_floating_1_69,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_0,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_1,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_8,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_9,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_28,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_29,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_68,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_69,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_138,0,0,0 +EIC_offshorewind_class12_moderate_floating_0_139,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_0,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_1,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_2,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_3,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_4,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_5,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_6,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_7,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_8,0,0,0 +TRE_offshorewind_class3_moderate_fixed_1_9,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_0,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_1,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_4,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_5,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_10,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_11,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_18,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_19,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_28,0,0,0 +TRE_offshorewind_class3_moderate_fixed_0_29,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_0,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_1,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_6,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_7,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_18,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_19,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_38,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_39,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_68,0,0,0 +TRE_offshorewind_class12_moderate_floating_1_69,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_0,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_1,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_8,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_9,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_28,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_29,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_68,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_69,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_138,0,0,0 +TRE_offshorewind_class12_moderate_floating_0_139,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_0,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_1,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_2,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_3,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_4,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_5,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_6,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_7,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_8,0,0,0 +WECC_offshorewind_class3_moderate_fixed_1_9,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_0,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_1,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_4,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_5,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_10,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_11,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_18,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_19,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_28,0,0,0 +WECC_offshorewind_class3_moderate_fixed_0_29,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_0,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_1,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_6,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_7,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_18,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_19,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_38,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_39,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_68,0,0,0 +WECC_offshorewind_class12_moderate_floating_1_69,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_0,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_1,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_8,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_9,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_28,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_29,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_68,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_69,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_138,0,0,0 +WECC_offshorewind_class12_moderate_floating_0_139,0,0,0 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Storage.csv b/Example_Systems/VREStor_Example/Resources/Storage.csv new file mode 100644 index 0000000000..b1369bf4fe --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Storage.csv @@ -0,0 +1,9 @@ +Resource,Zone,Model,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Max_Cap_MW,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,region,technology,cluster +EIC_batteries_1,1,1,1424.4,712.2,0,0,16.96,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.041,0,0.92,0.92,1,10,EIC,Batteries,1 +EIC_hydroelectric_pumped_storage_1,1,1,275638,17783.1,0,0,170.99,0,0,0,47048,0,0,0.15,0.15,10.34,None,0.524,0,0.866,0.866,1,20,EIC,Hydroelectric Pumped Storage,1 +TRE_batteries_1,2,1,721.4,360.7,0,0,45.09,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.001,0,0.92,0.92,1,10,TRE,Batteries,1 +WECC_batteries_1,3,1,3611,1357.5,0,0,28.28,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.02,0,0.92,0.92,1,10,WECC,Batteries,1 +WECC_hydroelectric_pumped_storage_1,3,1,70790,4567.1,0,0,101.49,0,0,0,47048,0,0,0.15,0.15,10.34,None,0.175,0,0.866,0.866,1,20,WECC,Hydroelectric Pumped Storage,1 +EIC_battery_moderate_0,1,1,0,0,1,1,1,-1,-1,19978,5955,11897,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,EIC,Battery_*_Moderate,0 +TRE_battery_moderate_0,2,1,0,0,1,1,1,-1,-1,19389,5955,11546,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,TRE,Battery_*_Moderate,0 +WECC_battery_moderate_0,3,1,0,0,1,1,1,-1,-1,20202,5955,12030,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,WECC,Battery_*_Moderate,0 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Thermal.csv b/Example_Systems/VREStor_Example/Resources/Thermal.csv new file mode 100644 index 0000000000..72354a8148 --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Thermal.csv @@ -0,0 +1,46 @@ +Resource,Zone,Model,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,CO2_Capture_Rate,CO2_Capture_Cost_per_Metric_Ton,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,region,technology,cluster +EIC_conventional_steam_coal_1,1,1,0,12806.9,0,1,177.87,0,0,0,78258,1.88,124,16.5,13.34,east_north_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,EIC,Conventional Steam Coal,1 +EIC_conventional_steam_coal_2,1,1,0,109345.4,0,1,584.74,0,0,0,64567,1.88,124,16.5,10.89,east_north_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,EIC,Conventional Steam Coal,2 +EIC_natural_gas_fired_combined_cycle_1,1,1,0,27155.3,0,1,163.59,0,0,0,16322,4.53,92,2,9.24,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Fired Combined Cycle,1 +EIC_natural_gas_fired_combined_cycle_2,1,1,0,169897.4,0,1,638.71,0,0,0,11042,3.58,92,2,7.34,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Fired Combined Cycle,2 +EIC_natural_gas_fired_combustion_turbine_1,1,1,0,98926.5,0,1,100.13,0,0,0,10031,5.28,119,3.5,12.03,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Fired Combustion Turbine,1 +EIC_natural_gas_fired_combustion_turbine_2,1,1,0,10412.9,0,1,31.27,0,0,0,13557,5.28,119,3.5,14.66,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Fired Combustion Turbine,2 +EIC_natural_gas_internal_combustion_engine_1,1,1,0,2578.5,0,1,4.44,0,0,0,21000,5.29,38,0,10.29,east_north_central_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Internal Combustion Engine,1 +EIC_natural_gas_steam_turbine_1,1,1,0,39625.2,0,1,203.21,0,0,0,35537,1.06,87,13.7,12.8,east_north_central_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Steam Turbine,1 +EIC_nuclear_1,1,1,0,82406.6,0,1,1030.08,0,0,0,214812,2.84,248,0,10.45,east_north_central_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,EIC,Nuclear,1 +EIC_petroleum_liquids_1,1,1,0,23196.2,0,1,9.96,0,0,0,21000,7.97,38,0,15.5,east_north_central_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,Petroleum Liquids,1 +TRE_conventional_steam_coal_1,2,1,0,5063.6,0,1,723.37,0,0,0,60405,1.88,124,16.5,10.33,west_south_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,TRE,Conventional Steam Coal,1 +TRE_conventional_steam_coal_2,2,1,0,3713,0,1,530.43,0,0,0,68432,1.88,124,16.5,12.13,west_south_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,TRE,Conventional Steam Coal,2 +TRE_natural_gas_fired_combined_cycle_1,2,1,0,30139.1,0,1,579.6,0,0,0,10912,3.59,92,2,7.72,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Fired Combined Cycle,1 +TRE_natural_gas_fired_combined_cycle_2,2,1,0,6317.6,0,1,315.88,0,0,0,15698,4.36,92,2,9.8,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Fired Combined Cycle,2 +TRE_natural_gas_fired_combustion_turbine_1,2,1,0,2924,0,1,81.22,0,0,0,10001,5.28,119,3.5,14.08,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Fired Combustion Turbine,1 +TRE_natural_gas_fired_combustion_turbine_2,2,1,0,2826.9,0,1,50.48,0,0,0,11926,5.28,119,3.5,11.11,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Fired Combustion Turbine,2 +TRE_natural_gas_internal_combustion_engine_1,2,1,0,502.7,0,1,10.7,0,0,0,21000,4.72,38,0,9.18,west_south_central_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Internal Combustion Engine,1 +TRE_natural_gas_steam_turbine_1,2,1,0,8249.5,0,1,235.7,0,0,0,34182,1.06,87,13.7,13.24,west_south_central_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Steam Turbine,1 +TRE_nuclear_1,2,1,0,5120,0,1,1280,0,0,0,193275,2.84,248,0,10.45,west_south_central_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,TRE,Nuclear,1 +TRE_petroleum_liquids_1,2,1,0,23.7,0,1,1.48,0,0,0,21000,6.38,38,0,12.4,west_south_central_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,Petroleum Liquids,1 +WECC_conventional_steam_coal_1,3,1,0,11415.2,0,1,496.31,0,0,0,64165,1.88,124,16.5,10.63,mountain_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,WECC,Conventional Steam Coal,1 +WECC_conventional_steam_coal_2,3,1,0,2074.5,0,1,129.66,0,0,0,77721,1.88,124,16.5,12.2,mountain_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,WECC,Conventional Steam Coal,2 +WECC_natural_gas_fired_combined_cycle_1,3,1,0,37593.3,0,1,475.86,0,0,0,10399,3.6,92,2,7.78,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Fired Combined Cycle,1 +WECC_natural_gas_fired_combined_cycle_2,3,1,0,12502.4,0,1,158.26,0,0,0,16492,4.55,92,2,8.51,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Fired Combined Cycle,2 +WECC_natural_gas_fired_combustion_turbine_1,3,1,0,15252.7,0,1,71.61,0,0,0,10479,5.28,119,3.5,11.06,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Fired Combustion Turbine,1 +WECC_natural_gas_fired_combustion_turbine_2,3,1,0,6281.6,0,1,27.92,0,0,0,13486,5.28,119,3.5,12.78,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Fired Combustion Turbine,2 +WECC_natural_gas_internal_combustion_engine_1,3,1,0,1282.7,0,1,6.51,0,0,0,21000,4.88,38,0,9.49,mountain_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Internal Combustion Engine,1 +WECC_natural_gas_steam_turbine_1,3,1,0,2669.5,0,1,95.34,0,0,0,51303,1.06,87,13.7,12.4,mountain_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Steam Turbine,1 +WECC_nuclear_1,3,1,0,5175,0,1,1293.75,0,0,0,211822,2.84,248,0,10.45,mountain_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,WECC,Nuclear,1 +WECC_petroleum_liquids_1,3,1,0,636.2,0,1,4.24,0,0,0,21000,7.2,38,0,14,mountain_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,Petroleum Liquids,1 +EIC_naturalgas_ccavgcf_moderate_0,1,1,0,0,1,1,500,0,-1,56026,28000,2,106,2,6.36,east_north_central_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,EIC,NaturalGas_CCAvgCF_Moderate,0 +EIC_naturalgas_ctavgcf_moderate_0,1,1,0,0,1,1,100,0,-1,45192,21000,5,137,3.5,9.72,east_north_central_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,NaturalGas_CTAvgCF_Moderate,0 +EIC_naturalgas_ccccsavgcf_conservative_0,1,1,0,0,1,1,500,0,-1,120812,67000,6,106,0,7.16,east_north_central_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,EIC,NaturalGas_CCCCSAvgCF_Conservative,0 +EIC_advnuclear_atb_moderate_0,1,1,0,0,1,1,500,0,-1,45000,0,2.84,285,0,10.44,east_north_central_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,EIC,AdvNuclear_ATB_Moderate,0 +TRE_naturalgas_ccavgcf_moderate_0,2,1,0,0,1,1,500,0,-1,42007,28000,2,106,2,6.36,west_south_central_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,TRE,NaturalGas_CCAvgCF_Moderate,0 +TRE_naturalgas_ctavgcf_moderate_0,2,1,0,0,1,1,100,0,-1,35319,21000,5,137,3.5,9.72,west_south_central_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,NaturalGas_CTAvgCF_Moderate,0 +TRE_naturalgas_ccccsavgcf_conservative_0,2,1,0,0,1,1,500,0,-1,106685,67000,6,106,0,7.16,west_south_central_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,TRE,NaturalGas_CCCCSAvgCF_Conservative,0 +TRE_advnuclear_atb_moderate_0,2,1,0,0,1,1,500,0,-1,450000,0,2.84,285,0,10.44,west_south_central_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,TRE,AdvNuclear_ATB_Moderate,0 +WECC_naturalgas_ccavgcf_moderate_0,3,1,0,0,1,1,500,0,-1,59543,28000,2,106,2,6.36,mountain_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,WECC,NaturalGas_CCAvgCF_Moderate,0 +WECC_naturalgas_ctavgcf_moderate_0,3,1,0,0,1,1,100,0,-1,45587,21000,5,137,3.5,9.72,mountain_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,NaturalGas_CTAvgCF_Moderate,0 +WECC_naturalgas_ccccsavgcf_conservative_0,3,1,0,0,1,1,500,0,-1,119927,67000,6,106,0,7.16,mountain_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,WECC,NaturalGas_CCCCSAvgCF_Conservative,0 +WECC_advnuclear_atb_moderate_0,3,1,0,0,1,1,500,0,-1,450000,0,2.84,285,0,10.44,mountain_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,WECC,AdvNuclear_ATB_Moderate,0 +EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,1,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 +TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,2,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 +WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,3,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Vre.csv b/Example_Systems/VREStor_Example/Resources/Vre.csv new file mode 100644 index 0000000000..53da51313f --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Vre.csv @@ -0,0 +1,129 @@ +Resource,Zone,Num_VRE_Bins,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Self_Disch,Eff_Up,Eff_Down,Ramp_Up_Percentage,Ramp_Dn_Percentage,region,technology,cluster +EIC_offshore_wind_turbine_1,1,1,0,29.3,0,1,29.3,0,0,0,111496,0,10.34,None,0,1,1,1,1,EIC,Offshore Wind Turbine,1 +EIC_onshore_wind_turbine_1,1,1,0,47407.4,0,1,66.77,0,0,0,43000,0,10.34,None,0,1,1,1,1,EIC,Onshore Wind Turbine,1 +EIC_solar_photovoltaic_1,1,1,0,8533.9,0,1,5.95,0,0,0,22623,0,10.34,None,0,1,1,1,1,EIC,Solar Photovoltaic,1 +TRE_onshore_wind_turbine_1,2,1,0,21683.1,0,1,163.03,0,0,0,43000,0,10.34,None,0,1,1,1,1,TRE,Onshore Wind Turbine,1 +TRE_solar_photovoltaic_1,2,1,0,1821.5,0,1,65.05,0,0,0,22623,0,10.34,None,0,1,1,1,1,TRE,Solar Photovoltaic,1 +WECC_geothermal_1,3,1,0,1752.4,0,0,12,0,0,0,209101,0,10.34,None,0,1,1,1,1,WECC,Geothermal,1 +WECC_onshore_wind_turbine_1,3,1,0,20644.2,0,1,68.81,0,0,0,43000,0,10.34,None,0,1,1,1,1,WECC,Onshore Wind Turbine,1 +WECC_solar_photovoltaic_1,3,1,0,14659.8,0,1,14.87,0,0,0,22623,0,10.34,None,0,1,1,1,1,WECC,Solar Photovoltaic,1 +EIC_offshorewind_class3_moderate_fixed_1_0,1,1,0,0,1,1,1,0,65762.8,147250,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,0 +EIC_offshorewind_class3_moderate_fixed_1_1,1,1,0,0,1,1,1,0,14399.2,157328,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,1 +EIC_offshorewind_class3_moderate_fixed_1_2,1,1,0,0,1,1,1,0,34280.8,153961,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,2 +EIC_offshorewind_class3_moderate_fixed_1_3,1,1,0,0,1,1,1,0,101840.5,168852,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,3 +EIC_offshorewind_class3_moderate_fixed_1_4,1,1,0,0,1,1,1,0,118605,164784,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,4 +EIC_offshorewind_class3_moderate_fixed_1_5,1,1,0,0,1,1,1,0,18875.6,146792,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,5 +EIC_offshorewind_class3_moderate_fixed_1_6,1,1,0,0,1,1,1,0,79943.7,144977,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,6 +EIC_offshorewind_class3_moderate_fixed_1_7,1,1,0,0,1,1,1,0,23454.7,347411,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,7 +EIC_offshorewind_class3_moderate_fixed_1_8,1,1,0,0,1,1,1,0,59461.7,393568,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,8 +EIC_offshorewind_class3_moderate_fixed_1_9,1,1,0,0,1,1,1,0,73503.9,155384,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,9 +EIC_offshorewind_class3_moderate_fixed_0_0,1,1,0,0,1,1,1,0,65762.8,147250,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,0 +EIC_offshorewind_class3_moderate_fixed_0_1,1,1,0,0,1,1,1,0,14399.2,157328,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,1 +EIC_offshorewind_class3_moderate_fixed_0_4,1,1,0,0,1,1,1,0,34280.8,153961,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,4 +EIC_offshorewind_class3_moderate_fixed_0_5,1,1,0,0,1,1,1,0,101840.5,168852,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,5 +EIC_offshorewind_class3_moderate_fixed_0_10,1,1,0,0,1,1,1,0,118605,164784,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,10 +EIC_offshorewind_class3_moderate_fixed_0_11,1,1,0,0,1,1,1,0,18875.6,146792,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,11 +EIC_offshorewind_class3_moderate_fixed_0_18,1,1,0,0,1,1,1,0,79943.7,144977,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,18 +EIC_offshorewind_class3_moderate_fixed_0_19,1,1,0,0,1,1,1,0,23454.7,347411,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,19 +EIC_offshorewind_class3_moderate_fixed_0_28,1,1,0,0,1,1,1,0,59461.7,393568,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,28 +EIC_offshorewind_class3_moderate_fixed_0_29,1,1,0,0,1,1,1,0,73503.9,155384,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,29 +EIC_offshorewind_class12_moderate_floating_1_0,1,1,0,0,1,1,1,0,65762.8,204577,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,0 +EIC_offshorewind_class12_moderate_floating_1_1,1,1,0,0,1,1,1,0,14399.2,214655,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,1 +EIC_offshorewind_class12_moderate_floating_1_6,1,1,0,0,1,1,1,0,34280.8,211288,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,6 +EIC_offshorewind_class12_moderate_floating_1_7,1,1,0,0,1,1,1,0,101840.5,226179,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,7 +EIC_offshorewind_class12_moderate_floating_1_18,1,1,0,0,1,1,1,0,118605,222111,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,18 +EIC_offshorewind_class12_moderate_floating_1_19,1,1,0,0,1,1,1,0,18875.6,204119,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,19 +EIC_offshorewind_class12_moderate_floating_1_38,1,1,0,0,1,1,1,0,79943.7,202304,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,38 +EIC_offshorewind_class12_moderate_floating_1_39,1,1,0,0,1,1,1,0,23454.7,404738,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,39 +EIC_offshorewind_class12_moderate_floating_1_68,1,1,0,0,1,1,1,0,59461.7,450895,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,68 +EIC_offshorewind_class12_moderate_floating_1_69,1,1,0,0,1,1,1,0,73503.9,212711,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,69 +EIC_offshorewind_class12_moderate_floating_0_0,1,1,0,0,1,1,1,0,65762.8,204577,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,0 +EIC_offshorewind_class12_moderate_floating_0_1,1,1,0,0,1,1,1,0,14399.2,214655,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,1 +EIC_offshorewind_class12_moderate_floating_0_8,1,1,0,0,1,1,1,0,34280.8,211288,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,8 +EIC_offshorewind_class12_moderate_floating_0_9,1,1,0,0,1,1,1,0,101840.5,226179,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,9 +EIC_offshorewind_class12_moderate_floating_0_28,1,1,0,0,1,1,1,0,118605,222111,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,28 +EIC_offshorewind_class12_moderate_floating_0_29,1,1,0,0,1,1,1,0,18875.6,204119,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,29 +EIC_offshorewind_class12_moderate_floating_0_68,1,1,0,0,1,1,1,0,79943.7,202304,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,68 +EIC_offshorewind_class12_moderate_floating_0_69,1,1,0,0,1,1,1,0,23454.7,404738,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,69 +EIC_offshorewind_class12_moderate_floating_0_138,1,1,0,0,1,1,1,0,59461.7,450895,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,138 +EIC_offshorewind_class12_moderate_floating_0_139,1,1,0,0,1,1,1,0,73503.9,212711,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,139 +TRE_offshorewind_class3_moderate_fixed_1_0,2,1,0,0,1,1,1,0,13077.5,145004,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,0 +TRE_offshorewind_class3_moderate_fixed_1_1,2,1,0,0,1,1,1,0,9995,158104,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,1 +TRE_offshorewind_class3_moderate_fixed_1_2,2,1,0,0,1,1,1,0,22842.5,140443,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,2 +TRE_offshorewind_class3_moderate_fixed_1_3,2,1,0,0,1,1,1,0,895,157772,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,3 +TRE_offshorewind_class3_moderate_fixed_1_4,2,1,0,0,1,1,1,0,20865,142961,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,4 +TRE_offshorewind_class3_moderate_fixed_1_5,2,1,0,0,1,1,1,0,4480,166128,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,5 +TRE_offshorewind_class3_moderate_fixed_1_6,2,1,0,0,1,1,1,0,23652,166849,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,6 +TRE_offshorewind_class3_moderate_fixed_1_7,2,1,0,0,1,1,1,0,10070,157895,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,7 +TRE_offshorewind_class3_moderate_fixed_1_8,2,1,0,0,1,1,1,0,20680,167576,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,8 +TRE_offshorewind_class3_moderate_fixed_1_9,2,1,0,0,1,1,1,0,16746,156072,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,9 +TRE_offshorewind_class3_moderate_fixed_0_0,2,1,0,0,1,1,1,0,13077.5,145004,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,0 +TRE_offshorewind_class3_moderate_fixed_0_1,2,1,0,0,1,1,1,0,9995,158104,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,1 +TRE_offshorewind_class3_moderate_fixed_0_4,2,1,0,0,1,1,1,0,22842.5,140443,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,4 +TRE_offshorewind_class3_moderate_fixed_0_5,2,1,0,0,1,1,1,0,895,157772,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,5 +TRE_offshorewind_class3_moderate_fixed_0_10,2,1,0,0,1,1,1,0,20865,142961,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,10 +TRE_offshorewind_class3_moderate_fixed_0_11,2,1,0,0,1,1,1,0,4480,166128,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,11 +TRE_offshorewind_class3_moderate_fixed_0_18,2,1,0,0,1,1,1,0,23652,166849,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,18 +TRE_offshorewind_class3_moderate_fixed_0_19,2,1,0,0,1,1,1,0,10070,157895,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,19 +TRE_offshorewind_class3_moderate_fixed_0_28,2,1,0,0,1,1,1,0,20680,167576,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,28 +TRE_offshorewind_class3_moderate_fixed_0_29,2,1,0,0,1,1,1,0,16746,156072,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,29 +TRE_offshorewind_class12_moderate_floating_1_0,2,1,0,0,1,1,1,0,13077.5,200994,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,0 +TRE_offshorewind_class12_moderate_floating_1_1,2,1,0,0,1,1,1,0,9995,214094,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,1 +TRE_offshorewind_class12_moderate_floating_1_6,2,1,0,0,1,1,1,0,22842.5,196433,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,6 +TRE_offshorewind_class12_moderate_floating_1_7,2,1,0,0,1,1,1,0,895,213762,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,7 +TRE_offshorewind_class12_moderate_floating_1_18,2,1,0,0,1,1,1,0,20865,198951,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,18 +TRE_offshorewind_class12_moderate_floating_1_19,2,1,0,0,1,1,1,0,4480,222118,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,19 +TRE_offshorewind_class12_moderate_floating_1_38,2,1,0,0,1,1,1,0,23652,222839,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,38 +TRE_offshorewind_class12_moderate_floating_1_39,2,1,0,0,1,1,1,0,10070,213885,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,39 +TRE_offshorewind_class12_moderate_floating_1_68,2,1,0,0,1,1,1,0,20680,223566,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,68 +TRE_offshorewind_class12_moderate_floating_1_69,2,1,0,0,1,1,1,0,16746,212062,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,69 +TRE_offshorewind_class12_moderate_floating_0_0,2,1,0,0,1,1,1,0,13077.5,200994,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,0 +TRE_offshorewind_class12_moderate_floating_0_1,2,1,0,0,1,1,1,0,9995,214094,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,1 +TRE_offshorewind_class12_moderate_floating_0_8,2,1,0,0,1,1,1,0,22842.5,196433,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,8 +TRE_offshorewind_class12_moderate_floating_0_9,2,1,0,0,1,1,1,0,895,213762,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,9 +TRE_offshorewind_class12_moderate_floating_0_28,2,1,0,0,1,1,1,0,20865,198951,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,28 +TRE_offshorewind_class12_moderate_floating_0_29,2,1,0,0,1,1,1,0,4480,222118,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,29 +TRE_offshorewind_class12_moderate_floating_0_68,2,1,0,0,1,1,1,0,23652,222839,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,68 +TRE_offshorewind_class12_moderate_floating_0_69,2,1,0,0,1,1,1,0,10070,213885,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,69 +TRE_offshorewind_class12_moderate_floating_0_138,2,1,0,0,1,1,1,0,20680,223566,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,138 +TRE_offshorewind_class12_moderate_floating_0_139,2,1,0,0,1,1,1,0,16746,212062,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,139 +WECC_offshorewind_class3_moderate_fixed_1_0,3,1,0,0,1,1,1,0,26916.5,174794,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,0 +WECC_offshorewind_class3_moderate_fixed_1_1,3,1,0,0,1,1,1,0,29943.3,179346,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,1 +WECC_offshorewind_class3_moderate_fixed_1_2,3,1,0,0,1,1,1,0,39553.5,177553,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,2 +WECC_offshorewind_class3_moderate_fixed_1_3,3,1,0,0,1,1,1,0,18780,162737,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,3 +WECC_offshorewind_class3_moderate_fixed_1_4,3,1,0,0,1,1,1,0,19994,174072,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,4 +WECC_offshorewind_class3_moderate_fixed_1_5,3,1,0,0,1,1,1,0,36016,175097,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,5 +WECC_offshorewind_class3_moderate_fixed_1_6,3,1,0,0,1,1,1,0,53762,174641,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,6 +WECC_offshorewind_class3_moderate_fixed_1_7,3,1,0,0,1,1,1,0,1544,151442,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,7 +WECC_offshorewind_class3_moderate_fixed_1_8,3,1,0,0,1,1,1,0,44128,176829,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,8 +WECC_offshorewind_class3_moderate_fixed_1_9,3,1,0,0,1,1,1,0,9122,151351,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,9 +WECC_offshorewind_class3_moderate_fixed_0_0,3,1,0,0,1,1,1,0,26916.5,174794,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,0 +WECC_offshorewind_class3_moderate_fixed_0_1,3,1,0,0,1,1,1,0,29943.3,179346,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,1 +WECC_offshorewind_class3_moderate_fixed_0_4,3,1,0,0,1,1,1,0,39553.5,177553,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,4 +WECC_offshorewind_class3_moderate_fixed_0_5,3,1,0,0,1,1,1,0,18780,162737,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,5 +WECC_offshorewind_class3_moderate_fixed_0_10,3,1,0,0,1,1,1,0,19994,174072,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,10 +WECC_offshorewind_class3_moderate_fixed_0_11,3,1,0,0,1,1,1,0,36016,175097,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,11 +WECC_offshorewind_class3_moderate_fixed_0_18,3,1,0,0,1,1,1,0,53762,174641,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,18 +WECC_offshorewind_class3_moderate_fixed_0_19,3,1,0,0,1,1,1,0,1544,151442,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,19 +WECC_offshorewind_class3_moderate_fixed_0_28,3,1,0,0,1,1,1,0,44128,176829,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,28 +WECC_offshorewind_class3_moderate_fixed_0_29,3,1,0,0,1,1,1,0,9122,151351,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,29 +WECC_offshorewind_class12_moderate_floating_1_0,3,1,0,0,1,1,1,0,26916.5,232121,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,0 +WECC_offshorewind_class12_moderate_floating_1_1,3,1,0,0,1,1,1,0,29943.3,236673,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,1 +WECC_offshorewind_class12_moderate_floating_1_6,3,1,0,0,1,1,1,0,39553.5,234880,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,6 +WECC_offshorewind_class12_moderate_floating_1_7,3,1,0,0,1,1,1,0,18780,220064,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,7 +WECC_offshorewind_class12_moderate_floating_1_18,3,1,0,0,1,1,1,0,19994,231399,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,18 +WECC_offshorewind_class12_moderate_floating_1_19,3,1,0,0,1,1,1,0,36016,232424,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,19 +WECC_offshorewind_class12_moderate_floating_1_38,3,1,0,0,1,1,1,0,53762,231968,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,38 +WECC_offshorewind_class12_moderate_floating_1_39,3,1,0,0,1,1,1,0,1544,208769,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,39 +WECC_offshorewind_class12_moderate_floating_1_68,3,1,0,0,1,1,1,0,44128,234156,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,68 +WECC_offshorewind_class12_moderate_floating_1_69,3,1,0,0,1,1,1,0,9122,208678,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,69 +WECC_offshorewind_class12_moderate_floating_0_0,3,1,0,0,1,1,1,0,26916.5,232121,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,0 +WECC_offshorewind_class12_moderate_floating_0_1,3,1,0,0,1,1,1,0,29943.3,236673,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,1 +WECC_offshorewind_class12_moderate_floating_0_8,3,1,0,0,1,1,1,0,39553.5,234880,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,8 +WECC_offshorewind_class12_moderate_floating_0_9,3,1,0,0,1,1,1,0,18780,220064,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,9 +WECC_offshorewind_class12_moderate_floating_0_28,3,1,0,0,1,1,1,0,19994,231399,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,28 +WECC_offshorewind_class12_moderate_floating_0_29,3,1,0,0,1,1,1,0,36016,232424,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,29 +WECC_offshorewind_class12_moderate_floating_0_68,3,1,0,0,1,1,1,0,53762,231968,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,68 +WECC_offshorewind_class12_moderate_floating_0_69,3,1,0,0,1,1,1,0,1544,208769,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,69 +WECC_offshorewind_class12_moderate_floating_0_138,3,1,0,0,1,1,1,0,44128,234156,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,138 +WECC_offshorewind_class12_moderate_floating_0_139,3,1,0,0,1,1,1,0,9122,208678,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,139 \ No newline at end of file diff --git a/Example_Systems/VREStor_Example/Resources/Vre_stor.csv b/Example_Systems/VREStor_Example/Resources/Vre_stor.csv new file mode 100644 index 0000000000..2f8755c54f --- /dev/null +++ b/Example_Systems/VREStor_Example/Resources/Vre_stor.csv @@ -0,0 +1,64 @@ +Resource,Zone,SOLAR,WIND,STOR_DC_DISCHARGE,STOR_DC_CHARGE,STOR_AC_DISCHARGE,STOR_AC_CHARGE,LDS_VRE_STOR,Existing_Cap_MW,Existing_Cap_MWh,Existing_Cap_Inverter_MW,Existing_Cap_Solar_MW,Existing_Cap_Wind_MW,Existing_Cap_Discharge_DC_MW,Existing_Cap_Charge_DC_MW,Existing_Cap_Discharge_AC_MW,Existing_Cap_Charge_AC_MW,New_Build,Can_Retire,Min_Cap_MW,Min_Cap_MWh,Min_Cap_Inverter_MW,Min_Cap_Solar_MW,Min_Cap_Wind_MW,Min_Cap_Discharge_DC_MW,Min_Cap_Charge_DC_MW,Min_Cap_Discharge_AC_MW,Min_Cap_Charge_AC_MW,Max_Cap_MW,Max_Cap_MWh,Max_Cap_Inverter_MW,Max_Cap_Solar_MW,Max_Cap_Wind_MW,Max_Cap_Discharge_DC_MW,Max_Cap_Charge_DC_MW,Max_Cap_Discharge_AC_MW,Max_Cap_Charge_AC_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Inv_Cost_Inverter_per_MWyr,Inv_Cost_Solar_per_MWyr,Inv_Cost_Wind_per_MWyr,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_Inverter_Cost_per_MWyr,Fixed_OM_Solar_Cost_per_MWyr,Fixed_OM_Wind_Cost_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_Discharge_DC,Var_OM_Cost_per_MWh_Charge_DC,Var_OM_Cost_per_MWh_Discharge_AC,Var_OM_Cost_per_MWh_Charge_AC,EtaInverter,Inverter_Ratio_Wind,Inverter_Ratio_Solar,Power_to_Energy_DC,Power_to_Energy_AC,Self_Disch,Eff_Up_DC,Eff_Down_DC,Eff_Up_AC,Eff_Down_AC,region,Resource_Type,technology,cluster +EIC_landbasedwind_class1_moderate_0,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,117315.5,-1,-1,-1,-1,14198,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +EIC_landbasedwind_class1_moderate_1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,139803.7,-1,-1,-1,-1,17082,0,0,0,0.15,7522,0,56817,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +EIC_landbasedwind_class1_moderate_2,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,114313.7,-1,-1,-1,-1,17267,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +EIC_landbasedwind_class1_moderate_3,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,81237.6,-1,-1,-1,-1,25483,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +EIC_landbasedwind_class1_moderate_4,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,81092.2,-1,-1,-1,-1,16488,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +EIC_landbasedwind_class1_moderate_5,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,54453.3,-1,-1,-1,-1,25720,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +EIC_landbasedwind_class1_moderate_6,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,82417.2,-1,-1,-1,-1,21224,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +EIC_landbasedwind_class1_moderate_7,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,26531.1,-1,-1,-1,-1,32633,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +EIC_landbasedwind_class1_moderate_8,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,58187.4,-1,-1,-1,-1,28526,0,0,0,0.15,7522,0,56817,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +EIC_landbasedwind_class1_moderate_9,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,194921.8,-1,-1,-1,-1,244462,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +EIC_storage_metalair_advanced_0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7522,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,standalone_storage,Storage_MetalAir_Advanced,0 +EIC_utilitypv_class1_moderate_0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1351663.04,-1,-1,-1,-1,-1,8863,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,0 +EIC_utilitypv_class1_moderate_1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,787394.14,-1,-1,-1,-1,-1,4464,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,1 +EIC_utilitypv_class1_moderate_2,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1683583.59,-1,-1,-1,-1,-1,14630,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,2 +EIC_utilitypv_class1_moderate_3,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1148387.24,-1,-1,-1,-1,-1,10126,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,3 +EIC_utilitypv_class1_moderate_4,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,2254699.98,-1,-1,-1,-1,-1,16248,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,4 +EIC_utilitypv_class1_moderate_5,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,879389.55,-1,-1,-1,-1,-1,22825,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,5 +EIC_utilitypv_class1_moderate_6,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1998829.95,-1,-1,-1,-1,-1,24566,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,6 +EIC_utilitypv_class1_moderate_7,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1123362.89,-1,-1,-1,-1,-1,21181,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,7 +EIC_utilitypv_class1_moderate_8,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,2501477.94,-1,-1,-1,-1,-1,32414,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,8 +EIC_utilitypv_class1_moderate_9,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,326479.4,-1,-1,-1,-1,-1,148669,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,9 +TRE_landbasedwind_class1_moderate_0,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,20796.6,-1,-1,-1,-1,14393,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +TRE_landbasedwind_class1_moderate_1,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,27529.5,-1,-1,-1,-1,20298,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +TRE_landbasedwind_class1_moderate_2,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,22035.5,-1,-1,-1,-1,14755,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +TRE_landbasedwind_class1_moderate_3,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,22639.4,-1,-1,-1,-1,23630,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +TRE_landbasedwind_class1_moderate_4,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,21021.7,-1,-1,-1,-1,12498,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +TRE_landbasedwind_class1_moderate_5,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,21153.5,-1,-1,-1,-1,23788,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +TRE_landbasedwind_class1_moderate_6,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,32345.3,-1,-1,-1,-1,15633,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +TRE_landbasedwind_class1_moderate_7,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,12398.9,-1,-1,-1,-1,29021,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +TRE_landbasedwind_class1_moderate_8,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,34789.4,-1,-1,-1,-1,40897,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +TRE_landbasedwind_class1_moderate_9,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,2448.4,-1,-1,-1,-1,146712,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +TRE_storage_metalair_advanced_0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7303,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,standalone_storage,Storage_MetalAir_Advanced,0 +TRE_utilitypv_class1_moderate_0,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,249716.61,-1,-1,-1,-1,-1,6412,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,0 +TRE_utilitypv_class1_moderate_1,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,150550.53,-1,-1,-1,-1,-1,8461,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,1 +TRE_utilitypv_class1_moderate_2,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,340227.68,-1,-1,-1,-1,-1,10479,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,2 +TRE_utilitypv_class1_moderate_3,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,232869.52,-1,-1,-1,-1,-1,14103,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,3 +TRE_utilitypv_class1_moderate_4,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,409644.17,-1,-1,-1,-1,-1,14224,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,4 +TRE_utilitypv_class1_moderate_5,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,224977.87,-1,-1,-1,-1,-1,18539,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,5 +TRE_utilitypv_class1_moderate_6,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,393113.89,-1,-1,-1,-1,-1,22325,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,6 +TRE_utilitypv_class1_moderate_7,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,248585.87,-1,-1,-1,-1,-1,17464,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,7 +TRE_utilitypv_class1_moderate_8,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,124347.08,-1,-1,-1,-1,-1,74721,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,8 +TRE_utilitypv_class1_moderate_9,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,477756.89,-1,-1,-1,-1,-1,29582,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,9 +WECC_landbasedwind_class1_moderate_0,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,109860.7,-1,-1,-1,-1,20294,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +WECC_landbasedwind_class1_moderate_1,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,47257.4,-1,-1,-1,-1,19872,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +WECC_landbasedwind_class1_moderate_2,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,88662.6,-1,-1,-1,-1,27185,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +WECC_landbasedwind_class1_moderate_3,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,40824.7,-1,-1,-1,-1,19137,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +WECC_landbasedwind_class1_moderate_4,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,109163.8,-1,-1,-1,-1,26039,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +WECC_landbasedwind_class1_moderate_5,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,25095.7,-1,-1,-1,-1,133609,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +WECC_landbasedwind_class1_moderate_6,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,100227,-1,-1,-1,-1,29900,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +WECC_landbasedwind_class1_moderate_7,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,34790.4,-1,-1,-1,-1,160193,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +WECC_landbasedwind_class1_moderate_8,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,64367.5,-1,-1,-1,-1,38235,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +WECC_landbasedwind_class1_moderate_9,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,77014.4,-1,-1,-1,-1,274991,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +WECC_storage_metalair_advanced_0,3,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7609,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,standalone_storage,Storage_MetalAir_Advanced,0 +WECC_utilitypv_class1_moderate_0,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,775652.15,-1,-1,-1,-1,-1,10320,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,0 +WECC_utilitypv_class1_moderate_1,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,207870.65,-1,-1,-1,-1,-1,6016,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,1 +WECC_utilitypv_class1_moderate_2,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1143504.83,-1,-1,-1,-1,-1,19411,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,2 +WECC_utilitypv_class1_moderate_3,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,35742.72,-1,-1,-1,-1,-1,3992,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,3 +WECC_utilitypv_class1_moderate_4,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1185544.36,-1,-1,-1,-1,-1,25714,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,4 +WECC_utilitypv_class1_moderate_5,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,31049.98,-1,-1,-1,-1,-1,8052,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,5 +WECC_utilitypv_class1_moderate_6,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1023622.34,-1,-1,-1,-1,-1,33457,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,6 +WECC_utilitypv_class1_moderate_7,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,82238,-1,-1,-1,-1,-1,16842,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,7 +WECC_utilitypv_class1_moderate_8,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1134234.27,-1,-1,-1,-1,-1,105939,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,8 +WECC_utilitypv_class1_moderate_9,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,94348.41,-1,-1,-1,-1,-1,28290,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,9 \ No newline at end of file diff --git a/README.md b/README.md index 5e63622ed0..3108faa697 100644 --- a/README.md +++ b/README.md @@ -176,8 +176,8 @@ A full example case with Gurobi as an optimizer is given in `Example_Systems/Sma ## 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 the `Generators_data.csv` file denoting the type of each technology. -2. Add a `MGA` column in the `Generators_data.csv` file denoting the availability of the technology. +1. Add a `Resource_Type` column in the resource `.csv` files (included in the `Resources` folder) denoting the type of each technology. +2. Add a `MGA` column in the resource `.csv` files (included in the `Resources` folder) 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. diff --git a/docs/make.jl b/docs/make.jl index 4c76763ebe..48042b517c 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -51,6 +51,7 @@ pages = OrderedDict( ], "Hydrogen Electrolyzers" => "electrolyzers.md", "Scheduled maintenance for various resources" => "maintenance.md", + "Resource types" => "resource.md" ], "Multi_stage" => [ "Configure multi-stage inputs" => "configure_multi_stage_inputs.md", @@ -70,7 +71,7 @@ pages = OrderedDict( "GenX Outputs Functions" =>"write_outputs.md", "Additional Features" => "additional_features.md", "Third Party Extensions" => "additional_third_party_extensions.md", - #"Unit Testing (Under Development)" => "unit_testing.md" + "Developer Docs" => "developer_guide.md", ) makedocs(; modules=[GenX], diff --git a/docs/src/assets/type_hierarchy.png b/docs/src/assets/type_hierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..e6375369cd4af8a01a10ce26f84d7ec08897e332 GIT binary patch literal 116425 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 literal 0 HcmV?d00001 diff --git a/docs/src/data_documentation.md b/docs/src/data_documentation.md index 52e05058cb..8a0fc33271 100644 --- a/docs/src/data_documentation.md +++ b/docs/src/data_documentation.md @@ -169,7 +169,7 @@ All input files are in CSV format. Running the GenX model requires a minimum of #### 2.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 the `Generators_data.csv` file. For renewable resources or other resources that do not consume a fuel, the name of the fuel is `None`. +• **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`. • **Second row:** The second row specifies the CO2 emissions intensity of each fuel in tons/MMBtu (million British thermal units). Note that by convention, tons correspond to metric tonnes and not short tons (although as long as the user is internally consistent in their application of units, either can be used). @@ -254,153 +254,65 @@ This file includes parameters to characterize model temporal resolution to appro |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 -#### 2.1.4 Generator\_variability.csv +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, +2) variable renewable energy resources (VRE), specified in the `VRE.csv` file, +3) reservoir hydro resources, specified in the `Hydro.csv` file, +4) storage resources, specified in the `Storage.csv` file, +5) flexible demand resources, specified in the `Flex_demand.csv` file, +6) must-run resources, specified in the `Must_run.csv` file, +7) electrolyzers, specified in the `Electrolyzer.csv` file, and +8) co-located VRE and storage resources, specified in the `Vre_stor.csv` file. -This file contains the time-series of capacity factors / availability of each resource included in the `Generators_data.csv` file for each time step (e.g. hour) modeled. +Each file contains cost and performance parameters for various generators and other resources included in the model formulation. The following table describes the mandatory columns in each of these files. Note that the column names are case insensitive. -• 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 `Generators_data.csv` file 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 `Generators_data.csv` must be unique. Note that for Hydro reservoir resources (i.e. `HYDRO = 1` in the `Generators_data.csv`), values in this file correspond to inflows (in MWhs) to the hydro reservoir as a fraction of installed power capacity, rather than hourly capacity factor. Note that for co-located VRE and storage resources, solar PV and wind resource profiles should not be located in this file but rather in separate variability files (these variabilities can be in the `Generators_variability.csv` if time domain reduction functionalities will be utilized because the time domain reduction functionalities will separate the files after the clustering is completed). - -#### 2.1.5 Generators\_data.csv - -This file contains cost and performance parameters for various generators and other resources (storage, flexible demand, etc) included in the model formulation. - -###### Table 5: Mandatory columns in the Generators\_data.csv file +##### Table 5a: Mandatory columns in all resource .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.| |Zone | Integer representing zone number where the resource is located. | |**Technology type flags**| -|New\_Build | { 0, 1}, Flag for resource (storage, generation) eligibility for capacity expansion.| +|New\_Build | {0, 1}, Flag for resource (storage, generation) eligibility for capacity expansion.| ||New\_Build = 1: eligible for capacity expansion. | ||New\_Build = 0: not eligible for capacity expansion.| |Can\_Retire | {0, 1}, Flag for resource (storage, generation) eligibility for retirement.| ||Can\_Retire = 1: eligible for retirement. | ||Can\_Retire = 0: not eligible for retirement.| -|THERM | {0, 1, 2}, Flag to indicate membership in set of thermal resources (e.g. nuclear, combined heat and power, natural gas combined cycle, coal power plant)| -||THERM = 0: Not part of set (default) | -||THERM = 1: If the power plant relies on thermal energy input and subject unit commitment constraints/decisions if `UCommit >= 1` (e.g. cycling decisions/costs/constraints). | -||THERM = 2: If the power plant relies on thermal energy input and is subject to simplified economic dispatch constraints (ramping limits and minimum output level but no cycling decisions/costs/constraints). | -|Cap\_size | Size (MW) of a single generating unit. This is used only for resources with integer unit commitment (`THERM = 1`) - not relevant for other resources.| -|VRE | {0, 1}, Flag to indicate membership in set of dispatchable (or curtailable) variable renewable energy resources (onshore wind, offshore wind, utility-scale solar PV, and distributed solar PV subject to dispatch signals).| -||VRE = 0: Not part of set (default) | -||VRE = 1: Dispatchable variable renewable energy (VRE) resources. | -|Num\_VRE\_bins | Number of resource availability profiles considered for each VRE resource per zone. This parameter is used to decide the number of capacity investment decision variables related to a single variable renewable energy technology in each zone.| -||Num\_VRE\_bins = 1: using a single resource availability profile per technology per zone. 1 capacity investment decision variable and 1 generator RID tracking technology power output (and in each zone).| -||Num\_VRE\_bins > 1: using multiple resource availability profiles per technology per zone. Num\_VRE\_bins capacity investment decision variables and 1 generator RID used to define technology power output at each time step (and in each zone). Example: Suppose we are modeling 3 bins of wind profiles for each zone. Then include 3 rows with wind resource names as Wind\_1, Wind\_2, and Wind\_3 and a corresponding increasing sequence of RIDs. Set Num\_VRE\_bins for the generator with smallest RID, Wind\_1, to be 3 and set Num\_VRE\_bins for the other rows corresponding to Wind\_2 and Wind\_3, to be zero. By setting Num\_VRE\_bins for Wind\_2 and Wind\_3, the model eliminates the power outputs variables for these generators. The power output from the technology across all bins is reported in the power output variable for the first generator. This allows for multiple bins without significantly increasing number of model variables (adding each bin only adds one new capacity variable and no operational variables). See documentation for `curtailable_variable_renewable()` for more. | -|MUST\_RUN | {0, 1}, Flag to indicate membership in set of must-run plants (could be used to model behind-the-meter PV not subject to dispatch signals/curtailment, run-of-river hydro that cannot spill water, must-run or self-committed thermal generators, etc). | -||MUST\_RUN = 0: Not part of set (default) | -||MUST\_RUN = 1: Must-run (non-dispatchable) resources.| -|STOR | {0, 1, 2}, Flag to indicate membership in set of storage resources and designate which type of storage resource formulation to employ.| -||STOR = 0: Not part of set (default) | -||STOR = 1: Discharging power capacity and energy capacity are the investment decision variables; symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage).| -||STOR = 2: Discharging, charging power capacity and energy capacity are investment variables; asymmetric charge and discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| -|FLEX | {0, 1}, Flag to indicate membership in set of flexible demand-side resources (e.g. scheduleable or time shiftable demand such as automated EV charging, smart thermostat systems, irrigation pumping demand etc).| -||FLEX = 0: Not part of set (default) | -||FLEX = 1: Flexible demand resource.| -|HYDRO | {0, 1}, Flag to indicate membership in set of reservoir hydro resources.| -||HYDRO = 0: Not part of set (default) | -||HYDRO = 1: Hydropower with reservoir modeling, including inflows, spillage, ramp rate limits and minimum operating level and efficiency loss associated with discharging. Reservoir capacity can be represented as a ratio or energy to power. This type of plant cannot charge from grid.| -|ELECTROLYZER | {0, 1}, Flag to indicate membership in set of electrolysis resources (optional input column).| -||ELECTROLYZER = 0: Not part of set (default) | -||ELECTROLYZER = 1: Electrolyzer resources.| -|LDS | {0, 1}, Flag to indicate the resources eligible for long duration storage constraints with inter period linkage (e.g., reservoir hydro, hydrogen storage). Note that for co-located VRE-STOR resources, this flag must be 0 (LDS_VRE_STOR flag exists in VRE-STOR dataframe). | -||LDS = 0: Not part of set (default) | -||LDS = 1: Long duration storage resources| -|VRE_STOR | {0, 1}, Flag to indicate membership in set of co-located variable renewable energy resources (onshore wind and utility-scale solar PV) and storage resources (either short- or long-duration energy storage with symmetric or asymmetric charging or discharging capabilities).| -||VRE_STOR = 0: Not part of set (default) | -||VRE_STOR = 1: Co-located VRE and storage (VRE-STOR) resources. | |**Existing technology capacity**| |Existing\_Cap\_MW |The existing capacity of a power plant in MW. Note that for co-located VRE-STOR resources, this capacity represents the existing AC grid connection capacity in MW. | -|Existing\_Cap\_MWh |The existing capacity of storage in MWh where `STOR = 1` or `STOR = 2`. Note that for co-located VRE-STOR resources, this capacity represents the existing capacity of storage in MWh. | -|Existing\_Charge\_Cap\_MW |The existing charging capacity for resources where `STOR = 2`.| |**Capacity/Energy requirements**| |Max\_Cap\_MW |-1 (default) – no limit on maximum discharge capacity of the resource. If non-negative, represents maximum allowed discharge capacity (in MW) of the resource. Note that for co-located VRE-STOR resources, this capacity represents the maximum AC grid connection capacity in MW. | -|Max\_Cap\_MWh |-1 (default) – no limit on maximum energy capacity of the resource. If non-negative, represents maximum allowed energy capacity (in MWh) of the resource with `STOR = 1` or `STOR = 2`. Note that for co-located VRE-STOR resources, this capacity represents the maximum capacity of storage in MWh. | -|Max\_Charge\_Cap\_MW |-1 (default) – no limit on maximum charge capacity of the resource. If non-negative, represents maximum allowed charge capacity (in MW) of the resource with `STOR = 2`.| |Min\_Cap\_MW |-1 (default) – no limit on minimum discharge capacity of the resource. If non-negative, represents minimum allowed discharge capacity (in MW) of the resource. Note that for co-located VRE-STOR resources, this capacity represents the minimum AC grid connection capacity in MW. | -|Min\_Cap\_MWh| -1 (default) – no limit on minimum energy capacity of the resource. If non-negative, represents minimum allowed energy capacity (in MWh) of the resource with `STOR = 1` or `STOR = 2`. Note that for co-located VRE-STOR resources, this capacity represents the minimum capacity of storage in MWh. | -|Min\_Charge\_Cap\_MW |-1 (default) – no limit on minimum charge capacity of the resource. If non-negative, represents minimum allowed charge capacity (in MW) of the resource with `STOR = 2`.| |**Cost parameters**| |Inv\_Cost\_per\_MWyr | Annualized capacity investment cost of a technology ($/MW/year). Note that for co-located VRE-STOR resources, this annualized capacity investment cost pertains to the grid connection.| -|Inv\_Cost\_per\_MWhyr | Annualized investment cost of the energy capacity for a storage technology ($/MW/year), applicable to either `STOR = 1` or `STOR = 2`. Note that for co-located VRE-STOR resources, this annualized investment cost of the energy capacity pertains to the co-located storage resource.| -|Inv\_Cost\_Charge\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `STOR = 2` ($/MW/year). | |Fixed\_OM\_Cost\_per\_MWyr | Fixed operations and maintenance cost of a technology ($/MW/year). Note that for co-located VRE-STOR resources, this fixed operations and maintenance cost pertains to the grid connection.| -|Fixed\_OM\_Cost\_per\_MWhyr | Fixed operations and maintenance cost of the energy component of a storage technology ($/MWh/year). Note that for co-located VRE-STOR resources, this fixed operations and maintenance cost of the energy component pertains to the co-located storage resource. | -|Fixed\_OM\_Cost\_Charge\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology of type `STOR = 2`. | |Var\_OM\_Cost\_per\_MWh | Variable operations and maintenance cost of a technology ($/MWh). Note that for co-located VRE-STOR resources, these costs apply to the AC generation sent to the grid from the entire site. | -|Var\_OM\_Cost\_per\_MWhIn | Variable operations and maintenance cost of the charging aspect of a storage technology with `STOR = 2`, or variable operations and maintenance costs associated with flexible demand deferral with `FLEX = 1`. Otherwise 0 ($/MWh). Note that for co-located VRE-STOR resources, these costs must be 0 (specific variable operations and maintenance costs exist in VRE-STOR dataframe). | |**Technical performance parameters**| |Heat\_Rate\_MMBTU\_per\_MWh |Heat rate of a generator or MMBtu of fuel consumed per MWh of electricity generated for export (net of on-site consumption). The heat rate is the inverse of the efficiency: a lower heat rate is better. Should be consistent with fuel prices in terms of reporting on higher heating value (HHV) or lower heating value (LHV) basis. | |Fuel |Fuel needed for a generator. The names should match with the ones in the `Fuels_data.csv`. | -|Self\_Disch |[0,1], The power loss of storage technologies per hour (fraction loss per hour)- only applies to storage techs. Note that for co-located VRE-STOR resources, this value applies to the storage component of each resource.| -|Min\_Power |[0,1], The minimum generation level for a unit as a fraction of total capacity. This value cannot be higher than the smallest time-dependent CF value for a resource in `Generators_variability.csv`. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| -|Ramp\_Up\_Percentage |[0,1], Maximum increase in power output from between two periods (typically hours), reported as a fraction of nameplate capacity. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| -|Ramp\_Dn\_Percentage |[0,1], Maximum decrease in power output from between two periods (typically hours), reported as a fraction of nameplate capacity. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| -|Eff\_Up |[0,1], Efficiency of charging storage – applies to storage technologies (all STOR types except co-located storage resources).| -|Eff\_Down |[0,1], Efficiency of discharging storage – applies to storage technologies (all STOR types except co-located storage resources). | -|Hydro\_Energy\_to\_Power\_Ratio |The rated number of hours of reservoir hydro storage at peak discharge power output. Applies to `HYDRO = 1` (hours). | -|Min\_Duration |Specifies the minimum ratio of installed energy to discharged power capacity that can be installed. Applies to STOR types 1 and 2 (hours). Note that for co-located VRE-STOR resources, this value does not apply. | -|Max\_Duration |Specifies the maximum ratio of installed energy to discharged power capacity that can be installed. Applies to STOR types 1 and 2 (hours). Note that for co-located VRE-STOR resources, this value does not apply. | -|Max\_Flexible\_Demand\_Delay |Maximum number of hours that demand can be deferred or delayed. Applies to resources with FLEX type 1 (hours). | -|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. | |**Required for writing outputs**| |region | Name of the model region| |cluster | Number of the cluster when representing multiple clusters of a given technology in a given region. | -|**MultiStage == 1**| -|Capital\_Recovery\_Period |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs. Note that for co-located VRE-STOR resources, this value pertains to the grid connection (other capital recovery periods for different components of the resource can be found in the VRE-STOR dataframe). | -|Lifetime |Lifetime (in years) used for determining endogenous retirements of newly built capacity. Note that the same lifetime is used for each component of a co-located VRE-STOR resource. | -|Min\_Retired\_Cap\_MW |Minimum required discharge capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity. Note that for co-located VRE-STOR resources, this value pertains to the grid connection (other minimum required discharge capacity retirements for different components of the resource can be found in the VRE-STOR dataframe). | -|Min\_Retired\_Energy\_Cap\_MW |Minimum required energy capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing energy capacity. Note that for co-located VRE-STOR resources, this value pertains to the storage component (other minimum required capacity retirements for different components of the resource can be found in the VRE-STOR dataframe).| -|Min\_Retired\_Charge\_Cap\_MW |Minimum required energy capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing charge capacity. | +|**Required if electrolyzer is included in the model**| +|Qualified_Hydrogen_Supply| {0,1}, Indicates that generator or storage resources is eligible to supply electrolyzers in the same zone (used for hourly clean supply constraint)| -###### Table 6: Settings-specific columns in the Generators\_data.csv file +##### Table 5b: Settings-specific columns in all resource .csv file --- |**Column Name** | **Description**| | :------------ | :-----------| -|**UCommit >= 1** | The following settings apply only to thermal plants with unit commitment constraints (`THERM = 1`).| -|Up\_Time| Minimum amount of time a resource has to stay in the committed state.| -|Down\_Time |Minimum amount of time a resource has to remain in the shutdown state.| -|Start\_Cost\_per\_MW |Cost per MW of nameplate capacity to start a generator ($/MW per start). Multiplied by the number of generation units (each with a pre-specified nameplate capacity) that is turned on.| -|Start\_Fuel\_MMBTU\_per\_MW |Startup fuel use per MW of nameplate capacity of each generator (MMBtu/MW per start).| -|**Reserves = 1** | The following settings apply to thermal, dispatchable VRE, hydro and storage resources| -|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| -|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| -|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| -|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| -|**EnergyShareRequirement > 0**|| -|ESR\_*| Flag to indicate which resources are considered for the Energy Share Requirement constraint. Note that this flag must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -||1- included| -||0- excluded| -|**CapacityReserveMargin > 0**|| -|CapRes\_* |[0,1], Fraction of the resource capacity eligible for contributing to the capacity reserve margin constraint (e.g. derate factor). Note that this fraction must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| |**ModelingToGenerateAlternatives = 1**|| |MGA |Eligibility of the technology for Modeling To Generate Alternative (MGA) run. | ||1 = Technology is available for the MGA run.| ||0 = Technology is unavailable for the MGA run (e.g. storage technologies).| -|Resource\_Type |For the MGA run, we categorize all the resources in a few resource types. We then find maximally different generation portfolio based on these resource types. For example, existing solar and new solar resources could be represented by a resource type names `Solar`. Categorization of resources into resource types is user dependent. Note that this fraction must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -|**MinCapReq = 1**| -|MinCapTag\_*| Eligibility of resources to participate in Minimum Technology Carveout constraint. \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`. Note that this eligibility must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -|**MaxCapReq = 1**| -|MaxCapTag\_*| Eligibility of resources to participate in Maximum Technology Carveout constraint. \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`. Note that this eligibility must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -|**PiecewiseFuelUsage-related parameters required if any resources have nonzero PWFU fuel usage, heat rates, and load points**| -|PWFU\_Fuel\_Usage\_Zero\_Load\_MMBTU\_per\_h|The fuel usage (MMBTU/h) for the first PWFU segemnt (y-intercept) at zero load.| -|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).| +|Resource\_Type |For the MGA run, we categorize all the resources in a few resource types. We then find maximally different generation portfolio based on these resource types. For example, existing solar and new solar resources could be represented by a resource type names `Solar`. Categorization of resources into resource types is user dependent. | |**Maintenance data**| |MAINT|[0,1], toggles scheduled maintenance formulation.| |Maintenance\_Duration| (Positive integer, less than total length of simulation.) Duration of the maintenance period, in number of timesteps. Only used if `MAINT=1`.| |Maintenance\_Cycle\_Length\_Years| Length of scheduled maintenance cycle, in years. `1` is maintenance every year, `3` is every three years, etc. (Positive integer. Only used if `MAINT=1`.)| |Maintenance\_Begin\_Cadence| Cadence of timesteps in which scheduled maintenance can begin. `1` means that a maintenance period can start in any timestep, `24` means it can start only in timesteps 1, 25, 49, etc. A larger number can decrease the simulation computational cost as it limits the optimizer's choices. (Positive integer, less than total length of simulation. Only used if `MAINT=1`.)| -|**Electrolyzer related parameters required if the set ELECTROLYZER is not empty**| -|Hydrogen_MWh_Per_Tonne| Electrolyzer efficiency in megawatt-hours (MWh) of electricity per metric tonne of hydrogen produced (MWh/t)| -|Electrolyzer_Min_kt| Minimum annual quantity of hydrogen that must be produced by electrolyzer in kilotonnes (kt)| -|Hydrogen_Price_Per_Tonne| Price (or value) of hydrogen per metric tonne ($/t)| -|Qualified_Hydrogen_Supply| {0,1}, Indicates that generator or storage resources is eligible to supply electrolyzers in the same zone (used for hourly clean supply constraint)| |**CO2-related parameters required if any resources have nonzero CO2_Capture_Fraction**| |CO2\_Capture\_Fraction |[0,1], The CO2 capture fraction of CCS-equipped power plants during steady state operation. This value should be 0 for generators without CCS. | |CO2\_Capture\_Fraction\_Startup |[0,1], The CO2 capture fraction of CCS-equipped power plants during the startup events. This value should be 0 for generators without CCS | @@ -409,7 +321,385 @@ This file contains cost and performance parameters for various generators and ot ||Biomass = 1: Uses biomass as fuel.| |CCS\_Disposal\_Cost\_per\_Metric_Ton | Cost associated with CCS disposal ($/tCO2), including pipeline, injection and storage costs of CCS-equipped generators.| +##### Table 6a: Additional columns in the Thermal.csv file +|**Column Name** | **Description**| +| :------------ | :-----------| +|Model | {1, 2}, Flag to indicate membership in set of thermal resources (e.g. nuclear, combined heat and power, natural gas combined cycle, coal power plant)| +||Model = 1: If the power plant relies on thermal energy input and subject unit commitment constraints/decisions if `UCommit >= 1` (e.g. cycling decisions/costs/constraints). | +||Model = 2: If the power plant relies on thermal energy input and is subject to simplified economic dispatch constraints (ramping limits and minimum output level but no cycling decisions/costs/constraints). | +|Min\_Power |[0,1], The minimum generation level for a unit as a fraction of total capacity. This value cannot be higher than the smallest time-dependent CF value for a resource in `Generators_variability.csv`.| +|Ramp\_Up\_Percentage |[0,1], Maximum increase in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| +|Ramp\_Dn\_Percentage |[0,1], Maximum decrease in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| + +##### Table 6b: Settings-specific columns in the Thermal.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**UCommit >= 1** | The following settings apply only to thermal plants with unit commitment constraints| +|Up\_Time| Minimum amount of time a resource has to stay in the committed state.| +|Down\_Time |Minimum amount of time a resource has to remain in the shutdown state.| +|Start\_Cost\_per\_MW |Cost per MW of nameplate capacity to start a generator ($/MW per start). Multiplied by the number of generation units (each with a pre-specified nameplate capacity) that is turned on.| +|Start\_Fuel\_MMBTU\_per\_MW |Startup fuel use per MW of nameplate capacity of each generator (MMBtu/MW per start).| +|**Reserves = 1** | | +|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| +|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| +|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| +|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| + +##### Table 7a: Additional columns in the VRE.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Num\_VRE\_bins | Number of resource availability profiles considered for each VRE resource per zone. This parameter is used to decide the number of capacity investment decision variables related to a single variable renewable energy technology in each zone.| +||Num\_VRE\_bins = 1: using a single resource availability profile per technology per zone. 1 capacity investment decision variable and 1 generator RID tracking technology power output (and in each zone).| +||Num\_VRE\_bins > 1: using multiple resource availability profiles per technology per zone. Num\_VRE\_bins capacity investment decision variables and 1 generator RID used to define technology power output at each time step (and in each zone). Example: Suppose we are modeling 3 bins of wind profiles for each zone. Then include 3 rows with wind resource names as Wind\_1, Wind\_2, and Wind\_3 and a corresponding increasing sequence of RIDs. Set Num\_VRE\_bins for the generator with smallest RID, Wind\_1, to be 3 and set Num\_VRE\_bins for the other rows corresponding to Wind\_2 and Wind\_3, to be zero. By setting Num\_VRE\_bins for Wind\_2 and Wind\_3, the model eliminates the power outputs variables for these generators. The power output from the technology across all bins is reported in the power output variable for the first generator. This allows for multiple bins without significantly increasing number of model variables (adding each bin only adds one new capacity variable and no operational variables). See documentation for `curtailable_variable_renewable()` for more. | + +##### Table 6b: Settings-specific columns in the VRE.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Reserves = 1** | | +|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| +|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| +|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| +|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| + +##### Table 7a: Additional columns in the Hydro.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Min\_Power |[0,1], The minimum generation level for a unit as a fraction of total capacity. This value cannot be higher than the smallest time-dependent CF value for a resource in `Generators_variability.csv`.| +|Ramp\_Up\_Percentage |[0,1], Maximum increase in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| +|Ramp\_Dn\_Percentage |[0,1], Maximum decrease in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| +|Hydro\_Energy\_to\_Power\_Ratio |The rated number of hours of reservoir hydro storage at peak discharge power output. (hours). | +|LDS | {0, 1}, Flag to indicate the resources eligible for long duration storage constraints with inter period linkage.| +||LDS = 0: Not part of set (default) | +||LDS = 1: Long duration storage resources| + +##### Table 7b: Settings-specific columns in the Hydro.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Reserves = 1** | | +|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| +|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| +|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| +|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| + +##### Table 8a: Additional columns in the Storage.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Model | {0, 1, 2}, Flag to indicate membership in set of storage resources and designate which type of storage resource formulation to employ.| +||Model = 0: Not part of set (default) | +||Model = 1: Discharging power capacity and energy capacity are the investment decision variables; symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage).| +||Model = 2: Discharging, charging power capacity and energy capacity are investment variables; asymmetric charge and discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| +|LDS | {0, 1}, Flag to indicate the resources eligible for long duration storage constraints with inter period linkage.| +||LDS = 0: Not part of set (default) | +||LDS = 1: Long duration storage resources| +|Self\_Disch |[0,1], The power loss of storage technologies per hour (fraction loss per hour)- only applies to storage techs.| +|Eff\_Up |[0,1], Efficiency of charging storage.| +|Eff\_Down |[0,1], Efficiency of discharging storage. | +|Min\_Duration |Specifies the minimum ratio of installed energy to discharged power capacity that can be installed (hours). | +|Max\_Duration |Specifies the maximum ratio of installed energy to discharged power capacity that can be installed (hours). | +|**Existing technology capacity**| +|Existing\_Cap\_MWh |The existing capacity of storage in MWh where `Model = 1` or `Model = 2`.| +|Existing\_Charge\_Cap\_MW |The existing charging capacity for resources where `Model = 2`.| +|**Capacity/Energy requirements**| +|Max\_Cap\_MWh |-1 (default) – no limit on maximum energy capacity of the resource. If non-negative, represents maximum allowed energy capacity (in MWh) of the resource with `Model = 1` or `Model = 2`.| +|Max\_Charge\_Cap\_MW |-1 (default) – no limit on maximum charge capacity of the resource. If non-negative, represents maximum allowed charge capacity (in MW) of the resource with `Model = 2`.| +|Min\_Cap\_MWh| -1 (default) – no limit on minimum energy capacity of the resource. If non-negative, represents minimum allowed energy capacity (in MWh) of the resource with `Model = 1` or `Model = 2`.| +|Min\_Charge\_Cap\_MW |-1 (default) – no limit on minimum charge capacity of the resource. If non-negative, represents minimum allowed charge capacity (in MW) of the resource with `Model = 2`.| +|**Cost parameters**| +|Inv\_Cost\_per\_MWhyr | Annualized investment cost of the energy capacity for a storage technology ($/MW/year), applicable to either `Model = 1` or `Model = 2`. | +|Inv\_Cost\_Charge\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `Model = 2` ($/MW/year). | +|Fixed\_OM\_Cost\_per\_MWhyr | Fixed operations and maintenance cost of the energy component of a storage technology ($/MWh/year).| +|Fixed\_OM\_Cost\_Charge\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology of type `Model = 2`. | +|Var\_OM\_Cost\_per\_MWhIn | Variable operations and maintenance cost of the charging aspect of a storage technology with `Model = 2`. Otherwise 0 ($/MWh).| + +##### Table 8b: Settings-specific columns in the Storage.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Reserves = 1** | | +|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| +|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| +|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| +|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| + +##### Table 9: Additional columns in the Flex_demand.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Max\_Flexible\_Demand\_Delay |Maximum number of hours that demand can be deferred or delayed (hours). | +|Max\_Flexible\_Demand\_Advance |Maximum number of hours that demand can be scheduled in advance of the original schedule (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 (hours). For example, one may need to pre-cool a building more than normal to advance demand. | +|**Cost parameters**| +|Var\_OM\_Cost\_per\_MWhIn | Variable operations and maintenance costs associated with flexible demand deferral. Otherwise 0 ($/MWh). | + +##### Table 10: Additional columns in the Electrolyzer.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Hydrogen_MWh_Per_Tonne| Electrolyzer efficiency in megawatt-hours (MWh) of electricity per metric tonne of hydrogen produced (MWh/t)| +|Electrolyzer_Min_kt| Minimum annual quantity of hydrogen that must be produced by electrolyzer in kilotonnes (kt)| +|Hydrogen_Price_Per_Tonne| Price (or value) of hydrogen per metric tonne ($/t)| +|Min\_Power |[0,1], The minimum generation level for a unit as a fraction of total capacity. This value cannot be higher than the smallest time-dependent CF value for a resource in `Generators_variability.csv`.| +|Ramp\_Up\_Percentage |[0,1], Maximum increase in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| +|Ramp\_Dn\_Percentage |[0,1], Maximum decrease in power output from between two periods (typically hours), reported as a fraction of nameplate capacity.| +!!! note + Check `Qualified_Hydrogen_Supply` column in table 5a if electrolyzers are included in the model. This column is used to indicate which resources are eligible to supply electrolyzers in the same zone (used for hourly clean supply constraint). + +Each co-located VRE and storage resource can be easily configured to contain either a co-located VRE-storage resource, standalone VRE resource (either wind, solar PV, or both), or standalone storage resource. +##### Table 11a: Additional columns in the VRE_STOR.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Technology type flags**| +|SOLAR | {0, 1}, Flag to indicate membership in the set of co-located VRE-storage resources with a solar PV component.| +||SOLAR = 0: Not part of set (default) | +||SOLAR = 1: If the co-located VRE-storage resource can produce solar PV energy. || +|WIND | {0, 1}, Flag to indicate membership in the set of co-located VRE-storage resources with a wind component.| +||WIND = 0: Not part of set (default) | +||WIND = 1: If the co-located VRE-storage resource can produce wind energy. || +|STOR_DC_DISCHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that discharge behind the meter and through the inverter (DC).| +||STOR_DC_DISCHARGE = 0: Not part of set (default) | +||STOR_DC_DISCHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_DC_DISCHARGE = 1, STOR_DC_CHARGE = 1.| +||STOR_DC_DISCHARGE = 2: If the co-located VRE-storage resource has asymmetric discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| +|STOR_DC_CHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that charge through the inverter (DC).| +||STOR_DC_CHARGE = 0: Not part of set (default) | +||STOR_DC_CHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_DC_CHARGE = 1, STOR_DC_DISCHARGE = 1.| +||STOR_DC_CHARGE = 2: If the co-located VRE-storage resource has asymmetric charge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| +|STOR_AC_DISCHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that discharges AC.| +||STOR_AC_DISCHARGE = 0: Not part of set (default) | +||STOR_AC_DISCHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_AC_DISCHARGE = 1, STOR_AC_CHARGE = 1.| +||STOR_AC_DISCHARGE = 2: If the co-located VRE-storage resource has asymmetric discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| +|STOR_AC_CHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that charge AC.| +||STOR_AC_CHARGE = 0: Not part of set (default) | +||STOR_AC_CHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_AC_CHARGE = 1, STOR_AC_DISCHARGE = 1.| +||STOR_AC_CHARGE = 2: If the co-located VRE-storage resource has asymmetric charge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| +|LDS_VRE_STOR | {0, 1}, Flag to indicate the co-located VRE-storage resources eligible for long duration storage constraints with inter period linkage (e.g., reservoir hydro, hydrogen storage). | +||LDS_VRE_STOR = 0: Not part of set (default) | +||LDS_VRE_STOR = 1: Long duration storage resources| +|**Existing technology capacity**| +|Existing\_Cap\_MW |The existing AC grid connection capacity in MW. | +|Existing\_Cap\_MWh |The existing capacity of storage in MWh. | +|Existing\_Cap\_Inverter\_MW |The existing capacity of co-located VRE-STOR resource's inverter in MW (AC). | +|Existing\_Cap\_Solar\_MW |The existing capacity of co-located VRE-STOR resource's solar PV in MW (DC). | +|Existing\_Cap\_Wind\_MW |The existing capacity of co-located VRE-STOR resource's wind in MW (AC). | +|Existing\_Cap\_Discharge\_DC\_MW |The existing discharge capacity of co-located VRE-STOR resource's storage component in MW (DC). Note that this only applies to resources where `STOR_DC_DISCHARGE = 2`. | +|Existing\_Cap\_Charge\_DC\_MW |The existing charge capacity of co-located VRE-STOR resource's storage component in MW (DC). Note that this only applies to resources where `STOR_DC_CHARGE = 2`. | +|Existing\_Cap\_Discharge\_AC\_MW |The existing discharge capacity of co-located VRE-STOR resource's storage component in MW (AC). Note that this only applies to resources where `STOR_AC_DISCHARGE = 2`. | +|Existing\_Cap\_Charge\_AC\_MW |The existing charge capacity of co-located VRE-STOR resource's storage component in MW (AC). Note that this only applies to resources where `STOR_DC_CHARGE = 2`. | +|**Capacity/Energy requirements**| +|Max\_Cap\_MW |-1 (default) – no limit on maximum discharge capacity of the resource. If non-negative, represents maximum allowed AC grid connection capacity in MW of the resource. | +|Max\_Cap\_MWh |-1 (default) – no limit on maximum energy capacity of the resource. If non-negative, represents maximum allowed energy capacity of storage in MWh. | +|Min\_Cap\_MW |-1 (default) – no limit on minimum discharge capacity of the resource. If non-negative, represents minimum allowed AC grid connection capacity in MW. | +|Min\_Cap\_MWh| -1 (default) – no limit on minimum energy capacity of the resource. If non-negative, represents minimum allowed energy capacity of storage in MWh. | +|Max\_Cap\_Inverter\_MW |-1 (default) – no limit on maximum inverter capacity of the resource. If non-negative, represents maximum allowed inverter capacity (in MW AC) of the resource. | +|Max\_Cap\_Solar\_MW |-1 (default) – no limit on maximum solar PV capacity of the resource. If non-negative, represents maximum allowed solar PV capacity (in MW DC) of the resource. | +|Max\_Cap\_Wind\_MW |-1 (default) – no limit on maximum wind capacity of the resource. If non-negative, represents maximum allowed wind capacity (in MW AC) of the resource. | +|Max\_Cap\_Discharge\_DC\_MW |-1 (default) – no limit on maximum DC discharge capacity of the resource. If non-negative, represents maximum allowed DC discharge capacity (in MW DC) of the resource with `STOR_DC_DISCHARGE = 2`.| +|Max\_Cap\_Charge\_DC\_MW |-1 (default) – no limit on maximum DC charge capacity of the resource. If non-negative, represents maximum allowed DC charge capacity (in MW DC) of the resource with `STOR_DC_CHARGE = 2`.| +|Max\_Cap\_Discharge\_AC\_MW |-1 (default) – no limit on maximum AC discharge capacity of the resource. If non-negative, represents maximum allowed AC discharge capacity (in MW AC) of the resource with `STOR_AC_DISCHARGE = 2`.| +|Max\_Cap\_Charge\_AC\_MW |-1 (default) – no limit on maximum AC charge capacity of the resource. If non-negative, represents maximum allowed AC charge capacity (in MW AC) of the resource with `STOR_AC_CHARGE = 2`.| +|Min\_Cap\_Inverter\_MW |-1 (default) – no limit on minimum inverter capacity of the resource. If non-negative, represents minimum allowed inverter capacity (in MW AC) of the resource. | +|Min\_Cap\_Solar\_MW |-1 (default) – no limit on minimum solar PV capacity of the resource. If non-negative, represents minimum allowed solar PV capacity (in MW DC) of the resource. | +|Min\_Cap\_Wind\_MW |-1 (default) – no limit on minimum wind capacity of the resource. If non-negative, represents minimum allowed wind capacity (in MW AC) of the resource. | +|Min\_Cap\_Discharge\_DC\_MW |-1 (default) – no limit on minimum DC discharge capacity of the resource. If non-negative, represents minimum allowed DC discharge capacity (in MW DC) of the resource with `STOR_DC_DISCHARGE = 2`.| +|Min\_Cap\_Charge\_DC\_MW |-1 (default) – no limit on minimum DC charge capacity of the resource. If non-negative, represents minimum allowed DC charge capacity (in MW DC) of the resource with `STOR_DC_CHARGE = 2`.| +|Min\_Cap\_Discharge\_AC\_MW |-1 (default) – no limit on minimum AC discharge capacity of the resource. If non-negative, represents minimum allowed AC discharge capacity (in MW AC) of the resource with `STOR_AC_DISCHARGE = 2`.| +|Min\_Cap\_Charge\_AC\_MW |-1 (default) – no limit on minimum AC charge capacity of the resource. If non-negative, represents minimum allowed AC charge capacity (in MW AC) of the resource with `STOR_AC_CHARGE = 2`.| +|**Cost parameters**| +|Inv\_Cost\_per\_MWyr | Annualized capacity investment cost of the grid connection ($/MW/year).| +|Inv\_Cost\_per\_MWhyr | Annualized investment cost of the energy capacity for the co-located storage resource ($/MW/year)| +|Fixed\_OM\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the grid connection ($/MW/year).| +|Fixed\_OM\_Cost\_per\_MWhyr | Fixed operations and maintenance cost of the energy component of the co-located storage resource. ($/MWh/year). | +|Inv\_Cost\_Inverter\_per\_MWyr | Annualized capacity investment cost of the inverter component ($/MW-AC/year). | +|Inv\_Cost\_Solar\_per\_MWyr | Annualized capacity investment cost of the solar PV component ($/MW-DC/year). | +|Inv\_Cost\_Wind\_per\_MWyr | Annualized capacity investment cost of the wind component ($/MW-AC/year). | +|Inv\_Cost\_Discharge\_DC\_per\_MWyr | Annualized capacity investment cost for the discharging portion of a storage technology with `STOR_DC_DISCHARGE = 2` ($/MW-DC/year). | +|Inv\_Cost\_Charge\_DC\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `STOR_DC_CHARGE = 2` ($/MW-DC/year). | +|Inv\_Cost\_Discharge\_AC\_per\_MWyr | Annualized capacity investment cost for the discharging portion of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MW-AC/year). | +|Inv\_Cost\_Charge\_AC\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `STOR_AC_CHARGE = 2` ($/MW-AC/year). | +|Fixed\_OM\_Inverter\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the inverter component ($/MW-AC/year).| +|Fixed\_OM\_Solar\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the solar PV component ($/MW-DC/year).| +|Fixed\_OM\_Wind\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the wind component ($/MW-AC/year).| +|Fixed\_OM\_Cost\_Discharge\_DC\_per\_MWyr | Fixed operations and maintenance cost of the discharging component of a storage technology with `STOR_DC_DISCHARGE = 2` ($/MW-DC/year).| +|Fixed\_OM\_Cost\_Charge\_DC\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology with `STOR_DC_CHARGE = 2` ($/MW-DC/year).| +|Fixed\_OM\_Cost\_Discharge\_AC\_per\_MWyr | Fixed operations and maintenance cost of the discharging component of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MW-AC/year).| +|Fixed\_OM\_Cost\_Charge\_AC\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology with `STOR_AC_CHARGE = 2` ($/MW-AC/year).| +|Var\_OM\_Cost\_per\_MWh\_Solar | Variable operations and maintenance cost of the solar PV component (multiplied by the inverter efficiency for AC terms) ($/MWh). | +|Var\_OM\_Cost\_per\_MWh\_Wind | Variable operations and maintenance cost of the wind component ($/MWh). | +|Var\_OM\_Cost\_per\_MWh\_Discharge_DC | Variable operations and maintenance cost of the discharging component of a storage technology with `STOR_DC_DISCHARGE = 2` (multiplied by the inverter efficiency for AC terms) ($/MWh). | +|Var\_OM\_Cost\_per\_MWh\_Charge_DC | Variable operations and maintenance cost of the charging component of a storage technology with `STOR_DC_CHARGE = 2` (divided by the inverter efficiency for AC terms) ($/MWh). | +|Var\_OM\_Cost\_per\_MWh\_Discharge_AC | Variable operations and maintenance cost of the discharging component of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MWh). | +|Var\_OM\_Cost\_per\_MWh\_Charge_AC | Variable operations and maintenance cost of the charging component of a storage technology with `STOR_AC_CHARGE = 2` ($/MWh). | +|**Technical performance parameters**| +|Self\_Disch |[0,1], The power loss of storage component of each resource per hour (fraction loss per hour). | +|EtaInverter |[0,1], Inverter efficiency representing losses from converting DC to AC power and vice versa for each technology | +|Inverter_Ratio_Solar |-1 (default) - no required ratio between solar PV capacity built to inverter capacity built. If non-negative, represents the ratio of solar PV capacity built to inverter capacity built.| +|Inverter_Ratio_Wind |-1 (default) - no required ratio between wind capacity built to grid connection capacity built. If non-negative, represents the ratio of wind capacity built to grid connection capacity built.| +|Power\_to\_Energy\_AC |The power to energy conversion for the storage component for AC discharging/charging of symmetric storage resources.| +|Power\_to\_Energy\_DC |The power to energy conversion for the storage component for DC discharging/charging of symmetric storage resources.| +|Eff\_Up\_DC |[0,1], Efficiency of DC charging storage – applies to storage technologies (all STOR types). | +|Eff\_Down\_DC |[0,1], Efficiency of DC discharging storage – applies to storage technologies (all STOR types). | +|Eff\_Up\_AC |[0,1], Efficiency of AC charging storage – applies to storage technologies (all STOR types). | +|Eff\_Down\_AC |[0,1], Efficiency of AC discharging storage – applies to storage technologies (all STOR types). | + +##### Table 11b: Settings-specific columns in the VRE_STOR.csv file +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|**Reserves = 1** | | +|Reg\_Cost |Cost of providing regulation reserves ($/MW per time step/hour).| +|Rsv\_Cost |Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| +|Reg\_Max |[0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| +|Rsv\_Max |[0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| + +##### Policy-related columns for all resources +In addition to the files described above, the `Resources` folder contains the following files that are used to specify policy-related parameters for specific resources: + +1) `Resource_energy_share_requirement.csv` +2) `Resource_minimum_capacity_requirement.csv` +3) `Resource_maximum_capacity_requirement.csv` +4) `Resource_capacity_reserve_margin.csv` + +!!! note + These files are optional and can be omitted if no policy-related parameters are specified in the settings file. Also, not all the resources need to be included in these files, only those for which the policy applies. + +The following table describes the columns in each of these four files. + +!!! warning + The first column of each file must contain the resource name corresponding to a resource in one of the resource data files described above. Note that the order of resources in the policy files is not important. +This policy is applied when if `EnergyShareRequirement > 0` in the settings file. \* corresponds to the ith row of the file `Energy_share_requirement.csv`. + +##### Table 12: Energy share requirement policy parameters +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|ESR\_*| Flag to indicate which resources are considered for the Energy Share Requirement constraint.| +||1- included| +||0- excluded| +|**co-located VRE-STOR resources only**| +|ESRVreStor\_*| Flag to indicate which resources are considered for the Energy Share Requirement constraint.| +||1- included| +||0- excluded| + +This policy is applied when if `MinCapReq = 1` in the settings file. \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`. + +##### Table 13: Minimum capacity requirement policy parameters +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|Min_Cap\_*| Flag to indicate which resources are considered for the Minimum Capacity Requirement constraint.| +|**co-located VRE-STOR resources only**| +|Min_Cap_Solar\_*| Eligibility of resources with a solar PV component (multiplied by the inverter efficiency for AC terms) to participate in Minimum Technology Carveout constraint.| +|Min_Cap_Wind\_*| Eligibility of resources with a wind component to participate in Minimum Technology Carveout constraint (AC terms).| +|Min_Cap_Stor\_*| Eligibility of resources with a storage component to participate in Minimum Technology Carveout constraint (discharge capacity in AC terms).| + +This policy is applied when if `MaxCapReq = 1` in the settings file. \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`. + +##### Table 14: Maximum capacity requirement policy parameters +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|Max_Cap\_*| Flag to indicate which resources are considered for the Maximum Capacity Requirement constraint.| +|**co-located VRE-STOR resources only**| +|Max_Cap_Solar\_*| Eligibility of resources with a solar PV component (multiplied by the inverter efficiency for AC terms) to participate in Maximum Technology Carveout constraint. +|Max_Cap_Wind\_*| Eligibility of resources with a wind component to participate in Maximum Technology Carveout constraint (AC terms). +|Max_Cap_Stor\_*| Eligibility of resources with a storage component to participate in Maximum Technology Carveout constraint (discharge capacity in AC terms).| + +This policy is applied when if `CapacityReserveMargin > 0` in the settings file. \* corresponds to the ith row of the file `Capacity_reserve_margin.csv`. + +##### Table 15: Capacity reserve margin policy parameters +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|Eligible_Cap_Res\_*| Fraction of the resource capacity eligible for contributing to the capacity reserve margin constraint (e.g. derate factor).| + +##### Additional module-related columns for all resources +In addition to the files described above, the `Resources` folder can contain the following files that are used to specify additional attributes for specific resources: + +1) `Resource_multistage_data.csv`: mandatory if `MultiStage = 1` in the settings file +2) `Resource_piecewisefuel_usage.csv` + +The following table describes the columns in each of these two files. + +!!! warning + The first column of each file must contain the resource name corresponding to a resource in one of the resource data files described above. Note that the order of resources in these files is not important. + +##### Table 16: Multistage parameters +!!! warning + This file is mandatory if `MultiStage = 1` in the settings file. +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|Capital\_Recovery\_Period |Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs. Note that for co-located VRE-STOR resources, this value pertains to the grid connection. | +|Lifetime |Lifetime (in years) used for determining endogenous retirements of newly built capacity. Note that the same lifetime is used for each component of a co-located VRE-STOR resource. | +|Min\_Retired\_Cap\_MW |Minimum required discharge capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity. Note that for co-located VRE-STOR resources, this value pertains to the grid connection. | +|Min\_Retired\_Energy\_Cap\_MW |Minimum required energy capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing energy capacity. Note that for co-located VRE-STOR resources, this value pertains to the storage component.| +|Min\_Retired\_Charge\_Cap\_MW |Minimum required energy capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing charge capacity. | +|**co-located VRE-STOR resources only**| +|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`. | + +This file contains PiecewiseFuelUsage-related parameters required if any resources have nonzero PWFU fuel usage, heat rates, and load points. + +##### Table 17: Piecewise fuel usage parameters +--- +|**Column Name** | **Description**| +| :------------ | :-----------| +|Resource| Resource name corresponding to a resource in one of the resource data files described above.| +|PWFU\_Fuel\_Usage\_Zero\_Load\_MMBTU\_per\_h|The fuel usage (MMBTU/h) for the first PWFU segemnt (y-intercept) at zero load.| +|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 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. + +• 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 resource `.csv` file in the `Resources` folder 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 the resource `.csv` file must be unique. Note that for Hydro reservoir resources (i.e. `Hydro.csv`), values in this file correspond to inflows (in MWhs) to the hydro reservoir as a fraction of installed power capacity, rather than hourly capacity factor. Note that for co-located VRE and storage resources, solar PV and wind resource profiles should not be located in this file but rather in separate variability files (these variabilities can be in the `Generators_variability.csv` if time domain reduction functionalities will be utilized because the time domain reduction functionalities will separate the files after the clustering is completed). + +|Self\_Disch |[0,1], The power loss of storage technologies per hour (fraction loss per hour)- only applies to storage techs. Note that for co-located VRE-STOR resources, this value applies to the storage component of each resource.| +|Min\_Power |[0,1], The minimum generation level for a unit as a fraction of total capacity. This value cannot be higher than the smallest time-dependent CF value for a resource in `Generators_variability.csv`. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| +|Ramp\_Up\_Percentage |[0,1], Maximum increase in power output from between two periods (typically hours), reported as a fraction of nameplate capacity. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| +|Ramp\_Dn\_Percentage |[0,1], Maximum decrease in power output from between two periods (typically hours), reported as a fraction of nameplate capacity. Applies to thermal plants, and reservoir hydro resource (`HYDRO = 1`).| +|Eff\_Up |[0,1], Efficiency of charging storage – applies to storage technologies (all STOR types except co-located storage resources).| +|Eff\_Down |[0,1], Efficiency of discharging storage – applies to storage technologies (all STOR types except co-located storage resources). | + +|Min\_Duration |Specifies the minimum ratio of installed energy to discharged power capacity that can be installed. Applies to STOR types 1 and 2 (hours). Note that for co-located VRE-STOR resources, this value does not apply. | +|Max\_Duration |Specifies the maximum ratio of installed energy to discharged power capacity that can be installed. Applies to STOR types 1 and 2 (hours). Note that for co-located VRE-STOR resources, this value does not apply. | +|Max\_Flexible\_Demand\_Delay |Maximum number of hours that demand can be deferred or delayed. Applies to resources with FLEX type 1 (hours). | +|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 @@ -464,7 +754,7 @@ This file includes parameter inputs needed to model time-dependent procurement o 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 `Generators_data.csv` file. +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 --- @@ -497,7 +787,7 @@ This file contains inputs specifying CO2 emission limits policies (e.g. emission 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 `Generators_data.csv` file +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 --- @@ -552,7 +842,7 @@ This file contains the settings parameters required to run the Method of Morris |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| +|Parameter| Column from the resource `.csv` file (inside the `Resource`) 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| @@ -569,146 +859,23 @@ Notes: 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. +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. + + + + + + -#### 2.2.9 Vre\_and\_stor\_data.csv -This file contains additional cost and performance parameters for specifically co-located VRE and storage resources included in the model formulation. -Each co-located VRE and storage generator must be explicitly listed in the `Generators_data.csv` and have the matching unique **Resource** name and **R\_ID** in both the `Generators_data.csv` and the `Vre_and_stor_data.csv`. -This file supplements the `Generators_data.csv` by specifically adding VRE-STOR data and flags that are unique to how this module functions. -Some cost and performance parameters for each co-located resource will be read in from the `Generators_data.csv` (as indicated above in the explanation of inputs from `Generators_data.csv` and from Table 15) and the rest of the specific inputs will be noted here for each resource. -Each co-located VRE and storage resource can be easily configured to contain either a co-located VRE-storage resource, standalone VRE resource (either wind, solar PV, or both), or standalone storage resource. -###### Table 15: Additional & modified columns for co-located VRE-STOR resources in the Generators\_data.csv file (already noted above but explicitly defined here) ---- -|**Column Name** | **Description**| -| :------------ | :-----------| -|**Added Columns**| -|VRE_STOR | {0, 1}, Flag to indicate membership in set of co-located variable renewable energy resources (onshore wind and utility-scale solar PV) and storage resources (either short- or long-duration energy storage with symmetric or asymmetric charging or discharging capabilities).| -||VRE_STOR = 0: Not part of set (default) | -||VRE_STOR = 1: Co-located VRE and storage (VRE-STOR) resources. | -|**Modified Columns**| -|Existing\_Cap\_MW |The existing capacity of a power plant in MW. Note that for co-located VRE-STOR resources, this capacity represents the existing AC grid connection capacity in MW. | -|Existing\_Cap\_MWh |The existing capacity of storage in MWh where `VRE_STOR = 1`. Note that for co-located VRE-STOR resources, this capacity represents the existing capacity of storage in MWh. | -|Max\_Cap\_MW |-1 (default) – no limit on maximum discharge capacity of the resource. If non-negative, represents maximum allowed discharge capacity (in MW) of the resource. Note that for co-located VRE-STOR resources, this capacity represents the maximum AC grid connection capacity in MW. | -|Max\_Cap\_MWh |-1 (default) – no limit on maximum energy capacity of the resource. If non-negative, represents maximum allowed energy capacity (in MWh) of the resource with or `VRE_STOR = 1`. Note that for co-located VRE-STOR resources, this capacity represents the maximum capacity of storage in MWh. | -|Min\_Cap\_MW |-1 (default) – no limit on minimum discharge capacity of the resource. If non-negative, represents minimum allowed discharge capacity (in MW) of the resource. Note that for co-located VRE-STOR resources, this capacity represents the minimum AC grid connection capacity in MW. | -|Min\_Cap\_MWh| -1 (default) – no limit on minimum energy capacity of the resource. If non-negative, represents minimum allowed energy capacity (in MWh) of the resource with `STOR = 1` or `STOR = 2` or `VRE_STOR = 1`. Note that for co-located VRE-STOR resources, this capacity represents the minimum capacity of storage in MWh. | -|Inv\_Cost\_per\_MWyr | Annualized capacity investment cost of a technology ($/MW/year). Note that for co-located VRE-STOR resources, this annualized capacity investment cost pertains to the grid connection.| -|Inv\_Cost\_per\_MWhyr | Annualized investment cost of the energy capacity for a storage technology ($/MW/year), applicable to either `STOR = 1` or `STOR = 2`. Note that for co-located VRE-STOR resources, this annualized investment cost of the energy capacity pertains to the co-located storage resource.| -|Fixed\_OM\_Cost\_per\_MWyr | Fixed operations and maintenance cost of a technology ($/MW/year). Note that for co-located VRE-STOR resources, this fixed operations and maintenance cost pertains to the grid connection.| -|Fixed\_OM\_Cost\_per\_MWhyr | Fixed operations and maintenance cost of the energy component of a storage technology ($/MWh/year). Note that for co-located VRE-STOR resources, this fixed operations and maintenance cost of the energy component pertains to the co-located storage resource. | -|Self\_Disch |[0,1], The power loss of storage technologies per hour (fraction loss per hour)- only applies to storage techs. Note that for co-located VRE-STOR resources, this value applies to the storage component of each resource.| -|Reg\_Cost | **(If Reserves = 1)** Cost of providing regulation reserves ($/MW per time step/hour).| -|Rsv\_Cost | **(If Reserves = 1)** Cost of providing upwards spinning or contingency reserves ($/MW per time step/hour).| -|Reg\_Max | **(If Reserves = 1)** [0,1], Fraction of nameplate capacity that can committed to provided regulation reserves. .| -|Rsv\_Max | **(If Reserves = 1)** [0,1], Fraction of nameplate capacity that can committed to provided upwards spinning or contingency reserves.| -|Capital\_Recovery\_Period | **(If MultiStage == 1)** Capital recovery period (in years) used for determining overnight capital costs from annualized investment costs. Note that for co-located VRE-STOR resources, this value pertains to the grid connection (other capital recovery periods for different components of the resource can be found in the VRE-STOR dataframe). | -|Lifetime | **(If MultiStage == 1)** Lifetime (in years) used for determining endogenous retirements of newly built capacity. Note that the same lifetime is used for each component of a co-located VRE-STOR resource. | -|Min\_Retired\_Cap\_MW | **(If MultiStage == 1)** Minimum required discharge capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing capacity. Note that for co-located VRE-STOR resources, this value pertains to the grid connection (other minimum required discharge capacity retirements for different components of the resource can be found in the VRE-STOR dataframe). | -|Min\_Retired\_Energy\_Cap\_MW | **(If MultiStage == 1)** Minimum required energy capacity retirements in the current model period. This field can be used to enforce lifetime retirements of existing energy capacity. Note that for co-located VRE-STOR resources, this value pertains to the storage component (other minimum required capacity retirements for different components of the resource can be found in the VRE-STOR dataframe).| -|MinCapTag\_*| **(If MinCapReq = 1)** Eligibility of resources' grid connection to participate in Minimum Technology Carveout constraint. \* corresponds to the ith row of the file `Minimum_capacity_requirement.csv`. Note that this eligibility must only apply to the interconnection capacity for co-located VRE-STOR resources (policy inputs for solar PV, wind, or battery minimum capacities are read from the specific VRE-STOR dataframe).| -|MaxCapTag\_*| **(If MaxCapReq = 1)** Eligibility of resources' grid connection to participate in Maximum Technology Carveout constraint. \* corresponds to the ith row of the file `Maximum_capacity_requirement.csv`. Note that this eligibility must only apply to the interconnection capacity for co-located VRE-STOR resources (policy inputs for solar PV, wind, or battery maxmum capacities are read from the specific VRE-STOR dataframe).| -|**Columns that Must Be Set to Zero**| -|Var\_OM\_Cost\_per\_MWhIn | Variable operations and maintenance cost of the charging aspect of a storage technology with `STOR = 2`, or variable operations and maintenance costs associated with flexible demand deferral with `FLEX = 1`. Otherwise 0 ($/MWh). Note that for co-located VRE-STOR resources, these costs must be 0 (specific variable operations and maintenance costs exist in VRE-STOR dataframe). | -|ESR\_*| **(If EnergyShareRequirement > 0)** Flag to indicate which resources are considered for the Energy Share Requirement constraint. Note that this flag must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -|CapRes\_* | **(If CapacityReserveMargin > 0)** [0,1], Fraction of the resource capacity eligible for contributing to the capacity reserve margin constraint (e.g. derate factor). Note that this fraction must be 0 for co-located VRE-STOR resources (policy inputs are read from the specific VRE-STOR dataframe).| -|LDS | {0, 1}, Flag to indicate the resources eligible for long duration storage constraints with inter period linkage (e.g., reservoir hydro, hydrogen storage). Note that for co-located VRE-STOR resources, this flag must be 0 (LDS_VRE_STOR flag exists in VRE-STOR dataframe). | -||LDS = 0: Not part of set (default) | -||LDS = 1: Long duration storage resources| ###### Table 16: Mandatory columns in the Vre\_and\_stor\_data.csv file ---- -|**Column Name** | **Description**| -| :------------ | :-----------| -|Resource | This column contains **unique** names of the co-located VRE and storage resources available to the model and must match the `Generators_data.csv`. | -|Zone | Integer representing zone number where the resource is located. | -|R\_ID | Each resource receives a **unique** number ID, which is explicitly defined in the `Generators_data.csv` or implicitly defined in the GenX model after all of the data has been loaded. The R\_ID of each co-located resource must match the R\_ID either explicitly or implicitly defined in the `Generators_data.csv`.| -|**Technology type flags**| -|SOLAR | {0, 1}, Flag to indicate membership in the set of co-located VRE-storage resources with a solar PV component.| -||SOLAR = 0: Not part of set (default) | -||SOLAR = 1: If the co-located VRE-storage resource can produce solar PV energy. || -|WIND | {0, 1}, Flag to indicate membership in the set of co-located VRE-storage resources with a wind component.| -||WIND = 0: Not part of set (default) | -||WIND = 1: If the co-located VRE-storage resource can produce wind energy. || -|STOR_DC_DISCHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that discharge behind the meter and through the inverter (DC).| -||STOR_DC_DISCHARGE = 0: Not part of set (default) | -||STOR_DC_DISCHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_DC_DISCHARGE = 1, STOR_DC_CHARGE = 1.| -||STOR_DC_DISCHARGE = 2: If the co-located VRE-storage resource has asymmetric discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| -|STOR_DC_CHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that charge through the inverter (DC).| -||STOR_DC_CHARGE = 0: Not part of set (default) | -||STOR_DC_CHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_DC_CHARGE = 1, STOR_DC_DISCHARGE = 1.| -||STOR_DC_CHARGE = 2: If the co-located VRE-storage resource has asymmetric charge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| -|STOR_AC_DISCHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that discharges AC.| -||STOR_AC_DISCHARGE = 0: Not part of set (default) | -||STOR_AC_DISCHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_AC_DISCHARGE = 1, STOR_AC_CHARGE = 1.| -||STOR_AC_DISCHARGE = 2: If the co-located VRE-storage resource has asymmetric discharge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| -|STOR_AC_CHARGE | {0, 1, 2}, Flag to indicate membership in set of co-located VRE-storage resources that charge AC.| -||STOR_AC_CHARGE = 0: Not part of set (default) | -||STOR_AC_CHARGE = 1: If the co-located VRE-storage resource contains symmetric charge/discharge power capacity with charging capacity equal to discharging capacity (e.g. lithium-ion battery storage). Note that if STOR_AC_CHARGE = 1, STOR_AC_DISCHARGE = 1.| -||STOR_AC_CHARGE = 2: If the co-located VRE-storage resource has asymmetric charge capacities using distinct processes (e.g. hydrogen electrolysis, storage, and conversion to power using fuel cell or combustion turbine).| -|LDS_VRE_STOR | {0, 1}, Flag to indicate the co-located VRE-storage resources eligible for long duration storage constraints with inter period linkage (e.g., reservoir hydro, hydrogen storage). | -||LDS_VRE_STOR = 0: Not part of set (default) | -||LDS_VRE_STOR = 1: Long duration storage resources| -|**Existing technology capacity**| -|Existing\_Cap\_Inverter\_MW |The existing capacity of co-located VRE-STOR resource's inverter in MW (AC). | -|Existing\_Cap\_Solar\_MW |The existing capacity of co-located VRE-STOR resource's solar PV in MW (DC). | -|Existing\_Cap\_Wind\_MW |The existing capacity of co-located VRE-STOR resource's wind in MW (AC). | -|Existing\_Cap\_Discharge\_DC\_MW |The existing discharge capacity of co-located VRE-STOR resource's storage component in MW (DC). Note that this only applies to resources where `STOR_DC_DISCHARGE = 2`. | -|Existing\_Cap\_Charge\_DC\_MW |The existing charge capacity of co-located VRE-STOR resource's storage component in MW (DC). Note that this only applies to resources where `STOR_DC_CHARGE = 2`. | -|Existing\_Cap\_Discharge\_AC\_MW |The existing discharge capacity of co-located VRE-STOR resource's storage component in MW (AC). Note that this only applies to resources where `STOR_AC_DISCHARGE = 2`. | -|Existing\_Cap\_Charge\_AC\_MW |The existing charge capacity of co-located VRE-STOR resource's storage component in MW (AC). Note that this only applies to resources where `STOR_DC_CHARGE = 2`. | -|**Capacity/Energy requirements**| -|Max\_Cap\_Inverter\_MW |-1 (default) – no limit on maximum inverter capacity of the resource. If non-negative, represents maximum allowed inverter capacity (in MW AC) of the resource. | -|Max\_Cap\_Solar\_MW |-1 (default) – no limit on maximum solar PV capacity of the resource. If non-negative, represents maximum allowed solar PV capacity (in MW DC) of the resource. | -|Max\_Cap\_Wind\_MW |-1 (default) – no limit on maximum wind capacity of the resource. If non-negative, represents maximum allowed wind capacity (in MW AC) of the resource. | -|Max\_Cap\_Discharge\_DC\_MW |-1 (default) – no limit on maximum DC discharge capacity of the resource. If non-negative, represents maximum allowed DC discharge capacity (in MW DC) of the resource with `STOR_DC_DISCHARGE = 2`.| -|Max\_Cap\_Charge\_DC\_MW |-1 (default) – no limit on maximum DC charge capacity of the resource. If non-negative, represents maximum allowed DC charge capacity (in MW DC) of the resource with `STOR_DC_CHARGE = 2`.| -|Max\_Cap\_Discharge\_AC\_MW |-1 (default) – no limit on maximum AC discharge capacity of the resource. If non-negative, represents maximum allowed AC discharge capacity (in MW AC) of the resource with `STOR_AC_DISCHARGE = 2`.| -|Max\_Cap\_Charge\_AC\_MW |-1 (default) – no limit on maximum AC charge capacity of the resource. If non-negative, represents maximum allowed AC charge capacity (in MW AC) of the resource with `STOR_AC_CHARGE = 2`.| -|Min\_Cap\_Inverter\_MW |-1 (default) – no limit on minimum inverter capacity of the resource. If non-negative, represents minimum allowed inverter capacity (in MW AC) of the resource. | -|Min\_Cap\_Solar\_MW |-1 (default) – no limit on minimum solar PV capacity of the resource. If non-negative, represents minimum allowed solar PV capacity (in MW DC) of the resource. | -|Min\_Cap\_Wind\_MW |-1 (default) – no limit on minimum wind capacity of the resource. If non-negative, represents minimum allowed wind capacity (in MW AC) of the resource. | -|Min\_Cap\_Discharge\_DC\_MW |-1 (default) – no limit on minimum DC discharge capacity of the resource. If non-negative, represents minimum allowed DC discharge capacity (in MW DC) of the resource with `STOR_DC_DISCHARGE = 2`.| -|Min\_Cap\_Charge\_DC\_MW |-1 (default) – no limit on minimum DC charge capacity of the resource. If non-negative, represents minimum allowed DC charge capacity (in MW DC) of the resource with `STOR_DC_CHARGE = 2`.| -|Min\_Cap\_Discharge\_AC\_MW |-1 (default) – no limit on minimum AC discharge capacity of the resource. If non-negative, represents minimum allowed AC discharge capacity (in MW AC) of the resource with `STOR_AC_DISCHARGE = 2`.| -|Min\_Cap\_Charge\_AC\_MW |-1 (default) – no limit on minimum AC charge capacity of the resource. If non-negative, represents minimum allowed AC charge capacity (in MW AC) of the resource with `STOR_AC_CHARGE = 2`.| -|**Cost parameters**| -|Inv\_Cost\_Inverter\_per\_MWyr | Annualized capacity investment cost of the inverter component ($/MW-AC/year). | -|Inv\_Cost\_Solar\_per\_MWyr | Annualized capacity investment cost of the solar PV component ($/MW-DC/year). | -|Inv\_Cost\_Wind\_per\_MWyr | Annualized capacity investment cost of the wind component ($/MW-AC/year). | -|Inv\_Cost\_Discharge\_DC\_per\_MWyr | Annualized capacity investment cost for the discharging portion of a storage technology with `STOR_DC_DISCHARGE = 2` ($/MW-DC/year). | -|Inv\_Cost\_Charge\_DC\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `STOR_DC_CHARGE = 2` ($/MW-DC/year). | -|Inv\_Cost\_Discharge\_AC\_per\_MWyr | Annualized capacity investment cost for the discharging portion of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MW-AC/year). | -|Inv\_Cost\_Charge\_AC\_per\_MWyr | Annualized capacity investment cost for the charging portion of a storage technology with `STOR_AC_CHARGE = 2` ($/MW-AC/year). | -|Fixed\_OM\_Inverter\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the inverter component ($/MW-AC/year).| -|Fixed\_OM\_Solar\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the solar PV component ($/MW-DC/year).| -|Fixed\_OM\_Wind\_Cost\_per\_MWyr | Fixed operations and maintenance cost of the wind component ($/MW-AC/year).| -|Fixed\_OM\_Cost\_Discharge\_DC\_per\_MWyr | Fixed operations and maintenance cost of the discharging component of a storage technology with `STOR_DC_DISCHARGE = 2` ($/MW-DC/year).| -|Fixed\_OM\_Cost\_Charge\_DC\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology with `STOR_DC_CHARGE = 2` ($/MW-DC/year).| -|Fixed\_OM\_Cost\_Discharge\_AC\_per\_MWyr | Fixed operations and maintenance cost of the discharging component of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MW-AC/year).| -|Fixed\_OM\_Cost\_Charge\_AC\_per\_MWyr | Fixed operations and maintenance cost of the charging component of a storage technology with `STOR_AC_CHARGE = 2` ($/MW-AC/year).| -|Var\_OM\_Cost\_per\_MWh\_Solar | Variable operations and maintenance cost of the solar PV component (multiplied by the inverter efficiency for AC terms) ($/MWh). | -|Var\_OM\_Cost\_per\_MWh\_Wind | Variable operations and maintenance cost of the wind component ($/MWh). | -|Var\_OM\_Cost\_per\_MWh\_Discharge_DC | Variable operations and maintenance cost of the discharging component of a storage technology with `STOR_DC_DISCHARGE = 2` (multiplied by the inverter efficiency for AC terms) ($/MWh). | -|Var\_OM\_Cost\_per\_MWh\_Charge_DC | Variable operations and maintenance cost of the charging component of a storage technology with `STOR_DC_CHARGE = 2` (divided by the inverter efficiency for AC terms) ($/MWh). | -|Var\_OM\_Cost\_per\_MWh\_Discharge_AC | Variable operations and maintenance cost of the discharging component of a storage technology with `STOR_AC_DISCHARGE = 2` ($/MWh). | -|Var\_OM\_Cost\_per\_MWh\_Charge_AC | Variable operations and maintenance cost of the charging component of a storage technology with `STOR_AC_CHARGE = 2` ($/MWh). | -|**Technical performance parameters**| -|EtaInverter |[0,1], Inverter efficiency representing losses from converting DC to AC power and vice versa for each technology | -|Inverter_Ratio_Solar |-1 (default) - no required ratio between solar PV capacity built to inverter capacity built. If non-negative, represents the ratio of solar PV capacity built to inverter capacity built.| -|Inverter_Ratio_Wind |-1 (default) - no required ratio between wind capacity built to grid connection capacity built. If non-negative, represents the ratio of wind capacity built to grid connection capacity built.| -|Power\_to\_Energy\_AC |The power to energy conversion for the storage component for AC discharging/charging of symmetric storage resources.| -|Power\_to\_Energy\_DC |The power to energy conversion for the storage component for DC discharging/charging of symmetric storage resources.| -|Eff\_Up\_DC |[0,1], Efficiency of DC charging storage – applies to storage technologies (all STOR types). | -|Eff\_Down\_DC |[0,1], Efficiency of DC discharging storage – applies to storage technologies (all STOR types). | -|Eff\_Up\_AC |[0,1], Efficiency of AC charging storage – applies to storage technologies (all STOR types). | -|Eff\_Down\_AC |[0,1], Efficiency of AC discharging storage – applies to storage technologies (all STOR types). | -|**Required for writing outputs**| -|region | Name of the model region| -|cluster | Number of the cluster when representing multiple clusters of a given technology in a given region. | -|technology | Non-unique name of resource (e.g. solar PV, wind) to classify each resource for post-processing purposes. | + + + + |**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. | @@ -757,7 +924,7 @@ This file contains the time-series of capacity factors / availability of the sol • 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 `Generators_data.csv` and `Vre_and_stor_data.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 `Generators_data.csv` and `Vre_and_stor_data.csv` must be unique. +• 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 @@ -765,7 +932,7 @@ This file contains the time-series of capacity factors / availability of the win • 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 `Generators_data.csv` and `Vre_and_stor_data.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 `Generators_data.csv` and `Vre_and_stor_data.csv` must be unique. +• 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. ## 3 Outputs diff --git a/docs/src/developer_guide.md b/docs/src/developer_guide.md new file mode 100644 index 0000000000..4472f9d0cf --- /dev/null +++ b/docs/src/developer_guide.md @@ -0,0 +1,347 @@ +# How to contribute to GenX + +## Introduction + +GenX is an open-source project, and we welcome contributions from the community. This guide aims to help you get started with GenX and explain how to contribute to the project. In general, the two main ways to contribute to GenX are: + +1. Use of [GitHub issues](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue) to report bugs and request new features +2. Use of [GitHub pull requests (PR)](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) to submit code changes + +!!! tip + We encourage every contributors to read this [guide](https://github.com/SciML/ColPrac), which contains some guidelines on how to contribute to a collaborative project like GenX. + +The following sections describe in more detail how to work with GenX resources and how to add a new resource to GenX. + +## GenX resources + +In GenX, a resource is defined as an instance of a `GenX resource type`, a subtype of an `AbstractResource`. This allows the code to use multiple dispatch and define a common interface (behavior) for all resources in the code. +Type hierarchy of GenX resources: + +![Type hierarchy of GenX resources](./assets/type_hierarchy.png) + +!!! note + All the interface and utility functions available for resources are defined in the [resources.jl](https://github.com/GenXProject/GenX/blob/develop/src/model/resources/resources.jl) file. + +The set of all the resource types available in GenX are contained in the `resource_types` `Tuple` defined at the of the `resources.jl` file. During the initialization process, GenX reads the input data files and creates a new instance of the corresponding resource type for each row in the file. + +### Resource design principles + +Resources in GenX are constructed from a set of input files (in `.csv` format, one for each type of resource) located in the `Resources` folder inside the `case` folder. Each row in one of these files defines a new resource instance, and each column corresponds to an attribute of that resource type. + +!!! warning + The first column of each input data file should be called `Resource` and contain a unique identifier for each resource. + +For example, in the case below, the files `Hydro.csv`, `Thermal.csv`, `Vre.csv`, and `Storage.csv` contain the resource data for the hydro, thermal, VRE, and storage resources, respectively. These files are read by GenX during the initialization process and used to create the corresponding resource instances. + +``` +case_folder + ├── Resources + │ ├── Hydro.csv + │ ├── Thermal.csv + │ ├── Vre.csv + │ └── Storage.csv + ├── Generators_variability.csv + // + ├── Setting + │ └── genx_settings.yml + └── Run.jl +``` + +When loading the file `Thermal.csv` below, GenX will create three new resources of type `Thermal` and assign the values of the attributes of each resource from the columns in the input data file: + +``` +Thermal.csv + + resource │ zone │ existing_cap_mw │ inv_cost_per_mwyr │ heat_rate_mmbtu_per_mwh │ + String │ Int64 │ Float64 │ Float64 │ Float64 │ +────────────────────-┼───────┼─────────────────┼───────────────────┼─────────────────────────│ + NG_combined_cycle_1 │ 1 │ 100.0 │ 239841 │ 7.89 │ + NG_combined_cycle_2 │ 2 │ 200.0 │ 0.0 │ 8.29 │ + Biomass │ 3 │ 200.0 │ 81998 │ 9.9 │ +``` +These three resources, together with all the other resources in the data files, will be stored in the GenX `inputs` dictionary with the key `RESOURCES`. + +```julia +julia> gen = inputs["RESOURCES"] +julia> length(gen) # returns the number of resources in the model +julia> thermal(gen) # returns the indices of all thermal resources (Vector{Int64}) +julia> gen.Thermal # returns the thermal resources (Vector{Thermal}) +julia> gen.Thermal == gen[thermal(gen)] # returns true +``` + +### Working with GenX resources +To access the attributes of each resource, you can either use a function interface or the standard `.` notation. + +For example, let's assume that `thermal_gen` is the vector of the three `Thermal` resources created from the input data file `Thermal.csv` shown above. + +!!! note + In the example below, we create the vector `thermal_gen` manually. However, in practice, this vector is automatically created by GenX when loading the input data file `Thermal.csv`. + +```@meta +DocTestSetup = quote + using GenX: Thermal, resource_name, existing_cap_mw, inv_cost_per_mwyr, ids_with, ids_with_positive, ids_with_nonneg, ids_with_policy, resource_id, esr, has +end +``` + +```jldoctest example_thermal +julia> thermal_gen = [Thermal(Dict(:resource => "NG_combined_cycle_1", + :existing_cap_mw => 100.0, + :inv_cost_per_mwyr => 239841, + :heat_rate_mmbtu_per_mwh => 7.89, + :id => 23, + :max_cap_mw => 100.0, + :esr_1 => 1,)), + Thermal(Dict(:resource => "NG_combined_cycle_2", + :existing_cap_mw => 200.0, + :inv_cost_per_mwyr => 0.0, + :heat_rate_mmbtu_per_mwh => 8.29, + :max_cap_mw => 0, + :id => 24)), + Thermal(Dict(:resource => "Biomass", + :existing_cap_mw => 200.0, + :inv_cost_per_mwyr => 81998, + :heat_rate_mmbtu_per_mwh => 9.9, + :max_cap_mw => 0, + :lds => 1, + :new_build => 1, + :id => 25))]; +``` + +To access the attributes of the resources in `thermal_gen`, you can either use the function interfaces defined in `resources.jl` (recommended), or you can use the standard `.` notation: + +```jldoctest example_thermal +julia> resource_name(thermal_gen[1]) +"NG_combined_cycle_1" +julia> resource_name.(thermal_gen) +3-element Vector{String}: + "NG_combined_cycle_1" + "NG_combined_cycle_2" + "Biomass" +julia> existing_cap_mw(thermal_gen[1]) +100.0 +julia> existing_cap_mw.(thermal_gen) +3-element Vector{Float64}: + 100.0 + 200.0 + 200.0 +julia> thermal_gen[1].existing_cap_mw +100.0 +``` + +Moreover, inside the `resources.jl` file, there is a set of utility functions to work with all the resources and that can be used as building blocks to create more complex functions: + +- [`Base.get(r::AbstractResource, sym::Symbol, default)`](@ref): Returns the value of the attribute `sym` of the resource `r`. If the attribute is not defined for the resource, it returns the `default` value of that attribute. + +Example: +```jldoctest example_thermal +julia> get(thermal_gen[1], :existing_cap_mw, 0) +100.0 +julia> get(thermal_gen[1], :new_build, 0) +0 +``` + +- [`GenX.haskey(r::AbstractResource, sym::Symbol)`](@ref): Returns `true` if the resource `r` has the attribute `sym`, and `false` otherwise. + +Example: +```jldoctest example_thermal +julia> haskey(thermal_gen[1], :existing_cap_mw) +true +julia> haskey(thermal_gen[1], :new_build) +false +``` + +- [`Base.findall(f::Function, rs::Vector{<:AbstractResource})`](@ref): Returns the indices of the resources in `rs` for which the function `f` returns `true`. + +Example: +```jldoctest example_thermal +julia> findall(r -> isa(r,Thermal), thermal_gen) # returns the indices of the thermal resources in thermal_gen +3-element Vector{Int64}: + 23 + 24 + 25 +julia> findall(r -> get(r, :lds, 0) > 0, thermal_gen) # returns the indices of the resources in thermal_gen that have a Long Duration Storage (lds) attribute greater than 0 +1-element Vector{Int64}: + 25 +julia> findall(r -> get(r, :new_build, 0) == 1, thermal_gen) # returns the indices of the resources in thermal_gen that are buildable (new_build = 1) +1-element Vector{Int64}: + 25 +``` +- [`GenX.ids_with(rs::Vector{T}, f::Function, default=default_zero) where T <: AbstractResource`](@ref): Returns the indices of the resources in the vector `rs` for which the function `f` is different from `default`. + +Example: +```jldoctest example_thermal +julia> ids_with(thermal_gen, inv_cost_per_mwyr) +2-element Vector{Int64}: + 23 + 25 +``` +A similar function works with `Symbol`s and `String`s instead of getter functions: +```jldoctest example_thermal +julia> ids_with(thermal_gen, :inv_cost_per_mwyr) +2-element Vector{Int64}: + 23 + 25 +``` + +- [`GenX.ids_with_policy(rs::Vector{T}, name::Symbol; tag::Int64) where T <: AbstractResource`](@ref): Returns the indices of the resources in the vector `rs` that have a policy with the name `name` and the tag `tag`. + +Example: +```jldoctest example_thermal +julia> ids_with_policy(thermal_gen, esr, tag=1) +1-element Vector{Int64}: + 23 +``` + +- [`GenX.ids_with_positive(rs::Vector{T}, f::Function) where T <: AbstractResource`](@ref): Returns the indices of the resources in the vector `rs` for which the getter function `f` returns a positive value. + +Example: +```jldoctest example_thermal +julia> ids_with_positive(thermal_gen, inv_cost_per_mwyr) +2-element Vector{Int64}: + 23 + 25 +``` +A similar function works with `Symbol`s and `String`s instead of getter functions: +```jldoctest example_thermal +julia> ids_with_positive(thermal_gen, :inv_cost_per_mwyr) +2-element Vector{Int64}: + 23 + 25 +``` + +- [`GenX.ids_with_nonneg(rs::Vector{T}, f::Function) where T <: AbstractResource`](@ref): Returns the indices of the resources in `rs` for which the getter function `f` returns a non-negative value. + +Other useful functions available in GenX are: +- [`GenX.resource_id(r::AbstractResource)`](@ref): Returns the `id` of the resource `r`. +Example: +```jldoctest example_thermal +julia> resource_id(thermal_gen[1]) +23 +julia> resource_id.(thermal_gen) +3-element Vector{Int64}: + 23 + 24 + 25 +``` +- [`GenX.resource_name(r::AbstractResource)`](@ref): Returns the `name` of the resource `r`. +Example: +```jldoctest example_thermal +julia> resource_name(thermal_gen[1]) +"NG_combined_cycle_1" +julia> resource_name.(thermal_gen) +3-element Vector{String}: + "NG_combined_cycle_1" + "NG_combined_cycle_2" + "Biomass" +``` + + +## How to add a new resource to GenX +### Overview +GenX is designed to be modular and highly flexible to comply with the rapidly changing electricity landscape. For this reason, adding a new resource to GenX is relatively straightforward. This guide will walk you through the steps to do it. + +!!! tip + Before you start, ensure you have read the section of the documentation about [2.1.4 Resources input files](@ref). This will help you understand the data format that GenX expects for each resource and where to place the input data files. + + +### Step 1: Define the new resource data type +The first step to add a new resource to GenX is to create a new GenX resource type. This is done by adding a new element to the `resource_types` list of symbols defined at the top of the [resources.jl](https://github.com/GenXProject/GenX/blob/develop/src/model/resources/resources.jl) file. This list contains the names of all the resource types available in GenX. + +For example, to add a new resource type called `new_resource`, you would need to add a new `Symbol`, `:NewResource` to the `resource_types` list: +```julia +const resource_types = (:Thermal, + :Vre, + :Hydro, + :Storage, + :MustRun, + :FlexDemand, + :VreStorage, + :Electrolyzer, + :NewResource) +``` +We encourage you to use `CamelCase` for the name of the new resource type. + +The lines right after the `resource_types` list automatically create a new `struct` (composite type) for the new resource type. More importantly, the new resource type will be defined as a subtype of the GenX `AbstractResource` type. This is important because it allows the code to use multiple dispach and define a common interface (behavior) for all resources in GenX. For instance, the `resource_id()` function will return the `id` of any resource in GenX, regardless of its type (and therefore will automatically work for the newly created `new_resource`). + +### Step 2: Add the filename of the new resource type to GenX + +In GenX, the attributes of a resource are automatically defined from the columns of the corresponding input data file (e.g., `Thermal.csv` file for the `Thermal` resources, `Hydro.csv` file for the `Hydro` resource, etc). The first column of these files should be called `Resource` and contain a unique identifier for each resource. The rest of the columns in the input data file will be used to define the attributes of the new resource type. + +So, the second step to add a new resource type to GenX is to add the filename of the input data file to GenX. The list of input data files that GenX loads during the initialization process are defined at the top of the [`load_resource_data.jl`](https://github.com/GenXProject/GenX/tree/main/src/load_inputs/load_resources_data.jl) +file, inside an internal function called `_get_resource_info()`. This function returns a `NamedTuple` called `resource_info` with the name of the input data file and the name of the resource type for each resource that is available in GenX. + +To add the new resource type to GenX, add a new item to `resource_info`, where the first field is the name of the input data file and the second is the name of the resource type that was created in Step 1. The names in `resource_info` are only used to make the code more readable and are arbitrary. + +For example, if you are adding a new resource type called `new_resource`, you would need to add the following line to the `resource_info`: `new_resource = (filename="New_resource.csv", type=NewResource)`, as follows: + +```julia +function _get_resource_info() + resource_info = ( + hydro = (filename="Hydro.csv", type=Hydro), + thermal = (filename="Thermal.csv", type=Thermal), + vre = (filename="Vre.csv", type=Vre), + storage = (filename="Storage.csv", type=Storage), + flex_demand = (filename="Flex_demand.csv", type=FlexDemand), + must_run = (filename="Must_run.csv", type=MustRun), + electrolyzer = (filename="Electrolyzer.csv", type=Electrolyzer), + vre_stor = (filename="Vre_stor.csv", type=VreStorage) + new_resource = (filename="New_resource.csv", type=NewResource) + ) + return resource_info +end +``` +With this simple edit, whenever the file `New_resource.csv` is found in the input data folder, GenX will automatically perform the following steps: + +1. Load the new resource input file, +2. Create a new instance of the `NewResource` type for each row in the input data file, +3. Define the attributes of each `NewResource` from the columns in the input data file, +4. Populate the attributes of each `NewResource` with the values read from the input data file. +5. Add the new resources to the vector of resources in the model. + +For example, if the input data file `New_resource.csv` contains the following data: +``` +New_resource.csv + + Resource │ Zone | Exisiting_capacity | attribute_1 | attribute_2 + String │ Int64 | Float64 | Float64 | Float64 +──────────┼───────┼────────────────────┼─────────────┼──────────── + new_res1 │ 1 │ 100.0 │ 6.2 │ 0.4 + new_res2 │ 1 │ 200.0 │ 0.1 │ 4.0 + new_res3 │ 2 │ 300.0 │ 2.0 │ 0.1 +``` +GenX will create three new resources of type `NewResource` with the following attributes: +- `resource`: `String` with the name of the resource (e.g., `new_res1`, `new_res2`, `new_res3`) +- `zone`: `Int64` with the zone of the resource (e.g., `1`, `1`, `2`) +- `existing_capacity`: `Float64` with the existing capacity of the resource (e.g., `100.0`, `200.0`, `300.0`) +- `attribute_1`: `Float64` with the value of `attribute_1` (e.g., `6.2`, `0.1`, `2.0`) +- `attribute_2`: `Float64` with the value of `attribute_2` (e.g., `0.4`, `4.0`, `0.1`) + + +See Step 3 for more details on how to work with the new resource type. + +!!! warning + Each resource type must contain a `Resource` attribute. This attribute should be `String` that uniquely identifies the resource. + +### Step 3: Work with the new resource type +Once the new resource type has been defined and added to GenX, you can work with it as you would with any other resource type. To improve the robustness and readability of the code, we recommend that you define getter functions for the new attributes of the new resource type (e.g., a function `zone(r) = r.zone` to get the zone of the resource `r`). These functions can be defined in the `resources.jl` file. However, this is not strictly necessary, and you can access the attributes of the new resource type directly using the standard `.` notation: + +!!! tip + To simplify the creation of getter functions for the new resource type, you can use the `@interface` macro available in GenX. This macro automatically creates a new function with the same name as the attribute and which returns the value of the attribute. For example, if you want to create a getter function for the `attribute_1` of the `NewResource` type, these two ways are equivalent: + ```julia + julia> default_attribute_1 = 0.0 # default value for attribute_1 + julia> attribute_1(res::NewResource) = get(res, :attribute_1, default_attribute_1) + attribute_1 (generic function with 1 method) + julia> @interface(attribute_1, 0.0, NewResource) + attribute_1 (generic function with 1 method) + ``` + And then: + ```julia + julia> attribute_1(new_res1) + 6.2 + julia> new_res1.attribute_1 + 6.2 + ``` + +```@meta +DocTestSetup = nothing +``` \ No newline at end of file diff --git a/docs/src/how_to_run_genx.md b/docs/src/how_to_run_genx.md index 8090347df1..c27640509f 100644 --- a/docs/src/how_to_run_genx.md +++ b/docs/src/how_to_run_genx.md @@ -110,8 +110,8 @@ Note that if you have not already installed the required Julia packages or you d ## 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 the `Generators_data.csv` file denoting the type of each technology. -2. Add a `MGA` column in the `Generators_data.csv` file denoting the availability of the technology. +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. diff --git a/docs/src/load_inputs.md b/docs/src/load_inputs.md index 4ea973e2f9..a028ecf216 100644 --- a/docs/src/load_inputs.md +++ b/docs/src/load_inputs.md @@ -13,7 +13,7 @@ Pages = ["load_fuels_data.jl"] ## Generators Input Data ```@autodocs Modules = [GenX] -Pages = ["load_generators_data.jl"] +Pages = ["load_resources_data.jl"] ``` ## Variability of Generators' Outputs diff --git a/docs/src/maintenance.md b/docs/src/maintenance.md index 6e02c28bc5..8ada7c6b38 100644 --- a/docs/src/maintenance.md +++ b/docs/src/maintenance.md @@ -35,7 +35,7 @@ Rather than have maintenance potentially start every hour, one can have possible (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`: +There are four columns which need to be added to the plant data, i.e. in the resource `.csv` files: 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. diff --git a/docs/src/multi_stage_model_overview.md b/docs/src/multi_stage_model_overview.md index 68d0133450..ee33fbb0b1 100644 --- a/docs/src/multi_stage_model_overview.md +++ b/docs/src/multi_stage_model_overview.md @@ -17,7 +17,7 @@ The table below summarizes the key differences in the two model setups. 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. -| | **Generators_data.csv** | +| | **Resource .csv files** | |:------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------| | Min\_Retired\_Cap\_MW | Minimum capacity in MW that must retire in this planning stage. Note that for the co-located VRE-STOR module, this value represents the grid connection component. | | Min\_Retired\_Energy\_Cap\_MW | Minimum energy capacity in MW that must retire in this planning stage. Note that for the co-located VRE-STOR module, this value represents the storage component. | @@ -26,7 +26,7 @@ Instead of one set of input files, there is one directory of input files that ne | Capital\_Recovery\_Period | The technology-specific period in years over which initial capital costs must be recovered. Note that for the co-located VRE-STOR module, this value represents the grid connection component. | | WACC | The technology-specific weighted average cost of capital. Note that for the co-located VRE-STOR module, this value represents the grid connection component. | -| | **Vre_and_stor_data.csv (if activated)** | +| | **Vre_stor.csv (if activated)** | |:------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------| |Min\_Retired\_Cap\_Inverter\_MW |Minimum inverter capacity in MW AC that must retire in this plannig stage. | |Min\_Retired\_Cap\_Solar\_MW |Minimum solar PV capacity in MW DC that must retire in this plannig stage. | diff --git a/docs/src/resource.md b/docs/src/resource.md new file mode 100644 index 0000000000..2229516d81 --- /dev/null +++ b/docs/src/resource.md @@ -0,0 +1,10 @@ +# Resource types and function interfaces + +```@docs +GenX.AbstractResource +``` + +```@autodocs +Modules = [GenX] +Pages = ["resources.jl"] +``` \ No newline at end of file diff --git a/src/GenX.jl b/src/GenX.jl index 7bd75fb736..508fccceb6 100644 --- a/src/GenX.jl +++ b/src/GenX.jl @@ -45,6 +45,11 @@ using HiGHS # To translate $/MWh to $M/GWh, multiply by ModelScalingFactor const ModelScalingFactor = 1e+3 +""" +An abstract type that should be subtyped for users creating GenX resources. +""" +abstract type AbstractResource end + # thanks, ChatGPT function include_all_in_folder(folder) base_path = joinpath(@__DIR__, folder) @@ -72,4 +77,5 @@ include("simple_operation.jl") include_all_in_folder("multi_stage") include_all_in_folder("additional_tools") + end diff --git a/src/additional_tools/method_of_morris.jl b/src/additional_tools/method_of_morris.jl index c4e46ea06e..0938c8022e 100644 --- a/src/additional_tools/method_of_morris.jl +++ b/src/additional_tools/method_of_morris.jl @@ -174,11 +174,15 @@ function morris(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outp len_design_mat = Morris_range[!,:len_design_mat][1] uncertain_columns = unique(Morris_range[!,:Parameter]) #save_parameters = zeros(length(Morris_range[!,:Parameter])) + gen = inputs["RESOURCES"] # Creating the range of uncertain parameters in terms of absolute values sigma = zeros((1, 2)) for column in uncertain_columns - sigma = [sigma; [inputs["dfGen"][!,Symbol(column)] .* (1 .+ Morris_range[Morris_range[!,:Parameter] .== column, :Lower_bound] ./100) inputs["dfGen"][!,Symbol(column)] .* (1 .+ Morris_range[Morris_range[!,:Parameter] .== column, :Upper_bound] ./100)]] + col_sym = Symbol(lowercase(column)) + # column_f is the function to get the value "column" for each generator + column_f = isdefined(GenX, col_sym) ? getfield(GenX, col_sym) : r -> getproperty(r, col_sym) + sigma = [sigma; [column_f.(gen) .* (1 .+ Morris_range[Morris_range[!,:Parameter] .== column, :Lower_bound] ./100) column_f.(gen) .* (1 .+ Morris_range[Morris_range[!,:Parameter] .== column, :Upper_bound] ./100)]] end sigma = sigma[2:end,:] @@ -192,7 +196,8 @@ function morris(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outp for column in uncertain_columns index = findall(s -> s == column, Morris_range[!,:Parameter]) - inputs["dfGen"][!,Symbol(column)] = sigma[first(index):last(index)] + attr_to_set = Symbol(lowercase(column)) + gen[attr_to_set] = sigma[first(index):last(index)] end EP = generate_model(setup, inputs, OPTIMIZER) diff --git a/src/additional_tools/modeling_to_generate_alternatives.jl b/src/additional_tools/modeling_to_generate_alternatives.jl index 497ed48191..97400b54b1 100644 --- a/src/additional_tools/modeling_to_generate_alternatives.jl +++ b/src/additional_tools/modeling_to_generate_alternatives.jl @@ -1,5 +1,5 @@ @doc raw""" - mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outpath::AbstractString) + mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict) We have implemented an updated Modeling to Generate Alternatives (MGA) Algorithm proposed by [Berntsen and Trutnevyte (2017)](https://www.sciencedirect.com/science/article/pii/S0360544217304097) to generate a set of feasible, near cost-optimal technology portfolios. This algorithm was developed by [Brill Jr, E. D., 1979](https://pubsonline.informs.org/doi/abs/10.1287/mnsc.25.5.413) and introduced to energy system planning by [DeCarolia, J. F., 2011](https://www.sciencedirect.com/science/article/pii/S0140988310000721). @@ -18,23 +18,24 @@ To create the MGA formulation, we replace the cost-minimizing objective function where, $\beta_{zr}$ is a random objective fucntion coefficient betwen $[0,100]$ for MGA iteration $k$. $\Theta_{y,t,z,r}$ is a generation of technology $y$ in zone $z$ in time period $t$ that belongs to a resource type $r$. We aggregate $\Theta_{y,t,z,r}$ into a new variable $P_{z,r}$ that represents total generation from technology type $r$ in a zone $z$. In the second constraint above, $\delta$ denote the increase in budget from the least-cost solution and $f$ represents the expression for the total system cost. The constraint $Ax = b$ represents all other constraints in the power system model. We then solve the formulation with minimization and maximization objective function to explore near optimal solution space. """ -function mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outpath::AbstractString) +function mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict) if setup["ModelingToGenerateAlternatives"]==1 # Start MGA Algorithm println("MGA Module") - # Objective function value of the least cost problem + # Objective function value of the least cost problem Least_System_Cost = objective_value(EP) # Read sets - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zonests - G = inputs["G"] + zones = unique(inputs["R_ZONES"]) # Create a set of unique technology types - TechTypes = unique(dfGen[dfGen[!, :MGA] .== 1, :Resource_Type]) + resources_with_mga = gen[ids_with_mga(gen)] + TechTypes = unique(resource_type_mga.(resources_with_mga)) # Read slack parameter representing desired increase in budget from the least cost solution slack = setup["ModelingtoGenerateAlternativeSlack"] @@ -51,8 +52,11 @@ function mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outpath @constraint(EP, budget, EP[:eObj] <= Least_System_Cost * (1 + slack) ) # Constraint to compute total generation in each zone from a given Technology Type - @constraint(EP,cGeneration[tt = 1:length(TechTypes), z = 1:Z], vSumvP[tt,z] == sum(EP[:vP][y,t] * inputs["omega"][t] - for y in dfGen[(dfGen[!,:Resource_Type] .== TechTypes[tt]) .& (dfGen[!,:Zone] .== z), :R_ID], t in 1:T)) + function resource_in_zone_with_TechType(tt::Int64, z::Int64) + condition::BitVector = (resource_type_mga.(gen) .== TechTypes[tt]) .& (zone_id.(gen) .== z) + return resource_id.(gen[condition]) + end + @constraint(EP,cGeneration[tt = 1:length(TechTypes), z = 1:Z], vSumvP[tt,z] == sum(EP[:vP][y,t] * inputs["omega"][t] for y in resource_in_zone_with_TechType(tt,z), t in 1:T)) ### End Constraints ### @@ -74,7 +78,7 @@ function mga(EP::Model, path::AbstractString, setup::Dict, inputs::Dict, outpath for i in 1:setup["ModelingToGenerateAlternativeIterations"] # Create random coefficients for the generators that we want to include in the MGA run for the given budget - pRand = rand(length(unique(dfGen[dfGen[!, :MGA] .== 1, :Resource_Type])),length(unique(dfGen[!,:Zone]))) + pRand = rand(length(TechTypes),length(zones)) ### Maximization objective @objective(EP, Max, sum(pRand[tt,z] * vSumvP[tt,z] for tt in 1:length(TechTypes), z in 1:Z )) diff --git a/src/configure_settings/configure_settings.jl b/src/configure_settings/configure_settings.jl index 1a234547dc..92074cada0 100644 --- a/src/configure_settings/configure_settings.jl +++ b/src/configure_settings/configure_settings.jl @@ -24,7 +24,8 @@ function default_settings() "IncludeLossesInESR" => 0, "HydrogenHourlyMatching" => 0, "EnableJuMPStringNames" => false, - "ComputeConflicts" => 0 + "ComputeConflicts" => 0, + "ResourcePath" => "Resources", ) end diff --git a/src/load_inputs/load_dataframe.jl b/src/load_inputs/load_dataframe.jl index e5c7c9e3c0..0e5d74c92d 100644 --- a/src/load_inputs/load_dataframe.jl +++ b/src/load_inputs/load_dataframe.jl @@ -188,3 +188,20 @@ function extract_matrix_from_dataframe(df::DataFrame, columnprefix::AbstractStri Matrix(dropmissing(df[:, sorted_columns])) end +function extract_matrix_from_resources(rs::Vector{T}, columnprefix::AbstractString, default=0.0) where T<:AbstractResource + + # attributes starting with columnprefix with a numeric suffix + attributes_n = [attr for attr in string.(attributes(rs[1])) if startswith(attr, columnprefix)] + # sort the attributes by the numeric suffix + sort!(attributes_n, by = x -> parse(Int, split(x, "_")[end])) + + # extract the matrix of the attributes + value = Matrix{Float64}(undef, length(rs), length(attributes_n)) + for (i, r) in enumerate(rs) + for (j, attr) in enumerate(attributes_n) + value[i, j] = get(r, Symbol(attr), default) + end + end + + return value +end diff --git a/src/load_inputs/load_generators_data.jl b/src/load_inputs/load_generators_data.jl deleted file mode 100644 index 7699e6d675..0000000000 --- a/src/load_inputs/load_generators_data.jl +++ /dev/null @@ -1,664 +0,0 @@ -@doc raw""" - load_generators_data!(setup::Dict, path::AbstractString, inputs_gen::Dict, fuel_costs::Dict, fuel_CO2::Dict) - -Function for reading input parameters related to electricity generators (plus storage and flexible demand resources) -""" -function load_generators_data!(setup::Dict, path::AbstractString, inputs_gen::Dict, fuel_costs::Dict, fuel_CO2::Dict) - - filename = "Generators_data.csv" - gen_in = load_dataframe(joinpath(path, filename)) - - - # Store DataFrame of generators/resources input data for use in model - inputs_gen["dfGen"] = gen_in - - # initial screen that resources are valid - resources = dataframerow_to_dict.(eachrow(gen_in)) - validate_resources(resources) - inputs_gen["resources_d"] = resources - - # Number of resources (generators, storage, DR, and DERs) - G = nrow(gen_in) - inputs_gen["G"] = G - - # Add Resource IDs after reading to prevent user errors - gen_in[!,:R_ID] = 1:G - - scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 - ## Defining sets of generation and storage resources - - # Set of storage resources with symmetric charge/discharge capacity - inputs_gen["STOR_SYMMETRIC"] = gen_in[gen_in.STOR.==1,:R_ID] - # Set of storage resources with asymmetric (separte) charge/discharge capacity components - inputs_gen["STOR_ASYMMETRIC"] = gen_in[gen_in.STOR.==2,:R_ID] - # Set of all storage resources - inputs_gen["STOR_ALL"] = union(inputs_gen["STOR_SYMMETRIC"],inputs_gen["STOR_ASYMMETRIC"]) - - # Set of storage resources with long duration storage capabilitites - inputs_gen["STOR_HYDRO_LONG_DURATION"] = gen_in[(gen_in.LDS.==1) .& (gen_in.HYDRO.==1),:R_ID] - inputs_gen["STOR_HYDRO_SHORT_DURATION"] = gen_in[(gen_in.LDS.==0) .& (gen_in.HYDRO.==1),:R_ID] - inputs_gen["STOR_LONG_DURATION"] = gen_in[(gen_in.LDS.==1) .& (gen_in.STOR.>=1),:R_ID] - inputs_gen["STOR_SHORT_DURATION"] = gen_in[(gen_in.LDS.==0) .& (gen_in.STOR.>=1),:R_ID] - - # Set of all reservoir hydro resources - inputs_gen["HYDRO_RES"] = gen_in[(gen_in[!,:HYDRO].==1),:R_ID] - # Set of reservoir hydro resources modeled with known reservoir energy capacity - if !isempty(inputs_gen["HYDRO_RES"]) - inputs_gen["HYDRO_RES_KNOWN_CAP"] = intersect(gen_in[gen_in.Hydro_Energy_to_Power_Ratio.>0,:R_ID], inputs_gen["HYDRO_RES"]) - end - - # Set of flexible demand-side resources - inputs_gen["FLEX"] = gen_in[gen_in.FLEX.==1,:R_ID] - - # Set of must-run plants - could be behind-the-meter PV, hydro run-of-river, must-run fossil or thermal plants - inputs_gen["MUST_RUN"] = gen_in[gen_in.MUST_RUN.==1,:R_ID] - - # Set of controllable variable renewable resources - inputs_gen["VRE"] = gen_in[gen_in.VRE.>=1,:R_ID] - - # Set of hydrogen electolyzer resources (optional set): - if "ELECTROLYZER" in names(gen_in) - inputs_gen["ELECTROLYZER"] = gen_in[gen_in.ELECTROLYZER.>=1,:R_ID] - else - inputs_gen["ELECTROLYZER"] = Vector() - end - - # Set of retrofit resources (optional set) - if !("RETRO" in names(gen_in)) - gen_in[!, "RETRO"] = zero(gen_in[!, "R_ID"]) - end - - inputs_gen["RETRO"] = gen_in[gen_in.RETRO.==1,:R_ID] - # Disable Retrofit while it's under development - if !(isempty(inputs_gen["RETRO"])) - error("The Retrofits feature, which is activated by nonzero data in a 'RETRO' column in Generators_data.csv, is under development and is not ready for public use. Disable this message to enable this *experimental* feature.") - end - - # Set of thermal generator resources - if setup["UCommit"]>=1 - # Set of thermal resources eligible for unit committment - inputs_gen["THERM_COMMIT"] = gen_in[gen_in.THERM.==1,:R_ID] - # Set of thermal resources not eligible for unit committment - inputs_gen["THERM_NO_COMMIT"] = gen_in[gen_in.THERM.==2,:R_ID] - else # When UCommit == 0, no thermal resources are eligible for unit committment - inputs_gen["THERM_COMMIT"] = Int64[] - inputs_gen["THERM_NO_COMMIT"] = union(gen_in[gen_in.THERM.==1,:R_ID], gen_in[gen_in.THERM.==2,:R_ID]) - end - inputs_gen["THERM_ALL"] = union(inputs_gen["THERM_COMMIT"],inputs_gen["THERM_NO_COMMIT"]) - - # For now, the only resources eligible for UC are themal resources - inputs_gen["COMMIT"] = inputs_gen["THERM_COMMIT"] - - if setup["Reserves"] >= 1 - # Set for resources with regulation reserve requirements - inputs_gen["REG"] = gen_in[(gen_in[!,:Reg_Max].>0),:R_ID] - # Set for resources with spinning reserve requirements - inputs_gen["RSV"] = gen_in[(gen_in[!,:Rsv_Max].>0),:R_ID] - end - - buildable = resources_which_can_be_built(gen_in) - retirable = resources_which_can_be_retired(gen_in) - if deprecated_newbuild_canretire_interface(gen_in) - deprecated_newbuild_canretire_interface_warning() - else - validate_newbuild_entries(gen_in) - end - - # Set of all resources eligible for new capacity - inputs_gen["NEW_CAP"] = intersect(buildable, gen_in[gen_in.Max_Cap_MW.!=0,:R_ID]) - # Set of all resources eligible for capacity retirements - inputs_gen["RET_CAP"] = intersect(retirable, gen_in[gen_in.Existing_Cap_MW.>=0,:R_ID]) - - new_cap_energy = Set{Int64}() - ret_cap_energy = Set{Int64}() - if !isempty(inputs_gen["STOR_ALL"]) - # Set of all storage resources eligible for new energy capacity - new_cap_energy = intersect(buildable, gen_in[gen_in.Max_Cap_MWh.!=0,:R_ID], inputs_gen["STOR_ALL"]) - # Set of all storage resources eligible for energy capacity retirements - ret_cap_energy = intersect(retirable, gen_in[gen_in.Existing_Cap_MWh.>=0,:R_ID], inputs_gen["STOR_ALL"]) - end - inputs_gen["NEW_CAP_ENERGY"] = new_cap_energy - inputs_gen["RET_CAP_ENERGY"] = ret_cap_energy - - new_cap_charge = Set{Int64}() - ret_cap_charge = Set{Int64}() - if !isempty(inputs_gen["STOR_ASYMMETRIC"]) - # Set of asymmetric charge/discharge storage resources eligible for new charge capacity - new_cap_charge = intersect(buildable, gen_in[gen_in.Max_Charge_Cap_MW.!=0,:R_ID], inputs_gen["STOR_ASYMMETRIC"]) - # Set of asymmetric charge/discharge storage resources eligible for charge capacity retirements - ret_cap_charge = intersect(buildable, gen_in[gen_in.Existing_Charge_Cap_MW.>=0,:R_ID], inputs_gen["STOR_ASYMMETRIC"]) - end - inputs_gen["NEW_CAP_CHARGE"] = new_cap_charge - inputs_gen["RET_CAP_CHARGE"] = ret_cap_charge - - # Names of resources - inputs_gen["RESOURCES"] = gen_in[!,:Resource] - # Zones resources are located in - zones = gen_in[!,:Zone] - # Resource identifiers by zone (just zones in resource order + resource and zone concatenated) - inputs_gen["R_ZONES"] = zones - inputs_gen["RESOURCE_ZONES"] = inputs_gen["RESOURCES"] .* "_z" .* string.(zones) - - # Retrofit Information - if !isempty(inputs_gen["RETRO"]) # If there are any retrofit technologies in consideration, read relevant data - inputs_gen["NUM_RETROFIT_SOURCES"] = gen_in[!,:Num_RETRO_Sources] # Number of retrofit sources for this technology (0 if not a retrofit technology) - max_retro_sources = maximum(inputs_gen["NUM_RETROFIT_SOURCES"]) - - source_cols = [ Symbol(string("Retro",i,"_Source")) for i in 1:max_retro_sources ] - efficiency_cols = [ Symbol(string("Retro",i,"_Efficiency")) for i in 1:max_retro_sources ] - inv_cap_cols = [ Symbol(string("Retro",i,"_Inv_Cost_per_MWyr")) for i in 1:max_retro_sources ] - - sources = [ gen_in[!,c] for c in source_cols ] - inputs_gen["RETROFIT_SOURCES"] = [ [ sources[i][y] for i in 1:max_retro_sources if sources[i][y] != "None" ] for y in 1:G ] # The origin technologies that can be retrofitted into this new technology - inputs_gen["RETROFIT_SOURCE_IDS"] = [ [ findall(x->x==sources[i][y],inputs_gen["RESOURCES"])[1] for i in 1:max_retro_sources if sources[i][y] != "None" ] for y in 1:G ] # The R_IDs of these origin technologies - - efficiencies = [ gen_in[!,c] for c in efficiency_cols ] - inputs_gen["RETROFIT_EFFICIENCIES"] = [ [ efficiencies[i][y] for i in 1:max_retro_sources if efficiencies[i][y] != 0 ] for y in 1:G ] # The efficiencies of each retrofit by source (ratio of outgoing to incoming nameplate capacity) - inv_cap = [ gen_in[!,c] for c in inv_cap_cols ] - inv_cap /= scale_factor - - inputs_gen["RETROFIT_INV_CAP_COSTS"] = [ [ inv_cap[i][y] for i in 1:max_retro_sources if inv_cap[i][y] >= 0 ] for y in 1:G ] # The set of investment costs (capacity $/MWyr) of each retrofit by source - end - - # See documentation for descriptions of each column - # Generally, these scalings converts energy and power units from MW to GW - # and $/MW to $M/GW. Both are done by dividing the values by 1000. - columns_to_scale = [:Existing_Charge_Cap_MW, # to GW - :Existing_Cap_MWh, # to GWh - :Existing_Cap_MW, # to GW - - :Cap_Size, # to GW - - :Min_Cap_MW, # to GW - :Min_Cap_MWh, # to GWh - :Min_Charge_Cap_MW, # to GWh - - :Max_Cap_MW, # to GW - :Max_Cap_MWh, # to GWh - :Max_Charge_Cap_MW, # to GW - - :Inv_Cost_per_MWyr, # to $M/GW/yr - :Inv_Cost_per_MWhyr, # to $M/GWh/yr - :Inv_Cost_Charge_per_MWyr, # to $M/GW/yr - - :Fixed_OM_Cost_per_MWyr, # to $M/GW/yr - :Fixed_OM_Cost_per_MWhyr, # to $M/GWh/yr - :Fixed_OM_Cost_Charge_per_MWyr, # to $M/GW/yr - - :Var_OM_Cost_per_MWh, # to $M/GWh - :Var_OM_Cost_per_MWh_In, # to $M/GWh - - :Reg_Cost, # to $M/GW - :Rsv_Cost, # to $M/GW - - :Min_Retired_Cap_MW, # to GW - :Min_Retired_Charge_Cap_MW, # to GW - :Min_Retired_Energy_Cap_MW, # to GW - - :Start_Cost_per_MW, # to $M/GW - - :Hydrogen_MWh_Per_Tonne, # to GWh/t - ] - - for column in columns_to_scale - if string(column) in names(gen_in) - gen_in[!, column] /= scale_factor - end - end - - if setup["UCommit"] >= 1 - start_cost = convert(Array{Float64}, gen_in[!,:Start_Cost_per_MW]) - inputs_gen["C_Start"] = zeros(Float64, G, inputs_gen["T"]) - end - - # scale the start costs - for g in 1:G - if g in inputs_gen["COMMIT"] - # Start-up cost is sum of fixed cost per start startup. - inputs_gen["C_Start"][g,:] .= gen_in[g,:Cap_Size] * ( start_cost[g]) - end - end - - load_vre_stor_data!(inputs_gen, setup, path) - - - # write zeros if col names are not in the gen_in dataframe - required_cols_for_co2 = ["Biomass", "CO2_Capture_Fraction", "CO2_Capture_Fraction_Startup", "CCS_Disposal_Cost_per_Metric_Ton"] - for col in required_cols_for_co2 - ensure_column!(gen_in, col, 0) - end - - # Scale CCS_Disposal_Cost_per_Metric_Ton for CCS units - gen_in.CCS_Disposal_Cost_per_Metric_Ton /= scale_factor - - # get R_ID when fuel is not None - inputs_gen["HAS_FUEL"] = gen_in[(gen_in[!,:Fuel] .!= "None"),:R_ID] - - # Piecewise fuel usage option - if setup["UCommit"] > 0 - process_piecewisefuelusage!(inputs_gen, scale_factor) - end - - println(filename * " Successfully Read!") -end - - -@doc raw""" - check_vre_stor_validity(df::DataFrame, setup::Dict) - -Function for checking that no other technology flags have been activated and specific data inputs - have been zeroed for the co-located VRE-STOR module -""" -function check_vre_stor_validity(df::DataFrame, setup::Dict) - # Determine if any VRE-STOR resources exist - vre_stor = is_nonzero(df, :VRE_STOR) - r_id = df[:, :R_ID] - - error_strings = String[] - - function error_feedback(data::Vector{Int}, col::Symbol)::String - string("Generators ", data, ", marked as VRE-STOR, have ", col, " ≠ 0. ", col, " must be 0.") - end - - function check_any_nonzero_with_vre_stor!(error_strings::Vector{String}, df::DataFrame, col::Symbol) - check = vre_stor .& is_nonzero(df, col) - if any(check) - e = error_feedback(r_id[check], col) - push!(error_strings, e) - end - end - - # Confirm that any other flags/inputs are not activated (all other flags should be activated in the vre_stor_data.csv) - check_any_nonzero_with_vre_stor!(error_strings, df, :Var_OM_Cost_per_MWh_In) - if setup["EnergyShareRequirement"]==1 - nESR = count(occursin.("ESR_", names(df))) - for i in 1:nESR - check_any_nonzero_with_vre_stor!(error_strings, df, Symbol(string("ESR_",i))) - end - end - if setup["CapacityReserveMargin"]==1 - nCapRes = count(occursin.("CapRes_", names(df))) - for i in 1:nCapRes - check_any_nonzero_with_vre_stor!(error_strings, df, Symbol(string("CapRes_",i))) - end - end - - return error_strings -end - -@doc raw""" - summarize_errors(error_strings::Vector{String}) - -Function for printing out to user how many errors there were in the configuration of the generators data -""" -function summarize_errors(error_strings::Vector{String}) - if !isempty(error_strings) - println(length(error_strings), " problem(s) in the configuration of the generators:") - for es in error_strings - println(es) - end - error("There were errors in the configuration of the generators.") - end -end - -@doc raw""" - split_storage_resources!(df::DataFrame, inputs::Dict, setup::Dict) - -For co-located VRE-storage resources, this function returns the storage type - (1. long-duration or short-duration storage, 2. symmetric or asymmetric storage) - for charging and discharging capacities -""" -function split_storage_resources!(df::DataFrame, inputs::Dict, setup::Dict) - - # All Storage Resources - inputs["VS_STOR"] = union(df[df.STOR_DC_CHARGE.>=1,:R_ID], df[df.STOR_AC_CHARGE.>=1,:R_ID], - df[df.STOR_DC_DISCHARGE.>=1,:R_ID], df[df.STOR_AC_DISCHARGE.>=1,:R_ID]) - STOR = inputs["VS_STOR"] - - # Storage DC Discharge Resources - inputs["VS_STOR_DC_DISCHARGE"] = df[(df.STOR_DC_DISCHARGE.>=1),:R_ID] - inputs["VS_SYM_DC_DISCHARGE"] = df[df.STOR_DC_DISCHARGE.==1,:R_ID] - inputs["VS_ASYM_DC_DISCHARGE"] = df[df.STOR_DC_DISCHARGE.==2,:R_ID] - - # Storage DC Charge Resources - inputs["VS_STOR_DC_CHARGE"] = df[(df.STOR_DC_CHARGE.>=1),:R_ID] - inputs["VS_SYM_DC_CHARGE"] = df[df.STOR_DC_CHARGE.==1,:R_ID] - inputs["VS_ASYM_DC_CHARGE"] = df[df.STOR_DC_CHARGE.==2,:R_ID] - - # Storage AC Discharge Resources - inputs["VS_STOR_AC_DISCHARGE"] = df[(df.STOR_AC_DISCHARGE.>=1),:R_ID] - inputs["VS_SYM_AC_DISCHARGE"] = df[df.STOR_AC_DISCHARGE.==1,:R_ID] - inputs["VS_ASYM_AC_DISCHARGE"] = df[df.STOR_AC_DISCHARGE.==2,:R_ID] - - # Storage AC Charge Resources - inputs["VS_STOR_AC_CHARGE"] = df[(df.STOR_AC_CHARGE.>=1),:R_ID] - inputs["VS_SYM_AC_CHARGE"] = df[df.STOR_AC_CHARGE.==1,:R_ID] - inputs["VS_ASYM_AC_CHARGE"] = df[df.STOR_AC_CHARGE.==2,:R_ID] - - # Storage LDS & Non-LDS Resources - inputs["VS_LDS"] = df[(df.LDS_VRE_STOR.!=0),:R_ID] - inputs["VS_nonLDS"] = setdiff(STOR, inputs["VS_LDS"]) - - # Symmetric and asymmetric storage resources - inputs["VS_ASYM"] = union(inputs["VS_ASYM_DC_CHARGE"], inputs["VS_ASYM_DC_DISCHARGE"], - inputs["VS_ASYM_AC_DISCHARGE"], inputs["VS_ASYM_AC_CHARGE"]) - inputs["VS_SYM_DC"] = intersect(inputs["VS_SYM_DC_CHARGE"], inputs["VS_SYM_DC_DISCHARGE"]) - inputs["VS_SYM_AC"] = intersect(inputs["VS_SYM_AC_CHARGE"], inputs["VS_SYM_AC_DISCHARGE"]) - - # Send warnings for symmetric/asymmetric resources - if (!isempty(setdiff(inputs["VS_SYM_DC_DISCHARGE"], inputs["VS_SYM_DC_CHARGE"])) - || !isempty(setdiff(inputs["VS_SYM_DC_CHARGE"], inputs["VS_SYM_DC_DISCHARGE"])) - || !isempty(setdiff(inputs["VS_SYM_AC_DISCHARGE"], inputs["VS_SYM_AC_CHARGE"])) - || !isempty(setdiff(inputs["VS_SYM_AC_CHARGE"], inputs["VS_SYM_AC_DISCHARGE"]))) - @warn("Symmetric capacities must both be DC or AC.") - end - - # Send warnings for battery resources discharging - if !isempty(intersect(inputs["VS_STOR_DC_DISCHARGE"], inputs["VS_STOR_AC_DISCHARGE"])) - @warn("Both AC and DC discharging functionalities are turned on.") - end - - # Send warnings for battery resources charging - if !isempty(intersect(inputs["VS_STOR_DC_CHARGE"], inputs["VS_STOR_AC_CHARGE"])) - @warn("Both AC and DC charging functionalities are turned on.") - end -end - -@doc raw""" - load_vre_stor_data!(inputs_gen::Dict, setup::Dict, path::AbstractString) - -Function for reading input parameters related to co-located VRE-storage resources -""" -function load_vre_stor_data!(inputs_gen::Dict, setup::Dict, path::AbstractString) - - error_strings = String[] - dfGen = inputs_gen["dfGen"] - inputs_gen["VRE_STOR"] = "VRE_STOR" in names(dfGen) ? dfGen[dfGen.VRE_STOR.==1,:R_ID] : Int[] - - # Check if VRE-STOR resources exist - if !isempty(inputs_gen["VRE_STOR"]) - - # Check input data format - vre_stor_errors = check_vre_stor_validity(dfGen, setup) - append!(error_strings, vre_stor_errors) - - vre_stor_in = DataFrame(CSV.File(joinpath(path,"Vre_and_stor_data.csv"), header=true), copycols=true) - - ## Defining all sets - - # New build and retirement resources - buildable = resources_which_can_be_built(dfGen) - retirable = resources_which_can_be_retired(dfGen) - - # Solar PV Resources - inputs_gen["VS_SOLAR"] = vre_stor_in[(vre_stor_in.SOLAR.!=0),:R_ID] - - # DC Resources - inputs_gen["VS_DC"] = union(vre_stor_in[vre_stor_in.STOR_DC_DISCHARGE.>=1,:R_ID], vre_stor_in[vre_stor_in.STOR_DC_CHARGE.>=1,:R_ID], vre_stor_in[vre_stor_in.SOLAR.!=0,:R_ID]) - - # Wind Resources - inputs_gen["VS_WIND"] = vre_stor_in[(vre_stor_in.WIND.!=0),:R_ID] - - # Storage Resources - split_storage_resources!(vre_stor_in, inputs_gen, setup) - - # Set of all VRE-STOR resources eligible for new solar capacity - inputs_gen["NEW_CAP_SOLAR"] = intersect(buildable, vre_stor_in[vre_stor_in.SOLAR.!=0,:R_ID], vre_stor_in[vre_stor_in.Max_Cap_Solar_MW.!=0,:R_ID]) - # Set of all VRE_STOR resources eligible for solar capacity retirements - inputs_gen["RET_CAP_SOLAR"] = intersect(retirable, vre_stor_in[vre_stor_in.SOLAR.!=0,:R_ID], vre_stor_in[vre_stor_in.Existing_Cap_Solar_MW.>=0,:R_ID]) - # Set of all VRE-STOR resources eligible for new wind capacity - inputs_gen["NEW_CAP_WIND"] = intersect(buildable, vre_stor_in[vre_stor_in.WIND.!=0,:R_ID], vre_stor_in[vre_stor_in.Max_Cap_Wind_MW.!=0,:R_ID]) - # Set of all VRE_STOR resources eligible for wind capacity retirements - inputs_gen["RET_CAP_WIND"] = intersect(retirable, vre_stor_in[vre_stor_in.WIND.!=0,:R_ID], vre_stor_in[vre_stor_in.Existing_Cap_Wind_MW.>=0,:R_ID]) - # Set of all VRE-STOR resources eligible for new inverter capacity - inputs_gen["NEW_CAP_DC"] = intersect(buildable, vre_stor_in[vre_stor_in.Max_Cap_Inverter_MW.!=0,:R_ID], inputs_gen["VS_DC"]) - # Set of all VRE_STOR resources eligible for inverter capacity retirements - inputs_gen["RET_CAP_DC"] = intersect(retirable, vre_stor_in[vre_stor_in.Existing_Cap_Inverter_MW.>=0,:R_ID], inputs_gen["VS_DC"]) - # Set of all storage resources eligible for new energy capacity - inputs_gen["NEW_CAP_STOR"] = intersect(buildable, dfGen[dfGen.Max_Cap_MWh.!=0,:R_ID], inputs_gen["VS_STOR"]) - # Set of all storage resources eligible for energy capacity retirements - inputs_gen["RET_CAP_STOR"] = intersect(retirable, dfGen[dfGen.Existing_Cap_MWh.>=0,:R_ID], inputs_gen["VS_STOR"]) - if !isempty(inputs_gen["VS_ASYM"]) - # Set of asymmetric charge DC storage resources eligible for new charge capacity - inputs_gen["NEW_CAP_CHARGE_DC"] = intersect(buildable, vre_stor_in[vre_stor_in.Max_Cap_Charge_DC_MW.!=0,:R_ID], inputs_gen["VS_ASYM_DC_CHARGE"]) - # Set of asymmetric charge DC storage resources eligible for charge capacity retirements - inputs_gen["RET_CAP_CHARGE_DC"] = intersect(retirable, vre_stor_in[vre_stor_in.Existing_Cap_Charge_DC_MW.>=0,:R_ID], inputs_gen["VS_ASYM_DC_CHARGE"]) - # Set of asymmetric discharge DC storage resources eligible for new discharge capacity - inputs_gen["NEW_CAP_DISCHARGE_DC"] = intersect(buildable, vre_stor_in[vre_stor_in.Max_Cap_Discharge_DC_MW.!=0,:R_ID], inputs_gen["VS_ASYM_DC_DISCHARGE"]) - # Set of asymmetric discharge DC storage resources eligible for discharge capacity retirements - inputs_gen["RET_CAP_DISCHARGE_DC"] = intersect(retirable, vre_stor_in[vre_stor_in.Existing_Cap_Discharge_DC_MW.>=0,:R_ID], inputs_gen["VS_ASYM_DC_DISCHARGE"]) - # Set of asymmetric charge AC storage resources eligible for new charge capacity - inputs_gen["NEW_CAP_CHARGE_AC"] = intersect(buildable, vre_stor_in[vre_stor_in.Max_Cap_Charge_AC_MW.!=0,:R_ID], inputs_gen["VS_ASYM_AC_CHARGE"]) - # Set of asymmetric charge AC storage resources eligible for charge capacity retirements - inputs_gen["RET_CAP_CHARGE_AC"] = intersect(retirable, vre_stor_in[vre_stor_in.Existing_Cap_Charge_AC_MW.>=0,:R_ID], inputs_gen["VS_ASYM_AC_CHARGE"]) - # Set of asymmetric discharge AC storage resources eligible for new discharge capacity - inputs_gen["NEW_CAP_DISCHARGE_AC"] = intersect(buildable, vre_stor_in[vre_stor_in.Max_Cap_Discharge_AC_MW.!=0,:R_ID], inputs_gen["VS_ASYM_AC_DISCHARGE"]) - # Set of asymmetric discharge AC storage resources eligible for discharge capacity retirements - inputs_gen["RET_CAP_DISCHARGE_AC"] = intersect(retirable, vre_stor_in[vre_stor_in.Existing_Cap_Discharge_AC_MW.>=0,:R_ID], inputs_gen["VS_ASYM_AC_DISCHARGE"]) - end - - # Names for systemwide resources - inputs_gen["RESOURCES_VRE_STOR"] = collect(skipmissing(vre_stor_in[!,:Resource][1:size(inputs_gen["VRE_STOR"])[1]])) - - # Names for writing outputs - inputs_gen["RESOURCES_SOLAR"] = vre_stor_in[(vre_stor_in.SOLAR.!=0), :Resource] - inputs_gen["RESOURCES_WIND"] = vre_stor_in[(vre_stor_in.WIND.!=0), :Resource] - inputs_gen["RESOURCES_DC_DISCHARGE"] = vre_stor_in[(vre_stor_in.STOR_DC_DISCHARGE.!=0), :Resource] - inputs_gen["RESOURCES_AC_DISCHARGE"] = vre_stor_in[(vre_stor_in.STOR_AC_DISCHARGE.!=0), :Resource] - inputs_gen["RESOURCES_DC_CHARGE"] = vre_stor_in[(vre_stor_in.STOR_DC_CHARGE.!=0), :Resource] - inputs_gen["RESOURCES_AC_CHARGE"] = vre_stor_in[(vre_stor_in.STOR_AC_CHARGE.!=0), :Resource] - inputs_gen["ZONES_SOLAR"] = vre_stor_in[(vre_stor_in.SOLAR.!=0), :Zone] - inputs_gen["ZONES_WIND"] = vre_stor_in[(vre_stor_in.WIND.!=0), :Zone] - inputs_gen["ZONES_DC_DISCHARGE"] = vre_stor_in[(vre_stor_in.STOR_DC_DISCHARGE.!=0), :Zone] - inputs_gen["ZONES_AC_DISCHARGE"] = vre_stor_in[(vre_stor_in.STOR_AC_DISCHARGE.!=0), :Zone] - inputs_gen["ZONES_DC_CHARGE"] = vre_stor_in[(vre_stor_in.STOR_DC_CHARGE.!=0), :Zone] - inputs_gen["ZONES_AC_CHARGE"] = vre_stor_in[(vre_stor_in.STOR_AC_CHARGE.!=0), :Zone] - - # Scale the parameters as needed - if setup["ParameterScale"] == 1 - columns_to_scale = [: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, - :Max_Cap_Inverter_MW, - :Min_Cap_Solar_MW, - :Max_Cap_Solar_MW, - :Min_Cap_Wind_MW, - :Max_Cap_Wind_MW, - :Min_Cap_Charge_AC_MW, - :Max_Cap_Charge_AC_MW, - :Min_Cap_Charge_DC_MW, - :Max_Cap_Charge_DC_MW, - :Min_Cap_Discharge_AC_MW, - :Max_Cap_Discharge_AC_MW, - :Min_Cap_Discharge_DC_MW, - :Max_Cap_Discharge_DC_MW, - :Inv_Cost_Inverter_per_MWyr, - :Fixed_OM_Inverter_Cost_per_MWyr, - :Inv_Cost_Solar_per_MWyr, - :Fixed_OM_Solar_Cost_per_MWyr, - :Inv_Cost_Wind_per_MWyr, - :Fixed_OM_Wind_Cost_per_MWyr, - :Inv_Cost_Discharge_DC_per_MWyr, - :Fixed_OM_Cost_Discharge_DC_per_MWyr, - :Inv_Cost_Charge_DC_per_MWyr, - :Fixed_OM_Cost_Charge_DC_per_MWyr, - :Inv_Cost_Discharge_AC_per_MWyr, - :Fixed_OM_Cost_Discharge_AC_per_MWyr, - :Inv_Cost_Charge_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_DC, - :Var_OM_Cost_per_MWh_Discharge_DC, - :Var_OM_Cost_per_MWh_Charge_AC, - :Var_OM_Cost_per_MWh_Discharge_AC] - vre_stor_in[!, columns_to_scale] ./= ModelScalingFactor - - # Scale for multistage feature - if setup["MultiStage"] == 1 - columns_to_scale_multistage = [:Min_Retired_Cap_Inverter_MW, - :Min_Retired_Cap_Solar_MW, - :Min_Retired_Cap_Wind_MW, - :Min_Retired_Cap_Charge_DC_MW, - :Min_Retired_Cap_Charge_AC_MW, - :Min_Retired_Cap_Discharge_DC_MW, - :Min_Retired_Cap_Discharge_AC_MW] - vre_stor_in[!, columns_to_scale_multistage] ./= ModelScalingFactor - end - end - inputs_gen["dfVRE_STOR"] = vre_stor_in - println("Vre_and_stor_data.csv Successfully Read!") - else - inputs_gen["dfVRE_STOR"] = DataFrame() - end - summarize_errors(error_strings) -end - -function process_piecewisefuelusage!(inputs::Dict, scale_factor) - gen_in = inputs["dfGen"] - inputs["PWFU_Num_Segments"] = 0 - inputs["THERM_COMMIT_PWFU"] = Int64[] - - if any(occursin.(Ref("PWFU_"), names(gen_in))) - heat_rate_mat = extract_matrix_from_dataframe(gen_in, "PWFU_Heat_Rate_MMBTU_per_MWh") - load_point_mat = extract_matrix_from_dataframe(gen_in, "PWFU_Load_Point_MW") - - # check data input - validate_piecewisefuelusage(heat_rate_mat, load_point_mat) - - # determine if a generator contains piecewise fuel usage segment based on non-zero heatrate - gen_in.HAS_PWFU = any(heat_rate_mat .!= 0 , dims = 2)[:] - num_segments = size(heat_rate_mat)[2] - - # translate the inital fuel usage, heat rate, and load points into intercept for each segment - fuel_usage_zero_load = gen_in[!,"PWFU_Fuel_Usage_Zero_Load_MMBTU_per_h"] - # construct a matrix for intercept - intercept_mat = zeros(size(heat_rate_mat)) - # PWFU_Fuel_Usage_MMBTU_per_h is always the intercept of the first segment - intercept_mat[:,1] = fuel_usage_zero_load - - # create a function to compute intercept if we have more than one segment - function calculate_intercepts(slope, intercept_1, load_point) - m, n = size(slope) - # Initialize the intercepts matrix with zeros - intercepts = zeros(m, n) - # The first segment's intercepts should be intercept_1 vector - intercepts[:, 1] = intercept_1 - # Calculate intercepts for the other segments using the load points (i.e., intersection points) - for j in 1:n-1 - for i in 1:m - current_slope = slope[i, j+1] - previous_slope = slope[i, j] - # If the current slope is 0, then skip the calculation and return 0 - if current_slope == 0 - intercepts[i, j+1] = 0.0 - else - # y = a*x + b; => b = y - ax - # Calculate y-coordinate of the intersection - y = previous_slope * load_point[i, j] + intercepts[i, j] - # determine the new intercept - b = y - current_slope * load_point[i, j] - intercepts[i, j+1] = b - end - end - end - return intercepts - end - - if num_segments > 1 - # determine the intercept for the rest of segment if num_segments > 1 - intercept_mat = calculate_intercepts(heat_rate_mat, fuel_usage_zero_load, load_point_mat) - end - - # create a PWFU_data that contain processed intercept and slope (i.e., heat rate) - intercept_cols = [Symbol("PWFU_Intercept_", i) for i in 1:num_segments] - intercept_df = DataFrame(intercept_mat, Symbol.(intercept_cols)) - slope_cols = Symbol.(filter(colname -> startswith(string(colname),"PWFU_Heat_Rate_MMBTU_per_MWh"),names(gen_in))) - slope_df = DataFrame(heat_rate_mat, Symbol.(slope_cols)) - PWFU_data = hcat(slope_df, intercept_df) - # no need to scale sclope, but intercept should be scaled when parameterscale is on (MMBTU -> billion BTU) - PWFU_data[!, intercept_cols] ./= scale_factor - - inputs["slope_cols"] = slope_cols - inputs["intercept_cols"] = intercept_cols - inputs["PWFU_data"] = PWFU_data - inputs["PWFU_Num_Segments"] =num_segments - inputs["THERM_COMMIT_PWFU"] = intersect(gen_in[gen_in.THERM.==1,:R_ID], gen_in[gen_in.HAS_PWFU,:R_ID]) - end -end - -function validate_piecewisefuelusage(heat_rate_mat, load_point_mat) - # it's possible to construct piecewise fuel consumption with n of heat rate and n-1 of load point. - # if a user feed n of heat rate and more than n of load point, throw a error message, and then use - # n of heat rate and n-1 load point to construct the piecewise fuel usage fuction - if size(heat_rate_mat)[2] < size(load_point_mat)[2] - @error """ The numbers of heatrate data are less than load points, we found $(size(heat_rate_mat)[2]) of heat rate, - and $(size(load_point_mat)[2]) of load points. We will just use $(size(heat_rate_mat)[2]) of heat rate, and $(size(heat_rate_mat)[2]-1) - load point to create piecewise fuel usage - """ - end - - # check if values for piecewise fuel consumption make sense. Negative heat rate or load point are not allowed - if any(heat_rate_mat .< 0) | any(load_point_mat .< 0) - @error """ Neither heat rate nor load point can be negative - """ - error("Invalid inputs detected for piecewise fuel usage") - end - # for non-zero values, heat rates and load points should follow an increasing trend - if any([any(diff(filter(!=(0), row)) .< 0) for row in eachrow(heat_rate_mat)]) - @error """ Heat rates should follow an increasing trend - """ - error("Invalid inputs detected for piecewise fuel usage") - elseif any([any(diff(filter(!=(0), row)) .< 0) for row in eachrow(load_point_mat)]) - @error """load points should follow an increasing trend - """ - error("Invalid inputs detected for piecewise fuel usage") - end -end - -function deprecated_newbuild_canretire_interface(df::DataFrame)::Bool - return string(:Can_Retire) ∉ names(df) -end - -function validate_newbuild_entries(df::DataFrame) - if any(df.New_Build .== -1) - @error " -One or more resources has New_Build = -1, but the Can_Retire column is present, -indicating that the updated interface should be used. -When using the updated New_Build/Can_Retire interface, only {0, 1} are valid. -Entries which previously had New_Build = -1 -(indicating resources which cannot be built nor retired) -should be updated to New_Build = 0, Can_Retire = 0." - error("Invalid New_Build inputs in resource data.") - end -end - - -function deprecated_newbuild_canretire_interface_warning() - @warn " -The generators input file does not have a 'Can_Retire' column. -While for now, New_Build entries of {1, 0, -1} are still supported, -this format is being deprecated. -Now and going forward, New_Build and Can_Retire should be separate columns, -each with values {0, 1}. -Please see the documentation for additional details." maxlog=1 -end - -function resources_which_can_be_retired(df::DataFrame)::Set{Int64} - if deprecated_newbuild_canretire_interface(df) - retirable = df.New_Build .!= -1 - else - retirable = df.Can_Retire .== 1 - end - return Set(findall(retirable)) -end - -function resources_which_can_be_built(df::DataFrame)::Set{Int64} - buildable = df.New_Build .== 1 - return Set(findall(buildable)) -end diff --git a/src/load_inputs/load_generators_variability.jl b/src/load_inputs/load_generators_variability.jl index fc5edd472d..711f9d36cd 100644 --- a/src/load_inputs/load_generators_variability.jl +++ b/src/load_inputs/load_generators_variability.jl @@ -15,7 +15,7 @@ function load_generators_variability!(setup::Dict, path::AbstractString, inputs: filename = "Generators_variability.csv" gen_var = load_dataframe(joinpath(my_dir, filename)) - all_resources = inputs["RESOURCES"] + all_resources = inputs["RESOURCE_NAMES"] existing_variability = names(gen_var) for r in all_resources @@ -25,7 +25,7 @@ function load_generators_variability!(setup::Dict, path::AbstractString, inputs: end end - # Reorder DataFrame to R_ID order (order provided in Generators_data.csv) + # Reorder DataFrame to R_ID order select!(gen_var, [:Time_Index; Symbol.(all_resources) ]) # Maximum power output and variability of each energy resource diff --git a/src/load_inputs/load_inputs.jl b/src/load_inputs/load_inputs.jl index 86e4a70586..16b3b22c31 100644 --- a/src/load_inputs/load_inputs.jl +++ b/src/load_inputs/load_inputs.jl @@ -26,9 +26,9 @@ function load_inputs(setup::Dict,path::AbstractString) # Read temporal-resolved load data, and clustering information if relevant load_demand_data!(setup, path, inputs) # Read fuel cost data, including time-varying fuel costs - cost_fuel, CO2_fuel = load_fuels_data!(setup, path, inputs) + load_fuels_data!(setup, path, inputs) # Read in generator/resource related inputs - load_generators_data!(setup, path, inputs, cost_fuel, CO2_fuel) + load_resources_data!(inputs, setup, path) # Read in generator/resource availability profiles load_generators_variability!(setup, path, inputs) diff --git a/src/load_inputs/load_multistage_data.jl b/src/load_inputs/load_multistage_data.jl new file mode 100644 index 0000000000..8c7b22ae51 --- /dev/null +++ b/src/load_inputs/load_multistage_data.jl @@ -0,0 +1,22 @@ +function load_multistage_dataframe(filepath::AbstractString) + if !isfile(filepath) + error("Multistage data file not found at $filepath") + end + + multistage_in = load_dataframe(filepath) + + validate_multistage_data!(multistage_in) + + return multistage_in +end + +function validate_multistage_data!(multistage_df::DataFrame) + # cols that the user must provide + required_cols = ("Lifetime","Capital_Recovery_Period") + # check that all required columns are present + for col in required_cols + if col ∉ names(multistage_df) + error("Multistage data file is missing column $col") + end + end +end \ No newline at end of file diff --git a/src/load_inputs/load_reserves.jl b/src/load_inputs/load_reserves.jl index cf503bced6..19ac515f5f 100644 --- a/src/load_inputs/load_reserves.jl +++ b/src/load_inputs/load_reserves.jl @@ -7,6 +7,8 @@ function load_reserves!(setup::Dict, path::AbstractString, inputs::Dict) filename = "Reserves.csv" res_in = load_dataframe(joinpath(path, filename)) + gen = inputs["RESOURCES"] + function load_field_with_deprecated_symbol(df::DataFrame, columns::Vector{Symbol}) best = popfirst!(columns) firstrow = 1 @@ -50,11 +52,11 @@ function load_reserves!(setup::Dict, path::AbstractString, inputs::Dict) if inputs["pDynamic_Contingency"] > 0 inputs["pContingency_BigM"] = zeros(Float64, inputs["G"]) for y in inputs["COMMIT"] - inputs["pContingency_BigM"][y] = inputs["dfGen"][y,:Max_Cap_MW] + inputs["pContingency_BigM"][y] = max_cap_mw(gen[y]) # When Max_Cap_MW == -1, there is no limit on capacity size if inputs["pContingency_BigM"][y] < 0 # NOTE: this effectively acts as a maximum cluster size when not otherwise specified, adjust accordingly - inputs["pContingency_BigM"][y] = 5000*inputs["dfGen"][y,:Cap_Size] + inputs["pContingency_BigM"][y] = 5000 * cap_size(gen[y]) end end end diff --git a/src/load_inputs/load_resources_data.jl b/src/load_inputs/load_resources_data.jl new file mode 100644 index 0000000000..e8dd30229e --- /dev/null +++ b/src/load_inputs/load_resources_data.jl @@ -0,0 +1,1133 @@ +""" + _get_resource_info() + +Internal function to get resource information (filename and GenX type) for each type of resource available in GenX. + +# + resource_info (NamedTuple): A tuple containing resource information. + +""" +function _get_resource_info() + resource_info = ( + hydro = (filename="Hydro.csv", type=Hydro), + thermal = (filename="Thermal.csv", type=Thermal), + vre = (filename="Vre.csv", type=Vre), + storage = (filename="Storage.csv", type=Storage), + flex_demand = (filename="Flex_demand.csv", type=FlexDemand), + must_run = (filename="Must_run.csv", type=MustRun), + electrolyzer = (filename="Electrolyzer.csv", type=Electrolyzer), + vre_stor = (filename="Vre_stor.csv", type=VreStorage) + ) + return resource_info +end + +""" + _get_policyfile_info() + +Internal function to get policy file information. + +# + policyfile_info (NamedTuple): A tuple containing policy file information. + +""" +function _get_policyfile_info() + policyfile_info = ( + esr = (filename="Resource_energy_share_requirement.csv"), + cap_res = (filename="Resource_capacity_reserve_margin.csv"), + min_cap = (filename="Resource_minimum_capacity_requirement.csv"), + max_cap = (filename="Resource_maximum_capacity_requirement.csv"), + ) + return policyfile_info +end + +""" + _get_summar_map() + +Internal function to get a map of GenX resource type their corresponding names in the summary table. +""" +function _get_summary_map() + names_map = Dict{Symbol,String}( + :Electrolyzer => "Electrolyzer", + :FlexDemand => "Flexible_demand", + :Hydro => "Hydro", + :Storage => "Storage", + :Thermal => "Thermal", + :Vre => "VRE", + :MustRun => "Must_run", + :VreStorage => "VRE_and_storage", + ) + max_length = maximum(length.(values(names_map))) + for (k,v) in names_map + names_map[k] = v * repeat(" ", max_length - length(v)) + end + return names_map +end + +""" + scale_resources_data!(resource_in::DataFrame, scale_factor::Float64) + +Scales resources attributes in-place if necessary. Generally, these scalings converts energy and power units from MW to GW and \$/MW to \$M/GW. Both are done by dividing the values by 1000. +See documentation for descriptions of each column being scaled. + +# Arguments +- `resource_in` (DataFrame): A dataframe containing data for a specific resource. +- `scale_factor` (Float64): A scaling factor for energy and currency units. + +""" +function scale_resources_data!(resource_in::DataFrame, scale_factor::Float64) + columns_to_scale = [:existing_charge_cap_mw, # to GW + :existing_cap_mwh, # to GWh + :existing_cap_mw, # to GW + + :cap_size, # to GW + + :min_cap_mw, # to GW + :min_cap_mwh, # to GWh + :min_charge_cap_mw, # to GWh + + :max_cap_mw, # to GW + :max_cap_mwh, # to GWh + :max_charge_cap_mw, # to GW + + :inv_cost_per_mwyr, # to $M/GW/yr + :inv_cost_per_mwhyr, # to $M/GWh/yr + :inv_cost_charge_per_mwyr, # to $M/GW/yr + + :fixed_om_cost_per_mwyr, # to $M/GW/yr + :fixed_om_cost_per_mwhyr, # to $M/GWh/yr + :fixed_om_cost_charge_per_mwyr, # to $M/GW/yr + + :var_om_cost_per_mwh, # to $M/GWh + :var_om_cost_per_mwh_in, # to $M/GWh + + :reg_cost, # to $M/GW + :rsv_cost, # to $M/GW + + :min_retired_cap_mw, # to GW + :min_retired_charge_cap_mw, # to GW + :min_retired_energy_cap_mw, # to GW + + :start_cost_per_mw, # to $M/GW + + :ccs_disposal_cost_per_metric_ton, + + :hydrogen_mwh_per_tonne # to GWh/t + ] + + scale_columns!(resource_in, columns_to_scale, scale_factor) + return nothing +end + +""" + scale_vre_stor_data!(vre_stor_in::DataFrame, scale_factor::Float64) + +Scales vre_stor attributes in-place if necessary. Generally, these scalings converts energy and power units from MW to GW and \$/MW to \$M/GW. Both are done by dividing the values by 1000. +See documentation for descriptions of each column being scaled. + +# Arguments +- `vre_stor_in` (DataFrame): A dataframe containing data for co-located VREs and storage. +- `scale_factor` (Float64): A scaling factor for energy and currency units. + +""" +function scale_vre_stor_data!(vre_stor_in::DataFrame, scale_factor::Float64) + columns_to_scale = [: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, + :max_cap_inverter_mw, + :min_cap_solar_mw, + :max_cap_solar_mw, + :min_cap_wind_mw, + :max_cap_wind_mw, + :min_cap_charge_ac_mw, + :max_cap_charge_ac_mw, + :min_cap_charge_dc_mw, + :max_cap_charge_dc_mw, + :min_cap_discharge_ac_mw, + :max_cap_discharge_ac_mw, + :min_cap_discharge_dc_mw, + :max_cap_discharge_dc_mw, + :inv_cost_inverter_per_mwyr, + :fixed_om_inverter_cost_per_mwyr, + :inv_cost_solar_per_mwyr, + :fixed_om_solar_cost_per_mwyr, + :inv_cost_wind_per_mwyr, + :fixed_om_wind_cost_per_mwyr, + :inv_cost_discharge_dc_per_mwyr, + :fixed_om_cost_discharge_dc_per_mwyr, + :inv_cost_charge_dc_per_mwyr, + :fixed_om_cost_charge_dc_per_mwyr, + :inv_cost_discharge_ac_per_mwyr, + :fixed_om_cost_discharge_ac_per_mwyr, + :inv_cost_charge_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_dc, + :var_om_cost_per_mwh_discharge_dc, + :var_om_cost_per_mwh_charge_ac, + :var_om_cost_per_mwh_discharge_ac, + :min_retired_cap_inverter_mw, + :min_retired_cap_solar_mw, + :min_retired_cap_wind_mw, + :min_retired_cap_charge_dc_mw, + :min_retired_cap_charge_ac_mw, + :min_retired_cap_discharge_dc_mw, + :min_retired_cap_discharge_ac_mw] + scale_columns!(vre_stor_in, columns_to_scale, scale_factor) + return nothing +end + +""" + scale_columns!(df::DataFrame, columns_to_scale::Vector{Symbol}, scale_factor::Float64) + +Scales in-place the columns in `columns_to_scale` of a dataframe `df` by a `scale_factor`. + +# Arguments +- `df` (DataFrame): A dataframe containing data to scale. +- `columns_to_scale` (Vector{Symbol}): A vector of column names to scale. +- `scale_factor` (Float64): A scaling factor for energy and currency units. + +""" +function scale_columns!(df::DataFrame, columns_to_scale::Vector{Symbol}, scale_factor::Float64) + for column in columns_to_scale + if string(column) in names(df) + df[!, column] /= scale_factor + end + end + return nothing +end + +""" + load_resource_df(path::AbstractString, scale_factor::Float64, resource_type::Type) + +Function to load and scale the dataframe of a given resource. + +# Arguments +- `path::AbstractString`: Path to the resource dataframe. +- `scale_factor::Float64`: Scaling factor for the resource data. +- `resource_type::Type`: GenX type of the resource. + +# Returns +- `resource_in::DataFrame`: The loaded and scaled resource data. + +""" +function load_resource_df(path::AbstractString, scale_factor::Float64, resource_type::Type) + resource_in = load_dataframe(path) + # rename columns lowercase for internal consistency + rename!(resource_in, lowercase.(names(resource_in))) + scale_resources_data!(resource_in, scale_factor) + # scale vre_stor columns if necessary + resource_type == VreStorage && scale_vre_stor_data!(resource_in, scale_factor) + return resource_in +end + +""" + compute_resource_indices(resources_in::DataFrame, offset::Int64) + +Computes the indices for the resources loaded from a single dataframe by shifting the indices by an offset value. + +# Arguments +- `resources_in::DataFrame`: The input DataFrame containing the resources. +- `offset::Int64`: The offset value to be added to the indices. + +# Returns +- `UnitRange{Int64}`: An array of indices. + +""" +function compute_resource_indices(resources_in::DataFrame, offset::Int64) + range = (1,nrow(resources_in)) .+ offset + return UnitRange{Int64}(range...) +end + +""" + add_id_to_resource_df!(df::DataFrame, indices::AbstractVector) + +Adds a new column 'id' to the DataFrame with the provided resource indices. The dataframe is modified in-place. + +# Arguments +- `df::DataFrame`: The input DataFrame to which the indices are to be added. +- `indices::AbstractVector`: The array of indices to be added as a new column. +""" +function add_id_to_resource_df!(df::DataFrame, indices::AbstractVector) + df[!, :id] = indices + return nothing +end + +""" + dataframerow_to_dict(dfr::DataFrameRow) + +Converts a DataFrameRow to a Dict. + +# Arguments +- `dfr::DataFrameRow`: The DataFrameRow to be converted. + +# Returns +- `Dict`: Dictionary containing the DataFrameRow data. +""" +function dataframerow_to_dict(dfr::DataFrameRow) + return Dict(pairs(dfr)) +end + +""" + create_resources_sametype(resource_in::DataFrame, ResourceType) + +This function takes a DataFrame `resource_in` and a GenX `ResourceType` type, and converts the DataFrame to an array of AbstractResource of the specified type. + +# Arguments +- `resource_in::DataFrame`: The input DataFrame containing the resources belonging to a specific type. +- `ResourceType`: The GenX type of resources to be converted to. + +# Returns +- `resources::Vector{ResourceType}`: An array of resources of the specified type. +""" +function create_resources_sametype(resource_in::DataFrame, ResourceType) + # convert dataframe to array of resources of correct type + resources::Vector{ResourceType} = ResourceType.(dataframerow_to_dict.(eachrow(resource_in))) + return resources +end + +""" + create_resource_array(resource_folder::AbstractString, resources_info::NamedTuple, scale_factor::Float64=1.0) + +Construct the array of resources from multiple files of different types located in the specified `resource_folder`. The `resources_info` NamedTuple contains the filename and GenX type for each type of resource available in GenX. + +# Arguments +- `resource_folder::AbstractString`: The path to the folder containing the resource files. +- `resources_info::NamedTuple`: A NamedTuple that maps a resource type to its filename and GenX type. +- `scale_factor::Float64`: A scaling factor to adjust the attributes of the resources (default: 1.0). + +# Returns +- `Vector{AbstractResource}`: An array of GenX resources. + +# Raises +- `Error`: If no resources data is found. Check the data path or the configuration file "genx_settings.yml" inside Settings. + +""" +function create_resource_array(resource_folder::AbstractString, resources_info::NamedTuple, scale_factor::Float64=1.0) + resource_id_offset = 0 + resources = [] + # loop over available types and load all resources in resource_folder + for (filename, resource_type) in values(resources_info) + df_path = joinpath(resource_folder, filename) + # if file exists, load resources of a single resource_type + if isfile(df_path) + resource_in = load_resource_df(df_path, scale_factor, resource_type) + # compute indices for resources of a given type and add them to dataframe + resources_indices = compute_resource_indices(resource_in, resource_id_offset) + add_id_to_resource_df!(resource_in, resources_indices) + resources_same_type = create_resources_sametype(resource_in, resource_type) + push!(resources, resources_same_type) + # update id offset for next type of resources + resource_id_offset += length(resources_same_type) + @info filename * " Successfully Read." + end + end + isempty(resources) && error("No resources data found. Check data path or configuration file \"genx_settings.yml\" inside Settings.") + return reduce(vcat, resources) +end + +@doc raw""" + check_mustrun_reserve_contribution(r::AbstractResource) + +Make sure that a MUST_RUN resource has Reg_Max and Rsv_Max set to 0 (since they cannot contribute to reserves). +""" +function check_mustrun_reserve_contribution(r::AbstractResource) + applicable_resources = MustRun + error_strings = String[] + + if !isa(r, applicable_resources) + # not MUST_RUN so the rest is not applicable + return error_strings + end + + reg_max_r = reg_max(r) + if reg_max_r != 0 + e = string("Resource ", resource_name(r), " is of MUST_RUN type but :Reg_Max = ", reg_max_r, ".\n", + "MUST_RUN units must have Reg_Max = 0 since they cannot contribute to reserves.") + push!(error_strings, e) + end + + rsv_max_r = rsv_max(r) + if rsv_max_r != 0 + e = string("Resource ", resource_name(r), " is of MUST_RUN type but :Rsv_Max = ", rsv_max_r, ".\n", + "MUST_RUN units must have Rsv_Max = 0 since they cannot contribute to reserves.") + push!(error_strings, e) + end + return error_strings +end + +function check_LDS_applicability(r::AbstractResource) + applicable_resources = Union{Storage, Hydro} + error_strings = String[] + + not_set = default_zero + lds_value = get(r, :lds, not_set) + + # LDS is available only for Hydro and Storage + if !isa(r, applicable_resources) && lds_value > 0 + e = string("Resource ", resource_name(r), " has :lds = ", lds_value, ".\n", + "This setting is valid only for resources where the type is one of $applicable_resources.") + push!(error_strings, e) + end + return error_strings +end + +function check_maintenance_applicability(r::AbstractResource) + applicable_resources = Thermal + + not_set = default_zero + maint_value = get(r, :maint, not_set) + + error_strings = String[] + + if maint_value == not_set + # not MAINT so the rest is not applicable + return error_strings + end + + # MAINT is available only for Thermal + if !isa(r, applicable_resources) && maint_value > 0 + e = string("Resource ", resource_name(r), " has :maint = ", maint_value, ".\n", + "This setting is valid only for resources where the type is one of $applicable_resources.") + push!(error_strings, e) + end + if get(r, :model, not_set) == 2 + e = string("Resource ", resource_name(r), " has :maint = ", maint_value, ".\n", + "This is valid only for resources with unit commitment (:model = 1);\n", + "this has :model = 2.") + push!(error_strings, e) + end + return error_strings +end + +function check_resource(r::AbstractResource)::Vector{String} + e = String[] + e = [e; check_LDS_applicability(r)] + e = [e; check_maintenance_applicability(r)] + e = [e; check_mustrun_reserve_contribution(r)] + return e +end + +@doc raw""" +check_resource(resources::T)::Vector{String} where T <: Vector{AbstractResource} + +Validate the consistency of a vector of GenX resources +Reports any errors in a list of strings. +""" +function check_resource(resources::T)::Vector{String} where T <: Vector{AbstractResource} + e = String[] + for r in resources + e = [e; check_resource(r)] + end + return e +end + +function announce_errors_and_halt(e::Vector{String}) + error_count = length(e) + for error_message in e + @error(error_message) + end + s = string(error_count, " problems were detected with the input data. Halting.") + error(s) +end + +function validate_resources(resources::T) where T <: Vector{AbstractResource} + e = check_resource(resources) + if length(e) > 0 + announce_errors_and_halt(e) + end +end + +""" + create_resources(setup::Dict, case_path::AbstractString) + +Function that loads and scales resources data from folder specified in `setup["ResourcePath"] and returns an array of GenX resources. + +# Arguments +- `setup (Dict)`: Dictionary containing GenX settings. +- `case_path (AbstractString)`: The path to the case. + +# Returns +- `resources (Vector{AbstractResource})`: An array of scaled resources. + +""" +function create_resource_array(setup::Dict, case_path::AbstractString) + scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1.0 + + resources_folder = setup["ResourcePath"] + resources_folder = joinpath(case_path,resources_folder) + + # get filename and GenX type for each type of resources available in GenX + resources_info = _get_resource_info() + + # load each resource type, scale data and return array of resources + resources = create_resource_array(resources_folder, resources_info, scale_factor) + # validate input before returning resources + validate_resources(resources) + return resources +end + +""" + validate_policy_dataframe!(filename::AbstractString, policy_in::DataFrame) + +Validate the policy dataframe by checking if it has any attributes and if the column names are valid. The dataframe is modified in-place. + +# Arguments +- `filename::AbstractString`: The name of the policy file. +- `policy_in::DataFrame`: The policy dataframe. +""" +function validate_policy_dataframe!(filename::AbstractString, policy_in::DataFrame) + cols = names(policy_in) + n_cols = length(cols) + # check if policy file has any attributes + if n_cols == 1 + msg = "No policy attributes found in policy file: " * filename + error(msg) + end + # if the single column attribute does not have a tag number, add a tag number of 1 + if n_cols == 2 && cols[2][end-1:end] != "_1" + rename!(policy_in, Symbol.(cols[2]) => Symbol.(cols[2], "_1")) + end + # get policy column names + cols = lowercase.(names(policy_in)) + filter!(col -> col ≠ "resource",cols) + + accepted_cols = ["derating_factor", "esr", "esr_vrestor", + [string(cap, type) for cap in ["min_cap", "max_cap"] for type in ("", "_stor", "_solar", "_wind")]...] + + # Check that all policy columns have names in accepted_cols + if !all(x -> replace(x, r"(_*|_*\d*)$" => "") in accepted_cols, cols) + msg = "The accepted policy columns are: " * join(accepted_cols, ", ") + msg *= "\nCheck policy file: " * filename + error(msg) + end + # Check that all policy columns have names with format "[policy_name]_[tagnum]" + if !all(any([occursin(Regex("$(y)")*r"_\d", col) for y in accepted_cols]) for col in cols) + msg = "Columns in policy file $filename must have names with format \"[policy_name]_[tagnum]\", case insensitive. (e.g., ESR_1, Min_Cap_1, Max_Cap_2, etc.)." + error(msg) + end + return nothing +end + +""" + add_attributes_to_resource!(resource::AbstractResource, new_symbols::Vector{Symbol}, new_values::T) where T <: DataFrameRow + +Adds a set of new attributes (names and corresponding values) to a resource if their values are different from zero. The resource is modified in-place. + +# Arguments +- `resource::AbstractResource`: The resource to add attributes to. +- `new_symbols::Vector{Symbol}`: Vector of symbols containing the names of the new attributes. +- `new_values::DataFrameRow`: DataFrameRow containing the values of the new attributes. + +""" +function add_attributes_to_resource!(resource::AbstractResource, new_symbols::Vector{Symbol}, new_values::T) where T <: DataFrameRow + # loop over new attributes + for (sym, value) in zip(new_symbols, new_values) + # add attribute to resource if value is not zero + value ≠ 0 && setproperty!(resource, sym, value) + end + return nothing +end + +""" + add_df_to_resources!(resources::Vector{<:AbstractResource}, module_in::DataFrame) + +Adds the data contained in a `DataFrame` to a vector of resources. Each row in the `DataFrame` corresponds to a resource. If the name of the resource in the `DataFrame` matches a name of a resource in the model, all the columns of that DataFrameRow are added as new attributes to the corresponding resource. + +# Arguments +- `resources::Vector{<:AbstractResource}`: A vector of resources. +- `module_in::DataFrame`: The dataframe to add. +""" +function add_df_to_resources!(resources::Vector{<:AbstractResource}, module_in::DataFrame) + # rename columns lowercase to ensure consistency with resources + rename!(module_in, lowercase.(names(module_in))) + # extract columns of module. They will be added as new attributes to resources + new_sym = Symbol.(filter(x -> x ≠ "resource", names(module_in))) + # loop oper rows of module and add new attributes to resources + for row in eachrow(module_in) + resource_name = row[:resource] + resource = resource_by_name(resources, resource_name) + new_values = row[new_sym] + add_attributes_to_resource!(resource, new_sym, new_values) + end + return nothing +end + +""" + add_policy_to_resources!(resources::Vector{<:AbstractResource}, path::AbstractString, filename::AbstractString) + +Loads a single policy file and adds the columns as new attributes to resources in the model if the resource name in the policy file matches a resource name in the model. The policy file is assumed to have a column named "resource" containing the resource names. + +# Arguments +- `resources::Vector{<:AbstractResource}`: A vector of resources. +- `path::AbstractString`: The path to the policy file. +- `filename::AbstractString`: The name of the policy file. +""" +function add_policy_to_resources!(resources::Vector{<:AbstractResource}, path::AbstractString, filename::AbstractString) + policy_in = load_dataframe(path) + # check if policy file has any attributes, validate column names + validate_policy_dataframe!(filename, policy_in) + # add policy columns to resources as new attributes + add_df_to_resources!(resources, policy_in) + return nothing +end + +""" + add_policies_to_resources!(resources::Vector{<:AbstractResource}, setup::Dict, case_path::AbstractString) + +Reads policy files and adds policies-related attributes to resources in the model. + +# Arguments +- `resources::Vector{<:AbstractResource}`: Vector of resources in the model. +- `setup (Dict)`: Dictionary containing GenX settings. +- `case_path::AbstractString`: The path to the case. +""" +function add_policies_to_resources!(resources::Vector{<:AbstractResource}, setup::Dict, case_path::AbstractString) + policy_folder = setup["ResourcePath"] + policy_folder = joinpath(case_path, policy_folder) + # get filename for each type of policy available in GenX + policies_info = _get_policyfile_info() + # loop over policy files + for filename in values(policies_info) + path = joinpath(policy_folder, filename) + # if file exists, add policy to resources + if isfile(path) + add_policy_to_resources!(resources, path, filename) + @info filename * " Successfully Read." + end + end + return nothing +end + +""" + add_module_to_resources!(resources::Vector{<:AbstractResource}, module_in::DataFrame) + +Reads module dataframe and adds columns as new attributes to the resources in the model if the resource name in the module file matches a resource name in the model. The module file is assumed to have a column named "resource" containing the resource names. + +# Arguments +- `resources::Vector{<:AbstractResource}`: A vector of resources. +- `module_in::DataFrame`: The dataframe with the columns to add to the resources. +""" +function add_module_to_resources!(resources::Vector{<:AbstractResource}, module_in::DataFrame) + # add module columns to resources as new attributes + add_df_to_resources!(resources, module_in) + return nothing +end + +""" + add_modules_to_resources!(resources::Vector{<:AbstractResource}, setup::Dict, case_path::AbstractString) + +Reads module dataframes, loops over files and adds columns as new attributes to the resources in the model. + +# Arguments +- `resources::Vector{<:AbstractResource}`: A vector of resources. +- `setup (Dict)`: A dictionary containing GenX settings. +- `case_path::AbstractString`: The path to the case. +""" +function add_modules_to_resources!(resources::Vector{<:AbstractResource}, setup::Dict, case_path::AbstractString) + modules = Vector{DataFrame}() + + module_folder = setup["ResourcePath"] + module_folder = joinpath(case_path, module_folder) + + ## Load all modules and add them to the list of modules to be added to resources + # Add multistage if multistage is activated + if setup["MultiStage"] == 1 + filename = joinpath(module_folder, "Resource_multistage_data.csv") + multistage_in = load_multistage_dataframe(filename) + push!(modules, multistage_in) + @info "Multistage data successfully read." + end + + ## Loop over modules and add attributes to resources + add_module_to_resources!.(Ref(resources), modules) + + return nothing +end + +function validate_piecewisefuelusage(heat_rate_mat, load_point_mat) + # it's possible to construct piecewise fuel consumption with n of heat rate and n-1 of load point. + # if a user feed n of heat rate and more than n of load point, throw a error message, and then use + # n of heat rate and n-1 load point to construct the piecewise fuel usage fuction + if size(heat_rate_mat)[2] < size(load_point_mat)[2] + @error """ The numbers of heatrate data are less than load points, we found $(size(heat_rate_mat)[2]) of heat rate, + and $(size(load_point_mat)[2]) of load points. We will just use $(size(heat_rate_mat)[2]) of heat rate, and $(size(heat_rate_mat)[2]-1) + load point to create piecewise fuel usage + """ + end + + # check if values for piecewise fuel consumption make sense. Negative heat rate or load point are not allowed + if any(heat_rate_mat .< 0) | any(load_point_mat .< 0) + @error """ Neither heat rate nor load point can be negative + """ + error("Invalid inputs detected for piecewise fuel usage") + end + # for non-zero values, heat rates and load points should follow an increasing trend + if any([any(diff(filter(!=(0), row)) .< 0) for row in eachrow(heat_rate_mat)]) + @error """ Heat rates should follow an increasing trend + """ + error("Invalid inputs detected for piecewise fuel usage") + elseif any([any(diff(filter(!=(0), row)) .< 0) for row in eachrow(load_point_mat)]) + @error """load points should follow an increasing trend + """ + error("Invalid inputs detected for piecewise fuel usage") + end +end + +""" + process_piecewisefuelusage!(setup::Dict, case_path::AbstractString, gen::Vector{<:AbstractResource}, inputs::Dict) + +Reads piecewise fuel usage data from the vector of generators, create a PWFU_data that contain processed intercept and slope (i.e., heat rate) and add them to the inputs dictionary. + +# Arguments +- `setup::Dict`: The dictionary containing the setup parameters +- `case_path::AbstractString`: The path to the case folder +- `gen::Vector{<:AbstractResource}`: The vector of generators in the model +- `inputs::Dict`: The dictionary containing the input data +""" +function process_piecewisefuelusage!(setup::Dict, gen::Vector{<:AbstractResource}, inputs::Dict) + inputs["PWFU_Num_Segments"] = 0 + inputs["THERM_COMMIT_PWFU"] = Int64[] + + if any(haskey.(gen, :pwfu_fuel_usage_zero_load_mmbtu_per_h)) + + thermal_gen = gen.Thermal + has_pwfu = haskey.(thermal_gen, :pwfu_fuel_usage_zero_load_mmbtu_per_h) + @assert all(has_pwfu) "Piecewise fuel usage data is not consistent across thermal generators" + + heat_rate_mat_therm = extract_matrix_from_resources(thermal_gen, "pwfu_heat_rate_mmbtu_per_mwh") + load_point_mat_therm = extract_matrix_from_resources(thermal_gen, "pwfu_load_point_mw") + + num_segments = size(heat_rate_mat_therm)[2] + + # create a matrix to store the heat rate and load point for each generator in the model + heat_rate_mat = zeros(length(gen), num_segments) + load_point_mat = zeros(length(gen), num_segments) + THERM = thermal(gen) + heat_rate_mat[THERM, :] = heat_rate_mat_therm + load_point_mat[THERM, :] = load_point_mat_therm + + # check data input + validate_piecewisefuelusage(heat_rate_mat, load_point_mat) + + # determine if a generator contains piecewise fuel usage segment based on non-zero heatrate + nonzero_rows = any(heat_rate_mat .!= 0 , dims = 2)[:] + HAS_PWFU = resource_id.(gen[nonzero_rows]) + + # translate the inital fuel usage, heat rate, and load points into intercept for each segment + fuel_usage_zero_load = zeros(length(gen)) + fuel_usage_zero_load[THERM] = pwfu_fuel_usage_zero_load_mmbtu_per_h.(thermal_gen) + # construct a matrix for intercept + intercept_mat = zeros(size(heat_rate_mat)) + # PWFU_Fuel_Usage_MMBTU_per_h is always the intercept of the first segment + intercept_mat[:,1] = fuel_usage_zero_load + + # create a function to compute intercept if we have more than one segment + function calculate_intercepts(slope, intercept_1, load_point) + m, n = size(slope) + # Initialize the intercepts matrix with zeros + intercepts = zeros(m, n) + # The first segment's intercepts should be intercept_1 vector + intercepts[:, 1] = intercept_1 + # Calculate intercepts for the other segments using the load points (i.e., intersection points) + for j in 1:n-1 + for i in 1:m + current_slope = slope[i, j+1] + previous_slope = slope[i, j] + # If the current slope is 0, then skip the calculation and return 0 + if current_slope == 0 + intercepts[i, j+1] = 0.0 + else + # y = a*x + b; => b = y - ax + # Calculate y-coordinate of the intersection + y = previous_slope * load_point[i, j] + intercepts[i, j] + # determine the new intercept + b = y - current_slope * load_point[i, j] + intercepts[i, j+1] = b + end + end + end + return intercepts + end + + if num_segments > 1 + # determine the intercept for the rest of segment if num_segments > 1 + intercept_mat = calculate_intercepts(heat_rate_mat, fuel_usage_zero_load, load_point_mat) + end + + # create a PWFU_data that contain processed intercept and slope (i.e., heat rate) + intercept_cols = [Symbol("pwfu_intercept_", i) for i in 1:num_segments] + intercept_df = DataFrame(intercept_mat, Symbol.(intercept_cols)) + slope_cols = Symbol.(filter(colname -> startswith(string(colname),"pwfu_heat_rate_mmbtu_per_mwh"), collect(attributes(thermal_gen[1])))) + sort!(slope_cols, by = x -> parse(Int, split(string(x), "_")[end])) + slope_df = DataFrame(heat_rate_mat, Symbol.(slope_cols)) + PWFU_data = hcat(slope_df, intercept_df) + # no need to scale sclope, but intercept should be scaled when parameterscale is on (MMBTU -> billion BTU) + scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 + PWFU_data[!, intercept_cols] ./= scale_factor + + inputs["slope_cols"] = slope_cols + inputs["intercept_cols"] = intercept_cols + inputs["PWFU_data"] = PWFU_data + inputs["PWFU_Num_Segments"] = num_segments + inputs["THERM_COMMIT_PWFU"] = intersect(ids_with_unit_commitment(gen), resource_id.(gen[HAS_PWFU])) + + @info "Piecewise fuel usage data successfully read!" + end + return nothing +end + +@doc raw""" + split_storage_resources!(inputs::Dict, gen::Vector{<:AbstractResource}) + +For co-located VRE-storage resources, this function returns the storage type + (1. long-duration or short-duration storage, 2. symmetric or asymmetric storage) + for charging and discharging capacities +""" +function split_storage_resources!(inputs::Dict, gen::Vector{<:AbstractResource}) + + # All Storage Resources + inputs["VS_STOR"] = union(storage_dc_charge(gen), storage_dc_discharge(gen), + storage_ac_charge(gen), storage_ac_discharge(gen)) + + STOR = inputs["VS_STOR"] + + # Storage DC Discharge Resources + inputs["VS_STOR_DC_DISCHARGE"] = storage_dc_discharge(gen) + inputs["VS_SYM_DC_DISCHARGE"] = storage_sym_dc_discharge(gen) + inputs["VS_ASYM_DC_DISCHARGE"] = storage_asym_dc_discharge(gen) + + # Storage DC Charge Resources + inputs["VS_STOR_DC_CHARGE"] = storage_dc_charge(gen) + inputs["VS_SYM_DC_CHARGE"] = storage_sym_dc_charge(gen) + inputs["VS_ASYM_DC_CHARGE"] = storage_asym_dc_charge(gen) + + # Storage AC Discharge Resources + inputs["VS_STOR_AC_DISCHARGE"] = storage_ac_discharge(gen) + inputs["VS_SYM_AC_DISCHARGE"] = storage_sym_ac_discharge(gen) + inputs["VS_ASYM_AC_DISCHARGE"] = storage_asym_ac_discharge(gen) + + # Storage AC Charge Resources + inputs["VS_STOR_AC_CHARGE"] = storage_ac_charge(gen) + inputs["VS_SYM_AC_CHARGE"] = storage_sym_ac_charge(gen) + inputs["VS_ASYM_AC_CHARGE"] = storage_asym_ac_charge(gen) + + # Storage LDS & Non-LDS Resources + inputs["VS_LDS"] = is_LDS_VRE_STOR(gen) + inputs["VS_nonLDS"] = setdiff(STOR, inputs["VS_LDS"]) + + # Symmetric and asymmetric storage resources + inputs["VS_ASYM"] = union(inputs["VS_ASYM_DC_CHARGE"], inputs["VS_ASYM_DC_DISCHARGE"], + inputs["VS_ASYM_AC_DISCHARGE"], inputs["VS_ASYM_AC_CHARGE"]) + inputs["VS_SYM_DC"] = intersect(inputs["VS_SYM_DC_CHARGE"], inputs["VS_SYM_DC_DISCHARGE"]) + inputs["VS_SYM_AC"] = intersect(inputs["VS_SYM_AC_CHARGE"], inputs["VS_SYM_AC_DISCHARGE"]) + + # Send warnings for symmetric/asymmetric resources + if (!isempty(setdiff(inputs["VS_SYM_DC_DISCHARGE"], inputs["VS_SYM_DC_CHARGE"])) + || !isempty(setdiff(inputs["VS_SYM_DC_CHARGE"], inputs["VS_SYM_DC_DISCHARGE"])) + || !isempty(setdiff(inputs["VS_SYM_AC_DISCHARGE"], inputs["VS_SYM_AC_CHARGE"])) + || !isempty(setdiff(inputs["VS_SYM_AC_CHARGE"], inputs["VS_SYM_AC_DISCHARGE"]))) + @warn("Symmetric capacities must both be DC or AC.") + end + + # Send warnings for battery resources discharging + if !isempty(intersect(inputs["VS_STOR_DC_DISCHARGE"], inputs["VS_STOR_AC_DISCHARGE"])) + @warn("Both AC and DC discharging functionalities are turned on.") + end + + # Send warnings for battery resources charging + if !isempty(intersect(inputs["VS_STOR_DC_CHARGE"], inputs["VS_STOR_AC_CHARGE"])) + @warn("Both AC and DC charging functionalities are turned on.") + end +end + +""" + add_resources_to_input_data!(inputs::Dict, setup::Dict, case_path::AbstractString, gen::Vector{<:AbstractResource}) + +Adds resources to the `inputs` `Dict` with the key "RESOURCES" together with sevaral sets of resource indices that are used inside GenX to construct the optimization problem. The `inputs` `Dict` is modified in-place. + +# Arguments +- `inputs (Dict)`: Dictionary to store the GenX input data. +- `setup (Dict)`: Dictionary containing GenX settings. +- `case_path (AbstractString)`: Path to the case. +- `gen (Vector{<:AbstractResource})`: Array of GenX resources. + +""" +function add_resources_to_input_data!(inputs::Dict, setup::Dict, case_path::AbstractString, gen::Vector{<:AbstractResource}) + + # Number of resources + G = length(gen) + inputs["G"] = G + + # Number of time steps (periods) + T = inputs["T"] + + ## HYDRO + # Set of all reservoir hydro resources + inputs["HYDRO_RES"] = hydro(gen) + # Set of hydro resources modeled with known reservoir energy capacity + if !isempty(inputs["HYDRO_RES"]) + inputs["HYDRO_RES_KNOWN_CAP"] = intersect(inputs["HYDRO_RES"], ids_with(gen, hydro_energy_to_power_ratio)) + end + + ## STORAGE + # Set of storage resources with symmetric charge/discharge capacity + inputs["STOR_SYMMETRIC"] = symmetric_storage(gen) + # Set of storage resources with asymmetric (separte) charge/discharge capacity components + inputs["STOR_ASYMMETRIC"] = asymmetric_storage(gen) + # Set of all storage resources + inputs["STOR_ALL"] = union(inputs["STOR_SYMMETRIC"],inputs["STOR_ASYMMETRIC"]) + + # Set of storage resources with long duration storage capabilitites + inputs["STOR_HYDRO_LONG_DURATION"] = intersect(inputs["HYDRO_RES"], is_LDS(gen)) + inputs["STOR_HYDRO_SHORT_DURATION"] = intersect(inputs["HYDRO_RES"], is_SDS(gen)) + inputs["STOR_LONG_DURATION"] = intersect(inputs["STOR_ALL"], is_LDS(gen)) + inputs["STOR_SHORT_DURATION"] = intersect(inputs["STOR_ALL"], is_SDS(gen)) + + ## VRE + # Set of controllable variable renewable resources + inputs["VRE"] = vre(gen) + + ## FLEX + # Set of flexible demand-side resources + inputs["FLEX"] = flex_demand(gen) + + ## TODO: MUST_RUN + # Set of must-run plants - could be behind-the-meter PV, hydro run-of-river, must-run fossil or thermal plants + inputs["MUST_RUN"] = must_run(gen) + + ## ELECTROLYZER + # Set of hydrogen electolyzer resources: + inputs["ELECTROLYZER"] = electrolyzer(gen) + + ## Retrofit + inputs["RETRO"] = ids_with_retrofit(gen) + # Disable Retrofit while it's under development + if !(isempty(inputs["RETRO"])) + error("The Retrofits feature, which is activated by nonzero data in a 'RETRO' column in any of the resource .csv files, is under development and is not ready for public use. Disable this message to enable this *experimental* feature.") + end + + ## Reserves + if setup["Reserves"] >= 1 + # Set for resources with regulation reserve requirements + inputs["REG"] = ids_with_regulation_reserve_requirements(gen) + # Set for resources with spinning reserve requirements + inputs["RSV"] = ids_with_spinning_reserve_requirements(gen) + end + + ## THERM + # Set of all thermal resources + inputs["THERM_ALL"] = thermal(gen) + # Unit commitment + if setup["UCommit"] >= 1 + # Set of thermal resources with unit commitment + inputs["THERM_COMMIT"] = ids_with_unit_commitment(gen) + # Set of thermal resources without unit commitment + inputs["THERM_NO_COMMIT"] = no_unit_commitment(gen) + # Start-up cost is sum of fixed cost per start startup + inputs["C_Start"] = zeros(Float64, G, T) + for g in inputs["THERM_COMMIT"] + start_up_cost = start_cost_per_mw(gen[g]) * cap_size(gen[g]) + inputs["C_Start"][g,:] .= start_up_cost + end + # Piecewise fuel usage option + process_piecewisefuelusage!(setup, gen, inputs) + else + # Set of thermal resources with unit commitment + inputs["THERM_COMMIT"] = [] + # Set of thermal resources without unit commitment + inputs["THERM_NO_COMMIT"] = inputs["THERM_ALL"] + end + # For now, the only resources eligible for UC are themal resources + inputs["COMMIT"] = inputs["THERM_COMMIT"] + + buildable = is_buildable(gen) + retirable = is_retirable(gen) + + # Set of all resources eligible for new capacity + inputs["NEW_CAP"] = intersect(buildable, ids_with(gen, max_cap_mw)) + # Set of all resources eligible for capacity retirements + inputs["RET_CAP"] = intersect(retirable, ids_with_nonneg(gen, existing_cap_mw)) + + new_cap_energy = Set{Int64}() + ret_cap_energy = Set{Int64}() + if !isempty(inputs["STOR_ALL"]) + # Set of all storage resources eligible for new energy capacity + new_cap_energy = intersect(buildable, ids_with(gen, max_cap_mwh), inputs["STOR_ALL"]) + # Set of all storage resources eligible for energy capacity retirements + ret_cap_energy = intersect(retirable, ids_with_nonneg(gen, existing_cap_mwh), inputs["STOR_ALL"]) + end + inputs["NEW_CAP_ENERGY"] = new_cap_energy + inputs["RET_CAP_ENERGY"] = ret_cap_energy + + new_cap_charge = Set{Int64}() + ret_cap_charge = Set{Int64}() + if !isempty(inputs["STOR_ASYMMETRIC"]) + # Set of asymmetric charge/discharge storage resources eligible for new charge capacity + new_cap_charge = intersect(buildable, ids_with(gen, max_charge_cap_mw), inputs["STOR_ASYMMETRIC"]) + # Set of asymmetric charge/discharge storage resources eligible for charge capacity retirements + ret_cap_charge = intersect(buildable, ids_with_nonneg(gen, existing_charge_cap_mw), inputs["STOR_ASYMMETRIC"]) + end + inputs["NEW_CAP_CHARGE"] = new_cap_charge + inputs["RET_CAP_CHARGE"] = ret_cap_charge + + ## Co-located resources + # VRE and storage + inputs["VRE_STOR"] = vre_stor(gen) + # Check if VRE-STOR resources exist + if !isempty(inputs["VRE_STOR"]) + # Solar PV Resources + inputs["VS_SOLAR"] = solar(gen) + + # DC Resources + inputs["VS_DC"] = union(storage_dc_discharge(gen), storage_dc_charge(gen), solar(gen)) + + # Wind Resources + inputs["VS_WIND"] = wind(gen) + + # Storage Resources + split_storage_resources!(inputs, gen) + + gen_VRE_STOR = gen.VreStorage + # Set of all VRE-STOR resources eligible for new solar capacity + inputs["NEW_CAP_SOLAR"] = intersect(buildable, solar(gen), ids_with(gen_VRE_STOR, max_cap_solar_mw)) + # Set of all VRE_STOR resources eligible for solar capacity retirements + inputs["RET_CAP_SOLAR"] = intersect(retirable, solar(gen), ids_with_nonneg(gen_VRE_STOR, existing_cap_solar_mw)) + # Set of all VRE-STOR resources eligible for new wind capacity + inputs["NEW_CAP_WIND"] = intersect(buildable, wind(gen), ids_with(gen_VRE_STOR, max_cap_wind_mw)) + # Set of all VRE_STOR resources eligible for wind capacity retirements + inputs["RET_CAP_WIND"] = intersect(retirable, wind(gen), ids_with_nonneg(gen_VRE_STOR, existing_cap_wind_mw)) + # Set of all VRE-STOR resources eligible for new inverter capacity + inputs["NEW_CAP_DC"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_inverter_mw), inputs["VS_DC"]) + # Set of all VRE_STOR resources eligible for inverter capacity retirements + inputs["RET_CAP_DC"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_inverter_mw), inputs["VS_DC"]) + # Set of all storage resources eligible for new energy capacity + inputs["NEW_CAP_STOR"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_mwh), inputs["VS_STOR"]) + # Set of all storage resources eligible for energy capacity retirements + inputs["RET_CAP_STOR"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_mwh), inputs["VS_STOR"]) + if !isempty(inputs["VS_ASYM"]) + # Set of asymmetric charge DC storage resources eligible for new charge capacity + inputs["NEW_CAP_CHARGE_DC"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_charge_dc_mw), inputs["VS_ASYM_DC_CHARGE"]) + # Set of asymmetric charge DC storage resources eligible for charge capacity retirements + inputs["RET_CAP_CHARGE_DC"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_charge_dc_mw), inputs["VS_ASYM_DC_CHARGE"]) + # Set of asymmetric discharge DC storage resources eligible for new discharge capacity + inputs["NEW_CAP_DISCHARGE_DC"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_discharge_dc_mw), inputs["VS_ASYM_DC_DISCHARGE"]) + # Set of asymmetric discharge DC storage resources eligible for discharge capacity retirements + inputs["RET_CAP_DISCHARGE_DC"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_discharge_dc_mw), inputs["VS_ASYM_DC_DISCHARGE"]) + # Set of asymmetric charge AC storage resources eligible for new charge capacity + inputs["NEW_CAP_CHARGE_AC"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_charge_ac_mw), inputs["VS_ASYM_AC_CHARGE"]) + # Set of asymmetric charge AC storage resources eligible for charge capacity retirements + inputs["RET_CAP_CHARGE_AC"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_charge_ac_mw), inputs["VS_ASYM_AC_CHARGE"]) + # Set of asymmetric discharge AC storage resources eligible for new discharge capacity + inputs["NEW_CAP_DISCHARGE_AC"] = intersect(buildable, ids_with(gen_VRE_STOR, max_cap_discharge_ac_mw), inputs["VS_ASYM_AC_DISCHARGE"]) + # Set of asymmetric discharge AC storage resources eligible for discharge capacity retirements + inputs["RET_CAP_DISCHARGE_AC"] = intersect(retirable, ids_with_nonneg(gen_VRE_STOR, existing_cap_discharge_ac_mw), inputs["VS_ASYM_AC_DISCHARGE"]) + end + + # Names for systemwide resources + inputs["RESOURCE_NAMES_VRE_STOR"] = resource_name(gen_VRE_STOR) + + # Names for writing outputs + inputs["RESOURCE_NAMES_SOLAR"] = resource_name(gen[inputs["VS_SOLAR"]]) + inputs["RESOURCE_NAMES_WIND"] = resource_name(gen[inputs["VS_WIND"]]) + inputs["RESOURCE_NAMES_DC_DISCHARGE"] = resource_name(gen[storage_dc_discharge(gen)]) + inputs["RESOURCE_NAMES_AC_DISCHARGE"] = resource_name(gen[storage_ac_discharge(gen)]) + inputs["RESOURCE_NAMES_DC_CHARGE"] = resource_name(gen[storage_dc_charge(gen)]) + inputs["RESOURCE_NAMES_AC_CHARGE"] = resource_name(gen[storage_ac_charge(gen)]) + + inputs["ZONES_SOLAR"] = zone_id(gen[inputs["VS_SOLAR"]]) + inputs["ZONES_WIND"] = zone_id(gen[inputs["VS_WIND"]]) + inputs["ZONES_DC_DISCHARGE"] = zone_id(gen[storage_dc_discharge(gen)]) + inputs["ZONES_AC_DISCHARGE"] = zone_id(gen[storage_ac_discharge(gen)]) + inputs["ZONES_DC_CHARGE"] = zone_id(gen[storage_dc_charge(gen)]) + inputs["ZONES_AC_CHARGE"] = zone_id(gen[storage_ac_charge(gen)]) + end + + # Names of resources + inputs["RESOURCE_NAMES"] = resource_name(gen) + + # Zones resources are located in + zones = zone_id(gen) + + # Resource identifiers by zone (just zones in resource order + resource and zone concatenated) + inputs["R_ZONES"] = zones + inputs["RESOURCE_ZONES"] = inputs["RESOURCE_NAMES"] .* "_z" .* string.(zones) + + # Fuel + inputs["HAS_FUEL"] = ids_with_fuel(gen) + + inputs["RESOURCES"] = gen + return nothing +end + +""" + summary(rs::Vector{<:AbstractResource}) + +Prints a summary of the resources loaded into the model. + +# Arguments +- `rs (Vector{<:AbstractResource})`: An array of GenX resources. +""" +function summary(rs::Vector{<:AbstractResource}) + rs_summary_names = _get_summary_map() + line_width = 55 + println("\nSummary of resources loaded into the model:") + println(repeat("-", line_width)) + println("\tResource type \t\tNumber of resources") + println(repeat("=", line_width)) + for r_type ∈ resource_types + num_rs = length(rs[nameof.(typeof.(rs)) .== r_type]) + if num_rs > 0 + r_type ∉ keys(rs_summary_names) && error("Resource type $r_type not found in summary map. Please add it to the map.") + println("\t", rs_summary_names[r_type], "\t\t", num_rs) + end + end + println(repeat("=", line_width)) + println("Total number of resources: ", length(rs)) + println(repeat("-", line_width)) + return nothing +end + +""" + load_resources_data!(inputs::Dict, setup::Dict, case_path::AbstractString) + +This function loads resources data from the `setup["ResourcePath"]` folder and create the GenX data structures and add them to the `inputs` `Dict`. + +# Arguments +- `inputs (Dict)`: A dictionary to store the input data. +- `setup (Dict)`: A dictionary containing GenX settings. +- `case_path (AbstractString)`: The path to the case. + +Raises: + DeprecationWarning: If the `Generators_data.csv` file is found, a deprecation warning is issued, together with an error message. +""" +function load_resources_data!(inputs::Dict, setup::Dict, case_path::AbstractString) + if isfile(joinpath(case_path, "Generators_data.csv")) + msg = "The `Generators_data.csv` file was deprecated in release v0.4. " * + "Please use the new interface for generators creation, and see the documentation for additional details." + Base.depwarn(msg, :load_resources_data!, force=true) + error("Exiting GenX...") + else + # create vector of resources from dataframes + resources = create_resource_array(setup, case_path) + + # read policy files and add policies-related attributes to resource dataframe + add_policies_to_resources!(resources, setup, case_path) + + # read module files add module-related attributes to resource dataframe + add_modules_to_resources!(resources, setup, case_path) + + # add resources information to inputs dict + add_resources_to_input_data!(inputs, setup, case_path, resources) + + # print summary of resources + summary(resources) + + return nothing + end +end diff --git a/src/load_inputs/load_vre_stor_variability.jl b/src/load_inputs/load_vre_stor_variability.jl index 7a0144e833..d0f364c365 100644 --- a/src/load_inputs/load_vre_stor_variability.jl +++ b/src/load_inputs/load_vre_stor_variability.jl @@ -20,7 +20,7 @@ function load_vre_stor_variability!(setup::Dict, path::AbstractString, inputs::D filename2 = "Vre_and_stor_wind_variability.csv" vre_stor_wind = load_dataframe(joinpath(my_dir, filename2)) - all_resources = inputs["RESOURCES"] + all_resources = inputs["RESOURCE_NAMES"] function ensure_column_zeros!(vre_stor_df, all_resources) existing_variability = names(vre_stor_df) diff --git a/src/model/core/co2.jl b/src/model/core/co2.jl index 3d4e14edf0..a037a83568 100644 --- a/src/model/core/co2.jl +++ b/src/model/core/co2.jl @@ -13,7 +13,7 @@ fraction, and whether the feedstock is biomass. Biomass is a factor in this equa biomass generators are assumed to generate zero net CO2 emissions, or negative net CO2 emissions in the case that the CO2 they emit is captured and sequestered underground. -If a user wishes to represent a generator that combusts biomass, then in Generators_data.csv, +If a user wishes to represent a generator that combusts biomass, then in the resource .csv files, the "Biomass" column (boolean, 1 or 0), which represents if a generator $y$ uses biomass or not, should be set to 1. The CO2 emissions from such a generator will be assumed to be zero without CCS and negative with CCS. @@ -54,29 +54,30 @@ function co2!(EP::Model, inputs::Dict) println("CO2 Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones fuel_CO2 = inputs["fuel_CO2"] # CO2 content of fuel (t CO2/MMBTU or ktCO2/Billion BTU) + ### Expressions ### - # CO2 emissions from power plants in "Generators_data.csv" - # If all the CO2 capture fractions from Generators_data are zeros, the CO2 emissions from thermal generators are determined by fuel consumption times CO2 content per MMBTU - if all(dfGen.CO2_Capture_Fraction .==0) + # CO2 emissions from power plants in "Thermal.csv" + # If all the CO2 capture fractions from Thermal.csv are zeros, the CO2 emissions from thermal generators are determined by fuel consumption times CO2 content per MMBTU + if all(co2_capture_fraction.(gen) .==0) @expression(EP, eEmissionsByPlant[y=1:G, t=1:T], - ((1-dfGen[y, :Biomass]) *(EP[:vFuel][y, t] + EP[:eStartFuel][y, t]) * fuel_CO2[dfGen[y,:Fuel]])) + ((1-biomass(gen[y])) *(EP[:vFuel][y, t] + EP[:eStartFuel][y, t]) * fuel_CO2[fuel(gen[y])])) else @info "Using the CO2 module to determine the CO2 emissions of CCS-equipped plants" # CO2_Capture_Fraction refers to the CO2 capture rate of CCS equiped power plants at a steady state # CO2_Capture_Fraction_Startup refers to the CO2 capture rate of CCS equiped power plants during startup events @expression(EP, eEmissionsByPlant[y=1:G, t=1:T], - (1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction]) * EP[:vFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]+ - (1-dfGen[y, :Biomass] - dfGen[y, :CO2_Capture_Fraction_Startup]) * EP[:eStartFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]) + (1-biomass(gen[y]) - co2_capture_fraction(gen[y])) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ + (1-biomass(gen[y]) - co2_capture_fraction_startup(gen[y])) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])]) - # CO2 captured from power plants in "Generators_data.csv" + # CO2 captured from power plants in "Thermal.csv" @expression(EP, eEmissionsCaptureByPlant[y=1:G, t=1:T], - dfGen[y, :CO2_Capture_Fraction] * EP[:vFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]+ - dfGen[y, :CO2_Capture_Fraction_Startup] * EP[:eStartFuel][y, t] * fuel_CO2[dfGen[y,:Fuel]]) + co2_capture_fraction(gen[y]) * EP[:vFuel][y, t] * fuel_CO2[fuel(gen[y])]+ + co2_capture_fraction_startup(gen[y]) * EP[:eStartFuel][y, t] * fuel_CO2[fuel(gen[y])]) @expression(EP, eEmissionsCaptureByPlantYear[y=1:G], sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t] @@ -85,11 +86,10 @@ function co2!(EP::Model, inputs::Dict) # when scale factor is on tCO2/MWh = > kt CO2/GWh @expression(EP, ePlantCCO2Sequestration[y=1:G], sum(inputs["omega"][t] * eEmissionsCaptureByPlant[y, t] * - dfGen[y, :CCS_Disposal_Cost_per_Metric_Ton] for t in 1:T)) + ccs_disposal_cost_per_metric_ton(gen[y]) for t in 1:T)) @expression(EP, eZonalCCO2Sequestration[z=1:Z], - sum(ePlantCCO2Sequestration[y] - for y in dfGen[(dfGen[!, :Zone].==z), :R_ID])) + sum(ePlantCCO2Sequestration[y] for y in resources_in_zone_by_rid(gen,z))) @expression(EP, eTotaleCCO2Sequestration, sum(eZonalCCO2Sequestration[z] for z in 1:Z)) @@ -99,7 +99,7 @@ function co2!(EP::Model, inputs::Dict) # emissions by zone @expression(EP, eEmissionsByZone[z = 1:Z, t = 1:T], - sum(eEmissionsByPlant[y, t] for y in dfGen[(dfGen[!, :Zone].==z), :R_ID])) + sum(eEmissionsByPlant[y, t] for y in resources_in_zone_by_rid(gen,z))) return EP end diff --git a/src/model/core/discharge/discharge.jl b/src/model/core/discharge/discharge.jl index 977ea4f04c..953eeecc04 100644 --- a/src/model/core/discharge/discharge.jl +++ b/src/model/core/discharge/discharge.jl @@ -13,11 +13,11 @@ function discharge!(EP::Model, inputs::Dict, setup::Dict) println("Discharge Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps - Z = inputs["Z"] # Number of zones + ### Variables ### # Energy injected into the grid by resource "y" at hour "t" @@ -28,7 +28,7 @@ function discharge!(EP::Model, inputs::Dict, setup::Dict) ## Objective Function Expressions ## # Variable costs of "generation" for resource "y" during hour "t" = variable O&M - @expression(EP, eCVar_out[y=1:G,t=1:T], (inputs["omega"][t]*(dfGen[y,:Var_OM_Cost_per_MWh]*vP[y,t]))) + @expression(EP, eCVar_out[y=1:G,t=1:T], (inputs["omega"][t]*(var_om_cost_per_mwh(gen[y])*vP[y,t]))) # Sum individual resource contributions to variable discharging costs to get total variable discharging costs @expression(EP, eTotalCVarOutT[t=1:T], sum(eCVar_out[y,t] for y in 1:G)) @expression(EP, eTotalCVarOut, sum(eTotalCVarOutT[t] for t in 1:T)) @@ -40,7 +40,7 @@ function discharge!(EP::Model, inputs::Dict, setup::Dict) if setup["EnergyShareRequirement"] >= 1 @expression(EP, eESRDischarge[ESR=1:inputs["nESR"]], - + sum(inputs["omega"][t]*dfGen[y,Symbol("ESR_$ESR")]*EP[:vP][y,t] for y=dfGen[findall(x->x>0,dfGen[!,Symbol("ESR_$ESR")]),:R_ID], t=1:T) + + sum(inputs["omega"][t] * esr(gen[y],tag=ESR) * EP[:vP][y,t] for y=ids_with_policy(gen, esr, tag=ESR), t=1:T) - sum(inputs["dfESR"][z,ESR]*inputs["omega"][t]*inputs["pD"][t,z] for t=1:T, z=findall(x->x>0,inputs["dfESR"][:,ESR])) ) add_similar_to_expression!(EP[:eESR], eESRDischarge) diff --git a/src/model/core/discharge/investment_discharge.jl b/src/model/core/discharge/investment_discharge.jl index 9302774677..728877f6c2 100644 --- a/src/model/core/discharge/investment_discharge.jl +++ b/src/model/core/discharge/investment_discharge.jl @@ -37,7 +37,7 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) println("Investment Discharge Module") MultiStage = setup["MultiStage"] - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) @@ -71,7 +71,7 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) if !isempty(RETRO) # Dependent iterators only allowed in forward sequence, so we reconstruct retrofit destinations from sources. ALL_SOURCES = intersect(collect(Set(collect(Iterators.flatten(RETRO_SOURCE_IDS)))),RET_CAP) - DESTS_BY_SOURCE = [ y in ALL_SOURCES ? intersect(findall(x->in(inputs["RESOURCES"][y],RETRO_SOURCES[x]), 1:G), findall(x->x in NEW_CAP, 1:G)) : [] for y in 1:G] + DESTS_BY_SOURCE = [ y in ALL_SOURCES ? intersect(findall(x->in(inputs["RESOURCE_NAMES"][y],RETRO_SOURCES[x]), 1:G), findall(x->x in NEW_CAP, 1:G)) : [] for y in 1:G] @variable(EP, vRETROFIT[yr in ALL_SOURCES, r in DESTS_BY_SOURCE[yr]] >= 0); # Capacity retrofitted from source technology y to retrofit technology r end @@ -80,7 +80,7 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCap[y in 1:G], vEXISTINGCAP[y]) else - @expression(EP, eExistingCap[y in 1:G], dfGen[y,:Existing_Cap_MW]) + @expression(EP, eExistingCap[y in 1:G], existing_cap_mw(gen[y])) end # Cap_Size is set to 1 for all variables when unit UCommit == 0 @@ -88,19 +88,19 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) @expression(EP, eTotalCap[y in 1:G], if y in intersect(NEW_CAP, RET_CAP) # Resources eligible for new capacity and retirements if y in COMMIT - eExistingCap[y] + dfGen[y,:Cap_Size]*(EP[:vCAP][y] - EP[:vRETCAP][y]) + eExistingCap[y] + cap_size(gen[y])*(EP[:vCAP][y] - EP[:vRETCAP][y]) else eExistingCap[y] + EP[:vCAP][y] - EP[:vRETCAP][y] end elseif y in setdiff(NEW_CAP, RET_CAP) # Resources eligible for only new capacity if y in COMMIT - eExistingCap[y] + dfGen[y,:Cap_Size]*EP[:vCAP][y] + eExistingCap[y] + cap_size(gen[y])*EP[:vCAP][y] else eExistingCap[y] + EP[:vCAP][y] end elseif y in setdiff(RET_CAP, NEW_CAP) # Resources eligible for only capacity retirements if y in COMMIT - eExistingCap[y] - dfGen[y,:Cap_Size]*EP[:vRETCAP][y] + eExistingCap[y] - cap_size(gen[y])*EP[:vRETCAP][y] else eExistingCap[y] - EP[:vRETCAP][y] end @@ -116,18 +116,18 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) @expression(EP, eCFix[y in 1:G], if y in setdiff(NEW_CAP, RETRO) # Resources eligible for new capacity (Non-Retrofit) if y in COMMIT - dfGen[y,:Inv_Cost_per_MWyr]*dfGen[y,:Cap_Size]*vCAP[y] + dfGen[y,:Fixed_OM_Cost_per_MWyr]*eTotalCap[y] + inv_cost_per_mwyr(gen[y])*cap_size(gen[y])*vCAP[y] + fixed_om_cost_per_mwyr(gen[y])*eTotalCap[y] else - dfGen[y,:Inv_Cost_per_MWyr]*vCAP[y] + dfGen[y,:Fixed_OM_Cost_per_MWyr]*eTotalCap[y] + inv_cost_per_mwyr(gen[y])*vCAP[y] + fixed_om_cost_per_mwyr(gen[y])*eTotalCap[y] end elseif y in intersect(NEW_CAP, RETRO) # Resources eligible for new capacity (Retrofit yr -> y) if y in COMMIT - sum( RETRO_SOURCE_IDS[y][i] in RET_CAP ? RETRO_INV_CAP_COSTS[y][i]*dfGen[y,:Cap_Size]*vRETROFIT[RETRO_SOURCE_IDS[y][i],y]*RETRO_EFFICIENCY[y][i] : 0 for i in 1:NUM_RETRO_SOURCES[y]) + dfGen[y,:Fixed_OM_Cost_per_MWyr]*eTotalCap[y] + sum( RETRO_SOURCE_IDS[y][i] in RET_CAP ? RETRO_INV_CAP_COSTS[y][i]*cap_size(gen[y])*vRETROFIT[RETRO_SOURCE_IDS[y][i],y]*RETRO_EFFICIENCY[y][i] : 0 for i in 1:NUM_RETRO_SOURCES[y]) + fixed_om_cost_per_mwyr(gen[y])*eTotalCap[y] else - sum( RETRO_SOURCE_IDS[y][i] in RET_CAP ? RETRO_INV_CAP_COSTS[y][i]*vRETROFIT[RETRO_SOURCE_IDS[y][i],y]*RETRO_EFFICIENCY[y][i] : 0 for i in 1:NUM_RETRO_SOURCES[y]) + dfGen[y,:Fixed_OM_Cost_per_MWyr]*eTotalCap[y] + sum( RETRO_SOURCE_IDS[y][i] in RET_CAP ? RETRO_INV_CAP_COSTS[y][i]*vRETROFIT[RETRO_SOURCE_IDS[y][i],y]*RETRO_EFFICIENCY[y][i] : 0 for i in 1:NUM_RETRO_SOURCES[y]) + fixed_om_cost_per_mwyr(gen[y])*eTotalCap[y] end else - dfGen[y,:Fixed_OM_Cost_per_MWyr]*eTotalCap[y] + fixed_om_cost_per_mwyr(gen[y])*eTotalCap[y] end ) @@ -148,32 +148,32 @@ function investment_discharge!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 # Existing capacity variable is equal to existing capacity specified in the input file - @constraint(EP, cExistingCap[y in 1:G], EP[:vEXISTINGCAP][y] == dfGen[y,:Existing_Cap_MW]) + @constraint(EP, cExistingCap[y in 1:G], EP[:vEXISTINGCAP][y] == existing_cap_mw(gen[y])) end ## Constraints on retirements and capacity additions # Cannot retire more capacity than existing capacity @constraint(EP, cMaxRetNoCommit[y in setdiff(RET_CAP,COMMIT)], vRETCAP[y] <= eExistingCap[y]) - @constraint(EP, cMaxRetCommit[y in intersect(RET_CAP,COMMIT)], dfGen[y,:Cap_Size]*vRETCAP[y] <= eExistingCap[y]) + @constraint(EP, cMaxRetCommit[y in intersect(RET_CAP,COMMIT)], cap_size(gen[y])*vRETCAP[y] <= eExistingCap[y]) ## Constraints on new built capacity # Constraint on maximum capacity (if applicable) [set input to -1 if no constraint on maximum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is >= Max_Cap_MW and lead to infeasabilty - @constraint(EP, cMaxCap[y in intersect(dfGen[dfGen.Max_Cap_MW.>0, :R_ID], 1:G)], eTotalCap[y] <= dfGen[y, :Max_Cap_MW]) + MAX_CAP = ids_with_positive(gen, max_cap_mw) + @constraint(EP, cMaxCap[y in MAX_CAP], eTotalCap[y] <= max_cap_mw(gen[y])) # Constraint on minimum capacity (if applicable) [set input to -1 if no constraint on minimum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is <= Min_Cap_MW and lead to infeasabilty - @constraint(EP, cMinCap[y in intersect(dfGen[dfGen.Min_Cap_MW.>0, :R_ID], 1:G)], eTotalCap[y] >= dfGen[y, :Min_Cap_MW]) - - + MIN_CAP = ids_with_positive(gen, min_cap_mw) + @constraint(EP, cMinCap[y in MIN_CAP], eTotalCap[y] >= min_cap_mw(gen[y])) if setup["MinCapReq"] == 1 - @expression(EP, eMinCapResInvest[mincap = 1:inputs["NumberOfMinCapReqs"]], sum(EP[:eTotalCap][y] for y in dfGen[dfGen[!, Symbol("MinCapTag_$mincap")] .== 1, :R_ID])) + @expression(EP, eMinCapResInvest[mincap = 1:inputs["NumberOfMinCapReqs"]], sum(EP[:eTotalCap][y] for y in ids_with_policy(gen, min_cap, tag=mincap))) add_similar_to_expression!(EP[:eMinCapRes], eMinCapResInvest) end if setup["MaxCapReq"] == 1 - @expression(EP, eMaxCapResInvest[maxcap = 1:inputs["NumberOfMaxCapReqs"]], sum(EP[:eTotalCap][y] for y in dfGen[dfGen[!, Symbol("MaxCapTag_$maxcap")] .== 1, :R_ID])) + @expression(EP, eMaxCapResInvest[maxcap = 1:inputs["NumberOfMaxCapReqs"]], sum(EP[:eTotalCap][y] for y in ids_with_policy(gen, max_cap, tag=maxcap))) add_similar_to_expression!(EP[:eMaxCapRes], eMaxCapResInvest) end end diff --git a/src/model/core/fuel.jl b/src/model/core/fuel.jl index edb424c260..268e6a85e5 100644 --- a/src/model/core/fuel.jl +++ b/src/model/core/fuel.jl @@ -33,7 +33,7 @@ vFuel_{y,t} >= vP_{y,t} * h_{y,x} + U_{g,t}* f_{y,x} Where $h_{y,x}$ represents the heat rate slope for generator $y$ in segment $x$ [MMBTU/MWh], $f_{y,x}$ represents the heat rate intercept (MMBTU) for a generator $y$ in segment $x$ [MMBTU], and $U_{y,t}$ represents the commitment status of a generator $y$ at time $t$. These parameters -are optional inputs to "Generators_data.csv". +are optional inputs to the resource .csv files. When Unit commitment is on, if a user provides slope and intercept, the standard heat rate (i.e., Heat_Rate_MMBTU_per_MWh) will not be used. When unit commitment is off, the model will always use the standard heat rate. @@ -54,7 +54,8 @@ PWFU_Intercept_* for at least one segment. function fuel!(EP::Model, inputs::Dict, setup::Dict) println("Fuel Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones G = inputs["G"] @@ -63,7 +64,6 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) fuels = inputs["fuels"] NUM_FUEL = length(fuels) - # create variable for fuel consumption for output @variable(EP, vFuel[y in 1:G, t = 1:T] >= 0) @@ -72,8 +72,8 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) # if unit commitment is modelled @expression(EP, eStartFuel[y in 1:G, t = 1:T], if y in THERM_COMMIT - (dfGen[y,:Cap_Size] * EP[:vSTART][y, t] * - dfGen[y,:Start_Fuel_MMBTU_per_MW]) + (cap_size(gen[y]) * EP[:vSTART][y, t] * + start_fuel_mmbtu_per_mw(gen[y])) else 0 end) @@ -83,23 +83,23 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) # eCFuel_start or eCFuel_out is $ or Million$ # Start up fuel cost @expression(EP, eCFuelStart[y = 1:G, t = 1:T], - (inputs["fuel_costs"][dfGen[y,:Fuel]][t] * EP[:eStartFuel][y, t])) + (inputs["fuel_costs"][fuel(gen[y])][t] * EP[:eStartFuel][y, t])) # plant level start-up fuel cost for output @expression(EP, ePlantCFuelStart[y = 1:G], sum(inputs["omega"][t] * EP[:eCFuelStart][y, t] for t in 1:T)) # zonal level total fuel cost for output @expression(EP, eZonalCFuelStart[z = 1:Z], - sum(EP[:ePlantCFuelStart][y] for y in dfGen[dfGen[!, :Zone].==z, :R_ID])) + sum(EP[:ePlantCFuelStart][y] for y in resources_in_zone_by_rid(gen,z))) # Fuel cost for power generation @expression(EP, eCFuelOut[y = 1:G, t = 1:T], - (inputs["fuel_costs"][dfGen[y,:Fuel]][t] * EP[:vFuel][y, t])) + (inputs["fuel_costs"][fuel(gen[y])][t] * EP[:vFuel][y, t])) # plant level start-up fuel cost for output @expression(EP, ePlantCFuelOut[y = 1:G], sum(inputs["omega"][t] * EP[:eCFuelOut][y, t] for t in 1:T)) # zonal level total fuel cost for output @expression(EP, eZonalCFuelOut[z = 1:Z], - sum(EP[:ePlantCFuelOut][y] for y in dfGen[dfGen[!, :Zone].==z, :R_ID])) + sum(EP[:ePlantCFuelOut][y] for y in resources_in_zone_by_rid(gen,z))) # system level total fuel cost for output @@ -112,7 +112,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) #fuel consumption (MMBTU or Billion BTU) @expression(EP, eFuelConsumption[f in 1:NUM_FUEL, t in 1:T], sum(EP[:vFuel][y, t] + EP[:eStartFuel][y,t] - for y in resources_with_fuel(dfGen, fuels[f]))) + for y in resources_with_fuel(gen, fuels[f]))) @expression(EP, eFuelConsumptionYear[f in 1:NUM_FUEL], sum(inputs["omega"][t] * EP[:eFuelConsumption][f, t] for t in 1:T)) @@ -121,7 +121,7 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) ### Constraint ### ### only apply constraint to generators with fuel type other than None @constraint(EP, FuelCalculation[y in setdiff(HAS_FUEL, THERM_COMMIT), t = 1:T], - EP[:vFuel][y, t] - EP[:vP][y, t] * dfGen[y, :Heat_Rate_MMBTU_per_MWh] == 0) + EP[:vFuel][y, t] - EP[:vP][y, t] * heat_rate_mmbtu_per_mwh(gen[y]) == 0) if !isempty(THERM_COMMIT) # Only apply piecewise fuel consumption to thermal generators in THERM_COMMIT_PWFU set @@ -141,14 +141,15 @@ function fuel!(EP::Model, inputs::Dict, setup::Dict) end # constraint for fuel consumption at a constant heat rate @constraint(EP, FuelCalculationCommit[y in setdiff(THERM_COMMIT,THERM_COMMIT_PWFU), t = 1:T], - EP[:vFuel][y, t] - EP[:vP][y, t] * dfGen[y, :Heat_Rate_MMBTU_per_MWh] == 0) + EP[:vFuel][y, t] - EP[:vP][y, t] * heat_rate_mmbtu_per_mwh(gen[y]) == 0) end return EP end -function resources_with_fuel(df::DataFrame, fuel::AbstractString) - return df[df[!, :Fuel] .== fuel, :R_ID] +function resources_with_fuel(rs::Vector{AbstractResource}, fuel_name::AbstractString) + condition::BitVector = fuel.(rs) .== fuel_name + return resource_id.(rs[condition]) end diff --git a/src/model/core/reserves.jl b/src/model/core/reserves.jl index a850ff05e5..e3601acec5 100644 --- a/src/model/core/reserves.jl +++ b/src/model/core/reserves.jl @@ -71,7 +71,7 @@ function reserves_contingency!(EP::Model, inputs::Dict, setup::Dict) println("Reserves Contingency Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) UCommit = setup["UCommit"] @@ -116,8 +116,7 @@ function reserves_contingency!(EP::Model, inputs::Dict, setup::Dict) # Dynamic contingency related constraints # option 1: ensures vLARGEST_CONTINGENCY is greater than the capacity of the largest installed generator if UCommit == 1 && pDynamic_Contingency == 1 - @constraint(EP, cContingency[y in COMMIT], vLARGEST_CONTINGENCY >= - inputs["dfGen"][y,:Cap_Size]*vCONTINGENCY_AUX[y] ) + @constraint(EP, cContingency[y in COMMIT], vLARGEST_CONTINGENCY >= cap_size(gen[y])*vCONTINGENCY_AUX[y] ) # Ensure vCONTINGENCY_AUX = 0 if total capacity = 0 @constraint(EP, cContAux1[y in COMMIT], vCONTINGENCY_AUX[y] <= EP[:eTotalCap][y]) # Ensure vCONTINGENCY_AUX = 1 if total capacity > 0 @@ -125,8 +124,7 @@ function reserves_contingency!(EP::Model, inputs::Dict, setup::Dict) # option 2: ensures vLARGEST_CONTINGENCY is greater than the capacity of the largest commited generator in each hour elseif UCommit == 1 && pDynamic_Contingency == 2 - @constraint(EP, cContingency[y in COMMIT, t=1:T], vLARGEST_CONTINGENCY[t] >= - inputs["dfGen"][y,:Cap_Size]*vCONTINGENCY_AUX[y,t] ) + @constraint(EP, cContingency[y in COMMIT, t=1:T], vLARGEST_CONTINGENCY[t] >= cap_size(gen[y])*vCONTINGENCY_AUX[y,t] ) # Ensure vCONTINGENCY_AUX = 0 if vCOMMIT = 0 @constraint(EP, cContAux[y in COMMIT, t=1:T], vCONTINGENCY_AUX[y,t] <= EP[:vCOMMIT][y,t]) # Ensure vCONTINGENCY_AUX = 1 if vCOMMIT > 0 @@ -209,11 +207,10 @@ function reserves_core!(EP::Model, inputs::Dict, setup::Dict) println("Reserves Core Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] UCommit = setup["UCommit"] T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones REG = inputs["REG"] RSV = inputs["RSV"] @@ -263,8 +260,8 @@ function reserves_core!(EP::Model, inputs::Dict, setup::Dict) # Penalty for unmet operating reserves @expression(EP, eCRsvPen[t=1:T], inputs["omega"][t]*inputs["pC_Rsv_Penalty"]*vUNMET_RSV[t]) @expression(EP, eTotalCRsvPen, sum(eCRsvPen[t] for t=1:T) + - sum(dfGen[y,:Reg_Cost]*vRSV[y,t] for y in RSV, t=1:T) + - sum(dfGen[y,:Rsv_Cost]*vREG[y,t] for y in REG, t=1:T) ) + sum(reg_cost(gen[y])*vRSV[y,t] for y in RSV, t=1:T) + + sum(rsv_cost(gen[y])*vREG[y,t] for y in REG, t=1:T) ) add_to_expression!(EP[:eObj], eTotalCRsvPen) end diff --git a/src/model/core/ucommit.jl b/src/model/core/ucommit.jl index 7789ccf1a4..3a3f95f4bb 100644 --- a/src/model/core/ucommit.jl +++ b/src/model/core/ucommit.jl @@ -26,11 +26,7 @@ function ucommit!(EP::Model, inputs::Dict, setup::Dict) println("Unit Commitment Module") - dfGen = inputs["dfGen"] - - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones COMMIT = inputs["COMMIT"] # For not, thermal resources are the only ones eligible for Unit Committment ### Variables ### diff --git a/src/model/policies/co2_cap.jl b/src/model/policies/co2_cap.jl index c8903ae028..252cb3a7f3 100644 --- a/src/model/policies/co2_cap.jl +++ b/src/model/policies/co2_cap.jl @@ -69,11 +69,8 @@ function co2_cap!(EP::Model, inputs::Dict, setup::Dict) println("CO2 Policies Module") - dfGen = inputs["dfGen"] SEG = inputs["SEG"] # Number of lines - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones ### Variable ### # if input files are present, add CO2 cap slack variables diff --git a/src/model/resources/curtailable_variable_renewable/curtailable_variable_renewable.jl b/src/model/resources/curtailable_variable_renewable/curtailable_variable_renewable.jl index cdd43f1a33..5e624edbc0 100644 --- a/src/model/resources/curtailable_variable_renewable/curtailable_variable_renewable.jl +++ b/src/model/resources/curtailable_variable_renewable/curtailable_variable_renewable.jl @@ -14,22 +14,22 @@ Note that if ```Reserves=1``` indicating that frequency regulation and operating """ function curtailable_variable_renewable!(EP::Model, inputs::Dict, setup::Dict) ## Controllable variable renewable generators - ### Option of modeling VRE generators with multiple availability profiles and capacity limits - Num_VRE_Bins in Generators_data.csv >1 + ### Option of modeling VRE generators with multiple availability profiles and capacity limits - Num_VRE_Bins in Vre.csv >1 ## Default value of Num_VRE_Bins ==1 println("Dispatchable Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] Reserves = setup["Reserves"] CapacityReserveMargin = setup["CapacityReserveMargin"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - G = inputs["G"] # Number of generators + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) VRE = inputs["VRE"] - VRE_POWER_OUT = intersect(dfGen[dfGen.Num_VRE_Bins.>=1,:R_ID], VRE) + VRE_POWER_OUT = intersect(VRE, ids_with_positive(gen, num_vre_bins)) VRE_NO_POWER_OUT = setdiff(VRE, VRE_POWER_OUT) ### Expressions ### @@ -37,13 +37,13 @@ function curtailable_variable_renewable!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceDisp[t=1:T, z=1:Z], - sum(EP[:vP][y,t] for y in intersect(VRE, dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(VRE, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], EP[:ePowerBalanceDisp]) # Capacity Reserves Margin policy if CapacityReserveMargin > 0 - @expression(EP, eCapResMarBalanceVRE[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(dfGen[y,Symbol("CapRes_$res")] * EP[:eTotalCap][y] * inputs["pP_Max"][y,t] for y in VRE)) + @expression(EP, eCapResMarBalanceVRE[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(derating_factor(gen[y], tag=res) * EP[:eTotalCap][y] * inputs["pP_Max"][y,t] for y in VRE)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceVRE) end @@ -57,7 +57,7 @@ function curtailable_variable_renewable!(EP::Model, inputs::Dict, setup::Dict) for y in VRE_POWER_OUT # Define the set of generator indices corresponding to the different sites (or bins) of a particular VRE technology (E.g. wind or solar) in a particular zone. # For example the wind resource in a particular region could be include three types of bins corresponding to different sites with unique interconnection, hourly capacity factor and maximim available capacity limits. - VRE_BINS = intersect(dfGen[dfGen[!,:R_ID].>=y,:R_ID], dfGen[dfGen[!,:R_ID].<=y+dfGen[y,:Num_VRE_Bins]-1,:R_ID]) + VRE_BINS = intersect(resource_id.(gen[resource_id.(gen) .>= y]), resource_id.(gen[resource_id.(gen) .<= y+num_vre_bins(gen[y])-1])) # Maximum power generated per hour by renewable generators must be less than # sum of product of hourly capacity factor for each bin times its the bin installed capacity @@ -72,7 +72,7 @@ function curtailable_variable_renewable!(EP::Model, inputs::Dict, setup::Dict) end ##CO2 Polcy Module VRE Generation by zone @expression(EP, eGenerationByVRE[z=1:Z, t=1:T], # the unit is GW - sum(EP[:vP][y,t] for y in intersect(inputs["VRE"], dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(inputs["VRE"], resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:eGenerationByZone], eGenerationByVRE) @@ -102,11 +102,11 @@ The amount of frequency regulation and operating reserves procured in each time ``` """ function curtailable_variable_renewable_reserves!(EP::Model, inputs::Dict) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] VRE = inputs["VRE"] - VRE_POWER_OUT = intersect(dfGen[dfGen.Num_VRE_Bins.>=1,:R_ID], VRE) + VRE_POWER_OUT = intersect(VRE, ids_with_positive(gen, num_vre_bins)) REG = intersect(VRE_POWER_OUT, inputs["REG"]) RSV = intersect(VRE_POWER_OUT, inputs["RSV"]) @@ -115,15 +115,13 @@ function curtailable_variable_renewable_reserves!(EP::Model, inputs::Dict) vREG = EP[:vREG] vRSV = EP[:vRSV] hourly_capacity_factor(y, t) = inputs["pP_Max"][y, t] - reg_max(y) = dfGen[y, :Reg_Max] - rsv_max(y) = dfGen[y, :Rsv_Max] hourly_capacity(y, t) = hourly_capacity_factor(y, t) * eTotalCap[y] - resources_in_bin(y) = UnitRange(y, y + dfGen[y, :Num_VRE_Bins] - 1) + resources_in_bin(y) = UnitRange(y, y + num_vre_bins(gen[y]) - 1) hourly_bin_capacity(y, t) = sum(hourly_capacity(yy, t) for yy in resources_in_bin(y)) - @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= reg_max(y) * hourly_bin_capacity(y, t)) - @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= rsv_max(y) * hourly_bin_capacity(y, t)) + @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= reg_max(gen[y]) * hourly_bin_capacity(y, t)) + @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= rsv_max(gen[y]) * hourly_bin_capacity(y, t)) expr = extract_time_series_to_expression(vP, VRE_POWER_OUT) add_similar_to_expression!(expr[REG, :], -vREG[REG, :]) @@ -136,10 +134,10 @@ function curtailable_variable_renewable_reserves!(EP::Model, inputs::Dict) end function remove_reserves_for_binned_vre_resources!(EP::Model, inputs::Dict) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] VRE = inputs["VRE"] - VRE_POWER_OUT = intersect(dfGen[dfGen.Num_VRE_Bins.>=1,:R_ID], VRE) + VRE_POWER_OUT = intersect(VRE, ids_with_positive(gen, num_vre_bins)) REG = inputs["REG"] RSV = inputs["RSV"] diff --git a/src/model/resources/flexible_demand/flexible_demand.jl b/src/model/resources/flexible_demand/flexible_demand.jl index 26eac4e5c7..1247538efa 100644 --- a/src/model/resources/flexible_demand/flexible_demand.jl +++ b/src/model/resources/flexible_demand/flexible_demand.jl @@ -39,12 +39,12 @@ function flexible_demand!(EP::Model, inputs::Dict, setup::Dict) println("Flexible Demand Resources Module") -dfGen = inputs["dfGen"] - T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones FLEX = inputs["FLEX"] # Set of flexible demand resources +gen = inputs["RESOURCES"] + hours_per_subperiod = inputs["hours_per_subperiod"] # Total number of hours per subperiod ### Variables ### @@ -59,20 +59,20 @@ hours_per_subperiod = inputs["hours_per_subperiod"] # Total number of hours per ## Power Balance Expressions ## @expression(EP, ePowerBalanceDemandFlex[t=1:T, z=1:Z], - sum(-EP[:vP][y,t]+EP[:vCHARGE_FLEX][y,t] for y in intersect(FLEX, dfGen[(dfGen[!,:Zone].==z),:R_ID])) + sum(-EP[:vP][y,t]+EP[:vCHARGE_FLEX][y,t] for y in intersect(FLEX, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceDemandFlex) # Capacity Reserves Margin policy if setup["CapacityReserveMargin"] > 0 - @expression(EP, eCapResMarBalanceFlex[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(dfGen[y,Symbol("CapRes_$res")] * (EP[:vCHARGE_FLEX][y,t] - EP[:vP][y,t]) for y in FLEX)) + @expression(EP, eCapResMarBalanceFlex[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(derating_factor(gen[y], tag=res) * (EP[:vCHARGE_FLEX][y,t] - EP[:vP][y,t]) for y in FLEX)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceFlex) end ## Objective Function Expressions ## # Variable costs of "charging" for technologies "y" during hour "t" in zone "z" -@expression(EP, eCVarFlex_in[y in FLEX,t=1:T], inputs["omega"][t]*dfGen[y,:Var_OM_Cost_per_MWh_In]*vCHARGE_FLEX[y,t]) +@expression(EP, eCVarFlex_in[y in FLEX,t=1:T], inputs["omega"][t]*var_om_cost_per_mwh_in(gen[y])*vCHARGE_FLEX[y,t]) # Sum individual resource contributions to variable charging costs to get total variable charging costs @expression(EP, eTotalCVarFlexInT[t=1:T], sum(eCVarFlex_in[y,t] for y in FLEX)) @@ -84,13 +84,13 @@ add_to_expression!(EP[:eObj], eTotalCVarFlexIn) ## Flexible demand is available only during specified hours with time delay or time advance (virtual storage-shiftable demand) for z in 1:Z # NOTE: Flexible demand operates by zone since capacity is now related to zone demand - FLEX_Z = intersect(FLEX, dfGen[dfGen.Zone .== z, :R_ID]) + FLEX_Z = intersect(FLEX, resources_in_zone_by_rid(gen,z)) @constraints(EP, begin # State of "charge" constraint (equals previous state + charge - discharge) # NOTE: no maximum energy "stored" or deferred for later hours # NOTE: Flexible_Demand_Energy_Eff corresponds to energy loss due to time shifting - [y in FLEX_Z, t in 1:T], EP[:vS_FLEX][y,t] == EP[:vS_FLEX][y, hoursbefore(hours_per_subperiod, t, 1)] - dfGen[y, :Flexible_Demand_Energy_Eff] * EP[:vP][y,t] + EP[:vCHARGE_FLEX][y,t] + [y in FLEX_Z, t in 1:T], EP[:vS_FLEX][y,t] == EP[:vS_FLEX][y, hoursbefore(hours_per_subperiod, t, 1)] - flexible_demand_energy_eff(gen[y]) * EP[:vP][y,t] + EP[:vCHARGE_FLEX][y,t] # Maximum charging rate # NOTE: the maximum amount that can be shifted is given by hourly availability of the resource times the maximum capacity of the resource @@ -102,18 +102,18 @@ for z in 1:Z for y in FLEX_Z # Require deferred demands to be satisfied within the specified time delay - max_flexible_demand_delay = Int(floor(dfGen[y,:Max_Flexible_Demand_Delay])) + max_flex_demand_delay = Int(floor(max_flexible_demand_delay(gen[y]))) # Require advanced demands to be satisfied within the specified time period - max_flexible_demand_advance = Int(floor(dfGen[y,:Max_Flexible_Demand_Advance])) + max_flex_demand_advance = Int(floor(max_flexible_demand_advance(gen[y]))) @constraint(EP, [t in 1:T], # cFlexibleDemandDelay: Constraints looks forward over next n hours, where n = max_flexible_demand_delay - sum(EP[:vP][y,e] for e=hoursafter(hours_per_subperiod, t, 1:max_flexible_demand_delay)) >= EP[:vS_FLEX][y,t]) + sum(EP[:vP][y,e] for e=hoursafter(hours_per_subperiod, t, 1:max_flex_demand_delay)) >= EP[:vS_FLEX][y,t]) @constraint(EP, [t in 1:T], # cFlexibleDemandAdvance: Constraint looks forward over next n hours, where n = max_flexible_demand_advance - sum(EP[:vCHARGE_FLEX][y,e] for e=hoursafter(hours_per_subperiod, t, 1:max_flexible_demand_advance)) >= -EP[:vS_FLEX][y,t]) + sum(EP[:vCHARGE_FLEX][y,e] for e=hoursafter(hours_per_subperiod, t, 1:max_flex_demand_advance)) >= -EP[:vS_FLEX][y,t]) end end diff --git a/src/model/resources/hydro/hydro_inter_period_linkage.jl b/src/model/resources/hydro/hydro_inter_period_linkage.jl index 1963b3f1be..2c6cc00427 100644 --- a/src/model/resources/hydro/hydro_inter_period_linkage.jl +++ b/src/model/resources/hydro/hydro_inter_period_linkage.jl @@ -45,11 +45,8 @@ function hydro_inter_period_linkage!(EP::Model, inputs::Dict) println("Long Duration Storage Module for Hydro Reservoir") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) - T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones REP_PERIOD = inputs["REP_PERIOD"] # Number of representative periods STOR_HYDRO_LONG_DURATION = inputs["STOR_HYDRO_LONG_DURATION"] @@ -80,7 +77,7 @@ function hydro_inter_period_linkage!(EP::Model, inputs::Dict) # Alternative to cSoCBalStart constraint which is included when not modeling operations wrapping and long duration storage # Note: tw_min = hours_per_subperiod*(w-1)+1; tw_max = hours_per_subperiod*w @constraint(EP, cHydroReservoirLongDurationStorageStart[w=1:REP_PERIOD, y in STOR_HYDRO_LONG_DURATION], - EP[:vS_HYDRO][y,hours_per_subperiod*(w-1)+1] == (EP[:vS_HYDRO][y,hours_per_subperiod*w]-vdSOC_HYDRO[y,w])-(1/dfGen[y,:Eff_Down]*EP[:vP][y,hours_per_subperiod*(w-1)+1])-EP[:vSPILL][y,hours_per_subperiod*(w-1)+1]+inputs["pP_Max"][y,hours_per_subperiod*(w-1)+1]*EP[:eTotalCap][y]) + EP[:vS_HYDRO][y,hours_per_subperiod*(w-1)+1] == (EP[:vS_HYDRO][y,hours_per_subperiod*w]-vdSOC_HYDRO[y,w])-(1/efficiency_down(gen[y])*EP[:vP][y,hours_per_subperiod*(w-1)+1])-EP[:vSPILL][y,hours_per_subperiod*(w-1)+1]+inputs["pP_Max"][y,hours_per_subperiod*(w-1)+1]*EP[:eTotalCap][y]) # Storage at beginning of period w = storage at beginning of period w-1 + storage built up in period w (after n representative periods) ## Multiply storage build up term from prior period with corresponding weight @constraint(EP, cHydroReservoirLongDurationStorage[y in STOR_HYDRO_LONG_DURATION, r in MODELED_PERIODS_INDEX], @@ -88,7 +85,7 @@ function hydro_inter_period_linkage!(EP::Model, inputs::Dict) # Storage at beginning of each modeled period cannot exceed installed energy capacity @constraint(EP, cHydroReservoirLongDurationStorageUpper[y in STOR_HYDRO_LONG_DURATION, r in MODELED_PERIODS_INDEX], - vSOC_HYDROw[y,r] <= dfGen[y,:Hydro_Energy_to_Power_Ratio]*EP[:eTotalCap][y]) + vSOC_HYDROw[y,r] <= hydro_energy_to_power_ratio(gen[y])*EP[:eTotalCap][y]) # Initial storage level for representative periods must also adhere to sub-period storage inventory balance # Initial storage = Final storage - change in storage inventory across representative period diff --git a/src/model/resources/hydro/hydro_res.jl b/src/model/resources/hydro/hydro_res.jl index 48fede2763..7d3da55db0 100644 --- a/src/model/resources/hydro/hydro_res.jl +++ b/src/model/resources/hydro/hydro_res.jl @@ -60,7 +60,7 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) println("Hydro Reservoir Core Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -101,13 +101,13 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceHydroRes[t=1:T, z=1:Z], - sum(EP[:vP][y,t] for y in intersect(HYDRO_RES, dfGen[(dfGen[!,:Zone].==z),:R_ID])) + sum(EP[:vP][y,t] for y in intersect(HYDRO_RES, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceHydroRes) # Capacity Reserves Margin policy if setup["CapacityReserveMargin"] > 0 - @expression(EP, eCapResMarBalanceHydro[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(dfGen[y,Symbol("CapRes_$res")] * EP[:vP][y,t] for y in HYDRO_RES)) + @expression(EP, eCapResMarBalanceHydro[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(derating_factor(gen[y], tag=res) * EP[:vP][y,t] for y in HYDRO_RES)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceHydro) end @@ -119,7 +119,7 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) CONSTRAINTSET = HYDRO_RES end - @constraint(EP, cHydroReservoirStart[y in CONSTRAINTSET,t in START_SUBPERIODS], EP[:vS_HYDRO][y,t] == EP[:vS_HYDRO][y, hoursbefore(p,t,1)]- (1/dfGen[y,:Eff_Down]*EP[:vP][y,t]) - vSPILL[y,t] + inputs["pP_Max"][y,t]*EP[:eTotalCap][y]) + @constraint(EP, cHydroReservoirStart[y in CONSTRAINTSET,t in START_SUBPERIODS], EP[:vS_HYDRO][y,t] == EP[:vS_HYDRO][y, hoursbefore(p,t,1)]- (1/efficiency_down(gen[y])*EP[:vP][y,t]) - vSPILL[y,t] + inputs["pP_Max"][y,t]*EP[:eTotalCap][y]) ### Constraints commmon to all reservoir hydro (y in set HYDRO_RES) ### @constraints(EP, begin @@ -129,13 +129,13 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) # DEV NOTE: Last inputs["pP_Max"][y,t] term above is inflows; currently part of capacity factors inputs in Generators_variability.csv but should be moved to its own Hydro_inflows.csv input in future. # Constraints for reservoir hydro - cHydroReservoirInterior[y in HYDRO_RES, t in INTERIOR_SUBPERIODS], EP[:vS_HYDRO][y,t] == (EP[:vS_HYDRO][y, hoursbefore(p,t,1)]- (1/dfGen[y,:Eff_Down]*EP[:vP][y,t]) - vSPILL[y,t] + inputs["pP_Max"][y,t]*EP[:eTotalCap][y]) + cHydroReservoirInterior[y in HYDRO_RES, t in INTERIOR_SUBPERIODS], EP[:vS_HYDRO][y,t] == (EP[:vS_HYDRO][y, hoursbefore(p,t,1)] - (1/efficiency_down(gen[y])*EP[:vP][y,t]) - vSPILL[y,t] + inputs["pP_Max"][y,t]*EP[:eTotalCap][y]) # Maximum ramp up and down - cRampUp[y in HYDRO_RES, t in 1:T], EP[:vP][y,t] + regulation_term[y,t] + reserves_term[y,t] - EP[:vP][y, hoursbefore(p,t,1)] <= dfGen[y,:Ramp_Up_Percentage]*EP[:eTotalCap][y] - cRampDown[y in HYDRO_RES, t in 1:T], EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] - regulation_term[y,t] + reserves_term[y, hoursbefore(p,t,1)] <= dfGen[y,:Ramp_Dn_Percentage]*EP[:eTotalCap][y] + cRampUp[y in HYDRO_RES, t in 1:T], EP[:vP][y,t] + regulation_term[y,t] + reserves_term[y,t] - EP[:vP][y, hoursbefore(p,t,1)] <= ramp_up_fraction(gen[y])*EP[:eTotalCap][y] + cRampDown[y in HYDRO_RES, t in 1:T], EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] - regulation_term[y,t] + reserves_term[y, hoursbefore(p,t,1)] <= ramp_down_fraction(gen[y])*EP[:eTotalCap][y] # Minimum streamflow running requirements (power generation and spills must be >= min value) in all hours - cHydroMinFlow[y in HYDRO_RES, t in 1:T], EP[:vP][y,t] + EP[:vSPILL][y,t] >= dfGen[y,:Min_Power]*EP[:eTotalCap][y] + cHydroMinFlow[y in HYDRO_RES, t in 1:T], EP[:vP][y,t] + EP[:vSPILL][y,t] >= min_power(gen[y])*EP[:eTotalCap][y] # DEV NOTE: When creating new hydro inputs, should rename Min_Power with Min_flow or similar for clarity since this includes spilled water as well # Maximum discharging rate must be less than power rating OR available stored energy at start of hour, whichever is less @@ -147,7 +147,7 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) ### Constraints to limit maximum energy in storage based on known limits on reservoir energy capacity (only for HYDRO_RES_KNOWN_CAP) # Maximum energy stored in reservoir must be less than energy capacity in all hours - only applied to HYDRO_RES_KNOWN_CAP - @constraint(EP, cHydroMaxEnergy[y in HYDRO_RES_KNOWN_CAP, t in 1:T], EP[:vS_HYDRO][y,t] <= dfGen[y,:Hydro_Energy_to_Power_Ratio]*EP[:eTotalCap][y]) + @constraint(EP, cHydroMaxEnergy[y in HYDRO_RES_KNOWN_CAP, t in 1:T], EP[:vS_HYDRO][y,t] <= hydro_energy_to_power_ratio(gen[y])*EP[:eTotalCap][y]) if setup["Reserves"] == 1 ### Reserve related constraints for reservoir hydro resources (y in HYDRO_RES), if used @@ -155,7 +155,7 @@ function hydro_res!(EP::Model, inputs::Dict, setup::Dict) end ##CO2 Polcy Module Hydro Res Generation by zone @expression(EP, eGenerationByHydroRes[z=1:Z, t=1:T], # the unit is GW - sum(EP[:vP][y,t] for y in intersect(HYDRO_RES, dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(HYDRO_RES, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:eGenerationByZone], eGenerationByHydroRes) @@ -193,7 +193,7 @@ function hydro_res_reserves!(EP::Model, inputs::Dict) println("Hydro Reservoir Reserves Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) @@ -208,8 +208,6 @@ function hydro_res_reserves!(EP::Model, inputs::Dict) vREG = EP[:vREG] vRSV = EP[:vRSV] eTotalCap = EP[:eTotalCap] - reg_max(y) = dfGen[y, :Reg_Max] - rsv_max(y) = dfGen[y, :Rsv_Max] max_up_reserves_lhs = extract_time_series_to_expression(vP, HYDRO_RES) max_dn_reserves_lhs = extract_time_series_to_expression(vP, HYDRO_RES) @@ -224,6 +222,6 @@ function hydro_res_reserves!(EP::Model, inputs::Dict) @constraint(EP, [y in HYDRO_RES, t in 1:T], max_up_reserves_lhs[y, t] <= eTotalCap[y]) @constraint(EP, [y in HYDRO_RES, t in 1:T], max_dn_reserves_lhs[y, t] >= 0) - @constraint(EP, [y in HYDRO_RES_REG, t in 1:T], vREG[y, t] <= reg_max(y) * eTotalCap[y]) - @constraint(EP, [y in HYDRO_RES_RSV, t in 1:T], vRSV[y, t] <= rsv_max(y) * eTotalCap[y]) + @constraint(EP, [y in HYDRO_RES_REG, t in 1:T], vREG[y, t] <= reg_max(gen[y]) * eTotalCap[y]) + @constraint(EP, [y in HYDRO_RES_RSV, t in 1:T], vRSV[y, t] <= rsv_max(gen[y]) * eTotalCap[y]) end diff --git a/src/model/resources/hydrogen/electrolyzer.jl b/src/model/resources/hydrogen/electrolyzer.jl index 64463fbf47..7d74de7d34 100644 --- a/src/model/resources/hydrogen/electrolyzer.jl +++ b/src/model/resources/hydrogen/electrolyzer.jl @@ -65,7 +65,7 @@ where $\eta^{electrolyzer}_y$ is the efficiency of the electrolyzer $y$ in megaw **Hourly clean supply matching constraint** -This optional constraint (enabled by setting `HydrogenHourlyMatching==1` in `genx_settings.yml`) requires generation from qualified resources ($y \in \mathcal{Qualified}$, indicated by `Qualified_Hydrogen_Supply==1` in `Generators_data.csv`) from within the same zone $z$ as the electrolyzers are located to be >= hourly consumption from electrolyzers in the zone (and any charging by qualified storage within the zone used to help increase electrolyzer utilization): +This optional constraint (enabled by setting `HydrogenHourlyMatching==1` in `genx_settings.yml`) requires generation from qualified resources ($y \in \mathcal{Qualified}$, indicated by `Qualified_Hydrogen_Supply==1` in the resource `.csv` files) from within the same zone $z$ as the electrolyzers are located to be >= hourly consumption from electrolyzers in the zone (and any charging by qualified storage within the zone used to help increase electrolyzer utilization): ```math \begin{aligned} @@ -81,11 +81,10 @@ This constraint permits modeling of the 'three pillars' requirements for clean h function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) println("Electrolyzer Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - G = inputs["G"] # Number of generators ELECTROLYZERS = inputs["ELECTROLYZER"] STORAGE = inputs["STOR_ALL"] @@ -102,7 +101,7 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceElectrolyzers[t in 1:T, z in 1:Z], - sum(EP[:vUSE][y,t] for y in intersect(ELECTROLYZERS, dfGen[dfGen[!,:Zone].==z,:R_ID]))) + sum(EP[:vUSE][y,t] for y in intersect(ELECTROLYZERS, resources_in_zone_by_rid(gen,z)))) # Electrolyzers consume electricity so their vUSE is subtracted from power balance EP[:ePowerBalance] -= ePowerBalanceElectrolyzers @@ -115,10 +114,10 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) ### Maximum ramp up and down between consecutive hours (Constraints #1-2) @constraints(EP, begin ## Maximum ramp up between consecutive hours - [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y,t] - EP[:vUSE][y, hoursbefore(p,t,1)] <= dfGen[y,:Ramp_Up_Percentage]*EP[:eTotalCap][y] + [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y,t] - EP[:vUSE][y, hoursbefore(p,t,1)] <= ramp_up_fraction(gen[y])*EP[:eTotalCap][y] ## Maximum ramp down between consecutive hours - [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y, hoursbefore(p,t,1)] - EP[:vUSE][y,t] <= dfGen[y,:Ramp_Dn_Percentage]*EP[:eTotalCap][y] + [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y, hoursbefore(p,t,1)] - EP[:vUSE][y,t] <= ramp_down_fraction(gen[y])*EP[:eTotalCap][y] end) ### Minimum and maximum power output constraints (Constraints #3-4) @@ -127,7 +126,7 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) # Could allow them to contribute as a curtailable demand in future. @constraints(EP, begin # Minimum stable power generated per technology "y" at hour "t" Min_Power - [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y,t] >= dfGen[y,:Min_Power]*EP[:eTotalCap][y] + [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y,t] >= min_power(gen[y])*EP[:eTotalCap][y] # Maximum power generated per technology "y" at hour "t" [y in ELECTROLYZERS, t in 1:T], EP[:vUSE][y,t] <= inputs["pP_Max"][y,t]*EP[:eTotalCap][y] @@ -137,7 +136,7 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) kt_to_t = 10^3 @constraint(EP, cHydrogenMin[y in ELECTROLYZERS], - sum(inputs["omega"][t] * EP[:vUSE][y,t] / dfGen[y,:Hydrogen_MWh_Per_Tonne] for t=1:T) >= dfGen[y,:Electrolyzer_Min_kt] * kt_to_t + sum(inputs["omega"][t] * EP[:vUSE][y,t] / hydrogen_mwh_per_tonne(gen[y]) for t=1:T) >= electrolyzer_min_kt(gen[y]) * kt_to_t ) ### Remove vP (electrolyzers do not produce power so vP = 0 for all periods) @@ -146,14 +145,14 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) end) ### Hydrogen Hourly Supply Matching Constraint (Constraint #6) ### - # Requires generation from qualified resources (indicated by Qualified_Hydrogen_Supply==1 in Generators_data.csv) + # Requires generation from qualified resources (indicated by Qualified_Hydrogen_Supply==1 in the resource .csv files) # from within the same zone as the electrolyzers are located to be >= hourly consumption from electrolyzers in the zone # (and any charging by qualified storage within the zone used to help increase electrolyzer utilization). if setup["HydrogenHourlyMatching"] == 1 - HYDROGEN_ZONES = unique(dfGen.Zone[dfGen.ELECTROLYZER.==1]) - QUALIFIED_SUPPLY = dfGen.R_ID[dfGen.Qualified_Hydrogen_Supply.==1] + HYDROGEN_ZONES = unique(zone_id.(gen.Electrolyzer)) + QUALIFIED_SUPPLY = ids_with(gen, qualified_hydrogen_supply) @constraint(EP, cHourlyMatching[z in HYDROGEN_ZONES, t in 1:T], - sum(EP[:vP][y,t] for y=intersect(dfGen.R_ID[dfGen.Zone.==z], QUALIFIED_SUPPLY)) >= sum(EP[:vUSE][y,t] for y=intersect(dfGen.R_ID[dfGen.Zone.==z], ELECTROLYZERS)) + sum(EP[:vCHARGE][y,t] for y=intersect(dfGen.R_ID[dfGen.Zone.==z], QUALIFIED_SUPPLY, STORAGE)) + sum(EP[:vP][y,t] for y=intersect(resources_in_zone_by_rid(gen,z), QUALIFIED_SUPPLY)) >= sum(EP[:vUSE][y,t] for y=intersect(resources_in_zone_by_rid(gen,z), ELECTROLYZERS)) + sum(EP[:vCHARGE][y,t] for y=intersect(resources_in_zone_by_rid(gen,z), QUALIFIED_SUPPLY, STORAGE)) ) end @@ -161,16 +160,16 @@ function electrolyzer!(EP::Model, inputs::Dict, setup::Dict) ### Energy Share Requirement Policy ### # Since we're using vUSE to denote electrolyzer consumption, we subtract this from the eESR Energy Share Requirement balance to increase demand for clean resources if desired # Electrolyzer demand is only accounted for in an ESR that the electrolyzer resources is tagged in in Generates_data.csv (e.g. ESR_N > 0) and - # a share of electrolyzer demand equal to dfGen[y,:ESR_N] must be met by resources qualifying for ESR_N for each electrolyzer resource y. + # a share of electrolyzer demand equal to df[y,:ESR_N] must be met by resources qualifying for ESR_N for each electrolyzer resource y. if setup["EnergyShareRequirement"] >= 1 - @expression(EP, eElectrolyzerESR[ESR in 1:inputs["nESR"]], sum(inputs["omega"][t]*EP[:vUSE][y,t] for y=intersect(ELECTROLYZERS, dfGen[findall(x->x>0,dfGen[!,Symbol("ESR_$ESR")]),:R_ID]), t in 1:T)) + @expression(EP, eElectrolyzerESR[ESR in 1:inputs["nESR"]], sum(inputs["omega"][t]*EP[:vUSE][y,t] for y=intersect(ELECTROLYZERS, ids_with_policy(gen,esr,tag=ESR)), t in 1:T)) EP[:eESR] -= eElectrolyzerESR end ### Objective Function ### # Subtract hydrogen revenue from objective function scale_factor = setup["ParameterScale"] == 1 ? 10^6 : 1 # If ParameterScale==1, costs are in millions of $ - @expression(EP, eHydrogenValue[y in ELECTROLYZERS, t in 1:T], (inputs["omega"][t] * EP[:vUSE][y,t] / dfGen[y,:Hydrogen_MWh_Per_Tonne] * dfGen[y,:Hydrogen_Price_Per_Tonne] / scale_factor)) + @expression(EP, eHydrogenValue[y in ELECTROLYZERS, t in 1:T], (inputs["omega"][t] * EP[:vUSE][y,t] / hydrogen_mwh_per_tonne(gen[y]) * hydrogen_price_per_tonne(gen[y]) / scale_factor)) @expression(EP, eTotalHydrogenValueT[t in 1:T], sum(eHydrogenValue[y,t] for y in ELECTROLYZERS)) @expression(EP, eTotalHydrogenValue, sum(eTotalHydrogenValueT[t] for t in 1:T)) EP[:eObj] -= eTotalHydrogenValue diff --git a/src/model/resources/must_run/must_run.jl b/src/model/resources/must_run/must_run.jl index 9f762891f4..a16efb1141 100644 --- a/src/model/resources/must_run/must_run.jl +++ b/src/model/resources/must_run/must_run.jl @@ -16,7 +16,7 @@ function must_run!(EP::Model, inputs::Dict, setup::Dict) println("Must-Run Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -30,13 +30,13 @@ function must_run!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceNdisp[t=1:T, z=1:Z], - sum(EP[:vP][y,t] for y in intersect(MUST_RUN, dfGen[dfGen[!,:Zone].==z, :R_ID])) + sum(EP[:vP][y,t] for y in intersect(MUST_RUN, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceNdisp) # Capacity Reserves Margin policy if CapacityReserveMargin > 0 - @expression(EP, eCapResMarBalanceMustRun[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(dfGen[y,Symbol("CapRes_$res")] * EP[:eTotalCap][y] * inputs["pP_Max"][y,t] for y in MUST_RUN)) + @expression(EP, eCapResMarBalanceMustRun[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(derating_factor(gen[y], tag=res) * EP[:eTotalCap][y] * inputs["pP_Max"][y,t] for y in MUST_RUN)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceMustRun) end @@ -45,7 +45,7 @@ function must_run!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, [y in MUST_RUN, t=1:T], EP[:vP][y,t] == inputs["pP_Max"][y,t]*EP[:eTotalCap][y]) ##CO2 Polcy Module Must Run Generation by zone @expression(EP, eGenerationByMustRun[z=1:Z, t=1:T], # the unit is GW - sum(EP[:vP][y,t] for y in intersect(MUST_RUN, dfGen[dfGen[!,:Zone].==z, :R_ID])) + sum(EP[:vP][y,t] for y in intersect(MUST_RUN, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:eGenerationByZone], eGenerationByMustRun) diff --git a/src/model/resources/resources.jl b/src/model/resources/resources.jl index 5927fd0b05..d38db7e27c 100644 --- a/src/model/resources/resources.jl +++ b/src/model/resources/resources.jl @@ -1,180 +1,907 @@ -GenXResource = Dict{Symbol, Any} +""" + resource_types + +Name of the type of resources available in the model. + +Possible values: +- :Thermal +- :Vre +- :Hydro +- :Storage +- :MustRun +- :FlexDemand +- :VreStorage +- :Electrolyzer +""" +const resource_types = (:Thermal, + :Vre, + :Hydro, + :Storage, + :MustRun, + :FlexDemand, + :VreStorage, + :Electrolyzer) + +# Create composite types (structs) for each resource type in resource_types +for r in resource_types + let dict = :dict, r = r + @eval begin + struct $r{names<:Symbol, T<:Any} <: AbstractResource + $dict::Dict{names,T} + end + Base.parent(r::$r) = getfield(r, $(QuoteNode(dict))) + end + end +end -# interface with generators_data.csv -# acts as a global variable -resource_attribute_not_set() = 0 +""" + Base.getproperty(r::AbstractResource, sym::Symbol) -resource_name(r::GenXResource) = r[:Resource] +Allows to access the attributes of an `AbstractResource` object using dot syntax. It checks if the attribute exists in the object and returns its value, otherwise it throws an `ErrorException` indicating that the attribute does not exist. -@doc raw""" - check_resource_type_flags(r::GenXResource) - -Make sure that a resource is not more than one of a set of mutually-exclusive models -""" -function check_resource_type_flags(r::GenXResource) - exclusive_flags = [:THERM, :MUST_RUN, :STOR, :FLEX, :HYDRO, :VRE, :VRE_STOR, :ELECTROLYZER] - not_set = resource_attribute_not_set() - check_for_flag_set(el) = get(r, el, not_set) > 0 - - statuses = check_for_flag_set.(exclusive_flags) - number_set = count(statuses) - - error_strings = String[] - if number_set == 0 - e = string("Resource ", resource_name(r), " has none of ", exclusive_flags, " set.\n", - "Exactly one of these should be non-$not_set.") - push!(error_strings, e) - elseif number_set > 1 - set_flags = exclusive_flags[statuses] - e = string("Resource ", resource_name(r), " has both ", set_flags, " ≠ $not_set.\n", - "Exactly one of these should be non-$not_set.") - push!(error_strings, e) - end - return error_strings +# Arguments: +- `r::AbstractResource`: The resource object. +- `sym::Symbol`: The symbol representing the attribute name. + +# Returns: +- The value of the attribute if it exists in the parent object. + +Throws: +- `ErrorException`: If the attribute does not exist in the resource. + +""" +function Base.getproperty(r::AbstractResource, sym::Symbol) + haskey(parent(r), sym) && return parent(r)[sym] + throw(ErrorException("type $(nameof(typeof(r))) has no attribute $(string(sym))")) end -@doc raw""" - check_mustrun_reserve_contribution(r::GenXResource) +""" + setproperty!(r::AbstractResource, sym::Symbol, value) + +Allows to set the attribute `sym` of an `AbstractResource` object using dot syntax. + +# Arguments: +- `r::AbstractResource`: The resource object. +- `sym::Symbol`: The symbol representing the attribute name. +- `value`: The value to set for the attribute. + +""" +Base.setproperty!(r::AbstractResource, sym::Symbol, value) = setindex!(parent(r), value, sym) + +""" + haskey(r::AbstractResource, sym::Symbol) + +Check if an `AbstractResource` object has a specific attribute. It returns a boolean value indicating whether the attribute exists in the parent object. + +# Arguments: +- `r::AbstractResource`: The resource object. +- `sym::Symbol`: The symbol representing the attribute name. + +# Returns: +- `true` if the attribute exists in the parent object, `false` otherwise. + +""" +Base.haskey(r::AbstractResource, sym::Symbol) = haskey(parent(r), sym) -Make sure that a MUST_RUN resource has Reg_Max and Rsv_Max set to 0 (since they cannot contribute to reserves). """ -function check_mustrun_reserve_contribution(r::GenXResource) - not_set = resource_attribute_not_set() - value = get(r, :MUST_RUN, not_set) + get(r::AbstractResource, sym::Symbol, default) - error_strings = String[] +Retrieves the value of a specific attribute from an `AbstractResource` object. If the attribute exists, its value is returned; otherwise, the default value is returned. - if value == not_set - # not MUST_RUN so the rest is not applicable - return error_strings +# Arguments: +- `r::AbstractResource`: The resource object. +- `sym::Symbol`: The symbol representing the attribute name. +- `default`: The default value to return if the attribute does not exist. + +# Returns: +- The value of the attribute if it exists in the parent object, `default` otherwise. + +""" +function Base.get(r::AbstractResource, sym::Symbol, default) + return haskey(r, sym) ? getproperty(r,sym) : default +end + +""" + Base.getproperty(rs::Vector{<:AbstractResource}, sym::Symbol) + +Allows to access attributes of a vector of `AbstractResource` objects using dot syntax. If the `sym` is an element of the `resource_types` constant, it returns all resources of that type. Otherwise, it returns the value of the attribute for each resource in the vector. + +# Arguments: +- `rs::Vector{<:AbstractResource}`: The vector of `AbstractResource` objects. +- `sym::Symbol`: The symbol representing the attribute name or a type from `resource_types`. + +# Returns: +- If `sym` is an element of the `resource_types` constant, it returns a vector containing all resources of that type. +- If `sym` is an attribute name, it returns a vector containing the value of the attribute for each resource. + +## Examples +```julia +julia> vre_gen = gen.Vre; # gen vector of resources +julia> typeof(vre_gen) +Vector{Vre} (alias for Array{Vre, 1}) +julia> vre_gen.zone +``` +""" +function Base.getproperty(rs::Vector{<:AbstractResource}, sym::Symbol) + # if sym is Type then return a vector resources of that type + if sym ∈ resource_types + res_type = eval(sym) + return Vector{res_type}(rs[isa.(rs, res_type)]) end + # if sym is a field of the resource then return that field for all resources + return [getproperty(r, sym) for r in rs] +end - reg_max = get(r, :Reg_Max, not_set) - if reg_max != 0 - e = string("Resource ", resource_name(r), " has :MUST_RUN = ", value, " but :Reg_Max = ", reg_max, ".\n", - "MUST_RUN units must have Reg_Max = 0 since they cannot contribute to reserves.") - push!(error_strings, e) +""" + Base.setproperty!(rs::Vector{<:AbstractResource}, sym::Symbol, value::Vector) + +Set the attributes specified by `sym` to the corresponding values in `value` for a vector of resources. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `sym::Symbol`: The symbol representing the attribute to set. +- `value::Vector`: The vector of values to set for the attribute. + +# Returns +- `rs::Vector{<:AbstractResource}`: The updated vector of resources. + +""" +function Base.setproperty!(rs::Vector{<:AbstractResource}, sym::Symbol, value::Vector) + # if sym is a field of the resource then set that field for all resources + @assert length(rs) == length(value) + for (r,v) in zip(rs, value) + setproperty!(r, sym, v) end - rsv_max = get(r, :Rsv_Max, not_set) - if rsv_max != 0 - e = string("Resource ", resource_name(r), " has :MUST_RUN = ", value, " but :Rsv_Max = ", rsv_max, ".\n", - "MUST_RUN units must have Rsv_Max = 0 since they cannot contribute to reserves.") - push!(error_strings, e) + return rs +end + +""" + Base.setindex!(rs::Vector{<:AbstractResource}, value::Vector, sym::Symbol) + +Define dot syntax for setting the attributes specified by `sym` to the corresponding values in `value` for a vector of resources. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `value::Vector`: The vector of values to set for the attribute. +- `sym::Symbol`: The symbol representing the attribute to set. + +# Returns +- `rs::Vector{<:AbstractResource}`: The updated vector of resources. + +""" +function Base.setindex!(rs::Vector{<:AbstractResource}, value::Vector, sym::Symbol) + # if sym is a field of the resource then set that field for all resources + @assert length(rs) == length(value) + for (r,v) in zip(rs, value) + setproperty!(r, sym, v) end - return error_strings + return rs end -@doc raw""" - check_longdurationstorage_applicability(r::GenXResource) +""" + pairs(r::AbstractResource) + +Return an iterator of key-value pairs with the attributes of a given resource. + +# Arguments +- `r::AbstractResource`: The resource. + +# Returns +- `Pairs`: An iterator of key-value pairs over the attributes. + +""" +Base.pairs(r::AbstractResource) = pairs(parent(r)) -Check whether the LDS flag is set appropriately """ -function check_longdurationstorage_applicability(r::GenXResource) - applicable_resources = [:STOR, :HYDRO] + show(io::IO, r::AbstractResource) - not_set = resource_attribute_not_set() - lds_value = get(r, :LDS, not_set) +Print the attributes of the given resource. - error_strings = String[] +# Arguments +- `io::IO`: The IO stream to print to. +- `r::AbstractResource`: The resource. - if lds_value == not_set - # not LDS so the rest is not applicable - return error_strings +""" +function Base.show(io::IO, r::AbstractResource) + key_length = maximum(length.(string.(attributes(r)))) + value_length = length(resource_name(r)) + 3 + println(io, "\nResource: $(r.resource) (id: $(r.id))") + println(io, repeat("-", key_length + value_length)) + for (k,v) in pairs(r) + k,v = string(k), string(v) + k = k * repeat(" ", key_length - length(k)) + println(io, "$k | $v") end + println(io, repeat("-", key_length + value_length)) +end + +""" + attributes(r::AbstractResource) + +Returns a tuple of the attribute names of the given resource. + +# Arguments +- `r::AbstractResource`: The resource. + +# Returns +- `Tuple`: A tuple with symbols representing the attribute names. + +""" +function attributes(r::AbstractResource) + return tuple(keys(parent(r))...) +end + - check_for_flag_set(el) = get(r, el, not_set) > 0 - statuses = check_for_flag_set.(applicable_resources) +""" + findall(f::Function, rs::Vector{<:AbstractResource}) + +Find all resources in the vector `rs` that satisfy the condition given by the function `f`. +Return the resource id instead of the vector index. + +# Arguments +- `f::Function`: The condition function. +- `rs::Vector{<:AbstractResource}`: The vector of resources. + +# Returns +- `Vector`: The vector of resource ids. + +## Examples +```julia +julia> findall(r -> max_cap_mwh(r) != 0, gen.Storage) +3-element Vector{Int64}: + 48 + 49 + 50 +``` +""" +Base.findall(f::Function, rs::Vector{<:AbstractResource}) = resource_id.(filter(r -> f(r), rs)) - if count(statuses) == 0 - e = string("Resource ", resource_name(r), " has :LDS = ", lds_value, ".\n", - "This setting is valid only for resources where the type is one of $applicable_resources.") - push!(error_strings, e) +""" + interface(name, default=default_zero, type=AbstractResource) + +Define a function interface for accessing the attribute specified by `name` in a resource of type `type`. + +# Arguments +- `name`: The name of the attribute. +- `default`: The default value to return if the attribute is not found. +- `type`: The type of the resource. + +# Returns +- `Function`: The generated function. + +## Examples +```julia +julia> @interface max_cap_mw 0 Vre +julia> max_cap_mw(gen.Vre[3]) +4.888236 +julia> max_cap_mw.(gen.Vre) # vectorized +5-element Vector{Float64}: + 0.0 + 0.0 + 4.888236 + 20.835569 + 9.848441999999999 +``` +""" +macro interface(name, default=default_zero, type=AbstractResource) + quote + function $(esc(name))(r::$(esc(type))) + return get(r, $(QuoteNode(name)), $(esc(default))) + end end - return error_strings end -@doc raw""" - check_maintenance_applicability(r::GenXResource) +""" + ids_with_positive(rs::Vector{T}, f::Function) where T <: AbstractResource + +Function for finding indices of resources in a vector `rs` where the attribute specified by `f` is positive. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `f::Function`: The getter of the attribute. + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with positive attribute. + +## Examples +```julia +julia> ids_with_positive(gen, max_cap_mw) +3-element Vector{Int64}: + 3 + 4 + 5 +julia> max_cap_mw(gen[3]) +4.888236 +``` +""" +function ids_with_positive(rs::Vector{T}, f::Function) where T <: AbstractResource + return findall(r -> f(r) > 0, rs) +end -Check whether the MAINT flag is set appropriately """ -function check_maintenance_applicability(r::GenXResource) - applicable_resources = [:THERM] + ids_with_positive(rs::Vector{T}, name::Symbol) where T <: AbstractResource + +Function for finding indices of resources in a vector `rs` where the attribute specified by `name` is positive. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `name::Symbol`: The name of the attribute. + +# Returns +- `Vector{Int64}`: The vector of resource ids with positive attribute. + +## Examples +```julia +julia> ids_with_positive(gen, :max_cap_mw) +3-element Vector{Int64}: + 3 + 4 + 5 +julia> max_cap_mw(gen[3]) +4.888236 +``` +""" +function ids_with_positive(rs::Vector{T}, name::Symbol) where T <: AbstractResource + # if the getter function exists in GenX then use it, otherwise get the attribute directly + f = isdefined(GenX, name) ? getfield(GenX, name) : r -> getproperty(r, name) + return ids_with_positive(rs, f) +end - not_set = resource_attribute_not_set() - value = get(r, :MAINT, not_set) +function ids_with_positive(rs::Vector{T}, name::AbstractString) where T <: AbstractResource + return ids_with_positive(rs, Symbol(lowercase(name))) +end - error_strings = String[] +""" + ids_with_nonneg(rs::Vector{T}, f::Function) where T <: AbstractResource - if value == not_set - # not MAINT so the rest is not applicable - return error_strings - end +Function for finding resources in a vector `rs` where the attribute specified by `f` is non-negative. - check_for_flag_set(el) = get(r, el, not_set) > 0 - statuses = check_for_flag_set.(applicable_resources) +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `f::Function`: The getter of the attribute. - if count(statuses) == 0 - e = string("Resource ", resource_name(r), " has :MAINT = ", value, ".\n", - "This setting is valid only for resources where the type is \n", - "one of $applicable_resources. \n", - ) - push!(error_strings, e) - end - if get(r, :THERM, not_set) == 2 - e = string("Resource ", resource_name(r), " has :MAINT = ", value, ".\n", - "This is valid only for resources with unit commitment (:THERM = 1);\n", - "this has :THERM = 2.") - push!(error_strings, e) - end - return error_strings +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with non-negative attribute. + +## Examples +```julia +julia> ids_with_nonneg(gen, max_cap_mw) +``` +""" +function ids_with_nonneg(rs::Vector{T}, f::Function) where T <: AbstractResource + return findall(r -> f(r) >= 0, rs) end -@doc raw""" - check_resource(r::GenXResource)::Vector{String} +""" + ids_with_nonneg(rs::Vector{T}, f::Function) where T <: AbstractResource + +Function for finding resources in a vector `rs` where the attribute specified by `name` is non-negative. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `name::Symbol`: The name of the attribute. + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with non-negative attribute. -Top-level function for validating the self-consistency of a GenX resource. -Reports any errors in a list of strings. +## Examples +```julia +julia> ids_with_nonneg(gen, max_cap_mw) +``` """ -function check_resource(r::GenXResource)::Vector{String} - e = String[] - e = [e; check_resource_type_flags(r)] - e = [e; check_longdurationstorage_applicability(r)] - e = [e; check_maintenance_applicability(r)] - e = [e; check_mustrun_reserve_contribution(r)] - return e +function ids_with_nonneg(rs::Vector{T}, name::Symbol) where T <: AbstractResource + # if the getter function exists in GenX then use it, otherwise get the attribute directly + f = isdefined(GenX, name) ? getfield(GenX, name) : r -> getproperty(r, name) + return ids_with_nonneg(rs, f) end -@doc raw""" - check_resource(resources::Vector{GenXResource})::Vector{String} +function ids_with_nonneg(rs::Vector{T}, name::AbstractString) where T <: AbstractResource + return ids_with_nonneg(rs, Symbol(lowercase(name))) +end -Validate the consistency of a vector of GenX resources -Reports any errors in a list of strings. """ -function check_resource(resources::Vector{GenXResource})::Vector{String} - e = String[] - for r in resources - e = [e; check_resource(r)] - end - return e + ids_with(rs::Vector{T}, f::Function, default=default_zero) where T <: AbstractResource + +Function for finding resources in a vector `rs` where the attribute specified by `f` is not equal to `default`. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `f::Function`: The getter of the attribute. +- `default`: The default value of the attribute. + + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with attribute not equal to `default`. + +## Examples +```julia +julia> ids_with(gen.Thermal, existing_cap_mw) +4-element Vector{Int64}: + 21 + 22 + 23 + 24 +julia> existing_cap_mw(gen[21]) +7.0773 +``` +""" +function ids_with(rs::Vector{T}, f::Function, default=default_zero) where T <: AbstractResource + return findall(r -> f(r) != default, rs) end -function announce_errors_and_halt(e::Vector{String}) - error_count = length(e) - for error_message in e - @error(error_message) - end - s = string(error_count, " problems were detected with the input data. Halting.") - error(s) +""" + ids_with(rs::Vector{T}, name::Symbol, default=default_zero) where T <: AbstractResource + +Function for finding resources in a vector `rs` where the attribute specified by `name` is not equal to the default value of the attribute. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `name::Symbol`: The name of the attribute. +- `default`: The default value of the attribute. + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with attribute not equal to `default`. + +## Examples +```julia +julia> ids_with(gen.Thermal, :existing_cap_mw) +4-element Vector{Int64}: + 21 + 22 + 23 + 24 +julia> existing_cap_mw(gen[21]) +7.0773 +``` +""" +function ids_with(rs::Vector{T}, name::Symbol, default=default_zero) where T <: AbstractResource + # if the getter function exists in GenX then use it, otherwise get the attribute directly + f = isdefined(GenX, name) ? getfield(GenX, name) : r -> getproperty(r, name) + return ids_with(rs, f, default) +end + +function ids_with(rs::Vector{T}, name::AbstractString, default=default_zero) where T <: AbstractResource + return ids_with(rs, Symbol(lowercase(name)), default) +end + +""" + ids_with_policy(rs::Vector{T}, f::Function; tag::Int64) where T <: AbstractResource + +Function for finding resources in a vector `rs` where the policy specified by `f` with tag equal to `tag` is positive. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `f::Function`: The policy getter function. +- `tag::Int64`: The tag of the policy. + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with a positive value for policy `f` and tag `tag`. +""" +function ids_with_policy(rs::Vector{T}, f::Function; tag::Int64) where T <: AbstractResource + return findall(r -> f(r, tag=tag) > 0, rs) end -function validate_resources(resources::Vector{GenXResource}) - e = check_resource(resources) - if length(e) > 0 - announce_errors_and_halt(e) +""" +ids_with_policy(rs::Vector{T}, name::Symbol; tag::Int64) where T <: AbstractResource + +Function for finding resources in a vector `rs` where the policy specified by `name` with tag equal to `tag` is positive. + +# Arguments +- `rs::Vector{<:AbstractResource}`: The vector of resources. +- `name::Symbol`: The name of the policy. +- `tag::Int64`: The tag of the policy. + +# Returns +- `ids (Vector{Int64})`: The vector of resource ids with a positive value for policy `name` and tag `tag`. +""" +function ids_with_policy(rs::Vector{T}, name::Symbol; tag::Int64) where T <: AbstractResource + # if the getter function exists in GenX then use it, otherwise get the attribute directly + if isdefined(GenX, name) + f = getfield(GenX, name) + return ids_with_policy(rs, f, tag=tag) end + return findall(r -> getproperty(r, Symbol(string(name, "_$tag"))) > 0, rs) +end + +function ids_with_policy(rs::Vector{T}, name::AbstractString; tag::Int64) where T <: AbstractResource + return ids_with_policy(rs, Symbol(lowercase(name)), tag=tag) +end + +""" + const default_zero = 0 + +Default value for resource attributes. +""" +const default_zero = 0 + +# INTERFACE FOR ALL RESOURCES +resource_name(r::AbstractResource) = r.resource +resource_name(rs::Vector{T}) where T <: AbstractResource = rs.resource + +resource_id(r::AbstractResource)::Int64 = r.id +resource_id(rs::Vector{T}) where T <: AbstractResource = resource_id.(rs) +resource_type_mga(r::AbstractResource) = r.resource_type + +zone_id(r::AbstractResource) = r.zone +zone_id(rs::Vector{T}) where T <: AbstractResource = rs.zone + +const default_minmax_cap = -1. +max_cap_mw(r::AbstractResource) = get(r, :max_cap_mw, default_minmax_cap) +min_cap_mw(r::AbstractResource) = get(r, :min_cap_mw, default_minmax_cap) + +max_cap_mwh(r::AbstractResource) = get(r, :max_cap_mwh, default_minmax_cap) +min_cap_mwh(r::AbstractResource) = get(r, :min_cap_mwh, default_minmax_cap) + +max_charge_cap_mw(r::AbstractResource) = get(r, :max_charge_cap_mw, default_minmax_cap) +min_charge_cap_mw(r::AbstractResource) = get(r, :min_charge_cap_mw, default_minmax_cap) + +existing_cap_mw(r::AbstractResource) = r.existing_cap_mw +existing_cap_mwh(r::AbstractResource) = get(r, :existing_cap_mwh, default_zero) +existing_charge_cap_mw(r::AbstractResource) = get(r, :existing_charge_cap_mw, default_zero) + +cap_size(r::AbstractResource) = get(r, :cap_size, default_zero) + +num_vre_bins(r::AbstractResource) = get(r, :num_vre_bins, default_zero) + +hydro_energy_to_power_ratio(r::AbstractResource) = get(r, :hydro_energy_to_power_ratio, default_zero) + +qualified_hydrogen_supply(r::AbstractResource) = get(r, :qualified_hydrogen_supply, default_zero) + +# costs +reg_cost(r::AbstractResource) = get(r, :reg_cost, default_zero) +reg_max(r::AbstractResource)::Float64 = get(r, :reg_max, default_zero) +rsv_cost(r::AbstractResource) = get(r, :rsv_cost, default_zero) +rsv_max(r::AbstractResource) = get(r, :rsv_max, default_zero) +inv_cost_per_mwyr(r::AbstractResource) = get(r, :inv_cost_per_mwyr, default_zero) +fixed_om_cost_per_mwyr(r::AbstractResource) = get(r, :fixed_om_cost_per_mwyr, default_zero) +var_om_cost_per_mwh(r::AbstractResource) = get(r, :var_om_cost_per_mwh, default_zero) +inv_cost_per_mwhyr(r::AbstractResource) = get(r, :inv_cost_per_mwhyr, default_zero) +fixed_om_cost_per_mwhyr(r::AbstractResource) = get(r, :fixed_om_cost_per_mwhyr, default_zero) +inv_cost_charge_per_mwyr(r::AbstractResource) = get(r, :inv_cost_charge_per_mwyr, default_zero) +fixed_om_cost_charge_per_mwyr(r::AbstractResource) = get(r, :fixed_om_cost_charge_per_mwyr, default_zero) +start_cost_per_mw(r::AbstractResource) = get(r, :start_cost_per_mw, default_zero) + +# fuel +fuel(r::AbstractResource) = get(r, :fuel, "None") +start_fuel_mmbtu_per_mw(r::AbstractResource) = get(r, :start_fuel_mmbtu_per_mw, default_zero) +heat_rate_mmbtu_per_mwh(r::AbstractResource) = get(r, :heat_rate_mmbtu_per_mwh, default_zero) +co2_capture_fraction(r::AbstractResource) = get(r, :co2_capture_fraction, default_zero) +co2_capture_fraction_startup(r::AbstractResource) = get(r, :co2_capture_fraction_startup, default_zero) +ccs_disposal_cost_per_metric_ton(r::AbstractResource) = get(r, :ccs_disposal_cost_per_metric_ton, default_zero) +biomass(r::AbstractResource) = get(r, :biomass, default_zero) + +# Reservoir hydro and storage +const default_percent = 1.0 +efficiency_up(r::T) where T <: Union{Hydro,Storage} = get(r, :eff_up, default_percent) +efficiency_down(r::T) where T <: Union{Hydro,Storage} = get(r, :eff_down, default_percent) + +# Ramp up and down +const VarPower = Union{Electrolyzer, Hydro, Thermal} +min_power(r::VarPower) = get(r, :min_power, default_zero) +ramp_up_fraction(r::VarPower) = get(r, :ramp_up_percentage, default_percent) +ramp_down_fraction(r::VarPower) = get(r, :ramp_dn_percentage, default_percent) + +# Retirement - Multistage +lifetime(r::Storage) = get(r, :lifetime, 15) +lifetime(r::AbstractResource) = get(r, :lifetime, 30) +capital_recovery_period(r::Storage) = get(r, :capital_recovery_period, 15) +capital_recovery_period(r::AbstractResource) = get(r, :capital_recovery_period, 30) +tech_wacc(r::AbstractResource) = get(r, :wacc, default_zero) +min_retired_cap_mw(r::AbstractResource) = get(r, :min_retired_cap_mw, default_zero) +min_retired_energy_cap_mw(r::AbstractResource) = get(r, :min_retired_energy_cap_mw, default_zero) +min_retired_charge_cap_mw(r::AbstractResource) = get(r, :min_retired_charge_cap_mw, default_zero) +cum_min_retired_cap_mw(r::AbstractResource) = r.cum_min_retired_cap_mw +cum_min_retired_energy_cap_mw(r::AbstractResource) = r.cum_min_retired_energy_cap_mw +cum_min_retired_charge_cap_mw(r::AbstractResource) = r.cum_min_retired_charge_cap_mw + +# MGA +mga(r::AbstractResource) = get(r, :mga, default_zero) + +# policies +esr(r::AbstractResource; tag::Int64) = get(r, Symbol("esr_$tag"), default_zero) +min_cap(r::AbstractResource; tag::Int64) = get(r, Symbol("min_cap_$tag"), default_zero) +max_cap(r::AbstractResource; tag::Int64) = get(r, Symbol("max_cap_$tag"), default_zero) +derating_factor(r::AbstractResource; tag::Int64) = get(r, Symbol("derating_factor_$tag"), default_zero) + +# write_outputs +region(r::AbstractResource) = r.region +cluster(r::AbstractResource) = r.cluster + +# UTILITY FUNCTIONS for working with resources +is_LDS(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :lds, default_zero) == 1, rs) +is_SDS(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :lds, default_zero) == 0, rs) + +ids_with_mga(rs::Vector{T}) where T <: AbstractResource = findall(r -> mga(r) == 1, rs) + +ids_with_fuel(rs::Vector{T}) where T <: AbstractResource = findall(r -> fuel(r) != "None", rs) + +is_buildable(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :new_build, default_zero) == 1, rs) +is_retirable(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :can_retire, default_zero) == 1, rs) + +# Retrofit +ids_with_retrofit(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :retro, default_zero) == 1, rs) + +# Unit commitment +ids_with_unit_commitment(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Thermal) && r.model == 1, rs) +# Without unit commitment +no_unit_commitment(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Thermal) && r.model == 2, rs) + +# Reserves +# cap reserve margin +ids_with_regulation_reserve_requirements(rs::Vector{T}) where T <: AbstractResource = findall(r -> reg_max(r) > 0, rs) +ids_with_spinning_reserve_requirements(rs::Vector{T}) where T <: AbstractResource = findall(r -> rsv_max(r) > 0, rs) + +# Maintenance +ids_with_maintenance(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :maint, default_zero) == 1, rs) +maintenance_duration(r::AbstractResource) = get(r, :maintenance_duration, default_zero) +maintenance_cycle_length_years(r::AbstractResource) = get(r, :maintenance_cycle_length_years, default_zero) +maintenance_begin_cadence(r::AbstractResource) = get(r, :maintenance_begin_cadence, default_zero) + +# STORAGE interface +""" + storage(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all storage resources in the vector `rs`. +""" +storage(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Storage), rs) + +self_discharge(r::Storage) = r.self_disch +min_duration(r::Storage) = r.min_duration +max_duration(r::Storage) = r.max_duration +var_om_cost_per_mwh_in(r::Storage) = get(r, :var_om_cost_per_mwh_in, default_zero) +symmetric_storage(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Storage) && r.model == 1, rs) +asymmetric_storage(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Storage) && r.model == 2, rs) + +# HYDRO interface +""" + hydro(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all hydro resources in the vector `rs`. +""" +hydro(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Hydro), rs) + +# THERM interface +""" + thermal(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all thermal resources in the vector `rs`. +""" +thermal(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Thermal), rs) +up_time(r::Thermal) = get(r, :up_time, default_zero) +down_time(r::Thermal) = get(r, :down_time, default_zero) +pwfu_fuel_usage_zero_load_mmbtu_per_h(r::Thermal) = get(r, :pwfu_fuel_usage_zero_load_mmbtu_per_h, default_zero) + +# VRE interface +""" + vre(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all Vre resources in the vector `rs`. +""" +vre(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Vre), rs) + +# ELECTROLYZER interface +""" + electrolyzer(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all electrolyzer resources in the vector `rs`. +""" +electrolyzer(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,Electrolyzer), rs) +electrolyzer_min_kt(r::Electrolyzer) = r.electrolyzer_min_kt +hydrogen_mwh_per_tonne(r::Electrolyzer) = r.hydrogen_mwh_per_tonne +hydrogen_price_per_tonne(r::Electrolyzer) = r.hydrogen_price_per_tonne + +# FLEX_DEMAND interface +""" + flex_demand(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all flexible demand resources in the vector `rs`. +""" +flex_demand(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,FlexDemand), rs) +flexible_demand_energy_eff(r::FlexDemand) = r.flexible_demand_energy_eff +max_flexible_demand_delay(r::FlexDemand) = r.max_flexible_demand_delay +max_flexible_demand_advance(r::FlexDemand) = r.max_flexible_demand_advance +var_om_cost_per_mwh_in(r::FlexDemand) = get(r, :var_om_cost_per_mwh_in, default_zero) + +# MUST_RUN interface +""" + must_run(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all must-run resources in the vector `rs`. +""" +must_run(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,MustRun), rs) + +# VRE_STOR interface +""" + vre_stor(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all VRE_STOR resources in the vector `rs`. +""" +vre_stor(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage), rs) +technology(r::VreStorage) = r.technology +self_discharge(r::VreStorage) = r.self_disch + +""" + solar(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all co-located solar resources in the vector `rs`. +""" +solar(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.solar != 0, rs) + +""" + wind(rs::Vector{T}) where T <: AbstractResource + +Returns the indices of all co-located wind resources in the vector `rs`. +""" +wind(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.wind != 0, rs) + +""" + storage_dc_discharge(rs::Vector{T}) where T <: AbstractResource +Returns the indices of all co-located storage resources in the vector `rs` that discharge DC. +""" +storage_dc_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_discharge >= 1, rs) +storage_sym_dc_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_discharge == 1, rs) +storage_asym_dc_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_discharge == 2, rs) + +""" + storage_dc_charge(rs::Vector{T}) where T <: AbstractResource + Returns the indices of all co-located storage resources in the vector `rs` that charge DC. +""" +storage_dc_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_charge >= 1, rs) +storage_sym_dc_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_charge == 1, rs) +storage_asym_dc_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_dc_charge == 2, rs) + +""" + storage_ac_discharge(rs::Vector{T}) where T <: AbstractResource +Returns the indices of all co-located storage resources in the vector `rs` that discharge AC. +""" +storage_ac_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_discharge >= 1, rs) +storage_sym_ac_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_discharge == 1, rs) +storage_asym_ac_discharge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_discharge == 2, rs) + +""" + storage_ac_charge(rs::Vector{T}) where T <: AbstractResource +Returns the indices of all co-located storage resources in the vector `rs` that charge AC. +""" +storage_ac_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_charge >= 1, rs) +storage_sym_ac_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_charge == 1, rs) +storage_asym_ac_charge(rs::Vector{T}) where T <: AbstractResource = findall(r -> isa(r,VreStorage) && r.stor_ac_charge == 2, rs) + +is_LDS_VRE_STOR(rs::Vector{T}) where T <: AbstractResource = findall(r -> get(r, :lds_vre_stor, default_zero) != 0, rs) + +# loop over the above attributes and define function interfaces for each one +for attr in (:existing_cap_solar_mw, + :existing_cap_wind_mw, + :existing_cap_inverter_mw, + :existing_cap_charge_dc_mw, + :existing_cap_charge_ac_mw, + :existing_cap_discharge_dc_mw, + :existing_cap_discharge_ac_mw) + @eval @interface $attr +end + +for attr in (:max_cap_solar_mw, + :max_cap_wind_mw, + :max_cap_inverter_mw, + :max_cap_charge_dc_mw, + :max_cap_charge_ac_mw, + :max_cap_discharge_dc_mw, + :max_cap_discharge_ac_mw) + @eval @interface $attr +end + +for attr in (:min_cap_solar_mw, + :min_cap_wind_mw, + :min_cap_inverter_mw, + :min_cap_charge_dc_mw, + :min_cap_charge_ac_mw, + :min_cap_discharge_dc_mw, + :min_cap_discharge_ac_mw, + :inverter_ratio_solar, + :inverter_ratio_wind,) + @eval @interface $attr +end + +for attr in (:etainverter, + :inv_cost_inverter_per_mwyr, + :inv_cost_solar_per_mwyr, + :inv_cost_wind_per_mwyr, + :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_inverter_cost_per_mwyr, + :fixed_om_solar_cost_per_mwyr, + :fixed_om_wind_cost_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_dc, + :var_om_cost_per_mwh_discharge_dc, + :var_om_cost_per_mwh_charge_ac, + :var_om_cost_per_mwh_discharge_ac, + :eff_up_ac, + :eff_down_ac, + :eff_up_dc, + :eff_down_dc, + :power_to_energy_ac, + :power_to_energy_dc) + @eval @interface $attr default_zero VreStorage +end + +# Multistage +for attr in (:capital_recovery_period_dc, + :capital_recovery_period_solar, + :capital_recovery_period_wind, + :capital_recovery_period_charge_dc, + :capital_recovery_period_discharge_dc, + :capital_recovery_period_charge_ac, + :capital_recovery_period_discharge_ac, + :tech_wacc_dc, + :tech_wacc_solar, + :tech_wacc_wind, + :tech_wacc_charge_dc, + :tech_wacc_discharge_dc, + :tech_wacc_charge_ac, + :tech_wacc_discharge_ac) + @eval @interface $attr default_zero VreStorage end -function dataframerow_to_dict(dfr::DataFrameRow) - return Dict(pairs(dfr)) +# Endogenous retirement +for attr in (:min_retired_cap_inverter_mw, + :min_retired_cap_solar_mw, + :min_retired_cap_wind_mw, + :min_retired_cap_discharge_dc_mw, + :min_retired_cap_charge_dc_mw, + :min_retired_cap_discharge_ac_mw, + :min_retired_cap_charge_ac_mw,) + @eval @interface $attr default_zero VreStorage + cum_attr = Symbol("cum_"*String(attr)) + @eval @interface $cum_attr default_zero VreStorage end + +## policies +# co-located storage +esr_vrestor(r::AbstractResource; tag::Int64) = get(r, Symbol("esr_vrestor_$tag"), default_zero) +min_cap_stor(r::AbstractResource; tag::Int64) = get(r, Symbol("min_cap_stor_$tag"), default_zero) +max_cap_stor(r::AbstractResource; tag::Int64) = get(r, Symbol("max_cap_stor_$tag"), default_zero) +# vre part +min_cap_solar(r::AbstractResource; tag::Int64) = get(r, Symbol("min_cap_solar_$tag"), default_zero) +max_cap_solar(r::AbstractResource; tag::Int64) = get(r, Symbol("max_cap_solar_$tag"), default_zero) +min_cap_wind(r::AbstractResource; tag::Int64) = get(r, Symbol("min_cap_wind_$tag"), default_zero) +max_cap_wind(r::AbstractResource; tag::Int64) = get(r, Symbol("max_cap_wind_$tag"), default_zero) + +## Utility functions for working with resources +in_zone(r::AbstractResource, zone::Int) = zone_id(r) == zone +resources_in_zone(rs::Vector{AbstractResource}, zone::Int) = filter(r -> in_zone(r, zone), rs) + +@doc raw""" + resources_in_zone_by_rid(rs::Vector{<:AbstractResource}, zone::Int) +Find R_ID's of resources in a zone. +""" +function resources_in_zone_by_rid(rs::Vector{<:AbstractResource}, zone::Int) + return resource_id.(rs[zone_id.(rs) .== zone]) +end + +""" + resource_by_name(rs::Vector{AbstractResource}, name::AbstractString) + +Find the resource with `name` in the vector `rs`. + +# Arguments +- `rs`: A vector of resources. +- `name`: The name of the resource. + +# Returns +- `AbstractResource`: The resource with the name `name`. +""" +function resource_by_name(rs::Vector{AbstractResource}, name::AbstractString) + r_id = findfirst(r -> resource_name(r) == name, rs) + # check that the resource exists + isnothing(r_id) && error("Resource $name not found in resource data. \nHint: Make sure that the resource names in input files match the ones in the \"resource\" folder.\n") + return rs[r_id] +end + + diff --git a/src/model/resources/retrofits/retrofits.jl b/src/model/resources/retrofits/retrofits.jl index d8c2eef975..ba6740ef94 100644 --- a/src/model/resources/retrofits/retrofits.jl +++ b/src/model/resources/retrofits/retrofits.jl @@ -25,7 +25,7 @@ function retrofit(EP::Model, inputs::Dict) println("Retrofit Resources Module") G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) - RESOURCES = inputs["RESOURCES"] # Set of all resources by name + RESOURCES = inputs["RESOURCE_NAMES"] # Set of all resources by name RETRO = inputs["RETRO"] # Set of all retrofit resources by ID NEW_CAP = inputs["NEW_CAP"] # Set of all resources eligible for capacity expansion by ID RET_CAP = inputs["RET_CAP"] # Set of all resources eligible for capacity retirements by ID @@ -33,7 +33,7 @@ function retrofit(EP::Model, inputs::Dict) RETRO_SOURCES = inputs["RETROFIT_SOURCES"] # Source technologies by name for each retrofit [1:G] RETRO_SOURCE_IDS = inputs["RETROFIT_SOURCE_IDS"] # Source technologies by ID for each retrofit [1:G] RETRO_EFFICIENCY = inputs["RETROFIT_EFFICIENCIES"] # Ratio of installed retrofit capacity to source capacity [0:1] (indexed by retrofit tech r, source # i) - CAP_SIZE = inputs["dfGen"][!, :Cap_Size] # Capacity sizes for resources subject to unit commitment + CAP_SIZE = cap_size.(inputs["RESOURCES"]) # Capacity sizes for resources subject to unit commitment NUM_RETRO_SOURCES = inputs["NUM_RETROFIT_SOURCES"] # Number of possible sources for a given retrofit resource ### Variables ### diff --git a/src/model/resources/storage/investment_charge.jl b/src/model/resources/storage/investment_charge.jl index ea79649509..77f67f76bc 100644 --- a/src/model/resources/storage/investment_charge.jl +++ b/src/model/resources/storage/investment_charge.jl @@ -42,7 +42,8 @@ function investment_charge!(EP::Model, inputs::Dict, setup::Dict) println("Charge Investment Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + MultiStage = setup["MultiStage"] STOR_ASYMMETRIC = inputs["STOR_ASYMMETRIC"] # Set of storage resources with asymmetric (separte) charge/discharge capacity components @@ -69,7 +70,7 @@ function investment_charge!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapCharge[y in STOR_ASYMMETRIC], vEXISTINGCAPCHARGE[y]) else - @expression(EP, eExistingCapCharge[y in STOR_ASYMMETRIC], dfGen[y,:Existing_Charge_Cap_MW]) + @expression(EP, eExistingCapCharge[y in STOR_ASYMMETRIC], existing_charge_cap_mw(gen[y])) end @expression(EP, eTotalCapCharge[y in STOR_ASYMMETRIC], @@ -90,9 +91,9 @@ function investment_charge!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new charge capacity, fixed costs are only O&M costs @expression(EP, eCFixCharge[y in STOR_ASYMMETRIC], if y in NEW_CAP_CHARGE # Resources eligible for new charge capacity - dfGen[y,:Inv_Cost_Charge_per_MWyr]*vCAPCHARGE[y] + dfGen[y,:Fixed_OM_Cost_Charge_per_MWyr]*eTotalCapCharge[y] + inv_cost_charge_per_mwyr(gen[y])*vCAPCHARGE[y] + fixed_om_cost_charge_per_mwyr(gen[y])*eTotalCapCharge[y] else - dfGen[y,:Fixed_OM_Cost_Charge_per_MWyr]*eTotalCapCharge[y] + fixed_om_cost_charge_per_mwyr(gen[y])*eTotalCapCharge[y] end ) @@ -113,7 +114,7 @@ function investment_charge!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 # Existing capacity variable is equal to existing capacity specified in the input file - @constraint(EP, cExistingCapCharge[y in STOR_ASYMMETRIC], EP[:vEXISTINGCAPCHARGE][y] == dfGen[y,:Existing_Charge_Cap_MW]) + @constraint(EP, cExistingCapCharge[y in STOR_ASYMMETRIC], EP[:vEXISTINGCAPCHARGE][y] == existing_charge_cap_mw(gen[y])) end ## Constraints on retirements and capacity additions @@ -124,11 +125,11 @@ function investment_charge!(EP::Model, inputs::Dict, setup::Dict) # Constraint on maximum charge capacity (if applicable) [set input to -1 if no constraint on maximum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is >= Max_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cMaxCapCharge[y in intersect(dfGen[dfGen.Max_Charge_Cap_MW.>0,:R_ID], STOR_ASYMMETRIC)], eTotalCapCharge[y] <= dfGen[y,:Max_Charge_Cap_MW]) + @constraint(EP, cMaxCapCharge[y in intersect(ids_with_positive(gen, max_charge_cap_mw), STOR_ASYMMETRIC)], eTotalCapCharge[y] <= max_charge_cap_mw(gen[y])) # Constraint on minimum charge capacity (if applicable) [set input to -1 if no constraint on minimum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is <= Min_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cMinCapCharge[y in intersect(dfGen[dfGen.Min_Charge_Cap_MW.>0,:R_ID], STOR_ASYMMETRIC)], eTotalCapCharge[y] >= dfGen[y,:Min_Charge_Cap_MW]) + @constraint(EP, cMinCapCharge[y in intersect(ids_with_positive(gen, min_charge_cap_mw), STOR_ASYMMETRIC)], eTotalCapCharge[y] >= min_charge_cap_mw(gen[y])) end diff --git a/src/model/resources/storage/investment_energy.jl b/src/model/resources/storage/investment_energy.jl index 7ef1a6d96c..35757fca6b 100644 --- a/src/model/resources/storage/investment_energy.jl +++ b/src/model/resources/storage/investment_energy.jl @@ -45,7 +45,8 @@ function investment_energy!(EP::Model, inputs::Dict, setup::Dict) println("Storage Investment Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + MultiStage = setup["MultiStage"] STOR_ALL = inputs["STOR_ALL"] # Set of all storage resources @@ -71,7 +72,7 @@ function investment_energy!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapEnergy[y in STOR_ALL], vEXISTINGCAPENERGY[y]) else - @expression(EP, eExistingCapEnergy[y in STOR_ALL], dfGen[y,:Existing_Cap_MWh]) + @expression(EP, eExistingCapEnergy[y in STOR_ALL], existing_cap_mwh(gen[y])) end @expression(EP, eTotalCapEnergy[y in STOR_ALL], @@ -92,9 +93,9 @@ function investment_energy!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new energy capacity, fixed costs are only O&M costs @expression(EP, eCFixEnergy[y in STOR_ALL], if y in NEW_CAP_ENERGY # Resources eligible for new capacity - dfGen[y,:Inv_Cost_per_MWhyr]*vCAPENERGY[y] + dfGen[y,:Fixed_OM_Cost_per_MWhyr]*eTotalCapEnergy[y] + inv_cost_per_mwhyr(gen[y])*vCAPENERGY[y] + fixed_om_cost_per_mwhyr(gen[y])*eTotalCapEnergy[y] else - dfGen[y,:Fixed_OM_Cost_per_MWhyr]*eTotalCapEnergy[y] + fixed_om_cost_per_mwhyr(gen[y])*eTotalCapEnergy[y] end ) @@ -114,7 +115,7 @@ function investment_energy!(EP::Model, inputs::Dict, setup::Dict) ### Constraints ### if MultiStage == 1 - @constraint(EP, cExistingCapEnergy[y in STOR_ALL], EP[:vEXISTINGCAPENERGY][y] == dfGen[y,:Existing_Cap_MWh]) + @constraint(EP, cExistingCapEnergy[y in STOR_ALL], EP[:vEXISTINGCAPENERGY][y] == existing_cap_mwh(gen[y])) end ## Constraints on retirements and capacity additions @@ -124,14 +125,14 @@ function investment_energy!(EP::Model, inputs::Dict, setup::Dict) ## Constraints on new built energy capacity # Constraint on maximum energy capacity (if applicable) [set input to -1 if no constraint on maximum energy capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MWh is >= Max_Cap_MWh and lead to infeasabilty - @constraint(EP, cMaxCapEnergy[y in intersect(dfGen[dfGen.Max_Cap_MWh.>0,:R_ID], STOR_ALL)], eTotalCapEnergy[y] <= dfGen[y,:Max_Cap_MWh]) + @constraint(EP, cMaxCapEnergy[y in intersect(ids_with_positive(gen, max_cap_mwh), STOR_ALL)], eTotalCapEnergy[y] <= max_cap_mwh(gen[y])) # Constraint on minimum energy capacity (if applicable) [set input to -1 if no constraint on minimum energy apacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MWh is <= Min_Cap_MWh and lead to infeasabilty - @constraint(EP, cMinCapEnergy[y in intersect(dfGen[dfGen.Min_Cap_MWh.>0,:R_ID], STOR_ALL)], eTotalCapEnergy[y] >= dfGen[y,:Min_Cap_MWh]) + @constraint(EP, cMinCapEnergy[y in intersect(ids_with_positive(gen, min_cap_mwh), STOR_ALL)], eTotalCapEnergy[y] >= min_cap_mwh(gen[y])) # Max and min constraints on energy storage capacity built (as proportion to discharge power capacity) - @constraint(EP, cMinCapEnergyDuration[y in STOR_ALL], EP[:eTotalCapEnergy][y] >= dfGen[y,:Min_Duration] * EP[:eTotalCap][y]) - @constraint(EP, cMaxCapEnergyDuration[y in STOR_ALL], EP[:eTotalCapEnergy][y] <= dfGen[y,:Max_Duration] * EP[:eTotalCap][y]) + @constraint(EP, cMinCapEnergyDuration[y in STOR_ALL], EP[:eTotalCapEnergy][y] >= min_duration(gen[y]) * EP[:eTotalCap][y]) + @constraint(EP, cMaxCapEnergyDuration[y in STOR_ALL], EP[:eTotalCapEnergy][y] <= max_duration(gen[y]) * EP[:eTotalCap][y]) end diff --git a/src/model/resources/storage/long_duration_storage.jl b/src/model/resources/storage/long_duration_storage.jl index 865de0108f..9eb904c8b8 100644 --- a/src/model/resources/storage/long_duration_storage.jl +++ b/src/model/resources/storage/long_duration_storage.jl @@ -66,12 +66,10 @@ function long_duration_storage!(EP::Model, inputs::Dict, setup::Dict) println("Long Duration Storage Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + CapacityReserveMargin = setup["CapacityReserveMargin"] - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) - T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones REP_PERIOD = inputs["REP_PERIOD"] # Number of representative periods STOR_LONG_DURATION = inputs["STOR_LONG_DURATION"] @@ -111,8 +109,8 @@ function long_duration_storage!(EP::Model, inputs::Dict, setup::Dict) # Alternative to cSoCBalStart constraint which is included when not modeling operations wrapping and long duration storage # Note: tw_min = hours_per_subperiod*(w-1)+1; tw_max = hours_per_subperiod*w @constraint(EP, cSoCBalLongDurationStorageStart[w=1:REP_PERIOD, y in STOR_LONG_DURATION], - EP[:vS][y,hours_per_subperiod*(w-1)+1] == (1-dfGen[y,:Self_Disch])*(EP[:vS][y,hours_per_subperiod*w]-vdSOC[y,w]) - -(1/dfGen[y,:Eff_Down]*EP[:vP][y,hours_per_subperiod*(w-1)+1])+(dfGen[y,:Eff_Up]*EP[:vCHARGE][y,hours_per_subperiod*(w-1)+1])) + EP[:vS][y,hours_per_subperiod*(w-1)+1] == (1-self_discharge(gen[y]))*(EP[:vS][y,hours_per_subperiod*w]-vdSOC[y,w]) + -(1/efficiency_down(gen[y])*EP[:vP][y,hours_per_subperiod*(w-1)+1])+(efficiency_up(gen[y])*EP[:vCHARGE][y,hours_per_subperiod*(w-1)+1])) # Storage at beginning of period w = storage at beginning of period w-1 + storage built up in period w (after n representative periods) ## Multiply storage build up term from prior period with corresponding weight @@ -137,8 +135,8 @@ function long_duration_storage!(EP::Model, inputs::Dict, setup::Dict) # Alternative to cVSoCBalStart constraint which is included when not modeling operations wrapping and long duration storage # Note: tw_min = hours_per_subperiod*(w-1)+1; tw_max = hours_per_subperiod*w @constraint(EP, cVSoCBalLongDurationStorageStart[w=1:REP_PERIOD, y in STOR_LONG_DURATION], - EP[:vCAPRES_socinreserve][y,hours_per_subperiod*(w-1)+1] == (1-dfGen[y,:Self_Disch])*(EP[:vCAPRES_socinreserve][y,hours_per_subperiod*w]-vCAPRES_dsoc[y,w]) - +(1/dfGen[y,:Eff_Down]*EP[:vCAPRES_discharge][y,hours_per_subperiod*(w-1)+1])-(dfGen[y,:Eff_Up]*EP[:vCAPRES_charge][y,hours_per_subperiod*(w-1)+1])) + EP[:vCAPRES_socinreserve][y,hours_per_subperiod*(w-1)+1] == (1-self_discharge(gen[y]))*(EP[:vCAPRES_socinreserve][y,hours_per_subperiod*w]-vCAPRES_dsoc[y,w]) + +(1/efficiency_down(gen[y])*EP[:vCAPRES_discharge][y,hours_per_subperiod*(w-1)+1])-(efficiency_up(gen[y])*EP[:vCAPRES_charge][y,hours_per_subperiod*(w-1)+1])) # Storage held in reserve at beginning of period w = storage at beginning of period w-1 + storage built up in period w (after n representative periods) ## Multiply storage build up term from prior period with corresponding weight diff --git a/src/model/resources/storage/storage.jl b/src/model/resources/storage/storage.jl index 1bbad43e97..609e0911be 100644 --- a/src/model/resources/storage/storage.jl +++ b/src/model/resources/storage/storage.jl @@ -131,7 +131,7 @@ The above reserve related constraints are established by ```storage_all_reserves function storage!(EP::Model, inputs::Dict, setup::Dict) println("Storage Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] STOR_ALL = inputs["STOR_ALL"] @@ -166,14 +166,14 @@ function storage!(EP::Model, inputs::Dict, setup::Dict) # ESR Lossses if EnergyShareRequirement >= 1 if IncludeLossesInESR == 1 - @expression(EP, eESRStor[ESR=1:inputs["nESR"]], sum(inputs["dfESR"][z,ESR]*sum(EP[:eELOSS][y] for y in intersect(dfGen[dfGen.Zone.==z,:R_ID],STOR_ALL)) for z=findall(x->x>0,inputs["dfESR"][:,ESR]))) + @expression(EP, eESRStor[ESR=1:inputs["nESR"]], sum(inputs["dfESR"][z,ESR]*sum(EP[:eELOSS][y] for y in intersect(resources_in_zone_by_rid(gen,z),STOR_ALL)) for z=findall(x->x>0,inputs["dfESR"][:,ESR]))) add_similar_to_expression!(EP[:eESR], -eESRStor) end end # Capacity Reserves Margin policy if CapacityReserveMargin > 0 - @expression(EP, eCapResMarBalanceStor[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(dfGen[y,Symbol("CapRes_$res")] * (EP[:vP][y,t] + EP[:vCAPRES_discharge][y,t] - EP[:vCHARGE][y,t] - EP[:vCAPRES_charge][y,t]) for y in STOR_ALL)) + @expression(EP, eCapResMarBalanceStor[res=1:inputs["NCapacityReserveMargin"], t=1:T], sum(derating_factor(gen[y], tag=res) * (EP[:vP][y,t] + EP[:vCAPRES_discharge][y,t] - EP[:vCHARGE][y,t] - EP[:vCAPRES_charge][y,t]) for y in STOR_ALL)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceStor) end diff --git a/src/model/resources/storage/storage_all.jl b/src/model/resources/storage/storage_all.jl index 3573e3e55e..c44e88b241 100644 --- a/src/model/resources/storage/storage_all.jl +++ b/src/model/resources/storage/storage_all.jl @@ -7,13 +7,12 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) # Setup variables, constraints, and expressions common to all storage resources println("Storage Core Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] Reserves = setup["Reserves"] CapacityReserveMargin = setup["CapacityReserveMargin"] virtual_discharge_cost = inputs["VirtualChargeDischargeCost"] - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -53,7 +52,7 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) ## Objective Function Expressions ## #Variable costs of "charging" for technologies "y" during hour "t" in zone "z" - @expression(EP, eCVar_in[y in STOR_ALL,t=1:T], inputs["omega"][t]*dfGen[y,:Var_OM_Cost_per_MWh_In]*vCHARGE[y,t]) + @expression(EP, eCVar_in[y in STOR_ALL,t=1:T], inputs["omega"][t]*var_om_cost_per_mwh_in(gen[y])*vCHARGE[y,t]) # Sum individual resource contributions to variable charging costs to get total variable charging costs @expression(EP, eTotalCVarInT[t=1:T], sum(eCVar_in[y,t] for y in STOR_ALL)) @@ -78,7 +77,7 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) # Term to represent net dispatch from storage in any period @expression(EP, ePowerBalanceStor[t=1:T, z=1:Z], - sum(EP[:vP][y,t]-EP[:vCHARGE][y,t] for y in intersect(dfGen[dfGen.Zone.==z,:R_ID],STOR_ALL)) + sum(EP[:vP][y,t]-EP[:vCHARGE][y,t] for y in intersect(resources_in_zone_by_rid(gen,z),STOR_ALL)) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceStor) @@ -94,8 +93,8 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) CONSTRAINTSET = STOR_ALL end @constraint(EP, cSoCBalStart[t in START_SUBPERIODS, y in CONSTRAINTSET], EP[:vS][y,t] == - EP[:vS][y,t+hours_per_subperiod-1] - (1/dfGen[y,:Eff_Down] * EP[:vP][y,t]) - + (dfGen[y,:Eff_Up]*EP[:vCHARGE][y,t]) - (dfGen[y,:Self_Disch] * EP[:vS][y,t+hours_per_subperiod-1])) + EP[:vS][y,t+hours_per_subperiod-1] - (1/efficiency_down(gen[y]) * EP[:vP][y,t]) + + (efficiency_up(gen[y])*EP[:vCHARGE][y,t]) - (self_discharge(gen[y]) * EP[:vS][y,t+hours_per_subperiod-1])) @constraints(EP, begin @@ -104,7 +103,7 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) # energy stored for the next hour cSoCBalInterior[t in INTERIOR_SUBPERIODS, y in STOR_ALL], EP[:vS][y,t] == - EP[:vS][y,t-1]-(1/dfGen[y,:Eff_Down]*EP[:vP][y,t])+(dfGen[y,:Eff_Up]*EP[:vCHARGE][y,t])-(dfGen[y,:Self_Disch]*EP[:vS][y,t-1]) + EP[:vS][y,t-1]-(1/efficiency_down(gen[y])*EP[:vP][y,t])+(efficiency_up(gen[y])*EP[:vCHARGE][y,t])-(self_discharge(gen[y])*EP[:vS][y,t-1]) end) # Storage discharge and charge power (and reserve contribution) related constraints: @@ -119,18 +118,18 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) # wrapping from end of sample period to start of sample period for energy capacity constraint @constraints(EP, begin [y in STOR_ALL, t=1:T], EP[:vP][y,t] + EP[:vCAPRES_discharge][y,t] <= EP[:eTotalCap][y] - [y in STOR_ALL, t=1:T], EP[:vP][y,t] + EP[:vCAPRES_discharge][y,t] <= EP[:vS][y, hoursbefore(hours_per_subperiod,t,1)]*dfGen[y,:Eff_Down] + [y in STOR_ALL, t=1:T], EP[:vP][y,t] + EP[:vCAPRES_discharge][y,t] <= EP[:vS][y, hoursbefore(hours_per_subperiod,t,1)]*efficiency_down(gen[y]) end) else @constraints(EP, begin [y in STOR_ALL, t=1:T], EP[:vP][y,t] <= EP[:eTotalCap][y] - [y in STOR_ALL, t=1:T], EP[:vP][y,t] <= EP[:vS][y, hoursbefore(hours_per_subperiod,t,1)]*dfGen[y,:Eff_Down] + [y in STOR_ALL, t=1:T], EP[:vP][y,t] <= EP[:vS][y, hoursbefore(hours_per_subperiod,t,1)]*efficiency_down(gen[y]) end) end end # From CO2 Policy module - expr = @expression(EP, [z=1:Z], sum(EP[:eELOSS][y] for y in intersect(STOR_ALL, dfGen[dfGen[!,:Zone].==z,:R_ID]))) + expr = @expression(EP, [z=1:Z], sum(EP[:eELOSS][y] for y in intersect(STOR_ALL, resources_in_zone_by_rid(gen,z)))) add_similar_to_expression!(EP[:eELOSSByZone], expr) # Capacity Reserve Margin policy @@ -140,12 +139,12 @@ function storage_all!(EP::Model, inputs::Dict, setup::Dict) # Links energy held in reserve in first time step with decisions in last time step of each subperiod # We use a modified formulation of this constraint (cVSoCBalLongDurationStorageStart) when operations wrapping and long duration storage are being modeled @constraint(EP, cVSoCBalStart[t in START_SUBPERIODS, y in CONSTRAINTSET], EP[:vCAPRES_socinreserve][y,t] == - EP[:vCAPRES_socinreserve][y,t+hours_per_subperiod-1] + (1/dfGen[y,:Eff_Down] * EP[:vCAPRES_discharge][y,t]) - - (dfGen[y,:Eff_Up]*EP[:vCAPRES_charge][y,t]) - (dfGen[y,:Self_Disch] * EP[:vCAPRES_socinreserve][y,t+hours_per_subperiod-1])) + EP[:vCAPRES_socinreserve][y,t+hours_per_subperiod-1] + (1/efficiency_down(gen[y]) * EP[:vCAPRES_discharge][y,t]) + - (efficiency_up(gen[y])*EP[:vCAPRES_charge][y,t]) - (self_discharge(gen[y]) * EP[:vCAPRES_socinreserve][y,t+hours_per_subperiod-1])) # energy held in reserve for the next hour @constraint(EP, cVSoCBalInterior[t in INTERIOR_SUBPERIODS, y in STOR_ALL], EP[:vCAPRES_socinreserve][y,t] == - EP[:vCAPRES_socinreserve][y,t-1]+(1/dfGen[y,:Eff_Down]*EP[:vCAPRES_discharge][y,t])-(dfGen[y,:Eff_Up]*EP[:vCAPRES_charge][y,t])-(dfGen[y,:Self_Disch]*EP[:vCAPRES_socinreserve][y,t-1])) + EP[:vCAPRES_socinreserve][y,t-1]+(1/efficiency_down(gen[y])*EP[:vCAPRES_discharge][y,t])-(efficiency_up(gen[y])*EP[:vCAPRES_charge][y,t])-(self_discharge(gen[y])*EP[:vCAPRES_socinreserve][y,t-1])) # energy held in reserve acts as a lower bound on the total energy held in storage @constraint(EP, cSOCMinCapRes[t in 1:T, y in STOR_ALL], EP[:vS][y,t] >= EP[:vCAPRES_socinreserve][y,t]) @@ -154,7 +153,7 @@ end function storage_all_reserves!(EP::Model, inputs::Dict, setup::Dict) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] p = inputs["hours_per_subperiod"] CapacityReserveMargin = setup["CapacityReserveMargin"] > 1 @@ -177,14 +176,9 @@ function storage_all_reserves!(EP::Model, inputs::Dict, setup::Dict) eTotalCap = EP[:eTotalCap] eTotalCapEnergy = EP[:eTotalCapEnergy] - eff_up(y) = dfGen[y, :Eff_Up] - eff_down(y) = dfGen[y, :Eff_Down] - reg_max(y) = dfGen[y, :Reg_Max] - rsv_max(y) = dfGen[y, :Rsv_Max] - # Maximum storage contribution to reserves is a specified fraction of installed capacity - @constraint(EP, [y in STOR_REG, t in 1:T], vREG[y, t] <= reg_max(y) * eTotalCap[y]) - @constraint(EP, [y in STOR_RSV, t in 1:T], vRSV[y, t] <= rsv_max(y) * eTotalCap[y]) + @constraint(EP, [y in STOR_REG, t in 1:T], vREG[y, t] <= reg_max(gen[y]) * eTotalCap[y]) + @constraint(EP, [y in STOR_RSV, t in 1:T], vRSV[y, t] <= rsv_max(gen[y]) * eTotalCap[y]) # Actual contribution to regulation and reserves is sum of auxilary variables for portions contributed during charging and discharging @constraint(EP, [y in STOR_REG, t in 1:T], vREG[y, t] == vREG_charge[y, t] + vREG_discharge[y, t]) @@ -202,7 +196,7 @@ function storage_all_reserves!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, [y in STOR_REG, t in 1:T], vP[y, t] - vREG_discharge[y, t] >= 0) # Maximum charging rate plus contribution to regulation down must be less than available storage capacity - @constraint(EP, [y in STOR_REG, t in 1:T], eff_up(y)*(vCHARGE[y, t]+vREG_charge[y, t]) <= eTotalCapEnergy[y]-vS[y, hoursbefore(p,t,1)]) + @constraint(EP, [y in STOR_REG, t in 1:T], efficiency_up(gen[y])*(vCHARGE[y, t]+vREG_charge[y, t]) <= eTotalCapEnergy[y]-vS[y, hoursbefore(p,t,1)]) # Note: maximum charge rate is also constrained by maximum charge power capacity, but as this differs by storage type, # this constraint is set in functions below for each storage type @@ -216,5 +210,5 @@ function storage_all_reserves!(EP::Model, inputs::Dict, setup::Dict) # Maximum discharging rate and contribution to reserves up must be less than power rating @constraint(EP, [y in STOR_ALL, t in 1:T], expr[y, t] <= eTotalCap[y]) # Maximum discharging rate and contribution to reserves up must be less than available stored energy in prior period - @constraint(EP, [y in STOR_ALL, t in 1:T], expr[y, t] <= vS[y, hoursbefore(p,t,1)] * eff_down(y)) + @constraint(EP, [y in STOR_ALL, t in 1:T], expr[y, t] <= vS[y, hoursbefore(p,t,1)] * efficiency_down(gen[y])) end diff --git a/src/model/resources/storage/storage_asymmetric.jl b/src/model/resources/storage/storage_asymmetric.jl index 93e74ad025..98d375b171 100644 --- a/src/model/resources/storage/storage_asymmetric.jl +++ b/src/model/resources/storage/storage_asymmetric.jl @@ -10,7 +10,6 @@ function storage_asymmetric!(EP::Model, inputs::Dict, setup::Dict) println("Storage Resources with Asmymetric Charge/Discharge Capacity Module") - dfGen = inputs["dfGen"] Reserves = setup["Reserves"] CapacityReserveMargin = setup["CapacityReserveMargin"] diff --git a/src/model/resources/thermal/thermal.jl b/src/model/resources/thermal/thermal.jl index a849a16d46..894c2da2c0 100644 --- a/src/model/resources/thermal/thermal.jl +++ b/src/model/resources/thermal/thermal.jl @@ -4,7 +4,7 @@ The thermal module creates decision variables, expressions, and constraints rela This module uses the following 'helper' functions in separate files: ```thermal_commit()``` for thermal resources subject to unit commitment decisions and constraints (if any) and ```thermal_no_commit()``` for thermal resources not subject to unit commitment (if any). """ function thermal!(EP::Model, inputs::Dict, setup::Dict) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -13,8 +13,6 @@ function thermal!(EP::Model, inputs::Dict, setup::Dict) THERM_NO_COMMIT = inputs["THERM_NO_COMMIT"] THERM_ALL = inputs["THERM_ALL"] - dfGen = inputs["dfGen"] - if !isempty(THERM_COMMIT) thermal_commit!(EP, inputs, setup) end @@ -24,19 +22,18 @@ function thermal!(EP::Model, inputs::Dict, setup::Dict) end ##CO2 Polcy Module Thermal Generation by zone @expression(EP, eGenerationByThermAll[z=1:Z, t=1:T], # the unit is GW - sum(EP[:vP][y,t] for y in intersect(inputs["THERM_ALL"], dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(inputs["THERM_ALL"], resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:eGenerationByZone], eGenerationByThermAll) # Capacity Reserves Margin policy if setup["CapacityReserveMargin"] > 0 ncapres = inputs["NCapacityReserveMargin"] - capresfactor(y, capres) = dfGen[y, Symbol("CapRes_$capres")] @expression(EP, eCapResMarBalanceThermal[capres in 1:ncapres, t in 1:T], - sum(capresfactor(y, capres) * EP[:eTotalCap][y] for y in THERM_ALL)) + sum(derating_factor(gen[y], tag=capres) * EP[:eTotalCap][y] for y in THERM_ALL)) add_similar_to_expression!(EP[:eCapResMarBalance], eCapResMarBalanceThermal) - MAINT = resources_with_maintenance(dfGen) + MAINT = ids_with_maintenance(gen) if !isempty(intersect(MAINT, THERM_COMMIT)) thermal_maintenance_capacity_reserve_margin_adjustment!(EP, inputs) end @@ -44,7 +41,7 @@ function thermal!(EP::Model, inputs::Dict, setup::Dict) #= ##CO2 Polcy Module Thermal Generation by zone @expression(EP, eGenerationByThermAll[z=1:Z, t=1:T], # the unit is GW - sum(EP[:vP][y,t] for y in intersect(inputs["THERM_ALL"], dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(inputs["THERM_ALL"], resources_in_zone_by_rid(gen,z))) ) EP[:eGenerationByZone] += eGenerationByThermAll =# ##From main diff --git a/src/model/resources/thermal/thermal_commit.jl b/src/model/resources/thermal/thermal_commit.jl index b654f098ca..fc4be61a54 100644 --- a/src/model/resources/thermal/thermal_commit.jl +++ b/src/model/resources/thermal/thermal_commit.jl @@ -128,11 +128,11 @@ function thermal_commit!(EP::Model, inputs::Dict, setup::Dict) println("Thermal (Unit Commitment) Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - G = inputs["G"] # Number of resources + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) p = inputs["hours_per_subperiod"] #total number of hours per subperiod @@ -155,7 +155,7 @@ function thermal_commit!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceThermCommit[t=1:T, z=1:Z], - sum(EP[:vP][y,t] for y in intersect(THERM_COMMIT, dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(THERM_COMMIT, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceThermCommit) @@ -163,9 +163,9 @@ function thermal_commit!(EP::Model, inputs::Dict, setup::Dict) ### Capacitated limits on unit commitment decision variables (Constraints #1-3) @constraints(EP, begin - [y in THERM_COMMIT, t=1:T], EP[:vCOMMIT][y,t] <= EP[:eTotalCap][y]/dfGen[y,:Cap_Size] - [y in THERM_COMMIT, t=1:T], EP[:vSTART][y,t] <= EP[:eTotalCap][y]/dfGen[y,:Cap_Size] - [y in THERM_COMMIT, t=1:T], EP[:vSHUT][y,t] <= EP[:eTotalCap][y]/dfGen[y,:Cap_Size] + [y in THERM_COMMIT, t=1:T], EP[:vCOMMIT][y,t] <= EP[:eTotalCap][y]/cap_size(gen[y]) + [y in THERM_COMMIT, t=1:T], EP[:vSTART][y,t] <= EP[:eTotalCap][y]/cap_size(gen[y]) + [y in THERM_COMMIT, t=1:T], EP[:vSHUT][y,t] <= EP[:eTotalCap][y]/cap_size(gen[y]) end) # Commitment state constraint linking startup and shutdown decisions (Constraint #4) @@ -179,15 +179,15 @@ function thermal_commit!(EP::Model, inputs::Dict, setup::Dict) # Links last time step with first time step, ensuring position in hour 1 is within eligible ramp of final hour position # rampup constraints @constraint(EP,[y in THERM_COMMIT, t in 1:T], - EP[:vP][y,t] - EP[:vP][y, hoursbefore(p, t, 1)] + regulation_term[y,t] + reserves_term[y,t] <= dfGen[y,:Ramp_Up_Percentage]*dfGen[y,:Cap_Size]*(EP[:vCOMMIT][y,t]-EP[:vSTART][y,t]) - + min(inputs["pP_Max"][y,t],max(dfGen[y,:Min_Power],dfGen[y,:Ramp_Up_Percentage]))*dfGen[y,:Cap_Size]*EP[:vSTART][y,t] - - dfGen[y,:Min_Power]*dfGen[y,:Cap_Size]*EP[:vSHUT][y,t]) + EP[:vP][y,t] - EP[:vP][y, hoursbefore(p, t, 1)] + regulation_term[y,t] + reserves_term[y,t] <= ramp_up_fraction(gen[y])*cap_size(gen[y])*(EP[:vCOMMIT][y,t]-EP[:vSTART][y,t]) + + min(inputs["pP_Max"][y,t],max(min_power(gen[y]),ramp_up_fraction(gen[y])))*cap_size(gen[y])*EP[:vSTART][y,t] + - min_power(gen[y])*cap_size(gen[y])*EP[:vSHUT][y,t]) # rampdown constraints @constraint(EP,[y in THERM_COMMIT, t in 1:T], - EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] - regulation_term[y,t] + reserves_term[y, hoursbefore(p,t,1)] <= dfGen[y,:Ramp_Dn_Percentage]*dfGen[y,:Cap_Size]*(EP[:vCOMMIT][y,t]-EP[:vSTART][y,t]) - - dfGen[y,:Min_Power]*dfGen[y,:Cap_Size]*EP[:vSTART][y,t] - + min(inputs["pP_Max"][y,t],max(dfGen[y,:Min_Power],dfGen[y,:Ramp_Dn_Percentage]))*dfGen[y,:Cap_Size]*EP[:vSHUT][y,t]) + EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] - regulation_term[y,t] + reserves_term[y, hoursbefore(p,t,1)] <= ramp_down_fraction(gen[y])*cap_size(gen[y])*(EP[:vCOMMIT][y,t]-EP[:vSTART][y,t]) + - min_power(gen[y])*cap_size(gen[y])*EP[:vSTART][y,t] + + min(inputs["pP_Max"][y,t],max(min_power(gen[y]),ramp_down_fraction(gen[y])))*cap_size(gen[y])*EP[:vSHUT][y,t]) ### Minimum and maximum power output constraints (Constraints #7-8) @@ -197,28 +197,28 @@ function thermal_commit!(EP::Model, inputs::Dict, setup::Dict) else @constraints(EP, begin # Minimum stable power generated per technology "y" at hour "t" > Min power - [y in THERM_COMMIT, t=1:T], EP[:vP][y,t] >= dfGen[y,:Min_Power]*dfGen[y,:Cap_Size]*EP[:vCOMMIT][y,t] + [y in THERM_COMMIT, t=1:T], EP[:vP][y,t] >= min_power(gen[y])*cap_size(gen[y])*EP[:vCOMMIT][y,t] # Maximum power generated per technology "y" at hour "t" < Max power - [y in THERM_COMMIT, t=1:T], EP[:vP][y,t] <= inputs["pP_Max"][y,t]*dfGen[y,:Cap_Size]*EP[:vCOMMIT][y,t] + [y in THERM_COMMIT, t=1:T], EP[:vP][y,t] <= inputs["pP_Max"][y,t]*cap_size(gen[y])*EP[:vCOMMIT][y,t] end) end ### Minimum up and down times (Constraints #9-10) - Up_Time = zeros(Int, nrow(dfGen)) - Up_Time[THERM_COMMIT] .= Int.(floor.(dfGen[THERM_COMMIT,:Up_Time])) + Up_Time = zeros(Int, G) + Up_Time[THERM_COMMIT] .= Int.(floor.(up_time.(gen[THERM_COMMIT]))) @constraint(EP, [y in THERM_COMMIT, t in 1:T], EP[:vCOMMIT][y,t] >= sum(EP[:vSTART][y, u] for u in hoursbefore(p, t, 0:(Up_Time[y] - 1))) ) - Down_Time = zeros(Int, nrow(dfGen)) - Down_Time[THERM_COMMIT] .= Int.(floor.(dfGen[THERM_COMMIT,:Down_Time])) + Down_Time = zeros(Int, G) + Down_Time[THERM_COMMIT] .= Int.(floor.(down_time.(gen[THERM_COMMIT]))) @constraint(EP, [y in THERM_COMMIT, t in 1:T], - EP[:eTotalCap][y]/dfGen[y,:Cap_Size]-EP[:vCOMMIT][y,t] >= sum(EP[:vSHUT][y, u] for u in hoursbefore(p, t, 0:(Down_Time[y] - 1))) + EP[:eTotalCap][y]/cap_size(gen[y])-EP[:vCOMMIT][y,t] >= sum(EP[:vSHUT][y, u] for u in hoursbefore(p, t, 0:(Down_Time[y] - 1))) ) ## END Constraints for thermal units subject to integer (discrete) unit commitment decisions - if !isempty(resources_with_maintenance(dfGen)) + if !isempty(ids_with_maintenance(gen)) maintenance_formulation_thermal_commit!(EP, inputs, setup) end end @@ -269,7 +269,7 @@ function thermal_commit_reserves!(EP::Model, inputs::Dict) println("Thermal Commit Reserves Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) @@ -282,20 +282,17 @@ function thermal_commit_reserves!(EP::Model, inputs::Dict) vREG = EP[:vREG] vRSV = EP[:vRSV] - commit(y,t) = dfGen[y, :Cap_Size] * EP[:vCOMMIT][y,t] - min_power(y) = dfGen[y, :Min_Power] + commit(y,t) = cap_size(gen[y]) * EP[:vCOMMIT][y,t] max_power(y,t) = inputs["pP_Max"][y,t] - reg_max(y) = dfGen[y, :Reg_Max] - rsv_max(y) = dfGen[y, :Rsv_Max] # Maximum regulation and reserve contributions - @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= max_power(y, t) * reg_max(y) * commit(y, t)) - @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= max_power(y, t) * rsv_max(y) * commit(y, t)) + @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= max_power(y, t) * reg_max(gen[y]) * commit(y, t)) + @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= max_power(y, t) * rsv_max(gen[y]) * commit(y, t)) # Minimum stable power generated per technology "y" at hour "t" and contribution to regulation must be > min power expr = extract_time_series_to_expression(vP, THERM_COMMIT) add_similar_to_expression!(expr[REG, :], -vREG[REG, :]) - @constraint(EP, [y in THERM_COMMIT, t in 1:T], expr[y, t] >= min_power(y) * commit(y, t)) + @constraint(EP, [y in THERM_COMMIT, t in 1:T], expr[y, t] >= min_power(gen[y]) * commit(y, t)) # Maximum power generated per technology "y" at hour "t" and contribution to regulation and reserves up must be < max power expr = extract_time_series_to_expression(vP, THERM_COMMIT) @@ -314,15 +311,16 @@ function maintenance_formulation_thermal_commit!(EP::Model, inputs::Dict, setup: @info "Maintenance Module for Thermal plants" ensure_maintenance_variable_records!(inputs) - dfGen = inputs["dfGen"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfGen) + gen = inputs["RESOURCES"] + + by_rid(rid, sym) = by_rid_res(rid, sym, gen) - MAINT = resources_with_maintenance(dfGen) - resource_component(y) = by_rid(y, :Resource) - cap(y) = by_rid(y, :Cap_Size) - maint_dur(y) = Int(floor(by_rid(y, :Maintenance_Duration))) - maint_freq(y) = Int(floor(by_rid(y, :Maintenance_Cycle_Length_Years))) - maint_begin_cadence(y) = Int(floor(by_rid(y, :Maintenance_Begin_Cadence))) + MAINT = ids_with_maintenance(gen) + resource_component(y) = by_rid(y, :resource_name) + cap(y) = by_rid(y, :cap_size) + maint_dur(y) = Int(floor(by_rid(y, :maintenance_duration))) + maint_freq(y) = Int(floor(by_rid(y, :maintenance_cycle_length_years))) + maint_begin_cadence(y) = Int(floor(by_rid(y, :maintenance_begin_cadence))) integer_operational_unit_committment = setup["UCommit"] == 1 @@ -354,11 +352,12 @@ end """ function thermal_maintenance_capacity_reserve_margin_adjustment!(EP::Model, inputs::Dict) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + T = inputs["T"] # Number of time steps (hours) ncapres = inputs["NCapacityReserveMargin"] THERM_COMMIT = inputs["THERM_COMMIT"] - MAINT = resources_with_maintenance(dfGen) + MAINT = ids_with_maintenance(gen) applicable_resources = intersect(MAINT, THERM_COMMIT) maint_adj = @expression(EP, [capres in 1:ncapres, t in 1:T], @@ -371,10 +370,10 @@ function thermal_maintenance_capacity_reserve_margin_adjustment(EP::Model, y::Int, capres::Int, t) - dfGen = inputs["dfGen"] - resource_component = dfGen[y, :Resource] - capresfactor = dfGen[y, Symbol("CapRes_$capres")] - cap_size = dfGen[y, :Cap_Size] + gen = inputs["RESOURCES"] + resource_component = resource_name(gen[y]) + capresfactor = derating_factor(gen[y], tag=capres) + cap = cap_size(gen[y]) down_var = EP[Symbol(maintenance_down_name(resource_component))] - return -capresfactor * down_var[t] * cap_size + return -capresfactor * down_var[t] * cap end diff --git a/src/model/resources/thermal/thermal_no_commit.jl b/src/model/resources/thermal/thermal_no_commit.jl index 91fc176dd7..f015f21858 100644 --- a/src/model/resources/thermal/thermal_no_commit.jl +++ b/src/model/resources/thermal/thermal_no_commit.jl @@ -45,7 +45,7 @@ function thermal_no_commit!(EP::Model, inputs::Dict, setup::Dict) println("Thermal (No Unit Commitment) Resources Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -58,7 +58,7 @@ function thermal_no_commit!(EP::Model, inputs::Dict, setup::Dict) ## Power Balance Expressions ## @expression(EP, ePowerBalanceThermNoCommit[t=1:T, z=1:Z], - sum(EP[:vP][y,t] for y in intersect(THERM_NO_COMMIT, dfGen[dfGen[!,:Zone].==z,:R_ID])) + sum(EP[:vP][y,t] for y in intersect(THERM_NO_COMMIT, resources_in_zone_by_rid(gen,z))) ) add_similar_to_expression!(EP[:ePowerBalance], ePowerBalanceThermNoCommit) @@ -68,10 +68,10 @@ function thermal_no_commit!(EP::Model, inputs::Dict, setup::Dict) @constraints(EP, begin ## Maximum ramp up between consecutive hours - [y in THERM_NO_COMMIT, t in 1:T], EP[:vP][y,t] - EP[:vP][y, hoursbefore(p,t,1)] <= dfGen[y,:Ramp_Up_Percentage]*EP[:eTotalCap][y] + [y in THERM_NO_COMMIT, t in 1:T], EP[:vP][y,t] - EP[:vP][y, hoursbefore(p,t,1)] <= ramp_up_fraction(gen[y])*EP[:eTotalCap][y] ## Maximum ramp down between consecutive hours - [y in THERM_NO_COMMIT, t in 1:T], EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] <= dfGen[y,:Ramp_Dn_Percentage]*EP[:eTotalCap][y] + [y in THERM_NO_COMMIT, t in 1:T], EP[:vP][y, hoursbefore(p,t,1)] - EP[:vP][y,t] <= ramp_down_fraction(gen[y])*EP[:eTotalCap][y] end) ### Minimum and maximum power output constraints (Constraints #3-4) @@ -81,7 +81,7 @@ function thermal_no_commit!(EP::Model, inputs::Dict, setup::Dict) else @constraints(EP, begin # Minimum stable power generated per technology "y" at hour "t" Min_Power - [y in THERM_NO_COMMIT, t=1:T], EP[:vP][y,t] >= dfGen[y,:Min_Power]*EP[:eTotalCap][y] + [y in THERM_NO_COMMIT, t=1:T], EP[:vP][y,t] >= min_power(gen[y])*EP[:eTotalCap][y] # Maximum power generated per technology "y" at hour "t" [y in THERM_NO_COMMIT, t=1:T], EP[:vP][y,t] <= inputs["pP_Max"][y,t]*EP[:eTotalCap][y] @@ -138,7 +138,7 @@ function thermal_no_commit_reserves!(EP::Model, inputs::Dict) println("Thermal No Commit Reserves Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) @@ -152,19 +152,16 @@ function thermal_no_commit_reserves!(EP::Model, inputs::Dict) vRSV = EP[:vRSV] eTotalCap = EP[:eTotalCap] - min_power(y) = dfGen[y, :Min_Power] max_power(y,t) = inputs["pP_Max"][y,t] - reg_max(y) = dfGen[y, :Reg_Max] - rsv_max(y) = dfGen[y, :Rsv_Max] # Maximum regulation and reserve contributions - @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= max_power(y, t) * reg_max(y) * eTotalCap[y]) - @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= max_power(y, t) * rsv_max(y) * eTotalCap[y]) + @constraint(EP, [y in REG, t in 1:T], vREG[y, t] <= max_power(y, t) * reg_max(gen[y]) * eTotalCap[y]) + @constraint(EP, [y in RSV, t in 1:T], vRSV[y, t] <= max_power(y, t) * rsv_max(gen[y]) * eTotalCap[y]) # Minimum stable power generated per technology "y" at hour "t" and contribution to regulation must be > min power expr = extract_time_series_to_expression(vP, THERM_NO_COMMIT) add_similar_to_expression!(expr[REG, :], -vREG[REG, :]) - @constraint(EP, [y in THERM_NO_COMMIT, t in 1:T], expr[y, t] >= min_power(y) * eTotalCap[y]) + @constraint(EP, [y in THERM_NO_COMMIT, t in 1:T], expr[y, t] >= min_power(gen[y]) * eTotalCap[y]) # Maximum power generated per technology "y" at hour "t" and contribution to regulation and reserves up must be < max power expr = extract_time_series_to_expression(vP, THERM_NO_COMMIT) diff --git a/src/model/resources/vre_stor/vre_stor.jl b/src/model/resources/vre_stor/vre_stor.jl index c87403a294..09d9d0aa74 100644 --- a/src/model/resources/vre_stor/vre_stor.jl +++ b/src/model/resources/vre_stor/vre_stor.jl @@ -101,13 +101,14 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) ### LOAD DATA ### # Load generators dataframe, sets, and time periods - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones # Load VRE-storage inputs - VRE_STOR = inputs["VRE_STOR"] # Set of VRE-STOR generators - dfVRE_STOR = inputs["dfVRE_STOR"] # Dataframe of VRE-STOR specific parameters + VRE_STOR = inputs["VRE_STOR"] # Set of VRE-STOR generators (indices) + gen_VRE_STOR = gen.VreStorage # Set of VRE-STOR generators (objects) SOLAR = inputs["VS_SOLAR"] # Set of VRE-STOR generators with solar-component DC = inputs["VS_DC"] # Set of VRE-STOR generators with inverter-component WIND = inputs["VS_WIND"] # Set of VRE-STOR generators with wind-component @@ -122,7 +123,7 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) IncludeLossesInESR = setup["IncludeLossesInESR"] Reserves = setup["Reserves"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### VARIABLES ARE DEFINED IN RESPECTIVE MODULES ### @@ -133,9 +134,9 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Separate grid costs @expression(EP, eCGrid[y in VRE_STOR], if y in NEW_CAP # Resources eligible for new capacity - dfGen[y,:Inv_Cost_per_MWyr]*EP[:vCAP][y] + dfGen[y,:Fixed_OM_Cost_per_MWyr]*EP[:eTotalCap][y] + inv_cost_per_mwyr(gen[y])*EP[:vCAP][y] + fixed_om_cost_per_mwyr(gen[y])*EP[:eTotalCap][y] else - dfGen[y,:Fixed_OM_Cost_per_MWyr]*EP[:eTotalCap][y] + fixed_om_cost_per_mwyr(gen[y])*EP[:eTotalCap][y] end ) @expression(EP, eTotalCGrid, sum(eCGrid[y] for y in VRE_STOR)) @@ -145,8 +146,8 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Note: The subtraction of the charging component can be found in STOR function @expression(EP, ePowerBalance_VRE_STOR[t=1:T, z=1:Z], JuMP.AffExpr()) for t=1:T, z=1:Z - if !isempty(dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID]) - ePowerBalance_VRE_STOR[t,z] += sum(EP[:vP][y,t] for y=dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID]) + if !isempty(resources_in_zone_by_rid(gen_VRE_STOR, z)) + ePowerBalance_VRE_STOR[t,z] += sum(EP[:vP][y,t] for y=resources_in_zone_by_rid(gen_VRE_STOR, z)) end end @@ -185,15 +186,15 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Energy Share Requirement if EnergyShareRequirement >= 1 @expression(EP, eESRVREStor[ESR=1:inputs["nESR"]], - sum(inputs["omega"][t]*by_rid(y,Symbol("ESRVreStor_$ESR"))*EP[:vP_SOLAR][y,t]*by_rid(y,:EtaInverter) - for y=intersect(SOLAR, dfVRE_STOR[findall(x->x>0,dfVRE_STOR[!,Symbol("ESRVreStor_$ESR")]),:R_ID]), t=1:T) - + sum(inputs["omega"][t]*by_rid(y,Symbol("ESRVreStor_$ESR"))*EP[:vP_WIND][y,t] - for y=intersect(WIND, dfVRE_STOR[findall(x->x>0,dfVRE_STOR[!,Symbol("ESRVreStor_$ESR")]),:R_ID]), t=1:T)) + sum(inputs["omega"][t]*esr_vrestor(gen[y],tag=ESR)*EP[:vP_SOLAR][y,t]*by_rid(y,:etainverter) + for y=intersect(SOLAR, ids_with_policy(gen, esr_vrestor, tag=ESR)), t=1:T) + + sum(inputs["omega"][t]*esr_vrestor(gen[y],tag=ESR)*EP[:vP_WIND][y,t] + for y=intersect(WIND, ids_with_policy(gen, esr_vrestor, tag=ESR)), t=1:T)) EP[:eESR] += eESRVREStor if IncludeLossesInESR == 1 @expression(EP, eESRVREStorLosses[ESR=1:inputs["nESR"]], sum(inputs["dfESR"][z,ESR]*sum(EP[:eELOSS_VRE_STOR][y] - for y=intersect(STOR, dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID])) for z=findall(x->x>0,inputs["dfESR"][:,ESR]))) + for y=intersect(STOR, resources_in_zone_by_rid(gen_VRE_STOR, z))) for z=findall(x->x>0,inputs["dfESR"][:,ESR]))) EP[:eESR] -= eESRVREStorLosses end end @@ -201,69 +202,69 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Minimum Capacity Requirement if MinCapReq == 1 @expression(EP, eMinCapResSolar[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(by_rid(y,:EtaInverter)*EP[:eTotalCap_SOLAR][y] for y in intersect(SOLAR, dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagSolar_$mincap")].== 1),:R_ID]))) + sum(by_rid(y,:etainverter)*EP[:eTotalCap_SOLAR][y] for y in intersect(SOLAR, ids_with_policy(gen_VRE_STOR, min_cap_solar, tag=mincap)))) EP[:eMinCapRes] += eMinCapResSolar @expression(EP, eMinCapResWind[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(EP[:eTotalCap_WIND][y] for y in intersect(WIND, dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagWind_$mincap")].== 1),:R_ID]))) + sum(EP[:eTotalCap_WIND][y] for y in intersect(WIND, ids_with_policy(gen_VRE_STOR, min_cap_wind, tag=mincap)))) EP[:eMinCapRes] += eMinCapResWind if !isempty(inputs["VS_ASYM_AC_DISCHARGE"]) @expression(EP, eMinCapResACDis[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(EP[:eTotalCapDischarge_AC][y] for y in intersect(inputs["VS_ASYM_AC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagStor_$mincap")].== 1),:R_ID]))) + sum(EP[:eTotalCapDischarge_AC][y] for y in intersect(inputs["VS_ASYM_AC_DISCHARGE"], ids_with_policy(gen_VRE_STOR, min_cap_stor, tag=mincap)))) EP[:eMinCapRes] += eMinCapResACDis end if !isempty(inputs["VS_ASYM_DC_DISCHARGE"]) @expression(EP, eMinCapResDCDis[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(EP[:eTotalCapDischarge_DC][y] for y in intersect(inputs["VS_ASYM_DC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagStor_$mincap")].== 1),:R_ID]))) + sum(EP[:eTotalCapDischarge_DC][y] for y in intersect(inputs["VS_ASYM_DC_DISCHARGE"], ids_with_policy(gen_VRE_STOR, min_cap_stor, tag=mincap)))) EP[:eMinCapRes] += eMinCapResDCDis end if !isempty(inputs["VS_SYM_AC"]) @expression(EP, eMinCapResACStor[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(by_rid(y,:Power_to_Energy_AC)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_AC"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagStor_$mincap")].== 1),:R_ID]))) + sum(by_rid(y,:power_to_energy_ac)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_AC"], ids_with_policy(gen_VRE_STOR, min_cap_stor, tag=mincap)))) EP[:eMinCapRes] += eMinCapResACStor end if !isempty(inputs["VS_SYM_DC"]) @expression(EP, eMinCapResDCStor[mincap = 1:inputs["NumberOfMinCapReqs"]], - sum(by_rid(y,:Power_to_Energy_DC)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_DC"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MinCapTagStor_$mincap")].== 1),:R_ID]))) + sum(by_rid(y,:power_to_energy_dc)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_DC"], ids_with_policy(gen_VRE_STOR, min_cap_stor, tag=mincap)))) EP[:eMinCapRes] += eMinCapResDCStor end end # Maximum Capacity Requirement if MaxCapReq == 1 - @expression(EP, eMaxCapResSolar[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(by_rid(y,:EtaInverter)*EP[:eTotalCap_SOLAR][y] for y in intersect(SOLAR, dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagSolar_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResSolar[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(by_rid(y,:etainverter)*EP[:eTotalCap_SOLAR][y] for y in intersect(SOLAR, ids_with_policy(gen_VRE_STOR, max_cap_solar, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResSolar - @expression(EP, eMaxCapResWind[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(EP[:eTotalCap_WIND][y] for y in intersect(WIND, dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagWind_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResWind[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(EP[:eTotalCap_WIND][y] for y in intersect(WIND, ids_with_policy(gen_VRE_STOR, max_cap_wind, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResWind if !isempty(inputs["VS_ASYM_AC_DISCHARGE"]) - @expression(EP, eMaxCapResACDis[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(EP[:eTotalCapDischarge_AC][y] for y in intersect(inputs["VS_ASYM_AC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagStor_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResACDis[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(EP[:eTotalCapDischarge_AC][y] for y in intersect(inputs["VS_ASYM_AC_DISCHARGE"], ids_with_policy(gen_VRE_STOR, max_cap_stor, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResACDis end if !isempty(inputs["VS_ASYM_DC_DISCHARGE"]) - @expression(EP, eMaxCapResDCDis[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(EP[:eTotalCapDischarge_DC][y] for y in intersect(inputs["VS_ASYM_DC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagStor_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResDCDis[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(EP[:eTotalCapDischarge_DC][y] for y in intersect(inputs["VS_ASYM_DC_DISCHARGE"], ids_with_policy(gen_VRE_STOR, max_cap_stor, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResDCDis end if !isempty(inputs["VS_SYM_AC"]) - @expression(EP, eMaxCapResACStor[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(by_rid(y,:Power_to_Energy_AC)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_AC"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagStor_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResACStor[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(by_rid(y,:power_to_energy_ac)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_AC"], ids_with_policy(gen_VRE_STOR, max_cap_stor, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResACStor end if !isempty(inputs["VS_SYM_DC"]) - @expression(EP, eMaxCapResDCStor[mincap = 1:inputs["NumberOfMaxCapReqs"]], - sum(by_rid(y,:Power_to_Energy_DC)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_DC"], dfVRE_STOR[(dfVRE_STOR[!,Symbol("MaxCapTagStor_$mincap")].== 1),:R_ID]))) + @expression(EP, eMaxCapResDCStor[maxcap = 1:inputs["NumberOfMaxCapReqs"]], + sum(by_rid(y,:power_to_energy_dc)*EP[:eTotalCap_STOR][y] for y in intersect(inputs["VS_SYM_DC"], ids_with_policy(gen_VRE_STOR, max_cap_stor, tag=maxcap)))) EP[:eMaxCapRes] += eMaxCapResDCStor end end @@ -302,9 +303,9 @@ function vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 6: Symmetric Storage Resources (implemented in main module due to potential capacity reserve margin and operating reserve constraints) @constraint(EP, cChargeDischargeMaxDC[y in inputs["VS_SYM_DC"], t=1:T], - EP[:eChargeDischargeMaxDC][y,t] <= by_rid(y,:Power_to_Energy_DC)*EP[:eTotalCap_STOR][y]) + EP[:eChargeDischargeMaxDC][y,t] <= by_rid(y,:power_to_energy_dc)*EP[:eTotalCap_STOR][y]) @constraint(EP, cChargeDischargeMaxAC[y in inputs["VS_SYM_AC"], t=1:T], - EP[:eChargeDischargeMaxAC][y,t] <= by_rid(y,:Power_to_Energy_AC)*EP[:eTotalCap_STOR][y]) + EP[:eChargeDischargeMaxAC][y,t] <= by_rid(y,:power_to_energy_ac)*EP[:eTotalCap_STOR][y]) # Constraint 7: Asymmetric Storage Resources (implemented in main module due to potential capacity reserve margin and operating reserve constraints) @constraint(EP, cVreStorMaxDischargingDC[y in inputs["VS_ASYM_DC_DISCHARGE"], t=1:T], EP[:eVreStorMaxDischargingDC][y,t] <= EP[:eTotalCapDischarge_DC][y]) @@ -395,11 +396,12 @@ function inverter_vre_stor!(EP::Model, inputs::Dict, setup::Dict) DC = inputs["VS_DC"] NEW_CAP_DC = inputs["NEW_CAP_DC"] RET_CAP_DC = inputs["RET_CAP_DC"] - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage MultiStage = setup["MultiStage"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### INVERTER VARIABLES ### @@ -419,7 +421,7 @@ function inverter_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapDC[y in DC], vEXISTINGDCCAP[y]) else - @expression(EP, eExistingCapDC[y in DC], by_rid(y,:Existing_Cap_Inverter_MW)) + @expression(EP, eExistingCapDC[y in DC], by_rid(y,:existing_cap_inverter_mw)) end # 1. Total inverter capacity @@ -440,9 +442,9 @@ function inverter_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Fixed costs for inverter component (if resource is not eligible for new inverter capacity, fixed costs are only O&M costs) @expression(EP, eCFixDC[y in DC], if y in NEW_CAP_DC # Resources eligible for new capacity - by_rid(y,:Inv_Cost_Inverter_per_MWyr)*vDCCAP[y] + by_rid(y,:Fixed_OM_Inverter_Cost_per_MWyr)*eTotalCap_DC[y] + by_rid(y,:inv_cost_inverter_per_mwyr)*vDCCAP[y] + by_rid(y,:fixed_om_inverter_cost_per_mwyr)*eTotalCap_DC[y] else - by_rid(y,:Fixed_OM_Inverter_Cost_per_MWyr)*eTotalCap_DC[y] + by_rid(y,:fixed_om_inverter_cost_per_mwyr)*eTotalCap_DC[y] end ) @@ -462,7 +464,7 @@ function inverter_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapDC[y in DC], EP[:vEXISTINGDCCAP][y] == by_rid(y,:Existing_Cap_Inverter_MW)) + @constraint(EP, cExistingCapDC[y in DC], EP[:vEXISTINGDCCAP][y] == by_rid(y,:existing_cap_inverter_mw)) end # Constraints 1: Retirements and capacity additions @@ -470,12 +472,12 @@ function inverter_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cMaxRet_DC[y=RET_CAP_DC], vRETDCCAP[y] <= eExistingCapDC[y]) # Constraint on maximum capacity (if applicable) [set input to -1 if no constraint on maximum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is >= Max_Cap_MW and lead to infeasabilty - @constraint(EP, cMaxCap_DC[y in dfVRE_STOR[dfVRE_STOR.Max_Cap_Inverter_MW.>=0,:R_ID]], - eTotalCap_DC[y] <= by_rid(y,:Max_Cap_Inverter_MW)) + @constraint(EP, cMaxCap_DC[y in ids_with_nonneg(gen_VRE_STOR, max_cap_inverter_mw)], + eTotalCap_DC[y] <= by_rid(y,:max_cap_inverter_mw)) # Constraint on Minimum capacity (if applicable) [set input to -1 if no constraint on minimum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is <= Min_Cap_MW and lead to infeasabilty - @constraint(EP, cMinCap_DC[y in dfVRE_STOR[dfVRE_STOR.Min_Cap_Inverter_MW.>0,:R_ID]], - eTotalCap_DC[y] >= by_rid(y,:Min_Cap_Inverter_MW)) + @constraint(EP, cMinCap_DC[y in ids_with_positive(gen_VRE_STOR, min_cap_inverter_mw)], + eTotalCap_DC[y] >= by_rid(y,:min_cap_inverter_mw)) # Constraint 2: Inverter Exports Maximum: see main module because capacity reserve margin/operating reserves may alter constraint end @@ -548,16 +550,18 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) println("VRE-STOR Solar Module") ### LOAD DATA ### + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage T = inputs["T"] SOLAR = inputs["VS_SOLAR"] + NEW_CAP_SOLAR = inputs["NEW_CAP_SOLAR"] RET_CAP_SOLAR = inputs["RET_CAP_SOLAR"] - dfVRE_STOR = inputs["dfVRE_STOR"] MultiStage = setup["MultiStage"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### SOLAR VARIABLES ### @@ -579,7 +583,7 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapSolar[y in SOLAR], vEXISTINGSOLARCAP[y]) else - @expression(EP, eExistingCapSolar[y in SOLAR], by_rid(y,:Existing_Cap_Solar_MW)) + @expression(EP, eExistingCapSolar[y in SOLAR], by_rid(y,:existing_cap_solar_mw)) end # 1. Total solar capacity @@ -600,9 +604,9 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Fixed costs for solar resources (if resource is not eligible for new solar capacity, fixed costs are only O&M costs) @expression(EP, eCFixSolar[y in SOLAR], if y in NEW_CAP_SOLAR # Resources eligible for new capacity - by_rid(y,:Inv_Cost_Solar_per_MWyr)*vSOLARCAP[y] + by_rid(y,:Fixed_OM_Solar_Cost_per_MWyr)*eTotalCap_SOLAR[y] + by_rid(y,:inv_cost_solar_per_mwyr)*vSOLARCAP[y] + by_rid(y,:fixed_om_solar_cost_per_mwyr)*eTotalCap_SOLAR[y] else - by_rid(y,:Fixed_OM_Solar_Cost_per_MWyr)*eTotalCap_SOLAR[y] + by_rid(y,:fixed_om_solar_cost_per_mwyr)*eTotalCap_SOLAR[y] end ) @expression(EP, eTotalCFixSolar, sum(eCFixSolar[y] for y in SOLAR)) @@ -615,15 +619,15 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Variable costs of "generation" for solar resource "y" during hour "t" @expression(EP, eCVarOutSolar[y in SOLAR, t=1:T], - inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Solar)*by_rid(y,:EtaInverter)*EP[:vP_SOLAR][y,t]) + inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_solar)*by_rid(y,:etainverter)*EP[:vP_SOLAR][y,t]) @expression(EP, eTotalCVarOutSolar, sum(eCVarOutSolar[y,t] for y in SOLAR, t=1:T)) EP[:eObj] += eTotalCVarOutSolar # 3. Inverter Balance, PV Generation Maximum @expression(EP, eSolarGenMaxS[y in SOLAR, t=1:T], JuMP.AffExpr()) for y in SOLAR, t=1:T - EP[:eInvACBalance][y,t] += by_rid(y,:EtaInverter)*EP[:vP_SOLAR][y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*EP[:vP_SOLAR][y,t] + EP[:eInvACBalance][y,t] += by_rid(y,:etainverter)*EP[:vP_SOLAR][y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*EP[:vP_SOLAR][y,t] eSolarGenMaxS[y,t] += EP[:vP_SOLAR][y,t] end @@ -631,7 +635,7 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapSolar[y in SOLAR], EP[:vEXISTINGSOLARCAP][y] == by_rid(y,:Existing_Cap_Solar_MW)) + @constraint(EP, cExistingCapSolar[y in SOLAR], EP[:vEXISTINGSOLARCAP][y] == by_rid(y,:existing_cap_solar_mw)) end # Constraints 1: Retirements and capacity additions @@ -639,18 +643,18 @@ function solar_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cMaxRet_Solar[y=RET_CAP_SOLAR], vRETSOLARCAP[y] <= eExistingCapSolar[y]) # Constraint on maximum capacity (if applicable) [set input to -1 if no constraint on maximum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is >= Max_Cap_MW and lead to infeasabilty - @constraint(EP, cMaxCap_Solar[y in dfVRE_STOR[dfVRE_STOR.Max_Cap_Solar_MW.>=0,:R_ID]], - eTotalCap_SOLAR[y] <= by_rid(y,:Max_Cap_Solar_MW)) + @constraint(EP, cMaxCap_Solar[y in ids_with_nonneg(gen_VRE_STOR, max_cap_solar_mw)], + eTotalCap_SOLAR[y] <= by_rid(y,:max_cap_solar_mw)) # Constraint on Minimum capacity (if applicable) [set input to -1 if no constraint on minimum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is <= Min_Cap_MW and lead to infeasabilty - @constraint(EP, cMinCap_Solar[y in dfVRE_STOR[dfVRE_STOR.Min_Cap_Solar_MW.>0,:R_ID]], - eTotalCap_SOLAR[y] >= by_rid(y,:Min_Cap_Solar_MW)) + @constraint(EP, cMinCap_Solar[y in ids_with_positive(gen_VRE_STOR, min_cap_solar_mw)], + eTotalCap_SOLAR[y] >= by_rid(y,:min_cap_solar_mw)) # Constraint 2: PV Generation: see main module because operating reserves may alter constraint # Constraint 3: Inverter Ratio between solar capacity and grid - @constraint(EP, cInverterRatio_Solar[y in dfVRE_STOR[dfVRE_STOR.Inverter_Ratio_Solar.>0,:R_ID]], - EP[:eTotalCap_SOLAR][y] == by_rid(y,:Inverter_Ratio_Solar)*EP[:eTotalCap_DC][y]) + @constraint(EP, cInverterRatio_Solar[y in ids_with_positive(gen_VRE_STOR, inverter_ratio_solar)], + EP[:eTotalCap_SOLAR][y] == by_rid(y,:inverter_ratio_solar)*EP[:eTotalCap_DC][y]) end @doc raw""" @@ -721,16 +725,17 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) println("VRE-STOR Wind Module") ### LOAD DATA ### + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage T = inputs["T"] WIND = inputs["VS_WIND"] NEW_CAP_WIND = inputs["NEW_CAP_WIND"] RET_CAP_WIND = inputs["RET_CAP_WIND"] - dfVRE_STOR = inputs["dfVRE_STOR"] MultiStage = setup["MultiStage"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### WIND VARIABLES ### @@ -753,7 +758,7 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapWind[y in WIND], vEXISTINGWINDCAP[y]) else - @expression(EP, eExistingCapWind[y in WIND], by_rid(y,:Existing_Cap_Wind_MW)) + @expression(EP, eExistingCapWind[y in WIND], by_rid(y,:existing_cap_wind_mw)) end # 1. Total wind capacity @@ -774,9 +779,9 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Fixed costs for wind resources (if resource is not eligible for new wind capacity, fixed costs are only O&M costs) @expression(EP, eCFixWind[y in WIND], if y in NEW_CAP_WIND # Resources eligible for new capacity - by_rid(y,:Inv_Cost_Wind_per_MWyr)*vWINDCAP[y] + by_rid(y,:Fixed_OM_Wind_Cost_per_MWyr)*eTotalCap_WIND[y] + by_rid(y,:inv_cost_wind_per_mwyr)*vWINDCAP[y] + by_rid(y,:fixed_om_wind_cost_per_mwyr)*eTotalCap_WIND[y] else - by_rid(y,:Fixed_OM_Wind_Cost_per_MWyr)*eTotalCap_WIND[y] + by_rid(y,:fixed_om_wind_cost_per_mwyr)*eTotalCap_WIND[y] end ) @expression(EP, eTotalCFixWind, sum(eCFixWind[y] for y in WIND)) @@ -788,7 +793,7 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) end # Variable costs of "generation" for wind resource "y" during hour "t" - @expression(EP, eCVarOutWind[y in WIND, t=1:T], inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Wind)*EP[:vP_WIND][y,t]) + @expression(EP, eCVarOutWind[y in WIND, t=1:T], inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_wind)*EP[:vP_WIND][y,t]) @expression(EP, eTotalCVarOutWind, sum(eCVarOutWind[y,t] for y in WIND, t=1:T)) EP[:eObj] += eTotalCVarOutWind @@ -803,7 +808,7 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapWind[y in WIND], EP[:vEXISTINGWINDCAP][y] == by_rid(y,:Existing_Cap_Wind_MW)) + @constraint(EP, cExistingCapWind[y in WIND], EP[:vEXISTINGWINDCAP][y] == by_rid(y,:existing_cap_wind_mw)) end # Constraints 1: Retirements and capacity additions @@ -811,18 +816,18 @@ function wind_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cMaxRet_Wind[y=RET_CAP_WIND], vRETWINDCAP[y] <= eExistingCapWind[y]) # Constraint on maximum capacity (if applicable) [set input to -1 if no constraint on maximum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is >= Max_Cap_MW and lead to infeasabilty - @constraint(EP, cMaxCap_Wind[y in dfVRE_STOR[dfVRE_STOR.Max_Cap_Wind_MW.>=0,:R_ID]], - eTotalCap_WIND[y] <= by_rid(y,:Max_Cap_Wind_MW)) + @constraint(EP, cMaxCap_Wind[y in ids_with_nonneg(gen_VRE_STOR, max_cap_wind_mw)], + eTotalCap_WIND[y] <= by_rid(y,:max_cap_wind_mw)) # Constraint on Minimum capacity (if applicable) [set input to -1 if no constraint on minimum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is <= Min_Cap_MW and lead to infeasabilty - @constraint(EP, cMinCap_Wind[y in dfVRE_STOR[dfVRE_STOR.Min_Cap_Wind_MW.>0,:R_ID]], - eTotalCap_WIND[y] >= by_rid(y,:Min_Cap_Wind_MW)) + @constraint(EP, cMinCap_Wind[y in ids_with_positive(gen_VRE_STOR, min_cap_wind_mw)], + eTotalCap_WIND[y] >= by_rid(y,:min_cap_wind_mw)) # Constraint 2: Wind Generation: see main module because capacity reserve margin/operating reserves may alter constraint # Constraint 3: Inverter Ratio between wind capacity and grid - @constraint(EP, cInverterRatio_Wind[y in dfVRE_STOR[dfVRE_STOR.Inverter_Ratio_Wind.>0,:R_ID]], - EP[:eTotalCap_WIND][y] == by_rid(y,:Inverter_Ratio_Wind)*EP[:eTotalCap][y]) + @constraint(EP, cInverterRatio_Wind[y in ids_with_positive(gen_VRE_STOR, inverter_ratio_wind)], + EP[:eTotalCap_WIND][y] == by_rid(y,:inverter_ratio_wind)*EP[:eTotalCap][y]) end @doc raw""" @@ -959,10 +964,11 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) T = inputs["T"] Z = inputs["Z"] - dfGen = inputs["dfGen"] + + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage STOR = inputs["VS_STOR"] - dfVRE_STOR = inputs["dfVRE_STOR"] NEW_CAP_STOR = inputs["NEW_CAP_STOR"] RET_CAP_STOR = inputs["RET_CAP_STOR"] DC_DISCHARGE = inputs["VS_STOR_DC_DISCHARGE"] @@ -980,7 +986,7 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) MultiStage = setup["MultiStage"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### STOR VARIABLES ### @@ -1018,7 +1024,7 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapEnergy_VS[y in STOR], vEXISTINGCAPENERGY_VS[y]) else - @expression(EP, eExistingCapEnergy_VS[y in STOR], dfGen[y,:Existing_Cap_MWh]) + @expression(EP, eExistingCapEnergy_VS[y in STOR], existing_cap_mwh(gen[y])) end # 1. Total storage energy capacity @@ -1039,9 +1045,9 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Fixed costs for storage resources (if resource is not eligible for new energy capacity, fixed costs are only O&M costs) @expression(EP, eCFixEnergy_VS[y in STOR], if y in NEW_CAP_STOR # Resources eligible for new capacity - dfGen[y,:Inv_Cost_per_MWhyr]*vCAPENERGY_VS[y] + dfGen[y,:Fixed_OM_Cost_per_MWhyr]*eTotalCap_STOR[y] + inv_cost_per_mwhyr(gen[y])*vCAPENERGY_VS[y] + fixed_om_cost_per_mwhyr(gen[y])*eTotalCap_STOR[y] else - dfGen[y,:Fixed_OM_Cost_per_MWhyr]*eTotalCap_STOR[y] + fixed_om_cost_per_mwhyr(gen[y])*eTotalCap_STOR[y] end ) @expression(EP, eTotalCFixStor, sum(eCFixEnergy_VS[y] for y in STOR)) @@ -1054,16 +1060,16 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Variable costs of charging DC for VRE-STOR resources "y" during hour "t" @expression(EP, eCVar_Charge_DC[y in DC_CHARGE, t=1:T], - inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Charge_DC)*EP[:vP_DC_CHARGE][y,t]/by_rid(y,:EtaInverter)) + inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_charge_dc)*EP[:vP_DC_CHARGE][y,t]/by_rid(y,:etainverter)) # Variable costs of discharging DC for VRE-STOR resources "y" during hour "t" @expression(EP, eCVar_Discharge_DC[y in DC_DISCHARGE, t=1:T], - inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Discharge_DC)*by_rid(y,:EtaInverter)*EP[:vP_DC_DISCHARGE][y,t]) + inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_discharge_dc)*by_rid(y,:etainverter)*EP[:vP_DC_DISCHARGE][y,t]) # Variable costs of charging AC for VRE-STOR resources "y" during hour "t" @expression(EP, eCVar_Charge_AC[y in AC_CHARGE, t=1:T], - inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Charge_AC)*EP[:vP_AC_CHARGE][y,t]) + inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_charge_ac)*EP[:vP_AC_CHARGE][y,t]) # Variable costs of discharging AC for VRE-STOR resources "y" during hour "t" @expression(EP, eCVar_Discharge_AC[y in AC_DISCHARGE, t=1:T], - inputs["omega"][t]*by_rid(y,:Var_OM_Cost_per_MWh_Discharge_AC)*EP[:vP_AC_DISCHARGE][y,t]) + inputs["omega"][t]*by_rid(y,:var_om_cost_per_mwh_discharge_ac)*EP[:vP_AC_DISCHARGE][y,t]) # Sum individual resource contributions @expression(EP, eTotalCVarStor, sum(eCVar_Charge_DC[y,t] for y in DC_CHARGE, t=1:T) @@ -1083,9 +1089,9 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # SoC expressions @expression(EP, eSoCBalStart_VRE_STOR[y in CONSTRAINTSET, t in START_SUBPERIODS], - vS_VRE_STOR[y,t+hours_per_subperiod-1] - dfGen[y,:Self_Disch]*vS_VRE_STOR[y,t+hours_per_subperiod-1]) + vS_VRE_STOR[y,t+hours_per_subperiod-1] - self_discharge(gen[y])*vS_VRE_STOR[y,t+hours_per_subperiod-1]) @expression(EP, eSoCBalInterior_VRE_STOR[y in STOR, t in INTERIOR_SUBPERIODS], - vS_VRE_STOR[y,t-1] - dfGen[y,:Self_Disch]*vS_VRE_STOR[y,t-1]) + vS_VRE_STOR[y,t-1] - self_discharge(gen[y])*vS_VRE_STOR[y,t-1]) # Expression for energy losses related to technologies (increase in effective demand) @expression(EP, eELOSS_VRE_STOR[y in STOR], JuMP.AffExpr()) @@ -1095,38 +1101,38 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) AC_CHARGE_CONSTRAINTSET = intersect(CONSTRAINTSET, AC_CHARGE) for t in START_SUBPERIODS for y in DC_DISCHARGE_CONSTRAINTSET - eSoCBalStart_VRE_STOR[y,t] -= EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eSoCBalStart_VRE_STOR[y,t] -= EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE_CONSTRAINTSET - eSoCBalStart_VRE_STOR[y,t] += by_rid(y,:Eff_Up_DC)*EP[:vP_DC_CHARGE][y,t] + eSoCBalStart_VRE_STOR[y,t] += by_rid(y,:eff_up_dc)*EP[:vP_DC_CHARGE][y,t] end for y in AC_DISCHARGE_CONSTRAINTSET - eSoCBalStart_VRE_STOR[y,t] -= EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eSoCBalStart_VRE_STOR[y,t] -= EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE_CONSTRAINTSET - eSoCBalStart_VRE_STOR[y,t] += by_rid(y,:Eff_Up_AC)*EP[:vP_AC_CHARGE][y,t] + eSoCBalStart_VRE_STOR[y,t] += by_rid(y,:eff_up_ac)*EP[:vP_AC_CHARGE][y,t] end end for y in DC_DISCHARGE - EP[:eELOSS_VRE_STOR][y] -= sum(inputs["omega"][t]*vP_DC_DISCHARGE[y,t]*by_rid(y,:EtaInverter) for t=1:T) + EP[:eELOSS_VRE_STOR][y] -= sum(inputs["omega"][t]*vP_DC_DISCHARGE[y,t]*by_rid(y,:etainverter) for t=1:T) for t=1:T - EP[:eInvACBalance][y,t] += by_rid(y,:EtaInverter)*vP_DC_DISCHARGE[y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vP_DC_DISCHARGE[y,t] + EP[:eInvACBalance][y,t] += by_rid(y,:etainverter)*vP_DC_DISCHARGE[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vP_DC_DISCHARGE[y,t] end for t in INTERIOR_SUBPERIODS - eSoCBalInterior_VRE_STOR[y,t] -= EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eSoCBalInterior_VRE_STOR[y,t] -= EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end end for y in DC_CHARGE - EP[:eELOSS_VRE_STOR][y] += sum(inputs["omega"][t]*vP_DC_CHARGE[y,t]/by_rid(y,:EtaInverter) for t=1:T) + EP[:eELOSS_VRE_STOR][y] += sum(inputs["omega"][t]*vP_DC_CHARGE[y,t]/by_rid(y,:etainverter) for t=1:T) for t=1:T - EP[:eInvACBalance][y,t] -= vP_DC_CHARGE[y,t]/by_rid(y,:EtaInverter) - EP[:eInverterExport][y,t] += vP_DC_CHARGE[y,t]/by_rid(y,:EtaInverter) + EP[:eInvACBalance][y,t] -= vP_DC_CHARGE[y,t]/by_rid(y,:etainverter) + EP[:eInverterExport][y,t] += vP_DC_CHARGE[y,t]/by_rid(y,:etainverter) end for t in INTERIOR_SUBPERIODS - eSoCBalInterior_VRE_STOR[y,t] += by_rid(y,:Eff_Up_DC)*EP[:vP_DC_CHARGE][y,t] + eSoCBalInterior_VRE_STOR[y,t] += by_rid(y,:eff_up_dc)*EP[:vP_DC_CHARGE][y,t] end end @@ -1136,7 +1142,7 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) EP[:eInvACBalance][y,t] += vP_AC_DISCHARGE[y,t] end for t in INTERIOR_SUBPERIODS - eSoCBalInterior_VRE_STOR[y,t] -= EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eSoCBalInterior_VRE_STOR[y,t] -= EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end end @@ -1146,7 +1152,7 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) EP[:eInvACBalance][y,t] -= vP_AC_CHARGE[y,t] end for t in INTERIOR_SUBPERIODS - eSoCBalInterior_VRE_STOR[y,t] += by_rid(y,:Eff_Up_AC)*EP[:vP_AC_CHARGE][y,t] + eSoCBalInterior_VRE_STOR[y,t] += by_rid(y,:eff_up_ac)*EP[:vP_AC_CHARGE][y,t] end end @@ -1156,8 +1162,8 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) end for z in 1:Z, t=1:T - if !isempty(dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID]) - EP[:ePowerBalance_VRE_STOR][t, z] -= sum(vCHARGE_VRE_STOR[y,t] for y=intersect(dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID],STOR)) + if !isempty(resources_in_zone_by_rid(gen_VRE_STOR,z)) + EP[:ePowerBalance_VRE_STOR][t, z] -= sum(vCHARGE_VRE_STOR[y,t] for y=intersect(resources_in_zone_by_rid(gen_VRE_STOR,z),STOR)) end end @@ -1165,14 +1171,14 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # From CO2 Policy module @expression(EP, eELOSSByZone_VRE_STOR[z=1:Z], - sum(EP[:eELOSS_VRE_STOR][y] for y in intersect(dfVRE_STOR[(dfVRE_STOR[!,:Zone].==z),:R_ID],STOR))) + sum(EP[:eELOSS_VRE_STOR][y] for y in intersect(resources_in_zone_by_rid(gen_VRE_STOR,z),STOR))) add_similar_to_expression!(EP[:eELOSSByZone], eELOSSByZone_VRE_STOR) ### CONSTRAINTS ### # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapEnergy_VS[y in STOR], EP[:vEXISTINGCAPENERGY_VS][y] == dfGen[y,:Existing_Cap_MWh]) + @constraint(EP, cExistingCapEnergy_VS[y in STOR], EP[:vEXISTINGCAPENERGY_VS][y] == existing_cap_mwh(gen[y])) end # Constraints 1: Retirements and capacity additions @@ -1180,12 +1186,12 @@ function stor_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cMaxRet_Stor[y=RET_CAP_STOR], vRETCAPENERGY_VS[y] <= eExistingCapEnergy_VS[y]) # Constraint on maximum capacity (if applicable) [set input to -1 if no constraint on maximum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is >= Max_Cap_MW and lead to infeasabilty - @constraint(EP, cMaxCap_Stor[y in intersect(dfGen[dfGen.Max_Cap_MWh.>=0,:R_ID], STOR)], - eTotalCap_STOR[y] <= dfGen[y, :Max_Cap_MWh]) + @constraint(EP, cMaxCap_Stor[y in intersect(ids_with_nonneg(gen, max_cap_mwh), STOR)], + eTotalCap_STOR[y] <= max_cap_mwh(gen[y])) # Constraint on minimum capacity (if applicable) [set input to -1 if no constraint on minimum capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Cap_MW is <= Min_Cap_MW and lead to infeasabilty - @constraint(EP, cMinCap_Stor[y in intersect(dfGen[dfGen.Min_Cap_MWh.>0,:R_ID], STOR)], - eTotalCap_STOR[y] >= dfGen[y, :Min_Cap_MWh]) + @constraint(EP, cMinCap_Stor[y in intersect(ids_with_positive(gen, min_cap_mwh), STOR)], + eTotalCap_STOR[y] >= min_cap_mwh(gen[y])) # Constraint 2: SOC Maximum @constraint(EP, cSOCMax[y in STOR, t=1:T], vS_VRE_STOR[y,t] <= eTotalCap_STOR[y]) @@ -1250,8 +1256,8 @@ function lds_vre_stor!(EP::Model, inputs::Dict) ### LOAD DATA ### VS_LDS = inputs["VS_LDS"] - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage REP_PERIOD = inputs["REP_PERIOD"] # Number of representative periods dfPeriodMap = inputs["Period_Map"] # Dataframe that maps modeled periods to representative periods @@ -1260,7 +1266,7 @@ function lds_vre_stor!(EP::Model, inputs::Dict) MODELED_PERIODS_INDEX = 1:NPeriods REP_PERIODS_INDEX = MODELED_PERIODS_INDEX[dfPeriodMap[!,:Rep_Period] .== MODELED_PERIODS_INDEX] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### LDS VARIABLES ### @@ -1276,7 +1282,7 @@ function lds_vre_stor!(EP::Model, inputs::Dict) # Note: tw_min = hours_per_subperiod*(w-1)+1; tw_max = hours_per_subperiod*w @expression(EP, eVreStorSoCBalLongDurationStorageStart[y in VS_LDS, w=1:REP_PERIOD], - (1-dfGen[y,:Self_Disch]) * (EP[:vS_VRE_STOR][y,hours_per_subperiod*w]-EP[:vdSOC_VRE_STOR][y,w])) + (1-self_discharge(gen[y])) * (EP[:vS_VRE_STOR][y,hours_per_subperiod*w]-EP[:vdSOC_VRE_STOR][y,w])) DC_DISCHARGE_CONSTRAINTSET = intersect(inputs["VS_STOR_DC_DISCHARGE"], VS_LDS) DC_CHARGE_CONSTRAINTSET = intersect(inputs["VS_STOR_DC_CHARGE"], VS_LDS) @@ -1284,19 +1290,19 @@ function lds_vre_stor!(EP::Model, inputs::Dict) AC_CHARGE_CONSTRAINTSET = intersect(inputs["VS_STOR_AC_CHARGE"], VS_LDS) for w=1:REP_PERIOD for y in DC_DISCHARGE_CONSTRAINTSET - EP[:eVreStorSoCBalLongDurationStorageStart][y,w] -= EP[:vP_DC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:Eff_Down_DC) + EP[:eVreStorSoCBalLongDurationStorageStart][y,w] -= EP[:vP_DC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE_CONSTRAINTSET - EP[:eVreStorSoCBalLongDurationStorageStart][y,w] += by_rid(y,:Eff_Up_DC)*EP[:vP_DC_CHARGE][y,hours_per_subperiod*(w-1)+1] + EP[:eVreStorSoCBalLongDurationStorageStart][y,w] += by_rid(y,:eff_up_dc)*EP[:vP_DC_CHARGE][y,hours_per_subperiod*(w-1)+1] end for y in AC_DISCHARGE_CONSTRAINTSET - EP[:eVreStorSoCBalLongDurationStorageStart][y,w] -= EP[:vP_AC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:Eff_Down_AC) + EP[:eVreStorSoCBalLongDurationStorageStart][y,w] -= EP[:vP_AC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE_CONSTRAINTSET - EP[:eVreStorSoCBalLongDurationStorageStart][y,w] += by_rid(y,:Eff_Up_AC)*EP[:vP_AC_CHARGE][y,hours_per_subperiod*(w-1)+1] + EP[:eVreStorSoCBalLongDurationStorageStart][y,w] += by_rid(y,:eff_up_ac)*EP[:vP_AC_CHARGE][y,hours_per_subperiod*(w-1)+1] end end @@ -1451,9 +1457,10 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) println("VRE-STOR Charge Investment Module") ### LOAD INPUTS ### + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage T = inputs["T"] - dfVRE_STOR = inputs["dfVRE_STOR"] VS_ASYM_DC_CHARGE = inputs["VS_ASYM_DC_CHARGE"] VS_ASYM_AC_CHARGE = inputs["VS_ASYM_AC_CHARGE"] VS_ASYM_DC_DISCHARGE = inputs["VS_ASYM_DC_DISCHARGE"] @@ -1470,11 +1477,11 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) MultiStage = setup["MultiStage"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) if !isempty(VS_ASYM_DC_DISCHARGE) - MAX_DC_DISCHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Max_Cap_Discharge_DC_MW.>=0,:R_ID], VS_ASYM_DC_DISCHARGE) - MIN_DC_DISCHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Min_Cap_Discharge_DC_MW.>0,:R_ID], VS_ASYM_DC_DISCHARGE) + MAX_DC_DISCHARGE = intersect(ids_with_nonneg(gen_VRE_STOR, max_cap_discharge_dc_mw), VS_ASYM_DC_DISCHARGE) + MIN_DC_DISCHARGE = intersect(ids_with_positive(gen_VRE_STOR, min_cap_discharge_dc_mw), VS_ASYM_DC_DISCHARGE) ### VARIABLES ### @variables(EP, begin @@ -1492,7 +1499,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapDischargeDC[y in VS_ASYM_DC_DISCHARGE], vEXISTINGCAPDISCHARGEDC[y]) else - @expression(EP, eExistingCapDischargeDC[y in VS_ASYM_DC_DISCHARGE], by_rid(y,:Existing_Cap_Discharge_DC_MW)) + @expression(EP, eExistingCapDischargeDC[y in VS_ASYM_DC_DISCHARGE], by_rid(y,:existing_cap_discharge_dc_mw)) end # 1. Total storage discharge DC capacity @@ -1513,9 +1520,9 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new discharge DC capacity, fixed costs are only O&M costs @expression(EP, eCFixDischarge_DC[y in VS_ASYM_DC_DISCHARGE], if y in NEW_CAP_DISCHARGE_DC # Resources eligible for new discharge DC capacity - by_rid(y,:Inv_Cost_Discharge_DC_per_MWyr)*vCAPDISCHARGE_DC[y] + by_rid(y,:Fixed_OM_Cost_Discharge_DC_per_MWyr)*eTotalCapDischarge_DC[y] + by_rid(y,:inv_cost_discharge_dc_per_mwyr)*vCAPDISCHARGE_DC[y] + by_rid(y,:fixed_om_cost_discharge_dc_per_mwyr)*eTotalCapDischarge_DC[y] else - by_rid(y,:Fixed_OM_Cost_Discharge_DC_per_MWyr)*eTotalCapDischarge_DC[y] + by_rid(y,:fixed_om_cost_discharge_dc_per_mwyr)*eTotalCapDischarge_DC[y] end ) @@ -1532,7 +1539,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapDischargeDC[y in VS_ASYM_DC_DISCHARGE], EP[:vEXISTINGCAPDISCHARGEDC][y] == by_rid(y,:Existing_Cap_Discharge_DC_MW)) + @constraint(EP, cExistingCapDischargeDC[y in VS_ASYM_DC_DISCHARGE], EP[:vEXISTINGCAPDISCHARGEDC][y] == by_rid(y,:existing_cap_discharge_dc_mw)) end # Constraints 1: Retirements and capacity additions @@ -1553,8 +1560,8 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) end if !isempty(VS_ASYM_DC_CHARGE) - MAX_DC_CHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Max_Cap_Charge_DC_MW.>=0,:R_ID], VS_ASYM_DC_CHARGE) - MIN_DC_CHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Min_Cap_Charge_DC_MW.>0,:R_ID], VS_ASYM_DC_CHARGE) + MAX_DC_CHARGE = intersect(ids_with_nonneg(gen_VRE_STOR, max_cap_charge_dc_mw), VS_ASYM_DC_CHARGE) + MIN_DC_CHARGE = intersect(ids_with_positive(gen_VRE_STOR, min_cap_charge_dc_mw), VS_ASYM_DC_CHARGE) ### VARIABLES ### @variables(EP, begin @@ -1572,7 +1579,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapChargeDC[y in VS_ASYM_DC_CHARGE], vEXISTINGCAPCHARGEDC[y]) else - @expression(EP, eExistingCapChargeDC[y in VS_ASYM_DC_CHARGE], by_rid(y,:Existing_Cap_Charge_DC_MW)) + @expression(EP, eExistingCapChargeDC[y in VS_ASYM_DC_CHARGE], by_rid(y,:existing_cap_charge_dc_mw)) end # 1. Total storage charge DC capacity @@ -1593,9 +1600,9 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new charge DC capacity, fixed costs are only O&M costs @expression(EP, eCFixCharge_DC[y in VS_ASYM_DC_CHARGE], if y in NEW_CAP_CHARGE_DC # Resources eligible for new charge DC capacity - by_rid(y,:Inv_Cost_Charge_DC_per_MWyr)*vCAPCHARGE_DC[y] + by_rid(y,:Fixed_OM_Cost_Charge_DC_per_MWyr)*eTotalCapCharge_DC[y] + by_rid(y,:inv_cost_charge_dc_per_mwyr)*vCAPCHARGE_DC[y] + by_rid(y,:fixed_om_cost_charge_dc_per_mwyr)*eTotalCapCharge_DC[y] else - by_rid(y,:Fixed_OM_Cost_Charge_DC_per_MWyr)*eTotalCapCharge_DC[y] + by_rid(y,:fixed_om_cost_charge_dc_per_mwyr)*eTotalCapCharge_DC[y] end ) @@ -1620,10 +1627,10 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cVreStorMaxRetChargeDC[y in RET_CAP_CHARGE_DC], vRETCAPCHARGE_DC[y] <= eExistingCapChargeDC[y]) # Constraint on maximum charge DC capacity (if applicable) [set input to -1 if no constraint on maximum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is >= Max_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMaxCapChargeDC[y in MAX_DC_CHARGE], eTotalCapCharge_DC[y] <= by_rid(y,:Max_Cap_Charge_DC_MW)) + @constraint(EP, cVreStorMaxCapChargeDC[y in MAX_DC_CHARGE], eTotalCapCharge_DC[y] <= by_rid(y,:max_cap_charge_dc_mw)) # Constraint on minimum charge DC capacity (if applicable) [set input to -1 if no constraint on minimum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is <= Min_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMinCapChargeDC[y in MIN_DC_CHARGE], eTotalCapCharge_DC[y] >= by_rid(y,:Min_Cap_Charge_DC_MW)) + @constraint(EP, cVreStorMinCapChargeDC[y in MIN_DC_CHARGE], eTotalCapCharge_DC[y] >= by_rid(y,:min_cap_charge_dc_mw)) # Constraint 2: Maximum charging must be less than charge power rating @expression(EP, eVreStorMaxChargingDC[y in VS_ASYM_DC_CHARGE, t=1:T], JuMP.AffExpr()) @@ -1633,8 +1640,8 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) end if !isempty(VS_ASYM_AC_DISCHARGE) - MAX_AC_DISCHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Max_Cap_Discharge_AC_MW.>=0,:R_ID], VS_ASYM_AC_DISCHARGE) - MIN_AC_DISCHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Min_Cap_Discharge_AC_MW.>0,:R_ID], VS_ASYM_AC_DISCHARGE) + MAX_AC_DISCHARGE = intersect(ids_with_nonneg(gen_VRE_STOR, max_cap_discharge_ac_mw), VS_ASYM_AC_DISCHARGE) + MIN_AC_DISCHARGE = intersect(ids_with_positive(gen_VRE_STOR, min_cap_discharge_ac_mw), VS_ASYM_AC_DISCHARGE) ### VARIABLES ### @variables(EP, begin @@ -1652,7 +1659,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapDischargeAC[y in VS_ASYM_AC_DISCHARGE], vEXISTINGCAPDISCHARGEAC[y]) else - @expression(EP, eExistingCapDischargeAC[y in VS_ASYM_AC_DISCHARGE], by_rid(y,:Existing_Cap_Discharge_AC_MW)) + @expression(EP, eExistingCapDischargeAC[y in VS_ASYM_AC_DISCHARGE], by_rid(y,:existing_cap_discharge_ac_mw)) end # 1. Total storage discharge AC capacity @@ -1673,9 +1680,9 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new discharge AC capacity, fixed costs are only O&M costs @expression(EP, eCFixDischarge_AC[y in VS_ASYM_AC_DISCHARGE], if y in NEW_CAP_DISCHARGE_AC # Resources eligible for new discharge AC capacity - by_rid(y,:Inv_Cost_Discharge_AC_per_MWyr)*vCAPDISCHARGE_AC[y] + by_rid(y,:Fixed_OM_Cost_Discharge_AC_per_MWyr)*eTotalCapDischarge_AC[y] + by_rid(y,:inv_cost_discharge_ac_per_mwyr)*vCAPDISCHARGE_AC[y] + by_rid(y,:fixed_om_cost_discharge_ac_per_mwyr)*eTotalCapDischarge_AC[y] else - by_rid(y,:Fixed_OM_Cost_Discharge_AC_per_MWyr)*eTotalCapDischarge_AC[y] + by_rid(y,:fixed_om_cost_discharge_ac_per_mwyr)*eTotalCapDischarge_AC[y] end ) @@ -1692,7 +1699,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapDischargeAC[y in VS_ASYM_AC_DISCHARGE], EP[:vEXISTINGCAPDISCHARGEAC][y] == by_rid(y,:Existing_Cap_Discharge_AC_MW)) + @constraint(EP, cExistingCapDischargeAC[y in VS_ASYM_AC_DISCHARGE], EP[:vEXISTINGCAPDISCHARGEAC][y] == by_rid(y,:existing_cap_discharge_ac_mw)) end # Constraints 1: Retirements and capacity additions @@ -1700,10 +1707,10 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cVreStorMaxRetDischargeAC[y in RET_CAP_DISCHARGE_AC], vRETCAPDISCHARGE_AC[y] <= eExistingCapDischargeAC[y]) # Constraint on maximum discharge AC capacity (if applicable) [set input to -1 if no constraint on maximum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is >= Max_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMaxCapDischargeAC[y in MAX_AC_DISCHARGE], eTotalCapDischarge_AC[y] <= by_rid(y,:Max_Cap_Discharge_AC_MW)) + @constraint(EP, cVreStorMaxCapDischargeAC[y in MAX_AC_DISCHARGE], eTotalCapDischarge_AC[y] <= by_rid(y,:max_cap_discharge_ac_mw)) # Constraint on minimum discharge AC capacity (if applicable) [set input to -1 if no constraint on minimum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is <= Min_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMinCapDischargeAC[y in MIN_AC_DISCHARGE], eTotalCapDischarge_AC[y] >= by_rid(y,:Min_Cap_Discharge_AC_MW)) + @constraint(EP, cVreStorMinCapDischargeAC[y in MIN_AC_DISCHARGE], eTotalCapDischarge_AC[y] >= by_rid(y,:min_cap_discharge_ac_mw)) # Constraint 2: Maximum discharging rate must be less than discharge power rating @expression(EP, eVreStorMaxDischargingAC[y in VS_ASYM_AC_DISCHARGE, t=1:T], JuMP.AffExpr()) @@ -1713,8 +1720,8 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) end if !isempty(VS_ASYM_AC_CHARGE) - MAX_AC_CHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Max_Cap_Charge_AC_MW.>=0,:R_ID], VS_ASYM_AC_CHARGE) - MIN_AC_CHARGE = intersect(dfVRE_STOR[dfVRE_STOR.Min_Cap_Charge_AC_MW.>0,:R_ID], VS_ASYM_AC_CHARGE) + MAX_AC_CHARGE = intersect(ids_with_nonneg(gen_VRE_STOR, max_cap_charge_ac_mw), VS_ASYM_AC_CHARGE) + MIN_AC_CHARGE = intersect(ids_with_positive(gen_VRE_STOR, min_cap_charge_ac_mw), VS_ASYM_AC_CHARGE) ### VARIABLES ### @variables(EP, begin @@ -1732,7 +1739,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) if MultiStage == 1 @expression(EP, eExistingCapChargeAC[y in VS_ASYM_AC_CHARGE], vEXISTINGCAPCHARGEAC[y]) else - @expression(EP, eExistingCapChargeAC[y in VS_ASYM_AC_CHARGE], by_rid(y,:Existing_Cap_Charge_AC_MW)) + @expression(EP, eExistingCapChargeAC[y in VS_ASYM_AC_CHARGE], by_rid(y,:existing_cap_charge_ac_mw)) end # 1. Total storage charge AC capacity @@ -1753,9 +1760,9 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # If resource is not eligible for new charge AC capacity, fixed costs are only O&M costs @expression(EP, eCFixCharge_AC[y in VS_ASYM_AC_CHARGE], if y in NEW_CAP_CHARGE_AC # Resources eligible for new charge AC capacity - by_rid(y,:Inv_Cost_Charge_AC_per_MWyr)*vCAPCHARGE_AC[y] + by_rid(y,:Fixed_OM_Cost_Charge_AC_per_MWyr)*eTotalCapCharge_AC[y] + by_rid(y,:inv_cost_charge_ac_per_mwyr)*vCAPCHARGE_AC[y] + by_rid(y,:fixed_om_cost_charge_ac_per_mwyr)*eTotalCapCharge_AC[y] else - by_rid(y,:Fixed_OM_Cost_Charge_AC_per_MWyr)*eTotalCapCharge_AC[y] + by_rid(y,:fixed_om_cost_charge_ac_per_mwyr)*eTotalCapCharge_AC[y] end ) @@ -1772,7 +1779,7 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) # Constraint 0: Existing capacity variable is equal to existing capacity specified in the input file if MultiStage == 1 - @constraint(EP, cExistingCapChargeAC[y in VS_ASYM_AC_CHARGE], EP[:vEXISTINGCAPCHARGEAC][y] == by_rid(y,:Existing_Cap_Charge_AC_MW)) + @constraint(EP, cExistingCapChargeAC[y in VS_ASYM_AC_CHARGE], EP[:vEXISTINGCAPCHARGEAC][y] == by_rid(y,:existing_cap_charge_ac_mw)) end # Constraints 1: Retirements and capacity additions @@ -1780,10 +1787,10 @@ function investment_charge_vre_stor!(EP::Model, inputs::Dict, setup::Dict) @constraint(EP, cVreStorMaxRetChargeAC[y in RET_CAP_CHARGE_AC], vRETCAPCHARGE_AC[y] <= eExistingCapChargeAC[y]) # Constraint on maximum charge AC capacity (if applicable) [set input to -1 if no constraint on maximum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is >= Max_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMaxCapChargeAC[y in MAX_AC_CHARGE], eTotalCapCharge_AC[y] <= by_rid(y,:Max_Cap_Charge_AC_MW)) + @constraint(EP, cVreStorMaxCapChargeAC[y in MAX_AC_CHARGE], eTotalCapCharge_AC[y] <= by_rid(y,:max_cap_charge_ac_mw)) # Constraint on minimum charge AC capacity (if applicable) [set input to -1 if no constraint on minimum charge capacity] # DEV NOTE: This constraint may be violated in some cases where Existing_Charge_Cap_MW is <= Min_Charge_Cap_MWh and lead to infeasabilty - @constraint(EP, cVreStorMinCapChargeAC[y in MIN_AC_CHARGE], eTotalCapCharge_AC[y] >= by_rid(y,:Min_Cap_Charge_AC_MW)) + @constraint(EP, cVreStorMinCapChargeAC[y in MIN_AC_CHARGE], eTotalCapCharge_AC[y] >= by_rid(y,:min_cap_charge_ac_mw)) # Constraint 2: Maximum charging rate must be less than charge power rating @expression(EP, eVreStorMaxChargingAC[y in VS_ASYM_AC_CHARGE, t=1:T], JuMP.AffExpr()) @@ -1873,8 +1880,8 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) ### LOAD DATA ### T = inputs["T"] - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage STOR = inputs["VS_STOR"] DC_DISCHARGE = inputs["VS_STOR_DC_DISCHARGE"] DC_CHARGE = inputs["VS_STOR_DC_CHARGE"] @@ -1893,10 +1900,10 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) hours_per_subperiod = inputs["hours_per_subperiod"] # total number of hours per subperiod rep_periods = inputs["REP_PERIOD"] - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) - virtual_discharge_cost = inputs["VirtualChargeDischargeCost"] + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) + ### VARIABLES ### @variables(EP, begin @@ -1930,10 +1937,10 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) # Virtual State of Charge Expressions @expression(EP, eVreStorVSoCBalStart[y in CONSTRAINTSET, t in START_SUBPERIODS], EP[:vCAPRES_VS_VRE_STOR][y,t+hours_per_subperiod-1] - - dfGen[y,:Self_Disch]*EP[:vCAPRES_VS_VRE_STOR][y,t+hours_per_subperiod-1]) + - self_discharge(gen[y])*EP[:vCAPRES_VS_VRE_STOR][y,t+hours_per_subperiod-1]) @expression(EP, eVreStorVSoCBalInterior[y in STOR, t in INTERIOR_SUBPERIODS], EP[:vCAPRES_VS_VRE_STOR][y,t-1] - - dfGen[y,:Self_Disch]*EP[:vCAPRES_VS_VRE_STOR][y,t-1]) + - self_discharge(gen[y])*EP[:vCAPRES_VS_VRE_STOR][y,t-1]) DC_DISCHARGE_CONSTRAINTSET = intersect(CONSTRAINTSET, DC_DISCHARGE) DC_CHARGE_CONSTRAINTSET = intersect(CONSTRAINTSET, DC_CHARGE) @@ -1941,43 +1948,43 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) AC_CHARGE_CONSTRAINTSET = intersect(CONSTRAINTSET, AC_CHARGE) for t in START_SUBPERIODS for y in DC_DISCHARGE_CONSTRAINTSET - eVreStorVSoCBalStart[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eVreStorVSoCBalStart[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE_CONSTRAINTSET - eVreStorVSoCBalStart[y,t] -= by_rid(y,:Eff_Up_DC)*EP[:vCAPRES_DC_CHARGE][y,t] + eVreStorVSoCBalStart[y,t] -= by_rid(y,:eff_up_dc)*EP[:vCAPRES_DC_CHARGE][y,t] end for y in AC_DISCHARGE_CONSTRAINTSET - eVreStorVSoCBalStart[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eVreStorVSoCBalStart[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE_CONSTRAINTSET - eVreStorVSoCBalStart[y,t] -= by_rid(y,:Eff_Up_AC)*EP[:vCAPRES_AC_CHARGE][y,t] + eVreStorVSoCBalStart[y,t] -= by_rid(y,:eff_up_ac)*EP[:vCAPRES_AC_CHARGE][y,t] end end for t in INTERIOR_SUBPERIODS for y in DC_DISCHARGE - eVreStorVSoCBalInterior[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eVreStorVSoCBalInterior[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE - eVreStorVSoCBalInterior[y,t] -= by_rid(y,:Eff_Up_DC)*EP[:vCAPRES_DC_CHARGE][y,t] + eVreStorVSoCBalInterior[y,t] -= by_rid(y,:eff_up_dc)*EP[:vCAPRES_DC_CHARGE][y,t] end for y in AC_DISCHARGE - eVreStorVSoCBalInterior[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eVreStorVSoCBalInterior[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE - eVreStorVSoCBalInterior[y,t] -= by_rid(y,:Eff_Up_AC)*EP[:vCAPRES_AC_CHARGE][y,t] + eVreStorVSoCBalInterior[y,t] -= by_rid(y,:eff_up_ac)*EP[:vCAPRES_AC_CHARGE][y,t] end end # Inverter & grid connection export additions for t=1:T for y in DC_DISCHARGE - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vCAPRES_DC_DISCHARGE[y,t] - EP[:eGridExport][y,t] += by_rid(y,:EtaInverter)*vCAPRES_DC_DISCHARGE[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vCAPRES_DC_DISCHARGE[y,t] + EP[:eGridExport][y,t] += by_rid(y,:etainverter)*vCAPRES_DC_DISCHARGE[y,t] end for y in DC_CHARGE - EP[:eInverterExport][y,t] += vCAPRES_DC_CHARGE[y,t]/by_rid(y,:EtaInverter) - EP[:eGridExport][y,t] += vCAPRES_DC_CHARGE[y,t]/by_rid(y,:EtaInverter) + EP[:eInverterExport][y,t] += vCAPRES_DC_CHARGE[y,t]/by_rid(y,:etainverter) + EP[:eGridExport][y,t] += vCAPRES_DC_CHARGE[y,t]/by_rid(y,:etainverter) end for y in AC_DISCHARGE EP[:eGridExport][y,t] += vCAPRES_AC_DISCHARGE[y,t] @@ -2023,26 +2030,26 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) # Constraint 3: Add capacity reserve margin contributions from VRE-STOR resources to capacity reserve margin constraint @expression(EP, eCapResMarBalanceStor_VRE_STOR[res=1:inputs["NCapacityReserveMargin"], t=1:T],( - sum(by_rid(y,Symbol("CapResVreStor_$res"))*by_rid(y,:EtaInverter)*inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y] for y in inputs["VS_SOLAR"]) - + sum(by_rid(y,Symbol("CapResVreStor_$res"))*inputs["pP_Max_Wind"][y,t]*EP[:eTotalCap_WIND][y] for y in inputs["VS_WIND"]) - + sum(by_rid(y,Symbol("CapResVreStor_$res"))*by_rid(y,:EtaInverter)*(EP[:vP_DC_DISCHARGE][y,t]+vCAPRES_DC_DISCHARGE[y,t]) for y in DC_DISCHARGE) - + sum(by_rid(y,Symbol("CapResVreStor_$res"))*(EP[:vP_AC_DISCHARGE][y,t]+vCAPRES_AC_DISCHARGE[y,t]) for y in AC_DISCHARGE) - - sum(by_rid(y,Symbol("CapResVreStor_$res"))*(EP[:vP_DC_CHARGE][y,t]+vCAPRES_DC_CHARGE[y,t])/by_rid(y,:EtaInverter) for y in DC_CHARGE) - - sum(by_rid(y,Symbol("CapResVreStor_$res"))*(EP[:vP_AC_CHARGE][y,t]+vCAPRES_AC_CHARGE[y,t]) for y in AC_CHARGE))) + sum(derating_factor(gen[y],tag=res)*by_rid(y,:etainverter)*inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y] for y in inputs["VS_SOLAR"]) + + sum(derating_factor(gen[y],tag=res)*inputs["pP_Max_Wind"][y,t]*EP[:eTotalCap_WIND][y] for y in inputs["VS_WIND"]) + + sum(derating_factor(gen[y],tag=res)*by_rid(y,:etainverter)*(EP[:vP_DC_DISCHARGE][y,t]+vCAPRES_DC_DISCHARGE[y,t]) for y in DC_DISCHARGE) + + sum(derating_factor(gen[y],tag=res)*(EP[:vP_AC_DISCHARGE][y,t]+vCAPRES_AC_DISCHARGE[y,t]) for y in AC_DISCHARGE) + - sum(derating_factor(gen[y],tag=res)*(EP[:vP_DC_CHARGE][y,t]+vCAPRES_DC_CHARGE[y,t])/by_rid(y,:etainverter) for y in DC_CHARGE) + - sum(derating_factor(gen[y],tag=res)*(EP[:vP_AC_CHARGE][y,t]+vCAPRES_AC_CHARGE[y,t]) for y in AC_CHARGE))) EP[:eCapResMarBalance] += EP[:eCapResMarBalanceStor_VRE_STOR] ### OBJECTIVE FUNCTION ADDITIONS ### #Variable costs of DC "virtual charging" for technologies "y" during hour "t" in zone "z" @expression(EP, eCVar_Charge_DC_virtual[y in DC_CHARGE,t=1:T], - inputs["omega"][t]*virtual_discharge_cost*vCAPRES_DC_CHARGE[y,t]/by_rid(y,:EtaInverter)) + inputs["omega"][t]*virtual_discharge_cost*vCAPRES_DC_CHARGE[y,t]/by_rid(y,:etainverter)) @expression(EP, eTotalCVar_Charge_DC_T_virtual[t=1:T], sum(eCVar_Charge_DC_virtual[y,t] for y in DC_CHARGE)) @expression(EP, eTotalCVar_Charge_DC_virtual, sum(eTotalCVar_Charge_DC_T_virtual[t] for t in 1:T)) EP[:eObj] += eTotalCVar_Charge_DC_virtual #Variable costs of DC "virtual discharging" for technologies "y" during hour "t" in zone "z" @expression(EP, eCVar_Discharge_DC_virtual[y in DC_DISCHARGE,t=1:T], - inputs["omega"][t]*virtual_discharge_cost*by_rid(y,:EtaInverter)*vCAPRES_DC_DISCHARGE[y,t]) + inputs["omega"][t]*virtual_discharge_cost*by_rid(y,:etainverter)*vCAPRES_DC_DISCHARGE[y,t]) @expression(EP, eTotalCVar_Discharge_DC_T_virtual[t=1:T], sum(eCVar_Discharge_DC_virtual[y,t] for y in DC_DISCHARGE)) @expression(EP, eTotalCVar_Discharge_DC_virtual, sum(eTotalCVar_Discharge_DC_T_virtual[t] for t in 1:T)) EP[:eObj] += eTotalCVar_Discharge_DC_virtual @@ -2085,7 +2092,7 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) ### EXPRESSIONS ### @expression(EP, eVreStorVSoCBalLongDurationStorageStart[y in VS_LDS, w=1:REP_PERIOD], - (1-dfGen[y,:Self_Disch])*(EP[:vCAPRES_VS_VRE_STOR][y,hours_per_subperiod*w]-vCAPCONTRSTOR_VdSOC_VRE_STOR[y,w])) + (1-self_discharge(gen[y]))*(EP[:vCAPRES_VS_VRE_STOR][y,hours_per_subperiod*w]-vCAPCONTRSTOR_VdSOC_VRE_STOR[y,w])) DC_DISCHARGE_CONSTRAINTSET = intersect(DC_DISCHARGE, VS_LDS) DC_CHARGE_CONSTRAINTSET = intersect(DC_CHARGE, VS_LDS) @@ -2093,16 +2100,16 @@ function vre_stor_capres!(EP::Model, inputs::Dict, setup::Dict) AC_CHARGE_CONSTRAINTSET = intersect(AC_CHARGE, VS_LDS) for w=1:REP_PERIOD for y in DC_DISCHARGE_CONSTRAINTSET - eVreStorVSoCBalLongDurationStorageStart[y,w] += EP[:vCAPRES_DC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:Eff_Down_DC) + eVreStorVSoCBalLongDurationStorageStart[y,w] += EP[:vCAPRES_DC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE_CONSTRAINTSET - eVreStorVSoCBalLongDurationStorageStart[y,w] -= by_rid(y,:Eff_Up_DC)*EP[:vCAPRES_DC_CHARGE][y,hours_per_subperiod*(w-1)+1] + eVreStorVSoCBalLongDurationStorageStart[y,w] -= by_rid(y,:eff_up_dc)*EP[:vCAPRES_DC_CHARGE][y,hours_per_subperiod*(w-1)+1] end for y in AC_DISCHARGE_CONSTRAINTSET - eVreStorVSoCBalLongDurationStorageStart[y,w] += EP[:vCAPRES_AC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:Eff_Down_AC) + eVreStorVSoCBalLongDurationStorageStart[y,w] += EP[:vCAPRES_AC_DISCHARGE][y,hours_per_subperiod*(w-1)+1]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE_CONSTRAINTSET - eVreStorVSoCBalLongDurationStorageStart[y,w] -= by_rid(y,:Eff_Up_AC)*EP[:vCAPRES_AC_CHARGE][y,hours_per_subperiod*(w-1)+1] + eVreStorVSoCBalLongDurationStorageStart[y,w] -= by_rid(y,:eff_up_ac)*EP[:vCAPRES_AC_CHARGE][y,hours_per_subperiod*(w-1)+1] end end @@ -2217,7 +2224,9 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) ### LOAD DATA & CREATE SETS ### - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage + T = inputs["T"] VRE_STOR = inputs["VRE_STOR"] STOR = inputs["VS_STOR"] @@ -2271,7 +2280,7 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) VS_SYM_AC_REG = intersect(VS_SYM_AC, STOR_REG) # Set of symmetric AC resources with REG reserves VS_SYM_AC_RSV = intersect(VS_SYM_AC, STOR_RSV) # Set of symmetric AC resources with RSV reserves - by_rid(rid, sym) = by_rid_df(rid, sym, inputs["dfVRE_STOR"]) + by_rid(rid, sym) = by_rid_res(rid, sym, gen_VRE_STOR) ### VARIABLES ### @@ -2307,34 +2316,34 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) for t=1:T for y in DC_DISCHARGE eDischargeDCMin[y,t] += EP[:vP_DC_DISCHARGE][y,t] - eDischargeMax[y,t] += EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eDischargeMax[y,t] += EP[:vP_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end for y in DC_CHARGE eChargeDCMin[y,t] += EP[:vP_DC_CHARGE][y,t] - eChargeMax[y,t] += by_rid(y,:Eff_Up_DC)*EP[:vP_DC_CHARGE][y,t] + eChargeMax[y,t] += by_rid(y,:eff_up_dc)*EP[:vP_DC_CHARGE][y,t] end for y in AC_DISCHARGE eDischargeACMin[y,t] += EP[:vP_AC_DISCHARGE][y,t] - eDischargeMax[y,t] += EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eDischargeMax[y,t] += EP[:vP_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end for y in AC_CHARGE eChargeACMin[y,t] += EP[:vP_AC_CHARGE][y,t] - eChargeMax[y,t] += by_rid(y,:Eff_Up_AC)*EP[:vP_AC_CHARGE][y,t] + eChargeMax[y,t] += by_rid(y,:eff_up_ac)*EP[:vP_AC_CHARGE][y,t] end for y in SOLAR_REG - eVreStorRegOnlyBalance[y,t] += by_rid(y,:EtaInverter)*vREG_SOLAR[y,t] - EP[:eGridExport][y,t] += by_rid(y,:EtaInverter)*vREG_SOLAR[y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vREG_SOLAR[y,t] + eVreStorRegOnlyBalance[y,t] += by_rid(y,:etainverter)*vREG_SOLAR[y,t] + EP[:eGridExport][y,t] += by_rid(y,:etainverter)*vREG_SOLAR[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vREG_SOLAR[y,t] EP[:eSolarGenMaxS][y,t] += vREG_SOLAR[y,t] end for y in SOLAR_RSV - eVreStorRsvOnlyBalance[y,t] += by_rid(y,:EtaInverter)*vRSV_SOLAR[y,t] - EP[:eGridExport][y,t] += by_rid(y,:EtaInverter)*vRSV_SOLAR[y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vRSV_SOLAR[y,t] + eVreStorRsvOnlyBalance[y,t] += by_rid(y,:etainverter)*vRSV_SOLAR[y,t] + EP[:eGridExport][y,t] += by_rid(y,:etainverter)*vRSV_SOLAR[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vRSV_SOLAR[y,t] EP[:eSolarGenMaxS][y,t] += vRSV_SOLAR[y,t] end @@ -2350,47 +2359,47 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) end for y in DC_DISCHARGE_REG - eVreStorRegOnlyBalance[y,t] += by_rid(y,:EtaInverter)*vREG_DC_Discharge[y,t] + eVreStorRegOnlyBalance[y,t] += by_rid(y,:etainverter)*vREG_DC_Discharge[y,t] eDischargeDCMin[y,t] -= vREG_DC_Discharge[y,t] - eDischargeMax[y,t] += EP[:vREG_DC_Discharge][y,t]/by_rid(y,:Eff_Down_DC) - EP[:eGridExport][y,t] += by_rid(y,:EtaInverter)*vREG_DC_Discharge[y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vREG_DC_Discharge[y,t] + eDischargeMax[y,t] += EP[:vREG_DC_Discharge][y,t]/by_rid(y,:eff_down_dc) + EP[:eGridExport][y,t] += by_rid(y,:etainverter)*vREG_DC_Discharge[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vREG_DC_Discharge[y,t] end for y in DC_DISCHARGE_RSV - eVreStorRsvOnlyBalance[y,t] += by_rid(y,:EtaInverter)*vRSV_DC_Discharge[y,t] - eDischargeMax[y,t] += EP[:vRSV_DC_Discharge][y,t]/by_rid(y,:Eff_Down_DC) - EP[:eGridExport][y,t] += by_rid(y,:EtaInverter)*vRSV_DC_Discharge[y,t] - EP[:eInverterExport][y,t] += by_rid(y,:EtaInverter)*vRSV_DC_Discharge[y,t] + eVreStorRsvOnlyBalance[y,t] += by_rid(y,:etainverter)*vRSV_DC_Discharge[y,t] + eDischargeMax[y,t] += EP[:vRSV_DC_Discharge][y,t]/by_rid(y,:eff_down_dc) + EP[:eGridExport][y,t] += by_rid(y,:etainverter)*vRSV_DC_Discharge[y,t] + EP[:eInverterExport][y,t] += by_rid(y,:etainverter)*vRSV_DC_Discharge[y,t] end for y in DC_CHARGE_REG - eVreStorRegOnlyBalance[y,t] += vREG_DC_Charge[y,t]/by_rid(y,:EtaInverter) + eVreStorRegOnlyBalance[y,t] += vREG_DC_Charge[y,t]/by_rid(y,:etainverter) eChargeDCMin[y,t] -= vREG_DC_Charge[y,t] - eChargeMax[y,t] += by_rid(y,:Eff_Up_DC)*EP[:vREG_DC_Charge][y,t] - EP[:eGridExport][y,t] += vREG_DC_Charge[y,t]/by_rid(y,:EtaInverter) - EP[:eInverterExport][y,t] += vREG_DC_Charge[y,t]/by_rid(y,:EtaInverter) + eChargeMax[y,t] += by_rid(y,:eff_up_dc)*EP[:vREG_DC_Charge][y,t] + EP[:eGridExport][y,t] += vREG_DC_Charge[y,t]/by_rid(y,:etainverter) + EP[:eInverterExport][y,t] += vREG_DC_Charge[y,t]/by_rid(y,:etainverter) end for y in DC_CHARGE_RSV - eVreStorRsvOnlyBalance[y,t] += vRSV_DC_Charge[y,t]/by_rid(y,:EtaInverter) + eVreStorRsvOnlyBalance[y,t] += vRSV_DC_Charge[y,t]/by_rid(y,:etainverter) eChargeDCMin[y,t] -= vRSV_DC_Charge[y,t] end for y in AC_DISCHARGE_REG eVreStorRegOnlyBalance[y,t] += vREG_AC_Discharge[y,t] eDischargeACMin[y,t] -= vREG_AC_Discharge[y,t] - eDischargeMax[y,t] += EP[:vREG_AC_Discharge][y,t]/by_rid(y,:Eff_Down_AC) + eDischargeMax[y,t] += EP[:vREG_AC_Discharge][y,t]/by_rid(y,:eff_down_ac) EP[:eGridExport][y,t] += vREG_AC_Discharge[y,t] end for y in AC_DISCHARGE_RSV eVreStorRsvOnlyBalance[y,t] += vRSV_AC_Discharge[y,t] - eDischargeMax[y,t] += EP[:vRSV_AC_Discharge][y,t]/by_rid(y,:Eff_Down_AC) + eDischargeMax[y,t] += EP[:vRSV_AC_Discharge][y,t]/by_rid(y,:eff_down_ac) EP[:eGridExport][y,t] += vRSV_AC_Discharge[y,t] end for y in AC_CHARGE_REG eVreStorRegOnlyBalance[y,t] += vREG_AC_Charge[y,t] eChargeACMin[y,t] -= vREG_AC_Charge[y,t] - eChargeMax[y,t] += by_rid(y,:Eff_Down_AC)*EP[:vREG_AC_Charge][y,t] + eChargeMax[y,t] += by_rid(y,:eff_down_ac)*EP[:vREG_AC_Charge][y,t] EP[:eGridExport][y,t] += vREG_AC_Charge[y,t] end for y in AC_CHARGE_RSV @@ -2440,10 +2449,10 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) if CapacityReserveMargin > 0 for t=1:T for y in DC_DISCHARGE - eDischargeMax[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_DC) + eDischargeMax[y,t] += EP[:vCAPRES_DC_DISCHARGE][y,t]/by_rid(y,:eff_down_dc) end for y in AC_DISCHARGE - eDischargeMax[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:Eff_Down_AC) + eDischargeMax[y,t] += EP[:vCAPRES_AC_DISCHARGE][y,t]/by_rid(y,:eff_down_ac) end end end @@ -2454,8 +2463,8 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) if !isempty(VRE_STOR_REG_RSV) @constraints(EP, begin # Maximum VRE-STOR contribution to reserves is a specified fraction of installed grid connection capacity - [y in VRE_STOR_REG_RSV, t=1:T], EP[:vREG][y,t] <= dfGen[y,:Reg_Max]*EP[:eTotalCap][y] - [y in VRE_STOR_REG_RSV, t=1:T], EP[:vRSV][y,t] <= dfGen[y,:Rsv_Max]*EP[:eTotalCap][y] + [y in VRE_STOR_REG_RSV, t=1:T], EP[:vREG][y,t] <= reg_max(gen[y])*EP[:eTotalCap][y] + [y in VRE_STOR_REG_RSV, t=1:T], EP[:vRSV][y,t] <= rsv_max(gen[y])*EP[:eTotalCap][y] # Actual contribution to regulation and reserves is sum of auxilary variables [y in VRE_STOR_REG_RSV, t=1:T], EP[:vREG][y,t] == eVreStorRegOnlyBalance[y,t] @@ -2465,7 +2474,7 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) if !isempty(VRE_STOR_REG_ONLY) @constraints(EP, begin # Maximum VRE-STOR contribution to reserves is a specified fraction of installed grid connection capacity - [y in VRE_STOR_REG_ONLY, t=1:T], EP[:vREG][y,t] <= dfGen[y,:Reg_Max]*EP[:eTotalCap][y] + [y in VRE_STOR_REG_ONLY, t=1:T], EP[:vREG][y,t] <= reg_max(gen[y])*EP[:eTotalCap][y] # Actual contribution to regulation is sum of auxilary variables [y in VRE_STOR_REG_ONLY, t=1:T], EP[:vREG][y,t] == eVreStorRegOnlyBalance[y,t] @@ -2474,7 +2483,7 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) if !isempty(VRE_STOR_RSV_ONLY) @constraints(EP, begin # Maximum VRE-STOR contribution to reserves is a specified fraction of installed grid connection capacity - [y in VRE_STOR_RSV_ONLY, t=1:T], EP[:vRSV][y,t] <= dfGen[y,:Rsv_Max]*EP[:eTotalCap][y] + [y in VRE_STOR_RSV_ONLY, t=1:T], EP[:vRSV][y,t] <= rsv_max(gen[y])*EP[:eTotalCap][y] # Actual contribution to reserves is sum of auxilary variables [y in VRE_STOR_RSV_ONLY, t=1:T], EP[:vRSV][y,t] == eVreStorRsvOnlyBalance[y,t] @@ -2525,9 +2534,9 @@ function vre_stor_reserves!(EP::Model, inputs::Dict, setup::Dict) end # Total system reserve constraints - @expression(EP, eRegReqVreStor[t=1:T], inputs["pReg_Req_VRE"]*sum(inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y]*by_rid(y, :EtaInverter) for y in SOLAR_REG) + @expression(EP, eRegReqVreStor[t=1:T], inputs["pReg_Req_VRE"]*sum(inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y]*by_rid(y, :etainverter) for y in SOLAR_REG) + inputs["pReg_Req_VRE"]*sum(inputs["pP_Max_Wind"][y,t]*EP[:eTotalCap_WIND][y] for y in WIND_REG)) - @expression(EP, eRsvReqVreStor[t=1:T], inputs["pRsv_Req_VRE"]*sum(inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y]*by_rid(y, :EtaInverter) for y in SOLAR_RSV) + @expression(EP, eRsvReqVreStor[t=1:T], inputs["pRsv_Req_VRE"]*sum(inputs["pP_Max_Solar"][y,t]*EP[:eTotalCap_SOLAR][y]*by_rid(y, :etainverter) for y in SOLAR_RSV) + inputs["pRsv_Req_VRE"]*sum(inputs["pP_Max_Wind"][y,t]*EP[:eTotalCap_WIND][y] for y in WIND_RSV)) if !isempty(VRE_STOR_REG) diff --git a/src/model/utility.jl b/src/model/utility.jl index 22a3a3ede2..58ef20231f 100644 --- a/src/model/utility.jl +++ b/src/model/utility.jl @@ -67,21 +67,19 @@ function is_nonzero(df::DataFrame, col::Symbol)::BitVector convert(BitVector, df[!, col] .> 0)::BitVector end -@doc raw""" - by_rid_df(rid::Integer, sym::Symbol, df::DataFrame) - - This function extracts the row of a DataFrame df for the resource given by the resource ID "rid". -""" -function by_rid_df(rid::Integer, sym::Symbol, df::DataFrame) - return df[df.R_ID .== rid, sym][] +function is_nonzero(rs::Vector{AbstractResource}, col::Symbol) + !isnothing(findfirst(r -> get(r, col, 0) ≠ 0, rs)) end -@doc raw""" - by_rid_df(rid::Vector{Int}, sym::Symbol, df::DataFrame) +@doc raw""" + by_rid_res(rid::Integer, sym::Symbol, rs::Vector{<:AbstractResource}) - This function extracts the rows of a DataFrame df for the resources given by the vector of resource IDs "rid". + This function returns the value of the attribute `sym` for the resource given by the ID `rid`. """ -function by_rid_df(rid::Vector{Int}, sym::Symbol, df::DataFrame) - indices = [findall(x -> x == y, df.R_ID)[] for y in rid] - return df[indices, sym] +function by_rid_res(rid::Integer, sym::Symbol, rs::Vector{<:AbstractResource}) + r = rs[findfirst(resource_id.(rs) .== rid)] + # use getter function for attribute `sym` if exists in GenX, otherwise get the attribute directly + f = isdefined(GenX, sym) ? getfield(GenX, sym) : r -> getproperty(r, sym) + return f(r) end + diff --git a/src/multi_stage/configure_multi_stage_inputs.jl b/src/multi_stage/configure_multi_stage_inputs.jl index c113c04331..458de01556 100644 --- a/src/multi_stage/configure_multi_stage_inputs.jl +++ b/src/multi_stage/configure_multi_stage_inputs.jl @@ -69,7 +69,7 @@ returns: dictionary containing updated model inputs, to be used in the generate\ """ function configure_multi_stage_inputs(inputs_d::Dict, settings_d::Dict, NetworkExpansion::Int64) - dfGen = inputs_d["dfGen"] + gen = inputs_d["RESOURCES"] # Parameter inputs when multi-year discounting is activated cur_stage = settings_d["CurStage"] @@ -84,39 +84,40 @@ function configure_multi_stage_inputs(inputs_d::Dict, settings_d::Dict, NetworkE if !myopic ### Leave myopic costs in annualized form and do not scale OPEX costs # 1. Convert annualized investment costs incured within the model horizon into overnight capital costs # NOTE: Although the "yr" suffix is still in use in these parameter names, they no longer represent annualized costs but rather truncated overnight capital costs - inputs_d["dfGen"][!,:Inv_Cost_per_MWyr] = compute_overnight_capital_cost(settings_d,dfGen[!,:Inv_Cost_per_MWyr],dfGen[!,:Capital_Recovery_Period],dfGen[!,:WACC]) - inputs_d["dfGen"][!,:Inv_Cost_per_MWhyr] = compute_overnight_capital_cost(settings_d,dfGen[!,:Inv_Cost_per_MWhyr],dfGen[!,:Capital_Recovery_Period],dfGen[!,:WACC]) - inputs_d["dfGen"][!,:Inv_Cost_Charge_per_MWyr] = compute_overnight_capital_cost(settings_d,dfGen[!,:Inv_Cost_Charge_per_MWyr],dfGen[!,:Capital_Recovery_Period],dfGen[!,:WACC]) + gen.inv_cost_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_per_mwyr.(gen), capital_recovery_period.(gen), tech_wacc.(gen)) + gen.inv_cost_per_mwhyr = compute_overnight_capital_cost(settings_d, inv_cost_per_mwhyr.(gen), capital_recovery_period.(gen), tech_wacc.(gen)) + gen.inv_cost_charge_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_charge_per_mwyr.(gen), capital_recovery_period.(gen), tech_wacc.(gen)) # 2. Update fixed O&M costs to account for the possibility of more than 1 year between two model stages # NOTE: Although the "yr" suffix is still in use in these parameter names, they now represent total costs incured in each stage, which may be multiple years - inputs_d["dfGen"][!,:Fixed_OM_Cost_per_MWyr] .*= OPEXMULT - inputs_d["dfGen"][!,:Fixed_OM_Cost_per_MWhyr] .*= OPEXMULT - inputs_d["dfGen"][!,:Fixed_OM_Cost_Charge_per_MWyr] .*= OPEXMULT + gen.fixed_om_cost_per_mwyr = fixed_om_cost_per_mwyr.(gen) .* OPEXMULT + gen.fixed_om_cost_per_mwhyr = fixed_om_cost_per_mwhyr.(gen) .* OPEXMULT + gen.fixed_om_cost_charge_per_mwyr = fixed_om_cost_charge_per_mwyr.(gen) .* OPEXMULT # Conduct 1. and 2. for any co-located VRE-STOR resources if !isempty(inputs_d["VRE_STOR"]) - dfVRE_STOR = inputs_d["dfVRE_STOR"] - dfVRE_STOR[!,:Inv_Cost_Inverter_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Inverter_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_DC],dfVRE_STOR[!,:WACC_DC]) - dfVRE_STOR[!,:Inv_Cost_Solar_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Solar_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Solar],dfVRE_STOR[!,:WACC_Solar]) - dfVRE_STOR[!,:Inv_Cost_Wind_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Wind_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Wind],dfVRE_STOR[!,:WACC_Wind]) - dfVRE_STOR[!,:Inv_Cost_Discharge_DC_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Discharge_DC_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Discharge_DC],dfVRE_STOR[!,:WACC_Discharge_DC]) - dfVRE_STOR[!,:Inv_Cost_Charge_DC_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Charge_DC_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Charge_DC],dfVRE_STOR[!,:WACC_Charge_DC]) - dfVRE_STOR[!,:Inv_Cost_Discharge_AC_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Discharge_AC_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Discharge_AC],dfVRE_STOR[!,:WACC_Discharge_AC]) - dfVRE_STOR[!,:Inv_Cost_Charge_AC_per_MWyr] = compute_overnight_capital_cost(settings_d,dfVRE_STOR[!,:Inv_Cost_Charge_AC_per_MWyr],dfVRE_STOR[!,:Capital_Recovery_Period_Charge_AC],dfVRE_STOR[!,:WACC_Charge_AC]) - - dfVRE_STOR[!,:Fixed_OM_Inverter_Cost_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Solar_Cost_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Wind_Cost_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Cost_Discharge_DC_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Cost_Charge_DC_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Cost_Discharge_AC_per_MWyr] .*= OPEXMULT - dfVRE_STOR[!,:Fixed_OM_Cost_Charge_AC_per_MWyr] .*= OPEXMULT + gen_VRE_STOR = gen.VreStorage + gen_VRE_STOR.inv_cost_inverter_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_inverter_per_mwyr.(gen_VRE_STOR), capital_recovery_period_dc.(gen_VRE_STOR), tech_wacc_dc.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_solar_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_solar_per_mwyr.(gen_VRE_STOR), capital_recovery_period_solar.(gen_VRE_STOR), tech_wacc_solar.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_wind_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_wind_per_mwyr.(gen_VRE_STOR), capital_recovery_period_wind.(gen_VRE_STOR), tech_wacc_wind.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_discharge_dc_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_discharge_dc_per_mwyr.(gen_VRE_STOR), capital_recovery_period_discharge_dc.(gen_VRE_STOR), tech_wacc_discharge_dc.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_charge_dc_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_charge_dc_per_mwyr.(gen_VRE_STOR), capital_recovery_period_charge_dc.(gen_VRE_STOR), tech_wacc_charge_dc.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_discharge_ac_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_discharge_ac_per_mwyr.(gen_VRE_STOR), capital_recovery_period_discharge_ac.(gen_VRE_STOR), tech_wacc_discharge_ac.(gen_VRE_STOR)) + gen_VRE_STOR.inv_cost_charge_ac_per_mwyr = compute_overnight_capital_cost(settings_d, inv_cost_charge_ac_per_mwyr.(gen_VRE_STOR), capital_recovery_period_charge_ac.(gen_VRE_STOR), tech_wacc_charge_ac.(gen_VRE_STOR)) + + gen_VRE_STOR.fixed_om_inverter_cost_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_solar_cost_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_wind_cost_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_cost_discharge_dc_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_cost_charge_dc_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_cost_discharge_ac_per_mwyr .*= OPEXMULT + gen_VRE_STOR.fixed_om_cost_charge_ac_per_mwyr .*= OPEXMULT end end - retirable = resources_which_can_be_retired(dfGen) + retirable = is_retirable(gen) + # TODO: ask Sam about this # Set of all resources eligible for capacity retirements inputs_d["RET_CAP"] = retirable # Set of all storage resources eligible for energy capacity retirements diff --git a/src/multi_stage/endogenous_retirement.jl b/src/multi_stage/endogenous_retirement.jl index 3371476c17..5aa21599db 100644 --- a/src/multi_stage/endogenous_retirement.jl +++ b/src/multi_stage/endogenous_retirement.jl @@ -22,41 +22,44 @@ function get_retirement_stage(cur_stage::Int, lifetime::Int, stage_lens::Array{I return Int(ret_stage) end -function update_cumulative_min_ret!(inputs_d::Dict,t::Int,Resource_Set::String,dfGen_Name::String,RetCap::Symbol) - - CumRetCap = Symbol("Cum_"*String(RetCap)); +function update_cumulative_min_ret!(inputs_d::Dict,t::Int,Resource_Set::String,RetCap::Symbol) + gen_name = "RESOURCES" + CumRetCap = Symbol("cum_"*String(RetCap)) + # if the getter function exists in GenX then use it, otherwise get the attribute directly + ret_cap_f = isdefined(GenX, RetCap) ? getfield(GenX, RetCap) : r -> getproperty(r, RetCap) + cum_ret_cap_f = isdefined(GenX, CumRetCap) ? getfield(GenX, CumRetCap) : r -> getproperty(r, CumRetCap) if !isempty(inputs_d[1][Resource_Set]) + gen_t = inputs_d[t][gen_name] if t==1 - inputs_d[t][dfGen_Name][!,CumRetCap] = inputs_d[t][dfGen_Name][!,RetCap]; + gen_t[CumRetCap] = ret_cap_f.(gen_t) else - inputs_d[t][dfGen_Name][!,CumRetCap] = inputs_d[t-1][dfGen_Name][!,CumRetCap] + inputs_d[t][dfGen_Name][!,RetCap]; + gen_t[CumRetCap] = cum_ret_cap_f.(inputs_d[t-1][gen_name]) + ret_cap_f.(gen_t) end end - end function compute_cumulative_min_retirements!(inputs_d::Dict,t::Int) - mytab =[("G","dfGen",:Min_Retired_Cap_MW), - ("STOR_ALL","dfGen",:Min_Retired_Energy_Cap_MW), - ("STOR_ASYMMETRIC","dfGen",:Min_Retired_Charge_Cap_MW)]; + mytab =[("G", :min_retired_cap_mw), + ("STOR_ALL", :min_retired_energy_cap_mw), + ("STOR_ASYMMETRIC", :min_retired_charge_cap_mw)]; if !isempty(inputs_d[1]["VRE_STOR"]) - append!(mytab,[("VS_DC","dfVRE_STOR",:Min_Retired_Cap_Inverter_MW), - ("VS_SOLAR","dfVRE_STOR",:Min_Retired_Cap_Solar_MW), - ("VS_WIND","dfVRE_STOR",:Min_Retired_Cap_Wind_MW), - ("VS_STOR","dfGen",:Min_Retired_Energy_Cap_MW), - ("VS_ASYM_DC_DISCHARGE","dfVRE_STOR",:Min_Retired_Cap_Discharge_DC_MW), - ("VS_ASYM_DC_CHARGE","dfVRE_STOR",:Min_Retired_Cap_Charge_DC_MW), - ("VS_ASYM_AC_DISCHARGE","dfVRE_STOR",:Min_Retired_Cap_Discharge_AC_MW), - ("VS_ASYM_AC_CHARGE","dfVRE_STOR",:Min_Retired_Cap_Charge_AC_MW)]) + append!(mytab,[("VS_STOR", :min_retired_energy_cap_mw), + ("VS_DC", :min_retired_cap_inverter_mw), + ("VS_SOLAR", :min_retired_cap_solar_mw), + ("VS_WIND", :min_retired_cap_wind_mw), + ("VS_ASYM_DC_DISCHARGE", :min_retired_cap_discharge_dc_mw), + ("VS_ASYM_DC_CHARGE", :min_retired_cap_charge_dc_mw), + ("VS_ASYM_AC_DISCHARGE", :min_retired_cap_discharge_ac_mw), + ("VS_ASYM_AC_CHARGE", :min_retired_cap_charge_ac_mw)]) end - for (Resource_Set,dfGen_Name,RetCap) in mytab - update_cumulative_min_ret!(inputs_d,t,Resource_Set,dfGen_Name,RetCap) + for (Resource_Set,RetCap) in mytab + update_cumulative_min_ret!(inputs_d,t,Resource_Set,RetCap) end @@ -122,7 +125,7 @@ function endogenous_retirement_discharge!(EP::Model, inputs::Dict, num_stages::I println("Endogenous Retirement (Discharge) Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] NEW_CAP = inputs["NEW_CAP"] # Set of all resources eligible for new capacity RET_CAP = inputs["RET_CAP"] # Set of all resources eligible for capacity retirements @@ -148,12 +151,12 @@ function endogenous_retirement_discharge!(EP::Model, inputs::Dict, num_stages::I # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrack[y in RET_CAP], sum(EP[:vRETCAPTRACK][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrack[y in RET_CAP], sum(EP[:vCAPTRACK][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) + @expression(EP, eNewCapTrack[y in RET_CAP], sum(EP[:vCAPTRACK][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) @expression(EP, eMinRetCapTrack[y in RET_CAP], if y in COMMIT - dfGen[y,:Cum_Min_Retired_Cap_MW]/dfGen[y,:Cap_Size] + cum_min_retired_cap_mw(gen[y])/cap_size(gen[y]) else - dfGen[y,:Cum_Min_Retired_Cap_MW] + cum_min_retired_cap_mw(gen[y]) end ) @@ -177,7 +180,7 @@ function endogenous_retirement_charge!(EP::Model, inputs::Dict, num_stages::Int, println("Endogenous Retirement (Charge) Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] NEW_CAP_CHARGE = inputs["NEW_CAP_CHARGE"] # Set of asymmetric charge/discharge storage resources eligible for new charge capacity RET_CAP_CHARGE = inputs["RET_CAP_CHARGE"] # Set of asymmetric charge/discharge storage resources eligible for charge capacity retirements @@ -202,8 +205,8 @@ function endogenous_retirement_charge!(EP::Model, inputs::Dict, num_stages::Int, # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackCharge[y in RET_CAP_CHARGE], sum(EP[:vRETCAPTRACKCHARGE][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackCharge[y in RET_CAP_CHARGE], sum(EP[:vCAPTRACKCHARGE][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackCharge[y in RET_CAP_CHARGE], dfGen[y,:Cum_Min_Retired_Charge_Cap_MW]) + @expression(EP, eNewCapTrackCharge[y in RET_CAP_CHARGE], sum(EP[:vCAPTRACKCHARGE][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackCharge[y in RET_CAP_CHARGE], cum_min_retired_charge_cap_mw(gen[y])) ### Constratints ### @@ -225,7 +228,7 @@ function endogenous_retirement_energy!(EP::Model, inputs::Dict, num_stages::Int, println("Endogenous Retirement (Energy) Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] NEW_CAP_ENERGY = inputs["NEW_CAP_ENERGY"] # Set of all storage resources eligible for new energy capacity RET_CAP_ENERGY = inputs["RET_CAP_ENERGY"] # Set of all storage resources eligible for energy capacity retirements @@ -250,8 +253,8 @@ function endogenous_retirement_energy!(EP::Model, inputs::Dict, num_stages::Int, # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackEnergy[y in RET_CAP_ENERGY], sum(EP[:vRETCAPTRACKENERGY][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackEnergy[y in RET_CAP_ENERGY], sum(EP[:vCAPTRACKENERGY][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackEnergy[y in RET_CAP_ENERGY], dfGen[y,:Cum_Min_Retired_Energy_Cap_MW]) + @expression(EP, eNewCapTrackEnergy[y in RET_CAP_ENERGY], sum(EP[:vCAPTRACKENERGY][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackEnergy[y in RET_CAP_ENERGY], cum_min_retired_energy_cap_mw(gen[y])) ### Constratints ### @@ -272,9 +275,7 @@ function endogenous_retirement_vre_stor_dc!(EP::Model, inputs::Dict, num_stages: println("Endogenous Retirement (VRE-Storage DC) Module") - dfGen = inputs["dfGen"] - - dfVRE_STOR = inputs["dfVRE_STOR"]; + gen = inputs["RESOURCES"] NEW_CAP_DC = inputs["NEW_CAP_DC"] # Set of all resources eligible for new capacity RET_CAP_DC = inputs["RET_CAP_DC"] # Set of all resources eligible for capacity retirements @@ -299,8 +300,8 @@ function endogenous_retirement_vre_stor_dc!(EP::Model, inputs::Dict, num_stages: # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackDC[y in RET_CAP_DC], sum(EP[:vRETCAPTRACKDC][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackDC[y in RET_CAP_DC], sum(EP[:vCAPTRACKDC][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackDC[y in RET_CAP_DC], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Inverter_MW]) + @expression(EP, eNewCapTrackDC[y in RET_CAP_DC], sum(EP[:vCAPTRACKDC][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackDC[y in RET_CAP_DC], cum_min_retired_cap_inverter_mw(gen[y])) ### Constraints ### @@ -321,8 +322,7 @@ function endogenous_retirement_vre_stor_solar!(EP::Model, inputs::Dict, num_stag println("Endogenous Retirement (VRE-Storage Solar) Module") - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"]; + gen = inputs["RESOURCES"] NEW_CAP_SOLAR = inputs["NEW_CAP_SOLAR"] # Set of all resources eligible for new capacity RET_CAP_SOLAR = inputs["RET_CAP_SOLAR"] # Set of all resources eligible for capacity retirements @@ -347,8 +347,8 @@ function endogenous_retirement_vre_stor_solar!(EP::Model, inputs::Dict, num_stag # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackSolar[y in RET_CAP_SOLAR], sum(EP[:vRETCAPTRACKSOLAR][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackSolar[y in RET_CAP_SOLAR], sum(EP[:vCAPTRACKSOLAR][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackSolar[y in RET_CAP_SOLAR], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Solar_MW]) + @expression(EP, eNewCapTrackSolar[y in RET_CAP_SOLAR], sum(EP[:vCAPTRACKSOLAR][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackSolar[y in RET_CAP_SOLAR], cum_min_retired_cap_solar_mw(gen[y])) ### Constraints ### @@ -369,8 +369,7 @@ function endogenous_retirement_vre_stor_wind!(EP::Model, inputs::Dict, num_stage println("Endogenous Retirement (VRE-Storage Wind) Module") - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"]; + gen = inputs["RESOURCES"] NEW_CAP_WIND = inputs["NEW_CAP_WIND"] # Set of all resources eligible for new capacity RET_CAP_WIND = inputs["RET_CAP_WIND"] # Set of all resources eligible for capacity retirements @@ -395,8 +394,8 @@ function endogenous_retirement_vre_stor_wind!(EP::Model, inputs::Dict, num_stage # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackWind[y in RET_CAP_WIND], sum(EP[:vRETCAPTRACKWIND][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackWind[y in RET_CAP_WIND], sum(EP[:vCAPTRACKWIND][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackWind[y in RET_CAP_WIND], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Wind_MW]) + @expression(EP, eNewCapTrackWind[y in RET_CAP_WIND], sum(EP[:vCAPTRACKWIND][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackWind[y in RET_CAP_WIND], cum_min_retired_cap_wind_mw(gen[y])) ### Constraints ### @@ -417,7 +416,7 @@ function endogenous_retirement_vre_stor_stor!(EP::Model, inputs::Dict, num_stage println("Endogenous Retirement (VRE-Storage Storage) Module") - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] NEW_CAP_STOR = inputs["NEW_CAP_STOR"] # Set of all resources eligible for new capacity RET_CAP_STOR = inputs["RET_CAP_STOR"] # Set of all resources eligible for capacity retirements @@ -442,8 +441,8 @@ function endogenous_retirement_vre_stor_stor!(EP::Model, inputs::Dict, num_stage # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackEnergy_VS[y in RET_CAP_STOR], sum(EP[:vRETCAPTRACKENERGY_VS][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackEnergy_VS[y in RET_CAP_STOR], sum(EP[:vCAPTRACKENERGY_VS][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackEnergy_VS[y in RET_CAP_STOR], dfGen[y,:Cum_Min_Retired_Energy_Cap_MW]) + @expression(EP, eNewCapTrackEnergy_VS[y in RET_CAP_STOR], sum(EP[:vCAPTRACKENERGY_VS][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackEnergy_VS[y in RET_CAP_STOR], cum_min_retired_energy_cap_mw(gen[y])) ### Constratints ### @@ -464,9 +463,7 @@ function endogenous_retirement_vre_stor_discharge_dc!(EP::Model, inputs::Dict, n println("Endogenous Retirement (VRE-Storage Discharge DC) Module") - dfGen = inputs["dfGen"] - - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] NEW_CAP_DISCHARGE_DC = inputs["NEW_CAP_DISCHARGE_DC"] # Set of all resources eligible for new capacity RET_CAP_DISCHARGE_DC = inputs["RET_CAP_DISCHARGE_DC"] # Set of all resources eligible for capacity retirements @@ -491,8 +488,8 @@ function endogenous_retirement_vre_stor_discharge_dc!(EP::Model, inputs::Dict, n # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackDischargeDC[y in RET_CAP_DISCHARGE_DC], sum(EP[:vRETCAPTRACKDISCHARGEDC][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackDischargeDC[y in RET_CAP_DISCHARGE_DC], sum(EP[:vCAPTRACKDISCHARGEDC][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackDischargeDC[y in RET_CAP_DISCHARGE_DC], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Discharge_DC_MW]) + @expression(EP, eNewCapTrackDischargeDC[y in RET_CAP_DISCHARGE_DC], sum(EP[:vCAPTRACKDISCHARGEDC][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackDischargeDC[y in RET_CAP_DISCHARGE_DC], cum_min_retired_cap_discharge_dc_mw(gen[y])) ### Constraints ### @@ -513,8 +510,7 @@ function endogenous_retirement_vre_stor_charge_dc!(EP::Model, inputs::Dict, num_ println("Endogenous Retirement (VRE-Storage Charge DC) Module") - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"]; + gen = inputs["RESOURCES"] NEW_CAP_CHARGE_DC = inputs["NEW_CAP_CHARGE_DC"] # Set of all resources eligible for new capacity RET_CAP_CHARGE_DC = inputs["RET_CAP_CHARGE_DC"] # Set of all resources eligible for capacity retirements @@ -538,8 +534,8 @@ function endogenous_retirement_vre_stor_charge_dc!(EP::Model, inputs::Dict, num_ # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackChargeDC[y in RET_CAP_CHARGE_DC], sum(EP[:vRETCAPTRACKCHARGEDC][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackChargeDC[y in RET_CAP_CHARGE_DC], sum(EP[:vCAPTRACKCHARGEDC][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackChargeDC[y in RET_CAP_CHARGE_DC], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Charge_DC_MW]) + @expression(EP, eNewCapTrackChargeDC[y in RET_CAP_CHARGE_DC], sum(EP[:vCAPTRACKCHARGEDC][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackChargeDC[y in RET_CAP_CHARGE_DC], cum_min_retired_cap_charge_dc_mw(gen[y])) ### Constraints ### @@ -560,8 +556,7 @@ function endogenous_retirement_vre_stor_discharge_ac!(EP::Model, inputs::Dict, n println("Endogenous Retirement (VRE-Storage Discharge AC) Module") - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"]; + gen = inputs["RESOURCES"] NEW_CAP_DISCHARGE_AC = inputs["NEW_CAP_DISCHARGE_AC"] # Set of all resources eligible for new capacity RET_CAP_DISCHARGE_AC = inputs["RET_CAP_DISCHARGE_AC"] # Set of all resources eligible for capacity retirements @@ -585,8 +580,8 @@ function endogenous_retirement_vre_stor_discharge_ac!(EP::Model, inputs::Dict, n # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackDischargeAC[y in RET_CAP_DISCHARGE_AC], sum(EP[:vRETCAPTRACKDISCHARGEAC][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackDischargeAC[y in RET_CAP_DISCHARGE_AC], sum(EP[:vCAPTRACKDISCHARGEAC][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackDischargeAC[y in RET_CAP_DISCHARGE_AC], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Discharge_AC_MW]) + @expression(EP, eNewCapTrackDischargeAC[y in RET_CAP_DISCHARGE_AC], sum(EP[:vCAPTRACKDISCHARGEAC][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackDischargeAC[y in RET_CAP_DISCHARGE_AC], cum_min_retired_cap_discharge_ac_mw(gen[y])) ### Constraints ### @@ -607,8 +602,7 @@ function endogenous_retirement_vre_stor_charge_ac!(EP::Model, inputs::Dict, num_ println("Endogenous Retirement (VRE-Storage Charge AC) Module") - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] NEW_CAP_CHARGE_AC = inputs["NEW_CAP_CHARGE_AC"] # Set of all resources eligible for new capacity RET_CAP_CHARGE_AC = inputs["RET_CAP_CHARGE_AC"] # Set of all resources eligible for capacity retirements @@ -632,8 +626,8 @@ function endogenous_retirement_vre_stor_charge_ac!(EP::Model, inputs::Dict, num_ # Construct and add the endogenous retirement constraint expressions @expression(EP, eRetCapTrackChargeAC[y in RET_CAP_CHARGE_AC], sum(EP[:vRETCAPTRACKCHARGEAC][y,p] for p=1:cur_stage)) - @expression(EP, eNewCapTrackChargeAC[y in RET_CAP_CHARGE_AC], sum(EP[:vCAPTRACKCHARGEAC][y,p] for p=1:get_retirement_stage(cur_stage, dfGen[!,:Lifetime][y], stage_lens))) - @expression(EP, eMinRetCapTrackChargeAC[y in RET_CAP_CHARGE_AC], dfVRE_STOR[y,:Cum_Min_Retired_Cap_Charge_AC_MW]) + @expression(EP, eNewCapTrackChargeAC[y in RET_CAP_CHARGE_AC], sum(EP[:vCAPTRACKCHARGEAC][y,p] for p=1:get_retirement_stage(cur_stage, lifetime(gen[y]), stage_lens))) + @expression(EP, eMinRetCapTrackChargeAC[y in RET_CAP_CHARGE_AC], cum_min_retired_cap_charge_ac_mw(gen[y])) ### Constraints ### diff --git a/src/time_domain_reduction/time_domain_reduction.jl b/src/time_domain_reduction/time_domain_reduction.jl index 3b27644211..1bc854e6c8 100644 --- a/src/time_domain_reduction/time_domain_reduction.jl +++ b/src/time_domain_reduction/time_domain_reduction.jl @@ -614,7 +614,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r if MultiStageConcatenate == 1 if v println("MultiStage with Concatenation") end RESOURCE_ZONES = inputs_dict[1]["RESOURCE_ZONES"] - RESOURCES = inputs_dict[1]["RESOURCES"] + RESOURCES = inputs_dict[1]["RESOURCE_NAMES"] ZONES = inputs_dict[1]["R_ZONES"] # Parse input data into useful structures divided by type (demand, wind, solar, fuel, groupings thereof, etc.) # TO DO LATER: Replace these with collections of col_names, profiles, zones @@ -626,7 +626,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r if v println("---> STAGE ", stage_id) end myinputs = inputs_dict[stage_id] RESOURCE_ZONES = myinputs["RESOURCE_ZONES"] - RESOURCES = myinputs["RESOURCES"] + RESOURCES = myinputs["RESOURCE_NAMES"] ZONES = myinputs["R_ZONES"] # Parse input data into useful structures divided by type (demand, wind, solar, fuel, groupings thereof, etc.) # TO DO LATER: Replace these with collections of col_names, profiles, zones @@ -638,7 +638,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r if v println("Not MultiStage") end myinputs = load_inputs(mysetup_local,inpath) RESOURCE_ZONES = myinputs["RESOURCE_ZONES"] - RESOURCES = myinputs["RESOURCES"] + RESOURCES = myinputs["RESOURCE_NAMES"] ZONES = myinputs["R_ZONES"] # Parse input data into useful structures divided by type (demand, wind, solar, fuel, groupings thereof, etc.) # TO DO LATER: Replace these with collections of col_names, profiles, zones @@ -1023,7 +1023,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r ### TDR_Results/Generators_variability.csv # Reset column ordering, add time index, and solve duplicate column name trouble with CSV.write's header kwarg - GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(inputs_dict[1]["RESOURCES"])) + GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(inputs_dict[1]["RESOURCE_NAMES"])) GVColMap["Time_Index"] = "Time_Index" GVOutputData = GVOutputData[!, Symbol.(RESOURCE_ZONES)] insertcols!(GVOutputData, 1, :Time_Index => 1:size(GVOutputData,1)) @@ -1108,7 +1108,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r ### TDR_Results/Generators_variability.csv # Reset column ordering, add time index, and solve duplicate column name trouble with CSV.write's header kwarg - GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(myinputs["RESOURCES"])) + GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(myinputs["RESOURCE_NAMES"])) GVColMap["Time_Index"] = "Time_Index" GVOutputData = GVOutputData[!, Symbol.(RESOURCE_ZONES)] insertcols!(GVOutputData, 1, :Time_Index => 1:size(GVOutputData,1)) @@ -1193,7 +1193,7 @@ function cluster_inputs(inpath, settings_path, mysetup, stage_id=-99, v=false; r ### TDR_Results/Generators_variability.csv # Reset column ordering, add time index, and solve duplicate column name trouble with CSV.write's header kwarg - GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(myinputs["RESOURCES"])) + GVColMap = Dict(RESOURCE_ZONES[i] => RESOURCES[i] for i in 1:length(myinputs["RESOURCE_NAMES"])) GVColMap["Time_Index"] = "Time_Index" GVOutputData = GVOutputData[!, Symbol.(RESOURCE_ZONES)] insertcols!(GVOutputData, 1, :Time_Index => 1:size(GVOutputData,1)) diff --git a/src/write_outputs/capacity_reserve_margin/effective_capacity.jl b/src/write_outputs/capacity_reserve_margin/effective_capacity.jl index 5d6d47246c..aa2a90c3ed 100644 --- a/src/write_outputs/capacity_reserve_margin/effective_capacity.jl +++ b/src/write_outputs/capacity_reserve_margin/effective_capacity.jl @@ -39,13 +39,13 @@ function thermal_plant_effective_capacity( timesteps::Vector{Int}, )::Vector{Float64} y = r_id - dfGen = inputs["dfGen"] - capresfactor = dfGen[y, Symbol("CapRes_$capres_zone")] + gen = inputs["RESOURCES"] + capresfactor = derating_factor(gen[y], tag=capres_zone) eTotalCap = value.(EP[:eTotalCap][y]) effective_capacity = fill(capresfactor * eTotalCap, length(timesteps)) - if has_maintenance(inputs) && y in resources_with_maintenance(dfGen) + if has_maintenance(inputs) && y in ids_with_maintenance(gen) adjustment = thermal_maintenance_capacity_reserve_margin_adjustment(EP, inputs, y, capres_zone, timesteps) effective_capacity = effective_capacity .+ value.(adjustment) end diff --git a/src/write_outputs/capacity_reserve_margin/write_capacity_value.jl b/src/write_outputs/capacity_reserve_margin/write_capacity_value.jl index 275ba7453f..747bf5602b 100644 --- a/src/write_outputs/capacity_reserve_margin/write_capacity_value.jl +++ b/src/write_outputs/capacity_reserve_margin/write_capacity_value.jl @@ -1,5 +1,7 @@ function write_capacity_value(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) THERM_ALL = inputs["THERM_ALL"] @@ -32,11 +34,9 @@ function write_capacity_value(path::AbstractString, inputs::Dict, setup::Dict, E AC_DISCHARGE_EX = intersect(inputs["VS_STOR_AC_DISCHARGE"], VRE_STOR_EX) DC_CHARGE_EX = intersect(DC_CHARGE, VRE_STOR_EX) AC_CHARGE_EX = intersect(inputs["VS_STOR_AC_CHARGE"], VRE_STOR_EX) - dfVRE_STOR = inputs["dfVRE_STOR"] - crm_derate_vrestor(i, y::Vector{Int}) = by_rid_df(y, Symbol("CapResVreStor_$i"), dfVRE_STOR)' end - crm_derate(i, y::Vector{Int}) = dfGen[y, Symbol("CapRes_$i")]' + crm_derate(i, y::Vector{Int}) = derating_factor.(gen[y], tag=i)' max_power(t::Vector{Int}, y::Vector{Int}) = inputs["pP_Max"][y, t]' total_cap(y::Vector{Int}) = eTotalCap[y]' @@ -71,36 +71,30 @@ function write_capacity_value(path::AbstractString, inputs::Dict, setup::Dict, E end if !isempty(VRE_STOR_EX) capres_dc_discharge = value.(EP[:vCAPRES_DC_DISCHARGE][DC_DISCHARGE, riskyhour].data)' - discharge_eff = dfVRE_STOR[dfVRE_STOR.STOR_DC_DISCHARGE .!= 0, :EtaInverter]' + discharge_eff = etainverter.(gen[storage_dc_discharge(gen)])' capvalue_dc_discharge = zeros(T, G) capvalue_dc_discharge[riskyhour, DC_DISCHARGE] = capres_dc_discharge .* discharge_eff capres_dc_charge = value.(EP[:vCAPRES_DC_CHARGE][DC_CHARGE, riskyhour].data)' - charge_eff = dfVRE_STOR[dfVRE_STOR.STOR_DC_CHARGE .!= 0, :EtaInverter]' + charge_eff = etainverter.(gen[storage_dc_charge(gen)])' capvalue_dc_charge = zeros(T, G) capvalue_dc_charge[riskyhour, DC_CHARGE] = capres_dc_charge ./ charge_eff - capvalue[riskyhour, VRE_STOR_EX] = crm_derate_vrestor(i, VRE_STOR_EX) .* power(VRE_STOR_EX) ./ total_cap(VRE_STOR_EX) + capvalue[riskyhour, VRE_STOR_EX] = crm_derate(i, VRE_STOR_EX) .* power(VRE_STOR_EX) ./ total_cap(VRE_STOR_EX) charge_vre_stor = value.(EP[:vCHARGE_VRE_STOR][VRE_STOR_STOR_EX, riskyhour].data)' - capvalue[riskyhour, VRE_STOR_STOR_EX] -= crm_derate_vrestor(i, VRE_STOR_STOR_EX) .* charge_vre_stor ./ total_cap(VRE_STOR_STOR_EX) + capvalue[riskyhour, VRE_STOR_STOR_EX] -= crm_derate(i, VRE_STOR_STOR_EX) .* charge_vre_stor ./ total_cap(VRE_STOR_STOR_EX) - capvalue[riskyhour, DC_DISCHARGE_EX] += crm_derate_vrestor(i, DC_DISCHARGE_EX) .* capvalue_dc_discharge[riskyhour, DC_DISCHARGE_EX] ./ total_cap(DC_DISCHARGE_EX) + capvalue[riskyhour, DC_DISCHARGE_EX] += crm_derate(i, DC_DISCHARGE_EX) .* capvalue_dc_discharge[riskyhour, DC_DISCHARGE_EX] ./ total_cap(DC_DISCHARGE_EX) capres_ac_discharge = value.(EP[:vCAPRES_AC_DISCHARGE][AC_DISCHARGE_EX, riskyhour].data)' - capvalue[riskyhour, AC_DISCHARGE_EX] += crm_derate_vrestor(i, AC_DISCHARGE_EX) .* capres_ac_discharge ./ total_cap(AC_DISCHARGE_EX) + capvalue[riskyhour, AC_DISCHARGE_EX] += crm_derate(i, AC_DISCHARGE_EX) .* capres_ac_discharge ./ total_cap(AC_DISCHARGE_EX) - capvalue[riskyhour, DC_CHARGE_EX] -= crm_derate_vrestor(i, DC_CHARGE_EX) .* capvalue_dc_charge[riskyhour, DC_CHARGE_EX] ./ total_cap(DC_CHARGE_EX) + capvalue[riskyhour, DC_CHARGE_EX] -= crm_derate(i, DC_CHARGE_EX) .* capvalue_dc_charge[riskyhour, DC_CHARGE_EX] ./ total_cap(DC_CHARGE_EX) capres_ac_charge = value.(EP[:vCAPRES_AC_CHARGE][AC_CHARGE_EX, riskyhour].data)' - capvalue[riskyhour, AC_CHARGE_EX] -= crm_derate_vrestor(i, AC_CHARGE_EX) .* capres_ac_charge ./ total_cap(AC_CHARGE_EX) + capvalue[riskyhour, AC_CHARGE_EX] -= crm_derate(i, AC_CHARGE_EX) .* capres_ac_charge ./ total_cap(AC_CHARGE_EX) end capvalue = collect(transpose(capvalue)) - - # CapRes_* for all resources except VRE_STOR, CapResVreStor_* for VRE_STOR - reserve = Array{Symbol}(undef, G) - reserve[filter(x-> x ∉ VRE_STOR, dfGen.R_ID)] .= Symbol("CapRes_$i") - reserve[VRE_STOR] .= Symbol("CapResVreStor_$i") - - temp_dfCapValue = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen.Zone, Reserve = reserve) + temp_dfCapValue = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones, Reserve = fill(Symbol("CapRes_$i"), G)) temp_dfCapValue = hcat(temp_dfCapValue, DataFrame(capvalue, :auto)) auxNew_Names = [Symbol("Resource"); Symbol("Zone"); Symbol("Reserve"); [Symbol("t$t") for t in 1:T]] rename!(temp_dfCapValue, auxNew_Names) diff --git a/src/write_outputs/capacity_reserve_margin/write_reserve_margin_revenue.jl b/src/write_outputs/capacity_reserve_margin/write_reserve_margin_revenue.jl index 0311dc0143..629cc76756 100644 --- a/src/write_outputs/capacity_reserve_margin/write_reserve_margin_revenue.jl +++ b/src/write_outputs/capacity_reserve_margin/write_reserve_margin_revenue.jl @@ -10,7 +10,13 @@ Function for reporting the capacity revenue earned by each generator listed in t """ function write_reserve_margin_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 - dfGen = inputs["dfGen"] + + gen = inputs["RESOURCES"] + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) THERM_ALL = inputs["THERM_ALL"] @@ -20,43 +26,40 @@ function write_reserve_margin_revenue(path::AbstractString, inputs::Dict, setup: FLEX = inputs["FLEX"] MUST_RUN = inputs["MUST_RUN"] VRE_STOR = inputs["VRE_STOR"] - dfVRE_STOR = inputs["dfVRE_STOR"] if !isempty(VRE_STOR) VRE_STOR_STOR = inputs["VS_STOR"] DC_DISCHARGE = inputs["VS_STOR_DC_DISCHARGE"] AC_DISCHARGE = inputs["VS_STOR_AC_DISCHARGE"] DC_CHARGE = inputs["VS_STOR_DC_CHARGE"] AC_CHARGE = inputs["VS_STOR_AC_CHARGE"] - dfVRE_STOR = inputs["dfVRE_STOR"] end - dfResRevenue = DataFrame(Region = dfGen.region, Resource = inputs["RESOURCES"], Zone = dfGen.Zone, Cluster = dfGen.cluster) + dfResRevenue = DataFrame(Region = regions, Resource = inputs["RESOURCE_NAMES"], Zone = zones, Cluster = clusters) annual_sum = zeros(G) for i in 1:inputs["NCapacityReserveMargin"] weighted_price = capacity_reserve_margin_price(EP, inputs, setup, i) .* inputs["omega"] - sym = Symbol("CapRes_$i") tempresrev = zeros(G) tempresrev[THERM_ALL] = thermal_plant_effective_capacity(EP, inputs, THERM_ALL, i)' * weighted_price - tempresrev[VRE] = dfGen[VRE, sym] .* (value.(EP[:eTotalCap][VRE])) .* (inputs["pP_Max"][VRE, :] * weighted_price) - tempresrev[MUST_RUN] = dfGen[MUST_RUN, sym] .* (value.(EP[:eTotalCap][MUST_RUN])) .* (inputs["pP_Max"][MUST_RUN, :] * weighted_price) - tempresrev[HYDRO_RES] = dfGen[HYDRO_RES, sym] .* (value.(EP[:vP][HYDRO_RES, :]) * weighted_price) + tempresrev[VRE] = derating_factor.(gen.Vre, tag=i) .* (value.(EP[:eTotalCap][VRE])) .* (inputs["pP_Max"][VRE, :] * weighted_price) + tempresrev[MUST_RUN] = derating_factor.(gen.MustRun, tag=i) .* (value.(EP[:eTotalCap][MUST_RUN])) .* (inputs["pP_Max"][MUST_RUN, :] * weighted_price) + tempresrev[HYDRO_RES] = derating_factor.(gen.Hydro, tag=i) .* (value.(EP[:vP][HYDRO_RES, :]) * weighted_price) if !isempty(STOR_ALL) - tempresrev[STOR_ALL] = dfGen[STOR_ALL, sym] .* ((value.(EP[:vP][STOR_ALL, :]) - value.(EP[:vCHARGE][STOR_ALL, :]).data + value.(EP[:vCAPRES_discharge][STOR_ALL, :]).data - value.(EP[:vCAPRES_charge][STOR_ALL, :]).data) * weighted_price) + tempresrev[STOR_ALL] = derating_factor.(gen.Storage, tag=i) .* ((value.(EP[:vP][STOR_ALL, :]) - value.(EP[:vCHARGE][STOR_ALL, :]).data + value.(EP[:vCAPRES_discharge][STOR_ALL, :]).data - value.(EP[:vCAPRES_charge][STOR_ALL, :]).data) * weighted_price) end if !isempty(FLEX) - tempresrev[FLEX] = dfGen[FLEX, sym] .* ((value.(EP[:vCHARGE_FLEX][FLEX, :]).data - value.(EP[:vP][FLEX, :])) * weighted_price) + tempresrev[FLEX] = derating_factor.(gen.FlexDemand, tag=i) .* ((value.(EP[:vCHARGE_FLEX][FLEX, :]).data - value.(EP[:vP][FLEX, :])) * weighted_price) end if !isempty(VRE_STOR) - sym_vs = Symbol("CapResVreStor_$i") - tempresrev[VRE_STOR] = dfVRE_STOR[!, sym_vs] .* ((value.(EP[:vP][VRE_STOR, :])) * weighted_price) - tempresrev[VRE_STOR_STOR] .-= dfVRE_STOR[((dfVRE_STOR.STOR_DC_DISCHARGE.!=0) .| (dfVRE_STOR.STOR_DC_CHARGE.!=0) .| (dfVRE_STOR.STOR_AC_DISCHARGE.!=0) .|(dfVRE_STOR.STOR_AC_CHARGE.!=0)), sym_vs] .* (value.(EP[:vCHARGE_VRE_STOR][VRE_STOR_STOR, :]).data * weighted_price) - tempresrev[DC_DISCHARGE] .+= dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0), sym_vs] .* ((value.(EP[:vCAPRES_DC_DISCHARGE][DC_DISCHARGE, :]).data .* dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0), :EtaInverter]) * weighted_price) - tempresrev[AC_DISCHARGE] .+= dfVRE_STOR[(dfVRE_STOR.STOR_AC_DISCHARGE.!=0), sym_vs] .* ((value.(EP[:vCAPRES_AC_DISCHARGE][AC_DISCHARGE, :]).data) * weighted_price) - tempresrev[DC_CHARGE] .-= dfVRE_STOR[(dfVRE_STOR.STOR_DC_CHARGE.!=0), sym_vs] .* ((value.(EP[:vCAPRES_DC_CHARGE][DC_CHARGE, :]).data ./ dfVRE_STOR[(dfVRE_STOR.STOR_DC_CHARGE.!=0), :EtaInverter]) * weighted_price) - tempresrev[AC_CHARGE] .-= dfVRE_STOR[(dfVRE_STOR.STOR_AC_CHARGE.!=0), sym_vs] .* ((value.(EP[:vCAPRES_AC_CHARGE][AC_CHARGE, :]).data) * weighted_price) + gen_VRE_STOR = gen.VreStorage + tempresrev[VRE_STOR] = derating_factor.(gen_VRE_STOR, tag=i) .* ((value.(EP[:vP][VRE_STOR, :])) * weighted_price) + tempresrev[VRE_STOR_STOR] .-= derating_factor.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0) .| (gen_VRE_STOR.stor_dc_charge.!=0) .| (gen_VRE_STOR.stor_ac_discharge.!=0) .|(gen_VRE_STOR.stor_ac_charge.!=0)], tag=i) .* (value.(EP[:vCHARGE_VRE_STOR][VRE_STOR_STOR, :]).data * weighted_price) + tempresrev[DC_DISCHARGE] .+= derating_factor.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)], tag=i) .* ((value.(EP[:vCAPRES_DC_DISCHARGE][DC_DISCHARGE, :]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)])) * weighted_price) + tempresrev[AC_DISCHARGE] .+= derating_factor.(gen_VRE_STOR[(gen_VRE_STOR.stor_ac_discharge.!=0)], tag=i) .* ((value.(EP[:vCAPRES_AC_DISCHARGE][AC_DISCHARGE, :]).data) * weighted_price) + tempresrev[DC_CHARGE] .-= derating_factor.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_charge.!=0)], tag=i) .* ((value.(EP[:vCAPRES_DC_CHARGE][DC_CHARGE, :]).data ./ etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_charge.!=0)])) * weighted_price) + tempresrev[AC_CHARGE] .-= derating_factor.(gen_VRE_STOR[(gen_VRE_STOR.stor_ac_charge.!=0)], tag=i) .* ((value.(EP[:vCAPRES_AC_CHARGE][AC_CHARGE, :]).data) * weighted_price) end tempresrev *= scale_factor annual_sum .+= tempresrev - dfResRevenue = hcat(dfResRevenue, DataFrame([tempresrev], [sym])) + dfResRevenue = hcat(dfResRevenue, DataFrame([tempresrev], [Symbol("CapRes_$i")])) end dfResRevenue.AnnualSum = annual_sum CSV.write(joinpath(path, "ReserveMarginRevenue.csv"), dfResRevenue) diff --git a/src/write_outputs/capacity_reserve_margin/write_reserve_margin_slack.jl b/src/write_outputs/capacity_reserve_margin/write_reserve_margin_slack.jl index 53a79b3b11..221241c278 100644 --- a/src/write_outputs/capacity_reserve_margin/write_reserve_margin_slack.jl +++ b/src/write_outputs/capacity_reserve_margin/write_reserve_margin_slack.jl @@ -11,7 +11,7 @@ function write_reserve_margin_slack(path::AbstractString, inputs::Dict, setup::D temp_ResMar_slack .*= ModelScalingFactor # Convert GW to MW end dfResMar_slack = hcat(dfResMar_slack, DataFrame(temp_ResMar_slack, [Symbol("t$t") for t in 1:T])) - CSV.write(joinpath(path, "ReserveMargin_prices_and_penalties.csv"), dftranspose(dfResMar_slack, false), writeheader=false) + CSV.write(joinpath(path, "ReserveMargin_prices_and_penalties.csv"), dftranspose(dfResMar_slack, false), header=false) return dfResMar_slack end diff --git a/src/write_outputs/capacity_reserve_margin/write_virtual_discharge.jl b/src/write_outputs/capacity_reserve_margin/write_virtual_discharge.jl index 1949cde0ba..b093e984d9 100644 --- a/src/write_outputs/capacity_reserve_margin/write_virtual_discharge.jl +++ b/src/write_outputs/capacity_reserve_margin/write_virtual_discharge.jl @@ -5,12 +5,14 @@ Function for writing the "virtual" discharge of each storage technology. Virtual allow storage resources to contribute to the capacity reserve margin without actually discharging. """ function write_virtual_discharge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) STOR_ALL = inputs["STOR_ALL"] - dfVirtualDischarge = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone], AnnualSum = Array{Union{Missing,Float64}}(undef, G)) + dfVirtualDischarge = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones, AnnualSum = Array{Union{Missing,Float64}}(undef, G)) virtual_discharge = zeros(G,T) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 @@ -27,6 +29,6 @@ function write_virtual_discharge(path::AbstractString, inputs::Dict, setup::Dict total[:, 4:T+3] .= sum(virtual_discharge, dims = 1) rename!(total,auxNew_Names) dfVirtualDischarge = vcat(dfVirtualDischarge, total) - CSV.write(joinpath(path, "virtual_discharge.csv"), dftranspose(dfVirtualDischarge, false), writeheader=false) + CSV.write(joinpath(path, "virtual_discharge.csv"), dftranspose(dfVirtualDischarge, false), header=false) return dfVirtualDischarge end diff --git a/src/write_outputs/energy_share_requirement/write_esr_revenue.jl b/src/write_outputs/energy_share_requirement/write_esr_revenue.jl index 9f74ed5baa..271f25a167 100644 --- a/src/write_outputs/energy_share_requirement/write_esr_revenue.jl +++ b/src/write_outputs/energy_share_requirement/write_esr_revenue.jl @@ -4,14 +4,21 @@ Function for reporting 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 \$. """ function write_esr_revenue(path::AbstractString, inputs::Dict, setup::Dict, dfPower::DataFrame, dfESR::DataFrame, EP::Model) - dfGen = inputs["dfGen"] - dfESRRev = DataFrame(region = dfGen[!,:region], Resource = inputs["RESOURCES"], zone = dfGen[!,:Zone], Cluster = dfGen[!,:cluster], R_ID = dfGen[!,:R_ID]) + gen = inputs["RESOURCES"] + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + rid = resource_id.(gen) + + dfESRRev = DataFrame(region = regions, Resource = inputs["RESOURCE_NAMES"], zone = zones, Cluster = clusters, R_ID = rid) G = inputs["G"] nESR = inputs["nESR"] weight = inputs["omega"] - VRE_STOR = inputs["VRE_STOR"] - dfVRE_STOR = inputs["dfVRE_STOR"] + # Load VRE-storage inputs + VRE_STOR = inputs["VRE_STOR"] # Set of VRE-STOR generators (indices) + if !isempty(VRE_STOR) + gen_VRE_STOR = gen.VreStorage # Set of VRE-STOR generators (objects) SOLAR = inputs["VS_SOLAR"] WIND = inputs["VS_WIND"] SOLAR_ONLY = setdiff(SOLAR, WIND) @@ -19,41 +26,39 @@ function write_esr_revenue(path::AbstractString, inputs::Dict, setup::Dict, dfPo SOLAR_WIND = intersect(SOLAR, WIND) end - by_rid(rid, sym) = by_rid_df(rid, sym, dfVRE_STOR) for i in 1:nESR esr_col = Symbol("ESR_$i") price = dfESR[i, :ESR_Price] - derated_annual_net_generation = dfPower[1:G,:AnnualSum] .* dfGen[!,esr_col] + derated_annual_net_generation = dfPower[1:G,:AnnualSum] .* esr.(gen, tag=i) revenue = derated_annual_net_generation * price dfESRRev[!, esr_col] = revenue if !isempty(VRE_STOR) - esr_vrestor_col = Symbol("ESRVreStor_$i") if !isempty(SOLAR_ONLY) - solar_resources = ((dfVRE_STOR.WIND.==0) .& (dfVRE_STOR.SOLAR.!=0)) + solar_resources = ((gen_VRE_STOR.wind.==0) .& (gen_VRE_STOR.solar.!=0)) dfESRRev[SOLAR, esr_col] = ( value.(EP[:vP_SOLAR][SOLAR, :]).data - .* dfVRE_STOR[solar_resources, :EtaInverter] * weight - ) .* dfVRE_STOR[solar_resources,esr_vrestor_col] * price + .* etainverter.(gen_VRE_STOR[solar_resources]) * weight + ) .* esr_vrestor.(gen_VRE_STOR[solar_resources], tag=i) * price end if !isempty(WIND_ONLY) - wind_resources = ((dfVRE_STOR.WIND.!=0) .& (dfVRE_STOR.SOLAR.==0)) + wind_resources = ((gen_VRE_STOR.wind.!=0) .& (gen_VRE_STOR.solar.==0)) dfESRRev[WIND, esr_col] = ( value.(EP[:vP_WIND][WIND, :]).data * weight - ) .* dfVRE_STOR[wind_resources,esr_vrestor_col] * price + ) .* esr_vrestor.(gen_VRE_STOR[wind_resources], tag=i) * price end if !isempty(SOLAR_WIND) - solar_and_wind_resources = ((dfVRE_STOR.WIND.!=0) .& (dfVRE_STOR.SOLAR.!=0)) + solar_and_wind_resources = ((gen_VRE_STOR.wind.!=0) .& (gen_VRE_STOR.solar.!=0)) dfESRRev[SOLAR_WIND, esr_col] = ( ( (value.(EP[:vP_WIND][SOLAR_WIND, :]).data * weight) - .* dfVRE_STOR[solar_and_wind_resources,esr_vrestor_col] * price + .* esr_vrestor.(gen_VRE_STOR[solar_and_wind_resources], tag=i) * price ) + ( value.(EP[:vP_SOLAR][SOLAR_WIND, :]).data - .* dfVRE_STOR[solar_and_wind_resources, :EtaInverter] + .* etainverter.(gen_VRE_STOR[solar_and_wind_resources]) * weight - ) .* dfVRE_STOR[solar_and_wind_resources,esr_vrestor_col] * price + ) .* esr_vrestor.(gen_VRE_STOR[solar_and_wind_resources], tag=i) * price ) end end diff --git a/src/write_outputs/hydrogen/write_hourly_matching_prices.jl b/src/write_outputs/hydrogen/write_hourly_matching_prices.jl index 1e4188a0b6..c804d810c4 100644 --- a/src/write_outputs/hydrogen/write_hourly_matching_prices.jl +++ b/src/write_outputs/hydrogen/write_hourly_matching_prices.jl @@ -11,7 +11,7 @@ function write_hourly_matching_prices(path::AbstractString, inputs::Dict, setup: auxNew_Names=[Symbol("Zone");[Symbol("t$t") for t in 1:T]] rename!(dfHourlyMatchPrices,auxNew_Names) - CSV.write(joinpath(path, "hourly_matching_prices.csv"), dftranspose(dfHourlyMatchPrices, false), writeheader=false) + CSV.write(joinpath(path, "hourly_matching_prices.csv"), dftranspose(dfHourlyMatchPrices, false), header=false) return dfHourlyMatchPrices end diff --git a/src/write_outputs/long_duration_storage/write_opwrap_lds_dstor.jl b/src/write_outputs/long_duration_storage/write_opwrap_lds_dstor.jl index 332d7ad56b..a5ce31ec7b 100644 --- a/src/write_outputs/long_duration_storage/write_opwrap_lds_dstor.jl +++ b/src/write_outputs/long_duration_storage/write_opwrap_lds_dstor.jl @@ -1,11 +1,13 @@ function write_opwrap_lds_dstor(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) ## Extract data frames from input dictionary - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + W = inputs["REP_PERIOD"] # Number of subperiods G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) #Excess inventory of storage period built up during representative period w - dfdStorage = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone]) + dfdStorage = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) dsoc = zeros(G,W) for i in 1:G if i in inputs["STOR_LONG_DURATION"] @@ -24,5 +26,5 @@ function write_opwrap_lds_dstor(path::AbstractString, inputs::Dict, setup::Dict, dfdStorage = hcat(dfdStorage, DataFrame(dsoc, :auto)) auxNew_Names=[Symbol("Resource");Symbol("Zone");[Symbol("w$t") for t in 1:W]] rename!(dfdStorage,auxNew_Names) - CSV.write(joinpath(path, "dStorage.csv"), dftranspose(dfdStorage, false), writeheader=false) + CSV.write(joinpath(path, "dStorage.csv"), dftranspose(dfdStorage, false), header=false) end diff --git a/src/write_outputs/long_duration_storage/write_opwrap_lds_stor_init.jl b/src/write_outputs/long_duration_storage/write_opwrap_lds_stor_init.jl index 873b3a53ce..bf1bda48aa 100644 --- a/src/write_outputs/long_duration_storage/write_opwrap_lds_stor_init.jl +++ b/src/write_outputs/long_duration_storage/write_opwrap_lds_stor_init.jl @@ -1,11 +1,13 @@ function write_opwrap_lds_stor_init(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) ## Extract data frames from input dictionary - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Initial level of storage in each modeled period NPeriods = size(inputs["Period_Map"])[1] - dfStorageInit = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone]) + dfStorageInit = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) socw = zeros(G,NPeriods) for i in 1:G if i in inputs["STOR_LONG_DURATION"] @@ -24,5 +26,5 @@ function write_opwrap_lds_stor_init(path::AbstractString, inputs::Dict, setup::D dfStorageInit = hcat(dfStorageInit, DataFrame(socw, :auto)) auxNew_Names=[Symbol("Resource");Symbol("Zone");[Symbol("n$t") for t in 1:NPeriods]] rename!(dfStorageInit,auxNew_Names) - CSV.write(joinpath(path, "StorageInit.csv"), dftranspose(dfStorageInit, false), writeheader=false) + CSV.write(joinpath(path, "StorageInit.csv"), dftranspose(dfStorageInit, false), header=false) end diff --git a/src/write_outputs/reserves/write_operating_reserve_price_revenue.jl b/src/write_outputs/reserves/write_operating_reserve_price_revenue.jl index 769c8b9646..3e69afcef8 100644 --- a/src/write_outputs/reserves/write_operating_reserve_price_revenue.jl +++ b/src/write_outputs/reserves/write_operating_reserve_price_revenue.jl @@ -9,12 +9,18 @@ Function for reporting the operating reserve and regulation revenue earned by ge """ function write_operating_reserve_regulation_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 - dfGen = inputs["dfGen"] + + gen = inputs["RESOURCES"] RSV = inputs["RSV"] REG = inputs["REG"] - dfOpRsvRevenue = DataFrame(Region = dfGen[RSV, :region], Resource = dfGen[RSV, :Resource], Zone = dfGen[RSV, :Zone], Cluster = dfGen[RSV, :cluster], AnnualSum = Array{Float64}(undef, length(RSV)),) - dfOpRegRevenue = DataFrame(Region = dfGen[REG, :region], Resource = dfGen[REG, :Resource], Zone = dfGen[REG, :Zone], Cluster = dfGen[REG, :cluster], AnnualSum = Array{Float64}(undef, length(REG)),) + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + names = inputs["RESOURCE_NAMES"] + + dfOpRsvRevenue = DataFrame(Region = regions[RSV], Resource = names[RSV], Zone = zones[RSV], Cluster = clusters[RSV], AnnualSum = Array{Float64}(undef, length(RSV)),) + dfOpRegRevenue = DataFrame(Region = regions[REG], Resource = names[REG], Zone = zones[REG], Cluster = clusters[REG], AnnualSum = Array{Float64}(undef, length(REG)),) weighted_reg_price = operating_regulation_price(EP, inputs, setup) weighted_rsv_price = operating_reserve_price(EP, inputs, setup) diff --git a/src/write_outputs/reserves/write_reg.jl b/src/write_outputs/reserves/write_reg.jl index 0f306ab309..8d8d51f217 100644 --- a/src/write_outputs/reserves/write_reg.jl +++ b/src/write_outputs/reserves/write_reg.jl @@ -1,12 +1,13 @@ function write_reg(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) REG = inputs["REG"] scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 # Regulation contributions for each resource in each time step - dfReg = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone]) + dfReg = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) reg = zeros(G,T) reg[REG, :] = value.(EP[:vREG][REG, :]) dfReg.AnnualSum = (reg*scale_factor) * inputs["omega"] @@ -18,5 +19,5 @@ function write_reg(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) total[!, 4:T+3] .= sum(reg, dims = 1) rename!(total,auxNew_Names) dfReg = vcat(dfReg, total) - CSV.write(joinpath(path, "reg.csv"), dftranspose(dfReg, false), writeheader=false) + CSV.write(joinpath(path, "reg.csv"), dftranspose(dfReg, false), header=false) end diff --git a/src/write_outputs/reserves/write_rsv.jl b/src/write_outputs/reserves/write_rsv.jl index 53f81d0817..7db756e394 100644 --- a/src/write_outputs/reserves/write_rsv.jl +++ b/src/write_outputs/reserves/write_rsv.jl @@ -1,11 +1,12 @@ function write_rsv(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) RSV = inputs["RSV"] scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 - dfRsv = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone]) + dfRsv = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) rsv = zeros(G,T) unmet_vec = zeros(T) rsv[RSV, :] = value.(EP[:vRSV][RSV, :]) * scale_factor @@ -23,5 +24,5 @@ function write_rsv(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) rename!(total,auxNew_Names) rename!(unmet,auxNew_Names) dfRsv = vcat(dfRsv, unmet, total) - CSV.write(joinpath(path, "reg_dn.csv"), dftranspose(dfRsv, false), writeheader=false) + CSV.write(joinpath(path, "reg_dn.csv"), dftranspose(dfRsv, false), header=false) end diff --git a/src/write_outputs/transmission/write_transmission_flows.jl b/src/write_outputs/transmission/write_transmission_flows.jl index 22ce42ca7f..28a6fddffa 100644 --- a/src/write_outputs/transmission/write_transmission_flows.jl +++ b/src/write_outputs/transmission/write_transmission_flows.jl @@ -16,5 +16,5 @@ function write_transmission_flows(path::AbstractString, inputs::Dict, setup::Dic total[:, 3:T+2] .= sum(flow, dims = 1) rename!(total,auxNew_Names) dfFlow = vcat(dfFlow, total) - CSV.write(joinpath(path, "flow.csv"), dftranspose(dfFlow, false), writeheader=false) + CSV.write(joinpath(path, "flow.csv"), dftranspose(dfFlow, false), header=false) end diff --git a/src/write_outputs/transmission/write_transmission_losses.jl b/src/write_outputs/transmission/write_transmission_losses.jl index 127d90fbc5..583e00dc9f 100644 --- a/src/write_outputs/transmission/write_transmission_losses.jl +++ b/src/write_outputs/transmission/write_transmission_losses.jl @@ -18,5 +18,5 @@ function write_transmission_losses(path::AbstractString, inputs::Dict, setup::Di total[:, 3:T+2] .= sum(tlosses, dims = 1) rename!(total,auxNew_Names) dfTLosses = vcat(dfTLosses, total) - CSV.write(joinpath(path, "tlosses.csv"), dftranspose(dfTLosses, false), writeheader=false) + CSV.write(joinpath(path, "tlosses.csv"), dftranspose(dfTLosses, false), header=false) end diff --git a/src/write_outputs/ucommit/write_commit.jl b/src/write_outputs/ucommit/write_commit.jl index cc1e21dda3..3e4eff5387 100644 --- a/src/write_outputs/ucommit/write_commit.jl +++ b/src/write_outputs/ucommit/write_commit.jl @@ -1,14 +1,16 @@ function write_commit(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) COMMIT = inputs["COMMIT"] # Commitment state for each resource in each time step commit = zeros(G,T) commit[COMMIT, :] = value.(EP[:vCOMMIT][COMMIT, :]) - dfCommit = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone]) + dfCommit = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) dfCommit = hcat(dfCommit, DataFrame(commit, :auto)) auxNew_Names=[Symbol("Resource");Symbol("Zone");[Symbol("t$t") for t in 1:T]] rename!(dfCommit,auxNew_Names) - CSV.write(joinpath(path, "commit.csv"), dftranspose(dfCommit, false), writeheader=false) + CSV.write(joinpath(path, "commit.csv"), dftranspose(dfCommit, false), header=false) end diff --git a/src/write_outputs/ucommit/write_shutdown.jl b/src/write_outputs/ucommit/write_shutdown.jl index cfe4229610..f524fb4daf 100644 --- a/src/write_outputs/ucommit/write_shutdown.jl +++ b/src/write_outputs/ucommit/write_shutdown.jl @@ -1,11 +1,13 @@ function write_shutdown(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) # Operational decision variable states COMMIT = inputs["COMMIT"] # Shutdown state for each resource in each time step - dfShutdown = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone]) + dfShutdown = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) shut = zeros(G,T) shut[COMMIT, :] = value.(EP[:vSHUT][COMMIT, :]) dfShutdown.AnnualSum = shut * inputs["omega"] @@ -16,5 +18,5 @@ function write_shutdown(path::AbstractString, inputs::Dict, setup::Dict, EP::Mod total[:, 4:T+3] .= sum(shut, dims = 1) rename!(total,auxNew_Names) dfShutdown = vcat(dfShutdown, total) - CSV.write(joinpath(path, "shutdown.csv"), dftranspose(dfShutdown, false), writeheader=false) + CSV.write(joinpath(path, "shutdown.csv"), dftranspose(dfShutdown, false), header=false) end diff --git a/src/write_outputs/ucommit/write_start.jl b/src/write_outputs/ucommit/write_start.jl index 2621f188c9..71aa7b723e 100644 --- a/src/write_outputs/ucommit/write_start.jl +++ b/src/write_outputs/ucommit/write_start.jl @@ -1,10 +1,12 @@ function write_start(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) COMMIT = inputs["COMMIT"] # Startup state for each resource in each time step - dfStart = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone]) + dfStart = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) start = zeros(G,T) start[COMMIT, :] = value.(EP[:vSTART][COMMIT, :]) dfStart.AnnualSum = start * inputs["omega"] @@ -16,5 +18,5 @@ function write_start(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) total[:, 4:T+3] .= sum(start, dims = 1) rename!(total,auxNew_Names) dfStart = vcat(dfStart, total) - CSV.write(joinpath(path, "start.csv"), dftranspose(dfStart, false), writeheader=false) + CSV.write(joinpath(path, "start.csv"), dftranspose(dfStart, false), header=false) end diff --git a/src/write_outputs/write_capacity.jl b/src/write_outputs/write_capacity.jl index 33c6e105fc..0ceae25a7f 100644 --- a/src/write_outputs/write_capacity.jl +++ b/src/write_outputs/write_capacity.jl @@ -4,38 +4,38 @@ Function for writing the diferent capacities for the different generation technologies (starting capacities or, existing capacities, retired capacities, and new-built capacities). """ function write_capacity(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - # Capacity decisions - dfGen = inputs["dfGen"] + + gen = inputs["RESOURCES"] + MultiStage = setup["MultiStage"] - capdischarge = zeros(size(inputs["RESOURCES"])) + # Capacity decisions + capdischarge = zeros(size(inputs["RESOURCE_NAMES"])) for i in inputs["NEW_CAP"] if i in inputs["COMMIT"] - capdischarge[i] = value(EP[:vCAP][i])*dfGen[!,:Cap_Size][i] + capdischarge[i] = value(EP[:vCAP][i])*cap_size(gen[i]) else capdischarge[i] = value(EP[:vCAP][i]) end end - retcapdischarge = zeros(size(inputs["RESOURCES"])) + retcapdischarge = zeros(size(inputs["RESOURCE_NAMES"])) for i in inputs["RET_CAP"] if i in inputs["COMMIT"] - retcapdischarge[i] = first(value.(EP[:vRETCAP][i]))*dfGen[!,:Cap_Size][i] + retcapdischarge[i] = first(value.(EP[:vRETCAP][i]))*cap_size(gen[i]) else retcapdischarge[i] = first(value.(EP[:vRETCAP][i])) end end - capacity_constraint_dual = zeros(size(inputs["RESOURCES"])) - if :Max_Cap_MW in propertynames(dfGen) - for y in dfGen[dfGen.Max_Cap_MW.>0, :R_ID] - capacity_constraint_dual[y] = -dual.(EP[:cMaxCap][y]) - end + capacity_constraint_dual = zeros(size(inputs["RESOURCE_NAMES"])) + for y in ids_with_positive(gen, max_cap_mw) + capacity_constraint_dual[y] = -dual.(EP[:cMaxCap][y]) end - capcharge = zeros(size(inputs["RESOURCES"])) - retcapcharge = zeros(size(inputs["RESOURCES"])) - existingcapcharge = zeros(size(inputs["RESOURCES"])) + capcharge = zeros(size(inputs["RESOURCE_NAMES"])) + retcapcharge = zeros(size(inputs["RESOURCE_NAMES"])) + existingcapcharge = zeros(size(inputs["RESOURCE_NAMES"])) for i in inputs["STOR_ASYMMETRIC"] if i in inputs["NEW_CAP_CHARGE"] capcharge[i] = value(EP[:vCAPCHARGE][i]) @@ -43,12 +43,12 @@ function write_capacity(path::AbstractString, inputs::Dict, setup::Dict, EP::Mod if i in inputs["RET_CAP_CHARGE"] retcapcharge[i] = value(EP[:vRETCAPCHARGE][i]) end - existingcapcharge[i] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGE][i]) : dfGen[!,:Existing_Charge_Cap_MW][i] + existingcapcharge[i] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGE][i]) : existing_charge_cap_mw(gen[i]) end - capenergy = zeros(size(inputs["RESOURCES"])) - retcapenergy = zeros(size(inputs["RESOURCES"])) - existingcapenergy = zeros(size(inputs["RESOURCES"])) + capenergy = zeros(size(inputs["RESOURCE_NAMES"])) + retcapenergy = zeros(size(inputs["RESOURCE_NAMES"])) + existingcapenergy = zeros(size(inputs["RESOURCE_NAMES"])) for i in inputs["STOR_ALL"] if i in inputs["NEW_CAP_ENERGY"] capenergy[i] = value(EP[:vCAPENERGY][i]) @@ -56,7 +56,7 @@ function write_capacity(path::AbstractString, inputs::Dict, setup::Dict, EP::Mod if i in inputs["RET_CAP_ENERGY"] retcapenergy[i] = value(EP[:vRETCAPENERGY][i]) end - existingcapenergy[i] = MultiStage == 1 ? value(EP[:vEXISTINGCAPENERGY][i]) : dfGen[i,:Existing_Cap_MWh] + existingcapenergy[i] = MultiStage == 1 ? value(EP[:vEXISTINGCAPENERGY][i]) : existing_cap_mwh(gen[i]) end if !isempty(inputs["VRE_STOR"]) for i in inputs["VS_STOR"] @@ -66,13 +66,13 @@ function write_capacity(path::AbstractString, inputs::Dict, setup::Dict, EP::Mod if i in inputs["RET_CAP_STOR"] retcapenergy[i] = value(EP[:vRETCAPENERGY_VS][i]) end - existingcapenergy[i] = dfGen[i,:Existing_Cap_MWh] # multistage functionality doesn't exist yet for VRE-storage resources + existingcapenergy[i] = existing_cap_mwh(gen[i]) # multistage functionality doesn't exist yet for VRE-storage resources end end dfCap = DataFrame( - Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone], - StartCap = MultiStage == 1 ? value.(EP[:vEXISTINGCAP]) : dfGen[!,:Existing_Cap_MW], + Resource = inputs["RESOURCE_NAMES"], Zone = zone_id.(gen), + StartCap = MultiStage == 1 ? value.(EP[:vEXISTINGCAP]) : existing_cap_mw.(gen), RetCap = retcapdischarge[:], NewCap = capdischarge[:], EndCap = value.(EP[:eTotalCap]), diff --git a/src/write_outputs/write_capacityfactor.jl b/src/write_outputs/write_capacityfactor.jl index 31d0860252..959f4366e2 100644 --- a/src/write_outputs/write_capacityfactor.jl +++ b/src/write_outputs/write_capacityfactor.jl @@ -5,7 +5,7 @@ Function for writing the capacity factor of different resources. For co-located value is calculated if the site has either or both a solar PV or wind resource. """ function write_capacityfactor(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) THERM_ALL = inputs["THERM_ALL"] @@ -15,7 +15,7 @@ function write_capacityfactor(path::AbstractString, inputs::Dict, setup::Dict, E ELECTROLYZER = inputs["ELECTROLYZER"] VRE_STOR = inputs["VRE_STOR"] - dfCapacityfactor = DataFrame(Resource=inputs["RESOURCES"], Zone=dfGen[!, :Zone], AnnualSum=zeros(G), Capacity=zeros(G), CapacityFactor=zeros(G)) + dfCapacityfactor = DataFrame(Resource=inputs["RESOURCE_NAMES"], Zone=zone_id.(gen), AnnualSum=zeros(G), Capacity=zeros(G), CapacityFactor=zeros(G)) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 dfCapacityfactor.AnnualSum .= value.(EP[:vP]) * inputs["omega"] * scale_factor dfCapacityfactor.Capacity .= value.(EP[:eTotalCap]) * scale_factor @@ -24,7 +24,7 @@ function write_capacityfactor(path::AbstractString, inputs::Dict, setup::Dict, E SOLAR = setdiff(inputs["VS_SOLAR"],inputs["VS_WIND"]) WIND = setdiff(inputs["VS_WIND"],inputs["VS_SOLAR"]) SOLAR_WIND = intersect(inputs["VS_SOLAR"],inputs["VS_WIND"]) - dfVRE_STOR = inputs["dfVRE_STOR"] + gen_VRE_STOR = gen.VreStorage if !isempty(SOLAR) dfCapacityfactor.AnnualSum[SOLAR] .= value.(EP[:vP_SOLAR][SOLAR, :]).data * inputs["omega"] * scale_factor dfCapacityfactor.Capacity[SOLAR] .= value.(EP[:eTotalCap_SOLAR][SOLAR]).data * scale_factor @@ -35,8 +35,8 @@ function write_capacityfactor(path::AbstractString, inputs::Dict, setup::Dict, E end if !isempty(SOLAR_WIND) dfCapacityfactor.AnnualSum[SOLAR_WIND] .= (value.(EP[:vP_WIND][SOLAR_WIND, :]).data - + value.(EP[:vP_SOLAR][SOLAR_WIND, :]).data .* dfVRE_STOR[((dfVRE_STOR.SOLAR.!=0) .& (dfVRE_STOR.WIND.!=0)), :EtaInverter]) * inputs["omega"] * scale_factor - dfCapacityfactor.Capacity[SOLAR_WIND] .= (value.(EP[:eTotalCap_WIND][SOLAR_WIND]).data + value.(EP[:eTotalCap_SOLAR][SOLAR_WIND]).data .* dfVRE_STOR[((dfVRE_STOR.SOLAR.!=0) .& (dfVRE_STOR.WIND.!=0)), :EtaInverter]) * scale_factor + + value.(EP[:vP_SOLAR][SOLAR_WIND, :]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.wind.!=0) .& (gen_VRE_STOR.solar.!=0)])) * inputs["omega"] * scale_factor + dfCapacityfactor.Capacity[SOLAR_WIND] .= (value.(EP[:eTotalCap_WIND][SOLAR_WIND]).data + value.(EP[:eTotalCap_SOLAR][SOLAR_WIND]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.wind.!=0) .& (gen_VRE_STOR.solar.!=0)])) * scale_factor end end diff --git a/src/write_outputs/write_charge.jl b/src/write_outputs/write_charge.jl index 2229ebd4a4..7913799c6f 100644 --- a/src/write_outputs/write_charge.jl +++ b/src/write_outputs/write_charge.jl @@ -4,7 +4,9 @@ Function for writing the charging energy values of the different storage technologies. """ function write_charge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) STOR_ALL = inputs["STOR_ALL"] @@ -14,7 +16,7 @@ function write_charge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model VS_STOR = !isempty(VRE_STOR) ? inputs["VS_STOR"] : [] # Power withdrawn to charge each resource in each time step - dfCharge = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone], AnnualSum = Array{Union{Missing,Float64}}(undef, G)) + dfCharge = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones, AnnualSum = Array{Union{Missing,Float64}}(undef, G)) charge = zeros(G,T) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 @@ -40,6 +42,6 @@ function write_charge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model total[:, 4:T+3] .= sum(charge, dims = 1) rename!(total,auxNew_Names) dfCharge = vcat(dfCharge, total) - CSV.write(joinpath(path, "charge.csv"), dftranspose(dfCharge, false), writeheader=false) + CSV.write(joinpath(path, "charge.csv"), dftranspose(dfCharge, false), header=false) return dfCharge end diff --git a/src/write_outputs/write_charging_cost.jl b/src/write_outputs/write_charging_cost.jl index 3f87f64549..7c2c84a812 100644 --- a/src/write_outputs/write_charging_cost.jl +++ b/src/write_outputs/write_charging_cost.jl @@ -1,5 +1,10 @@ function write_charging_cost(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) STOR_ALL = inputs["STOR_ALL"] @@ -10,19 +15,19 @@ function write_charging_cost(path::AbstractString, inputs::Dict, setup::Dict, EP price = locational_marginal_price(EP, inputs, setup) - dfChargingcost = DataFrame(Region = dfGen[!, :region], Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone], Cluster = dfGen[!, :cluster], AnnualSum = Array{Float64}(undef, G),) + dfChargingcost = DataFrame(Region = regions, Resource = inputs["RESOURCE_NAMES"], Zone = zones, Cluster = clusters, AnnualSum = Array{Float64}(undef, G),) chargecost = zeros(G, T) if !isempty(STOR_ALL) - chargecost[STOR_ALL, :] .= (value.(EP[:vCHARGE][STOR_ALL, :]).data) .* transpose(price)[dfGen[STOR_ALL, :Zone], :] + chargecost[STOR_ALL, :] .= (value.(EP[:vCHARGE][STOR_ALL, :]).data) .* transpose(price)[zone_id.(gen.Storage), :] end if !isempty(FLEX) - chargecost[FLEX, :] .= value.(EP[:vP][FLEX, :]) .* transpose(price)[dfGen[FLEX, :Zone], :] + chargecost[FLEX, :] .= value.(EP[:vP][FLEX, :]) .* transpose(price)[zone_id.(gen.FlexDemand), :] end if !isempty(ELECTROLYZER) - chargecost[ELECTROLYZER, :] .= (value.(EP[:vUSE][ELECTROLYZER, :]).data) .* transpose(price)[dfGen[ELECTROLYZER, :Zone], :] + chargecost[ELECTROLYZER, :] .= (value.(EP[:vUSE][ELECTROLYZER, :]).data) .* transpose(price)[zone_id.(gen.Electrolyzer), :] end if !isempty(VS_STOR) - chargecost[VS_STOR, :] .= value.(EP[:vCHARGE_VRE_STOR][VS_STOR, :].data) .* transpose(price)[dfGen[VS_STOR, :Zone], :] + chargecost[VS_STOR, :] .= value.(EP[:vCHARGE_VRE_STOR][VS_STOR, :].data) .* transpose(price)[zone_id.(gen[VS_STOR]), :] end if setup["ParameterScale"] == 1 chargecost *= ModelScalingFactor diff --git a/src/write_outputs/write_co2.jl b/src/write_outputs/write_co2.jl index 3cbf100fd0..b06c9d8802 100644 --- a/src/write_outputs/write_co2.jl +++ b/src/write_outputs/write_co2.jl @@ -11,13 +11,13 @@ end function write_co2_emissions_plant(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones # CO2 emissions by plant - dfEmissions_plant = DataFrame(Resource=inputs["RESOURCES"], Zone=dfGen[!, :Zone], AnnualSum=zeros(G)) + dfEmissions_plant = DataFrame(Resource=inputs["RESOURCE_NAMES"], Zone=zone_id.(gen), AnnualSum=zeros(G)) emissions_plant = value.(EP[:eEmissionsByPlant]) if setup["ParameterScale"] == 1 emissions_plant *= ModelScalingFactor @@ -31,17 +31,17 @@ function write_co2_emissions_plant(path::AbstractString, inputs::Dict, setup::Di total = DataFrame(["Total" 0 sum(dfEmissions_plant[!, :AnnualSum]) fill(0.0, (1, T))], auxNew_Names) total[!, 4:T+3] .= sum(emissions_plant, dims=1) dfEmissions_plant = vcat(dfEmissions_plant, total) - CSV.write(joinpath(path, "emissions_plant.csv"), dftranspose(dfEmissions_plant, false), writeheader=false) + CSV.write(joinpath(path, "emissions_plant.csv"), dftranspose(dfEmissions_plant, false), header=false) end function write_co2_capture_plant(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones - dfCapturedEmissions_plant = DataFrame(Resource=inputs["RESOURCES"], Zone=dfGen[!, :Zone], AnnualSum=zeros(G)) - if any(dfGen.CO2_Capture_Fraction .!= 0) + dfCapturedEmissions_plant = DataFrame(Resource=inputs["RESOURCE_NAMES"], Zone=zone_id.(gen), AnnualSum=zeros(G)) + if any(co2_capture_fraction.(gen) .!= 0) # Captured CO2 emissions by plant emissions_captured_plant = zeros(G, T) emissions_captured_plant = (value.(EP[:eEmissionsCaptureByPlant])) @@ -58,6 +58,6 @@ function write_co2_capture_plant(path::AbstractString, inputs::Dict, setup::Dict total[!, 4:T+3] .= sum(emissions_captured_plant, dims=1) dfCapturedEmissions_plant = vcat(dfCapturedEmissions_plant, total) - CSV.write(joinpath(path, "captured_emissions_plant.csv"), dftranspose(dfCapturedEmissions_plant, false), writeheader=false) + CSV.write(joinpath(path, "captured_emissions_plant.csv"), dftranspose(dfCapturedEmissions_plant, false), header=false) end end diff --git a/src/write_outputs/write_costs.jl b/src/write_outputs/write_costs.jl index 6c78735e79..2814655359 100644 --- a/src/write_outputs/write_costs.jl +++ b/src/write_outputs/write_costs.jl @@ -5,7 +5,7 @@ Function for writing the costs pertaining to the objective function (fixed, vari """ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) ## Cost results - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] SEG = inputs["SEG"] # Number of lines Z = inputs["Z"] # Number of zones T = inputs["T"] # Number of time steps (hours) @@ -80,7 +80,7 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) dfCost[!,2][11] = value(EP[:eTotalCGrid]) * (setup["ParameterScale"] == 1 ? ModelScalingFactor^2 : 1) end - if any(dfGen.CO2_Capture_Fraction .!= 0) + if any(co2_capture_fraction.(gen) .!= 0) dfCost[10,2] += value(EP[:eTotaleCCO2Sequestration]) end @@ -102,7 +102,7 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) tempHydrogenValue = 0.0 tempCCO2 = 0.0 - Y_ZONE = dfGen[dfGen[!,:Zone].==z,:R_ID] + Y_ZONE = resources_in_zone_by_rid(gen,z) STOR_ALL_ZONE = intersect(inputs["STOR_ALL"], Y_ZONE) STOR_ASYMMETRIC_ZONE = intersect(inputs["STOR_ASYMMETRIC"], Y_ZONE) FLEX_ZONE = intersect(inputs["FLEX"], Y_ZONE) @@ -137,8 +137,8 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) tempCTotal += eCVarFlex_in end if !isempty(VRE_STOR) - dfVRE_STOR = inputs["dfVRE_STOR"] - Y_ZONE_VRE_STOR = dfVRE_STOR[dfVRE_STOR[!,:Zone].==z,:R_ID] + gen_VRE_STOR = gen.VreStorage + Y_ZONE_VRE_STOR = resources_in_zone_by_rid(gen_VRE_STOR, z) # Fixed Costs eCFix_VRE_STOR = 0.0 @@ -218,7 +218,7 @@ function write_costs(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) tempCNSE = sum(value.(EP[:eCNSE][:,:,z])) tempCTotal += tempCNSE - if any(dfGen.CO2_Capture_Fraction .!=0) + if any(co2_capture_fraction.(gen) .!=0) tempCCO2 = sum(value.(EP[:ePlantCCO2Sequestration][Y_ZONE,:])) tempCTotal += tempCCO2 end diff --git a/src/write_outputs/write_curtailment.jl b/src/write_outputs/write_curtailment.jl index fa60f82f93..76061269a5 100644 --- a/src/write_outputs/write_curtailment.jl +++ b/src/write_outputs/write_curtailment.jl @@ -5,11 +5,11 @@ Function for writing the curtailment values of the different variable renewable co-located). """ function write_curtailment(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) VRE = inputs["VRE"] - dfCurtailment = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone], AnnualSum = zeros(G)) + dfCurtailment = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zone_id.(gen), AnnualSum = zeros(G)) curtailment = zeros(G, T) scale_factor = setup["ParameterScale"] == 1 ? ModelScalingFactor : 1 curtailment[VRE, :] = scale_factor * (value.(EP[:eTotalCap][VRE]) .* inputs["pP_Max"][VRE, :] .- value.(EP[:vP][VRE, :])) @@ -19,9 +19,9 @@ function write_curtailment(path::AbstractString, inputs::Dict, setup::Dict, EP:: SOLAR = setdiff(inputs["VS_SOLAR"],inputs["VS_WIND"]) WIND = setdiff(inputs["VS_WIND"],inputs["VS_SOLAR"]) SOLAR_WIND = intersect(inputs["VS_SOLAR"],inputs["VS_WIND"]) - dfVRE_STOR = inputs["dfVRE_STOR"] + gen_VRE_STOR = gen.VreStorage if !isempty(SOLAR) - curtailment[SOLAR, :] = scale_factor * (value.(EP[:eTotalCap_SOLAR][SOLAR]).data .* inputs["pP_Max_Solar"][SOLAR, :] .- value.(EP[:vP_SOLAR][SOLAR, :]).data) .* dfVRE_STOR[(dfVRE_STOR.SOLAR.!=0), :EtaInverter] + curtailment[SOLAR, :] = scale_factor * (value.(EP[:eTotalCap_SOLAR][SOLAR]).data .* inputs["pP_Max_Solar"][SOLAR, :] .- value.(EP[:vP_SOLAR][SOLAR, :]).data) .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.solar.!=0)]) end if !isempty(WIND) curtailment[WIND, :] = scale_factor * (value.(EP[:eTotalCap_WIND][WIND]).data .* inputs["pP_Max_Wind"][WIND, :] .- value.(EP[:vP_WIND][WIND, :]).data) @@ -29,7 +29,7 @@ function write_curtailment(path::AbstractString, inputs::Dict, setup::Dict, EP:: if !isempty(SOLAR_WIND) curtailment[SOLAR_WIND, :] = scale_factor * ((value.(EP[:eTotalCap_SOLAR])[SOLAR_WIND].data .* inputs["pP_Max_Solar"][SOLAR_WIND, :] .- value.(EP[:vP_SOLAR][SOLAR_WIND, :]).data) - .* dfVRE_STOR[((dfVRE_STOR.SOLAR.!=0) .& (dfVRE_STOR.WIND.!=0)), :EtaInverter] + .* etainverter.(gen_VRE_STOR[((gen_VRE_STOR.wind.!=0) .& (gen_VRE_STOR.solar.!=0))]) + (value.(EP[:eTotalCap_WIND][SOLAR_WIND]).data .* inputs["pP_Max_Wind"][SOLAR_WIND, :] .- value.(EP[:vP_WIND][SOLAR_WIND, :]).data)) end end @@ -42,6 +42,6 @@ function write_curtailment(path::AbstractString, inputs::Dict, setup::Dict, EP:: total[:, 4:T+3] .= sum(curtailment, dims = 1) rename!(total,auxNew_Names) dfCurtailment = vcat(dfCurtailment, total) - CSV.write(joinpath(path, "curtail.csv"), dftranspose(dfCurtailment, false), writeheader=false) + CSV.write(joinpath(path, "curtail.csv"), dftranspose(dfCurtailment, false), header=false) return dfCurtailment end diff --git a/src/write_outputs/write_emissions.jl b/src/write_outputs/write_emissions.jl index 34ae042c31..53129e81bc 100644 --- a/src/write_outputs/write_emissions.jl +++ b/src/write_outputs/write_emissions.jl @@ -5,8 +5,7 @@ Function for reporting time-dependent CO$_2$ emissions by zone. """ function write_emissions(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] - G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) + T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones @@ -78,5 +77,5 @@ function write_emissions(path::AbstractString, inputs::Dict, setup::Dict, EP::Mo rename!(total,auxNew_Names) dfEmissions = vcat(dfEmissions, total) end - CSV.write(joinpath(path, "emissions.csv"), dftranspose(dfEmissions, false), writeheader=false) + CSV.write(joinpath(path, "emissions.csv"), dftranspose(dfEmissions, false), header=false) end diff --git a/src/write_outputs/write_energy_revenue.jl b/src/write_outputs/write_energy_revenue.jl index f53abbaa5b..92168c52f1 100644 --- a/src/write_outputs/write_energy_revenue.jl +++ b/src/write_outputs/write_energy_revenue.jl @@ -4,17 +4,21 @@ Function for writing energy revenue from the different generation technologies. """ function write_energy_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) FLEX = inputs["FLEX"] NONFLEX = setdiff(collect(1:G), FLEX) - dfEnergyRevenue = DataFrame(Region = dfGen.region, Resource = inputs["RESOURCES"], Zone = dfGen.Zone, Cluster = dfGen.cluster, AnnualSum = Array{Float64}(undef, G),) + dfEnergyRevenue = DataFrame(Region = regions, Resource = inputs["RESOURCE_NAMES"], Zone = zones, Cluster = clusters, AnnualSum = Array{Float64}(undef, G),) energyrevenue = zeros(G, T) price = locational_marginal_price(EP, inputs, setup) - energyrevenue[NONFLEX, :] = value.(EP[:vP][NONFLEX, :]) .* transpose(price)[dfGen[NONFLEX, :Zone], :] + energyrevenue[NONFLEX, :] = value.(EP[:vP][NONFLEX, :]) .* transpose(price)[zone_id.(gen[NONFLEX]), :] if !isempty(FLEX) - energyrevenue[FLEX, :] = value.(EP[:vCHARGE_FLEX][FLEX, :]).data .* transpose(price)[dfGen[FLEX, :Zone], :] + energyrevenue[FLEX, :] = value.(EP[:vCHARGE_FLEX][FLEX, :]).data .* transpose(price)[zone_id.(gen[FLEX]), :] end if setup["ParameterScale"] == 1 energyrevenue *= ModelScalingFactor diff --git a/src/write_outputs/write_fuel_consumption.jl b/src/write_outputs/write_fuel_consumption.jl index ec88b3bae8..08da77ce2c 100644 --- a/src/write_outputs/write_fuel_consumption.jl +++ b/src/write_outputs/write_fuel_consumption.jl @@ -11,13 +11,13 @@ function write_fuel_consumption(path::AbstractString, inputs::Dict, setup::Dict, end function write_fuel_consumption_plant(path::AbstractString,inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] - G = inputs["G"] + gen = inputs["RESOURCES"] + HAS_FUEL = inputs["HAS_FUEL"] # Fuel consumption cost by each resource, including start up fuel - dfPlantFuel = DataFrame(Resource = inputs["RESOURCES"][HAS_FUEL], - Fuel = dfGen[HAS_FUEL, :Fuel], - Zone = dfGen[HAS_FUEL,:Zone], + dfPlantFuel = DataFrame(Resource = inputs["RESOURCE_NAMES"][HAS_FUEL], + Fuel = fuel.(gen[HAS_FUEL]), + Zone = zone_id.(gen[HAS_FUEL]), AnnualSum = zeros(length(HAS_FUEL))) tempannualsum = value.(EP[:ePlantCFuelOut][HAS_FUEL]) + value.(EP[:ePlantCFuelStart][HAS_FUEL]) @@ -33,7 +33,7 @@ function write_fuel_consumption_ts(path::AbstractString, inputs::Dict, setup::Di T = inputs["T"] # Number of time steps (hours) HAS_FUEL = inputs["HAS_FUEL"] # Fuel consumption by each resource per time step, unit is MMBTU - dfPlantFuel_TS = DataFrame(Resource = inputs["RESOURCES"][HAS_FUEL]) + dfPlantFuel_TS = DataFrame(Resource = inputs["RESOURCE_NAMES"][HAS_FUEL]) tempts = value.(EP[:vFuel] + EP[:eStartFuel])[HAS_FUEL,:] if setup["ParameterScale"] == 1 tempts *= ModelScalingFactor # kMMBTU to MMBTU @@ -41,7 +41,7 @@ function write_fuel_consumption_ts(path::AbstractString, inputs::Dict, setup::Di dfPlantFuel_TS = hcat(dfPlantFuel_TS, DataFrame(tempts, [Symbol("t$t") for t in 1:T])) CSV.write(joinpath(path, "FuelConsumption_plant_MMBTU.csv"), - dftranspose(dfPlantFuel_TS, false), writeheader=false) + dftranspose(dfPlantFuel_TS, false), header=false) end diff --git a/src/write_outputs/write_net_revenue.jl b/src/write_outputs/write_net_revenue.jl index 653bc05be0..f895a8e624 100644 --- a/src/write_outputs/write_net_revenue.jl +++ b/src/write_outputs/write_net_revenue.jl @@ -4,9 +4,13 @@ Function for writing net revenue of different generation technologies. """ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP::Model, dfCap::DataFrame, dfESRRev::DataFrame, dfResRevenue::DataFrame, dfChargingcost::DataFrame, dfPower::DataFrame, dfEnergyRevenue::DataFrame, dfSubRevenue::DataFrame, dfRegSubRevenue::DataFrame, dfVreStor::DataFrame, dfOpRegRevenue::DataFrame, dfOpRsvRevenue::DataFrame) - dfGen = inputs["dfGen"] - T = inputs["T"] # Number of time steps (hours) - Z = inputs["Z"] # Number of zones + + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + regions = region.(gen) + clusters = cluster.(gen) + rid = resource_id.(gen) + G = inputs["G"] # Number of generators COMMIT = inputs["COMMIT"] # Thermal units for unit commitment STOR_ALL = inputs["STOR_ALL"] @@ -17,8 +21,8 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: end VRE_STOR = inputs["VRE_STOR"] - dfVRE_STOR = inputs["dfVRE_STOR"] if !isempty(VRE_STOR) + gen_VRE_STOR = gen.VreStorage VRE_STOR_LENGTH = size(inputs["VRE_STOR"])[1] SOLAR = inputs["VS_SOLAR"] WIND = inputs["VS_WIND"] @@ -31,23 +35,22 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: end # Create a NetRevenue dataframe - dfNetRevenue = DataFrame(region = dfGen[!,:region], Resource = inputs["RESOURCES"], zone = dfGen[!,:Zone], Cluster = dfGen[!,:cluster], R_ID = dfGen[!,:R_ID]) + dfNetRevenue = DataFrame(region = regions, Resource = inputs["RESOURCE_NAMES"], zone = zones, Cluster = clusters, R_ID = rid) # Add investment cost to the dataframe - dfNetRevenue.Inv_cost_MW = dfGen[!,:Inv_Cost_per_MWyr] .* dfCap[1:G,:NewCap] - dfNetRevenue.Inv_cost_MWh = dfGen[!,:Inv_Cost_per_MWhyr] .* dfCap[1:G,:NewEnergyCap] - dfNetRevenue.Inv_cost_charge_MW = dfGen[!,:Inv_Cost_Charge_per_MWyr] .* dfCap[1:G,:NewChargeCap] - + dfNetRevenue.Inv_cost_MW = inv_cost_per_mwyr.(gen) .* dfCap[1:G,:NewCap] + dfNetRevenue.Inv_cost_MWh = inv_cost_per_mwhyr.(gen) .* dfCap[1:G,:NewEnergyCap] + dfNetRevenue.Inv_cost_charge_MW = inv_cost_charge_per_mwyr.(gen) .* dfCap[1:G,:NewChargeCap] if !isempty(VRE_STOR) # Doesn't include charge capacities if !isempty(SOLAR) - dfNetRevenue.Inv_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Inv_Cost_Solar_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapSolar] + dfNetRevenue.Inv_cost_MW[VRE_STOR] += inv_cost_solar_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapSolar] end if !isempty(DC) - dfNetRevenue.Inv_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Inv_Cost_Inverter_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapDC] - end + dfNetRevenue.Inv_cost_MW[VRE_STOR] += inv_cost_inverter_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapDC] + end if !isempty(WIND) - dfNetRevenue.Inv_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Inv_Cost_Wind_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapWind] + dfNetRevenue.Inv_cost_MW[VRE_STOR] += inv_cost_wind_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH,:NewCapWind] end end if setup["ParameterScale"] == 1 @@ -57,28 +60,28 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: end # Add operations and maintenance cost to the dataframe - dfNetRevenue.Fixed_OM_cost_MW = dfGen[!,:Fixed_OM_Cost_per_MWyr] .* dfCap[1:G,:EndCap] - dfNetRevenue.Fixed_OM_cost_MWh = dfGen[!,:Fixed_OM_Cost_per_MWhyr] .* dfCap[1:G,:EndEnergyCap] - dfNetRevenue.Fixed_OM_cost_charge_MW = dfGen[!, :Fixed_OM_Cost_Charge_per_MWyr] .* dfCap[1:G, :EndChargeCap] + dfNetRevenue.Fixed_OM_cost_MW = fixed_om_cost_per_mwyr.(gen) .* dfCap[1:G,:EndCap] + dfNetRevenue.Fixed_OM_cost_MWh = fixed_om_cost_per_mwhyr.(gen) .* dfCap[1:G,:EndEnergyCap] + dfNetRevenue.Fixed_OM_cost_charge_MW = fixed_om_cost_charge_per_mwyr.(gen) .* dfCap[1:G, :EndChargeCap] - dfNetRevenue.Var_OM_cost_out = (dfGen[!,:Var_OM_Cost_per_MWh]) .* dfPower[1:G,:AnnualSum] + dfNetRevenue.Var_OM_cost_out = var_om_cost_per_mwh.(gen) .* dfPower[1:G,:AnnualSum] if !isempty(VRE_STOR) if !isempty(SOLAR) - dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Fixed_OM_Solar_Cost_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapSolar] - dfNetRevenue.Var_OM_cost_out[SOLAR] += dfVRE_STOR[(dfVRE_STOR.SOLAR.!=0),:Var_OM_Cost_per_MWh_Solar] .* (value.(EP[:vP_SOLAR][SOLAR, :]).data .* dfVRE_STOR[(dfVRE_STOR.SOLAR.!=0),:EtaInverter] * inputs["omega"]) + dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += fixed_om_solar_cost_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapSolar] + dfNetRevenue.Var_OM_cost_out[SOLAR] += var_om_cost_per_mwh_solar.(gen_VRE_STOR[(gen_VRE_STOR.solar.!=0)]) .* (value.(EP[:vP_SOLAR][SOLAR, :]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.solar.!=0)]) * inputs["omega"]) end if !isempty(WIND) - dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Fixed_OM_Wind_Cost_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapWind] - dfNetRevenue.Var_OM_cost_out[WIND] += dfVRE_STOR[(dfVRE_STOR.WIND.!=0),:Var_OM_Cost_per_MWh_Wind] .* (value.(EP[:vP_WIND][WIND, :]).data * inputs["omega"]) - end + dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += fixed_om_wind_cost_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapWind] + dfNetRevenue.Var_OM_cost_out[WIND] += var_om_cost_per_mwh_wind.(gen_VRE_STOR[(gen_VRE_STOR.wind.!=0)]) .* (value.(EP[:vP_WIND][WIND, :]).data * inputs["omega"]) + end if !isempty(DC) - dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += dfVRE_STOR[!,:Fixed_OM_Inverter_Cost_per_MWyr] .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapDC] - end + dfNetRevenue.Fixed_OM_cost_MW[VRE_STOR] += fixed_om_inverter_cost_per_mwyr.(gen_VRE_STOR) .* dfVreStor[1:VRE_STOR_LENGTH, :EndCapDC] + end if !isempty(DC_DISCHARGE) - dfNetRevenue.Var_OM_cost_out[DC_DISCHARGE] += dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0),:Var_OM_Cost_per_MWh_Discharge_DC] .* (value.(EP[:vP_DC_DISCHARGE][DC_DISCHARGE, :]).data .* dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0),:EtaInverter] * inputs["omega"]) + dfNetRevenue.Var_OM_cost_out[DC_DISCHARGE] += var_om_cost_per_mwh_discharge_dc.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)]) .* (value.(EP[:vP_DC_DISCHARGE][DC_DISCHARGE, :]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)]) * inputs["omega"]) end if !isempty(AC_DISCHARGE) - dfNetRevenue.Var_OM_cost_out[AC_DISCHARGE] += dfVRE_STOR[(dfVRE_STOR.STOR_AC_DISCHARGE.!=0),:Var_OM_Cost_per_MWh_Discharge_AC] .* (value.(EP[:vP_AC_DISCHARGE][AC_DISCHARGE, :]).data * inputs["omega"]) + dfNetRevenue.Var_OM_cost_out[AC_DISCHARGE] += var_om_cost_per_mwh_discharge_ac.(gen_VRE_STOR[(gen_VRE_STOR.stor_ac_discharge.!=0)]) .* (value.(EP[:vP_AC_DISCHARGE][AC_DISCHARGE, :]).data * inputs["omega"]) end end if setup["ParameterScale"] == 1 @@ -97,14 +100,14 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: # Add storage cost to the dataframe dfNetRevenue.Var_OM_cost_in = zeros(nrow(dfNetRevenue)) if !isempty(STOR_ALL) - dfNetRevenue.Var_OM_cost_in[STOR_ALL] = dfGen[STOR_ALL,:Var_OM_Cost_per_MWh_In] .* ((value.(EP[:vCHARGE][STOR_ALL,:]).data) * inputs["omega"]) + dfNetRevenue.Var_OM_cost_in[STOR_ALL] = var_om_cost_per_mwh_in.(gen.Storage) .* ((value.(EP[:vCHARGE][STOR_ALL,:]).data) * inputs["omega"]) end if !isempty(VRE_STOR) if !isempty(DC_CHARGE) - dfNetRevenue.Var_OM_cost_in[DC_CHARGE] += dfVRE_STOR[(dfVRE_STOR.STOR_DC_CHARGE.!=0),:Var_OM_Cost_per_MWh_Charge_DC] .* (value.(EP[:vP_DC_CHARGE][DC_CHARGE, :]).data ./ dfVRE_STOR[(dfVRE_STOR.STOR_DC_CHARGE.!=0),:EtaInverter] * inputs["omega"]) + dfNetRevenue.Var_OM_cost_in[DC_CHARGE] += var_om_cost_per_mwh_charge_dc.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_charge.!=0)]) .* (value.(EP[:vP_DC_CHARGE][DC_CHARGE, :]).data ./ etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_charge.!=0)]) * inputs["omega"]) end if !isempty(AC_CHARGE) - dfNetRevenue.Var_OM_cost_in[AC_CHARGE] += dfVRE_STOR[(dfVRE_STOR.STOR_AC_CHARGE.!=0),:Var_OM_Cost_per_MWh_Charge_AC] .* (value.(EP[:vP_AC_CHARGE][AC_CHARGE, :]).data * inputs["omega"]) + dfNetRevenue.Var_OM_cost_in[AC_CHARGE] += var_om_cost_per_mwh_charge_ac.(gen_VRE_STOR[(gen_VRE_STOR.stor_ac_charge.!=0)]) .* (value.(EP[:vP_AC_CHARGE][AC_CHARGE, :]).data * inputs["omega"]) end end @@ -161,7 +164,7 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: for cap in 1:inputs["NCO2Cap"] co2_cap_dual = dual(EP[:cCO2Emissions_systemwide][cap]) CO2ZONES = findall(x->x==1, inputs["dfCO2CapZones"][:,cap]) - GEN_IN_ZONE = dfGen[[y in CO2ZONES for y in dfGen[:, :Zone]], :R_ID] + GEN_IN_ZONE = resource_id.(gen[[y in CO2ZONES for y in zone_id.(gen)]]) if setup["CO2Cap"]==1 || setup["CO2Cap"]==2 # Mass-based or Demand + Rate-based # Cost = sum(sum(emissions for zone z * dual(CO2 constraint[cap]) for z in Z) for cap in setup["NCO2"]) temp_vec = value.(EP[:eEmissionsByPlant][GEN_IN_ZONE, :]) * inputs["omega"] @@ -169,7 +172,7 @@ function write_net_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP:: elseif setup["CO2Cap"]==3 # Generation + Rate-based SET_WITH_MAXCO2RATE = union(inputs["THERM_ALL"],inputs["VRE"], inputs["VRE"],inputs["MUST_RUN"],inputs["HYDRO_RES"]) Y = intersect(GEN_IN_ZONE, SET_WITH_MAXCO2RATE) - temp_vec = (value.(EP[:eEmissionsByPlant][Y,:]) - (value.(EP[:vP][Y,:]) .* inputs["dfMaxCO2Rate"][dfGen[Y, :Zone], cap])) * inputs["omega"] + temp_vec = (value.(EP[:eEmissionsByPlant][Y,:]) - (value.(EP[:vP][Y,:]) .* inputs["dfMaxCO2Rate"][zone_id.(gen[Y]), cap])) * inputs["omega"] dfNetRevenue.EmissionsCost[Y] += - co2_cap_dual * temp_vec end end diff --git a/src/write_outputs/write_nse.jl b/src/write_outputs/write_nse.jl index 2da7ddb897..ae896fe416 100644 --- a/src/write_outputs/write_nse.jl +++ b/src/write_outputs/write_nse.jl @@ -4,7 +4,6 @@ Function for reporting non-served energy for every model zone, time step and cost-segment. """ function write_nse(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones SEG = inputs["SEG"] # Number of demand curtailment segments @@ -25,6 +24,6 @@ function write_nse(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) rename!(total,auxNew_Names) dfNse = vcat(dfNse, total) - CSV.write(joinpath(path, "nse.csv"), dftranspose(dfNse, false), writeheader=false) + CSV.write(joinpath(path, "nse.csv"), dftranspose(dfNse, false), header=false) return dfNse end diff --git a/src/write_outputs/write_power.jl b/src/write_outputs/write_power.jl index d1aa4e58af..7e1cc986da 100644 --- a/src/write_outputs/write_power.jl +++ b/src/write_outputs/write_power.jl @@ -4,12 +4,14 @@ Function for writing the different values of power generated by the different technologies in operation. """ function write_power(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) # Power injected by each resource in each time step - dfPower = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone], AnnualSum = Array{Union{Missing,Float64}}(undef, G)) + dfPower = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones, AnnualSum = Array{Union{Missing,Float64}}(undef, G)) power = value.(EP[:vP]) if setup["ParameterScale"] == 1 power *= ModelScalingFactor @@ -25,6 +27,6 @@ function write_power(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) rename!(total,auxNew_Names) dfPower = vcat(dfPower, total) - CSV.write(joinpath(path, "power.csv"), dftranspose(dfPower, false), writeheader=false) + CSV.write(joinpath(path, "power.csv"), dftranspose(dfPower, false), header=false) return dfPower end diff --git a/src/write_outputs/write_power_balance.jl b/src/write_outputs/write_power_balance.jl index ae45be8aed..82bd6e2b27 100644 --- a/src/write_outputs/write_power_balance.jl +++ b/src/write_outputs/write_power_balance.jl @@ -1,5 +1,5 @@ function write_power_balance(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] T = inputs["T"] # Number of time steps (hours) Z = inputs["Z"] # Number of zones SEG = inputs["SEG"] # Number of demand curtailment segments @@ -23,20 +23,20 @@ function write_power_balance(path::AbstractString, inputs::Dict, setup::Dict, EP dfPowerBalance = DataFrame(BalanceComponent = repeat(Com_list, outer = Z), Zone = repeat(1:Z, inner = L), AnnualSum = zeros(L * Z)) powerbalance = zeros(Z * L, T) # following the same style of power/charge/storage/nse for z in 1:Z - POWER_ZONE = intersect(dfGen[(dfGen[!, :Zone].==z), :R_ID], union(THERM_ALL, VRE, MUST_RUN, HYDRO_RES)) + POWER_ZONE = intersect(resources_in_zone_by_rid(gen,z), union(THERM_ALL, VRE, MUST_RUN, HYDRO_RES)) powerbalance[(z-1)*L+1, :] = sum(value.(EP[:vP][POWER_ZONE, :]), dims = 1) - if !isempty(intersect(dfGen[dfGen.Zone.==z, :R_ID], STOR_ALL)) - STOR_ALL_ZONE = intersect(dfGen[dfGen.Zone.==z, :R_ID], STOR_ALL) + if !isempty(intersect(resources_in_zone_by_rid(gen,z), STOR_ALL)) + STOR_ALL_ZONE = intersect(resources_in_zone_by_rid(gen,z), STOR_ALL) powerbalance[(z-1)*L+2, :] = sum(value.(EP[:vP][STOR_ALL_ZONE, :]), dims = 1) powerbalance[(z-1)*L+3, :] = (-1) * sum((value.(EP[:vCHARGE][STOR_ALL_ZONE, :]).data), dims = 1) end - if !isempty(intersect(dfGen[dfGen.Zone.==z, :R_ID], VRE_STOR)) - VS_ALL_ZONE = intersect(dfGen[dfGen.Zone.==z, :R_ID], inputs["VS_STOR"]) + if !isempty(intersect(resources_in_zone_by_rid(gen,z), VRE_STOR)) + VS_ALL_ZONE = intersect(resources_in_zone_by_rid(gen,z), inputs["VS_STOR"]) powerbalance[(z-1)*L+2, :] = sum(value.(EP[:vP][VS_ALL_ZONE, :]), dims = 1) powerbalance[(z-1)*L+3, :] = (-1) * sum(value.(EP[:vCHARGE_VRE_STOR][VS_ALL_ZONE, :]).data, dims=1) end - if !isempty(intersect(dfGen[dfGen.Zone.==z, :R_ID], FLEX)) - FLEX_ZONE = intersect(dfGen[dfGen.Zone.==z, :R_ID], FLEX) + if !isempty(intersect(resources_in_zone_by_rid(gen,z), FLEX)) + FLEX_ZONE = intersect(resources_in_zone_by_rid(gen,z), FLEX) powerbalance[(z-1)*L+4, :] = sum((value.(EP[:vCHARGE_FLEX][FLEX_ZONE, :]).data), dims = 1) powerbalance[(z-1)*L+5, :] = (-1) * sum(value.(EP[:vP][FLEX_ZONE, :]), dims = 1) end @@ -50,7 +50,7 @@ function write_power_balance(path::AbstractString, inputs::Dict, setup::Dict, EP end powerbalance[(z-1)*L+10, :] = (((-1) * inputs["pD"][:, z]))' # Transpose if !isempty(ELECTROLYZER) - ELECTROLYZER_ZONE = intersect(dfGen[dfGen.Zone.==z, :R_ID], ELECTROLYZER) + ELECTROLYZER_ZONE = intersect(resources_in_zone_by_rid(gen,z), ELECTROLYZER) powerbalance[(z-1)*L+11, :] = (-1) * sum(value.(EP[:vUSE][ELECTROLYZER_ZONE, :].data), dims = 1) end end @@ -61,5 +61,5 @@ function write_power_balance(path::AbstractString, inputs::Dict, setup::Dict, EP dfPowerBalance = hcat(dfPowerBalance, DataFrame(powerbalance, :auto)) auxNew_Names = [Symbol("BalanceComponent"); Symbol("Zone"); Symbol("AnnualSum"); [Symbol("t$t") for t in 1:T]] rename!(dfPowerBalance,auxNew_Names) - CSV.write(joinpath(path, "power_balance.csv"), dftranspose(dfPowerBalance, false), writeheader=false) + CSV.write(joinpath(path, "power_balance.csv"), dftranspose(dfPowerBalance, false), header=false) end diff --git a/src/write_outputs/write_price.jl b/src/write_outputs/write_price.jl index 0a2f743ff9..3bb03c130b 100644 --- a/src/write_outputs/write_price.jl +++ b/src/write_outputs/write_price.jl @@ -18,7 +18,7 @@ function write_price(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) rename!(dfPrice,auxNew_Names) ## Linear configuration final output - CSV.write(joinpath(path, "prices.csv"), dftranspose(dfPrice, false), writeheader=false) + CSV.write(joinpath(path, "prices.csv"), dftranspose(dfPrice, false), header=false) return dfPrice end diff --git a/src/write_outputs/write_reliability.jl b/src/write_outputs/write_reliability.jl index 6f283db048..ce5cd34efd 100644 --- a/src/write_outputs/write_reliability.jl +++ b/src/write_outputs/write_reliability.jl @@ -16,6 +16,6 @@ function write_reliability(path::AbstractString, inputs::Dict, setup::Dict, EP:: auxNew_Names=[Symbol("Zone");[Symbol("t$t") for t in 1:T]] rename!(dfReliability,auxNew_Names) - CSV.write(joinpath(path, "reliability.csv"), dftranspose(dfReliability, false), writeheader=false) + CSV.write(joinpath(path, "reliability.csv"), dftranspose(dfReliability, false), header=false) end diff --git a/src/write_outputs/write_storage.jl b/src/write_outputs/write_storage.jl index 7f8e168a2f..b8d2167dba 100644 --- a/src/write_outputs/write_storage.jl +++ b/src/write_outputs/write_storage.jl @@ -4,7 +4,9 @@ Function for writing the capacities of different storage technologies, including hydro reservoir, flexible storage tech etc. """ function write_storage(path::AbstractString, inputs::Dict,setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) + T = inputs["T"] # Number of time steps (hours) G = inputs["G"] STOR_ALL = inputs["STOR_ALL"] @@ -14,7 +16,7 @@ function write_storage(path::AbstractString, inputs::Dict,setup::Dict, EP::Model VS_STOR = !isempty(VRE_STOR) ? inputs["VS_STOR"] : [] # Storage level (state of charge) of each resource in each time step - dfStorage = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!,:Zone]) + dfStorage = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) storagevcapvalue = zeros(G,T) if !isempty(inputs["STOR_ALL"]) @@ -36,5 +38,5 @@ function write_storage(path::AbstractString, inputs::Dict,setup::Dict, EP::Model dfStorage = hcat(dfStorage, DataFrame(storagevcapvalue, :auto)) auxNew_Names=[Symbol("Resource");Symbol("Zone");[Symbol("t$t") for t in 1:T]] rename!(dfStorage,auxNew_Names) - CSV.write(joinpath(path, "storage.csv"), dftranspose(dfStorage, false), writeheader=false) + CSV.write(joinpath(path, "storage.csv"), dftranspose(dfStorage, false), header=false) end diff --git a/src/write_outputs/write_storagedual.jl b/src/write_outputs/write_storagedual.jl index da2ae8b291..53a99f9603 100644 --- a/src/write_outputs/write_storagedual.jl +++ b/src/write_outputs/write_storagedual.jl @@ -4,7 +4,8 @@ Function for reporting dual of storage level (state of charge) balance of each resource in each time step. """ function write_storagedual(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + zones = zone_id.(gen) G = inputs["G"] # Number of resources (generators, storage, DR, and DERs) T = inputs["T"] # Number of time steps (hours) @@ -21,7 +22,7 @@ function write_storagedual(path::AbstractString, inputs::Dict, setup::Dict, EP:: end # # Dual of storage level (state of charge) balance of each resource in each time step - dfStorageDual = DataFrame(Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone]) + dfStorageDual = DataFrame(Resource = inputs["RESOURCE_NAMES"], Zone = zones) dual_values = zeros(G, T) # Loop over W separately hours_per_subperiod @@ -58,5 +59,5 @@ function write_storagedual(path::AbstractString, inputs::Dict, setup::Dict, EP:: dfStorageDual=hcat(dfStorageDual, DataFrame(dual_values, :auto)) rename!(dfStorageDual,[Symbol("Resource");Symbol("Zone");[Symbol("t$t") for t in 1:T]]) - CSV.write(joinpath(path, "storagebal_duals.csv"), dftranspose(dfStorageDual, false), writeheader=false) + CSV.write(joinpath(path, "storagebal_duals.csv"), dftranspose(dfStorageDual, false), header=false) end diff --git a/src/write_outputs/write_subsidy_revenue.jl b/src/write_outputs/write_subsidy_revenue.jl index 9a0856cf1e..b7702cd747 100644 --- a/src/write_outputs/write_subsidy_revenue.jl +++ b/src/write_outputs/write_subsidy_revenue.jl @@ -4,16 +4,20 @@ Function for reporting subsidy revenue earned if a generator specified `Min_Cap` is provided in the input file, or if a generator is subject to a Minimum Capacity Requirement constraint. The unit is \$. """ function write_subsidy_revenue(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfGen = inputs["dfGen"] + gen = inputs["RESOURCES"] + regions = region.(gen) + clusters = cluster.(gen) + zones = zone_id.(gen) + rid = resource_id.(gen) + G = inputs["G"] - dfSubRevenue = DataFrame(Region = dfGen[!, :region], Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone], Cluster = dfGen[!, :cluster], R_ID=dfGen[!, :R_ID], SubsidyRevenue = zeros(G)) - MIN_CAP = dfGen[(dfGen[!, :Min_Cap_MW].>0), :R_ID] + dfSubRevenue = DataFrame(Region = regions, Resource = inputs["RESOURCE_NAMES"], Zone = zones, Cluster = clusters, R_ID=rid, SubsidyRevenue = zeros(G)) + MIN_CAP = ids_with_positive(gen, min_cap_mw) if !isempty(inputs["VRE_STOR"]) - dfVRE_STOR = inputs["dfVRE_STOR"] - MIN_CAP_SOLAR = dfVRE_STOR[(dfVRE_STOR[!, :Min_Cap_Solar_MW].>0), :R_ID] - MIN_CAP_WIND = dfVRE_STOR[(dfVRE_STOR[!, :Min_Cap_Wind_MW].>0), :R_ID] - MIN_CAP_STOR = dfGen[(dfGen[!, :Min_Cap_MWh].>0), :R_ID] + MIN_CAP_SOLAR = ids_with_positive(gen.VreStorage, min_cap_solar_mw) + MIN_CAP_WIND = ids_with_positive(gen.VreStorage, min_cap_wind_mw) + MIN_CAP_STOR = ids_with_positive(gen, min_cap_mwh) if !isempty(MIN_CAP_SOLAR) dfSubRevenue.SubsidyRevenue[MIN_CAP_SOLAR] .+= (value.(EP[:eTotalCap_SOLAR])[MIN_CAP_SOLAR]) .* (dual.(EP[:cMinCap_Solar][MIN_CAP_SOLAR])).data end @@ -26,24 +30,24 @@ function write_subsidy_revenue(path::AbstractString, inputs::Dict, setup::Dict, end dfSubRevenue.SubsidyRevenue[MIN_CAP] .= (value.(EP[:eTotalCap])[MIN_CAP]) .* (dual.(EP[:cMinCap][MIN_CAP])).data ### calculating tech specific subsidy revenue - dfRegSubRevenue = DataFrame(Region = dfGen[!, :region], Resource = inputs["RESOURCES"], Zone = dfGen[!, :Zone], Cluster = dfGen[!, :cluster], R_ID=dfGen[!, :R_ID], SubsidyRevenue = zeros(G)) + dfRegSubRevenue = DataFrame(Region = regions, Resource = inputs["RESOURCE_NAMES"], Zone = zones, Cluster = clusters, R_ID=rid, SubsidyRevenue = zeros(G)) if (setup["MinCapReq"] >= 1) for mincap in 1:inputs["NumberOfMinCapReqs"] # This key only exists if MinCapReq >= 1, so we can't get it at the top outside of this condition. - MIN_CAP_GEN = dfGen[(dfGen[!, Symbol("MinCapTag_$mincap")].==1), :R_ID] + MIN_CAP_GEN = ids_with_policy(gen, min_cap, tag=mincap) dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN] .= dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN] + (value.(EP[:eTotalCap][MIN_CAP_GEN])) * (dual.(EP[:cZoneMinCapReq][mincap])) if !isempty(inputs["VRE_STOR"]) - mincap_solar_sym = Symbol("MinCapTagSolar_$mincap") - mincap_stor_sym = Symbol("MinCapTagStor_$mincap") - MIN_CAP_GEN_SOLAR = dfVRE_STOR[(dfVRE_STOR[!, mincap_solar_sym].==1), :R_ID] - MIN_CAP_GEN_WIND = dfVRE_STOR[(dfVRE_STOR[!, Symbol("MinCapTagWind_$mincap")].==1), :R_ID] - MIN_CAP_GEN_ASYM_DC_DIS = intersect(inputs["VS_ASYM_DC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!, mincap_stor_sym].==1), :R_ID]) - MIN_CAP_GEN_ASYM_AC_DIS = intersect(inputs["VS_ASYM_AC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!, mincap_stor_sym].==1), :R_ID]) - MIN_CAP_GEN_SYM_DC = intersect(inputs["VS_SYM_DC"], dfVRE_STOR[(dfVRE_STOR[!, mincap_stor_sym].==1), :R_ID]) - MIN_CAP_GEN_SYM_AC = intersect(inputs["VS_SYM_AC"], dfVRE_STOR[(dfVRE_STOR[!, mincap_stor_sym].==1), :R_ID]) + gen_VRE_STOR = gen.VreStorage + HAS_MIN_CAP_STOR = ids_with_policy(gen_VRE_STOR, min_cap_stor, tag=mincap) + MIN_CAP_GEN_SOLAR = ids_with_policy(gen_VRE_STOR, min_cap_solar, tag=mincap) + MIN_CAP_GEN_WIND = ids_with_policy(gen_VRE_STOR, min_cap_wind, tag=mincap) + MIN_CAP_GEN_ASYM_DC_DIS = intersect(inputs["VS_ASYM_DC_DISCHARGE"], HAS_MIN_CAP_STOR) + MIN_CAP_GEN_ASYM_AC_DIS = intersect(inputs["VS_ASYM_AC_DISCHARGE"], HAS_MIN_CAP_STOR) + MIN_CAP_GEN_SYM_DC = intersect(inputs["VS_SYM_DC"], HAS_MIN_CAP_STOR) + MIN_CAP_GEN_SYM_AC = intersect(inputs["VS_SYM_AC"], HAS_MIN_CAP_STOR) if !isempty(MIN_CAP_GEN_SOLAR) dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN_SOLAR] .+= ( (value.(EP[:eTotalCap_SOLAR][MIN_CAP_GEN_SOLAR]).data) - .* dfVRE_STOR[((dfVRE_STOR[!, mincap_solar_sym].==1)), :EtaInverter] + .* etainverter.(gen[ids_with_policy(gen, min_cap_solar, tag=mincap)]) * (dual.(EP[:cZoneMinCapReq][mincap])) ) end @@ -54,10 +58,10 @@ function write_subsidy_revenue(path::AbstractString, inputs::Dict, setup::Dict, ) end if !isempty(MIN_CAP_GEN_ASYM_DC_DIS) - MIN_CAP_GEN_ASYM_DC_DIS = intersect(inputs["VS_ASYM_DC_DISCHARGE"], dfVRE_STOR[(dfVRE_STOR[!, mincap_stor_sym].==1), :R_ID]) + MIN_CAP_GEN_ASYM_DC_DIS = intersect(inputs["VS_ASYM_DC_DISCHARGE"], HAS_MIN_CAP_STOR) dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN_ASYM_DC_DIS] .+= ( (value.(EP[:eTotalCapDischarge_DC][MIN_CAP_GEN_ASYM_DC_DIS].data) - .* dfVRE_STOR[((dfVRE_STOR[!, mincap_stor_sym].==1) .& (dfVRE_STOR.STOR_DC_DISCHARGE.==2)), :EtaInverter]) + .* etainverter.(gen_VRE_STOR[min_cap_stor.(gen_VRE_STOR, tag=mincap).==1 .& (gen_VRE_STOR.stor_dc_discharge.==2)])) * (dual.(EP[:cZoneMinCapReq][mincap])) ) end @@ -70,15 +74,15 @@ function write_subsidy_revenue(path::AbstractString, inputs::Dict, setup::Dict, if !isempty(MIN_CAP_GEN_SYM_DC) dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN_SYM_DC] .+= ( (value.(EP[:eTotalCap_STOR][MIN_CAP_GEN_SYM_DC]).data - .* dfVRE_STOR[((dfVRE_STOR[!, mincap_stor_sym].==1) .& (dfVRE_STOR.STOR_DC_DISCHARGE.==1)), :Power_to_Energy_DC] - .* dfVRE_STOR[((dfVRE_STOR[!, mincap_stor_sym].==1) .& (dfVRE_STOR.STOR_DC_DISCHARGE.==1)), :EtaInverter]) + .* power_to_energy_dc.(gen_VRE_STOR[(min_cap_stor.(gen_VRE_STOR, tag=mincap).==1 .& (gen_VRE_STOR.stor_dc_discharge.==1))]) + .* etainverter.(gen_VRE_STOR[(min_cap_stor.(gen_VRE_STOR, tag=mincap).==1 .& (gen_VRE_STOR.stor_dc_discharge.==1))])) * (dual.(EP[:cZoneMinCapReq][mincap])) ) end if !isempty(MIN_CAP_GEN_SYM_AC) dfRegSubRevenue.SubsidyRevenue[MIN_CAP_GEN_SYM_AC] .+= ( (value.(EP[:eTotalCap_STOR][MIN_CAP_GEN_SYM_AC]).data - .* dfVRE_STOR[((dfVRE_STOR[!, mincap_stor_sym].==1) .& (dfVRE_STOR.STOR_AC_DISCHARGE.==1)), :Power_to_Energy_AC]) + .* power_to_energy_ac.(gen_VRE_STOR[(min_cap_stor.(gen_VRE_STOR, tag=mincap).==1 .& (gen_VRE_STOR.stor_ac_discharge.==1))])) * (dual.(EP[:cZoneMinCapReq][mincap])) ) end diff --git a/src/write_outputs/write_vre_stor.jl b/src/write_outputs/write_vre_stor.jl index 77fa13b073..818cb60c58 100644 --- a/src/write_outputs/write_vre_stor.jl +++ b/src/write_outputs/write_vre_stor.jl @@ -24,15 +24,16 @@ end Function for writing the vre-storage capacities. """ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage + VRE_STOR = inputs["VRE_STOR"] SOLAR = inputs["VS_SOLAR"] WIND = inputs["VS_WIND"] DC = inputs["VS_DC"] STOR = inputs["VS_STOR"] - dfGen = inputs["dfGen"] - dfVRE_STOR = inputs["dfVRE_STOR"] MultiStage = setup["MultiStage"] - size_vrestor_resources = size(inputs["RESOURCES_VRE_STOR"]) + size_vrestor_resources = size(inputs["RESOURCE_NAMES_VRE_STOR"]) # Solar capacity capsolar = zeros(size_vrestor_resources) @@ -81,7 +82,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict j = 1 for i in VRE_STOR - existingcapgrid[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAP][i]) : dfGen[i,:Existing_Cap_MW] + existingcapgrid[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAP][i]) : existing_cap_mw(gen[i]) if i in inputs["NEW_CAP"] capgrid[j] = value(EP[:vCAP][i]) end @@ -90,7 +91,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict end if i in SOLAR - existingcapsolar[j] = MultiStage == 1 ? value(EP[:vEXISTINGSOLARCAP][i]) : dfVRE_STOR[j,:Existing_Cap_Solar_MW] + existingcapsolar[j] = MultiStage == 1 ? value(EP[:vEXISTINGSOLARCAP][i]) : existing_cap_solar_mw(gen_VRE_STOR[j]) if i in inputs["NEW_CAP_SOLAR"] capsolar[j] = value(EP[:vSOLARCAP][i]) end @@ -100,7 +101,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict end if i in WIND - existingcapwind[j] = MultiStage == 1 ? value(EP[:vEXISTINGWINDCAP][i]) : dfVRE_STOR[j,:Existing_Cap_Wind_MW] + existingcapwind[j] = MultiStage == 1 ? value(EP[:vEXISTINGWINDCAP][i]) : existing_cap_wind_mw(gen_VRE_STOR[j]) if i in inputs["NEW_CAP_WIND"] capwind[j] = value(EP[:vWINDCAP][i]) end @@ -110,7 +111,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict end if i in DC - existingcapdc[j] = MultiStage == 1 ? value(EP[:vEXISTINGDCCAP][i]) : dfVRE_STOR[j,:Existing_Cap_Inverter_MW] + existingcapdc[j] = MultiStage == 1 ? value(EP[:vEXISTINGDCCAP][i]) : existing_cap_inverter_mw(gen_VRE_STOR[j]) if i in inputs["NEW_CAP_DC"] capdc[j] = value(EP[:vDCCAP][i]) end @@ -120,7 +121,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict end if i in STOR - existingcapenergy[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPENERGY_VS][i]) : dfGen[i,:Existing_Cap_MWh] + existingcapenergy[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPENERGY_VS][i]) : existing_cap_mwh(gen[i]) if i in inputs["NEW_CAP_STOR"] capenergy[j] = value(EP[:vCAPENERGY_VS][i]) end @@ -135,7 +136,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict if i in inputs["RET_CAP_CHARGE_DC"] retcapchargedc[j] = value(EP[:vRETCAPCHARGE_DC][i]) end - existingcapchargedc[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGEDC][i]) : dfVRE_STOR[j,:Existing_Cap_Charge_DC_MW] + existingcapchargedc[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGEDC][i]) : existing_cap_charge_dc_mw(gen_VRE_STOR[j]) end if i in inputs["VS_ASYM_AC_CHARGE"] if i in inputs["NEW_CAP_CHARGE_AC"] @@ -144,7 +145,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict if i in inputs["RET_CAP_CHARGE_AC"] retcapchargeac[j] = value(EP[:vRETCAPCHARGE_AC][i]) end - existingcapchargeac[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGEAC][i]) : dfVRE_STOR[j,:Existing_Cap_Charge_AC_MW] + existingcapchargeac[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPCHARGEAC][i]) : existing_cap_charge_ac_mw(gen_VRE_STOR[j]) end if i in inputs["VS_ASYM_DC_DISCHARGE"] if i in inputs["NEW_CAP_DISCHARGE_DC"] @@ -153,7 +154,7 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict if i in inputs["RET_CAP_DISCHARGE_DC"] retcapdischargedc[j] = value(EP[:vRETCAPDISCHARGE_DC][i]) end - existingcapdischargedc[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPDISCHARGEDC][i]) : dfVRE_STOR[j,:Existing_Cap_Discharge_DC_MW] + existingcapdischargedc[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPDISCHARGEDC][i]) : existing_cap_discharge_dc_mw(gen_VRE_STOR[j]) end if i in inputs["VS_ASYM_AC_DISCHARGE"] if i in inputs["NEW_CAP_DISCHARGE_AC"] @@ -162,14 +163,18 @@ function write_vre_stor_capacity(path::AbstractString, inputs::Dict, setup::Dict if i in inputs["RET_CAP_DISCHARGE_AC"] retcapdischargeac[j] = value(EP[:vRETCAPDISCHARGE_AC][i]) end - existingcapdischargeac[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPDISCHARGEAC][i]) : dfVRE_STOR[j,:Existing_Cap_Discharge_AC_MW] + existingcapdischargeac[j] = MultiStage == 1 ? value(EP[:vEXISTINGCAPDISCHARGEAC][i]) : existing_cap_discharge_ac_mw(gen_VRE_STOR[j]) end end j += 1 end + technologies = resource_type_mga.(gen_VRE_STOR) + clusters = cluster.(gen_VRE_STOR) + zones = zone_id.(gen_VRE_STOR) + dfCap = DataFrame( - Resource = inputs["RESOURCES_VRE_STOR"], Zone = dfVRE_STOR[!,:Zone], Resource_Type = dfVRE_STOR[!,:Resource_Type], Cluster=dfVRE_STOR[!,:cluster], + Resource = inputs["RESOURCE_NAMES_VRE_STOR"], Zone = zones, Resource_Type = technologies, Cluster=clusters, StartCapSolar = existingcapsolar[:], RetCapSolar = retcapsolar[:], NewCapSolar = capsolar[:], @@ -283,16 +288,17 @@ end Function for writing the vre-storage charging decision variables/expressions. """ function write_vre_stor_charge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage T = inputs["T"] DC_CHARGE = inputs["VS_STOR_DC_CHARGE"] AC_CHARGE = inputs["VS_STOR_AC_CHARGE"] # DC charging of battery dataframe if !isempty(DC_CHARGE) - dfCharge_DC = DataFrame(Resource = inputs["RESOURCES_DC_CHARGE"], Zone = inputs["ZONES_DC_CHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(DC_CHARGE)[1])) + dfCharge_DC = DataFrame(Resource = inputs["RESOURCE_NAMES_DC_CHARGE"], Zone = inputs["ZONES_DC_CHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(DC_CHARGE)[1])) charge_dc = zeros(size(DC_CHARGE)[1], T) - charge_dc = value.(EP[:vP_DC_CHARGE]).data ./ dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0), :EtaInverter] * (setup["ParameterScale"]==1 ? ModelScalingFactor : 1) + charge_dc = value.(EP[:vP_DC_CHARGE]).data ./ etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)]) * (setup["ParameterScale"]==1 ? ModelScalingFactor : 1) dfCharge_DC.AnnualSum .= charge_dc * inputs["omega"] dfCharge_DC = hcat(dfCharge_DC, DataFrame(charge_dc, :auto)) auxNew_Names=[Symbol("Resource");Symbol("Zone");Symbol("AnnualSum");[Symbol("t$t") for t in 1:T]] @@ -301,12 +307,12 @@ function write_vre_stor_charge(path::AbstractString, inputs::Dict, setup::Dict, total[:, 4:T+3] .= sum(charge_dc, dims = 1) rename!(total,auxNew_Names) dfCharge_DC = vcat(dfCharge_DC, total) - CSV.write(joinpath(path,"vre_stor_dc_charge.csv"), dftranspose(dfCharge_DC, false), writeheader=false) + CSV.write(joinpath(path,"vre_stor_dc_charge.csv"), dftranspose(dfCharge_DC, false), header=false) end # AC charging of battery dataframe if !isempty(AC_CHARGE) - dfCharge_AC = DataFrame(Resource = inputs["RESOURCES_AC_CHARGE"], Zone = inputs["ZONES_AC_CHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(AC_CHARGE)[1])) + dfCharge_AC = DataFrame(Resource = inputs["RESOURCE_NAMES_AC_CHARGE"], Zone = inputs["ZONES_AC_CHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(AC_CHARGE)[1])) charge_ac = zeros(size(AC_CHARGE)[1], T) charge_ac = value.(EP[:vP_AC_CHARGE]).data * (setup["ParameterScale"]==1 ? ModelScalingFactor : 1) dfCharge_AC.AnnualSum .= charge_ac * inputs["omega"] @@ -317,7 +323,7 @@ function write_vre_stor_charge(path::AbstractString, inputs::Dict, setup::Dict, total[:, 4:T+3] .= sum(charge_ac, dims = 1) rename!(total,auxNew_Names) dfCharge_AC = vcat(dfCharge_AC, total) - CSV.write(joinpath(path,"vre_stor_ac_charge.csv"), dftranspose(dfCharge_AC, false), writeheader=false) + CSV.write(joinpath(path,"vre_stor_ac_charge.csv"), dftranspose(dfCharge_AC, false), header=false) end end @@ -327,7 +333,8 @@ end Function for writing the vre-storage discharging decision variables/expressions. """ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dict, EP::Model) - dfVRE_STOR = inputs["dfVRE_STOR"] + gen = inputs["RESOURCES"] + gen_VRE_STOR = gen.VreStorage T = inputs["T"] DC_DISCHARGE = inputs["VS_STOR_DC_DISCHARGE"] AC_DISCHARGE = inputs["VS_STOR_AC_DISCHARGE"] @@ -336,8 +343,8 @@ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dic # DC discharging of battery dataframe if !isempty(DC_DISCHARGE) - dfDischarge_DC = DataFrame(Resource = inputs["RESOURCES_DC_DISCHARGE"], Zone = inputs["ZONES_DC_DISCHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(DC_DISCHARGE)[1])) - power_vre_stor = value.(EP[:vP_DC_DISCHARGE]).data .* dfVRE_STOR[(dfVRE_STOR.STOR_DC_DISCHARGE.!=0), :EtaInverter] + dfDischarge_DC = DataFrame(Resource = inputs["RESOURCE_NAMES_DC_DISCHARGE"], Zone = inputs["ZONES_DC_DISCHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(DC_DISCHARGE)[1])) + power_vre_stor = value.(EP[:vP_DC_DISCHARGE]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.stor_dc_discharge.!=0)]) if setup["ParameterScale"] == 1 power_vre_stor *= ModelScalingFactor end @@ -349,12 +356,12 @@ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dic total[:, 4:T+3] .= sum(power_vre_stor, dims = 1) rename!(total,auxNew_Names) dfDischarge_DC = vcat(dfDischarge_DC, total) - CSV.write(joinpath(path, "vre_stor_dc_discharge.csv"), dftranspose(dfDischarge_DC, false), writeheader=false) + CSV.write(joinpath(path, "vre_stor_dc_discharge.csv"), dftranspose(dfDischarge_DC, false), header=false) end # AC discharging of battery dataframe if !isempty(AC_DISCHARGE) - dfDischarge_AC = DataFrame(Resource = inputs["RESOURCES_AC_DISCHARGE"], Zone = inputs["ZONES_AC_DISCHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(AC_DISCHARGE)[1])) + dfDischarge_AC = DataFrame(Resource = inputs["RESOURCE_NAMES_AC_DISCHARGE"], Zone = inputs["ZONES_AC_DISCHARGE"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(AC_DISCHARGE)[1])) power_vre_stor = value.(EP[:vP_AC_DISCHARGE]).data if setup["ParameterScale"] == 1 power_vre_stor *= ModelScalingFactor @@ -367,12 +374,12 @@ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dic total[:, 4:T+3] .= sum(power_vre_stor, dims = 1) rename!(total,auxNew_Names) dfDischarge_AC = vcat(dfDischarge_AC, total) - CSV.write(joinpath(path, "vre_stor_ac_discharge.csv"), dftranspose(dfDischarge_AC, false), writeheader=false) + CSV.write(joinpath(path, "vre_stor_ac_discharge.csv"), dftranspose(dfDischarge_AC, false), header=false) end # Wind generation of co-located resource dataframe if !isempty(WIND) - dfVP_VRE_STOR = DataFrame(Resource = inputs["RESOURCES_WIND"], Zone = inputs["ZONES_WIND"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(WIND)[1])) + dfVP_VRE_STOR = DataFrame(Resource = inputs["RESOURCE_NAMES_WIND"], Zone = inputs["ZONES_WIND"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(WIND)[1])) vre_vre_stor = value.(EP[:vP_WIND]).data if setup["ParameterScale"] == 1 vre_vre_stor *= ModelScalingFactor @@ -385,13 +392,13 @@ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dic total[:, 4:T+3] .= sum(vre_vre_stor, dims = 1) rename!(total,auxNew_Names) dfVP_VRE_STOR = vcat(dfVP_VRE_STOR, total) - CSV.write(joinpath(path,"vre_stor_wind_power.csv"), dftranspose(dfVP_VRE_STOR, false), writeheader=false) + CSV.write(joinpath(path,"vre_stor_wind_power.csv"), dftranspose(dfVP_VRE_STOR, false), header=false) end # Solar generation of co-located resource dataframe if !isempty(SOLAR) - dfVP_VRE_STOR = DataFrame(Resource = inputs["RESOURCES_SOLAR"], Zone = inputs["ZONES_SOLAR"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(SOLAR)[1])) - vre_vre_stor = value.(EP[:vP_SOLAR]).data .* dfVRE_STOR[(dfVRE_STOR.SOLAR.!=0), :EtaInverter] + dfVP_VRE_STOR = DataFrame(Resource = inputs["RESOURCE_NAMES_SOLAR"], Zone = inputs["ZONES_SOLAR"], AnnualSum = Array{Union{Missing,Float32}}(undef, size(SOLAR)[1])) + vre_vre_stor = value.(EP[:vP_SOLAR]).data .* etainverter.(gen_VRE_STOR[(gen_VRE_STOR.solar.!=0)]) if setup["ParameterScale"] == 1 vre_vre_stor *= ModelScalingFactor end @@ -403,6 +410,6 @@ function write_vre_stor_discharge(path::AbstractString, inputs::Dict, setup::Dic total[:, 4:T+3] .= sum(vre_vre_stor, dims = 1) rename!(total,auxNew_Names) dfVP_VRE_STOR = vcat(dfVP_VRE_STOR, total) - CSV.write(joinpath(path,"vre_stor_solar_power.csv"), dftranspose(dfVP_VRE_STOR, false), writeheader=false) + CSV.write(joinpath(path,"vre_stor_solar_power.csv"), dftranspose(dfVP_VRE_STOR, false), header=false) end end diff --git a/test/ComputeConflicts/Generators_data.csv b/test/ComputeConflicts/Generators_data.csv deleted file mode 100644 index 8f0d856757..0000000000 --- a/test/ComputeConflicts/Generators_data.csv +++ /dev/null @@ -1,5 +0,0 @@ -Resource,Zone,THERM,MUST_RUN,STOR,FLEX,HYDRO,VRE,LDS,Num_VRE_Bins,New_Build,Can_Retire,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,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,MaxCapTag_1,MaxCapTag_2,MaxCapTag_3,Resource_Type,CapRes_1,region,cluster -natural_gas_combined_cycle,1,1,0,0,0,0,0,0,0,1,0,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.468,0,1,1,0,0,0,0,0,natural_gas_fired_combined_cycle,0.93,NE,1 -solar_pv,1,0,0,0,0,0,1,0,1,1,0,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,1,1,0,0,1,0,0,solar_photovoltaic,0.8,NE,1 -onshore_wind,1,0,0,0,0,0,1,0,1,1,0,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,1,1,0,0,0,1,0,onshore_wind_turbine,0.8,NE,1 -battery,1,0,0,1,0,0,0,0,0,1,0,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.92,0.92,1,10,0,0,1,battery_mid,0.95,NE,0 diff --git a/test/ComputeConflicts/Resources/Storage.csv b/test/ComputeConflicts/Resources/Storage.csv new file mode 100644 index 0000000000..6e066c6823 --- /dev/null +++ b/test/ComputeConflicts/Resources/Storage.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Max_Cap_MW,Max_Cap_MWh,Min_Cap_MW,Min_Cap_MWh,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Resource_Type,CapRes_1,region,cluster +battery,1,1,1,0,0,0,-1,-1,0,0,19584,22494,4895,5622,0.15,0.15,0,0,0.92,0.92,1,10,battery_mid,0.95,NE,0 \ No newline at end of file diff --git a/test/ComputeConflicts/Resources/Thermal.csv b/test/ComputeConflicts/Resources/Thermal.csv new file mode 100644 index 0000000000..1f56d4b48f --- /dev/null +++ b/test/ComputeConflicts/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Resource_Type,CapRes_1,region,cluster +natural_gas_combined_cycle,1,1,1,0,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,natural_gas_fired_combined_cycle,0.93,NE,1 \ No newline at end of file diff --git a/test/ComputeConflicts/Resources/Vre.csv b/test/ComputeConflicts/Resources/Vre.csv new file mode 100644 index 0000000000..6e5014b7b4 --- /dev/null +++ b/test/ComputeConflicts/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Resource_Type,CapRes_1,region,cluster +solar_pv,1,1,1,0,0,-1,0,85300,18760,0,9.13,solar_photovoltaic,0.8,NE,1 +onshore_wind,1,1,1,0,0,-1,0,97200,43205,0.1,9.12,onshore_wind_turbine,0.8,NE,1 \ No newline at end of file diff --git a/test/Electrolyzer/Generators_data.csv b/test/Electrolyzer/Generators_data.csv deleted file mode 100644 index eca69e60ae..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,Can_Retire,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,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,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,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,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,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,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 diff --git a/test/Electrolyzer/Generators_variability.csv b/test/Electrolyzer/Generators_variability.csv index c2ac9b8ee4..1a6a2caf86 100644 --- a/test/Electrolyzer/Generators_variability.csv +++ b/test/Electrolyzer/Generators_variability.csv @@ -1,121 +1,121 @@ -Time_Index,natural_gas_combined_cycle,solar_pv,onshore_wind,battery,electrolyzer,battery_for_electrolyzer -1,1.0,0.0,0.523972332,1.0,1.0,1.0 -2,1.0,0.0,0.657110274,1.0,1.0,1.0 -3,1.0,0.0,0.757477045,1.0,1.0,1.0 -4,1.0,0.0,0.644009769,1.0,1.0,1.0 -5,1.0,0.0,0.467615873,1.0,1.0,1.0 -6,1.0,0.0,0.553678334,1.0,1.0,1.0 -7,1.0,0.0,0.77921623,1.0,1.0,1.0 -8,1.0,0.0,0.725531518,1.0,1.0,1.0 -9,1.0,0.0,0.786552846,1.0,1.0,1.0 -10,1.0,0.003,0.589495063,1.0,1.0,1.0 -11,1.0,0.0852,0.436854541,1.0,1.0,1.0 -12,1.0,0.1324,0.533977807,1.0,1.0,1.0 -13,1.0,0.1041,0.54939425,1.0,1.0,1.0 -14,1.0,0.1276,0.297182679,1.0,1.0,1.0 -15,1.0,0.1108,0.108885378,1.0,1.0,1.0 -16,1.0,0.0825,0.097908288,1.0,1.0,1.0 -17,1.0,0.0043,0.092191279,1.0,1.0,1.0 -18,1.0,0.0,0.112537816,1.0,1.0,1.0 -19,1.0,0.0,0.366680771,1.0,1.0,1.0 -20,1.0,0.0,0.794670165,1.0,1.0,1.0 -21,1.0,0.0,0.931621909,1.0,1.0,1.0 -22,1.0,0.0,1.0,1.0,1.0,1.0 -23,1.0,0.0,1.0,1.0,1.0,1.0 -24,1.0,0.0,1.0,1.0,1.0,1.0 -25,1.0,0.0,0.676885605,1.0,1.0,1.0 -26,1.0,0.0,0.738456726,1.0,1.0,1.0 -27,1.0,0.0,0.703836918,1.0,1.0,1.0 -28,1.0,0.0,0.697715104,1.0,1.0,1.0 -29,1.0,0.0,0.578294039,1.0,1.0,1.0 -30,1.0,0.0,0.478842616,1.0,1.0,1.0 -31,1.0,0.0,0.57159102,1.0,1.0,1.0 -32,1.0,0.0216,0.389114857,1.0,1.0,1.0 -33,1.0,0.1372,0.520889282,1.0,1.0,1.0 -34,1.0,0.3468,0.376534432,1.0,1.0,1.0 -35,1.0,0.3952,0.327963144,1.0,1.0,1.0 -36,1.0,0.4551,0.407575041,1.0,1.0,1.0 -37,1.0,0.5095,0.536571622,1.0,1.0,1.0 -38,1.0,0.5567,0.576452434,1.0,1.0,1.0 -39,1.0,0.5691,0.562025309,1.0,1.0,1.0 -40,1.0,0.4904,0.422575682,1.0,1.0,1.0 -41,1.0,0.3087,0.521396458,1.0,1.0,1.0 -42,1.0,0.1034,0.710955501,1.0,1.0,1.0 -43,1.0,0.0,0.683217525,1.0,1.0,1.0 -44,1.0,0.0,0.635520697,1.0,1.0,1.0 -45,1.0,0.0,0.5644238,1.0,1.0,1.0 -46,1.0,0.0,0.61978668,1.0,1.0,1.0 -47,1.0,0.0,0.516743779,1.0,1.0,1.0 -48,1.0,0.0,0.470443606,1.0,1.0,1.0 -49,1.0,0.0,0.500380576,1.0,1.0,1.0 -50,1.0,0.0,0.512022793,1.0,1.0,1.0 -51,1.0,0.0,0.404206336,1.0,1.0,1.0 -52,1.0,0.0,0.142279267,1.0,1.0,1.0 -53,1.0,0.0,0.133046106,1.0,1.0,1.0 -54,1.0,0.1356,0.133957967,1.0,1.0,1.0 -55,1.0,0.1041,0.041104347,1.0,1.0,1.0 -56,1.0,0.2399,0.029715812,1.0,1.0,1.0 -57,1.0,0.3785,0.064291924,1.0,1.0,1.0 -58,1.0,0.4837,0.043738909,1.0,1.0,1.0 -59,1.0,0.5323,0.056054953,1.0,1.0,1.0 -60,1.0,0.5114,0.101633437,1.0,1.0,1.0 -61,1.0,0.5175,0.238559932,1.0,1.0,1.0 -62,1.0,0.5099,0.194997847,1.0,1.0,1.0 -63,1.0,0.502,0.190832943,1.0,1.0,1.0 -64,1.0,0.4113,0.26438266,1.0,1.0,1.0 -65,1.0,0.3017,0.273810387,1.0,1.0,1.0 -66,1.0,0.1773,0.195969075,1.0,1.0,1.0 -67,1.0,0.0811,0.235671312,1.0,1.0,1.0 -68,1.0,0.0006,0.188544422,1.0,1.0,1.0 -69,1.0,0.0,0.179863051,1.0,1.0,1.0 -70,1.0,0.0,0.223087296,1.0,1.0,1.0 -71,1.0,0.0,0.457369655,1.0,1.0,1.0 -72,1.0,0.0,0.715852976,1.0,1.0,1.0 -73,1.0,0.0,0.280310601,1.0,1.0,1.0 -74,1.0,0.0,0.603805244,1.0,1.0,1.0 -75,1.0,0.0,0.741859972,1.0,1.0,1.0 -76,1.0,0.0,0.44207269,1.0,1.0,1.0 -77,1.0,0.0,0.534612,1.0,1.0,1.0 -78,1.0,0.0259,0.587511122,1.0,1.0,1.0 -79,1.0,0.096,0.48241505,1.0,1.0,1.0 -80,1.0,0.2133,0.226682097,1.0,1.0,1.0 -81,1.0,0.3624,0.376575917,1.0,1.0,1.0 -82,1.0,0.4795,0.272142261,1.0,1.0,1.0 -83,1.0,0.5633,0.132447034,1.0,1.0,1.0 -84,1.0,0.5708,0.091180928,1.0,1.0,1.0 -85,1.0,0.534,0.420845181,1.0,1.0,1.0 -86,1.0,0.5641,0.543866694,1.0,1.0,1.0 -87,1.0,0.5537,0.943579316,1.0,1.0,1.0 -88,1.0,0.457,0.83001256,1.0,1.0,1.0 -89,1.0,0.3439,0.698711514,1.0,1.0,1.0 -90,1.0,0.1642,0.536995411,1.0,1.0,1.0 -91,1.0,0.0638,0.770702124,1.0,1.0,1.0 -92,1.0,0.0,0.569594324,1.0,1.0,1.0 -93,1.0,0.0,0.668922722,1.0,1.0,1.0 -94,1.0,0.0,0.759383678,1.0,1.0,1.0 -95,1.0,0.0,0.672967851,1.0,1.0,1.0 -96,1.0,0.0,0.861851215,1.0,1.0,1.0 -97,1.0,0.0,0.000154842,1.0,1.0,1.0 -98,1.0,0.0,5.75e-5,1.0,1.0,1.0 -99,1.0,0.0,7.18e-5,1.0,1.0,1.0 -100,1.0,0.0,3.65e-5,1.0,1.0,1.0 -101,1.0,0.0,3.0e-5,1.0,1.0,1.0 -102,1.0,0.0,0.0,1.0,1.0,1.0 -103,1.0,0.0,0.000772537,1.0,1.0,1.0 -104,1.0,0.0,0.000930232,1.0,1.0,1.0 -105,1.0,0.1029,0.000778525,1.0,1.0,1.0 -106,1.0,0.2427,0.000131503,1.0,1.0,1.0 -107,1.0,0.3353,0.005792293,1.0,1.0,1.0 -108,1.0,0.3693,0.00257458,1.0,1.0,1.0 -109,1.0,0.321,1.01e-5,1.0,1.0,1.0 -110,1.0,0.2798,0.000134685,1.0,1.0,1.0 -111,1.0,0.2887,0.000516413,1.0,1.0,1.0 -112,1.0,0.1717,0.001232307,1.0,1.0,1.0 -113,1.0,0.0,0.002655152,1.0,1.0,1.0 -114,1.0,0.0,0.003173271,1.0,1.0,1.0 -115,1.0,0.0,0.003878384,1.0,1.0,1.0 -116,1.0,0.0,0.005781263,1.0,1.0,1.0 -117,1.0,0.0,0.006259252,1.0,1.0,1.0 -118,1.0,0.0,0.008088858,1.0,1.0,1.0 -119,1.0,0.0,0.008165604,1.0,1.0,1.0 -120,1.0,0.0,0.007110484,1.0,1.0,1.0 +Time_Index,solar_pv,onshore_wind +1,0,0.523972332 +2,0,0.657110274 +3,0,0.757477045 +4,0,0.644009769 +5,0,0.467615873 +6,0,0.553678334 +7,0,0.77921623 +8,0,0.725531518 +9,0,0.786552846 +10,0.003,0.589495063 +11,0.0852,0.436854541 +12,0.1324,0.533977807 +13,0.1041,0.54939425 +14,0.1276,0.297182679 +15,0.1108,0.108885378 +16,0.0825,0.097908288 +17,0.0043,0.092191279 +18,0,0.112537816 +19,0,0.366680771 +20,0,0.794670165 +21,0,0.931621909 +22,0,1 +23,0,1 +24,0,1 +25,0,0.676885605 +26,0,0.738456726 +27,0,0.703836918 +28,0,0.697715104 +29,0,0.578294039 +30,0,0.478842616 +31,0,0.57159102 +32,0.0216,0.389114857 +33,0.1372,0.520889282 +34,0.3468,0.376534432 +35,0.3952,0.327963144 +36,0.4551,0.407575041 +37,0.5095,0.536571622 +38,0.5567,0.576452434 +39,0.5691,0.562025309 +40,0.4904,0.422575682 +41,0.3087,0.521396458 +42,0.1034,0.710955501 +43,0,0.683217525 +44,0,0.635520697 +45,0,0.5644238 +46,0,0.61978668 +47,0,0.516743779 +48,0,0.470443606 +49,0,0.500380576 +50,0,0.512022793 +51,0,0.404206336 +52,0,0.142279267 +53,0,0.133046106 +54,0.1356,0.133957967 +55,0.1041,0.041104347 +56,0.2399,0.029715812 +57,0.3785,0.064291924 +58,0.4837,0.043738909 +59,0.5323,0.056054953 +60,0.5114,0.101633437 +61,0.5175,0.238559932 +62,0.5099,0.194997847 +63,0.502,0.190832943 +64,0.4113,0.26438266 +65,0.3017,0.273810387 +66,0.1773,0.195969075 +67,0.0811,0.235671312 +68,0.0006,0.188544422 +69,0,0.179863051 +70,0,0.223087296 +71,0,0.457369655 +72,0,0.715852976 +73,0,0.280310601 +74,0,0.603805244 +75,0,0.741859972 +76,0,0.44207269 +77,0,0.534612 +78,0.0259,0.587511122 +79,0.096,0.48241505 +80,0.2133,0.226682097 +81,0.3624,0.376575917 +82,0.4795,0.272142261 +83,0.5633,0.132447034 +84,0.5708,0.091180928 +85,0.534,0.420845181 +86,0.5641,0.543866694 +87,0.5537,0.943579316 +88,0.457,0.83001256 +89,0.3439,0.698711514 +90,0.1642,0.536995411 +91,0.0638,0.770702124 +92,0,0.569594324 +93,0,0.668922722 +94,0,0.759383678 +95,0,0.672967851 +96,0,0.861851215 +97,0,0.000154842 +98,0,5.75e-5 +99,0,7.18e-5 +100,0,3.65e-5 +101,0,3.0e-5 +102,0,0 +103,0,0.000772537 +104,0,0.000930232 +105,0.1029,0.000778525 +106,0.2427,0.000131503 +107,0.3353,0.005792293 +108,0.3693,0.00257458 +109,0.321,1.01e-5 +110,0.2798,0.000134685 +111,0.2887,0.000516413 +112,0.1717,0.001232307 +113,0,0.002655152 +114,0,0.003173271 +115,0,0.003878384 +116,0,0.005781263 +117,0,0.006259252 +118,0,0.008088858 +119,0,0.008165604 +120,0,0.007110484 \ No newline at end of file diff --git a/test/Electrolyzer/Resources/Electrolyzer.csv b/test/Electrolyzer/Resources/Electrolyzer.csv new file mode 100644 index 0000000000..cbb782c7ac --- /dev/null +++ b/test/Electrolyzer/Resources/Electrolyzer.csv @@ -0,0 +1,2 @@ +Resource,Zone,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Cap_Size,Resource_Type,ESR_1,ESR_2,region,cluster,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne +electrolyzer,1,1,1,0,-1,-1,125000,15000,0,1,hydrogen_electrolyzer,0,1,NE,0,55,1000,1000 \ No newline at end of file diff --git a/test/Electrolyzer/Resources/Resource_energy_share_requirement.csv b/test/Electrolyzer/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..cf003f74c5 --- /dev/null +++ b/test/Electrolyzer/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,4 @@ +Resource,ESR_1,ESR_2 +solar_pv,1,1 +onshore_wind,1,1 +electrolyzer,0,1 \ No newline at end of file diff --git a/test/Electrolyzer/Resources/Storage.csv b/test/Electrolyzer/Resources/Storage.csv new file mode 100644 index 0000000000..462abd16f3 --- /dev/null +++ b/test/Electrolyzer/Resources/Storage.csv @@ -0,0 +1,3 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,Qualified_Hydrogen_Supply,Resource_Type,region,cluster +battery,1,1,1,1,0,0,-1,0,19584,22494,4895,5622,0.15,0.15,0,0.92,0.92,1,10,0,battery_mid,NE,0 +battery_for_electrolyzer,1,1,1,1,0,0,-1,0,21542,24743,4895,5622,0.15,0.15,0,0.92,0.92,1,10,1,battery_mid,NE,0 \ No newline at end of file diff --git a/test/Electrolyzer/Resources/Thermal.csv b/test/Electrolyzer/Resources/Thermal.csv new file mode 100644 index 0000000000..6da8fe8786 --- /dev/null +++ b/test/Electrolyzer/Resources/Thermal.csv @@ -0,0 +1,2 @@ +Resource,Zone,Model,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,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,Resource_Type,region,cluster +natural_gas_combined_cycle,1,1,1,1,0,-1,0,65400,10287,3.55,7.43,NG,250,91,2,6,6,0.64,0.64,0.468,natural_gas_fired_combined_cycle,NE,1 \ No newline at end of file diff --git a/test/Electrolyzer/Resources/Vre.csv b/test/Electrolyzer/Resources/Vre.csv new file mode 100644 index 0000000000..c470033ac3 --- /dev/null +++ b/test/Electrolyzer/Resources/Vre.csv @@ -0,0 +1,3 @@ +Resource,Zone,Num_VRE_Bins,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Resource_Type,region,cluster,Qualified_Hydrogen_Supply +solar_pv,1,1,1,1,0,-1,0,85300,18760,0,9.13,solar_photovoltaic,NE,1,1 +onshore_wind,1,1,1,1,0,-1,0,97200,43205,0.1,9.12,onshore_wind_turbine,NE,1,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/CO2_cap.csv b/test/LoadResourceData/test_gen_non_colocated/CO2_cap.csv new file mode 100644 index 0000000000..97ba02e752 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/CO2_cap.csv @@ -0,0 +1,4 @@ +,Network_zones,CO_2_Cap_Zone_1,CO_2_Max_Mtons_1 +NENGREST,z1,1,8.59 +NENG_CT,z2,1,2.31 +NENG_ME,z3,1,1.29 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Capacity_reserve_margin.csv b/test/LoadResourceData/test_gen_non_colocated/Capacity_reserve_margin.csv new file mode 100644 index 0000000000..29700c6bdb --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Capacity_reserve_margin.csv @@ -0,0 +1,4 @@ +Zone_name,Network_zones,CapRes_1 +NENGREST,z1,0.156 +NENG_CT,z2,0.156 +NENG_ME,z3,0.156 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Demand_data.csv b/test/LoadResourceData/test_gen_non_colocated/Demand_data.csv new file mode 100644 index 0000000000..b5166aaedb --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Demand_data.csv @@ -0,0 +1,481 @@ +Voll,Demand_Segment,Cost_of_Demand_Curtailment_per_MW,Max_Demand_Curtailment,$/MWh,Rep_Periods,Timesteps_per_Rep_Period,Sub_Weights,Time_Index,Demand_MW_z1,Demand_MW_z2,Demand_MW_z3 +2000,1,1,1,2000,5,96,2112,1,8953,2557,1220 +,2,0.9,0.04,1800,,,2880,2,8388,2395,1144 +,3,0.55,0.024,1100,,,1632,3,8016,2290,1093 +,4,0.2,0.003,400,,,2016,4,7790,2225,1062 +,,,,,,,96,5,7739,2210,1055 +,,,,,,,,6,7807,2230,1065 +,,,,,,,,7,8107,2316,1105 +,,,,,,,,8,8824,2520,1203 +,,,,,,,,9,9731,2779,1327 +,,,,,,,,10,10541,3011,1437 +,,,,,,,,11,11119,3175,1515 +,,,,,,,,12,11425,3262,1557 +,,,,,,,,13,11542,3296,1574 +,,,,,,,,14,11550,3299,1575 +,,,,,,,,15,11459,3272,1562 +,,,,,,,,16,11195,3198,1526 +,,,,,,,,17,10966,3132,1496 +,,,,,,,,18,10858,3101,1481 +,,,,,,,,19,10692,3053,1458 +,,,,,,,,20,10550,3012,1438 +,,,,,,,,21,10553,3014,1439 +,,,,,,,,22,10177,2907,1387 +,,,,,,,,23,9511,2716,1296 +,,,,,,,,24,8764,2503,1195 +,,,,,,,,25,8114,2317,1106 +,,,,,,,,26,7691,2197,1048 +,,,,,,,,27,7414,2118,1011 +,,,,,,,,28,7254,2072,988 +,,,,,,,,29,7216,2061,984 +,,,,,,,,30,7273,2077,991 +,,,,,,,,31,7399,2113,1008 +,,,,,,,,32,7880,2251,1074 +,,,,,,,,33,8565,2446,1168 +,,,,,,,,34,9180,2622,1251 +,,,,,,,,35,9605,2743,1309 +,,,,,,,,36,9924,2834,1353 +,,,,,,,,37,10117,2889,1379 +,,,,,,,,38,10140,2896,1382 +,,,,,,,,39,10108,2887,1378 +,,,,,,,,40,10060,2873,1372 +,,,,,,,,41,10158,2902,1385 +,,,,,,,,42,10299,2942,1404 +,,,,,,,,43,10241,2924,1396 +,,,,,,,,44,10094,2883,1377 +,,,,,,,,45,10205,2914,1391 +,,,,,,,,46,9904,2828,1350 +,,,,,,,,47,9154,2615,1248 +,,,,,,,,48,8340,2382,1137 +,,,,,,,,49,7697,2199,1049 +,,,,,,,,50,7297,2084,994 +,,,,,,,,51,7070,2019,964 +,,,,,,,,52,6978,1992,951 +,,,,,,,,53,7123,2034,971 +,,,,,,,,54,7552,2158,1029 +,,,,,,,,55,8389,2396,1144 +,,,,,,,,56,9466,2703,1290 +,,,,,,,,57,10292,2939,1403 +,,,,,,,,58,10907,3115,1487 +,,,,,,,,59,11444,3268,1560 +,,,,,,,,60,11836,3381,1614 +,,,,,,,,61,12132,3465,1653 +,,,,,,,,62,12456,3558,1698 +,,,,,,,,63,12667,3618,1727 +,,,,,,,,64,12784,3652,1743 +,,,,,,,,65,12883,3680,1757 +,,,,,,,,66,12812,3658,1747 +,,,,,,,,67,12469,3561,1700 +,,,,,,,,68,12004,3428,1637 +,,,,,,,,69,11893,3397,1622 +,,,,,,,,70,11349,3242,1548 +,,,,,,,,71,10234,2923,1395 +,,,,,,,,72,9136,2609,1246 +,,,,,,,,73,8338,2382,1137 +,,,,,,,,74,7843,2240,1070 +,,,,,,,,75,7549,2156,1029 +,,,,,,,,76,7403,2115,1009 +,,,,,,,,77,7491,2140,1022 +,,,,,,,,78,7905,2257,1077 +,,,,,,,,79,8725,2492,1189 +,,,,,,,,80,9745,2783,1329 +,,,,,,,,81,10474,2992,1427 +,,,,,,,,82,10995,3140,1500 +,,,,,,,,83,11445,3269,1560 +,,,,,,,,84,11722,3348,1598 +,,,,,,,,85,11882,3393,1620 +,,,,,,,,86,12062,3445,1644 +,,,,,,,,87,12064,3446,1644 +,,,,,,,,88,11937,3409,1628 +,,,,,,,,89,11813,3374,1610 +,,,,,,,,90,11683,3337,1593 +,,,,,,,,91,11469,3276,1564 +,,,,,,,,92,11308,3230,1542 +,,,,,,,,93,11382,3251,1552 +,,,,,,,,94,10872,3105,1482 +,,,,,,,,95,9922,2834,1352 +,,,,,,,,96,8995,2569,1226 +,,,,,,,,97,7909,2258,1078 +,,,,,,,,98,7636,2181,1041 +,,,,,,,,99,7537,2153,1028 +,,,,,,,,100,7535,2152,1027 +,,,,,,,,101,7765,2218,1059 +,,,,,,,,102,8486,2424,1157 +,,,,,,,,103,9799,2799,1336 +,,,,,,,,104,10421,2976,1421 +,,,,,,,,105,10462,2988,1426 +,,,,,,,,106,10430,2978,1421 +,,,,,,,,107,10410,2973,1420 +,,,,,,,,108,10320,2948,1407 +,,,,,,,,109,10201,2913,1391 +,,,,,,,,110,10110,2887,1378 +,,,,,,,,111,9996,2855,1363 +,,,,,,,,112,9942,2839,1355 +,,,,,,,,113,10151,2899,1383 +,,,,,,,,114,10934,3123,1491 +,,,,,,,,115,11231,3208,1531 +,,,,,,,,116,10947,3127,1492 +,,,,,,,,117,10521,3004,1434 +,,,,,,,,118,9831,2808,1340 +,,,,,,,,119,8930,2551,1217 +,,,,,,,,120,8132,2322,1109 +,,,,,,,,121,7589,2167,1034 +,,,,,,,,122,7299,2084,995 +,,,,,,,,123,7158,2044,976 +,,,,,,,,124,7144,2040,974 +,,,,,,,,125,7342,2096,1001 +,,,,,,,,126,8068,2304,1100 +,,,,,,,,127,9367,2675,1277 +,,,,,,,,128,10061,2873,1372 +,,,,,,,,129,10198,2912,1390 +,,,,,,,,130,10231,2922,1395 +,,,,,,,,131,10260,2930,1399 +,,,,,,,,132,10215,2917,1392 +,,,,,,,,133,10093,2883,1377 +,,,,,,,,134,10037,2866,1368 +,,,,,,,,135,9922,2834,1352 +,,,,,,,,136,9884,2822,1347 +,,,,,,,,137,10127,2893,1381 +,,,,,,,,138,10851,3099,1479 +,,,,,,,,139,11101,3171,1513 +,,,,,,,,140,10840,3096,1478 +,,,,,,,,141,10398,2969,1418 +,,,,,,,,142,9705,2772,1323 +,,,,,,,,143,8792,2512,1199 +,,,,,,,,144,7960,2273,1085 +,,,,,,,,145,7455,2129,1017 +,,,,,,,,146,7188,2052,980 +,,,,,,,,147,7085,2023,966 +,,,,,,,,148,7134,2037,972 +,,,,,,,,149,7364,2103,1004 +,,,,,,,,150,8128,2321,1108 +,,,,,,,,151,9425,2692,1285 +,,,,,,,,152,10057,2872,1372 +,,,,,,,,153,10138,2895,1382 +,,,,,,,,154,10153,2900,1384 +,,,,,,,,155,10133,2894,1381 +,,,,,,,,156,10080,2879,1374 +,,,,,,,,157,10018,2861,1366 +,,,,,,,,158,10015,2860,1366 +,,,,,,,,159,9941,2839,1355 +,,,,,,,,160,9976,2850,1360 +,,,,,,,,161,10336,2952,1409 +,,,,,,,,162,11007,3144,1501 +,,,,,,,,163,11151,3184,1520 +,,,,,,,,164,10872,3105,1482 +,,,,,,,,165,10440,2982,1423 +,,,,,,,,166,9743,2782,1328 +,,,,,,,,167,8823,2520,1203 +,,,,,,,,168,8004,2286,1091 +,,,,,,,,169,7441,2125,1015 +,,,,,,,,170,7121,2034,971 +,,,,,,,,171,6951,1986,947 +,,,,,,,,172,6924,1978,943 +,,,,,,,,173,7104,2029,968 +,,,,,,,,174,7763,2217,1059 +,,,,,,,,175,8985,2566,1225 +,,,,,,,,176,9713,2774,1324 +,,,,,,,,177,9918,2832,1352 +,,,,,,,,178,9971,2848,1359 +,,,,,,,,179,9985,2852,1362 +,,,,,,,,180,9908,2830,1351 +,,,,,,,,181,9741,2781,1328 +,,,,,,,,182,9622,2748,1312 +,,,,,,,,183,9461,2702,1290 +,,,,,,,,184,9374,2678,1279 +,,,,,,,,185,9539,2724,1300 +,,,,,,,,186,10190,2909,1389 +,,,,,,,,187,10492,2996,1430 +,,,,,,,,188,10231,2922,1395 +,,,,,,,,189,9886,2823,1347 +,,,,,,,,190,9393,2683,1281 +,,,,,,,,191,8703,2486,1187 +,,,,,,,,192,7986,2281,1089 +,,,,,,,,193,8496,2427,1159 +,,,,,,,,194,8193,2340,1116 +,,,,,,,,195,8007,2287,1091 +,,,,,,,,196,7935,2266,1081 +,,,,,,,,197,8002,2286,1091 +,,,,,,,,198,8261,2360,1126 +,,,,,,,,199,8772,2506,1196 +,,,,,,,,200,9381,2679,1279 +,,,,,,,,201,10060,2873,1372 +,,,,,,,,202,10651,3041,1452 +,,,,,,,,203,11015,3146,1502 +,,,,,,,,204,11171,3190,1523 +,,,,,,,,205,11170,3190,1523 +,,,,,,,,206,11028,3149,1504 +,,,,,,,,207,10848,3098,1479 +,,,,,,,,208,10772,3076,1468 +,,,,,,,,209,11183,3193,1525 +,,,,,,,,210,11889,3395,1621 +,,,,,,,,211,11767,3360,1604 +,,,,,,,,212,11359,3244,1549 +,,,,,,,,213,10940,3124,1491 +,,,,,,,,214,10396,2969,1417 +,,,,,,,,215,9729,2778,1327 +,,,,,,,,216,9075,2592,1238 +,,,,,,,,217,8565,2446,1168 +,,,,,,,,218,8285,2366,1130 +,,,,,,,,219,8150,2327,1111 +,,,,,,,,220,8090,2311,1103 +,,,,,,,,221,8144,2326,1111 +,,,,,,,,222,8366,2389,1140 +,,,,,,,,223,8759,2502,1195 +,,,,,,,,224,9189,2624,1253 +,,,,,,,,225,9759,2786,1331 +,,,,,,,,226,10110,2887,1378 +,,,,,,,,227,10249,2927,1397 +,,,,,,,,228,10247,2926,1396 +,,,,,,,,229,10185,2908,1388 +,,,,,,,,230,10108,2887,1378 +,,,,,,,,231,10078,2878,1374 +,,,,,,,,232,10095,2883,1377 +,,,,,,,,233,10566,3017,1441 +,,,,,,,,234,11269,3218,1536 +,,,,,,,,235,11273,3219,1537 +,,,,,,,,236,11067,3161,1509 +,,,,,,,,237,10661,3045,1454 +,,,,,,,,238,9993,2855,1362 +,,,,,,,,239,9247,2641,1260 +,,,,,,,,240,8489,2424,1158 +,,,,,,,,241,7944,2269,1083 +,,,,,,,,242,7667,2189,1045 +,,,,,,,,243,7554,2158,1030 +,,,,,,,,244,7560,2160,1031 +,,,,,,,,245,7795,2226,1063 +,,,,,,,,246,8509,2429,1159 +,,,,,,,,247,9810,2801,1337 +,,,,,,,,248,10540,3010,1436 +,,,,,,,,249,10697,3056,1459 +,,,,,,,,250,10786,3081,1470 +,,,,,,,,251,10870,3105,1482 +,,,,,,,,252,10855,3099,1480 +,,,,,,,,253,10750,3070,1465 +,,,,,,,,254,10677,3049,1456 +,,,,,,,,255,10561,3016,1440 +,,,,,,,,256,10566,3017,1441 +,,,,,,,,257,11048,3155,1506 +,,,,,,,,258,11750,3355,1602 +,,,,,,,,259,11653,3328,1589 +,,,,,,,,260,11283,3222,1539 +,,,,,,,,261,10751,3070,1465 +,,,,,,,,262,9969,2847,1359 +,,,,,,,,263,8988,2566,1225 +,,,,,,,,264,8100,2313,1105 +,,,,,,,,265,7535,2152,1027 +,,,,,,,,266,7177,2050,978 +,,,,,,,,267,7002,1999,954 +,,,,,,,,268,6957,1987,948 +,,,,,,,,269,7155,2043,976 +,,,,,,,,270,7815,2232,1066 +,,,,,,,,271,9128,2606,1245 +,,,,,,,,272,9853,2814,1343 +,,,,,,,,273,9926,2835,1353 +,,,,,,,,274,9885,2823,1347 +,,,,,,,,275,9897,2826,1349 +,,,,,,,,276,9856,2815,1343 +,,,,,,,,277,9742,2782,1328 +,,,,,,,,278,9668,2762,1318 +,,,,,,,,279,9564,2732,1303 +,,,,,,,,280,9572,2733,1305 +,,,,,,,,281,10051,2870,1371 +,,,,,,,,282,10932,3123,1491 +,,,,,,,,283,10942,3125,1492 +,,,,,,,,284,10682,3050,1456 +,,,,,,,,285,10258,2930,1398 +,,,,,,,,286,9557,2730,1302 +,,,,,,,,287,8681,2479,1184 +,,,,,,,,288,7862,2246,1071 +,,,,,,,,289,7141,2039,973 +,,,,,,,,290,6781,1937,924 +,,,,,,,,291,6566,1875,895 +,,,,,,,,292,6498,1856,886 +,,,,,,,,293,6636,1895,904 +,,,,,,,,294,7126,2035,972 +,,,,,,,,295,8188,2339,1115 +,,,,,,,,296,9111,2602,1243 +,,,,,,,,297,9562,2732,1303 +,,,,,,,,298,9841,2811,1342 +,,,,,,,,299,10049,2869,1371 +,,,,,,,,300,10190,2910,1389 +,,,,,,,,301,10212,2917,1392 +,,,,,,,,302,10252,2928,1397 +,,,,,,,,303,10199,2913,1390 +,,,,,,,,304,10149,2899,1383 +,,,,,,,,305,10146,2898,1383 +,,,,,,,,306,10064,2874,1372 +,,,,,,,,307,9882,2822,1347 +,,,,,,,,308,9729,2778,1327 +,,,,,,,,309,9858,2816,1343 +,,,,,,,,310,9575,2734,1305 +,,,,,,,,311,8811,2516,1201 +,,,,,,,,312,7946,2269,1083 +,,,,,,,,313,7289,2081,993 +,,,,,,,,314,6891,1968,940 +,,,,,,,,315,6649,1900,906 +,,,,,,,,316,6527,1864,890 +,,,,,,,,317,6541,1868,892 +,,,,,,,,318,6640,1896,905 +,,,,,,,,319,7019,2005,957 +,,,,,,,,320,7737,2209,1055 +,,,,,,,,321,8583,2451,1169 +,,,,,,,,322,9273,2648,1264 +,,,,,,,,323,9748,2784,1329 +,,,,,,,,324,10054,2871,1371 +,,,,,,,,325,10237,2924,1396 +,,,,,,,,326,10296,2940,1404 +,,,,,,,,327,10335,2952,1409 +,,,,,,,,328,10335,2952,1409 +,,,,,,,,329,10408,2972,1419 +,,,,,,,,330,10408,2972,1419 +,,,,,,,,331,10262,2931,1399 +,,,,,,,,332,10071,2876,1373 +,,,,,,,,333,10168,2904,1386 +,,,,,,,,334,9880,2821,1347 +,,,,,,,,335,9070,2590,1237 +,,,,,,,,336,8197,2340,1117 +,,,,,,,,337,7469,2133,1018 +,,,,,,,,338,7002,1999,954 +,,,,,,,,339,6688,1909,912 +,,,,,,,,340,6498,1856,886 +,,,,,,,,341,6411,1831,874 +,,,,,,,,342,6313,1803,860 +,,,,,,,,343,6535,1866,891 +,,,,,,,,344,7104,2029,968 +,,,,,,,,345,7816,2233,1066 +,,,,,,,,346,8449,2413,1152 +,,,,,,,,347,8856,2529,1207 +,,,,,,,,348,9131,2608,1245 +,,,,,,,,349,9295,2654,1267 +,,,,,,,,350,9322,2662,1271 +,,,,,,,,351,9341,2668,1273 +,,,,,,,,352,9390,2682,1280 +,,,,,,,,353,9479,2707,1292 +,,,,,,,,354,9519,2718,1298 +,,,,,,,,355,9366,2675,1277 +,,,,,,,,356,9188,2624,1252 +,,,,,,,,357,9362,2674,1277 +,,,,,,,,358,9170,2619,1249 +,,,,,,,,359,8537,2438,1164 +,,,,,,,,360,7792,2225,1062 +,,,,,,,,361,7194,2055,981 +,,,,,,,,362,6800,1943,928 +,,,,,,,,363,6579,1879,897 +,,,,,,,,364,6470,1848,882 +,,,,,,,,365,6484,1852,884 +,,,,,,,,366,6545,1870,893 +,,,,,,,,367,6845,1955,933 +,,,,,,,,368,7460,2130,1017 +,,,,,,,,369,8287,2367,1130 +,,,,,,,,370,8975,2563,1224 +,,,,,,,,371,9499,2713,1294 +,,,,,,,,372,9889,2824,1348 +,,,,,,,,373,10168,2904,1386 +,,,,,,,,374,10270,2933,1400 +,,,,,,,,375,10340,2952,1410 +,,,,,,,,376,10418,2976,1421 +,,,,,,,,377,10561,3016,1440 +,,,,,,,,378,10665,3045,1454 +,,,,,,,,379,10545,3012,1437 +,,,,,,,,380,10414,2974,1420 +,,,,,,,,381,10556,3015,1439 +,,,,,,,,382,10084,2880,1375 +,,,,,,,,383,9059,2587,1235 +,,,,,,,,384,8076,2306,1101 +,,,,,,,,385,9966,2846,1358 +,,,,,,,,386,9488,2710,1293 +,,,,,,,,387,9182,2622,1252 +,,,,,,,,388,9021,2576,1230 +,,,,,,,,389,9083,2594,1238 +,,,,,,,,390,9497,2712,1295 +,,,,,,,,391,10491,2996,1430 +,,,,,,,,392,11808,3372,1610 +,,,,,,,,393,12831,3665,1749 +,,,,,,,,394,13653,3899,1862 +,,,,,,,,395,14376,4106,1960 +,,,,,,,,396,14958,4272,2040 +,,,,,,,,397,15407,4400,2100 +,,,,,,,,398,15793,4511,2153 +,,,,,,,,399,15875,4534,2165 +,,,,,,,,400,15907,4543,2169 +,,,,,,,,401,15877,4534,2165 +,,,,,,,,402,15759,4501,2149 +,,,,,,,,403,15392,4396,2099 +,,,,,,,,404,14909,4258,2033 +,,,,,,,,405,14720,4204,2007 +,,,,,,,,406,14135,4037,1927 +,,,,,,,,407,12785,3651,1743 +,,,,,,,,408,11449,3270,1561 +,,,,,,,,409,10503,3000,1432 +,,,,,,,,410,9889,2825,1348 +,,,,,,,,411,9493,2711,1294 +,,,,,,,,412,9245,2640,1261 +,,,,,,,,413,9268,2647,1263 +,,,,,,,,414,9643,2754,1315 +,,,,,,,,415,10684,3051,1457 +,,,,,,,,416,12036,3437,1641 +,,,,,,,,417,13120,3747,1789 +,,,,,,,,418,14080,4021,1919 +,,,,,,,,419,14910,4258,2033 +,,,,,,,,420,15478,4421,2110 +,,,,,,,,421,15870,4533,2164 +,,,,,,,,422,16225,4633,2212 +,,,,,,,,423,16448,4698,2242 +,,,,,,,,424,16617,4746,2266 +,,,,,,,,425,16717,4774,2279 +,,,,,,,,426,16579,4735,2261 +,,,,,,,,427,16199,4626,2209 +,,,,,,,,428,15701,4484,2140 +,,,,,,,,429,15416,4403,2102 +,,,,,,,,430,14854,4243,2025 +,,,,,,,,431,13581,3878,1852 +,,,,,,,,432,12317,3518,1679 +,,,,,,,,433,11428,3264,1558 +,,,,,,,,434,10876,3106,1483 +,,,,,,,,435,10527,3006,1435 +,,,,,,,,436,10316,2946,1407 +,,,,,,,,437,10305,2943,1405 +,,,,,,,,438,10666,3046,1454 +,,,,,,,,439,11610,3316,1583 +,,,,,,,,440,12998,3712,1772 +,,,,,,,,441,13972,3990,1905 +,,,,,,,,442,14756,4214,2012 +,,,,,,,,443,15564,4445,2122 +,,,,,,,,444,16180,4621,2206 +,,,,,,,,445,16567,4732,2259 +,,,,,,,,446,16579,4735,2261 +,,,,,,,,447,16191,4624,2207 +,,,,,,,,448,15434,4408,2105 +,,,,,,,,449,14862,4244,2026 +,,,,,,,,450,14616,4174,1993 +,,,,,,,,451,14244,4068,1942 +,,,,,,,,452,13888,3967,1893 +,,,,,,,,453,13782,3937,1879 +,,,,,,,,454,13334,3808,1818 +,,,,,,,,455,12202,3485,1664 +,,,,,,,,456,11020,3147,1503 +,,,,,,,,457,10113,2888,1378 +,,,,,,,,458,9460,2702,1290 +,,,,,,,,459,9045,2583,1233 +,,,,,,,,460,8791,2511,1198 +,,,,,,,,461,8777,2506,1196 +,,,,,,,,462,9086,2595,1239 +,,,,,,,,463,9840,2810,1342 +,,,,,,,,464,10757,3072,1467 +,,,,,,,,465,11290,3225,1540 +,,,,,,,,466,11661,3331,1590 +,,,,,,,,467,12023,3434,1639 +,,,,,,,,468,12273,3506,1673 +,,,,,,,,469,12425,3549,1694 +,,,,,,,,470,12644,3611,1724 +,,,,,,,,471,12722,3633,1735 +,,,,,,,,472,12820,3661,1748 +,,,,,,,,473,12921,3690,1762 +,,,,,,,,474,12885,3680,1757 +,,,,,,,,475,12514,3574,1707 +,,,,,,,,476,12068,3446,1645 +,,,,,,,,477,11994,3426,1635 +,,,,,,,,478,11578,3306,1579 +,,,,,,,,479,10569,3018,1441 +,,,,,,,,480,9506,2715,1296 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Energy_share_requirement.csv b/test/LoadResourceData/test_gen_non_colocated/Energy_share_requirement.csv new file mode 100644 index 0000000000..5aac67302b --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Energy_share_requirement.csv @@ -0,0 +1,4 @@ +Zone_name,Network_zones,ESR_1,ESR_2 +NENGREST,z1,0.259,0.348 +NENG_CT,z2,0.44,0.44 +NENG_ME,z3,0.776,0.776 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Fuels_data.csv b/test/LoadResourceData/test_gen_non_colocated/Fuels_data.csv new file mode 100644 index 0000000000..7579bca1a6 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Fuels_data.csv @@ -0,0 +1,482 @@ +Time_Index,NENG_CT_NG,NENG_ME_NG,NENGREST_NG,NENGREST_NG_ccs90,west_north_central_coal,new_england_uranium,NENG_CT_NG_ccs90,NENG_ME_ccs90,NENGREST_ccs90,NENG_CT_NG_ccs100,NENGREST_NG_ccs100,NENG_ME_NG_ccs90,NENG_ME_NG_ccs100,NENG_ME_ccs100,NENGREST_ccs100,None,Biomass +0,0.05306,0.05306,0.05306,0.05306,0.09552,0,0.00531,0.00531,0.00531,0,0,0.00531,0,0,0,0,0.095 +1,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +2,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +3,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +4,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +5,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +6,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +7,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +8,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +9,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +10,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +11,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +12,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +13,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +14,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +15,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +16,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +17,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +18,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +19,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +20,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +21,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +22,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +23,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +24,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +25,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +26,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +27,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +28,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +29,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +30,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +31,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +32,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +33,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +34,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +35,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +36,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +37,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +38,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +39,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +40,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +41,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +42,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +43,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +44,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +45,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +46,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +47,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +48,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +49,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +50,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +51,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +52,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +53,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +54,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +55,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +56,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +57,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +58,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +59,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +60,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +61,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +62,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +63,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +64,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +65,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +66,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +67,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +68,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +69,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +70,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +71,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +72,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +73,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +74,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +75,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +76,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +77,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +78,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +79,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +80,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +81,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +82,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +83,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +84,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +85,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +86,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +87,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +88,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +89,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +90,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +91,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +92,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +93,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +94,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +95,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +96,3.14,3.14,3.69,3.69,1.67,0.69,3.14,3.14,3.69,1.71,1.71,3.69,1.71,1.71,2.26,0,8 +97,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +98,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +99,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +100,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +101,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +102,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +103,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +104,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +105,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +106,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +107,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +108,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +109,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +110,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +111,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +112,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +113,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +114,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +115,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +116,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +117,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +118,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +119,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +120,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +121,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +122,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +123,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +124,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +125,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +126,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +127,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +128,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +129,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +130,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +131,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +132,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +133,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +134,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +135,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +136,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +137,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +138,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +139,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +140,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +141,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +142,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +143,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +144,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +145,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +146,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +147,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +148,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +149,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +150,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +151,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +152,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +153,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +154,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +155,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +156,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +157,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +158,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +159,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +160,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +161,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +162,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +163,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +164,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +165,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +166,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +167,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +168,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +169,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +170,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +171,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +172,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +173,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +174,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +175,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +176,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +177,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +178,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +179,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +180,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +181,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +182,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +183,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +184,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +185,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +186,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +187,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +188,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +189,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +190,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +191,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +192,1.89,1.89,2.34,2.34,1.67,0.69,1.89,1.89,2.34,0.46,0.46,2.34,0.46,0.46,0.91,0,8 +193,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +194,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +195,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +196,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +197,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +198,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +199,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +200,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +201,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +202,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +203,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +204,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +205,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +206,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +207,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +208,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +209,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +210,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +211,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +212,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +213,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +214,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +215,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +216,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +217,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +218,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +219,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +220,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +221,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +222,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +223,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +224,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +225,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +226,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +227,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +228,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +229,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +230,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +231,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +232,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +233,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +234,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +235,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +236,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +237,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +238,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +239,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +240,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +241,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +242,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +243,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +244,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +245,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +246,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +247,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +248,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +249,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +250,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +251,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +252,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +253,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +254,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +255,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +256,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +257,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +258,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +259,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +260,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +261,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +262,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +263,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +264,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +265,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +266,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +267,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +268,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +269,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +270,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +271,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +272,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +273,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +274,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +275,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +276,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +277,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +278,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +279,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +280,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +281,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +282,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +283,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +284,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +285,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +286,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +287,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +288,0.74,0.74,1.01,1.01,0.64,0.27,0.74,0.74,1.01,0.19,0.19,1.01,0.19,0.19,0.46,0,8 +289,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +290,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +291,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +292,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +293,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +294,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +295,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +296,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +297,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +298,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +299,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +300,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +301,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +302,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +303,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +304,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +305,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +306,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +307,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +308,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +309,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +310,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +311,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +312,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +313,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +314,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +315,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +316,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +317,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +318,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +319,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +320,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +321,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +322,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +323,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +324,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +325,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +326,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +327,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +328,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +329,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +330,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +331,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +332,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +333,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +334,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +335,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +336,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +337,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +338,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +339,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +340,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +341,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +342,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +343,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +344,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +345,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +346,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +347,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +348,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +349,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +350,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +351,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +352,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +353,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +354,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +355,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +356,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +357,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +358,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +359,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +360,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +361,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +362,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +363,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +364,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +365,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +366,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +367,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +368,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +369,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +370,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +371,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +372,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +373,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +374,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +375,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +376,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +377,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +378,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +379,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +380,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +381,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +382,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +383,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +384,0.26,0.26,0.32,0.32,0.24,0.1,0.26,0.26,0.32,0.06,0.06,0.32,0.06,0.06,0.11,0,8 +385,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +386,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +387,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +388,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +389,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +390,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +391,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +392,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +393,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +394,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +395,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +396,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +397,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +398,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +399,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +400,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +401,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +402,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +403,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +404,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +405,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +406,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +407,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +408,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +409,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +410,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +411,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +412,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +413,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +414,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +415,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +416,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +417,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +418,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +419,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +420,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +421,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +422,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +423,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +424,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +425,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +426,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +427,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +428,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +429,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +430,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +431,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +432,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +433,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +434,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +435,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +436,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +437,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +438,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +439,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +440,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +441,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +442,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +443,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +444,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +445,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +446,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +447,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +448,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +449,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +450,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +451,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +452,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +453,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +454,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +455,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +456,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +457,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +458,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +459,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +460,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +461,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +462,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +463,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +464,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +465,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +466,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +467,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +468,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +469,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +470,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +471,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +472,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +473,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +474,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +475,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +476,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +477,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +478,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +479,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 +480,0.49,0.49,0.54,0.54,0.3,0.12,0.49,0.49,0.54,0.23,0.23,0.54,0.23,0.23,0.29,0,8 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Generators_variability.csv b/test/LoadResourceData/test_gen_non_colocated/Generators_variability.csv new file mode 100644 index 0000000000..2319762f6c --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Generators_variability.csv @@ -0,0 +1,481 @@ +Time_Index,NENGREST_conventional_hydroelectric_1,NENGREST_onshore_wind_turbine_1,NENGREST_small_hydroelectric_1,NENGREST_solar_photovoltaic_1,NENG_CT_conventional_hydroelectric_1,NENG_CT_onshore_wind_turbine_1,NENG_CT_small_hydroelectric_1,NENG_CT_solar_photovoltaic_1,NENG_ME_conventional_hydroelectric_1,NENG_ME_onshore_wind_turbine_1,NENG_ME_small_hydroelectric_1,NENG_ME_solar_photovoltaic_1,NENGREST_landbasedwind_ltrg1_mid_130_1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,NENG_CT_landbasedwind_ltrg1_mid_110_1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,NENG_ME_landbasedwind_ltrg1_mid_110_1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,NENGREST_heat_load_shifting_1,NENG_CT_heat_load_shifting_1,NENG_ME_heat_load_shifting_1 +1,0.1531,0.0153,0.1531,0,0.2065,0.0626,0.2065,0,0.5201,0.2652,0.5201,0,0.065292753,0,0.01332443,0.103481233,0,0.000801047,0.376813948,0,0.547788787,0.547704675,0.54787234 +2,0.1529,0.0096,0.1529,0,0.2064,0.0741,0.2064,0,0.5199,0.2219,0.5199,0,0.052334037,0,0.003825564,0.122626804,0,0.015034294,0.364595324,0,0.51323103,0.513221917,0.513297872 +3,0.1528,0.0024,0.1528,0,0.2063,0.1111,0.2063,0,0.5198,0.2331,0.5198,0,0.040673904,0,0.000506716,0.161907911,0,0.026875654,0.402507216,0,0.490454326,0.490585995,0.490691489 +4,0.1527,0.0013,0.1527,0,0.2062,0.07,0.2062,0,0.5196,0.2218,0.5196,0,0.026909461,0,0,0.099254258,0,0.00276911,0.400019258,0,0.47661914,0.476835202,0.476950355 +5,0.1525,0.0033,0.1525,0,0.2061,0.0733,0.2061,0,0.5194,0.1759,0.5194,0,0.020325907,0,0,0.110299528,0,0.035911258,0.330832094,0,0.473537941,0.473661942,0.473404255 +6,0.1524,0,0.1524,0,0.206,0.0365,0.206,0,0.5193,0.1043,0.5193,0,0.007212133,3.65E-06,0,0.063602038,0,0.050005242,0.222387373,0.013533911,0.477706622,0.477681405,0.477836879 +7,0.1523,0,0.1523,0.0759,0.2059,0.0234,0.2059,0.0696,0.5191,0.0769,0.5191,0.0904,0.008170175,0.184360758,0.027611975,0.040593714,0.125903487,0.047288746,0.17746836,0.332922995,0.496012567,0.496086313,0.496010638 +8,0.1521,0,0.1521,0.1942,0.2058,0,0.2058,0.2154,0.5189,0.0447,0.5189,0.198,5.58E-05,0.392683566,0.051668573,0.011311333,0.391294956,0.030801307,0.131412923,0.529030442,0.539934751,0.539877301,0.540336879 +9,0.152,0,0.152,0.3388,0.2057,0.009,0.2057,0.3492,0.5188,0.0288,0.5188,0.2909,0.000133052,0.587511301,0.133093059,0.013711058,0.605442703,0.037334293,0.095543988,0.561009407,0.595396327,0.595515126,0.595301418 +10,0.1519,0.0041,0.1519,0.4434,0.2056,0.0158,0.2056,0.3816,0.5186,0.0346,0.5186,0.3935,0.002134913,0.685464025,0.234719694,0.018147571,0.618171573,0.107505769,0.07800559,0.567943335,0.644937168,0.645017982,0.645390071 +11,0.1517,0.0059,0.1517,0.5172,0.2055,0.0441,0.2055,0.3968,0.5184,0.0048,0.5184,0.4017,0.00234053,0.616370916,0.156284452,0.042958312,0.599574626,0.191954464,0.025781849,0.650587142,0.680280329,0.680346943,0.680407801 +12,0.1516,0.0191,0.1516,0.4947,0.2054,0.0771,0.2054,0.4368,0.5183,0.0143,0.5183,0.5062,0.008151108,0.622940779,0.242628396,0.073289946,0.644762218,0.31661284,0.048904218,0.58204931,0.699009183,0.698963402,0.699024823 +13,0.1515,0.0301,0.1515,0.4841,0.2053,0,0.2053,0.3948,0.5181,0.0453,0.5181,0.5072,0.006961724,0.623241484,0.406754732,0.020861842,0.588721633,0.293354213,0.083536409,0.61391294,0.706198647,0.706156124,0.706560284 +14,0.1513,0.0559,0.1513,0.4469,0.2052,0.0013,0.2052,0.3538,0.5179,0.0639,0.5179,0.5036,0.009078478,0.570706308,0.316491723,0.008775378,0.517868459,0.227496073,0.086366162,0.632317364,0.706681972,0.706579226,0.707003546 +15,0.1512,0.1051,0.1512,0.3442,0.2051,0.0821,0.2051,0.2453,0.5178,0.08,0.5178,0.3942,0.028089678,0.446025997,0.373291254,0.095363103,0.31654349,0.741438508,0.082046971,0.540764332,0.701123731,0.701078908,0.701241135 +16,0.1511,0.06,0.1511,0.2529,0.205,0.1972,0.205,0.1974,0.5176,0.0747,0.5176,0.3035,0.050746199,0.309538156,0.228688031,0.123457052,0.28948319,0.20311676,0.085125253,0.468044192,0.68499275,0.685001058,0.685283688 +17,0.1509,0.03,0.1509,0.1595,0.2049,0.1352,0.2049,0.0995,0.5174,0.0801,0.5174,0.1983,0.017428808,0.138130486,0.296999008,0.123827852,0.180463612,0.148169905,0.097150236,0.409677744,0.670976317,0.671038714,0.671099291 +18,0.1508,0.0069,0.1508,0.0649,0.2048,0.0565,0.2048,0.0488,0.5173,0.1059,0.5173,0.1037,0.007835865,0.061673351,0.292313695,0.06580779,0.134101063,0.099628538,0.117435888,0.165352792,0.664330595,0.664480643,0.664893617 +19,0.1507,0.0133,0.1507,0.0001,0.2047,0.047,0.2047,0.0018,0.5171,0.087,0.5171,0.0095,0.019914083,0.000127123,0.160788432,0.047395445,0.003018669,0.046998691,0.116367564,0.003531569,0.654120348,0.654114661,0.654255319 +20,0.1505,0.0333,0.1505,0,0.2046,0.1201,0.2046,0,0.5169,0.0334,0.5169,0,0.07540524,0,0.064300358,0.165233195,0,0.111020416,0.091881208,0,0.645480909,0.645441083,0.645833333 +21,0.1504,0.1005,0.1504,0,0.2045,0.203,0.2045,0,0.5168,0.0233,0.5168,0,0.052637972,0,0.231896117,0.236350656,0,0.010772513,0.085106082,0,0.645662156,0.645864185,0.645833333 +22,0.1503,0.0289,0.1503,0,0.2044,0.0707,0.2044,0,0.5166,0.0138,0.5166,0,0.026745947,0,0.126861706,0.070020534,0,0.319542706,0.020752296,0,0.622704205,0.622593611,0.622783688 +23,0.1501,0.0468,0.1501,0,0.2044,0.0188,0.2044,0,0.5164,0.0102,0.5164,0,0.025927531,0,0.152657956,0.013385094,0,0.034334295,0.017476626,0,0.581863219,0.581764333,0.582003546 +24,0.15,0.0744,0.15,0,0.2043,0.007,0.2043,0,0.5163,0.0101,0.5163,0,0.03693749,0,0.1048944,0.013921568,0,0.015131153,0.022096325,0,0.536249396,0.536280939,0.536347518 +25,0.1499,0.0421,0.1499,0,0.2042,0.0236,0.2042,0,0.5161,0.0183,0.5161,0,0.034658864,0,0.08944007,0.031985622,0,0.018787697,0.045628548,0,0.496495892,0.496509414,0.496453901 +26,0.1497,0.0615,0.1497,0,0.2041,0.0726,0.2041,0,0.5159,0.0196,0.5159,0,0.044860251,0,0.215190679,0.086156786,0,0.174672514,0.039953098,0,0.470577574,0.470700233,0.470301418 +27,0.1496,0.0948,0.1496,0,0.204,0.0582,0.204,0,0.5158,0.004,0.5158,0,0.052799776,0,0.411421448,0.097559929,0,0.201319903,0.019691244,0,0.453600773,0.453776179,0.453457447 +28,0.1495,0.1125,0.1495,0,0.2039,0.057,0.2039,0,0.5156,0.0056,0.5156,0,0.067824267,0,0.552116275,0.119017407,0,0.200681686,0.028433105,0,0.443813436,0.443833298,0.443705674 +29,0.1493,0.0796,0.1493,0,0.2038,0.0325,0.2038,0,0.5154,0.0158,0.5154,0,0.050243534,0,0.421252549,0.074381158,0,0.200313881,0.043670997,0,0.441517641,0.441506241,0.441489362 +30,0.1492,0.0155,0.1492,0,0.2037,0.0176,0.2037,0,0.5153,0.034,0.5153,0,0.017221928,0,0.220671773,0.074560687,0,0.16608718,0.074578553,0,0.444961334,0.444891051,0.445035461 +31,0.1491,0.0179,0.1491,0.0332,0.2036,0.019,0.2036,0.0514,0.5151,0.0306,0.5151,0.0403,0.010373427,0.066505551,0.27323544,0.043967955,0.200801462,0.080578797,0.072065502,0.057881795,0.452694538,0.452718426,0.452570922 +32,0.1489,0.0156,0.1489,0.1747,0.2035,0,0.2035,0.2047,0.5149,0.0121,0.5149,0.1587,0.002428631,0.32694453,0.200677544,0.006775284,0.378910482,0.060398959,0.035953183,0.217560619,0.482116965,0.482123969,0.482269504 +33,0.1488,0.0172,0.1488,0.2926,0.2034,0,0.2034,0.3065,0.5148,0.004,0.5148,0.2751,0.002566876,0.448335052,0.304661334,0.00093309,0.458124369,0.142086655,0.011958488,0.302506179,0.524105848,0.524011001,0.524379433 +34,0.1487,0.0241,0.1487,0.3854,0.2033,0,0.2033,0.3813,0.5146,0.015,0.5146,0.3408,0.003611403,0.531844318,0.226176024,0.000243986,0.539205372,0.096455775,0.025423488,0.448341131,0.561684389,0.561667019,0.561613475 +35,0.1485,0.032,0.1485,0.4568,0.2032,0.0101,0.2032,0.4341,0.5144,0.0204,0.5144,0.4201,0.005624436,0.601224899,0.243716806,0.005231365,0.601645231,0.201825649,0.042783734,0.532999754,0.587723538,0.587687751,0.587765957 +36,0.1484,0.0592,0.1484,0.4712,0.2031,0.0091,0.2031,0.441,0.5143,0.0138,0.5143,0.4445,0.012782884,0.621242821,0.156384543,0.013265309,0.61688453,0.206813097,0.038536161,0.556740463,0.607237796,0.607150413,0.607712766 +37,0.1483,0.0442,0.1483,0.4664,0.203,0.0012,0.203,0.4547,0.5141,0.0402,0.5141,0.438,0.017346889,0.61447376,0.074185491,0.015720278,0.650676727,0.138357863,0.079403915,0.538190424,0.61901885,0.61899725,0.619237589 +38,0.1481,0.0466,0.1481,0.5758,0.2029,0.0015,0.2029,0.5636,0.5139,0.0237,0.5139,0.5244,0.013750245,0.772060514,0.022568563,0.011008149,0.749152422,0.028026965,0.055592764,0.577705145,0.62040841,0.620478105,0.620567376 +39,0.148,0.0428,0.148,0.3979,0.2028,0.0023,0.2028,0.3996,0.5138,0.008,0.5138,0.4006,0.017138852,0.55417341,0.051447712,0.004268894,0.60099411,0,0.026709341,0.438920111,0.618475109,0.618574149,0.618351064 +40,0.1479,0.0379,0.1479,0.3435,0.2027,0,0.2027,0.3548,0.5136,0.0195,0.5136,0.348,0.014250422,0.512610257,0.035391368,0.000125251,0.582904279,0,0.036932766,0.385501057,0.615514741,0.615612439,0.615691489 +41,0.1477,0.0353,0.1477,0.2533,0.2026,0,0.2026,0.247,0.5134,0.0102,0.5134,0.2132,0.006402459,0.416100174,0.032427806,0.00053452,0.548698306,0.006775393,0.01535768,0.347824365,0.621495892,0.621747409,0.621897163 +42,0.1476,0.0441,0.1476,0.1416,0.2025,0,0.2025,0.1639,0.5133,0.0523,0.5133,0.1217,0.010903064,0.284536719,0.047829591,9.45E-05,0.431092978,0,0.047571044,0.2250451,0.630135331,0.630209435,0.630319149 +43,0.1475,0.0356,0.1475,0.037,0.2024,0,0.2024,0.0612,0.5131,0.064,0.5131,0.03,0.014553991,0.129970193,0.041080989,5.81E-05,0.285668582,0.000612566,0.077780418,0.057166476,0.626570807,0.626613074,0.62677305 +44,0.1473,0.0365,0.1473,0,0.2023,0,0.2023,0,0.5129,0.0507,0.5129,0,0.007713901,0,0.126314491,0.004635042,0,0.207087189,0.107284553,0,0.61762929,0.617727946,0.617907801 +45,0.1472,0.0129,0.1472,0,0.2022,0.0042,0.2022,0,0.5128,0.0535,0.5128,0,0.0058565,0,0.08200334,0.014006531,0,0.149906278,0.101532109,0,0.624395843,0.624497567,0.624556738 +46,0.1471,0.0357,0.1471,0,0.2021,0,0.2021,0,0.5126,0.0478,0.5126,0,0.022701541,0,0.111567095,0.017007494,0,0.040073823,0.086758919,0,0.605969067,0.605881109,0.605939716 +47,0.1469,0.0129,0.1469,0,0.202,0.0425,0.202,0,0.5124,0.0701,0.5124,0,0.020868678,0,0.083027355,0.061066702,0,0.016895551,0.152101591,0,0.560053166,0.560186165,0.560283688 +48,0.1468,0.004,0.1468,0,0.2019,0,0.2019,0,0.5123,0.0002,0.5123,0,8.66E-05,0,0.075362757,1.13E-05,0,0.080960475,0.000741268,0,0.510270662,0.510260207,0.510638298 +49,0.1467,0.0124,0.1467,0,0.2018,0.008,0.2018,0,0.5121,0.0677,0.5121,0,0.004744857,0,0.097618878,0.030100621,0,0.003839006,0.177268758,0,0.470940068,0.470911783,0.470744681 +50,0.1465,0.0114,0.1465,0,0.2018,0,0.2018,0,0.5119,0.0677,0.5119,0,0.002719705,0,0.225894779,0.019255322,0,0.029375395,0.197093874,0,0.446471726,0.446583457,0.446365248 +51,0.1464,0.002,0.1464,0,0.2017,0,0.2017,0,0.5118,0,0.5118,0,0.00010409,0,0.188784003,0.000033714,0,0.096268073,0.002023064,0,0.432576124,0.432621113,0.432624114 +52,0.1463,0.0056,0.1463,0,0.2016,0,0.2016,0,0.5116,0.0839,0.5116,0,0.006765652,0,0.20851934,0.005068693,0,0.042369112,0.214174733,0,0.426957467,0.426909245,0.426861702 +53,0.1461,0.0038,0.1461,0,0.2015,0,0.2015,0,0.5114,0.0612,0.5114,0,0.008018229,0,0.088911235,0.002749863,0,0.024419634,0.226037741,0,0.435838569,0.435794373,0.43572695 +54,0.146,0.0193,0.146,0.0006,0.2014,0.0045,0.2014,0,0.5113,0.0584,0.5113,0.0024,0.008957319,0.000240326,0.021473989,0.012861684,0,0.037380628,0.230653733,0.060233783,0.462119381,0.462238206,0.461879433 +55,0.1459,0.0081,0.1459,0.0743,0.2013,0,0.2013,0.1022,0.5111,0.0583,0.5111,0.0537,0.003660081,0.48990795,0,0.00046645,0.446400285,0,0.232023567,0.501660347,0.513291445,0.513433467,0.513297872 +56,0.1457,0.0012,0.1457,0.2155,0.2012,0,0.2012,0.2321,0.5109,0.0368,0.5109,0.1997,0.000613676,0.674091935,0.001419886,0,0.604865134,0,0.097109132,0.748290956,0.579144514,0.579225725,0.579343972 +57,0.1456,0,0.1456,0.3828,0.2011,0,0.2011,0.4014,0.5108,0.0202,0.5108,0.3758,0.00011487,0.816774249,0.001373258,0,0.744025827,0,0.042923428,0.832321525,0.629712422,0.629786334,0.629875887 +58,0.1455,0,0.1455,0.5145,0.201,0,0.201,0.5211,0.5106,0.0073,0.5106,0.5148,4.48E-06,0.876774967,0,0,0.799411118,0,0.013343919,0.872836471,0.667351378,0.667442352,0.667553192 +59,0.1453,0.0003,0.1453,0.6114,0.2009,0,0.2009,0.6106,0.5104,0.0077,0.5104,0.6151,0.000885552,0.891837001,0,0.000243949,0.836563349,0,0.006216149,0.894069552,0.700217496,0.700232706,0.70035461 +60,0.1452,0.0086,0.1452,0.6382,0.2008,0,0.2008,0.6374,0.5103,0.0061,0.5103,0.638,0.002429813,0.898506522,0,0.002871435,0.854514718,0,0.00786264,0.897833586,0.724262929,0.724349482,0.72429078 +61,0.1451,0.057,0.1451,0.6077,0.2007,0.0048,0.2007,0.6107,0.5101,0.0007,0.5101,0.5879,0.023022356,0.853422284,0.062501624,0.012987654,0.825059712,0.007581153,0.00919114,0.827724934,0.742266796,0.742331288,0.742464539 +62,0.1449,0.0394,0.1449,0.6255,0.2006,0.0393,0.2006,0.635,0.5099,0.0079,0.5099,0.6294,0.00606587,0.879794538,0.012417493,0.026892424,0.87692523,0.012503928,0.018922158,0.861542642,0.762143548,0.762217051,0.762411348 +63,0.1448,0.0549,0.1448,0.584,0.2005,0.0072,0.2005,0.6011,0.5098,0.0364,0.5098,0.5815,0.022713542,0.805331826,0.002281686,0.019087818,0.871758938,0.016798168,0.044150669,0.8518942,0.775012083,0.775121642,0.775265957 +64,0.1447,0.096,0.1447,0.4761,0.2004,0.0092,0.2004,0.5084,0.5096,0.0748,0.5096,0.4653,0.05813643,0.797433376,0.002159626,0.025647491,0.843530536,0,0.110258639,0.783786058,0.782201547,0.782314364,0.782801418 +65,0.1445,0.1858,0.1445,0.3395,0.2003,0.0145,0.2003,0.3821,0.5094,0.1496,0.5094,0.3204,0.115620852,0.763544381,0.000863487,0.0305652,0.802785814,0,0.255804598,0.741935492,0.788303528,0.788449334,0.78856383 +66,0.1444,0.1698,0.1444,0.168,0.2002,0.0265,0.2002,0.2194,0.5093,0.1903,0.5093,0.1469,0.111024849,0.681785107,0.002296204,0.054737903,0.697857201,0,0.229029477,0.62893939,0.783893185,0.783795219,0.784131206 +67,0.1443,0.1601,0.1443,0.0586,0.2001,0.0522,0.2001,0.0915,0.5091,0.2388,0.5091,0.0512,0.150710434,0.431306392,0.013319594,0.093738839,0.447823852,0,0.428741276,0.354201168,0.762928951,0.762851703,0.763297872 +68,0.1441,0.0452,0.1441,0,0.2,0.0607,0.2,0,0.5089,0.0047,0.5089,0,0.022967177,0,0.008663013,0.056786023,0,0.129303664,0.002968501,0,0.734473175,0.734503914,0.734485816 +69,0.144,0.0247,0.144,0,0.1999,0.0491,0.1999,0,0.5088,0.0089,0.5088,0,0.01622523,0,0.041881327,0.046015333,0,0.190009683,0.001798895,0,0.727706622,0.727734292,0.727836879 +70,0.1439,0.1295,0.1439,0,0.1998,0.1059,0.1998,0,0.5086,0.1427,0.5086,0,0.151130855,0,0.105958581,0.12655279,0,0.016958378,0.25828594,0,0.694417593,0.694520838,0.694592199 +71,0.1437,0.0856,0.1437,0,0.1997,0.0402,0.1997,0,0.5084,0.1061,0.5084,0,0.105697438,0,0.115842223,0.056476753,0,0.019089006,0.239348143,0,0.626147898,0.626189973,0.626329787 +72,0.1436,0.1058,0.1436,0,0.1996,0.0376,0.1996,0,0.5083,0.105,0.5083,0,0.157893077,0,0.062783882,0.049083069,0,0.008295288,0.210482791,0,0.558965684,0.558916861,0.558953901 +73,0.1435,0.0894,0.1435,0,0.1995,0.061,0.1995,0,0.5081,0.1314,0.5081,0,0.121989697,0,0.071597286,0.05584668,0,0.022780106,0.229862139,0,0.510149831,0.510260207,0.510638298 +74,0.1433,0.069,0.1433,0,0.1994,0.0494,0.1994,0,0.5079,0.1381,0.5079,0,0.086370833,0,0.062523902,0.06284716,0,0.021092933,0.244065851,0,0.479881585,0.479796911,0.480053192 +75,0.1432,0.0421,0.1432,0,0.1993,0.0302,0.1993,0,0.5078,0.1364,0.5078,0,0.055079069,0,0.063589878,0.047760159,0,0.080997132,0.288150966,0,0.461938134,0.461815105,0.461879433 +76,0.1431,0.0573,0.1431,0,0.1992,0.0391,0.1992,0,0.5076,0.1338,0.5076,0,0.081626386,0,0.047314398,0.055187594,0,0.056404978,0.307797253,0,0.452936201,0.452929977,0.453014184 +77,0.1429,0.0501,0.1429,0,0.1992,0.0121,0.1992,0,0.5074,0.1155,0.5074,0,0.085024893,0,0.006884417,0.032553703,0,0.007557592,0.297397137,0,0.45837361,0.458430294,0.458333333 +78,0.1428,0.0417,0.1428,0,0.1991,0.0237,0.1991,0,0.5073,0.0896,0.5073,0.0071,0.067074545,0.005700601,0.000363545,0.038894404,0,0,0.225422978,0.147618383,0.483687772,0.483816374,0.483599291 +79,0.1427,0.0406,0.1427,0.078,0.199,0,0.199,0.0684,0.5071,0.0597,0.5071,0.0689,0.08501289,0.297614873,0.003372176,0.015080798,0.204011172,0,0.1872949,0.534214973,0.53383277,0.533742331,0.533687943 +80,0.1425,0.0059,0.1425,0.1981,0.1989,0,0.1989,0.2084,0.5069,0.0498,0.5069,0.21,0.009664503,0.51723206,0.050063659,0.003296833,0.489236116,0.088157862,0.117109321,0.7558195,0.596302562,0.596361329,0.596631206 +81,0.1424,0.0017,0.1424,0.3184,0.1988,0.0077,0.1988,0.3294,0.5068,0.0327,0.5068,0.3768,0.005428661,0.595659673,0.12678875,0.008800596,0.613827229,0.135825932,0.060178876,0.837224662,0.640889319,0.640786969,0.640957447 +82,0.1423,0.008,0.1423,0.4295,0.1987,0.0126,0.1987,0.4428,0.5066,0.069,0.5066,0.5119,0.011832649,0.703888178,0.240806937,0.01555074,0.675319314,0.163486391,0.13457121,0.857886374,0.672728371,0.672731119,0.67287234 +83,0.1421,0.0323,0.1421,0.5029,0.1986,0.0695,0.1986,0.5,0.5064,0.0836,0.5064,0.6086,0.039269716,0.782315075,0.332892299,0.071022578,0.715933025,0.263014138,0.08217147,0.87527132,0.700277912,0.700444256,0.70035461 +84,0.142,0.063,0.142,0.5136,0.1985,0.0924,0.1985,0.4964,0.5063,0.1778,0.5063,0.6377,0.070254892,0.815530896,0.517871022,0.084203228,0.695111036,0.201307342,0.174124837,0.86837852,0.717194297,0.71736831,0.717641844 +85,0.1419,0.0794,0.1419,0.5054,0.1984,0.0943,0.1984,0.4662,0.5061,0.2392,0.5061,0.6434,0.103844516,0.750395536,0.559189439,0.107111625,0.681191266,0.179222241,0.183451787,0.819962442,0.727042049,0.72709964,0.727393617 +86,0.1417,0.0706,0.1417,0.4654,0.1983,0.0868,0.1983,0.4529,0.5059,0.3126,0.5059,0.6483,0.079616793,0.68530792,0.523985148,0.086829864,0.624842763,0.173315704,0.232415155,0.772307813,0.738037699,0.738100275,0.738475177 +87,0.1416,0.0599,0.1416,0.3574,0.1982,0.0255,0.1982,0.3612,0.5058,0.3643,0.5058,0.5868,0.070643783,0.55040139,0.401850343,0.03636989,0.511814416,0.034700003,0.308341652,0.666417122,0.738158531,0.738311826,0.738475177 +88,0.1415,0.0968,0.1415,0.2901,0.1981,0.0176,0.1981,0.2925,0.5056,0.412,0.5056,0.4739,0.083732612,0.40975219,0.542008042,0.018455712,0.451868504,0.034059163,0.528127968,0.62745589,0.730364911,0.730484451,0.730496454 +89,0.1413,0.0743,0.1413,0.1878,0.198,0.0073,0.198,0.2143,0.5054,0.3848,0.5054,0.3168,0.087176055,0.293204784,0.532647371,0.007658152,0.378451794,0.125816226,0.453720301,0.677511513,0.722812953,0.722868627,0.722960993 +90,0.1412,0.0477,0.1412,0.0768,0.1979,0.0093,0.1979,0.1306,0.5053,0.4928,0.5053,0.1457,0.108627126,0.156168059,0.153137118,0.014025279,0.312374681,0.460122794,0.6170789,0.324155748,0.71477767,0.714829702,0.71498227 +91,0.1411,0.0963,0.1411,0.005,0.1978,0,0.1978,0.038,0.5051,0.3902,0.5051,0.049,0.12583442,0.008683183,0.104900651,0.000561502,0.174553752,0.238817543,0.429712802,0.062938877,0.701727888,0.70171356,0.70212766 +92,0.1409,0.0976,0.1409,0,0.1977,0,0.1977,0,0.5049,0.2855,0.5049,0,0.048357926,0,0.093298458,0.000253321,0,0.152920947,0.496359825,0,0.691880135,0.69198223,0.691932624 +93,0.1408,0.0271,0.1408,0,0.1976,0,0.1976,0,0.5048,0.3208,0.5048,0,0.010211765,0,0.141792655,0.001588382,0,0.052405503,0.484939694,0,0.69641131,0.696424794,0.696365248 +94,0.1407,0.0104,0.1407,0,0.1975,0,0.1975,0,0.5046,0.2125,0.5046,0,0.008361611,0,0.09790536,0.002117226,0,0.091463879,0.323495626,0,0.665236829,0.665326846,0.665336879 +95,0.1405,0.0152,0.1405,0,0.1974,0,0.1974,0,0.5044,0.1682,0.5044,0,0.011755069,0,0.032598659,0.00792115,0,0,0.311031073,0,0.607116965,0.607150413,0.607269504 +96,0.1404,0.0172,0.1404,0,0.1973,0,0.1973,0,0.5043,0.1147,0.5043,0,0.028959088,0,0.000126581,0.011633929,0,0,0.229129672,0,0.55038666,0.550454834,0.550531915 +97,0.3353,0.2342,0.3353,0,0.2783,0.3328,0.2783,0,0.5992,0.0464,0.5992,0,0.340543807,0,0.951961637,0.396313548,0,1,0.057745896,0,0.483929435,0.483816374,0.484042553 +98,0.3353,0.3291,0.3353,0,0.2783,0.3303,0.2783,0,0.5992,0.0914,0.5992,0,0.47736305,0,0.723744631,0.344732225,0,0.674463391,0.210174009,0,0.467254712,0.467315422,0.467198582 +99,0.3353,0.2905,0.3353,0,0.2783,0.1811,0.2783,0,0.5992,0.1582,0.5992,0,0.471031487,0,0.453945518,0.159885496,0,0.496303141,0.332458019,0,0.461152731,0.461180453,0.46143617 +100,0.3353,0.2069,0.3353,0,0.2783,0.1306,0.2783,0,0.5992,0.2336,0.5992,0,0.398436338,0,0.282089144,0.091254428,0,0.341608644,0.458970815,0,0.4610319,0.460968902,0.460992908 +101,0.3353,0.0684,0.3353,0,0.2783,0.0311,0.2783,0,0.5992,0.2549,0.5992,0,0.180473939,0,0.185217351,0.020236973,0,0.244839817,0.531448722,0,0.475169164,0.475142797,0.475177305 +102,0.3353,0.0999,0.3353,0,0.2783,0.0115,0.2783,0,0.5992,0.201,0.5992,0,0.206174016,0,0.17999509,0.006590917,0,0.162442416,0.458401471,0,0.51921218,0.519145335,0.519060284 +103,0.3353,0.073,0.3353,0,0.2783,0.0632,0.2783,0,0.5992,0.1695,0.5992,0,0.15341562,0,0.067971632,0.037877314,0,0.120555505,0.364987403,0,0.599565007,0.599746139,0.599734043 +104,0.3353,0.0613,0.3353,0.0062,0.2783,0.0268,0.2783,0,0.5992,0.1387,0.5992,0.0255,0.118538402,0.014192468,0.091725685,0.012939813,0,0.042171728,0.266541362,0.186134338,0.637566457,0.637613709,0.63785461 +105,0.3353,0.0495,0.3353,0.2119,0.2783,0.0074,0.2783,0.1959,0.5992,0.0777,0.5992,0.2837,0.102821335,0.339985967,0.011115281,0.004708333,0.310952276,0,0.106331267,0.525537193,0.640103915,0.640152317,0.640070922 +106,0.3353,0.0178,0.3353,0.3608,0.2783,0.0016,0.2783,0.3224,0.5992,0.0498,0.5992,0.4763,0.04687928,0.518666685,0.00168068,0.001076122,0.499693483,0.040739004,0.101931214,0.698534489,0.638110198,0.63803681,0.638297872 +107,0.3353,0.0057,0.3353,0.4334,0.2783,0,0.2783,0.4463,0.5992,0.0473,0.5992,0.6271,0.006887558,0.595648408,0.001408386,0.000328184,0.61341995,0.010822514,0.086632088,0.757857621,0.636901885,0.636979057,0.637411348 +108,0.3353,0.0008,0.3353,0.496,0.2783,0,0.2783,0.4513,0.5992,0.0389,0.5992,0.695,0.000104528,0.705536485,0.002444054,0,0.633169591,0.021018326,0.079875037,0.754530132,0.63140406,0.631478739,0.631648936 +109,0.3353,0,0.3353,0.4844,0.2783,0.0391,0.2783,0.4641,0.5992,0.0446,0.5992,0.6414,0.002018983,0.70180279,7.22E-05,0.037956238,0.632471561,0.002988744,0.105751939,0.828321338,0.624154181,0.624074466,0.624556738 +110,0.3353,0.0121,0.3353,0.5786,0.2783,0.0153,0.2783,0.6105,0.5992,0.0419,0.5992,0.7025,0.007209733,0.767341495,0.003048972,0.009417345,0.881190777,0,0.092641033,0.958709717,0.61859594,0.618574149,0.618794326 +111,0.3353,0.0395,0.3353,0.4078,0.2783,0.0327,0.2783,0.4214,0.5992,0.0602,0.5992,0.5202,0.052469421,0.575399458,0.01162939,0.034468301,0.621795774,0,0.103165664,0.839419246,0.611648139,0.611804527,0.611702128 +112,0.3353,0.036,0.3353,0.3444,0.2783,0.0099,0.2783,0.3846,0.5992,0.1176,0.5992,0.4177,0.053068925,0.546132028,0.089984819,0.022223983,0.65506351,0,0.173716277,0.687713146,0.608264862,0.608208166,0.608156028 +113,0.3353,0.0415,0.3353,0.2249,0.2783,0.0157,0.2783,0.2885,0.5992,0.1981,0.5992,0.2377,0.108836338,0.444707453,0.091163978,0.027305046,0.528101385,0,0.252788484,0.41919291,0.621072982,0.621112757,0.621010638 +114,0.3353,0.0367,0.3353,0.0122,0.2783,0.0208,0.2783,0.0337,0.5992,0.3519,0.5992,0,0.08615572,0.038480602,0.180393949,0.035222165,0.136732534,0,0.463289082,0,0.6689826,0.668923207,0.668882979 +115,0.3353,0.0721,0.3353,0,0.2783,0.061,0.2783,0,0.5992,0.3697,0.5992,0,0.135538846,0,0.139605165,0.088056445,0,0,0.527615786,0,0.687167714,0.687116564,0.6875 +116,0.3353,0.0678,0.3353,0,0.2783,0.0396,0.2783,0,0.5992,0.3254,0.5992,0,0.043199215,0,0.53976059,0.088940099,0,0.039158117,0.453964204,0,0.669768004,0.66976941,0.669769504 +117,0.3353,0.0755,0.3353,0,0.2783,0.0236,0.2783,0,0.5992,0.2045,0.5992,0,0.042970236,0,0.480655342,0.059755467,0,0.19911781,0.269749194,0,0.643728855,0.643748678,0.643617021 +118,0.3353,0.0509,0.3353,0,0.2783,0.0371,0.2783,0,0.5992,0.132,0.5992,0,0.03064315,0,0.166967809,0.054738641,0,0.22547619,0.177533671,0,0.601558724,0.601650095,0.601507092 +119,0.3353,0.0503,0.3353,0,0.2783,0.0521,0.2783,0,0.5992,0.1442,0.5992,0,0.049356826,0,0.098843873,0.097993136,0,0.278927267,0.170501396,0,0.546399227,0.546435371,0.546542553 +120,0.3353,0.0611,0.3353,0,0.2783,0.0031,0.2783,0,0.5992,0.156,0.5992,0,0.051604521,0,0.161583245,0.029563505,0,0.389920473,0.147218838,0,0.497583374,0.497567167,0.497783688 +121,0.3353,0.0394,0.3353,0,0.2783,0.0468,0.2783,0,0.5992,0.171,0.5992,0,0.029222723,0,0.162525415,0.075474158,0,0.313165724,0.194382474,0,0.464354761,0.464353713,0.464095745 +122,0.3353,0.0533,0.3353,0,0.2783,0.1899,0.2783,0,0.5992,0.1461,0.5992,0,0.047840923,0,0.095295847,0.153759107,0,0.067757592,0.157280669,0,0.446592557,0.446583457,0.446808511 +123,0.3353,0.0469,0.3353,0,0.2783,0.0194,0.2783,0,0.5992,0.095,0.5992,0,0.065937504,0,0.011147552,0.051554609,0,0.096064925,0.103672326,0,0.437953117,0.437909879,0.437943262 +124,0.3353,0.0487,0.3353,0,0.2783,0,0.2783,0,0.5992,0.0664,0.5992,0,0.070105247,0,0.006252729,0.002158957,0,0,0.06112304,0,0.437046883,0.437063677,0.437056738 +125,0.3353,0.0454,0.3353,0,0.2783,0,0.2783,0,0.5992,0.0515,0.5992,0,0.045880351,0,0,0.000149522,0,0,0.040833768,0,0.44919043,0.449122065,0.449468085 +126,0.3353,0.0353,0.3353,0,0.2783,0,0.2783,0,0.5992,0.0399,0.5992,0,0.017604046,0,0,0.000263594,0,0,0.059951149,0,0.49359594,0.493759255,0.493794326 +127,0.3353,0.0146,0.3353,0,0.2783,0.0149,0.2783,0,0.5992,0.0214,0.5992,0,0.00301992,0,0.006769722,0.008667981,0,0.012625917,0.042005826,0,0.573102948,0.573090755,0.573138298 +128,0.3353,0.0174,0.3353,0,0.2783,0,0.2783,0,0.5992,0.0106,0.5992,0,0.00625662,0,0.014876311,0.005263689,0,0.080059424,0.03722835,0.013479548,0.615575157,0.615612439,0.615691489 +129,0.3353,0.0093,0.3353,0.142,0.2783,0,0.2783,0.2009,0.5992,0.0042,0.5992,0.202,0.003951265,0.349179506,0.015524953,0.000401821,0.291373551,0.061198957,0.022719318,0.434636295,0.623972934,0.623862915,0.624113475 +130,0.3353,0.0033,0.3353,0.2896,0.2783,0,0.2783,0.3639,0.5992,0.0012,0.5992,0.3615,0.004615302,0.514957786,0.010969135,0.003379712,0.534627438,0,0.007916736,0.58468765,0.625966651,0.625978422,0.626329787 +131,0.3353,0.0006,0.3353,0.3832,0.2783,0,0.2783,0.4752,0.5992,0.001,0.5992,0.4506,0.005063584,0.558726788,0.017523618,0.003152695,0.647850692,0,0.001069679,0.608341456,0.62777912,0.627670827,0.628102837 +132,0.3353,0.0013,0.3353,0.4001,0.2783,0,0.2783,0.4461,0.5992,0,0.5992,0.4365,0.004127369,0.582769394,0.025185499,0.003216317,0.642627358,0,0.000370599,0.611747623,0.625,0.624920669,0.625 +133,0.3353,0,0.3353,0.3979,0.2783,0,0.2783,0.4694,0.5992,0.0025,0.5992,0.4185,0.000329846,0.602562308,0.015069776,0.002190562,0.662625432,0.008151309,0.004105932,0.595377803,0.617568874,0.617727946,0.617907801 +134,0.3353,0.001,0.3353,0.3975,0.2783,0,0.2783,0.4491,0.5992,0.008,0.5992,0.3787,0,0.633594096,0.013273727,0.001052633,0.672993779,0.101724088,0.022061357,0.557721913,0.614064766,0.614131585,0.61391844 +135,0.3353,0.002,0.3353,0.4351,0.2783,0,0.2783,0.4923,0.5992,0.0235,0.5992,0.4175,2.31E-06,0.671257675,0.071118698,0.000637823,0.694713473,0.156142414,0.046326287,0.546066582,0.607116965,0.607150413,0.607269504 +136,0.3353,0.0013,0.3353,0.3602,0.2783,0,0.2783,0.4357,0.5992,0.0588,0.5992,0.3264,0.002965278,0.59887594,0.156938747,0.000722208,0.595216334,0.201426715,0.066430353,0.508017361,0.604760754,0.604823355,0.605053192 +137,0.3353,0.0048,0.3353,0.2179,0.2783,0,0.2783,0.2689,0.5992,0.087,0.5992,0.1731,0.003663415,0.423196405,0.235061526,0.000460288,0.453348726,0.132251054,0.084686771,0.337374985,0.619623006,0.619631902,0.620124114 +138,0.3353,0.0028,0.3353,0.0012,0.2783,0.0074,0.2783,0.0291,0.5992,0.1081,0.5992,0,0.010761268,0.028205086,0.254560232,0.013701504,0.093099222,0.135036409,0.077363201,0,0.663907685,0.663845991,0.664007092 +139,0.3353,0.0037,0.3353,0,0.2783,0.0422,0.2783,0,0.5992,0.1147,0.5992,0,0.046665151,0,0.242791414,0.072233729,0,0.298220694,0.106213242,0,0.679253262,0.67928919,0.679521277 +140,0.3353,0.0048,0.3353,0,0.2783,0.0909,0.2783,0,0.5992,0.1005,0.5992,0,0.055832595,0,0.059668772,0.136343688,0,0.192917556,0.113991655,0,0.663303528,0.66342289,0.66356383 +141,0.3353,0.0225,0.3353,0,0.2783,0.1208,0.2783,0,0.5992,0.0787,0.5992,0,0.075337775,0,0.047003094,0.177106515,0,0.439277738,0.097335458,0,0.636176897,0.636132854,0.636524823 +142,0.3353,0.0683,0.3353,0,0.2783,0.1202,0.2783,0,0.5992,0.0675,0.5992,0,0.082746476,0,0.020546136,0.168459937,0,0.275989294,0.125470683,0,0.59382552,0.593822721,0.593971631 +143,0.3353,0.1146,0.3353,0,0.2783,0.157,0.2783,0,0.5992,0.044,0.5992,0,0.11460375,0,0.008724602,0.209471554,0,0.3150644,0.085176602,0,0.537941034,0.537973345,0.538120567 +144,0.3353,0.0572,0.3353,0,0.2783,0.1428,0.2783,0,0.5992,0.0343,0.5992,0,0.048893597,0,0.028796984,0.157406271,0,0.28583324,0.054507189,0,0.487010633,0.486989634,0.48714539 +145,0.3353,0.0689,0.3353,0,0.2783,0.079,0.2783,0,0.5992,0.0523,0.5992,0,0.081243813,0,0.071472019,0.109008879,0,0.205130637,0.071306929,0,0.456077815,0.456103237,0.456117021 +146,0.3353,0.0757,0.3353,0,0.2783,0.0466,0.2783,0,0.5992,0.0731,0.5992,0,0.078676045,0,0.132356674,0.083080128,0,0.280035615,0.112381756,0,0.439765587,0.439813835,0.439716312 +147,0.3353,0.0796,0.3353,0,0.2783,0.0425,0.2783,0,0.5992,0.0643,0.5992,0,0.106914848,0,0.117482096,0.079231285,0,0.12364766,0.10742867,0,0.433482359,0.433467315,0.433510638 +148,0.3353,0.0756,0.3353,0,0.2783,0.04,0.2783,0,0.5992,0.0536,0.5992,0,0.084026337,0,0.143809155,0.075666659,0,0.096530899,0.098277256,0,0.436503142,0.436640575,0.436613475 +149,0.3353,0.0874,0.3353,0,0.2783,0.038,0.2783,0,0.5992,0.0417,0.5992,0,0.107747838,0,0.181571946,0.072163574,0,0.170542941,0.071277931,0,0.450519575,0.450602919,0.450797872 +150,0.3353,0.0652,0.3353,0,0.2783,0.0076,0.2783,0,0.5992,0.0264,0.5992,0,0.08012899,0,0.148158878,0.022536812,0,0.160324097,0.040680472,0,0.497341711,0.497355617,0.497340426 +151,0.3353,0.0332,0.3353,0,0.2783,0,0.2783,0,0.5992,0.0182,0.5992,0,0.042060122,0,0.060637206,0.011356694,0,0.052404717,0.03396637,0,0.576667472,0.576687117,0.576684397 +152,0.3353,0.008,0.3353,0,0.2783,0.0185,0.2783,0,0.5992,0.0106,0.5992,0,0.011661833,0,0.026185583,0.014108179,0,0.030558117,0.023133211,0,0.615333494,0.615400889,0.615691489 +153,0.3353,0.0002,0.3353,0.251,0.2783,0,0.2783,0.2135,0.5992,0.0287,0.5992,0.2287,0.004216762,0.421669364,0.011390129,0.001075404,0.366246313,0.046053402,0.042276233,0.52107513,0.620287579,0.620266554,0.620567376 +154,0.3353,0,0.3353,0.398,0.2783,0,0.2783,0.3957,0.5992,0.0187,0.5992,0.36,0.000107081,0.624025583,0.003211733,0.000291988,0.569521368,0,0.020247368,0.771772504,0.621193813,0.621324307,0.621453901 +155,0.3353,0,0.3353,0.5777,0.2783,0.0231,0.2783,0.4714,0.5992,0.0105,0.5992,0.6638,0,0.830872178,0,0.035424843,0.608862341,0,0.01060041,0.999690712,0.6199855,0.620055003,0.620124114 +156,0.3353,0,0.3353,0.5222,0.2783,0,0.2783,0.446,0.5992,0.006,0.5992,0.5803,0,0.712612987,0,0.002315169,0.535365284,0,0.004428415,0.885320664,0.616723055,0.616670193,0.616578014 +157,0.3353,0.0026,0.3353,0.4391,0.2783,0,0.2783,0.4033,0.5992,0.0027,0.5992,0.585,0.000138794,0.62785691,0,0.005570313,0.554500699,0,0.000169873,0.855731487,0.612977284,0.612862281,0.613031915 +158,0.3353,0.0162,0.3353,0.4041,0.2783,0.0075,0.2783,0.4023,0.5992,0.0064,0.5992,0.5582,0.012443317,0.572152019,0.003454699,0.017332878,0.555582404,0.024717279,0.000638945,0.805173159,0.612796037,0.612862281,0.613031915 +159,0.3353,0.0418,0.3353,0.3776,0.2783,0,0.2783,0.3253,0.5992,0.0056,0.5992,0.5298,0.007533296,0.520351827,0.084458515,0.007419934,0.458313495,0.068899736,0.002452825,0.724157333,0.608264862,0.608208166,0.608156028 +160,0.3353,0.0384,0.3353,0.2577,0.2783,0.0017,0.2783,0.2138,0.5992,0.0174,0.5992,0.3695,0.008783901,0.413797915,0.062754475,0.010369309,0.320449889,0.05394372,0.006953084,0.616675735,0.61037941,0.610535223,0.61037234 +161,0.3353,0.0812,0.3353,0.0836,0.2783,0.0403,0.2783,0.0846,0.5992,0.047,0.5992,0.2124,0.079519555,0.127957165,0.054840323,0.058607429,0.130032092,0.009626178,0.041584462,0.378108114,0.632370711,0.632536493,0.632535461 +162,0.3353,0.0687,0.3353,0,0.2783,0.0755,0.2783,0,0.5992,0.1222,0.5992,0,0.095078185,0,0.080111712,0.087329604,0,0.038936131,0.145138115,0,0.673513775,0.673577322,0.673758865 +163,0.3353,0.0442,0.3353,0,0.2783,0.0938,0.2783,0,0.5992,0.2036,0.5992,0,0.06459564,0,0.048527647,0.108412832,0,0,0.304443628,0,0.682274045,0.682250899,0.682624114 +164,0.3353,0.0257,0.3353,0,0.2783,0.0371,0.2783,0,0.5992,0.2666,0.5992,0,0.023319216,0,0.000567935,0.059193447,0,0,0.515886605,0,0.665236829,0.665326846,0.665336879 +165,0.3353,0.0221,0.3353,0,0.2783,0.1563,0.2783,0,0.5992,0.1433,0.5992,0,0.039155327,0,0,0.180636972,0,0.006618849,0.31086725,0,0.63877477,0.638671462,0.639184397 +166,0.3353,0.013,0.3353,0,0.2783,0.1412,0.2783,0,0.5992,0.1562,0.5992,0,0.012497285,0,0.001954996,0.158648685,0,0.003782199,0.356954515,0,0.59618173,0.596149778,0.596187943 +167,0.3353,0.0373,0.3353,0,0.2783,0.1121,0.2783,0,0.5992,0.2046,0.5992,0,0.043758962,0,0.030432951,0.131980807,0,0.036523037,0.426760942,0,0.539874335,0.539877301,0.540336879 +168,0.3353,0.0718,0.3353,0,0.2783,0.1073,0.2783,0,0.5992,0.2062,0.5992,0,0.061800312,0,0.072916091,0.147166222,0,0.21237959,0.395702064,0,0.489729338,0.489739793,0.489804965 +169,0.3353,0.0873,0.3353,0,0.2783,0.1343,0.2783,0,0.5992,0.2341,0.5992,0,0.068880677,0,0.066637524,0.185943991,0,0.194197387,0.399948031,0,0.455231996,0.455257034,0.455673759 +170,0.3353,0.1224,0.3353,0,0.2783,0.2056,0.2783,0,0.5992,0.2438,0.5992,0,0.107841097,0,0.026773676,0.290738761,0,0.059220687,0.395727009,0,0.435717738,0.435794373,0.43572695 +171,0.3353,0.1607,0.3353,0,0.2783,0.3046,0.2783,0,0.5992,0.2289,0.5992,0,0.15782921,0,0.032786746,0.385691464,0,0.07835184,0.310579389,0,0.425326245,0.42542839,0.425531915 +172,0.3353,0.1622,0.3353,0,0.2783,0.2478,0.2783,0,0.5992,0.158,0.5992,0,0.197893649,0,0.054544114,0.310194105,0,0.007161519,0.257609129,0,0.423634606,0.423735985,0.423758865 +173,0.3353,0.1664,0.3353,0,0.2783,0.2256,0.2783,0,0.5992,0.1621,0.5992,0,0.178165928,0,0.036942624,0.216431111,0,0,0.207180604,0,0.434630256,0.434736619,0.434840426 +174,0.3353,0.1754,0.3353,0,0.2783,0.0788,0.2783,0,0.5992,0.1834,0.5992,0,0.149377078,0,0.067278497,0.106815361,0,0.037470419,0.228798643,0,0.475048333,0.474931246,0.475177305 +175,0.3353,0.1451,0.3353,0,0.2783,0.0726,0.2783,0,0.5992,0.1712,0.5992,0,0.108588591,0,0.1455497,0.095053226,0,0.053612571,0.231774837,0,0.549722088,0.549820182,0.550088653 +176,0.3353,0.1264,0.3353,0,0.2783,0.0824,0.2783,0,0.5992,0.1808,0.5992,0,0.122287504,0,0.162636712,0.113910697,0,0,0.23295176,0,0.594308845,0.594245822,0.594414894 +177,0.3353,0.1382,0.3353,0.1131,0.2783,0.0955,0.2783,0.1509,0.5992,0.1763,0.5992,0.1502,0.138602197,0.273250043,0.3493644,0.10015589,0.314969033,0.009180104,0.147349984,0.222592801,0.606875302,0.606727311,0.607269504 +178,0.3353,0.0699,0.3353,0.3099,0.2783,0.0936,0.2783,0.3546,0.5992,0.1801,0.5992,0.2967,0.083995506,0.55990386,0.288135141,0.103539191,0.597141385,0.00792932,0.160080031,0.441352129,0.610077332,0.610112122,0.609929078 +179,0.3353,0.0934,0.3353,0.4462,0.2783,0.3774,0.2783,0.5514,0.5992,0.1307,0.5992,0.432,0.106427036,0.712844014,0.124160439,0.299305052,0.822447777,0,0.11868111,0.557519674,0.610923151,0.610958325,0.611258865 +180,0.3353,0.1113,0.3353,0.4971,0.2783,0.3909,0.2783,0.5828,0.5992,0.1105,0.5992,0.4349,0.146284461,0.745839894,0.083927713,0.340600729,0.788909257,0.07988482,0.10592211,0.721094608,0.606271146,0.60630421,0.606382979 +181,0.3353,0.1494,0.3353,0.5491,0.2783,0.4286,0.2783,0.5721,0.5992,0.1267,0.5992,0.4613,0.227206588,0.795065403,0.120059073,0.361115009,0.798173189,0.304969668,0.173086584,0.709834695,0.596060899,0.595938227,0.596187943 +182,0.3353,0.2268,0.3353,0.5788,0.2783,0.2547,0.2783,0.5944,0.5992,0.1659,0.5992,0.4651,0.325680584,0.81992197,0.215272263,0.223857179,0.829602122,0.281709433,0.261818111,0.696449697,0.588750604,0.588745505,0.588652482 +183,0.3353,0.1818,0.3353,0.5935,0.2783,0.4355,0.2783,0.5804,0.5992,0.1349,0.5992,0.4731,0.357862145,0.852696896,0.297833979,0.398809969,0.793542385,0.31898874,0.257945806,0.723677814,0.578842436,0.578802623,0.578900709 +184,0.3353,0.204,0.3353,0.4606,0.2783,0.266,0.2783,0.5083,0.5992,0.0952,0.5992,0.368,0.316188395,0.782290101,0.313831151,0.283590913,0.765566111,0.347253174,0.15048115,0.647790313,0.573525858,0.573725407,0.574024823 +185,0.3353,0.169,0.3353,0.2861,0.2783,0.4383,0.2783,0.3311,0.5992,0.1087,0.5992,0.1997,0.236047566,0.577710569,0.164843708,0.414026558,0.572428346,0.326350272,0.198451817,0.454336852,0.583615273,0.583668289,0.583776596 +186,0.3353,0.1969,0.3353,0.04,0.2783,0.246,0.2783,0.0839,0.5992,0.1683,0.5992,0,0.219240755,0.181716263,0.234954879,0.259087026,0.26353401,0.994571567,0.338978112,0.016318373,0.623489609,0.623439814,0.623670213 +187,0.3353,0.1917,0.3353,0,0.2783,0.0964,0.2783,0,0.5992,0.1426,0.5992,0,0.144899592,0,0.460470438,0.147896081,0,1,0.272070825,0,0.641916385,0.641844722,0.641843972 +188,0.3353,0.2034,0.3353,0,0.2783,0.1788,0.2783,0,0.5992,0.2315,0.5992,0,0.218267709,0,0.595855176,0.210983038,0,0.999340415,0.247287497,0,0.625966651,0.625978422,0.626329787 +189,0.3353,0.2599,0.3353,0,0.2783,0.2117,0.2783,0,0.5992,0.1944,0.5992,0,0.231125847,0,0.991824508,0.242717549,0,0.991057634,0.294774503,0,0.604881585,0.604823355,0.605053192 +190,0.3353,0.2623,0.3353,0,0.2783,0.2868,0.2783,0,0.5992,0.1141,0.5992,0,0.257896334,0,0.977468252,0.375778914,0,0.82260704,0.182252407,0,0.574734171,0.574783161,0.574911348 +191,0.3353,0.3366,0.3353,0,0.2783,0.1927,0.2783,0,0.5992,0.1659,0.5992,0,0.315684408,0,0.876997232,0.238841474,0,0.364857614,0.261173576,0,0.532503625,0.532684578,0.532801418 +192,0.3353,0.275,0.3353,0,0.2783,0.1699,0.2783,0,0.5992,0.2065,0.5992,0,0.219144747,0,0.755017519,0.237392083,0,0.300655782,0.340680182,0,0.488641856,0.488682039,0.48891844 +193,0.3901,0.1119,0.3901,0,0.3178,0.0099,0.3178,0,0.6624,0.4984,0.6624,0,0.120503485,0,0.109031886,0.036232617,0,0.03731833,0.832992256,0,0.519816336,0.519779987,0.519946809 +194,0.3901,0.0794,0.3901,0,0.3178,0.0128,0.3178,0,0.6624,0.3099,0.6624,0,0.057855781,0,0.073038578,0.042845599,0,0.037343461,0.606036305,0,0.501268729,0.501163529,0.501329787 +195,0.3901,0.0495,0.3901,0,0.3178,0,0.3178,0,0.6624,0.2899,0.6624,0,0.053303592,0,0.043719381,0.014324972,0,0.037011258,0.531005204,0,0.489910585,0.489951343,0.489804965 +196,0.3901,0.0548,0.3901,0,0.3178,0.006,0.3178,0,0.6624,0.2222,0.6624,0,0.026825195,0,0.077305451,0.036265694,0,0.040064924,0.471726447,0,0.485500242,0.485508779,0.48537234 +197,0.3901,0.0331,0.3901,0,0.3178,0.0342,0.3178,0,0.6624,0.1204,0.6624,0,0.012255549,0,0.077560157,0.060173765,0,0.078937434,0.274086297,0,0.489608507,0.489739793,0.489361702 +198,0.3901,0.0221,0.3901,0,0.3178,0.0501,0.3178,0,0.6624,0.0692,0.6624,0,0.01008457,0,0.091319233,0.063513756,0,0.155076712,0.189517856,0,0.505437409,0.505606093,0.505762411 +199,0.3901,0.006,0.3901,0,0.3178,0.0687,0.3178,0,0.6624,0.0688,0.6624,0,0.004177272,0,0.089516357,0.089355812,0,0.307229847,0.148454115,0,0.536732721,0.536704041,0.53679078 +200,0.3901,0.0002,0.3901,0,0.3178,0.0216,0.3178,0,0.6624,0.0359,0.6624,0,0.000670298,0,0.15081726,0.039953135,0,0.434677243,0.070686765,0,0.574009183,0.573936958,0.574024823 +201,0.3901,0.0113,0.3901,0.0338,0.3178,0.0774,0.3178,0.0205,0.6624,0.0199,0.6624,0.0959,0.004628616,0.053709865,0.419818997,0.109133691,0.018420931,0.63019973,0.045996632,0.078395985,0.615514741,0.615612439,0.615691489 +202,0.3901,0.0389,0.3901,0.1381,0.3178,0.0679,0.3178,0.109,0.6624,0.0099,0.6624,0.2689,0.014147854,0.192283168,0.760859013,0.120777823,0.144316495,1,0.032252479,0.304617047,0.651703722,0.651576053,0.652039007 +203,0.3901,0.0663,0.3901,0.2102,0.3178,0.1044,0.3178,0.1812,0.6624,0.0005,0.6624,0.3327,0.026046477,0.303351104,0.987595797,0.186181381,0.250372738,1,0.013428211,0.385682464,0.6739971,0.674000423,0.674202128 +204,0.3901,0.1178,0.3901,0.2284,0.3178,0.1631,0.3178,0.211,0.6624,0.0001,0.6624,0.4238,0.034658346,0.341895819,0.995827317,0.265076429,0.288601548,1,0.008641397,0.480376244,0.683482359,0.683520203,0.683510638 +205,0.3901,0.211,0.3901,0.2429,0.3178,0.1642,0.3178,0.2366,0.6624,0.0004,0.6624,0.4288,0.057607554,0.354768723,1,0.312806368,0.341011763,1,0.010712845,0.51420486,0.683421943,0.683520203,0.683510638 +206,0.3901,0.2425,0.3901,0.2345,0.3178,0.1714,0.3178,0.243,0.6624,0.0062,0.6624,0.4197,0.067297198,0.399075508,1,0.278471023,0.351463229,1,0.027082564,0.57644248,0.674782504,0.674846626,0.675088653 +207,0.3901,0.3825,0.3901,0.196,0.3178,0.2593,0.3178,0.2089,0.6624,0.0067,0.6624,0.4012,0.107579127,0.358603001,1,0.363505065,0.30205816,1,0.024522964,0.57705462,0.663726438,0.66363444,0.664007092 +208,0.3901,0.4625,0.3901,0.1088,0.3178,0.2369,0.3178,0.1287,0.6624,0.009,0.6624,0.3214,0.174622506,0.226323158,1,0.372528017,0.172121823,1,0.032747258,0.471946716,0.659074432,0.658980326,0.659131206 +209,0.3901,0.461,0.3901,0.0095,0.3178,0.2483,0.3178,0.0039,0.6624,0.03,0.6624,0.1402,0.179446012,0.054913122,1,0.404273152,0.00736948,1,0.069884099,0.234559417,0.684267762,0.684154855,0.684397163 +210,0.3901,0.467,0.3901,0,0.3178,0.1636,0.3178,0,0.6624,0.0663,0.6624,0,0.211576432,0,1,0.251190245,0,1,0.12557368,0,0.727464959,0.727522742,0.727836879 +211,0.3901,0.4127,0.3901,0,0.3178,0.1287,0.3178,0,0.6624,0.0988,0.6624,0,0.199717,0,1,0.21637997,0,1,0.168479249,0,0.719913001,0.719906918,0.719858156 +212,0.3901,0.3576,0.3901,0,0.3178,0.0478,0.3178,0,0.6624,0.1317,0.6624,0,0.184474587,0,1,0.114194989,0,1,0.229773998,0,0.69502175,0.694943939,0.695035461 +213,0.3901,0.3696,0.3901,0,0.3178,0.0305,0.3178,0,0.6624,0.2168,0.6624,0,0.152843535,0,1,0.113586158,0,1,0.363334149,0,0.669345094,0.669346308,0.669326241 +214,0.3901,0.3535,0.3901,0,0.3178,0.0737,0.3178,0,0.6624,0.2153,0.6624,0,0.184802026,0,1,0.171696171,0,1,0.443449885,0,0.636116481,0.636132854,0.63608156 +215,0.3901,0.2283,0.3901,0,0.3178,0.0515,0.3178,0,0.6624,0.2561,0.6624,0,0.067875408,0,1,0.133330569,0,1,0.476634681,0,0.595275495,0.595303575,0.595301418 +216,0.3901,0.3722,0.3901,0,0.3178,0.143,0.3178,0,0.6624,0.2426,0.6624,0,0.189117149,0,1,0.269549131,0,1,0.365168929,0,0.555280329,0.555320499,0.555407801 +217,0.3901,0.4256,0.3901,0,0.3178,0.1096,0.3178,0,0.6624,0.29,0.6624,0,0.160570681,0,1,0.252668351,0,1,0.431885868,0,0.524105848,0.524011001,0.524379433 +218,0.3901,0.2923,0.3901,0,0.3178,0.1097,0.3178,0,0.6624,0.2866,0.6624,0,0.109217495,0,1,0.23330684,0,1,0.45360738,0,0.506887385,0.506875397,0.507092199 +219,0.3901,0.1925,0.3901,0,0.3178,0.1475,0.3178,0,0.6624,0.3085,0.6624,0,0.106418639,0,1,0.256683856,0,1,0.496107429,0,0.49861044,0.498624921,0.498670213 +220,0.3901,0.209,0.3901,0,0.3178,0.1033,0.3178,0,0.6624,0.1829,0.6624,0,0.104868852,0,1,0.22366941,0,1,0.349143177,0,0.4949855,0.495028559,0.495124114 +221,0.3901,0.2068,0.3901,0,0.3178,0.0775,0.3178,0,0.6624,0.1996,0.6624,0,0.107377291,0,1,0.177673981,0,1,0.314562023,0,0.498247946,0.498201819,0.49822695 +222,0.3901,0.2067,0.3901,0,0.3178,0.0869,0.3178,0,0.6624,0.2681,0.6624,0,0.115992263,0,1,0.193624631,0,1,0.419279188,0,0.511841469,0.511741062,0.511968085 +223,0.3901,0.1446,0.3901,0,0.3178,0.1155,0.3178,0,0.6624,0.2711,0.6624,0,0.077996135,0,0.964708924,0.223193497,0,0.981933296,0.457887143,0,0.535947318,0.535857838,0.535904255 +224,0.3901,0.1159,0.3901,0,0.3178,0.1327,0.3178,0,0.6624,0.2358,0.6624,0,0.064411894,0,0.859868348,0.196382344,0,0.693728566,0.423730552,0,0.56222813,0.562301671,0.5625 +225,0.3901,0.1664,0.3901,0.2175,0.3178,0.1563,0.3178,0.2258,0.6624,0.2464,0.6624,0.1997,0.098334894,0.404655278,1,0.263617486,0.401312143,0.990814686,0.459070087,0.440780342,0.597087965,0.596995981,0.597074468 +226,0.3901,0.1006,0.3901,0.4081,0.3178,0.0155,0.3178,0.4428,0.6624,0.074,0.6624,0.4197,0.050663918,0.679540217,0.956516743,0.062423609,0.68576932,0.840303779,0.139345616,0.720973849,0.61859594,0.618574149,0.618794326 +227,0.3901,0.0487,0.3901,0.5613,0.3178,0,0.3178,0.5538,0.6624,0.0244,0.6624,0.5556,0.009933624,0.833085418,0.73586607,0.004825974,0.769854367,0.615973592,0.047255825,0.860327959,0.627054132,0.627036175,0.627216312 +228,0.3901,0.0376,0.3901,0.5322,0.3178,0.0065,0.3178,0.6097,0.6624,0.0085,0.6624,0.6247,0.009950076,0.780405462,0.693450689,0.01372513,0.854087532,0.560471773,0.025679257,0.950450242,0.626933301,0.626824625,0.62677305 +229,0.3901,0.0262,0.3901,0.5679,0.3178,0.0269,0.3178,0.6059,0.6624,0.008,0.6624,0.5837,0.004341427,0.86239183,0.582497954,0.031877942,0.823680341,0.259051323,0.029347412,0.900006175,0.62318753,0.623228263,0.62322695 +230,0.3901,0.0174,0.3901,0.5247,0.3178,0.0101,0.3178,0.5139,0.6624,0.0026,0.6624,0.5606,0.002885568,0.785116851,0.586721659,0.01491439,0.66516012,0.155594766,0.015595263,0.772518218,0.618475109,0.618574149,0.618351064 +231,0.3901,0.004,0.3901,0.4229,0.3178,0,0.3178,0.4232,0.6624,0.0138,0.6624,0.4619,0.002349213,0.637138128,0.539751291,0.00301314,0.593340457,0.220113367,0.033706091,0.706330597,0.616602223,0.616670193,0.616578014 +232,0.3901,0.0203,0.3901,0.3114,0.3178,0.0687,0.3178,0.363,0.6624,0.0296,0.6624,0.3161,0.025419714,0.509942234,0.364952117,0.071307533,0.568504334,0.21019949,0.067622408,0.520428538,0.617689705,0.617727946,0.617907801 +233,0.3901,0.0341,0.3901,0.109,0.3178,0.0981,0.3178,0.1806,0.6624,0.0849,0.6624,0.1138,0.058809057,0.282011777,0.308240444,0.104445308,0.306727648,0.153333008,0.17168577,0.25320223,0.646507975,0.646498837,0.646719858 +234,0.3901,0.0718,0.3901,0,0.3178,0.1428,0.3178,0,0.6624,0.2129,0.6624,0,0.140464246,0,0.24397713,0.178153262,0,0.130465731,0.429364324,0,0.689523925,0.689655172,0.689716312 +235,0.3901,0.1569,0.3901,0,0.3178,0.1886,0.3178,0,0.6624,0.3401,0.6624,0,0.338828415,0,0.160066932,0.295357883,0,0.063504189,0.642948687,0,0.689765587,0.689655172,0.689716312 +236,0.3901,0.1861,0.3901,0,0.3178,0.0455,0.3178,0,0.6624,0.3487,0.6624,0,0.403424114,0,0.206176162,0.114362463,0,0.125471741,0.678964555,0,0.677138714,0.677173683,0.677304965 +237,0.3901,0.1315,0.3901,0,0.3178,0.1484,0.3178,0,0.6624,0.3144,0.6624,0,0.382502914,0,0.229102075,0.231769681,0,0.195113361,0.532498121,0,0.652307878,0.652422255,0.65248227 +238,0.3901,0.1463,0.3901,0,0.3178,0.1426,0.3178,0,0.6624,0.386,0.6624,0,0.389041603,0,0.192775786,0.207796887,0,0.23948063,0.677794218,0,0.611466892,0.611592977,0.611702128 +239,0.3901,0.1285,0.3901,0,0.3178,0.1579,0.3178,0,0.6624,0.3647,0.6624,0,0.3803505,0,0.183335111,0.258410692,0,0.296441138,0.691874802,0,0.565732238,0.565686482,0.565602837 +240,0.3901,0.1069,0.3901,0,0.3178,0.1479,0.3178,0,0.6624,0.3353,0.6624,0,0.289933115,0,0.137859643,0.243095577,0,0.177257091,0.699401915,0,0.519393427,0.519356886,0.519503546 +241,0.3901,0.136,0.3901,0,0.3178,0.1693,0.3178,0,0.6624,0.3501,0.6624,0,0.315427333,0,0.084138379,0.274803817,0,0.148058385,0.718370974,0,0.486104398,0.486143431,0.486258865 +242,0.3901,0.1734,0.3901,0,0.3178,0.3006,0.3178,0,0.6624,0.3708,0.6624,0,0.413454682,0,0.213552058,0.433208376,0,0.109275922,0.700574815,0,0.469127598,0.469007827,0.468971631 +243,0.3901,0.1678,0.3901,0,0.3178,0.225,0.3178,0,0.6624,0.4118,0.6624,0,0.379670739,0,0.323283702,0.332038134,0,0.164830625,0.762360513,0,0.462240213,0.462238206,0.462322695 +244,0.3901,0.1565,0.3901,0,0.3178,0.2714,0.3178,0,0.6624,0.4473,0.6624,0,0.372016937,0,0.204186902,0.389134824,0,0.16150026,0.870534658,0,0.462602707,0.462661307,0.462765957 +245,0.3901,0.2762,0.3901,0,0.3178,0.3333,0.3178,0,0.6624,0.3735,0.6624,0,0.533230722,0,0.269460559,0.501860023,0,0.388051033,0.829701543,0,0.476921218,0.476835202,0.476950355 +246,0.3901,0.2992,0.3901,0,0.3178,0.2885,0.3178,0,0.6624,0.2641,0.6624,0,0.559709728,0,0.451925099,0.384678572,0,0.629839301,0.694203913,0,0.52060174,0.52062619,0.520833333 +247,0.3901,0.2145,0.3901,0,0.3178,0.1549,0.3178,0,0.6624,0.2381,0.6624,0,0.392397463,0,0.559710622,0.246748239,0,0.879858136,0.636787057,0,0.60022958,0.600169241,0.600620567 +248,0.3901,0.1484,0.3901,0,0.3178,0.0467,0.3178,0,0.6624,0.3623,0.6624,0,0.246410802,0,0.492618084,0.088999912,0,0.755990088,0.785576642,0,0.644876752,0.644806431,0.644946809 +249,0.3901,0.1407,0.3901,0.109,0.3178,0.0434,0.3178,0.1325,0.6624,0.3712,0.6624,0.1791,0.206950858,0.241210476,0.387375861,0.105640069,0.158013523,0.616167545,0.778141201,0.290976077,0.654543258,0.654749313,0.654698582 +250,0.3901,0.1245,0.3901,0.3235,0.3178,0.1744,0.3178,0.3044,0.6624,0.2961,0.6624,0.347,0.196065307,0.465222418,0.370672822,0.298146397,0.286300719,0.798244238,0.645206273,0.564218819,0.659980667,0.660038079,0.660460993 +251,0.3901,0.096,0.3901,0.3563,0.3178,0.0759,0.3178,0.3022,0.6624,0.2881,0.6624,0.4265,0.145341292,0.506199479,0.520363033,0.163800865,0.416147053,0.622791171,0.589344859,0.639770865,0.665115998,0.665115295,0.665336879 +252,0.3901,0.1166,0.3901,0.3784,0.3178,0.04,0.3178,0.4041,0.6624,0.1706,0.6624,0.3306,0.101395622,0.566710174,0.6584903,0.116298989,0.398162782,0.375435352,0.39519158,0.500069618,0.664149348,0.664057542,0.664450355 +253,0.3901,0.1044,0.3901,0.3346,0.3178,0.0816,0.3178,0.2614,0.6624,0.1698,0.6624,0.3834,0.086076871,0.433936596,0.579901576,0.220251709,0.365732104,0.236882731,0.385340095,0.380476654,0.657805703,0.657711022,0.658244681 +254,0.3901,0.2326,0.3901,0.2609,0.3178,0.1738,0.3178,0.2753,0.6624,0.1955,0.6624,0.2391,0.191405714,0.379352331,0.621176779,0.398240268,0.328983128,0.509845316,0.443078369,0.370686889,0.653214113,0.653268458,0.653368794 +255,0.3901,0.1805,0.3901,0.2381,0.3178,0.119,0.3178,0.1934,0.6624,0.3019,0.6624,0.2144,0.160513535,0.35280031,0.898490191,0.356975317,0.275281847,1,0.535503388,0.306617081,0.646205897,0.646287286,0.646276596 +256,0.3901,0.1597,0.3901,0.1307,0.3178,0.0979,0.3178,0.2166,0.6624,0.34,0.6624,0.0893,0.124228887,0.193886682,0.937764466,0.289872289,0.259687007,0.885226965,0.605705738,0.111397766,0.646507975,0.646498837,0.646719858 +257,0.3901,0.1483,0.3901,0.0266,0.3178,0.044,0.3178,0.0182,0.6624,0.4315,0.6624,0.0033,0.087120563,0.102469601,0.934247494,0.197817445,0.019180359,0.833556056,0.741962791,0,0.675990817,0.675904379,0.675975177 +258,0.3901,0.1784,0.3901,0,0.3178,0.1346,0.3178,0,0.6624,0.5071,0.6624,0,0.147102803,0,0.984330416,0.392012477,0,0.997785449,0.791446865,0,0.718946351,0.718849164,0.719414894 +259,0.3901,0.2497,0.3901,0,0.3178,0.2903,0.3178,0,0.6624,0.3505,0.6624,0,0.212808251,0,1,0.556888342,0,1,0.657197833,0,0.712965201,0.712925746,0.71320922 +260,0.3901,0.1879,0.3901,0,0.3178,0.4373,0.3178,0,0.6624,0.473,0.6624,0,0.202867627,0,1,0.619576454,0,1,0.732649088,0,0.690369744,0.690289824,0.690602837 +261,0.3901,0.3712,0.3901,0,0.3178,0.6209,0.3178,0,0.6624,0.438,0.6624,0,0.416482389,0,1,0.701148629,0,1,0.644316316,0,0.657866119,0.657711022,0.658244681 +262,0.3901,0.3268,0.3901,0,0.3178,0.3763,0.3178,0,0.6624,0.4976,0.6624,0,0.427124679,0,1,0.519282937,0,1,0.766804516,0,0.609956501,0.609900571,0.609929078 +263,0.3901,0.4796,0.3901,0,0.3178,0.3135,0.3178,0,0.6624,0.5917,0.6624,0,0.539691865,0,1,0.442616165,0,1,0.82458663,0,0.549963751,0.549820182,0.550088653 +264,0.3901,0.4519,0.3901,0,0.3178,0.487,0.3178,0,0.6624,0.5097,0.6624,0,0.260195226,0,1,0.4927454,0,1,0.786526084,0,0.495589657,0.495663211,0.496010638 +265,0.3901,0.5536,0.3901,0,0.3178,0.64,0.3178,0,0.6624,0.4291,0.6624,0,0.216492117,0,1,0.625216007,0,1,0.639156282,0,0.4610319,0.460968902,0.460992908 +266,0.3901,0.5864,0.3901,0,0.3178,0.6807,0.3178,0,0.6624,0.3328,0.6624,0,0.214984268,0,1,0.661117792,0,1,0.516517222,0,0.439101015,0.439179183,0.438829787 +267,0.3901,0.6644,0.3901,0,0.3178,0.5887,0.3178,0,0.6624,0.3521,0.6624,0,0.352891088,0,1,0.618125498,0,1,0.549280345,0,0.428407443,0.428390099,0.428191489 +268,0.3901,0.7506,0.3901,0,0.3178,0.2931,0.3178,0,0.6624,0.2979,0.6624,0,0.442067266,0,1,0.368625552,0,1,0.507342696,0,0.425688739,0.425639941,0.425975177 +269,0.3901,0.5882,0.3901,0,0.3178,0.1128,0.3178,0,0.6624,0.3221,0.6624,0,0.371072769,0,1,0.214122772,0,1,0.475048184,0,0.437771871,0.437909879,0.437943262 +270,0.3901,0.5954,0.3901,0,0.3178,0.0639,0.3178,0,0.6624,0.3993,0.6624,0,0.399746835,0,1,0.143449828,0,1,0.624332368,0,0.478189947,0.478104506,0.478280142 +271,0.3901,0.3232,0.3901,0,0.3178,0.0905,0.3178,0,0.6624,0.393,0.6624,0,0.24813661,0,1,0.136806577,0,1,0.72884357,0,0.558482359,0.558493759,0.558953901 +272,0.3901,0.297,0.3901,0,0.3178,0.1307,0.3178,0,0.6624,0.2839,0.6624,0,0.282510638,0,1,0.165759057,0,1,0.579252362,0,0.602887869,0.602707849,0.603280142 +273,0.3899,0.1826,0.3899,0.1008,0.3177,0.3306,0.3177,0.1563,0.6622,0.2003,0.6622,0.0817,0.182465851,0.236937389,1,0.299337328,0.362588108,0.560800374,0.442220718,0.255904913,0.607358627,0.607361963,0.607712766 +274,0.3898,0.1408,0.3898,0.3571,0.3176,0.2714,0.3176,0.4284,0.6621,0.1738,0.6621,0.3005,0.131159633,0.612088859,0.958232522,0.191371769,0.682959735,0.373580128,0.422047854,0.593546093,0.60482117,0.604823355,0.605053192 +275,0.3896,0.1367,0.3896,0.5425,0.3175,0.3441,0.3175,0.5777,0.6619,0.1747,0.6619,0.3797,0.143900737,0.780409455,0.730005682,0.303414434,0.831908643,0.360524356,0.3751598,0.751739025,0.605546158,0.605669558,0.605496454 +276,0.3895,0.2209,0.3895,0.6327,0.3174,0.1898,0.3174,0.6501,0.6617,0.165,0.6617,0.4315,0.198314294,0.858942092,0.920607209,0.21737963,0.910569906,0.537046909,0.259621054,0.79437846,0.6030087,0.602919399,0.603280142 +277,0.3893,0.2392,0.3893,0.6563,0.3173,0.2485,0.3173,0.6632,0.6615,0.2132,0.6615,0.4191,0.218283534,0.897629023,0.974759162,0.276159108,0.94185859,0.58096838,0.343196511,0.823120117,0.596121315,0.596149778,0.596187943 +278,0.3892,0.2848,0.3892,0.6462,0.3172,0.1227,0.3172,0.6461,0.6614,0.2082,0.6614,0.4222,0.254532039,0.900672555,1,0.185802132,0.896925211,0.582921743,0.438845277,0.863766789,0.59159014,0.591707214,0.591755319 +279,0.389,0.2453,0.389,0.5642,0.3171,0.2346,0.3171,0.5617,0.6612,0.4143,0.6612,0.4058,0.247006446,0.795192599,0.99453032,0.283673108,0.775765479,0.68333137,0.596738219,0.748500109,0.58518608,0.585149143,0.585106383 +280,0.3889,0.2811,0.3889,0.3954,0.317,0.1022,0.317,0.3732,0.661,0.4471,0.661,0.3121,0.209499329,0.584593952,1,0.122582026,0.593517125,0.626590669,0.588526428,0.574264288,0.585669406,0.585572245,0.585992908 +281,0.3887,0.3158,0.3887,0.1551,0.3169,0.3814,0.3169,0.1768,0.6608,0.3686,0.6608,0.0905,0.383485586,0.310923249,0.932848334,0.395263761,0.305663049,0.687052906,0.538321972,0.267084718,0.614971001,0.614977787,0.615248227 +282,0.3886,0.3149,0.3886,0,0.3167,0.1815,0.3167,0,0.6607,0.3004,0.6607,0,0.426643223,0,0.928340018,0.225260541,0,0.999099612,0.471244842,0,0.668861769,0.668923207,0.668882979 +283,0.3884,0.3414,0.3884,0,0.3166,0.1595,0.3166,0,0.6605,0.3144,0.6605,0,0.368312597,0,0.959610164,0.244742572,0,1,0.457496494,0,0.669465926,0.669557859,0.669769504 +284,0.3883,0.2419,0.3883,0,0.3165,0.1428,0.3165,0,0.6603,0.3457,0.6603,0,0.233646572,0,0.994261146,0.196254939,0,1,0.486181587,0,0.653576607,0.653691559,0.653812057 +285,0.3881,0.1498,0.3881,0,0.3164,0.1519,0.3164,0,0.6601,0.4419,0.6601,0,0.174997136,0,0.985978961,0.17046386,0,1,0.631752074,0,0.627658289,0.627670827,0.627659575 +286,0.388,0.2856,0.388,0,0.3163,0.2419,0.3163,0,0.66,0.3133,0.66,0,0.394229263,0,0.99136734,0.286830157,0,1,0.574119985,0,0.584763171,0.584726042,0.584663121 +287,0.3878,0.4486,0.3878,0,0.3162,0.3086,0.3162,0,0.6598,0.1992,0.6598,0,0.462068379,0,0.628719449,0.333986431,0,0.995685935,0.437746197,0,0.53117448,0.531203723,0.531471631 +288,0.3876,0.3611,0.3876,0,0.3161,0.4669,0.3161,0,0.6596,0.2688,0.6596,0,0.333746761,0,0.774292469,0.38871792,0,0.996052384,0.521710396,0,0.481029483,0.481066215,0.480939716 +289,0.5428,0.0554,0.5428,0,0.368,0.0509,0.368,0,0.613,0.2436,0.613,0,0.102929287,0,0.28655833,0.067501307,0,0.306544006,0.360672176,0,0.436865636,0.436852126,0.436613475 +290,0.5423,0.0335,0.5423,0,0.3678,0.0245,0.3678,0,0.613,0.2548,0.613,0,0.070069149,0,0.244399473,0.03964423,0,0.445659459,0.358865291,0,0.414934751,0.414850857,0.414893617 +291,0.5418,0.0298,0.5418,0,0.3677,0.0196,0.3677,0,0.6131,0.148,0.6131,0,0.069911592,0,0.244833529,0.040781193,0,0.689976454,0.262341768,0,0.401764137,0.401734716,0.401595745 +292,0.5412,0.0084,0.5412,0,0.3675,0.0156,0.3675,0,0.6131,0.1111,0.6131,0,0.014961205,0,0.244127989,0.03616431,0,0.791790605,0.221059725,0,0.397655872,0.397715253,0.397606383 +293,0.5407,0.0085,0.5407,0,0.3674,0,0.3674,0,0.6131,0.125,0.6131,0,0.020019906,0,0.211876005,0.014359617,0,0.465516508,0.230596468,0,0.406053649,0.405965729,0.406028369 +294,0.5402,0.0021,0.5402,0.0049,0.3672,0,0.3672,0.0008,0.6131,0.1131,0.6131,0.0136,0.007520093,0.004839725,0.289745718,0.007557144,0,0.460135877,0.226175949,0.008954303,0.436019816,0.436005923,0.436170213 +295,0.5397,0.0029,0.5397,0.0941,0.367,0.0049,0.367,0.0735,0.6131,0.1255,0.6131,0.0987,0.007531909,0.163497344,0.223146796,0.016487908,0.124448769,0.405033797,0.204162121,0.166514278,0.500966651,0.500951978,0.500886525 +296,0.5392,0.0095,0.5392,0.2171,0.3669,0.0036,0.3669,0.1971,0.6131,0.1218,0.6131,0.2353,0.020222772,0.366256326,0.399918079,0.017013889,0.339877576,0.214261025,0.217606798,0.377554804,0.557455292,0.557436006,0.557624114 +297,0.5387,0.0202,0.5387,0.338,0.3667,0,0.3667,0.352,0.6131,0.1588,0.6131,0.3624,0.012131217,0.51266861,0.372137129,0.01705572,0.548357666,0.205175936,0.246868596,0.564755321,0.585065249,0.585149143,0.585106383 +298,0.5382,0.0118,0.5382,0.4496,0.3666,0.003,0.3666,0.4415,0.6131,0.1834,0.6131,0.4693,0.015408306,0.641467035,0.271962106,0.021653213,0.667341054,0.148014396,0.319478989,0.682289004,0.602162881,0.602073197,0.602393617 +299,0.5377,0.0115,0.5377,0.6574,0.3664,0.0112,0.3664,0.6511,0.6131,0.1882,0.6131,0.6499,0.012474523,0.944623053,0.297082424,0.024686296,0.929904997,0.127350539,0.321994692,0.959149838,0.614850169,0.614766237,0.615248227 +300,0.5372,0.0167,0.5372,0.5304,0.3662,0.0051,0.3662,0.5241,0.6131,0.2792,0.6131,0.5302,0.03286979,0.763183296,0.365212739,0.016091846,0.713555157,0.460607886,0.464787126,0.736581981,0.623489609,0.623651365,0.623670213 +301,0.5367,0.0139,0.5367,0.518,0.3661,0.0277,0.3661,0.5291,0.6131,0.2951,0.6131,0.5243,0.021454006,0.752946496,0.472586632,0.040691424,0.725884199,1,0.486889899,0.747741342,0.624818753,0.624920669,0.625 +302,0.5362,0.0296,0.5362,0.5066,0.3659,0.0879,0.3659,0.5035,0.6131,0.3901,0.6131,0.5014,0.082228646,0.733274221,0.558043897,0.089652121,0.732926846,1,0.637303412,0.747792244,0.627235379,0.627247726,0.627216312 +303,0.5357,0.0675,0.5357,0.4998,0.3658,0.2124,0.3658,0.5097,0.6131,0.4318,0.6131,0.5092,0.147074938,0.716671348,0.273781955,0.210959673,0.731348395,0.453748465,0.659193039,0.715080202,0.624033349,0.624074466,0.624113475 +304,0.5352,0.0874,0.5352,0.4264,0.3656,0.1334,0.3656,0.4509,0.6131,0.3482,0.6131,0.3765,0.160640761,0.693377793,0.213523984,0.137134001,0.705526233,0.311781704,0.529499769,0.698079467,0.620952151,0.621112757,0.621010638 +305,0.5347,0.0934,0.5347,0.2974,0.3655,0.0398,0.3655,0.3258,0.6131,0.3334,0.6131,0.2584,0.129200593,0.586790562,0.138957962,0.050490655,0.63049984,0.185062319,0.503858209,0.581993341,0.620770904,0.620689655,0.621010638 +306,0.5342,0.0969,0.5342,0.1493,0.3653,0.0497,0.3653,0.1867,0.6131,0.3284,0.6131,0.1442,0.114053294,0.403389722,0.092829756,0.061868861,0.513354957,0.176666498,0.515562952,0.306327373,0.615756404,0.61582399,0.616134752 +307,0.5337,0.1098,0.5337,0.0488,0.3651,0.0749,0.3651,0.0732,0.6131,0.358,0.6131,0.0591,0.127998903,0.22100696,0.117127135,0.085354745,0.287998051,0.125957608,0.495559037,0.070040196,0.604639923,0.604823355,0.605053192 +308,0.5332,0.1264,0.5332,0,0.365,0.0365,0.365,0,0.6131,0.4554,0.6131,0,0.103152841,0,0.117953621,0.060099483,0,0.039143719,0.6747877,0,0.595275495,0.595303575,0.595301418 +309,0.5327,0.1441,0.5327,0,0.3648,0.0602,0.3648,0,0.6131,0.455,0.6131,0,0.143746465,0,0.147683203,0.090489812,0,0.059764139,0.623450279,0,0.603129531,0.60313095,0.603280142 +310,0.5322,0.1966,0.5322,0,0.3647,0.0289,0.3647,0,0.6131,0.3671,0.6131,0,0.192906633,0,0.37370503,0.039535411,0,0.138283253,0.560451567,0,0.585850653,0.585783795,0.585992908 +311,0.5316,0.1432,0.5316,0,0.3645,0.0601,0.3645,0,0.6131,0.3246,0.6131,0,0.18569909,0,0.575402319,0.076915391,0,0.194575399,0.552035093,0,0.539088932,0.539031098,0.539007092 +312,0.5311,0.1587,0.5311,0,0.3643,0.0983,0.3643,0,0.6131,0.3508,0.6131,0,0.17065762,0,0.666500807,0.12334802,0,0.305845827,0.653798878,0,0.48622523,0.486143431,0.486258865 +313,0.5306,0.2148,0.5306,0,0.3642,0.1068,0.3642,0,0.6131,0.3604,0.6131,0,0.201032296,0,0.954202414,0.123919778,0,0.3628833,0.672906995,0,0.4459884,0.445948805,0.445921986 +314,0.5301,0.2955,0.5301,0,0.364,0.1037,0.364,0,0.6132,0.3634,0.6132,0,0.236418411,0,0.979016721,0.103414245,0,0.396931976,0.68204242,0,0.421640889,0.421832029,0.421985816 +315,0.5296,0.332,0.5296,0,0.3639,0.0938,0.3639,0,0.6132,0.3532,0.6132,0,0.301238269,0,0.955985069,0.089088917,0,0.432177484,0.731578231,0,0.406839053,0.406811932,0.406914894 +316,0.5291,0.4087,0.5291,0,0.3637,0.1876,0.3637,0,0.6132,0.2717,0.6132,0,0.39020884,0,0.993632317,0.210339248,0,0.387375653,0.558156729,0,0.399347511,0.399407658,0.399379433 +317,0.5286,0.349,0.5286,0,0.3636,0.1478,0.3636,0,0.6132,0.2064,0.6132,0,0.380123615,0,0.918339968,0.176655948,0,0.334295839,0.441318661,0,0.400253746,0.400253861,0.400265957 +318,0.5281,0.1797,0.5281,0.026,0.3634,0.1886,0.3634,0.0121,0.6132,0.1902,0.6132,0.0409,0.235861972,0.049373325,0.466329932,0.192031875,0.022724975,0.339601845,0.45386827,0.152818382,0.406295312,0.40617728,0.406471631 +319,0.5276,0.1659,0.5276,0.1018,0.3632,0.1399,0.3632,0.13,0.6132,0.1876,0.6132,0.0873,0.183815897,0.458189815,0.338065684,0.108884692,0.487261832,0.352346093,0.440796673,0.420681775,0.429494925,0.429659403,0.429521277 +320,0.5271,0.1331,0.5271,0.2433,0.3631,0.0987,0.3631,0.2585,0.6132,0.0837,0.6132,0.1897,0.089953058,0.603047133,0.594026804,0.081454344,0.610282898,0.403067827,0.192150861,0.466695249,0.47341711,0.473450391,0.473404255 +321,0.5266,0.128,0.5266,0.3818,0.3629,0.0154,0.3629,0.3965,0.6132,0.0755,0.6132,0.3086,0.054063726,0.670013547,0.604393601,0.015007132,0.726192355,0.381297648,0.196360469,0.658982933,0.525132915,0.525068754,0.525265957 +322,0.5261,0.0712,0.5261,0.4982,0.3628,0.0061,0.3628,0.4937,0.6132,0.0858,0.6132,0.3997,0.020784948,0.770968735,0.401578367,0.012040151,0.772229612,0.591825485,0.164881259,0.673514366,0.567363461,0.567378887,0.567375887 +323,0.5256,0.0862,0.5256,0.5353,0.3626,0.0043,0.3626,0.5335,0.6132,0.0808,0.6132,0.5139,0.016812757,0.697871029,0.580888927,0.009310487,0.794491172,0.598218679,0.114012696,0.597352088,0.596483809,0.596572879,0.596631206 +324,0.5251,0.1196,0.5251,0.5261,0.3624,0.0594,0.3624,0.539,0.6132,0.1086,0.6132,0.582,0.068726257,0.74565649,0.828314841,0.043812402,0.794821799,0.682179809,0.12996468,0.606385469,0.615152248,0.615189338,0.615248227 +325,0.5246,0.1109,0.5246,0.5122,0.3623,0.0492,0.3623,0.5061,0.6132,0.2391,0.6132,0.6627,0.071737021,0.684711933,0.73906374,0.039249744,0.753941178,0.780026496,0.252119541,0.737015903,0.626329145,0.626401523,0.62677305 +326,0.5241,0.1518,0.5241,0.6212,0.3621,0.0035,0.3621,0.6245,0.6132,0.277,0.6132,0.7799,0.073892027,0.868428469,1,0.011705987,0.874346674,1,0.298006117,0.994849503,0.629954084,0.629786334,0.630319149 +327,0.5236,0.1656,0.5236,0.4165,0.362,0.0012,0.362,0.3972,0.6132,0.2761,0.6132,0.5856,0.059361372,0.639644206,0.995629609,0.015990097,0.549309194,0.671295524,0.283086956,0.914367557,0.632310295,0.632324942,0.632535461 +328,0.5231,0.2013,0.5231,0.3874,0.3618,0.0066,0.3618,0.3532,0.6132,0.347,0.6132,0.4619,0.084108204,0.702865779,0.998854637,0.028533269,0.520966053,0.786381781,0.340696096,0.89767617,0.632310295,0.632324942,0.632535461 +329,0.5226,0.1814,0.5226,0.2828,0.3617,0,0.3617,0.2343,0.6132,0.4828,0.6132,0.3078,0.061644688,0.633072138,0.977961302,0.015878014,0.335467786,0.738582492,0.539063335,0.852163374,0.636781054,0.636767506,0.636968085 +330,0.5221,0.175,0.5221,0.1567,0.3615,0.044,0.3615,0.1124,0.6132,0.3649,0.6132,0.1234,0.08750321,0.476917625,0.963040888,0.057438612,0.174902946,0.750400543,0.430850416,0.733914018,0.636781054,0.636767506,0.636968085 +331,0.5215,0.2286,0.5215,0.0604,0.3613,0.0109,0.3613,0.0397,0.6132,0.2706,0.6132,0.0769,0.110712282,0.242785856,1,0.082583472,0.041037187,1,0.307669967,0.490603566,0.627899952,0.627882378,0.628102837 +332,0.521,0.0939,0.521,0.0018,0.3612,0.0113,0.3612,0,0.6132,0.2094,0.6132,0.0408,0.06268514,0,0.791789591,0.030916506,0,0.591982544,0.280342639,0,0.616179314,0.616247091,0.616134752 +333,0.5205,0.1196,0.5205,0,0.361,0.0207,0.361,0,0.6132,0.2086,0.6132,0,0.079687506,0,0.690502524,0.035293765,0,0.387329578,0.32381013,0,0.622100048,0.62217051,0.622340426 +334,0.52,0.1163,0.52,0,0.3609,0.0913,0.3609,0,0.6132,0.2564,0.6132,0,0.209309652,0,0.371470213,0.118508779,0,0.186375141,0.345559239,0,0.604519091,0.604611805,0.604609929 +335,0.5195,0.1461,0.5195,0,0.3607,0.2797,0.3607,0,0.6132,0.3102,0.6132,0,0.347161263,0,0.235487819,0.293499112,0,0.287831694,0.48878479,0,0.554917835,0.554897398,0.554964539 +336,0.519,0.2864,0.519,0,0.3605,0.5674,0.3605,0,0.6132,0.3171,0.6132,0,0.426779628,0,0.24946785,0.531790853,0,0.560889304,0.432373047,0,0.501510392,0.50158663,0.50177305 +337,0.5185,0.2711,0.5185,0,0.3604,0.2931,0.3604,0,0.6132,0.1866,0.6132,0,0.34032023,0,0.653070331,0.393169761,0,0.617837012,0.343333662,0,0.457044466,0.456949439,0.457003546 +338,0.518,0.1829,0.518,0,0.3602,0.2742,0.3602,0,0.6133,0.1478,0.6133,0,0.209819675,0,0.869526088,0.371684939,0,0.72388792,0.284313917,0,0.428407443,0.428390099,0.428191489 +339,0.5175,0.1844,0.5175,0,0.3601,0.5432,0.3601,0,0.6133,0.1773,0.6133,0,0.228416383,0,0.928739488,0.457418025,0,0.751158357,0.241683677,0,0.409255679,0.409138989,0.409131206 +340,0.517,0.2522,0.517,0,0.3599,0.33,0.3599,0,0.6133,0.1432,0.6133,0,0.207252786,0,0.845790386,0.43018651,0,0.829544604,0.22548914,0,0.397655872,0.397715253,0.397606383 +341,0.5165,0.2607,0.5165,0,0.3598,0.2193,0.3598,0,0.6133,0.1329,0.6133,0,0.195063695,0,0.479269803,0.330451816,0,0.775633276,0.221389622,0,0.392278879,0.392214936,0.392287234 +342,0.516,0.2212,0.516,0.0973,0.3596,0.2581,0.3596,0.0752,0.6133,0.0723,0.6133,0.059,0.195275858,0.248310834,0.218139723,0.33224842,0.115721382,0.579433203,0.13964197,0.231346116,0.386237313,0.386291517,0.38608156 +343,0.5155,0.1456,0.5155,0.1144,0.3594,0.164,0.3594,0.138,0.6133,0.0453,0.6133,0.1168,0.109856688,0.525692761,0.150333703,0.206480548,0.31754446,0.140880883,0.076125711,0.655412436,0.399830836,0.39983076,0.399822695 +344,0.515,0.0674,0.515,0.2496,0.3593,0.0309,0.3593,0.2598,0.6133,0.0091,0.6133,0.2575,0.020254515,0.707271993,0.119932413,0.052579988,0.485493958,0.044088483,0.006525885,0.772856474,0.434630256,0.434736619,0.434840426 +345,0.5145,0.0287,0.5145,0.4063,0.3591,0,0.3591,0.4016,0.6133,0.0063,0.6133,0.416,0.006522118,0.818332374,0.115701422,0.002567487,0.668443859,0.057944506,0.002153539,0.882645607,0.478250363,0.478316057,0.478280142 +346,0.514,0.0344,0.514,0.5217,0.359,0,0.359,0.5187,0.6133,0.0061,0.6133,0.5489,0.00640721,0.858387113,0.094033748,0.001303967,0.821421921,0.033942148,0.001924694,0.91635406,0.516916385,0.516818278,0.516843972 +347,0.5135,0.0279,0.5135,0.6837,0.3588,0,0.3588,0.6685,0.6133,0.0053,0.6133,0.7417,0.005469657,0.990906656,0.089679062,0.002256513,0.980414927,0.069912314,0.009007787,1,0.541868052,0.541781257,0.542109929 +348,0.513,0.0209,0.513,0.6141,0.3586,0,0.3586,0.5887,0.6133,0.0099,0.6133,0.6676,0.005807847,0.866961598,0.052571714,0.000736253,0.781377852,0.003317539,0.00634783,0.915979266,0.558724021,0.55870531,0.558953901 +349,0.5125,0.0305,0.5125,0.6254,0.3585,0,0.3585,0.5841,0.6133,0.0158,0.6133,0.61,0.009198739,0.88501215,0.048186928,0.002049996,0.801012933,0,0.028446689,0.920965672,0.568753021,0.568648191,0.568705674 +350,0.5119,0.0314,0.5119,0.6295,0.3583,0,0.3583,0.5947,0.6133,0.017,0.6133,0.527,0.010839716,0.867754877,0.028566901,0.006953634,0.824292362,0.009132199,0.045451026,0.90958482,0.570323828,0.570340597,0.570478723 +351,0.5114,0.0375,0.5114,0.5713,0.3582,0.0108,0.3582,0.5658,0.6133,0.0292,0.6133,0.4364,0.029926123,0.866189599,0.090105362,0.019025767,0.844137788,0.069604456,0.042708278,0.542909801,0.571532141,0.571609901,0.571808511 +352,0.5109,0.0911,0.5109,0.4664,0.358,0.0329,0.358,0.4846,0.6133,0.015,0.6133,0.4434,0.054838117,0.855623722,0.175722048,0.048079811,0.831098139,0.020941624,0.044498995,0.443953484,0.574552924,0.57457161,0.574468085 +353,0.5104,0.1296,0.5104,0.3225,0.3578,0.0352,0.3578,0.357,0.6133,0.0328,0.6133,0.29,0.07538908,0.792096496,0.200383514,0.06945663,0.765474975,0.040855758,0.071649931,0.638964295,0.579990334,0.579860377,0.580230497 +354,0.5099,0.1024,0.5099,0.1542,0.3577,0.0063,0.3577,0.1974,0.6133,0.0373,0.6133,0.1523,0.08161626,0.6482867,0.156256527,0.038182136,0.617378116,0.041342147,0.087772548,0.638399243,0.58240696,0.582398985,0.582446809 +355,0.5094,0.0762,0.5094,0.0734,0.3575,0.0553,0.3575,0.0874,0.6133,0.0424,0.6133,0.0676,0.07382483,0.326692373,0.046422366,0.084147491,0.315512568,0.045055497,0.085680999,0.305667967,0.573042533,0.573090755,0.573138298 +356,0.5089,0.104,0.5089,0,0.3574,0.0847,0.3574,0,0.6133,0.0541,0.6133,0,0.161338687,0,0.067104608,0.132098615,0,0.146847129,0.085918419,0,0.562167714,0.562090121,0.562056738 +357,0.5084,0.1042,0.5084,0,0.3572,0.1265,0.3572,0,0.6133,0.04,0.6133,0,0.15919514,0,0.039689653,0.163268238,0,0.123765454,0.058647409,0,0.57280087,0.572667654,0.573138298 +358,0.5079,0.087,0.5079,0,0.3571,0.1107,0.3571,0,0.6133,0.0466,0.6133,0,0.108535186,0,0.065212756,0.142740086,0,0.338499755,0.067917563,0,0.561080232,0.561032367,0.561170213 +359,0.5074,0.0581,0.5074,0,0.3569,0.1212,0.3569,0,0.6133,0.0512,0.6133,0,0.071472719,0,0.217857033,0.138909176,0,0.244642153,0.092894673,0,0.522353794,0.522318595,0.522606383 +360,0.5069,0.0925,0.5069,0,0.3567,0.2,0.3567,0,0.6133,0.0627,0.6133,0,0.111822933,0,0.349852622,0.214631125,0,0.414055526,0.148355186,0,0.476739971,0.476835202,0.476950355 +361,0.5064,0.0786,0.5064,0,0.3566,0.1856,0.3566,0,0.6134,0.0398,0.6134,0,0.110325836,0,0.327212632,0.184857607,0,0.563972533,0.099001825,0,0.440188497,0.440236937,0.440159575 +362,0.5059,0.0609,0.5059,0,0.3564,0.1325,0.3564,0,0.6134,0.0292,0.6134,0,0.093629137,0,0.378330529,0.166632116,0,0.674354196,0.125508308,0,0.416082649,0.416120161,0.416223404 +363,0.5054,0.0554,0.5054,0,0.3563,0.1046,0.3563,0,0.6134,0.0325,0.6134,0,0.047552854,0,0.675056875,0.142442837,0,0.82370317,0.152086809,0,0.402549541,0.402580918,0.402925532 +364,0.5049,0.0389,0.5049,0,0.3561,0.0672,0.3561,0,0.6134,0.0299,0.6134,0,0.035386208,0,0.779412627,0.093350187,0,1,0.082653493,0,0.395903818,0.395811297,0.395833333 +365,0.5044,0.0278,0.5044,0,0.3559,0.043,0.3559,0,0.6134,0.0299,0.6134,0,0.044179618,0,0.970574141,0.075678729,0,1,0.051712863,0,0.396749638,0.39686905,0.396719858 +366,0.5039,0.0018,0.5039,0.0359,0.3558,0.046,0.3558,0.0118,0.6134,0.0385,0.6134,0.0436,0.050887093,0.096717402,0.811164498,0.057695933,0.069058806,1,0.053232022,0.136604279,0.400495408,0.400676962,0.40070922 +367,0.5034,0.0034,0.5034,0.1068,0.3556,0.005,0.3556,0.1206,0.6134,0.0259,0.6134,0.1378,0.011802151,0.445279241,0.798115969,0.012516349,0.452267677,0.873755574,0.056437861,0.427904367,0.418861769,0.418870319,0.418882979 +368,0.5029,0.0048,0.5029,0.2425,0.3555,0,0.3555,0.2677,0.6134,0.0286,0.6134,0.248,0.010198699,0.683956683,0.860122562,0,0.708063066,0.443921745,0.056191221,0.709809661,0.456440309,0.456526338,0.456560284 +369,0.5023,0.0012,0.5023,0.3923,0.3553,0,0.3553,0.4168,0.6134,0.0205,0.6134,0.3691,0.002185003,0.78157872,0.587973356,4.14E-06,0.817111433,0.803598762,0.017246964,0.820502579,0.507068632,0.507086947,0.507092199 +370,0.5018,0.0087,0.5018,0.5074,0.3552,0,0.3552,0.5283,0.6134,0.0351,0.6134,0.4759,0.003054135,0.843060255,0.593473434,0,0.858579099,0.628719926,0.012483159,0.880974174,0.549117931,0.54918553,0.549202128 +371,0.5013,0.0083,0.5013,0.6026,0.355,0,0.355,0.6076,0.6134,0.0482,0.6134,0.47,0.001627549,0.880451083,0.41860193,0.000109725,0.877711237,0.17581363,0.018060023,0.881064296,0.581138231,0.581129681,0.581117021 +372,0.5008,0.0145,0.5008,0.6293,0.3548,0,0.3548,0.6221,0.6134,0.0367,0.6134,0.521,0.002265822,0.880549073,0.187907904,0.002390011,0.876857698,0.130292937,0.002811063,0.880626679,0.605062832,0.605034906,0.605496454 +373,0.5003,0.0189,0.5003,0.6032,0.3547,0,0.3547,0.5993,0.6134,0.0405,0.6134,0.5412,0.004129499,0.82160759,0.064052969,0.002647798,0.859360158,0.097917542,0.005518335,0.911264956,0.622160464,0.62217051,0.622340426 +374,0.4998,0.0219,0.4998,0.5956,0.3545,0,0.3545,0.5694,0.6134,0.0526,0.6134,0.4555,0.007144081,0.804832161,0.088177927,0.004862648,0.765307427,0.012381938,0.051187784,0.865523696,0.628383277,0.62851703,0.628546099 +375,0.4993,0.0499,0.4993,0.5497,0.3544,0,0.3544,0.5184,0.6134,0.1268,0.6134,0.4178,0.020478513,0.803928673,0.069377817,0.013637004,0.728534877,0.009062566,0.125595883,0.733185232,0.632612373,0.632748043,0.632978723 +376,0.4988,0.077,0.4988,0.4475,0.3542,0,0.3542,0.4624,0.6134,0.2036,0.6134,0.3587,0.078456752,0.806182385,0.043587331,0.040330511,0.784437716,0.061906025,0.230736941,0.637027204,0.63738521,0.637613709,0.637411348 +377,0.4983,0.0979,0.4983,0.3146,0.354,0,0.354,0.3444,0.6134,0.1319,0.6134,0.2848,0.145345926,0.754471779,0.033999901,0.068920702,0.731807947,0.021825396,0.1605739,0.685909629,0.646145481,0.646287286,0.646276596 +378,0.4978,0.1186,0.4978,0.1529,0.3539,0.1888,0.3539,0.1995,0.6134,0.1342,0.6134,0.134,0.250567436,0.6176669,0.015773797,0.280011445,0.514961958,0,0.161806598,0.586301327,0.652549541,0.652633806,0.65248227 +379,0.4973,0.1807,0.4973,0.0686,0.3537,0.2795,0.3537,0.0905,0.6134,0.1234,0.6134,0.0714,0.293726653,0.340904981,0.018532129,0.338294953,0.294265181,0,0.174860343,0.342638254,0.64517883,0.645229533,0.645390071 +380,0.4968,0.0655,0.4968,0,0.3536,0.0233,0.3536,0,0.6134,0.176,0.6134,0,0.129458889,0,0.00505148,0.041073062,0,0,0.268521637,0.0000196,0.637143548,0.637190607,0.637411348 +381,0.4963,0.0918,0.4963,0,0.3534,0.1062,0.3534,0,0.6134,0.1566,0.6134,0,0.165676624,0,0.010476673,0.148222417,0,0.053382203,0.233442634,0,0.645843403,0.645864185,0.645833333 +382,0.4958,0.0698,0.4958,0,0.3533,0.222,0.3533,0,0.6134,0.1314,0.6134,0,0.198202223,0,0.014508187,0.238910809,0,0.098121733,0.265107542,0,0.617025133,0.617093294,0.617021277 +383,0.4953,0.0486,0.4953,0,0.3531,0.175,0.3531,0,0.6134,0.1383,0.6134,0,0.161508367,0,0.045076083,0.196971089,0,0.138786927,0.306821913,0,0.554253262,0.554262746,0.554521277 +384,0.4948,0.0422,0.4948,0,0.3529,0.1053,0.3529,0,0.6135,0.1693,0.6135,0,0.127100974,0,0.161075637,0.140977368,0,0.392001361,0.321119994,0,0.494139681,0.494182357,0.494237589 +385,0.1649,0.0966,0.1649,0,0.215,0.0302,0.215,0,0.5349,0.0151,0.5349,0,0.023907624,0,0.417306423,0.034292813,0,1,0.020571349,0,0.59618173,0.596149778,0.596187943 +386,0.1649,0.1738,0.1649,0,0.215,0.0737,0.215,0,0.5349,0.0282,0.5349,0,0.068487756,0,0.915883303,0.079222478,0,0.99107337,0.025771072,0,0.567544708,0.567590438,0.567375887 +387,0.1649,0.1676,0.1649,0,0.215,0.1417,0.215,0,0.5349,0.0371,0.5349,0,0.080683127,0,0.804368138,0.145942792,0,0.662275672,0.027744928,0,0.549238763,0.54918553,0.549202128 +388,0.1649,0.0604,0.1649,0,0.215,0.2023,0.215,0,0.5349,0.0232,0.5349,0,0.085766658,0,0.669743061,0.214158848,0,0.993282795,0.03124867,0,0.539632673,0.53966575,0.539893617 +389,0.1649,0.0876,0.1649,0,0.215,0.2069,0.215,0,0.5349,0.0179,0.5349,0,0.109562613,0,0.857402027,0.223272532,0,0.995654464,0.023975259,0,0.543318028,0.543473662,0.543439716 +390,0.1649,0.0716,0.1649,0.0316,0.215,0.201,0.215,0.0168,0.5349,0.0059,0.5349,0,0.104910389,0.048925817,0.622618437,0.21813342,0.028234283,0.676141143,0.014987183,0.005167271,0.568088449,0.568013539,0.568262411 +391,0.1649,0.0503,0.1649,0.0805,0.215,0.0923,0.215,0.1067,0.5349,0.0101,0.5349,0.086,0.044781681,0.382301807,0.735658586,0.081565261,0.424099892,0.372645557,0.038940638,0.238480106,0.627537458,0.627670827,0.627659575 +392,0.1649,0.1238,0.1649,0.2149,0.215,0.131,0.215,0.2393,0.5349,0.004,0.5349,0.2077,0.098245755,0.654169679,0.725578904,0.137218773,0.562330484,0.44511205,0.011610627,0.511969805,0.706319478,0.706367675,0.706560284 +393,0.1649,0.0824,0.1649,0.3659,0.215,0.1469,0.215,0.3837,0.5349,0.0017,0.5349,0.3529,0.071114846,0.757350922,0.579348803,0.114812493,0.752826154,0.30573538,0.009155178,0.727080345,0.767520541,0.767717368,0.767730497 +394,0.1649,0.0601,0.1649,0.4898,0.215,0.115,0.215,0.4951,0.5349,0.0039,0.5349,0.4723,0.032162994,0.805259585,0.530722499,0.09734036,0.810123205,0.275747657,0.007694993,0.788729906,0.816698888,0.816797123,0.816932624 +395,0.1649,0.1055,0.1649,0.5831,0.215,0.1406,0.215,0.5785,0.5349,0.0134,0.5349,0.5436,0.091004223,0.82989347,0.433776796,0.143119335,0.837365151,0.264700264,0.025805254,0.830189049,0.859956501,0.859953459,0.86037234 +396,0.1649,0.0853,0.1649,0.6085,0.215,0.2261,0.215,0.6126,0.5349,0.0451,0.5349,0.5843,0.092592314,0.849625409,0.373571277,0.198024914,0.863726378,0.238614678,0.089819893,0.84804672,0.894755921,0.894647768,0.894946809 +397,0.1649,0.1433,0.1649,0.5999,0.215,0.1885,0.215,0.6174,0.5349,0.0418,0.5349,0.5893,0.173794836,0.837577999,0.433625162,0.168830335,0.871693909,0.227770433,0.055512808,0.841647446,0.921640889,0.921726253,0.921985816 +398,0.1649,0.1712,0.1649,0.5772,0.215,0.1281,0.215,0.6044,0.5349,0.129,0.5349,0.5534,0.132632583,0.814279378,0.79791081,0.134183258,0.845688641,0.409148991,0.191790685,0.798665047,0.944719671,0.944785276,0.945035461 +399,0.1649,0.1848,0.1649,0.5188,0.215,0.1351,0.215,0.5663,0.5349,0.0866,0.5349,0.5003,0.152588874,0.773287952,1,0.130121231,0.795576215,0.439282239,0.096225865,0.698141456,0.94961334,0.949650941,0.949911348 +400,0.1649,0.1469,0.1649,0.4201,0.215,0.1776,0.215,0.4586,0.5349,0.0651,0.5349,0.4107,0.137453303,0.696662486,1,0.176341489,0.707151115,0.486715198,0.051740754,0.596123815,0.951486225,0.951554897,0.951684397 +401,0.1649,0.1033,0.1649,0.3017,0.215,0.1491,0.215,0.3374,0.5349,0.0463,0.5349,0.2813,0.096672967,0.611576557,1,0.148207724,0.601497173,0.705397964,0.054552019,0.579768598,0.949734171,0.949650941,0.949911348 +402,0.1649,0.218,0.1649,0.1691,0.215,0.267,0.215,0.2068,0.5349,0.0428,0.5349,0.1628,0.246728316,0.466124952,1,0.235715553,0.509555697,0.762290359,0.041651979,0.466523498,0.942665539,0.942669769,0.943262411 +403,0.1649,0.0872,0.1649,0.0705,0.215,0.0681,0.215,0.0937,0.5349,0.0372,0.5349,0.0507,0.117695704,0.194905758,1,0.059019528,0.3035146,0.570949793,0.034362815,0.137939692,0.920734654,0.9206685,0.921099291 +404,0.1649,0.0529,0.1649,0,0.215,0.0314,0.215,0,0.5349,0.0362,0.5349,0,0.100484103,0,1,0.037133232,0,0.491913617,0.057075974,0,0.891795553,0.89189761,0.892287234 +405,0.1649,0.0325,0.1649,0,0.215,0.0175,0.215,0,0.5349,0.0411,0.5349,0,0.059404828,0,0.998141885,0.026813105,0,0.682712853,0.099441372,0,0.880497825,0.880685424,0.880762411 +406,0.1649,0.0519,0.1649,0,0.215,0.0503,0.215,0,0.5349,0.0617,0.5349,0,0.107082434,0,0.723340154,0.06148164,0,0.634384334,0.148364067,0,0.845517158,0.845568014,0.845744681 +407,0.1649,0.0295,0.1649,0,0.215,0.0333,0.215,0,0.5349,0.0466,0.5349,0,0.067474082,0,0.636288285,0.048424825,0,0.577560782,0.103087641,0,0.764741421,0.764755659,0.765070922 +408,0.1649,0.0343,0.1649,0,0.215,0.1177,0.215,0,0.5349,0.0177,0.5349,0,0.076981142,0,0.689040303,0.100923747,0,1,0.047065575,0,0.684871919,0.684789507,0.685283688 +409,0.1649,0.04,0.1649,0,0.215,0.1587,0.215,0,0.5349,0.0209,0.5349,0,0.088664487,0,0.95889777,0.190048918,0,1,0.038112242,0,0.628262446,0.628305479,0.628546099 +410,0.1649,0.102,0.1649,0,0.215,0.2127,0.215,0,0.5349,0.0415,0.5349,0,0.196175486,0,0.973448098,0.253231585,0,1,0.042202726,0,0.59159014,0.591707214,0.591755319 +411,0.1649,0.1432,0.1649,0,0.215,0.2058,0.215,0,0.5349,0.0451,0.5349,0,0.255708128,0,0.82672441,0.296434999,0,0.279786944,0.042854957,0,0.567846786,0.567801989,0.567819149 +412,0.1649,0.1592,0.1649,0,0.215,0.1181,0.215,0,0.5349,0.0462,0.5349,0,0.142633662,0,0.596264303,0.179559961,0,0.178385884,0.059922714,0,0.553044949,0.552993442,0.553191489 +413,0.1649,0.1248,0.1649,0,0.215,0.11,0.215,0,0.5349,0.053,0.5349,0,0.161802918,0,0.586191595,0.127627045,0,0.15827696,0.076737471,0,0.554374094,0.554474297,0.554521277 +414,0.1649,0.1249,0.1649,0.0259,0.215,0.0505,0.215,0.0003,0.5349,0.0455,0.5349,0.0083,0.191856578,0.034566909,0.498638719,0.061767213,0.001520546,0.067278281,0.060737375,0.138037294,0.576788304,0.576687117,0.57712766 +415,0.1649,0.088,0.1649,0.096,0.215,0.0136,0.215,0.0996,0.5349,0.0247,0.5349,0.0608,0.145739317,0.34051609,0.377310753,0.021560257,0.306335449,0.000539267,0.037652876,0.473481745,0.639076849,0.639094563,0.639184397 +416,0.1649,0.0553,0.1649,0.2133,0.215,0.0031,0.215,0.2184,0.5349,0.0244,0.5349,0.0906,0.063441776,0.547159135,0.388509452,0.00647525,0.54831779,0.000329843,0.050226711,0.462442458,0.719973417,0.719906918,0.720301418 +417,0.1649,0.0608,0.1649,0.3624,0.215,0.0035,0.215,0.3801,0.5349,0.0266,0.5349,0.157,0.107709236,0.747829616,0.260568708,0.003027687,0.758825243,0.023841623,0.04504494,0.412879914,0.784859836,0.784852972,0.785017731 +418,0.1649,0.0483,0.1649,0.4795,0.215,0.0187,0.215,0.497,0.5349,0.0347,0.5349,0.3141,0.077111453,0.776483536,0.065477707,0.016431429,0.81982255,0.04393246,0.124877751,0.471285522,0.842194297,0.842183203,0.842198582 +419,0.1649,0.0521,0.1649,0.5633,0.215,0.0611,0.215,0.566,0.5349,0.0441,0.5349,0.3079,0.041601107,0.7407341,0.070179462,0.04828972,0.813200533,0.017215969,0.188969538,0.488849372,0.891855969,0.89189761,0.892287234 +420,0.1649,0.1347,0.1649,0.5708,0.215,0.1496,0.215,0.5632,0.5349,0.0817,0.5349,0.4452,0.034508858,0.721973896,0.095890448,0.122549281,0.76173687,0.032446075,0.224277183,0.530159354,0.925869986,0.925957267,0.92641844 +421,0.1649,0.3076,0.1649,0.534,0.215,0.199,0.215,0.5305,0.5349,0.0563,0.5349,0.4428,0.153099567,0.781870365,0.205791622,0.199565381,0.770466328,0.120509699,0.177167088,0.664518833,0.949311262,0.949439391,0.949468085 +422,0.1649,0.3513,0.1649,0.5641,0.215,0.2721,0.215,0.5783,0.5349,0.0923,0.5349,0.4834,0.191757113,0.821734905,0.377977192,0.273406863,0.844895959,0.295387983,0.146371976,0.715889216,0.970517158,0.970594457,0.970744681 +423,0.1649,0.5379,0.1649,0.5537,0.215,0.2836,0.215,0.5735,0.5349,0.0596,0.5349,0.4119,0.377724767,0.827906728,0.513582945,0.281844467,0.849149346,0.440620959,0.133162469,0.748334169,0.983929435,0.983922149,0.984042553 +424,0.1649,0.5602,0.1649,0.457,0.215,0.2746,0.215,0.4853,0.5349,0.054,0.5349,0.3376,0.354122341,0.795335829,0.714232802,0.308719426,0.822357357,0.799556851,0.152271077,0.724883318,0.99401885,0.994076581,0.994237589 +425,0.1649,0.573,0.1649,0.3439,0.215,0.2808,0.215,0.4051,0.5349,0.0413,0.5349,0.1446,0.322912455,0.916427732,0.975401282,0.337165982,0.947162032,1,0.119346462,0.805045307,1,1,1 +426,0.1649,0.5305,0.1649,0.1642,0.215,0.2359,0.215,0.2135,0.5349,0.0691,0.5349,0.0666,0.23743692,0.592885971,1,0.277880848,0.630017042,1,0.124509253,0.148911506,0.991723055,0.991749524,0.992021277 +427,0.1649,0.4565,0.1649,0.0638,0.215,0.1028,0.215,0.0909,0.5349,0.0799,0.5349,0.0064,0.273301721,0.291396022,1,0.126930207,0.36169523,1,0.183063909,0.001705564,0.968946351,0.968902052,0.969414894 +428,0.1649,0.3317,0.1649,0,0.215,0.0481,0.215,0,0.5349,0.0853,0.5349,0,0.196990103,0,1,0.092703208,0,1,0.188168913,0,0.939221846,0.939284959,0.93927305 +429,0.1649,0.2588,0.1649,0,0.215,0.1203,0.215,0,0.5349,0.1128,0.5349,0,0.243232921,0,1,0.192564219,0,1,0.278062165,0,0.92218463,0.922360905,0.922429078 +430,0.1649,0.3635,0.1649,0,0.215,0.1436,0.215,0,0.5349,0.136,0.5349,0,0.398288399,0,1,0.21815072,0,1,0.305683553,0,0.888533108,0.88872435,0.888741135 +431,0.1649,0.358,0.1649,0,0.215,0.1599,0.215,0,0.5349,0.2111,0.5349,0,0.299076855,0,1,0.2167622,0,1,0.479759544,0,0.812409377,0.812354559,0.8125 +432,0.1649,0.5364,0.1649,0,0.215,0.2532,0.215,0,0.5349,0.1774,0.5349,0,0.428693622,0,1,0.351906925,0,1,0.506558478,0,0.736768971,0.736830971,0.736702128 +433,0.1649,0.5554,0.1649,0,0.215,0.285,0.215,0,0.5349,0.1791,0.5349,0,0.446920902,0,1,0.369857788,0,1,0.434830606,0,0.68360319,0.683731754,0.683510638 +434,0.1649,0.6115,0.1649,0,0.215,0.2766,0.215,0,0.5349,0.2365,0.5349,0,0.520143688,0,1,0.392075658,0,1,0.462207615,0,0.650555824,0.65072985,0.65070922 +435,0.1649,0.5166,0.1649,0,0.215,0.2303,0.215,0,0.5349,0.265,0.5349,0,0.462805867,0,1,0.345716238,0,1,0.454005748,0,0.629712422,0.629786334,0.629875887 +436,0.1649,0.2835,0.1649,0,0.215,0.1009,0.215,0,0.5349,0.2695,0.5349,0,0.200760424,0,1,0.15580602,0,1,0.439529955,0,0.617085549,0.617093294,0.617464539 +437,0.1649,0.2476,0.1649,0,0.215,0.0649,0.215,0,0.5349,0.2045,0.5349,0,0.218583316,0,1,0.107753277,0,1,0.371108502,0,0.616420976,0.616458642,0.616578014 +438,0.1649,0.1892,0.1649,0.0054,0.215,0.0957,0.215,0.0003,0.5349,0.1657,0.5349,0.0115,0.230784699,0.014356065,1,0.144820839,0.001643444,1,0.310442865,0.043553945,0.637989367,0.63803681,0.638297872 +439,0.1649,0.1257,0.1649,0.0826,0.215,0.0842,0.215,0.1088,0.5349,0.1622,0.5349,0.0819,0.115110144,0.408010691,1,0.133617148,0.337741107,1,0.284077495,0.292382002,0.694478009,0.694520838,0.694592199 +440,0.1649,0.0923,0.1649,0.2036,0.215,0.0415,0.215,0.2241,0.5349,0.0704,0.5349,0.1882,0.09064839,0.500300586,1,0.057466157,0.492300063,1,0.125205591,0.4777928,0.777489125,0.77766025,0.777925532 +441,0.1649,0.0996,0.1649,0.3215,0.215,0.0653,0.215,0.3379,0.5349,0.0518,0.5349,0.2889,0.101875342,0.572936118,1,0.040974785,0.621728003,1,0.104450181,0.384502202,0.835729821,0.835625132,0.835992908 +442,0.1649,0.029,0.1649,0.4199,0.215,0.0273,0.215,0.4303,0.5349,0.0807,0.5349,0.4314,0.037748117,0.643825829,0.982930124,0.012773825,0.708128691,0.776718855,0.160246581,0.471451998,0.882672789,0.88258938,0.882978723 +443,0.1649,0.0736,0.1649,0.5034,0.215,0.0701,0.215,0.5516,0.5349,0.0721,0.5349,0.5286,0.090113364,0.691235483,0.944338918,0.058362749,0.803988457,0.69870472,0.151949063,0.701848865,0.931005317,0.931034483,0.931294326 +444,0.1649,0.0823,0.1649,0.5322,0.215,0.0938,0.215,0.5807,0.5349,0.0992,0.5349,0.6059,0.058706414,0.728465676,0.89212358,0.091590725,0.831256807,0.408814937,0.221775517,0.788343072,0.967858869,0.967844299,0.968085106 +445,0.1649,0.0944,0.1649,0.5403,0.215,0.1569,0.215,0.5564,0.5349,0.0835,0.5349,0.5827,0.104665354,0.751403451,0.815032542,0.209645316,0.791470885,0.291341901,0.176887646,0.826405048,0.990998067,0.991114872,0.991578014 +446,0.1649,0.3264,0.1649,0.4716,0.215,0.2171,0.215,0.4414,0.5349,0.1483,0.5349,0.5847,0.134735078,0.733063757,0.996589541,0.28378588,0.524960578,0.436626196,0.233327001,0.807368279,0.991723055,0.991749524,0.992021277 +447,0.1649,0.3717,0.1649,0.3179,0.215,0.6722,0.215,0.2005,0.5349,0.2132,0.5349,0.5537,0.23368378,0.4913477,1,0.584838092,0.310497671,1,0.35360831,0.779829025,0.968463026,0.968478951,0.968528369 +448,0.1649,0.3871,0.1649,0.1481,0.215,0.1198,0.215,0.201,0.5349,0.2665,0.5349,0.4275,0.193673953,0.276577056,1,0.138526395,0.359608442,1,0.321805239,0.748753369,0.923272112,0.923418659,0.923758865 +449,0.1649,0.265,0.1649,0.1209,0.215,0,0.215,0.2205,0.5349,0.2383,0.5349,0.3,0.128874421,0.364836365,1,0.015718777,0.300126106,1,0.392843694,0.63640517,0.889016433,0.8889359,0.889184397 +450,0.1649,0.1447,0.1649,0.1182,0.215,0,0.215,0.1106,0.5349,0.2359,0.5349,0.1539,0.148247615,0.360952109,0.782070756,0.003871796,0.122339971,0.919652998,0.395749539,0.481694907,0.874275012,0.874338904,0.874556738 +451,0.1649,0.0631,0.1649,0.0209,0.215,0.0081,0.215,0.0083,0.5349,0.2236,0.5349,0.0663,0.134407207,0.105237834,0.525878906,0.010777082,0.011056531,0.142133504,0.319491208,0.215907306,0.852042049,0.852126084,0.852393617 +452,0.1649,0.0738,0.1649,0,0.215,0.0061,0.215,0,0.5349,0.2269,0.5349,0,0.151918814,0,0.24867934,0.026775681,0,0.167484552,0.262148351,0,0.830715321,0.830759467,0.831117021 +453,0.1649,0.108,0.1649,0,0.215,0.0388,0.215,0,0.5349,0.2488,0.5349,0,0.219351977,0,0.086771652,0.062072091,0,0.497421801,0.302593887,0,0.824371677,0.824624498,0.824911348 +454,0.1649,0.154,0.1649,0,0.215,0.0381,0.215,0,0.5349,0.3402,0.5349,0,0.300874442,0,0.376271904,0.077332281,0,0.109956294,0.542058647,0,0.79760754,0.797546012,0.79787234 +455,0.1649,0.0907,0.1649,0,0.215,0.0832,0.215,0,0.5349,0.3945,0.5349,0,0.170339525,0,0.577430666,0.142371073,0,0.281535387,0.614292502,0,0.729942001,0.729849799,0.730053192 +456,0.1649,0.1312,0.1649,0,0.215,0.0742,0.215,0,0.5349,0.2117,0.5349,0,0.226485148,0,0.698540628,0.106692657,0,0.597258151,0.355144262,0,0.659195263,0.659191877,0.659574468 +457,0.1649,0.2031,0.1649,0,0.215,0.0598,0.215,0,0.5349,0.161,0.5349,0,0.203092501,0,1,0.115914375,0,0.858946085,0.352015317,0,0.604942001,0.604823355,0.605053192 +458,0.1649,0.0693,0.1649,0,0.215,0.0785,0.215,0,0.5349,0.1218,0.5349,0,0.073014692,0,0.553786516,0.092836194,0,0.573802888,0.315606326,0,0.565853069,0.565898033,0.566046099 +459,0.1649,0.0595,0.1649,0,0.215,0.0612,0.215,0,0.5349,0.1712,0.5349,0,0.048557453,0,0.182125241,0.061029151,0,0.097973824,0.356773734,0,0.541082649,0.540935054,0.541223404 +460,0.1649,0.1433,0.1649,0,0.215,0.1281,0.215,0,0.5349,0.1274,0.5349,0,0.081252858,0,0.084433675,0.155295983,0,0.00937932,0.261457473,0,0.525857902,0.525914957,0.52570922 +461,0.1649,0.1611,0.1649,0,0.215,0.1147,0.215,0,0.5349,0.1015,0.5349,0,0.056756094,0,0.155232966,0.160338864,0,0.056475923,0.23646307,0,0.525012083,0.524857203,0.525265957 +462,0.1649,0.1142,0.1649,0.0124,0.215,0.0704,0.215,0,0.5349,0.1133,0.5349,0.1712,0.039480805,0.034734808,0.344614059,0.101018563,0,0.220993727,0.273359031,0.333132505,0.543499275,0.543685213,0.543882979 +463,0.1649,0.0537,0.1649,0.0858,0.215,0.0337,0.215,0.0708,0.5349,0.0853,0.5349,0.0746,0.033044539,0.288021117,0.550334752,0.058161687,0.090551943,0.317995071,0.163404182,0.64150548,0.588629773,0.588745505,0.588652482 +464,0.1649,0.0204,0.1649,0.1993,0.215,0.0069,0.215,0.1866,0.5349,0.0704,0.5349,0.2154,0.010854188,0.448916018,0.546161592,0.029836489,0.332579553,0.352932483,0.141204849,0.82897234,0.643426776,0.643537127,0.643617021 +465,0.1649,0.012,0.1649,0.3012,0.215,0.0129,0.215,0.3088,0.5349,0.0809,0.5349,0.3946,0.004625168,0.554099262,0.459402621,0.019468248,0.387813836,0.457070947,0.147696659,0.880127192,0.675326245,0.675481278,0.675531915 +466,0.1649,0.0131,0.1649,0.4181,0.215,0,0.215,0.41,0.5349,0.0827,0.5349,0.5318,0.001710013,0.669843435,0.331966072,0.002571994,0.513942123,0.341971219,0.179438919,0.91497761,0.697498792,0.697694098,0.697695036 +467,0.1649,0.0392,0.1649,0.5171,0.215,0,0.215,0.4767,0.5349,0.0657,0.5349,0.5926,0.009030138,0.758770585,0.416693121,0.006532928,0.623589337,0.5023458,0.093943827,0.908989847,0.719188014,0.719272266,0.719414894 +468,0.1649,0.0337,0.1649,0.5313,0.215,0,0.215,0.5248,0.5349,0.1638,0.5349,0.5996,0.013189962,0.790840447,0.331713498,0.003781874,0.71173346,0.4322474,0.266508639,0.903005779,0.734171097,0.734292363,0.734485816 +469,0.1649,0.0232,0.1649,0.5773,0.215,0.0038,0.215,0.5645,0.5349,0.1372,0.5349,0.604,0.024710197,0.82169652,0.148988813,0.005695872,0.800025225,0.254680365,0.177739739,0.881454289,0.743233446,0.743389042,0.743351064 +470,0.1649,0.0262,0.1649,0.5196,0.215,0.0344,0.215,0.5172,0.5349,0.2062,0.5349,0.5363,0.046252828,0.744971216,0.400914371,0.026595816,0.767799616,0.131301835,0.240302816,0.755365968,0.756343644,0.756293632,0.756648936 +471,0.1649,0.0394,0.1649,0.4946,0.215,0.042,0.215,0.5145,0.5349,0.293,0.5349,0.4946,0.048311885,0.759233892,0.346616268,0.023692181,0.753026187,0.060074352,0.398055136,0.758140385,0.76099565,0.760947747,0.761524823 +472,0.1649,0.0395,0.1649,0.4443,0.215,0.0601,0.215,0.4684,0.5349,0.3,0.5349,0.4206,0.052704442,0.769900858,0.04904097,0.048752945,0.782815218,0.113629326,0.276938498,0.67558521,0.766855969,0.766871166,0.767287234 +473,0.1649,0.0734,0.1649,0.3279,0.215,0.0188,0.215,0.3687,0.5349,0.3075,0.5349,0.3049,0.071964227,0.745966792,0.101872809,0.03249548,0.766022027,0.113960475,0.386607349,0.673641264,0.772897535,0.772794584,0.773049645 +474,0.1649,0.0658,0.1649,0.1745,0.215,0.0076,0.215,0.2197,0.5349,0.268,0.5349,0.1543,0.08904288,0.641563058,0.160282776,0.035651691,0.655197084,0.033726703,0.300646275,0.584378064,0.770722571,0.770679078,0.770833333 +475,0.1649,0.0757,0.1649,0.071,0.215,0,0.215,0.0928,0.5349,0.2591,0.5349,0.0691,0.144742221,0.330304802,0.192567304,0.005692022,0.279427737,0.062466234,0.317055255,0.406945348,0.748550024,0.748677808,0.749113475 +476,0.1649,0.0515,0.1649,0.0002,0.215,0.0888,0.215,0,0.5349,0.1143,0.5349,0.0478,0.078745119,0,0.225619927,0.109765127,0,0.179941356,0.209791765,0,0.721906718,0.721810874,0.722074468 +477,0.1649,0.0704,0.1649,0,0.215,0.14,0.215,0,0.5349,0.1777,0.5349,0,0.173726961,0,0.187185794,0.140384704,0,0.267715991,0.318446577,0,0.717435959,0.71757986,0.717641844 +478,0.1649,0.0026,0.1649,0,0.215,0,0.215,0,0.5349,0.0053,0.5349,0,0.001307457,0,0.172808588,0.000122102,0,0.264530391,0.007717164,0,0.692544708,0.692616882,0.692819149 +479,0.1649,0.0211,0.1649,0,0.215,0,0.215,0,0.5349,0.1874,0.5349,0,0.082256749,0,0.071840972,0.029596476,0,0.12061806,0.388096631,0,0.632189464,0.632113391,0.632535461 +480,0.1649,0.0279,0.1649,0,0.215,0.0349,0.215,0,0.5349,0.2378,0.5349,0,0.074167073,0,0.126893818,0.048897166,0,0.179285884,0.479969114,0,0.56863219,0.568648191,0.568705674 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Minimum_capacity_requirement.csv b/test/LoadResourceData/test_gen_non_colocated/Minimum_capacity_requirement.csv new file mode 100644 index 0000000000..858294b6fc --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MinCapReqConstraint,Constraint_Description,Min_MW +1,ME_Wind,8000 +2,ME_OSW,5000 +3,MA_Solar,3200 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Network.csv b/test/LoadResourceData/test_gen_non_colocated/Network.csv new file mode 100644 index 0000000000..a26c95a6be --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Network.csv @@ -0,0 +1,4 @@ +,Network_zones,Network_Lines,z1,z2,z3,Line_Max_Flow_MW,transmission_path_name,distance_mile,Line_Loss_Percentage,Line_Max_Reinforcement_MW,Line_Reinforcement_Cost_per_MWyr,DerateCapRes_1,CapRes_1,CapRes_Excl_1 +NENGREST,z1,1,1,-1,0,2950,NENGREST_to_NENG_CT,123.0584,0.012305837,2950,12060,0.95,0,0 +NENG_CT,z2,2,1,0,-1,2000,NENGREST_to_NENG_ME,196.5385,0.019653847,2000,19261,0.95,0,0 +NENG_ME,z3,,,,,,,,,,,,, \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Period_map.csv b/test/LoadResourceData/test_gen_non_colocated/Period_map.csv new file mode 100644 index 0000000000..c11379f0a7 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Period_map.csv @@ -0,0 +1,92 @@ +Period_Index,Rep_Period,Rep_Period_Index +1,4,1 +2,4,1 +3,4,1 +4,4,1 +5,4,1 +6,4,1 +7,4,1 +8,4,1 +9,4,1 +10,4,1 +11,4,1 +12,4,1 +13,4,1 +14,4,1 +15,4,1 +16,4,1 +17,4,1 +18,4,1 +19,4,1 +20,4,1 +21,4,1 +22,4,1 +23,24,2 +24,24,2 +25,24,2 +26,24,2 +27,24,2 +28,24,2 +29,24,2 +30,24,2 +31,24,2 +32,24,2 +33,24,2 +34,24,2 +35,24,2 +36,24,2 +37,24,2 +38,24,2 +39,24,2 +40,24,2 +41,24,2 +42,24,2 +43,24,2 +44,24,2 +45,24,2 +46,24,2 +47,24,2 +48,24,2 +49,24,2 +50,24,2 +51,24,2 +52,24,2 +53,51,3 +54,51,3 +55,51,3 +56,51,3 +57,51,3 +58,51,3 +59,51,3 +60,51,3 +61,51,3 +62,51,3 +63,51,3 +64,51,3 +65,51,3 +66,51,3 +67,51,3 +68,51,3 +69,51,3 +70,77,4 +71,77,4 +72,77,4 +73,77,4 +74,77,4 +75,77,4 +76,77,4 +77,77,4 +78,77,4 +79,77,4 +80,77,4 +81,77,4 +82,77,4 +83,77,4 +84,77,4 +85,77,4 +86,77,4 +87,77,4 +88,77,4 +89,77,4 +90,77,4 +91,69,5 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Reserves.csv b/test/LoadResourceData/test_gen_non_colocated/Reserves.csv new file mode 100644 index 0000000000..d310c45ffb --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Reserves.csv @@ -0,0 +1,2 @@ +Reg_Req_Percent_Demand,Reg_Req_Percent_VRE,Rsv_Req_Percent_Demand,Rsv_Req_Percent_VRE,Unmet_Rsv_Penalty_Dollar_per_MW,Dynamic_Contingency,Static_Contingency_MW +0.01,0.0032,0.033,0.0795,1000,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Electrolyzer.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Electrolyzer.csv new file mode 100644 index 0000000000..0ac8f3f877 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Electrolyzer.csv @@ -0,0 +1,2 @@ +Resource,Zone,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_Kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply,New_Build,Can_Retire,Existing_Cap_MW,Max_Cap_MW,Min_Cap_MW,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Heat_Rate_Mmbtu_Per_MWh,Fuel,Min_Power,Ramp_Up_Percentage,Ramp_Dn_Percentage,Region,Cluster,Resource_Type +NENG_ME_electrolyzer,1,55,1000,1000,0,1,1,0,-1,-1,125000,15000,0,None,0,1,1,NENG_ME,0,hydrogen_electrolyzer \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Flex_demand.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Flex_demand.csv new file mode 100644 index 0000000000..242fbc6dad --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Flex_demand.csv @@ -0,0 +1,4 @@ +Resource,Zone,MGA,Resource_Type,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Existing_Cap_MW,Cap_Size,Min_Cap_MW,Max_Cap_MW,New_Build,Can_Retire,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Var_Om_Cost_Per_MWh_In,Heat_Rate_Mmbtu_Per_MWh,Region,Cluster +NENGREST_heat_load_shifting_1,1,1,heat_load_shifting,0,4,1,165.52,0,0,0,0,0,0,0,0,0,0,NENGREST,1 +NENG_CT_heat_load_shifting_1,2,1,heat_load_shifting,0,4,1,47.27,0,0,0,0,0,0,0,0,0,0,NENG_CT,1 +NENG_ME_heat_load_shifting_1,3,1,heat_load_shifting,0,4,1,22.56,0,0,0,0,0,0,0,0,0,0,NENG_ME,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Hydro.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Hydro.csv new file mode 100644 index 0000000000..03fa95d0ef --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Hydro.csv @@ -0,0 +1,4 @@ +Resource,Zone,Hydro_Energy_To_Power_Ratio,Min_Power,Ramp_Up_Percentage,Ramp_Dn_Percentage,Mga,Resource_Type,Must_Run,LDS,Existing_Cap_MW,Cap_Size,New_Build,Can_Retire,Min_Cap_MW,Max_Cap_MW,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Heat_Rate_Mmbtu_Per_MWh,Fuel,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,Region,Cluster +NENGREST_conventional_hydroelectric_1,1,1,0.117,0.083,0.083,1,conventional_hydroelectric,0,1,662.983,11.24,0,0,0,0,0,46475,0,9.12,None,0,0,0.006916667,0.013833333,NENGREST,1 +NENG_CT_conventional_hydroelectric_1,2,1,0.18,0.083,0.083,1,conventional_hydroelectric,0,1,67.7,13.54,0,0,0,0,0,46475,0,9.12,None,0,0,0.006916667,0.013833333,NENG_CT,1 +NENG_ME_conventional_hydroelectric_1,3,1,0.402,0.083,0.083,1,conventional_hydroelectric,0,1,327.81,7.8,0,0,0,0,0,46475,0,9.12,None,0,0,0.006916667,0.013833333,NENG_ME,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Must_run.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Must_run.csv new file mode 100644 index 0000000000..004fe5b5ad --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Must_run.csv @@ -0,0 +1,4 @@ +Resource,Zone,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Inv_Cost_Per_MWhyr,Fixed_Om_Cost_Per_MWhyr,Inv_Cost_Charge_Per_MWyr,Fixed_Om_Cost_Charge_Per_MWyr,Var_Om_Cost_Per_MWh,Var_Om_Cost_Per_MWh_In,Start_Cost_Per_MW,Start_Fuel_Mmbtu_Per_MW,Heat_Rate_Mmbtu_Per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_To_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,Resource_Type,MGA,Region,Cluster +NENGREST_small_hydroelectric_1,1,186.355,0,0,0.79,0,0,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,small_hydroelectric,1,NENGREST,1 +NENG_CT_small_hydroelectric_1,2,18.711,0,0,0.57,0,0,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,small_hydroelectric,1,NENG_CT,1 +NENG_ME_small_hydroelectric_1,3,195.266,0,0,1.1,0,0,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,small_hydroelectric,1,NENG_ME,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_capacity_reserve_margin.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..09f1513480 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,56 @@ +Resource,Derating_Factor +NENGREST_conventional_hydroelectric_1,0.8 +NENG_CT_conventional_hydroelectric_1,0.8 +NENG_ME_conventional_hydroelectric_1,0.8 +NENGREST_heat_load_shifting_1,0.95 +NENG_CT_heat_load_shifting_1,0.95 +NENG_ME_heat_load_shifting_1,0.95 +NENGREST_hydroelectric_pumped_storage_1,0.95 +NENG_CT_hydroelectric_pumped_storage_1,0.95 +NENGREST_battery_mid_0,0.95 +NENG_CT_battery_mid_0,0.95 +NENG_ME_battery_mid_0,0.95 +NENGREST_biomass_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_1,0.93 +NENGREST_natural_gas_fired_combined_cycle_2,0.93 +NENGREST_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_natural_gas_fired_combustion_turbine_2,0.93 +NENGREST_natural_gas_steam_turbine_1,0.93 +NENGREST_nuclear_1,0.93 +NENG_CT_biomass_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_1,0.93 +NENG_CT_natural_gas_fired_combined_cycle_2,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.93 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.93 +NENG_CT_nuclear_1,0.93 +NENG_ME_biomass_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_1,0.93 +NENG_ME_natural_gas_fired_combined_cycle_2,0.93 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.93 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.93 +NENGREST_naturalgas_ccavgcf_mid_0,0.93 +NENGREST_naturalgas_ctavgcf_mid_0,0.93 +NENGREST_naturalgas_ccs100_mid_0,0.93 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccavgcf_mid_0,0.93 +NENG_CT_naturalgas_ctavgcf_mid_0,0.93 +NENG_CT_naturalgas_ccs100_mid_0,0.93 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccavgcf_mid_0,0.93 +NENG_ME_naturalgas_ctavgcf_mid_0,0.93 +NENG_ME_naturalgas_ccs100_mid_0,0.93 +NENGREST_offshore_wind_turbine_1,0.8 +NENGREST_onshore_wind_turbine_1,0.8 +NENGREST_solar_photovoltaic_1,0.8 +NENG_CT_onshore_wind_turbine_1,0.8 +NENG_CT_solar_photovoltaic_1,0.8 +NENG_ME_onshore_wind_turbine_1,0.8 +NENG_ME_solar_photovoltaic_1,0.8 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.8 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.8 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.8 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.8 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.8 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_energy_share_requirement.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..436ad020bc --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,28 @@ +Resource,ESR_1,ESR_2 +NENGREST_conventional_hydroelectric_1,0,1 +NENG_CT_conventional_hydroelectric_1,0,1 +NENG_ME_conventional_hydroelectric_1,0,1 +NENGREST_small_hydroelectric_1,1,1 +NENG_CT_small_hydroelectric_1,1,1 +NENG_ME_small_hydroelectric_1,1,1 +NENGREST_biomass_1,1,1 +NENGREST_nuclear_1,0,1 +NENG_CT_biomass_1,1,1 +NENG_CT_nuclear_1,0,1 +NENG_ME_biomass_1,1,1 +NENGREST_offshore_wind_turbine_1,1,1 +NENGREST_onshore_wind_turbine_1,1,1 +NENGREST_solar_photovoltaic_1,1,1 +NENG_CT_onshore_wind_turbine_1,1,1 +NENG_CT_solar_photovoltaic_1,1,1 +NENG_ME_onshore_wind_turbine_1,1,1 +NENG_ME_solar_photovoltaic_1,1,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,1,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,1,1 +NENG_ME_electrolyzer,0,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_minimum_capacity_requirement.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..12450e7774 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,9 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3 +NENGREST_offshore_wind_turbine_1,1,1,0 +NENGREST_onshore_wind_turbine_1,1,0,0 +NENGREST_solar_photovoltaic_1,0,0,1 +NENG_ME_onshore_wind_turbine_1,1,0,0 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,0,0 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0,0,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,0 +NENG_ME_landbasedwind_ltrg1_mid_110_1,1,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_multistage_data.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_multistage_data.csv new file mode 100644 index 0000000000..eedfbedfdb --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Resource_multistage_data.csv @@ -0,0 +1,63 @@ +Resource,WACC,Capital_Recovery_Period,Lifetime +NENGREST_conventional_hydroelectric_1,0.039,20,20 +NENG_CT_conventional_hydroelectric_1,0.017,20,20 +NENG_ME_conventional_hydroelectric_1,0.024,20,20 +NENGREST_biomass_1,0.027,20,20 +NENGREST_natural_gas_fired_combined_cycle_1,0.0195,20,20 +NENGREST_natural_gas_fired_combined_cycle_2,0.0166,20,20 +NENGREST_natural_gas_fired_combustion_turbine_1,0.0137,20,20 +NENGREST_natural_gas_fired_combustion_turbine_2,0.0108,20,20 +NENGREST_natural_gas_steam_turbine_1,0.0079,20,20 +NENGREST_nuclear_1,0.005,20,20 +NENG_CT_biomass_1,0.0021,20,20 +NENG_CT_natural_gas_fired_combined_cycle_1,0.039,20,20 +NENG_CT_natural_gas_fired_combined_cycle_2,0.017,20,20 +NENG_CT_natural_gas_fired_combustion_turbine_1,0.024,20,20 +NENG_CT_natural_gas_fired_combustion_turbine_2,0.027,20,20 +NENG_CT_nuclear_1,0.0195,20,20 +NENG_ME_biomass_1,0.0166,20,20 +NENG_ME_natural_gas_fired_combined_cycle_1,0.0137,20,20 +NENG_ME_natural_gas_fired_combined_cycle_2,0.0108,20,20 +NENG_ME_natural_gas_fired_combustion_turbine_1,0.0079,20,20 +NENGREST_naturalgas_ccccsavgcf_mid_0,0.005,20,20 +NENGREST_naturalgas_ccavgcf_mid_0,0.0021,20,20 +NENGREST_naturalgas_ctavgcf_mid_0,0.039,20,20 +NENGREST_naturalgas_ccs100_mid_0,0.017,20,20 +NENG_CT_naturalgas_ccccsavgcf_mid_0,0.024,20,20 +NENG_CT_naturalgas_ccavgcf_mid_0,0.027,20,20 +NENG_CT_naturalgas_ctavgcf_mid_0,0.0195,20,20 +NENG_CT_naturalgas_ccs100_mid_0,0.0166,20,20 +NENG_ME_naturalgas_ccccsavgcf_mid_0,0.0137,20,20 +NENG_ME_naturalgas_ccavgcf_mid_0,0.0108,20,20 +NENG_ME_naturalgas_ctavgcf_mid_0,0.0079,20,20 +NENG_ME_naturalgas_ccs100_mid_0,0.005,20,20 +NENGREST_offshore_wind_turbine_1,0.0021,20,20 +NENGREST_onshore_wind_turbine_1,0.0021,20,20 +NENGREST_solar_photovoltaic_1,0.039,20,20 +NENG_CT_onshore_wind_turbine_1,0.017,20,20 +NENG_CT_solar_photovoltaic_1,0.024,20,20 +NENG_ME_onshore_wind_turbine_1,0.027,20,20 +NENG_ME_solar_photovoltaic_1,0.0195,20,20 +NENGREST_landbasedwind_ltrg1_mid_130_1,0.0166,20,20 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,0.0137,20,20 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,0.0108,20,20 +NENG_CT_landbasedwind_ltrg1_mid_110_1,0.0079,20,20 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,0.005,20,20 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,0.0021,20,20 +NENG_ME_landbasedwind_ltrg1_mid_110_1,0.039,20,20 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,0.017,20,20 +NENGREST_hydroelectric_pumped_storage_1,0.024,20,20 +NENG_CT_hydroelectric_pumped_storage_1,0.027,20,20 +NENGREST_battery_mid_0,0.0195,20,20 +NENG_CT_battery_mid_0,0.0166,20,20 +NENG_ME_battery_mid_0,0.0137,20,20 +NENGREST_hydrogen_storage_1,0.0108,20,20 +NENG_CT_hydrogen_storage_1,0.0079,20,20 +NENG_ME_hydrogen_storage_1,0.005,20,20 +NENGREST_heat_load_shifting_1,0.0021,20,20 +NENG_CT_heat_load_shifting_1,0.039,20,20 +NENG_ME_heat_load_shifting_1,0.017,20,20 +NENGREST_small_hydroelectric_1,0.024,20,20 +NENG_CT_small_hydroelectric_1,0.027,20,20 +NENG_ME_small_hydroelectric_1,0.0195,20,20 +NENG_ME_electrolyzer,0.0195,20,20 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Storage.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Storage.csv new file mode 100644 index 0000000000..b8a71f2bd2 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Storage.csv @@ -0,0 +1,9 @@ +Resource,Zone,Model,LDS,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,New_Build,Can_Retire,Existing_Cap_MW,Existing_Cap_MWh,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Inv_Cost_Per_MWhyr,Fixed_Om_Cost_Per_MWhyr,Var_Om_Cost_Per_MWh,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,Region,Cluster,Resource_Type,Mga +NENGREST_hydroelectric_pumped_storage_1,1,1,0,0,0.866,0.866,0,200,0,0,1768.002,280635.2381,294.67,0,0,0,-1,0,40113,0,0,0,0,0,0.083333333,0.166666667,NENGREST,1,hydroelectric_pumped_storage,0 +NENG_CT_hydroelectric_pumped_storage_1,2,1,0,0,0.866,0.866,0,200,0,0,30.999,4920.47619,10.33,0,0,0,-1,0,40113,0,0,0,0,0,0.083333333,0.166666667,NENG_CT,1,hydroelectric_pumped_storage,0 +NENGREST_battery_mid_0,1,1,0,0,0.92,0.92,1,10,1,1,0,0,1,0,-1,0,-1,19584,4895,22494,5622,0.15,0,0,0.083333333,0.166666667,NENGREST,0,battery_mid,0 +NENG_CT_battery_mid_0,2,1,0,0,0.92,0.92,1,10,1,1,0,0,1,0,-1,0,-1,19584,4895,22494,5622,0.15,0,0,0.083333333,0.166666667,NENG_CT,0,battery_mid,0 +NENG_ME_battery_mid_0,3,1,0,0,0.92,0.92,1,10,1,1,0,0,1,0,-1,0,-1,19584,4895,22494,5622,0.15,0,0,0.083333333,0.166666667,NENG_ME,0,battery_mid,0 +NENGREST_hydrogen_storage_1,1,1,1,0,0.67,0.4,48,2000,1,1,0,0,1,0,-1,0,-1,39761,5000,404,0,4.3,0,0,0,0,NENGREST,1,hydrogen_storage,0 +NENG_CT_hydrogen_storage_1,2,1,1,0,0.67,0.4,48,2000,1,1,0,0,1,0,-1,0,-1,49333,5000,404,0,4.3,0,0,0,0,NENG_CT,1,hydrogen_storage,0 +NENG_ME_hydrogen_storage_1,3,1,1,0,0.67,0.4,48,2000,1,1,0,0,1,0,-1,0,-1,38489,5000,404,0,4.3,0,0,0,0,NENG_ME,1,hydrogen_storage,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv new file mode 100644 index 0000000000..2a06d41360 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Thermal.csv @@ -0,0 +1,30 @@ +Resource,Zone,Model,MGA,Resource_Type,Min_Power,Ramp_Up_Percentage,Ramp_Dn_Percentage,Existing_Cap_MW,Cap_Size,Min_Cap_MW,Max_Cap_MW,New_Build,Can_Retire,Fuel,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Up_Time,Down_Time,Start_Cost_Per_MW,Start_Fuel_Mmbtu_Per_MW,Heat_Rate_Mmbtu_Per_MWh,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,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 +NENGREST_biomass_1,1,1,1,biomass,0.45,1,1,106.062,3.21,0,0,0,0,None,0,122976,5.08,0,0,0,0,14.58,0,0,0.083333333,0.166666667,NENGREST,1,0,0,0,0,0,0,0,0,0 +NENGREST_natural_gas_fired_combined_cycle_1,1,1,1,natural_gas_fired_combined_cycle,0.468,0.64,0.64,7077.3,471.82,0,0,0,1,NENGREST_NG,0,10287,3.55,6,6,91,2,7.43,0,0,0.053333333,0.106666667,NENGREST,1,400,6,7.2,160,250,0.9,0.6,20,0 +NENGREST_natural_gas_fired_combined_cycle_2,1,1,1,natural_gas_fired_combined_cycle,0.507,0.64,0.64,2684.803,244.07,0,0,0,1,NENGREST_NG,0,16291,4.5,6,6,91,2,8.29,0,0,0.053333333,0.106666667,NENGREST,2,0,0,0,0,0,0,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_1,1,1,1,natural_gas_fired_combustion_turbine,0.456,3.78,3.78,302.701,43.24,0,0,0,1,NENGREST_NG,0,12080,4.6,1,1,118,3.5,10.13,0,0,0.315,0.63,NENGREST,1,0,0,0,0,0,0,0,0,0 +NENGREST_natural_gas_fired_combustion_turbine_2,1,1,1,natural_gas_fired_combustion_turbine,0.488,3.78,3.78,62.704,7.84,0,0,0,1,NENGREST_NG,0,13991,4.6,1,1,118,3.5,4.74,0,0,0.315,0.63,NENGREST,2,0,0,0,0,0,0,0,0,0 +NENGREST_natural_gas_steam_turbine_1,1,1,1,natural_gas_steam_turbine,0,0,0,0.6,0.6,0,0,0,1,NENGREST_NG,0,50678,1.04,0,0,86,13.7,0,0,0,0,0,NENGREST,1,0,0,0,0,0,0,0,0,0 +NENGREST_nuclear_1,1,1,1,nuclear,0.5,0.25,0.25,1242,1242,0,0,0,1,new_england_uranium,0,271818,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENGREST,1,0,0,0,0,0,0,0,0,0 +NENG_CT_biomass_1,2,1,1,biomass,0.348,1,1,27.248,3.41,0,0,0,0,Biomass,0,122976,5.37,0,0,0,0,15.33,0,0,0.083333333,0.166666667,NENG_CT,1,0,0,0,0,0,0.9,0.6,20,1 +NENG_CT_natural_gas_fired_combined_cycle_1,2,1,1,natural_gas_fired_combined_cycle,0.338,0.64,0.64,3488.704,436.09,0,0,0,1,NENG_CT_NG,0,9698,3.57,6,6,91,2,7.12,0,0,0.053333333,0.106666667,NENG_CT,1,0,0,0,0,0,0,0,0,0 +NENG_CT_natural_gas_fired_combined_cycle_2,2,1,1,natural_gas_fired_combined_cycle,0.466,0.64,0.64,35.2,17.6,0,0,0,1,NENG_CT_NG,0,16291,4.5,6,6,91,2,10.77,0,0,0.053333333,0.106666667,NENG_CT,2,0,0,0,0,0,0,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_1,2,1,1,natural_gas_fired_combustion_turbine,0.124,3.78,3.78,434,54.25,0,0,0,1,NENG_CT_NG,0,10609,4.6,1,1,118,3.5,11.06,0,0,0.315,0.63,NENG_CT,1,0,0,0,0,0,0,0,0,0 +NENG_CT_natural_gas_fired_combustion_turbine_2,2,1,1,natural_gas_fired_combustion_turbine,0.476,3.78,3.78,124.9,24.98,0,0,0,1,NENG_CT_NG,0,13991,4.6,1,1,118,3.5,8.35,0,0,0.315,0.63,NENG_CT,2,0,0,0,0,0,0,0,0,0 +NENG_CT_nuclear_1,2,1,1,nuclear,0.5,0.25,0.25,2162.9,1081.45,0,0,0,1,new_england_uranium,0,190920,2.32,24,24,245,0,10.46,0,0,0.020833333,0.041666667,NENG_CT,1,0,0,0,0,0,0,0,0,0 +NENG_ME_biomass_1,3,1,1,biomass,0.404,1,1,24.95,2.5,0,0,0,0,None,0,122976,4.85,0,0,0,0,13.84,0,0,0.083333333,0.166666667,NENG_ME,1,0,0,0,0,0,0,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_1,3,1,1,natural_gas_fired_combined_cycle,0.474,0.64,0.64,274.5,137.25,0,0,0,1,NENG_ME_NG,0,16291,4.5,6,6,91,2,12.62,0,0,0.053333333,0.106666667,NENG_ME,1,0,0,0,0,0,0,0,0,0 +NENG_ME_natural_gas_fired_combined_cycle_2,3,1,1,natural_gas_fired_combined_cycle,0.386,0.64,0.64,1114.1,557.05,0,0,0,1,NENG_ME_NG,0,9668,3.57,6,6,91,2,7.65,0,0,0.053333333,0.106666667,NENG_ME,2,0,0,0,0,0,0,0,0,0 +NENG_ME_natural_gas_fired_combustion_turbine_1,3,1,1,natural_gas_fired_combustion_turbine,0.697,3.78,3.78,163.5,54.5,0,0,0,1,NENG_ME_NG,0,11540,4.6,1,1,118,3.5,4.75,0,0,0.315,0.63,NENG_ME,1,0,0,0,0,0,0,0,0,0 +NENGREST_naturalgas_ccccsavgcf_mid_0,1,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 +NENGREST_naturalgas_ccavgcf_mid_0,1,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENGREST_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 +NENGREST_naturalgas_ctavgcf_mid_0,1,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENGREST_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENGREST,0,0,0,0,0,0,0,0,0,0 +NENGREST_naturalgas_ccs100_mid_0,1,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENGREST_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENGREST,0,0,0,0,0,0,0,0,0,0 +NENG_CT_naturalgas_ccccsavgcf_mid_0,2,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 +NENG_CT_naturalgas_ccavgcf_mid_0,2,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_CT_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 +NENG_CT_naturalgas_ctavgcf_mid_0,2,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_CT_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_CT,0,0,0,0,0,0,0,0,0,0 +NENG_CT_naturalgas_ccs100_mid_0,2,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_CT_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_CT,0,0,0,0,0,0,0,0,0,0 +NENG_ME_naturalgas_ccccsavgcf_mid_0,3,1,1,naturalgas_ccccsavgcf_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs90,229388,27483,5.82,6,6,103,0,7.52,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 +NENG_ME_naturalgas_ccavgcf_mid_0,3,1,1,naturalgas_ccavgcf_mid,0.2,0.64,0.64,0,500,0,-1,1,1,NENG_ME_NG,110025,12441,1.61,6,6,103,2,6.27,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 +NENG_ME_naturalgas_ctavgcf_mid_0,3,1,1,naturalgas_ctavgcf_mid,0.3,3.78,3.78,0,100,0,-1,1,1,NENG_ME_NG,81998,6960,4.49,1,1,134,3.5,9.9,0,0,0.315,0.63,NENG_ME,0,0,0,0,0,0,0,0,0,0 +NENG_ME_naturalgas_ccs100_mid_0,3,1,1,naturalgas_ccs100_mid,0.6,0.64,0.64,0,500,0,-1,0,1,NENG_ME_NG_ccs100,239841,37153,6.26,6,6,103,0,7.89,0,0,0.053333333,0.106666667,NENG_ME,0,0,0,0,0,0,0,0,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Resources/Vre.csv b/test/LoadResourceData/test_gen_non_colocated/Resources/Vre.csv new file mode 100644 index 0000000000..bb83199e98 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Resources/Vre.csv @@ -0,0 +1,16 @@ +Resource,Zone,MGA,Resource_Type,Num_Vre_Bins,Existing_Cap_MW,Cap_Size,Min_Cap_MW,Max_Cap_MW,New_Build,Can_Retire,Inv_Cost_Per_MWyr,Fixed_Om_Cost_Per_MWyr,Var_Om_Cost_Per_MWh,Heat_Rate_Mmbtu_Per_MWh,Reg_Cost,Rsv_Cost,Reg_Max,Rsv_Max,Region,Cluster +NENGREST_offshore_wind_turbine_1,1,1,offshore_wind_turbine,1,30,30,0,0,0,1,0,128440,0,9.12,0,0,0,0,NENGREST,1 +NENGREST_onshore_wind_turbine_1,1,1,onshore_wind_turbine,1,145.8,9.75,0,0,0,1,0,43205,-18,9.12,0,0,0.083333333,0.166666667,NENGREST,1 +NENGREST_solar_photovoltaic_1,1,1,solar_photovoltaic,1,821.4,2.6,0,0,0,1,0,18760,0,9.13,0,0,0.083333333,0.166666667,NENGREST,1 +NENG_CT_onshore_wind_turbine_1,2,1,onshore_wind_turbine,1,6.5,5,0,0,0,1,0,43205,-18,9.12,0,0,0.083333333,0.166666667,NENG_CT,1 +NENG_CT_solar_photovoltaic_1,2,1,solar_photovoltaic,1,374.6,5.67,0,0,0,1,0,18760,0,9.16,0,0,0.083333333,0.166666667,NENG_CT,1 +NENG_ME_onshore_wind_turbine_1,3,1,onshore_wind_turbine,1,1190.9,48.5,0,0,0,1,0,43205,-18,9.12,0,0,0.083333333,0.166666667,NENG_ME,1 +NENG_ME_solar_photovoltaic_1,3,1,solar_photovoltaic,1,11.8,1.5,0,0,0,1,0,18760,0,9.12,0,0,0.083333333,0.166666667,NENG_ME,1 +NENGREST_landbasedwind_ltrg1_mid_130_1,1,1,landbasedwind_ltrg1_mid_130,1,0,1,0,4888.236,1,1,194100,41460,0,0,0,0,0.083333333,0.166666667,NENGREST,1 +NENGREST_utilitypv_losangeles_mid_80_0_2_1,1,1,utilitypv_losangeles_mid_80_0_2,1,0,1,0,20835.569,1,1,99283,13055,0,0,0,0,0.083333333,0.166666667,NENGREST,1 +NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,1,1,offshorewind_otrg3_mid_fixed_1_176_77,1,0,1,0,9848.442,1,1,260044,91549,0,0,0,0,0.083333333,0.166666667,NENGREST,1 +NENG_CT_landbasedwind_ltrg1_mid_110_1,2,1,landbasedwind_ltrg1_mid_110,1,0,1,0,1982.895,1,1,185181,41460,0,0,0,0,0.083333333,0.166666667,NENG_CT,1 +NENG_CT_utilitypv_losangeles_mid_80_0_2_1,2,1,utilitypv_losangeles_mid_80_0_2,1,0,1,0,17063.264,1,1,98631,13055,0,0,0,0,0.083333333,0.166666667,NENG_CT,1 +NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,2,1,offshorewind_otrg3_mid_fixed_1_176_77,1,0,1,0,477.5,1,1,247542,91549,0,0,0,0,0.083333333,0.166666667,NENG_CT,1 +NENG_ME_landbasedwind_ltrg1_mid_110_1,3,1,landbasedwind_ltrg1_mid_110,1,0,1,0,20430.499,1,1,233173,41460,0,0,0,0,0.083333333,0.166666667,NENG_ME,1 +NENG_ME_utilitypv_losangeles_mid_100_0_2_1,3,1,utilitypv_losangeles_mid_100_0_2,1,0,1,0,21535.709,1,1,98706,13055,0,0,0,0,0.083333333,0.166666667,NENG_ME,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/Settings/genx_settings.yml b/test/LoadResourceData/test_gen_non_colocated/Settings/genx_settings.yml new file mode 100644 index 0000000000..c210cd63a1 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Settings/genx_settings.yml @@ -0,0 +1,12 @@ +NetworkExpansion: 1 +ParameterScale: 1 +EnergyShareRequirement: 1 +Trans_Loss_Segments: 1 +CapacityReserveMargin: 1 +Reserves: 1 +StorageLosses: 1 +OverwriteResults: 1 +UCommit: 2 +MinCapReq: 1 +CO2Cap: 1 +WriteShadowPrices: 1 diff --git a/test/LoadResourceData/test_gen_non_colocated/Settings/highs_settings.yml b/test/LoadResourceData/test_gen_non_colocated/Settings/highs_settings.yml new file mode 100644 index 0000000000..e244a0b4cf --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/Settings/highs_settings.yml @@ -0,0 +1,13 @@ +# 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: choose #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] + +#highs-specific solver settings + +# run the crossover routine for ipx +# [type: string, advanced: "on", range: {"off", "on"}, default: "off"] +run_crossover: "on" diff --git a/test/TDR/TDR_Results_test/time_domain_reduction_settings.yml b/test/LoadResourceData/test_gen_non_colocated/Settings/time_domain_reduction_settings.yml similarity index 89% rename from test/TDR/TDR_Results_test/time_domain_reduction_settings.yml rename to test/LoadResourceData/test_gen_non_colocated/Settings/time_domain_reduction_settings.yml index 5f02386d72..77a15db91e 100644 --- a/test/TDR/TDR_Results_test/time_domain_reduction_settings.yml +++ b/test/LoadResourceData/test_gen_non_colocated/Settings/time_domain_reduction_settings.yml @@ -6,20 +6,20 @@ ExtremePeriods: Min: 0 Max: 0 Integral: - Min: 0 + Min: 1 Max: 0 Zone: Absolute: Min: 0 Max: 0 Integral: - Min: 1 + Min: 0 Max: 0 - PV: + Demand: System: Absolute: Min: 0 - Max: 0 + Max: 1 Integral: Min: 0 Max: 0 @@ -28,15 +28,15 @@ ExtremePeriods: Min: 0 Max: 0 Integral: - Min: 1 + Min: 0 Max: 0 - Demand: + PV: System: Absolute: Min: 0 - Max: 1 + Max: 0 Integral: - Min: 0 + Min: 1 Max: 0 Zone: Absolute: @@ -46,14 +46,13 @@ ExtremePeriods: Min: 0 Max: 0 UseExtremePeriods: 1 -MinPeriods: 8 -MaxPeriods: 11 +MinPeriods: 5 +MaxPeriods: 5 DemandWeight: 1 -ClusterFuelPrices: 1 +ClusterFuelPrices: 0 nReps: 100 -MultiStageConcatenate: 0 Threshold: 0.05 -TimestepsPerRepPeriod: 168 +TimestepsPerRepPeriod: 24 IterateMethod: "cluster" ScalingMethod: "S" ClusterMethod: "kmeans" diff --git a/test/LoadResourceData/test_gen_non_colocated/generators_data.csv b/test/LoadResourceData/test_gen_non_colocated/generators_data.csv new file mode 100644 index 0000000000..898ec34679 --- /dev/null +++ b/test/LoadResourceData/test_gen_non_colocated/generators_data.csv @@ -0,0 +1,63 @@ +region,cluster,Resource,Resource_Type,MGA,R_ID,Zone,THERM,STOR,HYDRO,FLEX,MUST_RUN,VRE,ELECTROLYZER,Num_VRE_Bins,LDS,CapRes_1,ESR_1,ESR_2,Existing_Cap_MW,Existing_Charge_Cap_MW,Existing_Cap_MWh,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Min_Charge_Cap_MW,Max_Charge_Cap_MW,Min_Cap_MWh,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Inv_Cost_Charge_per_MWyr,Fixed_OM_Cost_Charge_per_MWyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Hydro_Energy_to_Power_Ratio,Min_Duration,Max_Duration,Max_Flexible_Demand_Advance,Max_Flexible_Demand_Delay,Flexible_Demand_Energy_Eff,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,MinCapTag_1,MinCapTag_2,MinCapTag_3,Hydrogen_MWh_Per_Tonne,Electrolyzer_Min_kt,Hydrogen_Price_Per_Tonne,Qualified_Hydrogen_Supply,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,WACC,Capital_Recovery_Period,Lifetime,Min_Retired_Cap_MW,Min_Retired_Energy_Cap_MW,Min_Retired_Charge_Cap_MW +NENGREST,1,NENGREST_conventional_hydroelectric_1,conventional_hydroelectric,1,2,1,0,0,1,0,0,0,0,0,1,0.8,0,1,662.983,0,0,0,0,11.24,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 +NENG_CT,1,NENG_CT_conventional_hydroelectric_1,conventional_hydroelectric,1,15,2,0,0,1,0,0,0,0,0,1,0.8,0,1,67.7,0,0,0,0,13.54,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 +NENG_ME,1,NENG_ME_conventional_hydroelectric_1,conventional_hydroelectric,1,26,3,0,0,1,0,0,0,0,0,1,0.8,0,1,327.81,0,0,0,0,7.8,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.402,0,1,1,1,0,0,0,0,1,0.083,0.083,0,0,0.006916667,0.013833333,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 +NENGREST,1,NENGREST_biomass_1,biomass,1,1,1,1,0,0,0,0,0,0,0,0,0.93,1,1,106.062,0,0,0,0,3.21,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.08,0,0,0,14.58,None,0.45,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,4,1,1,0,0,0,0,0,0,0,0,0.93,0,0,7077.3,0,0,0,1,471.82,0,0,0,-1,-1,-1,0,10287,0,0,0,0,3.55,0,91,2,7.43,NENGREST_NG,0.468,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,400,6,7.2,160,250,0.9,0.6,20,0,0.0195,20,20,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,5,1,1,0,0,0,0,0,0,0,0,0.93,0,0,2684.803,0,0,0,1,244.07,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,8.29,NENGREST_NG,0.507,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 +NENGREST,1,NENGREST_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,6,1,1,0,0,0,0,0,0,0,0,0.93,0,0,302.701,0,0,0,1,43.24,0,0,0,-1,-1,-1,0,12080,0,0,0,0,4.6,0,118,3.5,10.13,NENGREST_NG,0.456,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 +NENGREST,2,NENGREST_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,7,1,1,0,0,0,0,0,0,0,0,0.93,0,0,62.704,0,0,0,1,7.84,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,4.74,NENGREST_NG,0.488,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 +NENGREST,1,NENGREST_natural_gas_steam_turbine_1,natural_gas_steam_turbine,1,8,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0.6,0,0,0,1,0.6,0,0,0,-1,-1,-1,0,50678,0,0,0,0,1.04,0,86,13.7,0,NENGREST_NG,0,0,0,0,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.0079,20,20,0,0,0 +NENGREST,1,NENGREST_nuclear_1,nuclear,1,9,1,1,0,0,0,0,0,0,0,0,0.93,0,1,1242,0,0,0,1,1242,0,0,0,-1,-1,-1,0,271818,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 +NENG_CT,1,NENG_CT_biomass_1,biomass,1,14,2,1,0,0,0,0,0,0,0,0,0.93,1,1,27.248,0,0,0,0,3.41,0,0,0,-1,-1,-1,0,122976,0,0,0,0,5.37,0,0,0,15.33,Biomass,0.348,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9,0.6,20,1,0.0021,20,20,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,17,2,1,0,0,0,0,0,0,0,0,0.93,0,0,3488.704,0,0,0,1,436.09,0,0,0,-1,-1,-1,0,9698,0,0,0,0,3.57,0,91,2,7.12,NENG_CT_NG,0.338,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,18,2,1,0,0,0,0,0,0,0,0,0.93,0,0,35.2,0,0,0,1,17.6,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,10.77,NENG_CT_NG,0.466,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 +NENG_CT,1,NENG_CT_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,19,2,1,0,0,0,0,0,0,0,0,0.93,0,0,434,0,0,0,1,54.25,0,0,0,-1,-1,-1,0,10609,0,0,0,0,4.6,0,118,3.5,11.06,NENG_CT_NG,0.124,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 +NENG_CT,2,NENG_CT_natural_gas_fired_combustion_turbine_2,natural_gas_fired_combustion_turbine,1,20,2,1,0,0,0,0,0,0,0,0,0.93,0,0,124.9,0,0,0,1,24.98,0,0,0,-1,-1,-1,0,13991,0,0,0,0,4.6,0,118,3.5,8.35,NENG_CT_NG,0.476,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 +NENG_CT,1,NENG_CT_nuclear_1,nuclear,1,21,2,1,0,0,0,0,0,0,0,0,0.93,0,1,2162.9,0,0,0,1,1081.45,0,0,0,-1,-1,-1,0,190920,0,0,0,0,2.32,0,245,0,10.46,new_england_uranium,0.5,0,1,1,1,0,0,0,0,1,0.25,0.25,24,24,0.020833333,0.041666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 +NENG_ME,1,NENG_ME_biomass_1,biomass,1,25,3,1,0,0,0,0,0,0,0,0,0.93,1,1,24.95,0,0,0,0,2.5,0,0,0,-1,-1,-1,0,122976,0,0,0,0,4.85,0,0,0,13.84,None,0.404,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combined_cycle_1,natural_gas_fired_combined_cycle,1,27,3,1,0,0,0,0,0,0,0,0,0.93,0,0,274.5,0,0,0,1,137.25,0,0,0,-1,-1,-1,0,16291,0,0,0,0,4.5,0,91,2,12.62,NENG_ME_NG,0.474,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 +NENG_ME,2,NENG_ME_natural_gas_fired_combined_cycle_2,natural_gas_fired_combined_cycle,1,28,3,1,0,0,0,0,0,0,0,0,0.93,0,0,1114.1,0,0,0,1,557.05,0,0,0,-1,-1,-1,0,9668,0,0,0,0,3.57,0,91,2,7.65,NENG_ME_NG,0.386,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 +NENG_ME,1,NENG_ME_natural_gas_fired_combustion_turbine_1,natural_gas_fired_combustion_turbine,1,29,3,1,0,0,0,0,0,0,0,0,0.93,0,0,163.5,0,0,0,1,54.5,0,0,0,-1,-1,-1,0,11540,0,0,0,0,4.6,0,118,3.5,4.75,NENG_ME_NG,0.697,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,33,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENGREST_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,34,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENGREST_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 +NENGREST,0,NENGREST_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,35,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENGREST_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 +NENGREST,0,NENGREST_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,37,1,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENGREST_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,41,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_CT_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,42,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_CT_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,43,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_CT_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 +NENG_CT,0,NENG_CT_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,45,2,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_CT_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccccsavgcf_mid_0,naturalgas_ccccsavgcf_mid,1,49,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,229388,27483,0,0,0,0,5.82,0,103,0,7.52,NENG_ME_NG_ccs90,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccavgcf_mid_0,naturalgas_ccavgcf_mid,1,50,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,500,0,-1,0,-1,-1,-1,110025,12441,0,0,0,0,1.61,0,103,2,6.27,NENG_ME_NG,0.2,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ctavgcf_mid_0,naturalgas_ctavgcf_mid,1,51,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,1,1,100,0,-1,0,-1,-1,-1,81998,6960,0,0,0,0,4.49,0,134,3.5,9.9,NENG_ME_NG,0.3,0,1,1,1,0,0,0,0,1,3.78,3.78,1,1,0.315,0.63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 +NENG_ME,0,NENG_ME_naturalgas_ccs100_mid_0,naturalgas_ccs100_mid,1,53,3,1,0,0,0,0,0,0,0,0,0.93,0,0,0,0,0,0,1,500,0,-1,0,-1,-1,-1,239841,37153,0,0,0,0,6.26,0,103,0,7.89,NENG_ME_NG_ccs100,0.6,0,1,1,1,0,0,0,0,1,0.64,0.64,6,6,0.053333333,0.106666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 +NENGREST,1,NENGREST_offshore_wind_turbine_1,offshore_wind_turbine,1,10,1,0,0,0,0,0,1,0,1,0,0.8,1,1,30,0,0,0,1,30,0,0,0,-1,-1,-1,0,128440,0,0,0,0,0,0,0,0,9.12,None,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 +NENGREST,1,NENGREST_onshore_wind_turbine_1,onshore_wind_turbine,1,11,1,0,0,0,0,0,1,0,1,0,0.8,1,1,145.8,0,0,0,1,9.75,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 +NENGREST,1,NENGREST_solar_photovoltaic_1,solar_photovoltaic,1,13,1,0,0,0,0,0,1,0,1,0,0.8,1,1,821.4,0,0,0,1,2.6,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.13,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 +NENG_CT,1,NENG_CT_onshore_wind_turbine_1,onshore_wind_turbine,1,22,2,0,0,0,0,0,1,0,1,0,0.8,1,1,6.5,0,0,0,1,5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 +NENG_CT,1,NENG_CT_solar_photovoltaic_1,solar_photovoltaic,1,24,2,0,0,0,0,0,1,0,1,0,0.8,1,1,374.6,0,0,0,1,5.67,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.16,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 +NENG_ME,1,NENG_ME_onshore_wind_turbine_1,onshore_wind_turbine,1,30,3,0,0,0,0,0,1,0,1,0,0.8,1,1,1190.9,0,0,0,1,48.5,0,0,0,-1,-1,-1,0,43205,0,0,0,0,-18,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 +NENG_ME,1,NENG_ME_solar_photovoltaic_1,solar_photovoltaic,1,32,3,0,0,0,0,0,1,0,1,0,0.8,1,1,11.8,0,0,0,1,1.5,0,0,0,-1,-1,-1,0,18760,0,0,0,0,0,0,0,0,9.12,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 +NENGREST,1,NENGREST_landbasedwind_ltrg1_mid_130_1,landbasedwind_ltrg1_mid_130,1,38,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,4888.236,0,-1,-1,-1,194100,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 +NENGREST,1,NENGREST_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,39,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20835.569,0,-1,-1,-1,99283,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 +NENGREST,1,NENGREST_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,40,1,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,9848.442,0,-1,-1,-1,260044,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 +NENG_CT,1,NENG_CT_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,46,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,1982.895,0,-1,-1,-1,185181,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 +NENG_CT,1,NENG_CT_utilitypv_losangeles_mid_80_0_2_1,utilitypv_losangeles_mid_80_0_2,1,47,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,17063.264,0,-1,-1,-1,98631,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 +NENG_CT,1,NENG_CT_offshorewind_otrg3_mid_fixed_1_176_77_1,offshorewind_otrg3_mid_fixed_1_176_77,1,48,2,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,477.5,0,-1,-1,-1,247542,91549,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0021,20,20,0,0,0 +NENG_ME,1,NENG_ME_landbasedwind_ltrg1_mid_110_1,landbasedwind_ltrg1_mid_110,1,54,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,20430.499,0,-1,-1,-1,233173,41460,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.039,20,20,0,0,0 +NENG_ME,1,NENG_ME_utilitypv_losangeles_mid_100_0_2_1,utilitypv_losangeles_mid_100_0_2,1,55,3,0,0,0,0,0,1,0,1,0,0.8,1,1,0,0,0,1,1,1,0,21535.709,0,-1,-1,-1,98706,13055,0,0,0,0,0,0,0,0,0,None,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.017,20,20,0,0,0 +NENGREST,1,NENGREST_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,3,1,0,1,0,0,0,0,0,0,0,0.95,0,0,1768.002,0,280635.2381,0,0,294.67,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.532,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.024,20,20,0,0,0 +NENG_CT,1,NENG_CT_hydroelectric_pumped_storage_1,hydroelectric_pumped_storage,0,16,2,0,1,0,0,0,0,0,0,0,0.95,0,0,30.999,0,4920.47619,0,0,10.33,0,0,0,-1,0,-1,0,40113,0,0,0,0,0,0,0,0,0,None,0.871,0,0.866,0.866,158.730159,0,200,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.027,20,20,0,0,0 +NENGREST,0,NENGREST_battery_mid_0,battery_mid,0,36,1,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 +NENG_CT,0,NENG_CT_battery_mid_0,battery_mid,0,44,2,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0166,20,20,0,0,0 +NENG_ME,0,NENG_ME_battery_mid_0,battery_mid,0,52,3,0,1,0,0,0,0,0,0,0,0.95,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,19584,4895,22494,5622,0,0,0.15,0.15,0,0,0,None,0,0,0.92,0.92,1,1,10,0,0,1,1,1,0,0,0.083333333,0.166666667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0137,20,20,0,0,0 +NENGREST,1,NENGREST_hydrogen_storage_1,hydrogen_storage,0,59,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,39761,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0108,20,20,0,0,0 +NENG_CT,1,NENG_CT_hydrogen_storage_1,hydrogen_storage,0,60,2,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,49333,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.0079,20,20,0,0,0 +NENG_ME,1,NENG_ME_hydrogen_storage_1,hydrogen_storage,0,61,3,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,1,1,0,-1,0,-1,0,-1,38489,5000,404,0,38914,29750,4.3,0,0,0,0,None,0,0,0.67,0.4,0,48,2000,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.005,20,20,0,0,0 +NENGREST,1,NENGREST_heat_load_shifting_1,heat_load_shifting,1,56,1,0,0,0,1,0,0,0,0,0,0.95,0,0,165.52,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,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.0021,20,20,0,0,0 +NENG_CT,1,NENG_CT_heat_load_shifting_1,heat_load_shifting,1,57,2,0,0,0,1,0,0,0,0,0,0.95,0,0,47.27,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,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.039,20,20,0,0,0 +NENG_ME,1,NENG_ME_heat_load_shifting_1,heat_load_shifting,1,58,3,0,0,0,1,0,0,0,0,0,0.95,0,0,22.56,0,0,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,4,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.017,20,20,0,0,0 +NENGREST,1,NENGREST_small_hydroelectric_1,small_hydroelectric,1,12,1,0,0,0,0,1,0,0,0,0,0,1,1,186.355,0,0,0,0,0.79,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.117,0,1,1,1,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.024,20,20,0,0,0 +NENG_CT,1,NENG_CT_small_hydroelectric_1,small_hydroelectric,1,23,2,0,0,0,0,1,0,0,0,0,0,1,1,18.711,0,0,0,0,0.57,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.18,0,1,1,1,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.027,20,20,0,0,0 +NENG_ME,1,NENG_ME_small_hydroelectric_1,small_hydroelectric,1,31,3,0,0,0,0,1,0,0,0,0,0,1,1,195.266,0,0,0,0,1.1,0,0,0,-1,-1,-1,0,46475,0,0,0,0,0,0,0,0,9.12,None,0.192,0,1,1,1,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.0195,20,20,0,0,0 +NENG_ME,0,NENG_ME_electrolyzer,hydrogen_electrolyzer,0,62,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,-1,-1,0,-1,-1,-1,125000,15000,0,0,0,0,0,0,0,0,0,None,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,55,1000,1000,0,0,0,0,0,0,0,0,0,0,0.0195,20,20,0,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_non_colocated/inputs_after_loadgen.jld2 b/test/LoadResourceData/test_gen_non_colocated/inputs_after_loadgen.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..bc15c99057c53d384696e722498bf34e32711d21 GIT binary patch literal 1257989 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 Rpo=HqYOtZVcJ6ln{{i9MidFys literal 0 HcmV?d00001 diff --git a/test/LoadResourceData/test_gen_non_colocated/inputs_before_loadgen.jld2 b/test/LoadResourceData/test_gen_non_colocated/inputs_before_loadgen.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..5871850518f98a10679d6a0f4edf1f5d84627a25 GIT binary patch literal 95662 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 literal 0 HcmV?d00001 diff --git a/test/LoadResourceData/test_gen_vre_stor/CO2_cap.csv b/test/LoadResourceData/test_gen_vre_stor/CO2_cap.csv new file mode 100644 index 0000000000..566be5a56c --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/CO2_cap.csv @@ -0,0 +1,4 @@ +,Network_zones,CO_2_Max_Mtons_1,CO_2_Cap_Zone_1 +EIC,z1,0.0,1 +TRE,z2,0.0,1 +WECC,z3,0.0,1 diff --git a/test/LoadResourceData/test_gen_vre_stor/Capacity_reserve_margin.csv b/test/LoadResourceData/test_gen_vre_stor/Capacity_reserve_margin.csv new file mode 100644 index 0000000000..aaeec46061 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Capacity_reserve_margin.csv @@ -0,0 +1,4 @@ +region,Network_zones,CapRes_1,CapRes_2,CapRes_3 +EIC,z1,0.1572,0.0,0.0 +TRE,z2,0.0,0.1375,0.0 +WECC,z3,0.0,0.0,0.1538 diff --git a/test/LoadResourceData/test_gen_vre_stor/Demand_data.csv b/test/LoadResourceData/test_gen_vre_stor/Demand_data.csv new file mode 100644 index 0000000000..4d077ddfb0 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Demand_data.csv @@ -0,0 +1,25 @@ +Voll,Demand_Segment,Cost_of_Demand_Curtailment_per_MW,Max_Demand_Curtailment,$/MWh,Rep_Periods,Timesteps_per_Rep_Period,Sub_Weights,Time_Index,Demand_MW_z1,Demand_MW_z2,Demand_MW_z3 +2000,1,1,1,2000,1,24,8760,1,433055,56250,158195 +,2,0.9,0.04,1800,,,,2,406808,53975,151211 +,3,0.55,0.024,1100,,,,3,394480,51413,144460 +,4,0.2,0.003,400,,,,4,389845,50217,137745 +,,,,,,,,5,387098,49407,131059 +,,,,,,,,6,392355,48847,129242 +,,,,,,,,7,404654,49928,127643 +,,,,,,,,8,416313,52099,127594 +,,,,,,,,9,428156,53971,131035 +,,,,,,,,10,443175,56180,136863 +,,,,,,,,11,461485,59324,140327 +,,,,,,,,12,478750,61430,146574 +,,,,,,,,13,500639,63720,153859 +,,,,,,,,14,510242,66292,160582 +,,,,,,,,15,512939,66236,167097 +,,,,,,,,16,520359,66270,172644 +,,,,,,,,17,542617,66603,173528 +,,,,,,,,18,567183,68052,174662 +,,,,,,,,19,589765,70029,179348 +,,,,,,,,20,597606,78675,189488 +,,,,,,,,21,578601,79796,200159 +,,,,,,,,22,551207,77624,206282 +,,,,,,,,23,519544,74795,201139 +,,,,,,,,24,480627,70153,190159 diff --git a/test/LoadResourceData/test_gen_vre_stor/Energy_share_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Energy_share_requirement.csv new file mode 100644 index 0000000000..5aac67302b --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Energy_share_requirement.csv @@ -0,0 +1,4 @@ +Zone_name,Network_zones,ESR_1,ESR_2 +NENGREST,z1,0.259,0.348 +NENG_CT,z2,0.44,0.44 +NENG_ME,z3,0.776,0.776 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Fuels_data.csv b/test/LoadResourceData/test_gen_vre_stor/Fuels_data.csv new file mode 100644 index 0000000000..71ad4f619d --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Fuels_data.csv @@ -0,0 +1,26 @@ +Time_Index,None,biomass,east_north_central_coal,east_north_central_naturalgas,east_north_central_uranium,east_north_central_distillate,west_south_central_coal,west_south_central_naturalgas,west_south_central_uranium,west_south_central_distillate,mountain_coal,mountain_naturalgas,mountain_uranium,mountain_distillate,zerocarbon_fuel +0,0,0,0.09552,0.05306,0,0.07315,0.09552,0.05306,0,0.07315,0.09552,0.05306,0,0.07315,0 +1,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +2,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +3,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +4,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +5,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +6,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +7,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +8,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +9,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +10,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +11,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +12,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +13,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +14,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +15,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +16,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +17,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +18,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +19,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +20,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +21,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +22,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +23,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 +24,0,5,1.81,3.13,0.73,17.8,1.71,3.51,0.73,19.31,1.36,4.35,0.73,22.83,20 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Generators_variability.csv b/test/LoadResourceData/test_gen_vre_stor/Generators_variability.csv new file mode 100644 index 0000000000..3ccfe2a616 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Generators_variability.csv @@ -0,0 +1,25 @@ +,Time_Index,EIC_batteries_1,EIC_biomass_1,EIC_conventional_hydroelectric_1,EIC_conventional_steam_coal_1,EIC_conventional_steam_coal_2,EIC_hydroelectric_pumped_storage_1,EIC_natural_gas_fired_combined_cycle_1,EIC_natural_gas_fired_combined_cycle_2,EIC_natural_gas_fired_combustion_turbine_1,EIC_natural_gas_fired_combustion_turbine_2,EIC_natural_gas_internal_combustion_engine_1,EIC_natural_gas_steam_turbine_1,EIC_nuclear_1,EIC_offshore_wind_turbine_1,EIC_onshore_wind_turbine_1,EIC_petroleum_liquids_1,EIC_small_hydroelectric_1,EIC_solar_photovoltaic_1,TRE_batteries_1,TRE_biomass_1,TRE_conventional_hydroelectric_1,TRE_conventional_steam_coal_1,TRE_conventional_steam_coal_2,TRE_natural_gas_fired_combined_cycle_1,TRE_natural_gas_fired_combined_cycle_2,TRE_natural_gas_fired_combustion_turbine_1,TRE_natural_gas_fired_combustion_turbine_2,TRE_natural_gas_internal_combustion_engine_1,TRE_natural_gas_steam_turbine_1,TRE_nuclear_1,TRE_onshore_wind_turbine_1,TRE_petroleum_liquids_1,TRE_small_hydroelectric_1,TRE_solar_photovoltaic_1,WECC_batteries_1,WECC_biomass_1,WECC_conventional_hydroelectric_1,WECC_conventional_steam_coal_1,WECC_conventional_steam_coal_2,WECC_geothermal_1,WECC_hydroelectric_pumped_storage_1,WECC_natural_gas_fired_combined_cycle_1,WECC_natural_gas_fired_combined_cycle_2,WECC_natural_gas_fired_combustion_turbine_1,WECC_natural_gas_fired_combustion_turbine_2,WECC_natural_gas_internal_combustion_engine_1,WECC_natural_gas_steam_turbine_1,WECC_nuclear_1,WECC_onshore_wind_turbine_1,WECC_petroleum_liquids_1,WECC_small_hydroelectric_1,WECC_solar_photovoltaic_1,WECC_distributed_generation_1,EIC_distributed_generation_1,TRE_distributed_generation_1,EIC_naturalgas_ccavgcf_moderate_0,EIC_naturalgas_ctavgcf_moderate_0,EIC_battery_moderate_0,EIC_naturalgas_ccccsavgcf_conservative_0,EIC_naturalgas_ccccsavgcf_repowercoal_0,EIC_naturalgas_ccccsavgcf_retrofitngcc_0,EIC_advnuclear_atb_moderate_0,EIC_storage_metalair_advanced_0,EIC_hydrogen_ccavgcf_moderate_0,EIC_hydrogen_ctavgcf_moderate_0,EIC_hydrogen_ccavgcf_retrofitngcc_0,EIC_hydrogen_ctavgcf_retrofitngct_0,EIC_storage_hydrogen_advanced_0,EIC_landbasedwind_class1_moderate_0,EIC_landbasedwind_class1_moderate_1,EIC_landbasedwind_class1_moderate_2,EIC_landbasedwind_class1_moderate_3,EIC_landbasedwind_class1_moderate_4,EIC_landbasedwind_class1_moderate_5,EIC_landbasedwind_class1_moderate_6,EIC_landbasedwind_class1_moderate_7,EIC_landbasedwind_class1_moderate_8,EIC_landbasedwind_class1_moderate_9,EIC_utilitypv_class1_moderate_0,EIC_utilitypv_class1_moderate_1,EIC_utilitypv_class1_moderate_2,EIC_utilitypv_class1_moderate_3,EIC_utilitypv_class1_moderate_4,EIC_utilitypv_class1_moderate_5,EIC_utilitypv_class1_moderate_6,EIC_utilitypv_class1_moderate_7,EIC_utilitypv_class1_moderate_8,EIC_utilitypv_class1_moderate_9,EIC_offshorewind_class3_moderate_fixed_1_0,EIC_offshorewind_class3_moderate_fixed_1_1,EIC_offshorewind_class3_moderate_fixed_1_2,EIC_offshorewind_class3_moderate_fixed_1_3,EIC_offshorewind_class3_moderate_fixed_1_4,EIC_offshorewind_class3_moderate_fixed_1_5,EIC_offshorewind_class3_moderate_fixed_1_6,EIC_offshorewind_class3_moderate_fixed_1_7,EIC_offshorewind_class3_moderate_fixed_1_8,EIC_offshorewind_class3_moderate_fixed_1_9,EIC_offshorewind_class3_moderate_fixed_0_0,EIC_offshorewind_class3_moderate_fixed_0_1,EIC_offshorewind_class3_moderate_fixed_0_4,EIC_offshorewind_class3_moderate_fixed_0_5,EIC_offshorewind_class3_moderate_fixed_0_10,EIC_offshorewind_class3_moderate_fixed_0_11,EIC_offshorewind_class3_moderate_fixed_0_18,EIC_offshorewind_class3_moderate_fixed_0_19,EIC_offshorewind_class3_moderate_fixed_0_28,EIC_offshorewind_class3_moderate_fixed_0_29,EIC_offshorewind_class12_moderate_floating_1_0,EIC_offshorewind_class12_moderate_floating_1_1,EIC_offshorewind_class12_moderate_floating_1_6,EIC_offshorewind_class12_moderate_floating_1_7,EIC_offshorewind_class12_moderate_floating_1_18,EIC_offshorewind_class12_moderate_floating_1_19,EIC_offshorewind_class12_moderate_floating_1_38,EIC_offshorewind_class12_moderate_floating_1_39,EIC_offshorewind_class12_moderate_floating_1_68,EIC_offshorewind_class12_moderate_floating_1_69,EIC_offshorewind_class12_moderate_floating_0_0,EIC_offshorewind_class12_moderate_floating_0_1,EIC_offshorewind_class12_moderate_floating_0_8,EIC_offshorewind_class12_moderate_floating_0_9,EIC_offshorewind_class12_moderate_floating_0_28,EIC_offshorewind_class12_moderate_floating_0_29,EIC_offshorewind_class12_moderate_floating_0_68,EIC_offshorewind_class12_moderate_floating_0_69,EIC_offshorewind_class12_moderate_floating_0_138,EIC_offshorewind_class12_moderate_floating_0_139,TRE_naturalgas_ccavgcf_moderate_0,TRE_naturalgas_ctavgcf_moderate_0,TRE_battery_moderate_0,TRE_naturalgas_ccccsavgcf_conservative_0,TRE_naturalgas_ccccsavgcf_repowercoal_0,TRE_naturalgas_ccccsavgcf_retrofitngcc_0,TRE_advnuclear_atb_moderate_0,TRE_storage_metalair_advanced_0,TRE_hydrogen_ccavgcf_moderate_0,TRE_hydrogen_ctavgcf_moderate_0,TRE_hydrogen_ccavgcf_retrofitngcc_0,TRE_hydrogen_ctavgcf_retrofitngct_0,TRE_storage_hydrogen_advanced_0,TRE_landbasedwind_class1_moderate_0,TRE_landbasedwind_class1_moderate_1,TRE_landbasedwind_class1_moderate_2,TRE_landbasedwind_class1_moderate_3,TRE_landbasedwind_class1_moderate_4,TRE_landbasedwind_class1_moderate_5,TRE_landbasedwind_class1_moderate_6,TRE_landbasedwind_class1_moderate_7,TRE_landbasedwind_class1_moderate_8,TRE_landbasedwind_class1_moderate_9,TRE_utilitypv_class1_moderate_0,TRE_utilitypv_class1_moderate_1,TRE_utilitypv_class1_moderate_2,TRE_utilitypv_class1_moderate_3,TRE_utilitypv_class1_moderate_4,TRE_utilitypv_class1_moderate_5,TRE_utilitypv_class1_moderate_6,TRE_utilitypv_class1_moderate_7,TRE_utilitypv_class1_moderate_8,TRE_utilitypv_class1_moderate_9,TRE_offshorewind_class3_moderate_fixed_1_0,TRE_offshorewind_class3_moderate_fixed_1_1,TRE_offshorewind_class3_moderate_fixed_1_2,TRE_offshorewind_class3_moderate_fixed_1_3,TRE_offshorewind_class3_moderate_fixed_1_4,TRE_offshorewind_class3_moderate_fixed_1_5,TRE_offshorewind_class3_moderate_fixed_1_6,TRE_offshorewind_class3_moderate_fixed_1_7,TRE_offshorewind_class3_moderate_fixed_1_8,TRE_offshorewind_class3_moderate_fixed_1_9,TRE_offshorewind_class3_moderate_fixed_0_0,TRE_offshorewind_class3_moderate_fixed_0_1,TRE_offshorewind_class3_moderate_fixed_0_4,TRE_offshorewind_class3_moderate_fixed_0_5,TRE_offshorewind_class3_moderate_fixed_0_10,TRE_offshorewind_class3_moderate_fixed_0_11,TRE_offshorewind_class3_moderate_fixed_0_18,TRE_offshorewind_class3_moderate_fixed_0_19,TRE_offshorewind_class3_moderate_fixed_0_28,TRE_offshorewind_class3_moderate_fixed_0_29,TRE_offshorewind_class12_moderate_floating_1_0,TRE_offshorewind_class12_moderate_floating_1_1,TRE_offshorewind_class12_moderate_floating_1_6,TRE_offshorewind_class12_moderate_floating_1_7,TRE_offshorewind_class12_moderate_floating_1_18,TRE_offshorewind_class12_moderate_floating_1_19,TRE_offshorewind_class12_moderate_floating_1_38,TRE_offshorewind_class12_moderate_floating_1_39,TRE_offshorewind_class12_moderate_floating_1_68,TRE_offshorewind_class12_moderate_floating_1_69,TRE_offshorewind_class12_moderate_floating_0_0,TRE_offshorewind_class12_moderate_floating_0_1,TRE_offshorewind_class12_moderate_floating_0_8,TRE_offshorewind_class12_moderate_floating_0_9,TRE_offshorewind_class12_moderate_floating_0_28,TRE_offshorewind_class12_moderate_floating_0_29,TRE_offshorewind_class12_moderate_floating_0_68,TRE_offshorewind_class12_moderate_floating_0_69,TRE_offshorewind_class12_moderate_floating_0_138,TRE_offshorewind_class12_moderate_floating_0_139,WECC_naturalgas_ccavgcf_moderate_0,WECC_naturalgas_ctavgcf_moderate_0,WECC_battery_moderate_0,WECC_naturalgas_ccccsavgcf_conservative_0,WECC_naturalgas_ccccsavgcf_repowercoal_0,WECC_naturalgas_ccccsavgcf_retrofitngcc_0,WECC_advnuclear_atb_moderate_0,WECC_storage_metalair_advanced_0,WECC_hydrogen_ccavgcf_moderate_0,WECC_hydrogen_ctavgcf_moderate_0,WECC_hydrogen_ccavgcf_retrofitngcc_0,WECC_hydrogen_ctavgcf_retrofitngct_0,WECC_storage_hydrogen_advanced_0,WECC_landbasedwind_class1_moderate_0,WECC_landbasedwind_class1_moderate_1,WECC_landbasedwind_class1_moderate_2,WECC_landbasedwind_class1_moderate_3,WECC_landbasedwind_class1_moderate_4,WECC_landbasedwind_class1_moderate_5,WECC_landbasedwind_class1_moderate_6,WECC_landbasedwind_class1_moderate_7,WECC_landbasedwind_class1_moderate_8,WECC_landbasedwind_class1_moderate_9,WECC_utilitypv_class1_moderate_0,WECC_utilitypv_class1_moderate_1,WECC_utilitypv_class1_moderate_2,WECC_utilitypv_class1_moderate_3,WECC_utilitypv_class1_moderate_4,WECC_utilitypv_class1_moderate_5,WECC_utilitypv_class1_moderate_6,WECC_utilitypv_class1_moderate_7,WECC_utilitypv_class1_moderate_8,WECC_utilitypv_class1_moderate_9,WECC_offshorewind_class3_moderate_fixed_1_0,WECC_offshorewind_class3_moderate_fixed_1_1,WECC_offshorewind_class3_moderate_fixed_1_2,WECC_offshorewind_class3_moderate_fixed_1_3,WECC_offshorewind_class3_moderate_fixed_1_4,WECC_offshorewind_class3_moderate_fixed_1_5,WECC_offshorewind_class3_moderate_fixed_1_6,WECC_offshorewind_class3_moderate_fixed_1_7,WECC_offshorewind_class3_moderate_fixed_1_8,WECC_offshorewind_class3_moderate_fixed_1_9,WECC_offshorewind_class3_moderate_fixed_0_0,WECC_offshorewind_class3_moderate_fixed_0_1,WECC_offshorewind_class3_moderate_fixed_0_4,WECC_offshorewind_class3_moderate_fixed_0_5,WECC_offshorewind_class3_moderate_fixed_0_10,WECC_offshorewind_class3_moderate_fixed_0_11,WECC_offshorewind_class3_moderate_fixed_0_18,WECC_offshorewind_class3_moderate_fixed_0_19,WECC_offshorewind_class3_moderate_fixed_0_28,WECC_offshorewind_class3_moderate_fixed_0_29,WECC_offshorewind_class12_moderate_floating_1_0,WECC_offshorewind_class12_moderate_floating_1_1,WECC_offshorewind_class12_moderate_floating_1_6,WECC_offshorewind_class12_moderate_floating_1_7,WECC_offshorewind_class12_moderate_floating_1_18,WECC_offshorewind_class12_moderate_floating_1_19,WECC_offshorewind_class12_moderate_floating_1_38,WECC_offshorewind_class12_moderate_floating_1_39,WECC_offshorewind_class12_moderate_floating_1_68,WECC_offshorewind_class12_moderate_floating_1_69,WECC_offshorewind_class12_moderate_floating_0_0,WECC_offshorewind_class12_moderate_floating_0_1,WECC_offshorewind_class12_moderate_floating_0_8,WECC_offshorewind_class12_moderate_floating_0_9,WECC_offshorewind_class12_moderate_floating_0_28,WECC_offshorewind_class12_moderate_floating_0_29,WECC_offshorewind_class12_moderate_floating_0_68,WECC_offshorewind_class12_moderate_floating_0_69,WECC_offshorewind_class12_moderate_floating_0_138,WECC_offshorewind_class12_moderate_floating_0_139,WECC_trans_light_duty_1,EIC_trans_light_duty_1,TRE_trans_light_duty_1,WECC_comm_water_heat_1,EIC_comm_water_heat_1,TRE_comm_water_heat_1,WECC_res_water_heat_1,EIC_res_water_heat_1,TRE_res_water_heat_1,WECC_comm_space_heat_cool_1,EIC_comm_space_heat_cool_1,TRE_comm_space_heat_cool_1,WECC_res_space_heat_cool_1,EIC_res_space_heat_cool_1,TRE_res_space_heat_cool_1,EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,WECC_naturalgas_ctavgcf_moderate_0_zerocarbon +0,1,1,1,0.395,1,1,1,1,1,1,1,1,1,1,1,0.791,1,0.395,0,1,1,0.028,1,1,1,1,1,1,1,1,1,0.692,1,0.028,0,1,1,0.404,1,1,1,1,1,1,1,1,1,1,1,0.411,1,0.404,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.966,0.978,0.936,0.939,0.867,0.752,0.666,0.527,0.548,0.98,0,0,0,0,0,0,0,0,0,0,0.657,0.799,0.577,0.847,0.609,0.08,0.034,0.268,0.297,0.019,0.657,0.799,0.577,0.847,0.609,0.08,0.034,0.268,0.297,0.019,0.657,0.799,0.577,0.847,0.609,0.08,0.034,0.268,0.297,0.019,0.657,0.799,0.577,0.847,0.609,0.08,0.034,0.268,0.297,0.019,1,1,1,1,1,1,1,1,1,1,1,1,1,0.84,0.705,0.752,0.794,0.614,0.749,0.485,0.799,0.637,1,0,0,0,0,0,0,0,0,0,0,0.409,0.526,0.167,0.48,0.18,0.651,0.505,0.64,0.32,0.352,0.409,0.526,0.167,0.48,0.18,0.651,0.505,0.64,0.32,0.352,0.409,0.526,0.167,0.48,0.18,0.651,0.505,0.64,0.32,0.352,0.409,0.526,0.167,0.48,0.18,0.651,0.505,0.64,0.32,0.352,1,1,1,1,1,1,1,1,1,1,1,1,1,0.814,0.752,0.532,0.49,0.407,0.945,0.371,0.889,0.325,0.969,0,0,0,0,0,0,0,0,0,0,0.032,0.029,0.017,0.865,0.032,0.008,0.12,0.004,0.119,0.002,0.032,0.029,0.017,0.865,0.032,0.008,0.12,0.004,0.119,0.002,0.032,0.029,0.017,0.865,0.032,0.008,0.12,0.004,0.119,0.002,0.032,0.029,0.017,0.865,0.032,0.008,0.12,0.004,0.119,0.002,0.154,0.126,0.095,0.4,0.336,0.278,0.334,0.309,0.295,0.122,0.101,0.018,0.461,0.278,0.185,1,1,1 +1,2,1,1,0.396,1,1,1,1,1,1,1,1,1,1,1,0.8,1,0.396,0,1,1,0.028,1,1,1,1,1,1,1,1,1,0.708,1,0.028,0,1,1,0.404,1,1,1,1,1,1,1,1,1,1,1,0.41,1,0.404,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.972,0.978,0.945,0.947,0.877,0.72,0.648,0.442,0.546,0.993,0,0,0,0,0,0,0,0,0,0,0.554,0.81,0.521,0.853,0.596,0.081,0.022,0.152,0.173,0.029,0.554,0.81,0.521,0.853,0.596,0.081,0.022,0.152,0.173,0.029,0.554,0.81,0.521,0.853,0.596,0.081,0.022,0.152,0.173,0.029,0.554,0.81,0.521,0.853,0.596,0.081,0.022,0.152,0.173,0.029,1,1,1,1,1,1,1,1,1,1,1,1,1,0.848,0.671,0.783,0.787,0.686,0.718,0.497,0.75,0.624,1,0,0,0,0,0,0,0,0,0,0,0.307,0.474,0.183,0.239,0.223,0.679,0.528,0.657,0.247,0.212,0.307,0.474,0.183,0.239,0.223,0.679,0.528,0.657,0.247,0.212,0.307,0.474,0.183,0.239,0.223,0.679,0.528,0.657,0.247,0.212,0.307,0.474,0.183,0.239,0.223,0.679,0.528,0.657,0.247,0.212,1,1,1,1,1,1,1,1,1,1,1,1,1,0.749,0.739,0.509,0.452,0.377,0.948,0.333,0.89,0.298,0.967,0,0,0,0,0,0,0,0,0,0,0.061,0.078,0.057,0.752,0.022,0.012,0.131,0.011,0.197,0.027,0.061,0.078,0.057,0.752,0.022,0.012,0.131,0.011,0.197,0.027,0.061,0.078,0.057,0.752,0.022,0.012,0.131,0.011,0.197,0.027,0.061,0.078,0.057,0.752,0.022,0.012,0.131,0.011,0.197,0.027,0.147,0.077,0.093,0.382,0.33,0.266,0.319,0.227,0.281,0.117,0.105,0.017,0.441,0.301,0.178,1,1,1 +2,3,1,1,0.396,1,1,1,1,1,1,1,1,1,1,1,0.789,1,0.396,0,1,1,0.028,1,1,1,1,1,1,1,1,1,0.641,1,0.028,0,1,1,0.404,1,1,1,1,1,1,1,1,1,1,1,0.365,1,0.404,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.967,0.978,0.951,0.946,0.899,0.694,0.644,0.435,0.533,0.985,0,0,0,0,0,0,0,0,0,0,0.375,0.694,0.458,0.815,0.518,0.124,0.036,0.089,0.124,0.019,0.375,0.694,0.458,0.815,0.518,0.124,0.036,0.089,0.124,0.019,0.375,0.694,0.458,0.815,0.518,0.124,0.036,0.089,0.124,0.019,0.375,0.694,0.458,0.815,0.518,0.124,0.036,0.089,0.124,0.019,1,1,1,1,1,1,1,1,1,1,1,1,1,0.872,0.858,0.805,0.826,0.641,0.622,0.469,0.513,0.646,1,0,0,0,0,0,0,0,0,0,0,0.249,0.355,0.239,0.19,0.38,0.658,0.449,0.633,0.171,0.147,0.249,0.355,0.239,0.19,0.38,0.658,0.449,0.633,0.171,0.147,0.249,0.355,0.239,0.19,0.38,0.658,0.449,0.633,0.171,0.147,0.249,0.355,0.239,0.19,0.38,0.658,0.449,0.633,0.171,0.147,1,1,1,1,1,1,1,1,1,1,1,1,1,0.594,0.705,0.459,0.373,0.366,0.929,0.341,0.855,0.327,0.962,0,0,0,0,0,0,0,0,0,0,0.073,0.093,0.067,0.785,0.025,0.023,0.127,0.094,0.204,0.113,0.073,0.093,0.067,0.785,0.025,0.023,0.127,0.094,0.204,0.113,0.073,0.093,0.067,0.785,0.025,0.023,0.127,0.094,0.204,0.113,0.073,0.093,0.067,0.785,0.025,0.023,0.127,0.094,0.204,0.113,0.136,0.044,0.045,0.366,0.334,0.265,0.304,0.12,0.187,0.112,0.109,0.018,0.425,0.337,0.215,1,1,1 +3,4,1,1,0.397,1,1,1,1,1,1,1,1,1,1,1,0.771,1,0.397,0,1,1,0.028,1,1,1,1,1,1,1,1,1,0.61,1,0.028,0,1,1,0.403,1,1,1,1,1,1,1,1,1,1,1,0.35,1,0.403,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.969,0.967,0.95,0.878,0.889,0.68,0.668,0.424,0.528,0.983,0,0,0,0,0,0,0,0,0,0,0.211,0.56,0.29,0.77,0.385,0.113,0.036,0.039,0.058,0.012,0.211,0.56,0.29,0.77,0.385,0.113,0.036,0.039,0.058,0.012,0.211,0.56,0.29,0.77,0.385,0.113,0.036,0.039,0.058,0.012,0.211,0.56,0.29,0.77,0.385,0.113,0.036,0.039,0.058,0.012,1,1,1,1,1,1,1,1,1,1,1,1,1,0.856,0.972,0.771,0.866,0.554,0.652,0.51,0.463,0.717,1,0,0,0,0,0,0,0,0,0,0,0.323,0.381,0.296,0.291,0.438,0.486,0.389,0.628,0.264,0.24,0.323,0.381,0.296,0.291,0.438,0.486,0.389,0.628,0.264,0.24,0.323,0.381,0.296,0.291,0.438,0.486,0.389,0.628,0.264,0.24,0.323,0.381,0.296,0.291,0.438,0.486,0.389,0.628,0.264,0.24,1,1,1,1,1,1,1,1,1,1,1,1,1,0.514,0.708,0.437,0.353,0.35,0.865,0.351,0.746,0.343,0.924,0,0,0,0,0,0,0,0,0,0,0.124,0.15,0.11,0.694,0.061,0.065,0.101,0.013,0.178,0.022,0.124,0.15,0.11,0.694,0.061,0.065,0.101,0.013,0.178,0.022,0.124,0.15,0.11,0.694,0.061,0.065,0.101,0.013,0.178,0.022,0.124,0.15,0.11,0.694,0.061,0.065,0.101,0.013,0.178,0.022,0.104,0.033,0.031,0.355,0.347,0.267,0.269,0.091,0.088,0.112,0.112,0.02,0.439,0.368,0.261,1,1,1 +4,5,1,1,0.397,1,1,1,1,1,1,1,1,1,1,1,0.761,1,0.397,0,1,1,0.027,1,1,1,1,1,1,1,1,1,0.559,1,0.027,0,1,1,0.403,1,1,1,1,1,1,1,1,1,1,1,0.343,1,0.403,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.953,0.949,0.95,0.834,0.898,0.688,0.681,0.389,0.456,0.974,0,0,0,0,0,0,0,0,0,0,0.195,0.615,0.256,0.785,0.358,0.08,0.043,0.039,0.048,0.015,0.195,0.615,0.256,0.785,0.358,0.08,0.043,0.039,0.048,0.015,0.195,0.615,0.256,0.785,0.358,0.08,0.043,0.039,0.048,0.015,0.195,0.615,0.256,0.785,0.358,0.08,0.043,0.039,0.048,0.015,1,1,1,1,1,1,1,1,1,1,1,1,1,0.8,0.929,0.71,0.806,0.619,0.66,0.702,0.634,0.861,0.996,0,0,0,0,0,0,0,0,0,0,0.277,0.412,0.18,0.212,0.343,0.456,0.432,0.693,0.443,0.393,0.277,0.412,0.18,0.212,0.343,0.456,0.432,0.693,0.443,0.393,0.277,0.412,0.18,0.212,0.343,0.456,0.432,0.693,0.443,0.393,0.277,0.412,0.18,0.212,0.343,0.456,0.432,0.693,0.443,0.393,1,1,1,1,1,1,1,1,1,1,1,1,1,0.436,0.614,0.418,0.367,0.351,0.751,0.342,0.644,0.323,0.735,0,0,0,0,0,0,0,0,0,0,0.14,0.272,0.179,0.562,0.091,0.117,0.051,0,0.161,0,0.14,0.272,0.179,0.562,0.091,0.117,0.051,0,0.161,0,0.14,0.272,0.179,0.562,0.091,0.117,0.051,0,0.161,0,0.14,0.272,0.179,0.562,0.091,0.117,0.051,0,0.161,0,0.048,0.015,0.022,0.353,0.386,0.273,0.159,0.079,0.082,0.119,0.117,0.023,0.516,0.397,0.298,1,1,1 +5,6,1,1,0.398,1,1,1,1,1,1,1,1,1,1,1,0.739,1,0.398,0,1,1,0.027,1,1,1,1,1,1,1,1,1,0.475,1,0.027,0,1,1,0.403,1,1,1,1,1,1,1,1,1,1,1,0.335,1,0.403,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.953,0.946,0.956,0.852,0.911,0.735,0.691,0.401,0.514,0.961,0,0,0,0,0,0,0,0,0,0,0.123,0.552,0.188,0.766,0.298,0.068,0.048,0.026,0.035,0.025,0.123,0.552,0.188,0.766,0.298,0.068,0.048,0.026,0.035,0.025,0.123,0.552,0.188,0.766,0.298,0.068,0.048,0.026,0.035,0.025,0.123,0.552,0.188,0.766,0.298,0.068,0.048,0.026,0.035,0.025,1,1,1,1,1,1,1,1,1,1,1,1,1,0.749,0.895,0.737,0.697,0.763,0.512,0.88,0.307,0.951,0.954,0,0,0,0,0,0,0,0,0,0,0.364,0.22,0.289,0.299,0.364,0.36,0.368,0.609,0.34,0.238,0.364,0.22,0.289,0.299,0.364,0.36,0.368,0.609,0.34,0.238,0.364,0.22,0.289,0.299,0.364,0.36,0.368,0.609,0.34,0.238,0.364,0.22,0.289,0.299,0.364,0.36,0.368,0.609,0.34,0.238,1,1,1,1,1,1,1,1,1,1,1,1,1,0.424,0.585,0.375,0.353,0.338,0.783,0.328,0.726,0.303,0.695,0,0,0,0,0,0,0,0,0,0,0.136,0.582,0.372,0.513,0.141,0.218,0.039,0,0.148,0,0.136,0.582,0.372,0.513,0.141,0.218,0.039,0,0.148,0,0.136,0.582,0.372,0.513,0.141,0.218,0.039,0,0.148,0,0.136,0.582,0.372,0.513,0.141,0.218,0.039,0,0.148,0,0.037,0.013,0.006,0.359,0.452,0.294,0.08,0.096,0.065,0.129,0.126,0.025,0.582,0.405,0.334,1,1,1 +6,7,1,1,0.398,1,1,1,1,1,1,1,1,1,1,1,0.709,1,0.398,0,1,1,0.027,1,1,1,1,1,1,1,1,1,0.405,1,0.027,0,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.341,1,0.402,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.95,0.949,0.954,0.842,0.915,0.766,0.69,0.415,0.581,0.936,0,0,0,0,0,0,0,0,0,0,0.096,0.408,0.113,0.686,0.225,0.095,0.05,0.005,0.011,0.054,0.096,0.408,0.113,0.686,0.225,0.095,0.05,0.005,0.011,0.054,0.096,0.408,0.113,0.686,0.225,0.095,0.05,0.005,0.011,0.054,0.096,0.408,0.113,0.686,0.225,0.095,0.05,0.005,0.011,0.054,1,1,1,1,1,1,1,1,1,1,1,1,1,0.758,0.896,0.802,0.68,0.851,0.476,0.889,0.219,0.92,0.788,0,0,0,0,0,0,0,0,0,0,0.864,0.1,0.924,0.976,0.841,0.299,0.223,0.555,0.198,0.618,0.864,0.1,0.924,0.976,0.841,0.299,0.223,0.555,0.198,0.618,0.864,0.1,0.924,0.976,0.841,0.299,0.223,0.555,0.198,0.618,0.864,0.1,0.924,0.976,0.841,0.299,0.223,0.555,0.198,0.618,1,1,1,1,1,1,1,1,1,1,1,1,1,0.391,0.56,0.357,0.349,0.345,0.791,0.335,0.822,0.29,0.689,0,0,0,0,0,0,0,0,0,0,0.205,0.718,0.504,0.466,0.173,0.282,0.031,0,0.157,0,0.205,0.718,0.504,0.466,0.173,0.282,0.031,0,0.157,0,0.205,0.718,0.504,0.466,0.173,0.282,0.031,0,0.157,0,0.205,0.718,0.504,0.466,0.173,0.282,0.031,0,0.157,0,0.021,0.027,0.011,0.38,0.52,0.337,0.082,0.221,0.088,0.137,0.134,0.037,0.63,0.424,0.346,1,1,1 +7,8,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.675,1,0.399,0,1,1,0.027,1,1,1,1,1,1,1,1,1,0.332,1,0.027,0,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.283,1,0.402,0,0,0.021,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.917,0.885,0.937,0.85,0.93,0.785,0.683,0.467,0.529,0.839,0,0,0,0,0,0,0,0,0,0,0.048,0.246,0.089,0.499,0.163,0.053,0.059,0.001,0.004,0.048,0.048,0.246,0.089,0.499,0.163,0.053,0.059,0.001,0.004,0.048,0.048,0.246,0.089,0.499,0.163,0.053,0.059,0.001,0.004,0.048,0.048,0.246,0.089,0.499,0.163,0.053,0.059,0.001,0.004,0.048,1,1,1,1,1,1,1,1,1,1,1,1,1,0.789,0.911,0.847,0.709,0.962,0.523,0.899,0.252,0.838,0.434,0,0,0,0,0,0,0,0,0,0,0.859,0.042,0.931,0.878,0.932,0.065,0.111,0.72,0.231,0.784,0.859,0.042,0.931,0.878,0.932,0.065,0.111,0.72,0.231,0.784,0.859,0.042,0.931,0.878,0.932,0.065,0.111,0.72,0.231,0.784,0.859,0.042,0.931,0.878,0.932,0.065,0.111,0.72,0.231,0.784,1,1,1,1,1,1,1,1,1,1,1,1,1,0.338,0.493,0.321,0.299,0.304,0.643,0.286,0.682,0.247,0.485,0,0,0,0,0,0,0,0,0,0,0.307,0.832,0.688,0.516,0.246,0.479,0.021,0,0.15,0,0.307,0.832,0.688,0.516,0.246,0.479,0.021,0,0.15,0,0.307,0.832,0.688,0.516,0.246,0.479,0.021,0,0.15,0,0.307,0.832,0.688,0.516,0.246,0.479,0.021,0,0.15,0,0.009,0.05,0.023,0.426,0.599,0.379,0.074,0.501,0.217,0.147,0.15,0.076,0.666,0.346,0.378,1,1,1 +8,9,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.661,1,0.399,0.127,1,1,0.027,1,1,1,1,1,1,1,1,1,0.337,1,0.027,0,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.287,1,0.402,0,0,0.15,0.064,1,1,1,1,1,1,1,1,1,1,1,1,1,0.876,0.828,0.928,0.881,0.952,0.816,0.728,0.528,0.628,0.82,0,0.081,0,0.077,0.043,0,0.005,0.09,0.058,0,0.049,0.125,0.084,0.452,0.144,0.068,0.054,0.001,0.007,0.052,0.049,0.125,0.084,0.452,0.144,0.068,0.054,0.001,0.007,0.052,0.049,0.125,0.084,0.452,0.144,0.068,0.054,0.001,0.007,0.052,0.049,0.125,0.084,0.452,0.144,0.068,0.054,0.001,0.007,0.052,1,1,1,1,1,1,1,1,1,1,1,1,1,0.816,0.934,0.927,0.819,0.986,0.688,0.93,0.369,0.844,0.266,0,0,0,0,0,0,0,0,0,0,0.982,0.24,0.911,1,0.975,0.015,0.176,0.613,0.491,0.772,0.982,0.24,0.911,1,0.975,0.015,0.176,0.613,0.491,0.772,0.982,0.24,0.911,1,0.975,0.015,0.176,0.613,0.491,0.772,0.982,0.24,0.911,1,0.975,0.015,0.176,0.613,0.491,0.772,1,1,1,1,1,1,1,1,1,1,1,1,1,0.387,0.552,0.359,0.323,0.325,0.764,0.319,0.845,0.288,0.531,0,0,0,0,0,0,0,0,0,0,0.36,0.766,0.672,0.664,0.243,0.465,0.008,0,0.137,0,0.36,0.766,0.672,0.664,0.243,0.465,0.008,0,0.137,0,0.36,0.766,0.672,0.664,0.243,0.465,0.008,0,0.137,0,0.36,0.766,0.672,0.664,0.243,0.465,0.008,0,0.137,0,0.023,0.09,0.042,0.488,0.64,0.457,0.135,0.809,0.499,0.16,0.149,0.09,0.693,0.279,0.275,1,1,1 +9,10,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.519,1,0.4,0.351,1,1,0.027,1,1,1,1,1,1,1,1,1,0.175,1,0.027,0.171,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.147,1,0.402,0,0.016,0.394,0.424,1,1,1,1,1,1,1,1,1,1,1,1,1,0.594,0.483,0.704,0.571,0.579,0.519,0.219,0.152,0.055,0.58,0.151,0.403,0.168,0.367,0.294,0.114,0.162,0.408,0.343,0.027,0.088,0.098,0.095,0.489,0.132,0.082,0.059,0.069,0.067,0.097,0.088,0.098,0.095,0.489,0.132,0.082,0.059,0.069,0.067,0.097,0.088,0.098,0.095,0.489,0.132,0.082,0.059,0.069,0.067,0.097,0.088,0.098,0.095,0.489,0.132,0.082,0.059,0.069,0.067,0.097,1,1,1,1,1,1,1,1,1,1,1,1,1,0.414,0.467,0.578,0.451,0.652,0.512,0.563,0.354,0.332,0.117,0.247,0.23,0.258,0.224,0.253,0.209,0.2,0.258,0.11,0.217,0.985,0.33,0.96,1,0.588,0.399,0.488,0.226,0.619,0.943,0.985,0.33,0.96,1,0.588,0.399,0.488,0.226,0.619,0.943,0.985,0.33,0.96,1,0.588,0.399,0.488,0.226,0.619,0.943,0.985,0.33,0.96,1,0.588,0.399,0.488,0.226,0.619,0.943,1,1,1,1,1,1,1,1,1,1,1,1,1,0.183,0.342,0.184,0.217,0.198,0.273,0.16,0.237,0.13,0.247,0,0,0,0,0,0,0,0,0,0,0.301,0.145,0.288,0.975,0.351,0.358,0.388,0.176,0.296,0.179,0.301,0.145,0.288,0.975,0.351,0.358,0.388,0.176,0.296,0.179,0.301,0.145,0.288,0.975,0.351,0.358,0.388,0.176,0.296,0.179,0.301,0.145,0.288,0.975,0.351,0.358,0.388,0.176,0.296,0.179,0.043,0.157,0.078,0.551,0.665,0.508,0.323,0.887,0.79,0.261,0.128,0.076,0.66,0.251,0.243,1,1,1 +10,11,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.541,1,0.4,0.515,1,1,0.027,1,1,1,1,1,1,1,1,1,0.202,1,0.027,0.43,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.129,1,0.401,0.072,0.24,0.63,0.683,1,1,1,1,1,1,1,1,1,1,1,1,1,0.662,0.526,0.752,0.604,0.669,0.53,0.314,0.176,0.097,0.598,0.44,0.574,0.452,0.542,0.515,0.463,0.465,0.568,0.533,0.429,0.116,0.046,0.158,0.298,0.083,0.183,0.069,0.167,0.116,0.132,0.116,0.046,0.158,0.298,0.083,0.183,0.069,0.167,0.116,0.132,0.116,0.046,0.158,0.298,0.083,0.183,0.069,0.167,0.116,0.132,0.116,0.046,0.158,0.298,0.083,0.183,0.069,0.167,0.116,0.132,1,1,1,1,1,1,1,1,1,1,1,1,1,0.514,0.564,0.658,0.596,0.753,0.65,0.679,0.559,0.427,0.092,0.524,0.52,0.531,0.516,0.529,0.507,0.499,0.532,0.458,0.477,0.999,0.733,0.989,1,0.809,1,0.864,0.266,0.637,0.966,0.999,0.733,0.989,1,0.809,1,0.864,0.266,0.637,0.966,0.999,0.733,0.989,1,0.809,1,0.864,0.266,0.637,0.966,0.999,0.733,0.989,1,0.809,1,0.864,0.266,0.637,0.966,1,1,1,1,1,1,1,1,1,1,1,1,1,0.179,0.315,0.177,0.217,0.186,0.262,0.161,0.159,0.142,0.171,0.193,0.189,0.199,0,0.184,0,0.096,0,0.135,0,0.275,0.131,0.273,0.994,0.424,0.358,0.216,0.191,0.097,0.169,0.275,0.131,0.273,0.994,0.424,0.358,0.216,0.191,0.097,0.169,0.275,0.131,0.273,0.994,0.424,0.358,0.216,0.191,0.097,0.169,0.275,0.131,0.273,0.994,0.424,0.358,0.216,0.191,0.097,0.169,0.079,0.229,0.14,0.632,0.676,0.554,0.638,0.812,0.824,0.308,0.1,0.049,0.46,0.265,0.228,1,1,1 +11,12,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.609,1,0.4,0.601,1,1,0.027,1,1,1,1,1,1,1,1,1,0.351,1,0.027,0.592,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.147,1,0.401,0.352,0.494,0.773,0.847,1,1,1,1,1,1,1,1,1,1,1,1,1,0.78,0.672,0.825,0.762,0.704,0.606,0.435,0.271,0.25,0.662,0.597,0.657,0.624,0.619,0.628,0.656,0.614,0.648,0.623,0.615,0.273,0.026,0.407,0.115,0.157,0.228,0.092,0.327,0.311,0.13,0.273,0.026,0.407,0.115,0.157,0.228,0.092,0.327,0.311,0.13,0.273,0.026,0.407,0.115,0.157,0.228,0.092,0.327,0.311,0.13,0.273,0.026,0.407,0.115,0.157,0.228,0.092,0.327,0.311,0.13,1,1,1,1,1,1,1,1,1,1,1,1,1,0.783,0.857,0.826,0.828,0.878,0.848,0.79,0.902,0.496,0.101,0.692,0.694,0.699,0.685,0.694,0.682,0.68,0.696,0.655,0.636,1,0.987,0.993,1,0.985,1,0.969,0.539,0.733,0.976,1,0.987,0.993,1,0.985,1,0.969,0.539,0.733,0.976,1,0.987,0.993,1,0.985,1,0.969,0.539,0.733,0.976,1,0.987,0.993,1,0.985,1,0.969,0.539,0.733,0.976,1,1,1,1,1,1,1,1,1,1,1,1,1,0.202,0.323,0.189,0.203,0.194,0.324,0.157,0.23,0.147,0.235,0.469,0.429,0.473,0.043,0.458,0.001,0.367,0,0.395,0,0.225,0.569,0.524,0.923,0.208,0.439,0.038,0.173,0.024,0.137,0.225,0.569,0.524,0.923,0.208,0.439,0.038,0.173,0.024,0.137,0.225,0.569,0.524,0.923,0.208,0.439,0.038,0.173,0.024,0.137,0.225,0.569,0.524,0.923,0.208,0.439,0.038,0.173,0.024,0.137,0.142,0.301,0.194,0.675,0.692,0.572,0.873,0.716,0.738,0.266,0.082,0.03,0.385,0.235,0.244,1,1,1 +12,13,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.63,1,0.401,0.622,1,1,0.027,1,1,1,1,1,1,1,1,1,0.322,1,0.027,0.684,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.129,1,0.401,0.519,0.661,0.826,0.936,1,1,1,1,1,1,1,1,1,1,1,1,1,0.785,0.714,0.807,0.726,0.7,0.596,0.489,0.355,0.406,0.664,0.697,0.695,0.717,0.635,0.674,0.764,0.677,0.672,0.661,0.723,0.53,0.173,0.553,0.21,0.39,0.421,0.09,0.437,0.353,0.149,0.53,0.173,0.553,0.21,0.39,0.421,0.09,0.437,0.353,0.149,0.53,0.173,0.553,0.21,0.39,0.421,0.09,0.437,0.353,0.149,0.53,0.173,0.553,0.21,0.39,0.421,0.09,0.437,0.353,0.149,1,1,1,1,1,1,1,1,1,1,1,1,1,0.771,0.815,0.838,0.768,0.888,0.838,0.762,0.897,0.487,0.069,0.79,0.782,0.793,0.779,0.789,0.786,0.783,0.789,0.769,0.723,1,1,0.992,1,0.995,1,1,0.962,0.928,0.975,1,1,0.992,1,0.995,1,1,0.962,0.928,0.975,1,1,0.992,1,0.995,1,1,0.962,0.928,0.975,1,1,0.992,1,0.995,1,1,0.962,0.928,0.975,1,1,1,1,1,1,1,1,1,1,1,1,1,0.268,0.346,0.203,0.189,0.184,0.318,0.138,0.194,0.129,0.365,0.626,0.599,0.614,0.249,0.601,0.215,0.554,0.215,0.548,0.248,0.354,0.63,0.579,0.902,0.204,0.464,0.027,0.108,0.026,0.08,0.354,0.63,0.579,0.902,0.204,0.464,0.027,0.108,0.026,0.08,0.354,0.63,0.579,0.902,0.204,0.464,0.027,0.108,0.026,0.08,0.354,0.63,0.579,0.902,0.204,0.464,0.027,0.108,0.026,0.08,0.225,0.384,0.256,0.707,0.695,0.6,0.841,0.647,0.66,0.19,0.08,0.025,0.364,0.207,0.176,1,1,1 +13,14,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.61,1,0.401,0.621,1,1,0.027,1,1,1,1,1,1,1,1,1,0.218,1,0.027,0.735,1,1,0.401,1,1,1,1,1,1,1,1,1,1,1,0.155,1,0.401,0.617,0.754,0.78,0.958,1,1,1,1,1,1,1,1,1,1,1,1,1,0.714,0.629,0.772,0.636,0.698,0.587,0.499,0.435,0.518,0.654,0.734,0.697,0.752,0.637,0.678,0.811,0.695,0.666,0.666,0.79,0.587,0.178,0.657,0.192,0.483,0.28,0.097,0.455,0.399,0.133,0.587,0.178,0.657,0.192,0.483,0.28,0.097,0.455,0.399,0.133,0.587,0.178,0.657,0.192,0.483,0.28,0.097,0.455,0.399,0.133,0.587,0.178,0.657,0.192,0.483,0.28,0.097,0.455,0.399,0.133,1,1,1,1,1,1,1,1,1,1,1,1,1,0.59,0.661,0.733,0.583,0.839,0.714,0.694,0.739,0.441,0.004,0.826,0.827,0.835,0.834,0.834,0.838,0.834,0.826,0.826,0.761,1,1,0.995,1,0.993,1,1,0.965,1,0.98,1,1,0.995,1,0.993,1,1,0.965,1,0.98,1,1,0.995,1,0.993,1,1,0.965,1,0.98,1,1,0.995,1,0.993,1,1,0.965,1,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,0.303,0.334,0.211,0.161,0.18,0.497,0.126,0.455,0.132,0.679,0.721,0.689,0.682,0.371,0.667,0.383,0.659,0.423,0.623,0.444,0.302,0.537,0.516,0.895,0.265,0.514,0.097,0.097,0.047,0.072,0.302,0.537,0.516,0.895,0.265,0.514,0.097,0.097,0.047,0.072,0.302,0.537,0.516,0.895,0.265,0.514,0.097,0.097,0.047,0.072,0.302,0.537,0.516,0.895,0.265,0.514,0.097,0.097,0.047,0.072,0.302,0.425,0.325,0.724,0.687,0.603,0.747,0.671,0.604,0.135,0.083,0.033,0.346,0.191,0.148,1,1,1 +14,15,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.626,1,0.402,0.581,1,1,0.027,1,1,1,1,1,1,1,1,1,0.178,1,0.027,0.739,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.172,1,0.4,0.674,0.793,0.64,0.917,1,1,1,1,1,1,1,1,1,1,1,1,1,0.728,0.659,0.771,0.624,0.704,0.575,0.497,0.464,0.42,0.693,0.731,0.667,0.745,0.62,0.661,0.808,0.686,0.645,0.636,0.806,0.665,0.15,0.724,0.172,0.529,0.402,0.18,0.535,0.564,0.071,0.665,0.15,0.724,0.172,0.529,0.402,0.18,0.535,0.564,0.071,0.665,0.15,0.724,0.172,0.529,0.402,0.18,0.535,0.564,0.071,0.665,0.15,0.724,0.172,0.529,0.402,0.18,0.535,0.564,0.071,1,1,1,1,1,1,1,1,1,1,1,1,1,0.549,0.623,0.733,0.473,0.853,0.536,0.632,0.407,0.395,0,0.831,0.839,0.838,0.841,0.828,0.844,0.828,0.816,0.837,0.751,1,1,0.996,1,0.994,1,1,0.966,1,0.98,1,1,0.996,1,0.994,1,1,0.966,1,0.98,1,1,0.996,1,0.994,1,1,0.966,1,0.98,1,1,0.996,1,0.994,1,1,0.966,1,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,0.269,0.285,0.19,0.161,0.149,0.478,0.106,0.398,0.113,0.681,0.768,0.694,0.725,0.427,0.7,0.478,0.714,0.447,0.662,0.5,0.322,0.236,0.396,0.766,0.176,0.53,0.113,0.168,0.092,0.089,0.322,0.236,0.396,0.766,0.176,0.53,0.113,0.168,0.092,0.089,0.322,0.236,0.396,0.766,0.176,0.53,0.113,0.168,0.092,0.089,0.322,0.236,0.396,0.766,0.176,0.53,0.113,0.168,0.092,0.089,0.387,0.445,0.343,0.74,0.684,0.598,0.667,0.553,0.655,0.136,0.083,0.033,0.249,0.182,0.119,1,1,1 +15,16,1,1,0.402,1,1,1,1,1,1,1,1,1,1,1,0.645,1,0.402,0.487,1,1,0.027,1,1,1,1,1,1,1,1,1,0.182,1,0.027,0.706,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.141,1,0.4,0.685,0.788,0.435,0.81,1,1,1,1,1,1,1,1,1,1,1,1,1,0.754,0.698,0.792,0.657,0.736,0.6,0.481,0.427,0.414,0.732,0.674,0.605,0.689,0.565,0.599,0.757,0.635,0.554,0.55,0.747,0.798,0.113,0.737,0.166,0.585,0.343,0.214,0.753,0.694,0.045,0.798,0.113,0.737,0.166,0.585,0.343,0.214,0.753,0.694,0.045,0.798,0.113,0.737,0.166,0.585,0.343,0.214,0.753,0.694,0.045,0.798,0.113,0.737,0.166,0.585,0.343,0.214,0.753,0.694,0.045,1,1,1,1,1,1,1,1,1,1,1,1,1,0.549,0.547,0.738,0.445,0.861,0.566,0.643,0.514,0.376,0,0.794,0.796,0.795,0.799,0.785,0.805,0.802,0.782,0.8,0.725,0.998,1,0.995,1,0.992,1,1,0.942,1,0.984,0.998,1,0.995,1,0.992,1,1,0.942,1,0.984,0.998,1,0.995,1,0.992,1,1,0.942,1,0.984,0.998,1,0.995,1,0.992,1,1,0.942,1,0.984,1,1,1,1,1,1,1,1,1,1,1,1,1,0.223,0.278,0.168,0.169,0.144,0.441,0.104,0.352,0.106,0.717,0.772,0.667,0.723,0.447,0.713,0.452,0.729,0.443,0.651,0.434,0.222,0.218,0.377,0.841,0.119,0.519,0.11,0.115,0.116,0.071,0.222,0.218,0.377,0.841,0.119,0.519,0.11,0.115,0.116,0.071,0.222,0.218,0.377,0.841,0.119,0.519,0.11,0.115,0.116,0.071,0.222,0.218,0.377,0.841,0.119,0.519,0.11,0.115,0.116,0.071,0.456,0.47,0.361,0.732,0.665,0.595,0.633,0.439,0.487,0.144,0.083,0.033,0.212,0.182,0.098,1,1,1 +16,17,1,1,0.403,1,1,1,1,1,1,1,1,1,1,1,0.641,1,0.403,0.328,1,1,0.027,1,1,1,1,1,1,1,1,1,0.187,1,0.027,0.618,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.123,1,0.4,0.661,0.7,0.229,0.624,1,1,1,1,1,1,1,1,1,1,1,1,1,0.761,0.692,0.794,0.659,0.729,0.601,0.468,0.374,0.366,0.742,0.543,0.463,0.565,0.415,0.455,0.642,0.52,0.407,0.399,0.646,0.821,0.167,0.74,0.287,0.64,0.327,0.211,0.719,0.744,0.054,0.821,0.167,0.74,0.287,0.64,0.327,0.211,0.719,0.744,0.054,0.821,0.167,0.74,0.287,0.64,0.327,0.211,0.719,0.744,0.054,0.821,0.167,0.74,0.287,0.64,0.327,0.211,0.719,0.744,0.054,1,1,1,1,1,1,1,1,1,1,1,1,1,0.589,0.581,0.746,0.462,0.82,0.533,0.625,0.47,0.421,0,0.698,0.698,0.7,0.706,0.697,0.715,0.715,0.691,0.72,0.648,0.976,1,0.994,1,0.994,1,1,0.968,1,0.984,0.976,1,0.994,1,0.994,1,1,0.968,1,0.984,0.976,1,0.994,1,0.994,1,1,0.968,1,0.984,0.976,1,0.994,1,0.994,1,1,0.968,1,0.984,1,1,1,1,1,1,1,1,1,1,1,1,1,0.202,0.239,0.158,0.157,0.139,0.378,0.097,0.215,0.083,0.668,0.732,0.595,0.678,0.421,0.667,0.432,0.697,0.441,0.591,0.44,0.058,0.184,0.365,0.735,0.101,0.519,0.169,0.202,0.163,0.1,0.058,0.184,0.365,0.735,0.101,0.519,0.169,0.202,0.163,0.1,0.058,0.184,0.365,0.735,0.101,0.519,0.169,0.202,0.163,0.1,0.058,0.184,0.365,0.735,0.101,0.519,0.169,0.202,0.163,0.1,0.473,0.517,0.379,0.722,0.638,0.566,0.643,0.481,0.404,0.142,0.088,0.033,0.186,0.182,0.095,1,1,1 +17,18,1,1,0.403,1,1,1,1,1,1,1,1,1,1,1,0.669,1,0.403,0.114,1,1,0.026,1,1,1,1,1,1,1,1,1,0.173,1,0.026,0.493,1,1,0.4,1,1,1,1,1,1,1,1,1,1,1,0.202,1,0.4,0.609,0.526,0.062,0.343,1,1,1,1,1,1,1,1,1,1,1,1,1,0.703,0.645,0.787,0.654,0.923,0.745,0.786,0.92,0.786,0.754,0.377,0.205,0.386,0.147,0.218,0.483,0.323,0.161,0.183,0.469,0.803,0.447,0.667,0.193,0.52,0.253,0.016,0.78,0.768,0.006,0.803,0.447,0.667,0.193,0.52,0.253,0.016,0.78,0.768,0.006,0.803,0.447,0.667,0.193,0.52,0.253,0.016,0.78,0.768,0.006,0.803,0.447,0.667,0.193,0.52,0.253,0.016,0.78,0.768,0.006,1,1,1,1,1,1,1,1,1,1,1,1,1,0.516,0.508,0.677,0.433,0.849,0.502,0.603,0.374,0.402,0,0.556,0.559,0.562,0.573,0.561,0.586,0.583,0.546,0.599,0.474,0.965,1,0.978,0.854,0.917,1,1,0.849,0.998,0.978,0.965,1,0.978,0.854,0.917,1,1,0.849,0.998,0.978,0.965,1,0.978,0.854,0.917,1,1,0.849,0.998,0.978,0.965,1,0.978,0.854,0.917,1,1,0.849,0.998,0.978,1,1,1,1,1,1,1,1,1,1,1,1,1,0.232,0.377,0.232,0.182,0.211,0.609,0.164,0.467,0.147,0.868,0.675,0.51,0.594,0.321,0.567,0.373,0.608,0.4,0.482,0.467,0.282,0.517,0.566,0.992,0.27,0.573,0.169,0,0.384,0,0.282,0.517,0.566,0.992,0.27,0.573,0.169,0,0.384,0,0.282,0.517,0.566,0.992,0.27,0.573,0.169,0,0.384,0,0.282,0.517,0.566,0.992,0.27,0.573,0.169,0,0.384,0,0.496,0.519,0.413,0.708,0.604,0.523,0.461,0.594,0.466,0.148,0.096,0.034,0.173,0.202,0.089,1,1,1 +18,19,1,1,0.404,1,1,1,1,1,1,1,1,1,1,1,0.671,1,0.404,0.034,1,1,0.026,1,1,1,1,1,1,1,1,1,0.178,1,0.026,0.264,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.22,1,0.399,0.471,0.246,0.002,0.013,1,1,1,1,1,1,1,1,1,1,1,1,1,0.673,0.637,0.755,0.641,0.847,0.748,0.813,0.926,0.87,0.74,0.106,0.011,0.076,0.001,0.001,0.124,0.033,0.005,0.007,0.112,0.877,0.648,0.809,0.356,0.615,0.474,0.015,0.753,0.795,0.003,0.877,0.648,0.809,0.356,0.615,0.474,0.015,0.753,0.795,0.003,0.877,0.648,0.809,0.356,0.615,0.474,0.015,0.753,0.795,0.003,0.877,0.648,0.809,0.356,0.615,0.474,0.015,0.753,0.795,0.003,1,1,1,1,1,1,1,1,1,1,1,1,1,0.633,0.57,0.744,0.505,0.834,0.536,0.568,0.405,0.363,0,0.297,0.291,0.299,0.308,0.298,0.326,0.33,0.28,0.344,0.232,0.922,1,0.977,0.849,0.978,1,1,0.915,0.985,0.911,0.922,1,0.977,0.849,0.978,1,1,0.915,0.985,0.911,0.922,1,0.977,0.849,0.978,1,1,0.915,0.985,0.911,0.922,1,0.977,0.849,0.978,1,1,0.915,0.985,0.911,1,1,1,1,1,1,1,1,1,1,1,1,1,0.291,0.323,0.257,0.182,0.227,0.535,0.171,0.38,0.137,0.869,0.515,0.297,0.408,0.178,0.369,0.347,0.44,0.314,0.294,0.295,0.405,0.651,0.686,0.993,0.318,0.568,0.073,0,0.282,0,0.405,0.651,0.686,0.993,0.318,0.568,0.073,0,0.282,0,0.405,0.651,0.686,0.993,0.318,0.568,0.073,0,0.282,0,0.405,0.651,0.686,0.993,0.318,0.568,0.073,0,0.282,0,0.532,0.563,0.392,0.677,0.579,0.481,0.431,0.621,0.573,0.155,0.097,0.036,0.173,0.184,0.109,1,1,1 +19,20,1,1,0.404,1,1,1,1,1,1,1,1,1,1,1,0.648,1,0.404,0,1,1,0.026,1,1,1,1,1,1,1,1,1,0.145,1,0.026,0,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.237,1,0.399,0.255,0.041,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.717,0.598,0.801,0.668,0.885,0.777,0.835,0.915,0.919,0.713,0,0,0,0,0,0,0,0,0,0,0.935,0.636,0.896,0.64,0.768,0.481,0.022,0.895,0.87,0.002,0.935,0.636,0.896,0.64,0.768,0.481,0.022,0.895,0.87,0.002,0.935,0.636,0.896,0.64,0.768,0.481,0.022,0.895,0.87,0.002,0.935,0.636,0.896,0.64,0.768,0.481,0.022,0.895,0.87,0.002,1,1,1,1,1,1,1,1,1,1,1,1,1,0.642,0.514,0.753,0.469,0.813,0.494,0.566,0.294,0.445,0.003,0,0,0,0,0,0,0,0,0,0,0.999,1,0.995,1,0.994,1,1,0.961,0.998,0.954,0.999,1,0.995,1,0.994,1,1,0.961,0.998,0.954,0.999,1,0.995,1,0.994,1,1,0.961,0.998,0.954,0.999,1,0.995,1,0.994,1,1,0.961,0.998,0.954,1,1,1,1,1,1,1,1,1,1,1,1,1,0.241,0.308,0.298,0.198,0.256,0.446,0.19,0.315,0.144,0.73,0.254,0.031,0.165,0.05,0.126,0.138,0.144,0.13,0.077,0.083,0.503,0.718,0.723,0.993,0.367,0.582,0.075,0.001,0.209,0,0.503,0.718,0.723,0.993,0.367,0.582,0.075,0.001,0.209,0,0.503,0.718,0.723,0.993,0.367,0.582,0.075,0.001,0.209,0,0.503,0.718,0.723,0.993,0.367,0.582,0.075,0.001,0.209,0,0.565,0.595,0.489,0.65,0.542,0.485,0.532,0.683,0.618,0.173,0.083,0.025,0.191,0.175,0.079,1,1,1 +20,21,1,1,0.405,1,1,1,1,1,1,1,1,1,1,1,0.66,1,0.405,0,1,1,0.026,1,1,1,1,1,1,1,1,1,0.16,1,0.026,0,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.24,1,0.399,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.768,0.665,0.817,0.692,0.892,0.792,0.884,0.94,0.941,0.725,0,0,0,0,0,0,0,0,0,0,0.975,0.649,0.922,0.767,0.884,0.413,0.045,0.948,0.943,0.005,0.975,0.649,0.922,0.767,0.884,0.413,0.045,0.948,0.943,0.005,0.975,0.649,0.922,0.767,0.884,0.413,0.045,0.948,0.943,0.005,0.975,0.649,0.922,0.767,0.884,0.413,0.045,0.948,0.943,0.005,1,1,1,1,1,1,1,1,1,1,1,1,1,0.764,0.746,0.86,0.643,0.874,0.618,0.741,0.341,0.619,0.046,0,0,0,0,0,0,0,0,0,0,1,1,0.995,1,0.995,1,1,0.971,1,0.978,1,1,0.995,1,0.995,1,1,0.971,1,0.978,1,1,0.995,1,0.995,1,1,0.971,1,0.978,1,1,0.995,1,0.995,1,1,0.971,1,0.978,1,1,1,1,1,1,1,1,1,1,1,1,1,0.246,0.322,0.407,0.315,0.375,0.403,0.305,0.318,0.224,0.649,0,0,0,0,0,0,0,0,0,0,0.531,0.783,0.713,0.993,0.355,0.51,0.023,0,0.064,0,0.531,0.783,0.713,0.993,0.355,0.51,0.023,0,0.064,0,0.531,0.783,0.713,0.993,0.355,0.51,0.023,0,0.064,0,0.531,0.783,0.713,0.993,0.355,0.51,0.023,0,0.064,0,0.585,0.54,0.498,0.637,0.509,0.452,0.64,0.678,0.716,0.157,0.08,0.02,0.189,0.186,0.076,1,1,1 +21,22,1,1,0.405,1,1,1,1,1,1,1,1,1,1,1,0.671,1,0.405,0,1,1,0.026,1,1,1,1,1,1,1,1,1,0.187,1,0.026,0,1,1,0.399,1,1,1,1,1,1,1,1,1,1,1,0.25,1,0.399,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.797,0.689,0.841,0.702,0.959,0.802,0.927,0.94,0.951,0.714,0,0,0,0,0,0,0,0,0,0,0.987,0.909,0.961,0.909,0.956,0.468,0.072,0.978,0.962,0.006,0.987,0.909,0.961,0.909,0.956,0.468,0.072,0.978,0.962,0.006,0.987,0.909,0.961,0.909,0.956,0.468,0.072,0.978,0.962,0.006,0.987,0.909,0.961,0.909,0.956,0.468,0.072,0.978,0.962,0.006,1,1,1,1,1,1,1,1,1,1,1,1,1,0.816,0.702,0.864,0.736,0.889,0.783,0.839,0.646,0.738,0.189,0,0,0,0,0,0,0,0,0,0,1,1,0.995,1,0.995,1,1,0.973,1,0.98,1,1,0.995,1,0.995,1,1,0.973,1,0.98,1,1,0.995,1,0.995,1,1,0.973,1,0.98,1,1,0.995,1,0.995,1,1,0.973,1,0.98,1,1,1,1,1,1,1,1,1,1,1,1,1,0.226,0.332,0.44,0.373,0.429,0.46,0.361,0.35,0.281,0.575,0,0,0,0,0,0,0,0,0,0,0.56,0.841,0.719,0.99,0.357,0.471,0.027,0,0.034,0,0.56,0.841,0.719,0.99,0.357,0.471,0.027,0,0.034,0,0.56,0.841,0.719,0.99,0.357,0.471,0.027,0,0.034,0,0.56,0.841,0.719,0.99,0.357,0.471,0.027,0,0.034,0,0.658,0.457,0.436,0.613,0.468,0.423,0.65,0.622,0.681,0.103,0.088,0.024,0.148,0.215,0.087,1,1,1 +22,23,1,1,0.406,1,1,1,1,1,1,1,1,1,1,1,0.697,1,0.406,0,1,1,0.026,1,1,1,1,1,1,1,1,1,0.21,1,0.026,0,1,1,0.398,1,1,1,1,1,1,1,1,1,1,1,0.235,1,0.398,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.846,0.751,0.858,0.711,0.968,0.8,0.929,0.938,0.955,0.687,0,0,0,0,0,0,0,0,0,0,0.987,0.999,0.969,0.944,0.954,0.661,0.111,0.983,0.964,0.005,0.987,0.999,0.969,0.944,0.954,0.661,0.111,0.983,0.964,0.005,0.987,0.999,0.969,0.944,0.954,0.661,0.111,0.983,0.964,0.005,0.987,0.999,0.969,0.944,0.954,0.661,0.111,0.983,0.964,0.005,1,1,1,1,1,1,1,1,1,1,1,1,1,0.819,0.734,0.857,0.708,0.938,0.826,0.905,0.816,0.845,0.324,0,0,0,0,0,0,0,0,0,0,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,1,1,1,1,1,1,1,1,1,1,1,0.172,0.39,0.463,0.42,0.455,0.44,0.395,0.328,0.31,0.364,0,0,0,0,0,0,0,0,0,0,0.573,0.838,0.762,0.947,0.367,0.572,0.073,0,0.11,0,0.573,0.838,0.762,0.947,0.367,0.572,0.073,0,0.11,0,0.573,0.838,0.762,0.947,0.367,0.572,0.073,0,0.11,0,0.573,0.838,0.762,0.947,0.367,0.572,0.073,0,0.11,0,0.617,0.369,0.373,0.571,0.422,0.39,0.719,0.528,0.631,0.082,0.098,0.021,0.161,0.262,0.115,1,1,1 +23,24,1,1,0.406,1,1,1,1,1,1,1,1,1,1,1,0.695,1,0.406,0,1,1,0.026,1,1,1,1,1,1,1,1,1,0.221,1,0.026,0,1,1,0.398,1,1,1,1,1,1,1,1,1,1,1,0.239,1,0.398,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0.842,0.766,0.855,0.694,0.972,0.793,0.92,0.941,0.952,0.675,0,0,0,0,0,0,0,0,0,0,0.986,0.999,0.941,0.937,0.954,0.661,0.202,0.982,0.963,0.011,0.986,0.999,0.941,0.937,0.954,0.661,0.202,0.982,0.963,0.011,0.986,0.999,0.941,0.937,0.954,0.661,0.202,0.982,0.963,0.011,0.986,0.999,0.941,0.937,0.954,0.661,0.202,0.982,0.963,0.011,1,1,1,1,1,1,1,1,1,1,1,1,1,0.837,0.767,0.854,0.705,0.948,0.826,0.918,0.869,0.83,0.157,0,0,0,0,0,0,0,0,0,0,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,0.996,1,0.996,1,1,0.977,1,0.982,1,1,1,1,1,1,1,1,1,1,1,1,1,0.202,0.448,0.463,0.416,0.444,0.483,0.4,0.393,0.344,0.428,0,0,0,0,0,0,0,0,0,0,0.574,0.845,0.806,0.935,0.387,0.641,0.033,0,0.088,0,0.574,0.845,0.806,0.935,0.387,0.641,0.033,0,0.088,0,0.574,0.845,0.806,0.935,0.387,0.641,0.033,0,0.088,0,0.574,0.845,0.806,0.935,0.387,0.641,0.033,0,0.088,0,0.524,0.266,0.292,0.532,0.373,0.349,0.658,0.424,0.517,0.093,0.107,0.017,0.187,0.313,0.169,1,1,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Maximum_capacity_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Maximum_capacity_requirement.csv new file mode 100644 index 0000000000..f92a4c0fa9 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Maximum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MaxCapReqConstraint,Constraint_Description,Max_MW +1,LDES_1,0 +2,LDES_2,0 +3,LDES_3,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Minimum_capacity_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Minimum_capacity_requirement.csv new file mode 100644 index 0000000000..858294b6fc --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Minimum_capacity_requirement.csv @@ -0,0 +1,4 @@ +MinCapReqConstraint,Constraint_Description,Min_MW +1,ME_Wind,8000 +2,ME_OSW,5000 +3,MA_Solar,3200 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Network.csv b/test/LoadResourceData/test_gen_vre_stor/Network.csv new file mode 100644 index 0000000000..1a7000a3b6 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Network.csv @@ -0,0 +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,,,,,,,,,,,,,,,, diff --git a/test/LoadResourceData/test_gen_vre_stor/Reserves.csv b/test/LoadResourceData/test_gen_vre_stor/Reserves.csv new file mode 100644 index 0000000000..d310c45ffb --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Reserves.csv @@ -0,0 +1,2 @@ +Reg_Req_Percent_Demand,Reg_Req_Percent_VRE,Rsv_Req_Percent_Demand,Rsv_Req_Percent_VRE,Unmet_Rsv_Penalty_Dollar_per_MW,Dynamic_Contingency,Static_Contingency_MW +0.01,0.0032,0.033,0.0795,1000,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Flex_demand.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Flex_demand.csv new file mode 100644 index 0000000000..8f187e97d2 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Flex_demand.csv @@ -0,0 +1,16 @@ +Resource,Zone,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Max_Flexible_Demand_Delay,Max_Flexible_Demand_Advance,Flexible_Demand_Energy_Eff,region,technology,cluster +WECC_trans_light_duty_1,3,0,88930.5,0,0,0,0,0,5,0,1,WECC,trans_light_duty,1 +EIC_trans_light_duty_1,1,0,227552.1,0,0,0,0,0,5,0,1,EIC,trans_light_duty,1 +TRE_trans_light_duty_1,2,0,34387.8,0,0,0,0,0,5,0,1,TRE,trans_light_duty,1 +WECC_comm_water_heat_1,3,0,1130.3,0,0,0,0,0,2,2,1,WECC,comm_water_heat,1 +EIC_comm_water_heat_1,1,0,2922.1,0,0,0,0,0,2,2,1,EIC,comm_water_heat,1 +TRE_comm_water_heat_1,2,0,368.7,0,0,0,0,0,2,2,1,TRE,comm_water_heat,1 +WECC_res_water_heat_1,3,0,2578.7,0,0,0,0,0,2,2,1,WECC,res_water_heat,1 +EIC_res_water_heat_1,1,0,8238.2,0,0,0,0,0,2,2,1,EIC,res_water_heat,1 +TRE_res_water_heat_1,2,0,1049.5,0,0,0,0,0,2,2,1,TRE,res_water_heat,1 +WECC_comm_space_heat_cool_1,3,0,7483.3,0,0,0,0,0,1,1,1,WECC,comm_space_heat_cool,1 +EIC_comm_space_heat_cool_1,1,0,41624.8,0,0,0,0,0,1,1,1,EIC,comm_space_heat_cool,1 +TRE_comm_space_heat_cool_1,2,0,6978.6,0,0,0,0,0,1,1,1,TRE,comm_space_heat_cool,1 +WECC_res_space_heat_cool_1,3,0,12467.5,0,0,0,0,0,1,1,1,WECC,res_space_heat_cool,1 +EIC_res_space_heat_cool_1,1,0,47457,0,0,0,0,0,1,1,1,EIC,res_space_heat_cool,1 +TRE_res_space_heat_cool_1,2,0,7585.9,0,0,0,0,0,1,1,1,TRE,res_space_heat_cool,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Hydro.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Hydro.csv new file mode 100644 index 0000000000..c73b4b625d --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Hydro.csv @@ -0,0 +1,4 @@ +Resource Zone Existing_Cap_MWh Existing_Cap_MW New_Build Can_Retire Cap_Size Min_Cap_MW Max_Cap_MW Inv_Cost_per_MWyr Fixed_OM_Cost_per_MWyr Var_OM_Cost_per_MWh Heat_Rate_MMBTU_per_MWh Fuel Min_Power Self_Disch Eff_Up Eff_Down Hydro_Energy_to_Power_Ratio Ramp_Up_Percentage Ramp_Dn_Percentage Up_Time Down_Time region technology cluster +EIC_conventional_hydroelectric_1 1 0 24200.8 0 0 32.35 0 0 0 47048 0 10.34 None 0.273 0 1 1 1 1 1 0 0 EIC Conventional Hydroelectric 1 +TRE_conventional_hydroelectric_1 2 0 477 0 0 25.1 0 0 0 47048 0 10.34 None 0 0 1 1 1 1 1 0 0 TRE Conventional Hydroelectric 1 +WECC_conventional_hydroelectric_1 3 0 46528 0 0 72.7 0 0 0 47048 0 10.34 None 0.214 0 1 1 1 1 1 0 0 WECC Conventional Hydroelectric 1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Must_run.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Must_run.csv new file mode 100644 index 0000000000..300177484d --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Must_run.csv @@ -0,0 +1,10 @@ +Resource Zone Existing_Cap_MWh Existing_Cap_MW New_Build Can_Retire Cap_Size Min_Cap_MW Max_Cap_MW Inv_Cost_per_MWyr Fixed_OM_Cost_per_MWyr Var_OM_Cost_per_MWh Start_Cost_per_MW Heat_Rate_MMBTU_per_MWh Fuel Min_Power Self_Disch Eff_Up Eff_Down Ramp_Up_Percentage Ramp_Dn_Percentage Up_Time Down_Time region technology cluster +EIC_biomass_1 1 0 1722.5 0 0 1.27 0 0 0 150850 7.32 172 17.03 biomass 0.308 0 1 1 1 1 0 0 EIC Biomass 1 +EIC_small_hydroelectric_1 1 0 1672.2 0 0 1.06 0 0 0 47048 0 0 10.34 None 0.273 0 1 1 1 1 0 0 EIC Small Hydroelectric 1 +TRE_biomass_1 2 0 44.5 0 0 1.48 0 0 0 150850 6.51 172 15.15 biomass 0.591 0 1 1 1 1 0 0 TRE Biomass 1 +TRE_small_hydroelectric_1 2 0 11.2 0 0 0.75 0 0 0 47048 0 0 10.34 None 0 0 1 1 1 1 0 0 TRE Small Hydroelectric 1 +WECC_biomass_1 3 0 551 0 0 2.01 0 0 0 150850 7.14 172 16.63 biomass 0.362 0 1 1 1 1 0 0 WECC Biomass 1 +WECC_small_hydroelectric_1 3 0 1064.3 0 0 1.62 0 0 0 47048 0 0 10.34 None 0.181 0 1 1 1 1 0 0 WECC Small Hydroelectric 1 +WECC_distributed_generation_1 3 0 250535 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 WECC distributed_generation 1 +EIC_distributed_generation_1 1 0 1770000 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 EIC distributed_generation 1 +TRE_distributed_generation_1 2 0 17006 0 0 0 0 0 0 0 0 0 0 None 0 0 1 1 1 1 0 0 TRE distributed_generation 1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_capacity_reserve_margin.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_capacity_reserve_margin.csv new file mode 100644 index 0000000000..3a11636a20 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_capacity_reserve_margin.csv @@ -0,0 +1,272 @@ +Resource,Derating_Factor_1,Derating_Factor_2,Derating_Factor_3 +EIC_landbasedwind_class1_moderate_0,0.95,0,0 +EIC_landbasedwind_class1_moderate_1,0.95,0,0 +EIC_landbasedwind_class1_moderate_2,0.95,0,0 +EIC_landbasedwind_class1_moderate_3,0.95,0,0 +EIC_landbasedwind_class1_moderate_4,0.95,0,0 +EIC_landbasedwind_class1_moderate_5,0.95,0,0 +EIC_landbasedwind_class1_moderate_6,0.95,0,0 +EIC_landbasedwind_class1_moderate_7,0.95,0,0 +EIC_landbasedwind_class1_moderate_8,0.95,0,0 +EIC_landbasedwind_class1_moderate_9,0.95,0,0 +EIC_storage_metalair_advanced_0,0.95,0,0 +EIC_utilitypv_class1_moderate_0,0.95,0,0 +EIC_utilitypv_class1_moderate_1,0.95,0,0 +EIC_utilitypv_class1_moderate_2,0.95,0,0 +EIC_utilitypv_class1_moderate_3,0.95,0,0 +EIC_utilitypv_class1_moderate_4,0.95,0,0 +EIC_utilitypv_class1_moderate_5,0.95,0,0 +EIC_utilitypv_class1_moderate_6,0.95,0,0 +EIC_utilitypv_class1_moderate_7,0.95,0,0 +EIC_utilitypv_class1_moderate_8,0.95,0,0 +EIC_utilitypv_class1_moderate_9,0.95,0,0 +TRE_landbasedwind_class1_moderate_0,0,0.95,0 +TRE_landbasedwind_class1_moderate_1,0,0.95,0 +TRE_landbasedwind_class1_moderate_2,0,0.95,0 +TRE_landbasedwind_class1_moderate_3,0,0.95,0 +TRE_landbasedwind_class1_moderate_4,0,0.95,0 +TRE_landbasedwind_class1_moderate_5,0,0.95,0 +TRE_landbasedwind_class1_moderate_6,0,0.95,0 +TRE_landbasedwind_class1_moderate_7,0,0.95,0 +TRE_landbasedwind_class1_moderate_8,0,0.95,0 +TRE_landbasedwind_class1_moderate_9,0,0.95,0 +TRE_storage_metalair_advanced_0,0,0.95,0 +TRE_utilitypv_class1_moderate_0,0,0.95,0 +TRE_utilitypv_class1_moderate_1,0,0.95,0 +TRE_utilitypv_class1_moderate_2,0,0.95,0 +TRE_utilitypv_class1_moderate_3,0,0.95,0 +TRE_utilitypv_class1_moderate_4,0,0.95,0 +TRE_utilitypv_class1_moderate_5,0,0.95,0 +TRE_utilitypv_class1_moderate_6,0,0.95,0 +TRE_utilitypv_class1_moderate_7,0,0.95,0 +TRE_utilitypv_class1_moderate_8,0,0.95,0 +TRE_utilitypv_class1_moderate_9,0,0.95,0 +WECC_landbasedwind_class1_moderate_0,0,0,0.95 +WECC_landbasedwind_class1_moderate_1,0,0,0.95 +WECC_landbasedwind_class1_moderate_2,0,0,0.95 +WECC_landbasedwind_class1_moderate_3,0,0,0.95 +WECC_landbasedwind_class1_moderate_4,0,0,0.95 +WECC_landbasedwind_class1_moderate_5,0,0,0.95 +WECC_landbasedwind_class1_moderate_6,0,0,0.95 +WECC_landbasedwind_class1_moderate_7,0,0,0.95 +WECC_landbasedwind_class1_moderate_8,0,0,0.95 +WECC_landbasedwind_class1_moderate_9,0,0,0.95 +WECC_storage_metalair_advanced_0,0,0,0.95 +WECC_utilitypv_class1_moderate_0,0,0,0.95 +WECC_utilitypv_class1_moderate_1,0,0,0.95 +WECC_utilitypv_class1_moderate_2,0,0,0.95 +WECC_utilitypv_class1_moderate_3,0,0,0.95 +WECC_utilitypv_class1_moderate_4,0,0,0.95 +WECC_utilitypv_class1_moderate_5,0,0,0.95 +WECC_utilitypv_class1_moderate_6,0,0,0.95 +WECC_utilitypv_class1_moderate_7,0,0,0.95 +WECC_utilitypv_class1_moderate_8,0,0,0.95 +WECC_utilitypv_class1_moderate_9,0,0,0.95 +EIC_batteries_1,0,0,0.95 +EIC_biomass_1,0.95,0,0 +EIC_conventional_hydroelectric_1,0,0.95,0 +EIC_conventional_steam_coal_1,0,0,0.95 +EIC_conventional_steam_coal_2,0.95,0,0 +EIC_hydroelectric_pumped_storage_1,0,0.95,0 +EIC_natural_gas_fired_combined_cycle_1,0,0,0.95 +EIC_natural_gas_fired_combined_cycle_2,0.95,0,0 +EIC_natural_gas_fired_combustion_turbine_1,0,0.95,0 +EIC_natural_gas_fired_combustion_turbine_2,0,0,0.95 +EIC_natural_gas_internal_combustion_engine_1,0.95,0,0 +EIC_natural_gas_steam_turbine_1,0,0.95,0 +EIC_nuclear_1,0,0,0.95 +EIC_offshore_wind_turbine_1,0.95,0,0 +EIC_onshore_wind_turbine_1,0,0.95,0 +EIC_petroleum_liquids_1,0.8,0,0 +EIC_small_hydroelectric_1,0,0.8,0 +EIC_solar_photovoltaic_1,0,0,0.8 +TRE_batteries_1,0.93,0,0 +TRE_biomass_1,0.8,0,0 +TRE_conventional_hydroelectric_1,0,0.93,0 +TRE_conventional_steam_coal_1,0,0.8,0 +TRE_conventional_steam_coal_2,0,0,0.93 +TRE_natural_gas_fired_combined_cycle_1,0,0,0.8 +TRE_natural_gas_fired_combined_cycle_2,0,0,0.8 +TRE_natural_gas_fired_combustion_turbine_1,0.8,0,0 +TRE_natural_gas_fired_combustion_turbine_2,0,0.8,0 +TRE_natural_gas_internal_combustion_engine_1,0.95,0,0 +TRE_natural_gas_steam_turbine_1,0.95,0,0 +TRE_nuclear_1,0,0.95,0 +TRE_onshore_wind_turbine_1,0,0,0.95 +TRE_petroleum_liquids_1,0,0,0.95 +TRE_small_hydroelectric_1,0.95,0,0 +TRE_solar_photovoltaic_1,0,0.95,0 +WECC_batteries_1,0,0,0.95 +WECC_biomass_1,0.93,0,0 +WECC_conventional_hydroelectric_1,0.93,0,0 +WECC_conventional_steam_coal_1,0.93,0,0 +WECC_conventional_steam_coal_2,0.93,0,0 +WECC_geothermal_1,0.93,0,0 +WECC_hydroelectric_pumped_storage_1,0.93,0,0 +WECC_natural_gas_fired_combined_cycle_1,0.93,0,0 +WECC_natural_gas_fired_combined_cycle_2,0.93,0,0 +WECC_natural_gas_fired_combustion_turbine_1,0.93,0,0 +WECC_natural_gas_fired_combustion_turbine_2,0.93,0,0 +WECC_natural_gas_internal_combustion_engine_1,0,0.93,0 +WECC_natural_gas_steam_turbine_1,0,0.93,0 +WECC_nuclear_1,0,0.93,0 +WECC_onshore_wind_turbine_1,0,0.93,0 +WECC_petroleum_liquids_1,0,0.93,0 +WECC_small_hydroelectric_1,0,0.93,0 +WECC_solar_photovoltaic_1,0,0.93,0 +WECC_distributed_generation_1,0,0.93,0 +EIC_distributed_generation_1,0,0.93,0 +TRE_distributed_generation_1,0,0.93,0 +EIC_naturalgas_ccavgcf_moderate_0,0,0,0.93 +EIC_naturalgas_ctavgcf_moderate_0,0,0,0.93 +EIC_battery_moderate_0,0,0,0.93 +EIC_naturalgas_ccccsavgcf_conservative_0,0,0,0.93 +EIC_advnuclear_atb_moderate_0,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_0,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_1,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_2,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_3,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_4,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_1_5,0.93,0,0 +EIC_offshorewind_class3_moderate_fixed_1_6,0.93,0,0 +EIC_offshorewind_class3_moderate_fixed_1_7,0.93,0,0 +EIC_offshorewind_class3_moderate_fixed_1_8,0.93,0,0 +EIC_offshorewind_class3_moderate_fixed_1_9,0,0.93,0 +EIC_offshorewind_class3_moderate_fixed_0_0,0,0.93,0 +EIC_offshorewind_class3_moderate_fixed_0_1,0,0.93,0 +EIC_offshorewind_class3_moderate_fixed_0_4,0,0.93,0 +EIC_offshorewind_class3_moderate_fixed_0_5,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_0_10,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_0_11,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_0_18,0,0,0.93 +EIC_offshorewind_class3_moderate_fixed_0_19,0.93,0,0 +EIC_offshorewind_class3_moderate_fixed_0_28,0,0.93,0 +EIC_offshorewind_class3_moderate_fixed_0_29,0,0,0.93 +EIC_offshorewind_class12_moderate_floating_1_0,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_1,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_6,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_7,0,0.8,0 +EIC_offshorewind_class12_moderate_floating_1_18,0,0.8,0 +EIC_offshorewind_class12_moderate_floating_1_19,0,0,0.93 +EIC_offshorewind_class12_moderate_floating_1_38,0,0,0.8 +EIC_offshorewind_class12_moderate_floating_1_39,0,0,0.8 +EIC_offshorewind_class12_moderate_floating_1_68,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_1_69,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_0,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_1,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_8,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_9,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_28,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_29,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_68,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_69,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_138,0.8,0,0 +EIC_offshorewind_class12_moderate_floating_0_139,0.8,0,0 +TRE_naturalgas_ccavgcf_moderate_0,0.8,0,0 +TRE_naturalgas_ctavgcf_moderate_0,0.8,0,0 +TRE_battery_moderate_0,0.8,0,0 +TRE_naturalgas_ccccsavgcf_conservative_0,0.8,0,0 +TRE_advnuclear_atb_moderate_0,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_0,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_1,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_2,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_3,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_4,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_5,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_6,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_7,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_8,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_1_9,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_0,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_1,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_4,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_5,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_10,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_11,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_18,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_19,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_28,0.8,0,0 +TRE_offshorewind_class3_moderate_fixed_0_29,0.8,0,0 +TRE_offshorewind_class12_moderate_floating_1_0,0.8,0,0 +TRE_offshorewind_class12_moderate_floating_1_1,0.8,0,0 +TRE_offshorewind_class12_moderate_floating_1_6,0.8,0,0 +TRE_offshorewind_class12_moderate_floating_1_7,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_18,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_19,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_38,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_39,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_68,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_1_69,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_0,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_1,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_8,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_9,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_28,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_29,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_68,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_69,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_138,0,0.8,0 +TRE_offshorewind_class12_moderate_floating_0_139,0,0.8,0 +WECC_naturalgas_ccavgcf_moderate_0,0,0.8,0 +WECC_naturalgas_ctavgcf_moderate_0,0,0.8,0 +WECC_battery_moderate_0,0,0.8,0 +WECC_naturalgas_ccccsavgcf_conservative_0,0,0.8,0 +WECC_advnuclear_atb_moderate_0,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_0,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_1,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_2,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_3,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_4,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_5,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_6,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_7,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_8,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_1_9,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_0,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_1,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_4,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_5,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_10,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_11,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_18,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_19,0,0.8,0 +WECC_offshorewind_class3_moderate_fixed_0_28,0,0,0.8 +WECC_offshorewind_class3_moderate_fixed_0_29,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_0,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_1,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_6,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_7,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_18,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_19,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_38,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_39,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_68,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_1_69,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_0,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_1,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_8,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_9,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_28,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_29,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_68,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_69,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_138,0,0,0.8 +WECC_offshorewind_class12_moderate_floating_0_139,0,0,0.8 +WECC_trans_light_duty_1,0,0,0.8 +EIC_trans_light_duty_1,0,0,0.8 +TRE_trans_light_duty_1,0,0,0.8 +WECC_comm_water_heat_1,0,0,0.8 +EIC_comm_water_heat_1,0,0,0.8 +TRE_comm_water_heat_1,0,0,0.8 +WECC_res_water_heat_1,0,0,0.8 +EIC_res_water_heat_1,0,0,0.8 +TRE_res_water_heat_1,0,0,0.8 +WECC_comm_space_heat_cool_1,0,0,0.8 +EIC_comm_space_heat_cool_1,0,0,0.8 +TRE_comm_space_heat_cool_1,0,0,0.8 +WECC_res_space_heat_cool_1,0,0,0.8 +EIC_res_space_heat_cool_1,0,0,0.8 +TRE_res_space_heat_cool_1,0,0,0.8 +EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0.8 +TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0.8 +WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,0,0,0.8 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_energy_share_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_energy_share_requirement.csv new file mode 100644 index 0000000000..0c1731c66e --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_energy_share_requirement.csv @@ -0,0 +1,2 @@ +Resource,ESR_VREStor_1,ESR_VREStor_2 +EIC_landbasedwind_class1_moderate_0,1,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_maximum_capacity_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_maximum_capacity_requirement.csv new file mode 100644 index 0000000000..deedb55676 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_maximum_capacity_requirement.csv @@ -0,0 +1,2 @@ +Resource,Max_Cap_1,Max_Cap_2,Max_Cap_3,Max_Cap_Stor_1,Max_Cap_Solar_1,Max_Cap_Wind_1,Max_Cap_Stor_2,Max_Cap_Solar_2,Max_Cap_Wind_2,Max_Cap_Stor_3,Max_Cap_Solar_3,Max_Cap_Wind_3 +EIC_landbasedwind_class1_moderate_0,0,0,0,1,1,1,1,1,1,1,1,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_minimum_capacity_requirement.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_minimum_capacity_requirement.csv new file mode 100644 index 0000000000..2e6c81d4fa --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Resource_minimum_capacity_requirement.csv @@ -0,0 +1,2 @@ +Resource,Min_Cap_1,Min_Cap_2,Min_Cap_3,Min_Cap_Stor_1,Min_Cap_Solar_1,Min_Cap_Wind_1,Min_Cap_Stor_2,Min_Cap_Solar_2,Min_Cap_Wind_2,Min_Cap_Stor_3,Min_Cap_Solar_3,Min_Cap_Wind_3 +EIC_landbasedwind_class1_moderate_0,0,0,0,1,1,1,1,1,1,1,1,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Storage.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Storage.csv new file mode 100644 index 0000000000..b1369bf4fe --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Storage.csv @@ -0,0 +1,9 @@ +Resource,Zone,Model,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Max_Cap_MW,Max_Cap_MWh,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Var_OM_Cost_per_MWh_In,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Self_Disch,Eff_Up,Eff_Down,Min_Duration,Max_Duration,region,technology,cluster +EIC_batteries_1,1,1,1424.4,712.2,0,0,16.96,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.041,0,0.92,0.92,1,10,EIC,Batteries,1 +EIC_hydroelectric_pumped_storage_1,1,1,275638,17783.1,0,0,170.99,0,0,0,47048,0,0,0.15,0.15,10.34,None,0.524,0,0.866,0.866,1,20,EIC,Hydroelectric Pumped Storage,1 +TRE_batteries_1,2,1,721.4,360.7,0,0,45.09,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.001,0,0.92,0.92,1,10,TRE,Batteries,1 +WECC_batteries_1,3,1,3611,1357.5,0,0,28.28,0,0,0,6235,0,0,0.15,0.15,10.34,None,0.02,0,0.92,0.92,1,10,WECC,Batteries,1 +WECC_hydroelectric_pumped_storage_1,3,1,70790,4567.1,0,0,101.49,0,0,0,47048,0,0,0.15,0.15,10.34,None,0.175,0,0.866,0.866,1,20,WECC,Hydroelectric Pumped Storage,1 +EIC_battery_moderate_0,1,1,0,0,1,1,1,-1,-1,19978,5955,11897,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,EIC,Battery_*_Moderate,0 +TRE_battery_moderate_0,2,1,0,0,1,1,1,-1,-1,19389,5955,11546,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,TRE,Battery_*_Moderate,0 +WECC_battery_moderate_0,3,1,0,0,1,1,1,-1,-1,20202,5955,12030,3546,0.15,0.15,0,None,0,0,0.92,0.92,1,10,WECC,Battery_*_Moderate,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Thermal.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Thermal.csv new file mode 100644 index 0000000000..72354a8148 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Thermal.csv @@ -0,0 +1,46 @@ +Resource,Zone,Model,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Start_Cost_per_MW,Start_Fuel_MMBTU_per_MW,Heat_Rate_MMBTU_per_MWh,Fuel,Min_Power,Min_Duration,Max_Duration,Reg_Max,Rsv_Max,Reg_Cost,Rsv_Cost,CO2_Capture_Rate,CO2_Capture_Cost_per_Metric_Ton,Ramp_Up_Percentage,Ramp_Dn_Percentage,Up_Time,Down_Time,region,technology,cluster +EIC_conventional_steam_coal_1,1,1,0,12806.9,0,1,177.87,0,0,0,78258,1.88,124,16.5,13.34,east_north_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,EIC,Conventional Steam Coal,1 +EIC_conventional_steam_coal_2,1,1,0,109345.4,0,1,584.74,0,0,0,64567,1.88,124,16.5,10.89,east_north_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,EIC,Conventional Steam Coal,2 +EIC_natural_gas_fired_combined_cycle_1,1,1,0,27155.3,0,1,163.59,0,0,0,16322,4.53,92,2,9.24,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Fired Combined Cycle,1 +EIC_natural_gas_fired_combined_cycle_2,1,1,0,169897.4,0,1,638.71,0,0,0,11042,3.58,92,2,7.34,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Fired Combined Cycle,2 +EIC_natural_gas_fired_combustion_turbine_1,1,1,0,98926.5,0,1,100.13,0,0,0,10031,5.28,119,3.5,12.03,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Fired Combustion Turbine,1 +EIC_natural_gas_fired_combustion_turbine_2,1,1,0,10412.9,0,1,31.27,0,0,0,13557,5.28,119,3.5,14.66,east_north_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Fired Combustion Turbine,2 +EIC_natural_gas_internal_combustion_engine_1,1,1,0,2578.5,0,1,4.44,0,0,0,21000,5.29,38,0,10.29,east_north_central_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,EIC,Natural Gas Internal Combustion Engine,1 +EIC_natural_gas_steam_turbine_1,1,1,0,39625.2,0,1,203.21,0,0,0,35537,1.06,87,13.7,12.8,east_north_central_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,EIC,Natural Gas Steam Turbine,1 +EIC_nuclear_1,1,1,0,82406.6,0,1,1030.08,0,0,0,214812,2.84,248,0,10.45,east_north_central_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,EIC,Nuclear,1 +EIC_petroleum_liquids_1,1,1,0,23196.2,0,1,9.96,0,0,0,21000,7.97,38,0,15.5,east_north_central_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,Petroleum Liquids,1 +TRE_conventional_steam_coal_1,2,1,0,5063.6,0,1,723.37,0,0,0,60405,1.88,124,16.5,10.33,west_south_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,TRE,Conventional Steam Coal,1 +TRE_conventional_steam_coal_2,2,1,0,3713,0,1,530.43,0,0,0,68432,1.88,124,16.5,12.13,west_south_central_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,TRE,Conventional Steam Coal,2 +TRE_natural_gas_fired_combined_cycle_1,2,1,0,30139.1,0,1,579.6,0,0,0,10912,3.59,92,2,7.72,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Fired Combined Cycle,1 +TRE_natural_gas_fired_combined_cycle_2,2,1,0,6317.6,0,1,315.88,0,0,0,15698,4.36,92,2,9.8,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Fired Combined Cycle,2 +TRE_natural_gas_fired_combustion_turbine_1,2,1,0,2924,0,1,81.22,0,0,0,10001,5.28,119,3.5,14.08,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Fired Combustion Turbine,1 +TRE_natural_gas_fired_combustion_turbine_2,2,1,0,2826.9,0,1,50.48,0,0,0,11926,5.28,119,3.5,11.11,west_south_central_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Fired Combustion Turbine,2 +TRE_natural_gas_internal_combustion_engine_1,2,1,0,502.7,0,1,10.7,0,0,0,21000,4.72,38,0,9.18,west_south_central_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,TRE,Natural Gas Internal Combustion Engine,1 +TRE_natural_gas_steam_turbine_1,2,1,0,8249.5,0,1,235.7,0,0,0,34182,1.06,87,13.7,13.24,west_south_central_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,TRE,Natural Gas Steam Turbine,1 +TRE_nuclear_1,2,1,0,5120,0,1,1280,0,0,0,193275,2.84,248,0,10.45,west_south_central_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,TRE,Nuclear,1 +TRE_petroleum_liquids_1,2,1,0,23.7,0,1,1.48,0,0,0,21000,6.38,38,0,12.4,west_south_central_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,Petroleum Liquids,1 +WECC_conventional_steam_coal_1,3,1,0,11415.2,0,1,496.31,0,0,0,64165,1.88,124,16.5,10.63,mountain_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,WECC,Conventional Steam Coal,1 +WECC_conventional_steam_coal_2,3,1,0,2074.5,0,1,129.66,0,0,0,77721,1.88,124,16.5,12.2,mountain_coal,0.5,0,0,0.095,0.19,0,0,0,0,0.57,0.57,24,24,WECC,Conventional Steam Coal,2 +WECC_natural_gas_fired_combined_cycle_1,3,1,0,37593.3,0,1,475.86,0,0,0,10399,3.6,92,2,7.78,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Fired Combined Cycle,1 +WECC_natural_gas_fired_combined_cycle_2,3,1,0,12502.4,0,1,158.26,0,0,0,16492,4.55,92,2,8.51,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Fired Combined Cycle,2 +WECC_natural_gas_fired_combustion_turbine_1,3,1,0,15252.7,0,1,71.61,0,0,0,10479,5.28,119,3.5,11.06,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Fired Combustion Turbine,1 +WECC_natural_gas_fired_combustion_turbine_2,3,1,0,6281.6,0,1,27.92,0,0,0,13486,5.28,119,3.5,12.78,mountain_naturalgas,0.3,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Fired Combustion Turbine,2 +WECC_natural_gas_internal_combustion_engine_1,3,1,0,1282.7,0,1,6.51,0,0,0,21000,4.88,38,0,9.49,mountain_naturalgas,0.18,0,0,0.106666667,0.213333333,0,0,0,0,3.78,3.78,1,1,WECC,Natural Gas Internal Combustion Engine,1 +WECC_natural_gas_steam_turbine_1,3,1,0,2669.5,0,1,95.34,0,0,0,51303,1.06,87,13.7,12.4,mountain_naturalgas,0.5,0,0,0.63,1.26,0,0,0,0,0.64,0.64,6,6,WECC,Natural Gas Steam Turbine,1 +WECC_nuclear_1,3,1,0,5175,0,1,1293.75,0,0,0,211822,2.84,248,0,10.45,mountain_uranium,0.5,0,0,0.041666667,0.083333333,0,0,0,0,0.25,0.25,24,24,WECC,Nuclear,1 +WECC_petroleum_liquids_1,3,1,0,636.2,0,1,4.24,0,0,0,21000,7.2,38,0,14,mountain_distillate,0.18,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,Petroleum Liquids,1 +EIC_naturalgas_ccavgcf_moderate_0,1,1,0,0,1,1,500,0,-1,56026,28000,2,106,2,6.36,east_north_central_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,EIC,NaturalGas_CCAvgCF_Moderate,0 +EIC_naturalgas_ctavgcf_moderate_0,1,1,0,0,1,1,100,0,-1,45192,21000,5,137,3.5,9.72,east_north_central_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,NaturalGas_CTAvgCF_Moderate,0 +EIC_naturalgas_ccccsavgcf_conservative_0,1,1,0,0,1,1,500,0,-1,120812,67000,6,106,0,7.16,east_north_central_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,EIC,NaturalGas_CCCCSAvgCF_Conservative,0 +EIC_advnuclear_atb_moderate_0,1,1,0,0,1,1,500,0,-1,45000,0,2.84,285,0,10.44,east_north_central_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,EIC,AdvNuclear_ATB_Moderate,0 +TRE_naturalgas_ccavgcf_moderate_0,2,1,0,0,1,1,500,0,-1,42007,28000,2,106,2,6.36,west_south_central_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,TRE,NaturalGas_CCAvgCF_Moderate,0 +TRE_naturalgas_ctavgcf_moderate_0,2,1,0,0,1,1,100,0,-1,35319,21000,5,137,3.5,9.72,west_south_central_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,NaturalGas_CTAvgCF_Moderate,0 +TRE_naturalgas_ccccsavgcf_conservative_0,2,1,0,0,1,1,500,0,-1,106685,67000,6,106,0,7.16,west_south_central_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,TRE,NaturalGas_CCCCSAvgCF_Conservative,0 +TRE_advnuclear_atb_moderate_0,2,1,0,0,1,1,500,0,-1,450000,0,2.84,285,0,10.44,west_south_central_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,TRE,AdvNuclear_ATB_Moderate,0 +WECC_naturalgas_ccavgcf_moderate_0,3,1,0,0,1,1,500,0,-1,59543,28000,2,106,2,6.36,mountain_naturalgas,0.3,0,0,0,0,0,0,0,0,0.64,0.64,6,6,WECC,NaturalGas_CCAvgCF_Moderate,0 +WECC_naturalgas_ctavgcf_moderate_0,3,1,0,0,1,1,100,0,-1,45587,21000,5,137,3.5,9.72,mountain_naturalgas,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,NaturalGas_CTAvgCF_Moderate,0 +WECC_naturalgas_ccccsavgcf_conservative_0,3,1,0,0,1,1,500,0,-1,119927,67000,6,106,0,7.16,mountain_naturalgas,0.6,0,0,0.106666667,0.213333333,0,0,0.9,27,0.64,0.64,6,6,WECC,NaturalGas_CCCCSAvgCF_Conservative,0 +WECC_advnuclear_atb_moderate_0,3,1,0,0,1,1,500,0,-1,450000,0,2.84,285,0,10.44,mountain_uranium,0.5,0,0,0,0,0,0,0,0,0.25,0.25,24,24,WECC,AdvNuclear_ATB_Moderate,0 +EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,1,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,EIC,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 +TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,2,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,TRE,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 +WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,3,1,0,0,1,1,100,0,-1,61000,0,5,137,3.5,9.72,zerocarbon_fuel,0.3,0,0,0,0,0,0,0,0,3.78,3.78,1,1,WECC,NaturalGas_CTAvgCF_Moderate_zerocarbon,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Vre.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Vre.csv new file mode 100644 index 0000000000..53da51313f --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Vre.csv @@ -0,0 +1,129 @@ +Resource,Zone,Num_VRE_Bins,Existing_Cap_MWh,Existing_Cap_MW,New_Build,Can_Retire,Cap_Size,Min_Cap_MW,Max_Cap_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Var_OM_Cost_per_MWh,Heat_Rate_MMBTU_per_MWh,Fuel,Self_Disch,Eff_Up,Eff_Down,Ramp_Up_Percentage,Ramp_Dn_Percentage,region,technology,cluster +EIC_offshore_wind_turbine_1,1,1,0,29.3,0,1,29.3,0,0,0,111496,0,10.34,None,0,1,1,1,1,EIC,Offshore Wind Turbine,1 +EIC_onshore_wind_turbine_1,1,1,0,47407.4,0,1,66.77,0,0,0,43000,0,10.34,None,0,1,1,1,1,EIC,Onshore Wind Turbine,1 +EIC_solar_photovoltaic_1,1,1,0,8533.9,0,1,5.95,0,0,0,22623,0,10.34,None,0,1,1,1,1,EIC,Solar Photovoltaic,1 +TRE_onshore_wind_turbine_1,2,1,0,21683.1,0,1,163.03,0,0,0,43000,0,10.34,None,0,1,1,1,1,TRE,Onshore Wind Turbine,1 +TRE_solar_photovoltaic_1,2,1,0,1821.5,0,1,65.05,0,0,0,22623,0,10.34,None,0,1,1,1,1,TRE,Solar Photovoltaic,1 +WECC_geothermal_1,3,1,0,1752.4,0,0,12,0,0,0,209101,0,10.34,None,0,1,1,1,1,WECC,Geothermal,1 +WECC_onshore_wind_turbine_1,3,1,0,20644.2,0,1,68.81,0,0,0,43000,0,10.34,None,0,1,1,1,1,WECC,Onshore Wind Turbine,1 +WECC_solar_photovoltaic_1,3,1,0,14659.8,0,1,14.87,0,0,0,22623,0,10.34,None,0,1,1,1,1,WECC,Solar Photovoltaic,1 +EIC_offshorewind_class3_moderate_fixed_1_0,1,1,0,0,1,1,1,0,65762.8,147250,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,0 +EIC_offshorewind_class3_moderate_fixed_1_1,1,1,0,0,1,1,1,0,14399.2,157328,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,1 +EIC_offshorewind_class3_moderate_fixed_1_2,1,1,0,0,1,1,1,0,34280.8,153961,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,2 +EIC_offshorewind_class3_moderate_fixed_1_3,1,1,0,0,1,1,1,0,101840.5,168852,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,3 +EIC_offshorewind_class3_moderate_fixed_1_4,1,1,0,0,1,1,1,0,118605,164784,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,4 +EIC_offshorewind_class3_moderate_fixed_1_5,1,1,0,0,1,1,1,0,18875.6,146792,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,5 +EIC_offshorewind_class3_moderate_fixed_1_6,1,1,0,0,1,1,1,0,79943.7,144977,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,6 +EIC_offshorewind_class3_moderate_fixed_1_7,1,1,0,0,1,1,1,0,23454.7,347411,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,7 +EIC_offshorewind_class3_moderate_fixed_1_8,1,1,0,0,1,1,1,0,59461.7,393568,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,8 +EIC_offshorewind_class3_moderate_fixed_1_9,1,1,0,0,1,1,1,0,73503.9,155384,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_1,9 +EIC_offshorewind_class3_moderate_fixed_0_0,1,1,0,0,1,1,1,0,65762.8,147250,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,0 +EIC_offshorewind_class3_moderate_fixed_0_1,1,1,0,0,1,1,1,0,14399.2,157328,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,1 +EIC_offshorewind_class3_moderate_fixed_0_4,1,1,0,0,1,1,1,0,34280.8,153961,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,4 +EIC_offshorewind_class3_moderate_fixed_0_5,1,1,0,0,1,1,1,0,101840.5,168852,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,5 +EIC_offshorewind_class3_moderate_fixed_0_10,1,1,0,0,1,1,1,0,118605,164784,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,10 +EIC_offshorewind_class3_moderate_fixed_0_11,1,1,0,0,1,1,1,0,18875.6,146792,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,11 +EIC_offshorewind_class3_moderate_fixed_0_18,1,1,0,0,1,1,1,0,79943.7,144977,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,18 +EIC_offshorewind_class3_moderate_fixed_0_19,1,1,0,0,1,1,1,0,23454.7,347411,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,19 +EIC_offshorewind_class3_moderate_fixed_0_28,1,1,0,0,1,1,1,0,59461.7,393568,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,28 +EIC_offshorewind_class3_moderate_fixed_0_29,1,1,0,0,1,1,1,0,73503.9,155384,78449,0,0,None,0,0,0,0,0,EIC,OffShoreWind_Class3_Moderate_fixed_0,29 +EIC_offshorewind_class12_moderate_floating_1_0,1,1,0,0,1,1,1,0,65762.8,204577,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,0 +EIC_offshorewind_class12_moderate_floating_1_1,1,1,0,0,1,1,1,0,14399.2,214655,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,1 +EIC_offshorewind_class12_moderate_floating_1_6,1,1,0,0,1,1,1,0,34280.8,211288,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,6 +EIC_offshorewind_class12_moderate_floating_1_7,1,1,0,0,1,1,1,0,101840.5,226179,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,7 +EIC_offshorewind_class12_moderate_floating_1_18,1,1,0,0,1,1,1,0,118605,222111,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,18 +EIC_offshorewind_class12_moderate_floating_1_19,1,1,0,0,1,1,1,0,18875.6,204119,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,19 +EIC_offshorewind_class12_moderate_floating_1_38,1,1,0,0,1,1,1,0,79943.7,202304,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,38 +EIC_offshorewind_class12_moderate_floating_1_39,1,1,0,0,1,1,1,0,23454.7,404738,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,39 +EIC_offshorewind_class12_moderate_floating_1_68,1,1,0,0,1,1,1,0,59461.7,450895,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,68 +EIC_offshorewind_class12_moderate_floating_1_69,1,1,0,0,1,1,1,0,73503.9,212711,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_1,69 +EIC_offshorewind_class12_moderate_floating_0_0,1,1,0,0,1,1,1,0,65762.8,204577,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,0 +EIC_offshorewind_class12_moderate_floating_0_1,1,1,0,0,1,1,1,0,14399.2,214655,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,1 +EIC_offshorewind_class12_moderate_floating_0_8,1,1,0,0,1,1,1,0,34280.8,211288,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,8 +EIC_offshorewind_class12_moderate_floating_0_9,1,1,0,0,1,1,1,0,101840.5,226179,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,9 +EIC_offshorewind_class12_moderate_floating_0_28,1,1,0,0,1,1,1,0,118605,222111,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,28 +EIC_offshorewind_class12_moderate_floating_0_29,1,1,0,0,1,1,1,0,18875.6,204119,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,29 +EIC_offshorewind_class12_moderate_floating_0_68,1,1,0,0,1,1,1,0,79943.7,202304,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,68 +EIC_offshorewind_class12_moderate_floating_0_69,1,1,0,0,1,1,1,0,23454.7,404738,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,69 +EIC_offshorewind_class12_moderate_floating_0_138,1,1,0,0,1,1,1,0,59461.7,450895,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,138 +EIC_offshorewind_class12_moderate_floating_0_139,1,1,0,0,1,1,1,0,73503.9,212711,68827,0,0,None,0,1,1,1,1,EIC,OffShoreWind_Class12_Moderate_floating_0,139 +TRE_offshorewind_class3_moderate_fixed_1_0,2,1,0,0,1,1,1,0,13077.5,145004,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,0 +TRE_offshorewind_class3_moderate_fixed_1_1,2,1,0,0,1,1,1,0,9995,158104,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,1 +TRE_offshorewind_class3_moderate_fixed_1_2,2,1,0,0,1,1,1,0,22842.5,140443,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,2 +TRE_offshorewind_class3_moderate_fixed_1_3,2,1,0,0,1,1,1,0,895,157772,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,3 +TRE_offshorewind_class3_moderate_fixed_1_4,2,1,0,0,1,1,1,0,20865,142961,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,4 +TRE_offshorewind_class3_moderate_fixed_1_5,2,1,0,0,1,1,1,0,4480,166128,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,5 +TRE_offshorewind_class3_moderate_fixed_1_6,2,1,0,0,1,1,1,0,23652,166849,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,6 +TRE_offshorewind_class3_moderate_fixed_1_7,2,1,0,0,1,1,1,0,10070,157895,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,7 +TRE_offshorewind_class3_moderate_fixed_1_8,2,1,0,0,1,1,1,0,20680,167576,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,8 +TRE_offshorewind_class3_moderate_fixed_1_9,2,1,0,0,1,1,1,0,16746,156072,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_1,9 +TRE_offshorewind_class3_moderate_fixed_0_0,2,1,0,0,1,1,1,0,13077.5,145004,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,0 +TRE_offshorewind_class3_moderate_fixed_0_1,2,1,0,0,1,1,1,0,9995,158104,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,1 +TRE_offshorewind_class3_moderate_fixed_0_4,2,1,0,0,1,1,1,0,22842.5,140443,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,4 +TRE_offshorewind_class3_moderate_fixed_0_5,2,1,0,0,1,1,1,0,895,157772,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,5 +TRE_offshorewind_class3_moderate_fixed_0_10,2,1,0,0,1,1,1,0,20865,142961,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,10 +TRE_offshorewind_class3_moderate_fixed_0_11,2,1,0,0,1,1,1,0,4480,166128,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,11 +TRE_offshorewind_class3_moderate_fixed_0_18,2,1,0,0,1,1,1,0,23652,166849,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,18 +TRE_offshorewind_class3_moderate_fixed_0_19,2,1,0,0,1,1,1,0,10070,157895,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,19 +TRE_offshorewind_class3_moderate_fixed_0_28,2,1,0,0,1,1,1,0,20680,167576,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,28 +TRE_offshorewind_class3_moderate_fixed_0_29,2,1,0,0,1,1,1,0,16746,156072,78449,0,0,None,0,0,0,0,0,TRE,OffShoreWind_Class3_Moderate_fixed_0,29 +TRE_offshorewind_class12_moderate_floating_1_0,2,1,0,0,1,1,1,0,13077.5,200994,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,0 +TRE_offshorewind_class12_moderate_floating_1_1,2,1,0,0,1,1,1,0,9995,214094,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,1 +TRE_offshorewind_class12_moderate_floating_1_6,2,1,0,0,1,1,1,0,22842.5,196433,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,6 +TRE_offshorewind_class12_moderate_floating_1_7,2,1,0,0,1,1,1,0,895,213762,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,7 +TRE_offshorewind_class12_moderate_floating_1_18,2,1,0,0,1,1,1,0,20865,198951,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,18 +TRE_offshorewind_class12_moderate_floating_1_19,2,1,0,0,1,1,1,0,4480,222118,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,19 +TRE_offshorewind_class12_moderate_floating_1_38,2,1,0,0,1,1,1,0,23652,222839,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,38 +TRE_offshorewind_class12_moderate_floating_1_39,2,1,0,0,1,1,1,0,10070,213885,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,39 +TRE_offshorewind_class12_moderate_floating_1_68,2,1,0,0,1,1,1,0,20680,223566,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,68 +TRE_offshorewind_class12_moderate_floating_1_69,2,1,0,0,1,1,1,0,16746,212062,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_1,69 +TRE_offshorewind_class12_moderate_floating_0_0,2,1,0,0,1,1,1,0,13077.5,200994,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,0 +TRE_offshorewind_class12_moderate_floating_0_1,2,1,0,0,1,1,1,0,9995,214094,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,1 +TRE_offshorewind_class12_moderate_floating_0_8,2,1,0,0,1,1,1,0,22842.5,196433,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,8 +TRE_offshorewind_class12_moderate_floating_0_9,2,1,0,0,1,1,1,0,895,213762,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,9 +TRE_offshorewind_class12_moderate_floating_0_28,2,1,0,0,1,1,1,0,20865,198951,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,28 +TRE_offshorewind_class12_moderate_floating_0_29,2,1,0,0,1,1,1,0,4480,222118,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,29 +TRE_offshorewind_class12_moderate_floating_0_68,2,1,0,0,1,1,1,0,23652,222839,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,68 +TRE_offshorewind_class12_moderate_floating_0_69,2,1,0,0,1,1,1,0,10070,213885,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,69 +TRE_offshorewind_class12_moderate_floating_0_138,2,1,0,0,1,1,1,0,20680,223566,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,138 +TRE_offshorewind_class12_moderate_floating_0_139,2,1,0,0,1,1,1,0,16746,212062,68827,0,0,None,0,1,1,1,1,TRE,OffShoreWind_Class12_Moderate_floating_0,139 +WECC_offshorewind_class3_moderate_fixed_1_0,3,1,0,0,1,1,1,0,26916.5,174794,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,0 +WECC_offshorewind_class3_moderate_fixed_1_1,3,1,0,0,1,1,1,0,29943.3,179346,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,1 +WECC_offshorewind_class3_moderate_fixed_1_2,3,1,0,0,1,1,1,0,39553.5,177553,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,2 +WECC_offshorewind_class3_moderate_fixed_1_3,3,1,0,0,1,1,1,0,18780,162737,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,3 +WECC_offshorewind_class3_moderate_fixed_1_4,3,1,0,0,1,1,1,0,19994,174072,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,4 +WECC_offshorewind_class3_moderate_fixed_1_5,3,1,0,0,1,1,1,0,36016,175097,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,5 +WECC_offshorewind_class3_moderate_fixed_1_6,3,1,0,0,1,1,1,0,53762,174641,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,6 +WECC_offshorewind_class3_moderate_fixed_1_7,3,1,0,0,1,1,1,0,1544,151442,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,7 +WECC_offshorewind_class3_moderate_fixed_1_8,3,1,0,0,1,1,1,0,44128,176829,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,8 +WECC_offshorewind_class3_moderate_fixed_1_9,3,1,0,0,1,1,1,0,9122,151351,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_1,9 +WECC_offshorewind_class3_moderate_fixed_0_0,3,1,0,0,1,1,1,0,26916.5,174794,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,0 +WECC_offshorewind_class3_moderate_fixed_0_1,3,1,0,0,1,1,1,0,29943.3,179346,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,1 +WECC_offshorewind_class3_moderate_fixed_0_4,3,1,0,0,1,1,1,0,39553.5,177553,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,4 +WECC_offshorewind_class3_moderate_fixed_0_5,3,1,0,0,1,1,1,0,18780,162737,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,5 +WECC_offshorewind_class3_moderate_fixed_0_10,3,1,0,0,1,1,1,0,19994,174072,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,10 +WECC_offshorewind_class3_moderate_fixed_0_11,3,1,0,0,1,1,1,0,36016,175097,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,11 +WECC_offshorewind_class3_moderate_fixed_0_18,3,1,0,0,1,1,1,0,53762,174641,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,18 +WECC_offshorewind_class3_moderate_fixed_0_19,3,1,0,0,1,1,1,0,1544,151442,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,19 +WECC_offshorewind_class3_moderate_fixed_0_28,3,1,0,0,1,1,1,0,44128,176829,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,28 +WECC_offshorewind_class3_moderate_fixed_0_29,3,1,0,0,1,1,1,0,9122,151351,78449,0,0,None,0,0,0,0,0,WECC,OffShoreWind_Class3_Moderate_fixed_0,29 +WECC_offshorewind_class12_moderate_floating_1_0,3,1,0,0,1,1,1,0,26916.5,232121,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,0 +WECC_offshorewind_class12_moderate_floating_1_1,3,1,0,0,1,1,1,0,29943.3,236673,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,1 +WECC_offshorewind_class12_moderate_floating_1_6,3,1,0,0,1,1,1,0,39553.5,234880,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,6 +WECC_offshorewind_class12_moderate_floating_1_7,3,1,0,0,1,1,1,0,18780,220064,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,7 +WECC_offshorewind_class12_moderate_floating_1_18,3,1,0,0,1,1,1,0,19994,231399,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,18 +WECC_offshorewind_class12_moderate_floating_1_19,3,1,0,0,1,1,1,0,36016,232424,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,19 +WECC_offshorewind_class12_moderate_floating_1_38,3,1,0,0,1,1,1,0,53762,231968,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,38 +WECC_offshorewind_class12_moderate_floating_1_39,3,1,0,0,1,1,1,0,1544,208769,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,39 +WECC_offshorewind_class12_moderate_floating_1_68,3,1,0,0,1,1,1,0,44128,234156,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,68 +WECC_offshorewind_class12_moderate_floating_1_69,3,1,0,0,1,1,1,0,9122,208678,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_1,69 +WECC_offshorewind_class12_moderate_floating_0_0,3,1,0,0,1,1,1,0,26916.5,232121,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,0 +WECC_offshorewind_class12_moderate_floating_0_1,3,1,0,0,1,1,1,0,29943.3,236673,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,1 +WECC_offshorewind_class12_moderate_floating_0_8,3,1,0,0,1,1,1,0,39553.5,234880,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,8 +WECC_offshorewind_class12_moderate_floating_0_9,3,1,0,0,1,1,1,0,18780,220064,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,9 +WECC_offshorewind_class12_moderate_floating_0_28,3,1,0,0,1,1,1,0,19994,231399,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,28 +WECC_offshorewind_class12_moderate_floating_0_29,3,1,0,0,1,1,1,0,36016,232424,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,29 +WECC_offshorewind_class12_moderate_floating_0_68,3,1,0,0,1,1,1,0,53762,231968,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,68 +WECC_offshorewind_class12_moderate_floating_0_69,3,1,0,0,1,1,1,0,1544,208769,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,69 +WECC_offshorewind_class12_moderate_floating_0_138,3,1,0,0,1,1,1,0,44128,234156,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,138 +WECC_offshorewind_class12_moderate_floating_0_139,3,1,0,0,1,1,1,0,9122,208678,68827,0,0,None,0,1,1,1,1,WECC,OffShoreWind_Class12_Moderate_floating_0,139 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Resources/Vre_stor.csv b/test/LoadResourceData/test_gen_vre_stor/Resources/Vre_stor.csv new file mode 100644 index 0000000000..e6991dff9a --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Resources/Vre_stor.csv @@ -0,0 +1,64 @@ +Resource,Zone,SOLAR,WIND,STOR_DC_DISCHARGE,STOR_DC_CHARGE,STOR_AC_DISCHARGE,STOR_AC_CHARGE,LDS_VRE_STOR,Existing_Cap_MW,Existing_Cap_MWh,Existing_Cap_Inverter_MW,Existing_Cap_Solar_MW,Existing_Cap_Wind_MW,Existing_Cap_Discharge_DC_MW,Existing_Cap_Charge_DC_MW,Existing_Cap_Discharge_AC_MW,Existing_Cap_Charge_AC_MW,New_Build,Can_Retire,Min_Cap_MW,Min_Cap_MWh,Min_Cap_Inverter_MW,Min_Cap_Solar_MW,Min_Cap_Wind_MW,Min_Cap_Discharge_DC_MW,Min_Cap_Charge_DC_MW,Min_Cap_Discharge_AC_MW,Min_Cap_Charge_AC_MW,Max_Cap_MW,Max_Cap_MWh,Max_Cap_Inverter_MW,Max_Cap_Solar_MW,Max_Cap_Wind_MW,Max_Cap_Discharge_DC_MW,Max_Cap_Charge_DC_MW,Max_Cap_Discharge_AC_MW,Max_Cap_Charge_AC_MW,Inv_Cost_per_MWyr,Fixed_OM_Cost_per_MWyr,Inv_Cost_per_MWhyr,Fixed_OM_Cost_per_MWhyr,Var_OM_Cost_per_MWh,Inv_Cost_Inverter_per_MWyr,Inv_Cost_Solar_per_MWyr,Inv_Cost_Wind_per_MWyr,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_Inverter_Cost_per_MWyr,Fixed_OM_Solar_Cost_per_MWyr,Fixed_OM_Wind_Cost_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_Discharge_DC,Var_OM_Cost_per_MWh_Charge_DC,Var_OM_Cost_per_MWh_Discharge_AC,Var_OM_Cost_per_MWh_Charge_AC,EtaInverter,Inverter_Ratio_Wind,Inverter_Ratio_Solar,Power_to_Energy_DC,Power_to_Energy_AC,Self_Disch,Eff_Up_DC,Eff_Down_DC,Eff_Up_AC,Eff_Down_AC,region,Resource_Type,technology,cluster +EIC_landbasedwind_class1_moderate_0,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,117315.5,-1,-1,-1,-1,14198,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +EIC_landbasedwind_class1_moderate_1,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,139803.7,-1,-1,-1,-1,17082,0,0,0,0.15,7522,0,56817,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +EIC_landbasedwind_class1_moderate_2,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,114313.7,-1,-1,-1,-1,17267,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +EIC_landbasedwind_class1_moderate_3,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,81237.6,-1,-1,-1,-1,25483,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +EIC_landbasedwind_class1_moderate_4,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,81092.2,-1,-1,-1,-1,16488,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +EIC_landbasedwind_class1_moderate_5,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,54453.3,-1,-1,-1,-1,25720,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +EIC_landbasedwind_class1_moderate_6,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,82417.2,-1,-1,-1,-1,21224,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +EIC_landbasedwind_class1_moderate_7,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,26531.1,-1,-1,-1,-1,32633,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +EIC_landbasedwind_class1_moderate_8,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,58187.4,-1,-1,-1,-1,28526,0,0,0,0.15,7522,0,56817,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +EIC_landbasedwind_class1_moderate_9,1,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,194921.8,-1,-1,-1,-1,244462,0,0,0,0.15,7522,0,56816,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +EIC_storage_metalair_advanced_0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7522,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,standalone_storage,Storage_MetalAir_Advanced,0 +EIC_utilitypv_class1_moderate_0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1351663.04,-1,-1,-1,-1,-1,8863,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,0 +EIC_utilitypv_class1_moderate_1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,787394.14,-1,-1,-1,-1,-1,4464,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,1 +EIC_utilitypv_class1_moderate_2,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1683583.59,-1,-1,-1,-1,-1,14630,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,2 +EIC_utilitypv_class1_moderate_3,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1148387.24,-1,-1,-1,-1,-1,10126,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,3 +EIC_utilitypv_class1_moderate_4,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,2254699.98,-1,-1,-1,-1,-1,16248,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,4 +EIC_utilitypv_class1_moderate_5,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,879389.55,-1,-1,-1,-1,-1,22825,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,5 +EIC_utilitypv_class1_moderate_6,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1998829.95,-1,-1,-1,-1,-1,24566,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,6 +EIC_utilitypv_class1_moderate_7,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1123362.89,-1,-1,-1,-1,-1,21181,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,7 +EIC_utilitypv_class1_moderate_8,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,2501477.94,-1,-1,-1,-1,-1,32414,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,8 +EIC_utilitypv_class1_moderate_9,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,326479.4,-1,-1,-1,-1,-1,148669,0,0,0,0.15,7522,22706,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,EIC,hybrid_pv,UtilityPV_Class1_Moderate_,9 +TRE_landbasedwind_class1_moderate_0,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,20796.6,-1,-1,-1,-1,14393,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +TRE_landbasedwind_class1_moderate_1,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,27529.5,-1,-1,-1,-1,20298,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +TRE_landbasedwind_class1_moderate_2,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,22035.5,-1,-1,-1,-1,14755,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +TRE_landbasedwind_class1_moderate_3,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,22639.4,-1,-1,-1,-1,23630,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +TRE_landbasedwind_class1_moderate_4,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,21021.7,-1,-1,-1,-1,12498,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +TRE_landbasedwind_class1_moderate_5,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,21153.5,-1,-1,-1,-1,23788,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +TRE_landbasedwind_class1_moderate_6,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,32345.3,-1,-1,-1,-1,15633,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +TRE_landbasedwind_class1_moderate_7,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,12398.9,-1,-1,-1,-1,29021,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +TRE_landbasedwind_class1_moderate_8,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,34789.4,-1,-1,-1,-1,40897,0,0,0,0.15,7303,0,41880,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +TRE_landbasedwind_class1_moderate_9,2,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,2448.4,-1,-1,-1,-1,146712,0,0,0,0.15,7303,0,41881,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +TRE_storage_metalair_advanced_0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7303,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,standalone_storage,Storage_MetalAir_Advanced,0 +TRE_utilitypv_class1_moderate_0,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,249716.61,-1,-1,-1,-1,-1,6412,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,0 +TRE_utilitypv_class1_moderate_1,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,150550.53,-1,-1,-1,-1,-1,8461,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,1 +TRE_utilitypv_class1_moderate_2,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,340227.68,-1,-1,-1,-1,-1,10479,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,2 +TRE_utilitypv_class1_moderate_3,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,232869.52,-1,-1,-1,-1,-1,14103,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,3 +TRE_utilitypv_class1_moderate_4,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,409644.17,-1,-1,-1,-1,-1,14224,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,4 +TRE_utilitypv_class1_moderate_5,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,224977.87,-1,-1,-1,-1,-1,18539,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,5 +TRE_utilitypv_class1_moderate_6,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,393113.89,-1,-1,-1,-1,-1,22325,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,6 +TRE_utilitypv_class1_moderate_7,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,248585.87,-1,-1,-1,-1,-1,17464,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,7 +TRE_utilitypv_class1_moderate_8,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,124347.08,-1,-1,-1,-1,-1,74721,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,8 +TRE_utilitypv_class1_moderate_9,2,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,477756.89,-1,-1,-1,-1,-1,29582,0,0,0,0.15,7303,21612,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,TRE,hybrid_pv,UtilityPV_Class1_Moderate_,9 +WECC_landbasedwind_class1_moderate_0,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,109860.7,-1,-1,-1,-1,20294,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,0 +WECC_landbasedwind_class1_moderate_1,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,47257.4,-1,-1,-1,-1,19872,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,1 +WECC_landbasedwind_class1_moderate_2,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,88662.6,-1,-1,-1,-1,27185,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,2 +WECC_landbasedwind_class1_moderate_3,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,40824.7,-1,-1,-1,-1,19137,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,3 +WECC_landbasedwind_class1_moderate_4,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,109163.8,-1,-1,-1,-1,26039,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,4 +WECC_landbasedwind_class1_moderate_5,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,25095.7,-1,-1,-1,-1,133609,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,5 +WECC_landbasedwind_class1_moderate_6,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,100227,-1,-1,-1,-1,29900,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,6 +WECC_landbasedwind_class1_moderate_7,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,34790.4,-1,-1,-1,-1,160193,0,0,0,0.15,7609,0,74337,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,7 +WECC_landbasedwind_class1_moderate_8,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,64367.5,-1,-1,-1,-1,38235,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,8 +WECC_landbasedwind_class1_moderate_9,3,0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,77014.4,-1,-1,-1,-1,274991,0,0,0,0.15,7609,0,74338,0,0,0,0,1875,0,36613,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_wind,LandbasedWind_Class1_Moderate_,9 +WECC_storage_metalair_advanced_0,3,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0.15,7609,0,0,0,0,0,0,1875,0,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,standalone_storage,Storage_MetalAir_Advanced,0 +WECC_utilitypv_class1_moderate_0,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,775652.15,-1,-1,-1,-1,-1,10320,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,0 +WECC_utilitypv_class1_moderate_1,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,207870.65,-1,-1,-1,-1,-1,6016,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,1 +WECC_utilitypv_class1_moderate_2,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1143504.83,-1,-1,-1,-1,-1,19411,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,2 +WECC_utilitypv_class1_moderate_3,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,35742.72,-1,-1,-1,-1,-1,3992,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,3 +WECC_utilitypv_class1_moderate_4,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1185544.36,-1,-1,-1,-1,-1,25714,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,4 +WECC_utilitypv_class1_moderate_5,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,31049.98,-1,-1,-1,-1,-1,8052,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,5 +WECC_utilitypv_class1_moderate_6,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1023622.34,-1,-1,-1,-1,-1,33457,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,6 +WECC_utilitypv_class1_moderate_7,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,82238,-1,-1,-1,-1,-1,16842,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,7 +WECC_utilitypv_class1_moderate_8,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,1134234.27,-1,-1,-1,-1,-1,105939,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,8 +WECC_utilitypv_class1_moderate_9,3,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,-1,-1,-1,94348.41,-1,-1,-1,-1,-1,28290,0,0,0,0.15,7609,23643,0,0,0,0,0,1875,12550,0,0,0,0,0,0,0,0.15,0.15,0,0,0.967,-1,-1,0.005,0.005,0,0.65,0.65,0.65,0.65,WECC,hybrid_pv,UtilityPV_Class1_Moderate_,9 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Settings/genx_settings.yml b/test/LoadResourceData/test_gen_vre_stor/Settings/genx_settings.yml new file mode 100644 index 0000000000..c210cd63a1 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Settings/genx_settings.yml @@ -0,0 +1,12 @@ +NetworkExpansion: 1 +ParameterScale: 1 +EnergyShareRequirement: 1 +Trans_Loss_Segments: 1 +CapacityReserveMargin: 1 +Reserves: 1 +StorageLosses: 1 +OverwriteResults: 1 +UCommit: 2 +MinCapReq: 1 +CO2Cap: 1 +WriteShadowPrices: 1 diff --git a/test/LoadResourceData/test_gen_vre_stor/Settings/highs_settings.yml b/test/LoadResourceData/test_gen_vre_stor/Settings/highs_settings.yml new file mode 100644 index 0000000000..e244a0b4cf --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Settings/highs_settings.yml @@ -0,0 +1,13 @@ +# 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: choose #HiGHS-specific solver settings # Solver option: "simplex", "choose" or "ipm" # [type: string, advanced: false, default: "choose"] + +#highs-specific solver settings + +# run the crossover routine for ipx +# [type: string, advanced: "on", range: {"off", "on"}, default: "off"] +run_crossover: "on" diff --git a/test/LoadResourceData/test_gen_vre_stor/Settings/time_domain_reduction_settings.yml b/test/LoadResourceData/test_gen_vre_stor/Settings/time_domain_reduction_settings.yml new file mode 100644 index 0000000000..77a15db91e --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Settings/time_domain_reduction_settings.yml @@ -0,0 +1,59 @@ +IterativelyAddPeriods: 1 +ExtremePeriods: + Wind: + System: + Absolute: + Min: 0 + Max: 0 + Integral: + Min: 1 + Max: 0 + Zone: + Absolute: + Min: 0 + Max: 0 + Integral: + Min: 0 + Max: 0 + Demand: + System: + Absolute: + Min: 0 + Max: 1 + Integral: + Min: 0 + Max: 0 + Zone: + Absolute: + Min: 0 + Max: 0 + Integral: + Min: 0 + Max: 0 + PV: + System: + Absolute: + Min: 0 + Max: 0 + Integral: + Min: 1 + Max: 0 + Zone: + Absolute: + Min: 0 + Max: 0 + Integral: + Min: 0 + Max: 0 +UseExtremePeriods: 1 +MinPeriods: 5 +MaxPeriods: 5 +DemandWeight: 1 +ClusterFuelPrices: 0 +nReps: 100 +Threshold: 0.05 +TimestepsPerRepPeriod: 24 +IterateMethod: "cluster" +ScalingMethod: "S" +ClusterMethod: "kmeans" +WeightTotal: 8760 diff --git a/Example_Systems/VREStor_Example/Vre_and_stor_data.csv b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_data.csv similarity index 53% rename from Example_Systems/VREStor_Example/Vre_and_stor_data.csv rename to test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_data.csv index e47236a878..c5cdd1f632 100644 --- a/Example_Systems/VREStor_Example/Vre_and_stor_data.csv +++ b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_data.csv @@ -1,64 +1,64 @@ -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 +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,ESR_VRESTOR_1,ESR_VRESTOR_2 +EIC,EIC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,209,1,1,0.95,0,0,0,0,0,0,0,0,hybrid_wind,0,7522,56816,0,1875,36613,0,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,-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,1,1 +EIC,EIC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,210,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,211,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,212,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,213,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,214,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,215,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,216,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,217,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,0,0 +EIC,EIC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,218,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,0,0 +EIC,EIC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,219,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,0,0 +EIC,EIC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,220,1,1,0.95,1,1,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,0,0 +EIC,EIC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,221,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,0,0 +EIC,EIC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,222,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,0,0 +EIC,EIC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,223,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,0,0 +EIC,EIC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,224,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,0,0 +EIC,EIC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,225,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,0,0 +EIC,EIC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,226,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,0,0 +EIC,EIC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,227,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,0,0 +EIC,EIC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,228,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,0,0 +EIC,EIC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,229,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,230,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,231,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,232,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,233,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,234,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,235,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,236,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,237,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,238,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,0,0 +TRE,TRE_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,239,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,0,0 +TRE,TRE_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,240,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,0,0 +TRE,TRE_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,241,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,0,0 +TRE,TRE_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,242,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,0,0 +TRE,TRE_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,243,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,0,0 +TRE,TRE_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,244,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,0,0 +TRE,TRE_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,245,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,0,0 +TRE,TRE_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,246,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,0,0 +TRE,TRE_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,247,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,0,0 +TRE,TRE_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,248,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,0,0 +TRE,TRE_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,249,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,0,0 +TRE,TRE_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,250,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,251,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,252,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,253,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,254,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,255,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,256,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,257,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,258,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,259,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,0,0 +WECC,WECC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,260,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,0,0 +WECC,WECC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,261,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,0,0 +WECC,WECC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,262,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,0,0 +WECC,WECC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,263,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,0,0 +WECC,WECC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,264,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,0,0 +WECC,WECC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,265,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,0,0 +WECC,WECC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,266,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,0,0 +WECC,WECC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,267,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,0,0 +WECC,WECC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,268,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,0,0 +WECC,WECC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,269,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,0,0 +WECC,WECC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,270,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,0,0 +WECC,WECC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,271,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,0,0 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_solar_variability.csv b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_solar_variability.csv new file mode 100644 index 0000000000..c9f50a8c25 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_solar_variability.csv @@ -0,0 +1,25 @@ +Time_Index,EIC_utilitypv_class1_moderate_0,EIC_utilitypv_class1_moderate_1,EIC_utilitypv_class1_moderate_2,EIC_utilitypv_class1_moderate_3,EIC_utilitypv_class1_moderate_4,EIC_utilitypv_class1_moderate_5,EIC_utilitypv_class1_moderate_6,EIC_utilitypv_class1_moderate_7,EIC_utilitypv_class1_moderate_8,EIC_utilitypv_class1_moderate_9,TRE_utilitypv_class1_moderate_0,TRE_utilitypv_class1_moderate_1,TRE_utilitypv_class1_moderate_2,TRE_utilitypv_class1_moderate_3,TRE_utilitypv_class1_moderate_4,TRE_utilitypv_class1_moderate_5,TRE_utilitypv_class1_moderate_6,TRE_utilitypv_class1_moderate_7,TRE_utilitypv_class1_moderate_8,TRE_utilitypv_class1_moderate_9,WECC_utilitypv_class1_moderate_0,WECC_utilitypv_class1_moderate_1,WECC_utilitypv_class1_moderate_2,WECC_utilitypv_class1_moderate_3,WECC_utilitypv_class1_moderate_4,WECC_utilitypv_class1_moderate_5,WECC_utilitypv_class1_moderate_6,WECC_utilitypv_class1_moderate_7,WECC_utilitypv_class1_moderate_8,WECC_utilitypv_class1_moderate_9 +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 +2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +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 +7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +9,0,0.081,0,0.077,0.043,0,0.005,0.09,0.058,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +10,0.151,0.403,0.168,0.367,0.294,0.114,0.162,0.408,0.343,0.027,0.247,0.23,0.258,0.224,0.253,0.209,0.2,0.258,0.11,0.217,0,0,0,0,0,0,0,0,0,0 +11,0.44,0.574,0.452,0.542,0.515,0.463,0.465,0.568,0.533,0.429,0.524,0.52,0.531,0.516,0.529,0.507,0.499,0.532,0.458,0.477,0.193,0.189,0.199,0,0.184,0,0.096,0,0.135,0 +12,0.597,0.657,0.624,0.619,0.628,0.656,0.614,0.648,0.623,0.615,0.692,0.694,0.699,0.685,0.694,0.682,0.68,0.696,0.655,0.636,0.469,0.429,0.473,0.043,0.458,0.001,0.367,0,0.395,0 +13,0.697,0.695,0.717,0.635,0.674,0.764,0.677,0.672,0.661,0.723,0.79,0.782,0.793,0.779,0.789,0.786,0.783,0.789,0.769,0.723,0.626,0.599,0.614,0.249,0.601,0.215,0.554,0.215,0.548,0.248 +14,0.734,0.697,0.752,0.637,0.678,0.811,0.695,0.666,0.666,0.79,0.826,0.827,0.835,0.834,0.834,0.838,0.834,0.826,0.826,0.761,0.721,0.689,0.682,0.371,0.667,0.383,0.659,0.423,0.623,0.444 +15,0.731,0.667,0.745,0.62,0.661,0.808,0.686,0.645,0.636,0.806,0.831,0.839,0.838,0.841,0.828,0.844,0.828,0.816,0.837,0.751,0.768,0.694,0.725,0.427,0.7,0.478,0.714,0.447,0.662,0.5 +16,0.674,0.605,0.689,0.565,0.599,0.757,0.635,0.554,0.55,0.747,0.794,0.796,0.795,0.799,0.785,0.805,0.802,0.782,0.8,0.725,0.772,0.667,0.723,0.447,0.713,0.452,0.729,0.443,0.651,0.434 +17,0.543,0.463,0.565,0.415,0.455,0.642,0.52,0.407,0.399,0.646,0.698,0.698,0.7,0.706,0.697,0.715,0.715,0.691,0.72,0.648,0.732,0.595,0.678,0.421,0.667,0.432,0.697,0.441,0.591,0.44 +18,0.377,0.205,0.386,0.147,0.218,0.483,0.323,0.161,0.183,0.469,0.556,0.559,0.562,0.573,0.561,0.586,0.583,0.546,0.599,0.474,0.675,0.51,0.594,0.321,0.567,0.373,0.608,0.4,0.482,0.467 +19,0.106,0.011,0.076,0.001,0.001,0.124,0.033,0.005,0.007,0.112,0.297,0.291,0.299,0.308,0.298,0.326,0.33,0.28,0.344,0.232,0.515,0.297,0.408,0.178,0.369,0.347,0.44,0.314,0.294,0.295 +20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.254,0.031,0.165,0.05,0.126,0.138,0.144,0.13,0.077,0.083 +21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +23,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +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 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_wind_variability.csv b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_wind_variability.csv new file mode 100644 index 0000000000..45c3aebb76 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/Vre_and_stor_wind_variability.csv @@ -0,0 +1,25 @@ +Time_Index,EIC_landbasedwind_class1_moderate_0,EIC_landbasedwind_class1_moderate_1,EIC_landbasedwind_class1_moderate_2,EIC_landbasedwind_class1_moderate_3,EIC_landbasedwind_class1_moderate_4,EIC_landbasedwind_class1_moderate_5,EIC_landbasedwind_class1_moderate_6,EIC_landbasedwind_class1_moderate_7,EIC_landbasedwind_class1_moderate_8,EIC_landbasedwind_class1_moderate_9,TRE_landbasedwind_class1_moderate_0,TRE_landbasedwind_class1_moderate_1,TRE_landbasedwind_class1_moderate_2,TRE_landbasedwind_class1_moderate_3,TRE_landbasedwind_class1_moderate_4,TRE_landbasedwind_class1_moderate_5,TRE_landbasedwind_class1_moderate_6,TRE_landbasedwind_class1_moderate_7,TRE_landbasedwind_class1_moderate_8,TRE_landbasedwind_class1_moderate_9,WECC_landbasedwind_class1_moderate_0,WECC_landbasedwind_class1_moderate_1,WECC_landbasedwind_class1_moderate_2,WECC_landbasedwind_class1_moderate_3,WECC_landbasedwind_class1_moderate_4,WECC_landbasedwind_class1_moderate_5,WECC_landbasedwind_class1_moderate_6,WECC_landbasedwind_class1_moderate_7,WECC_landbasedwind_class1_moderate_8,WECC_landbasedwind_class1_moderate_9 +1,0.966,0.978,0.936,0.939,0.867,0.752,0.666,0.527,0.548,0.98,0.84,0.705,0.752,0.794,0.614,0.749,0.485,0.799,0.637,1,0.814,0.752,0.532,0.49,0.407,0.945,0.371,0.889,0.325,0.969 +2,0.972,0.978,0.945,0.947,0.877,0.72,0.648,0.442,0.546,0.993,0.848,0.671,0.783,0.787,0.686,0.718,0.497,0.75,0.624,1,0.749,0.739,0.509,0.452,0.377,0.948,0.333,0.89,0.298,0.967 +3,0.967,0.978,0.951,0.946,0.899,0.694,0.644,0.435,0.533,0.985,0.872,0.858,0.805,0.826,0.641,0.622,0.469,0.513,0.646,1,0.594,0.705,0.459,0.373,0.366,0.929,0.341,0.855,0.327,0.962 +4,0.969,0.967,0.95,0.878,0.889,0.68,0.668,0.424,0.528,0.983,0.856,0.972,0.771,0.866,0.554,0.652,0.51,0.463,0.717,1,0.514,0.708,0.437,0.353,0.35,0.865,0.351,0.746,0.343,0.924 +5,0.953,0.949,0.95,0.834,0.898,0.688,0.681,0.389,0.456,0.974,0.8,0.929,0.71,0.806,0.619,0.66,0.702,0.634,0.861,0.996,0.436,0.614,0.418,0.367,0.351,0.751,0.342,0.644,0.323,0.735 +6,0.953,0.946,0.956,0.852,0.911,0.735,0.691,0.401,0.514,0.961,0.749,0.895,0.737,0.697,0.763,0.512,0.88,0.307,0.951,0.954,0.424,0.585,0.375,0.353,0.338,0.783,0.328,0.726,0.303,0.695 +7,0.95,0.949,0.954,0.842,0.915,0.766,0.69,0.415,0.581,0.936,0.758,0.896,0.802,0.68,0.851,0.476,0.889,0.219,0.92,0.788,0.391,0.56,0.357,0.349,0.345,0.791,0.335,0.822,0.29,0.689 +8,0.917,0.885,0.937,0.85,0.93,0.785,0.683,0.467,0.529,0.839,0.789,0.911,0.847,0.709,0.962,0.523,0.899,0.252,0.838,0.434,0.338,0.493,0.321,0.299,0.304,0.643,0.286,0.682,0.247,0.485 +9,0.876,0.828,0.928,0.881,0.952,0.816,0.728,0.528,0.628,0.82,0.816,0.934,0.927,0.819,0.986,0.688,0.93,0.369,0.844,0.266,0.387,0.552,0.359,0.323,0.325,0.764,0.319,0.845,0.288,0.531 +10,0.594,0.483,0.704,0.571,0.579,0.519,0.219,0.152,0.055,0.58,0.414,0.467,0.578,0.451,0.652,0.512,0.563,0.354,0.332,0.117,0.183,0.342,0.184,0.217,0.198,0.273,0.16,0.237,0.13,0.247 +11,0.662,0.526,0.752,0.604,0.669,0.53,0.314,0.176,0.097,0.598,0.514,0.564,0.658,0.596,0.753,0.65,0.679,0.559,0.427,0.092,0.179,0.315,0.177,0.217,0.186,0.262,0.161,0.159,0.142,0.171 +12,0.78,0.672,0.825,0.762,0.704,0.606,0.435,0.271,0.25,0.662,0.783,0.857,0.826,0.828,0.878,0.848,0.79,0.902,0.496,0.101,0.202,0.323,0.189,0.203,0.194,0.324,0.157,0.23,0.147,0.235 +13,0.785,0.714,0.807,0.726,0.7,0.596,0.489,0.355,0.406,0.664,0.771,0.815,0.838,0.768,0.888,0.838,0.762,0.897,0.487,0.069,0.268,0.346,0.203,0.189,0.184,0.318,0.138,0.194,0.129,0.365 +14,0.714,0.629,0.772,0.636,0.698,0.587,0.499,0.435,0.518,0.654,0.59,0.661,0.733,0.583,0.839,0.714,0.694,0.739,0.441,0.004,0.303,0.334,0.211,0.161,0.18,0.497,0.126,0.455,0.132,0.679 +15,0.728,0.659,0.771,0.624,0.704,0.575,0.497,0.464,0.42,0.693,0.549,0.623,0.733,0.473,0.853,0.536,0.632,0.407,0.395,0,0.269,0.285,0.19,0.161,0.149,0.478,0.106,0.398,0.113,0.681 +16,0.754,0.698,0.792,0.657,0.736,0.6,0.481,0.427,0.414,0.732,0.549,0.547,0.738,0.445,0.861,0.566,0.643,0.514,0.376,0,0.223,0.278,0.168,0.169,0.144,0.441,0.104,0.352,0.106,0.717 +17,0.761,0.692,0.794,0.659,0.729,0.601,0.468,0.374,0.366,0.742,0.589,0.581,0.746,0.462,0.82,0.533,0.625,0.47,0.421,0,0.202,0.239,0.158,0.157,0.139,0.378,0.097,0.215,0.083,0.668 +18,0.703,0.645,0.787,0.654,0.923,0.745,0.786,0.92,0.786,0.754,0.516,0.508,0.677,0.433,0.849,0.502,0.603,0.374,0.402,0,0.232,0.377,0.232,0.182,0.211,0.609,0.164,0.467,0.147,0.868 +19,0.673,0.637,0.755,0.641,0.847,0.748,0.813,0.926,0.87,0.74,0.633,0.57,0.744,0.505,0.834,0.536,0.568,0.405,0.363,0,0.291,0.323,0.257,0.182,0.227,0.535,0.171,0.38,0.137,0.869 +20,0.717,0.598,0.801,0.668,0.885,0.777,0.835,0.915,0.919,0.713,0.642,0.514,0.753,0.469,0.813,0.494,0.566,0.294,0.445,0.003,0.241,0.308,0.298,0.198,0.256,0.446,0.19,0.315,0.144,0.73 +21,0.768,0.665,0.817,0.692,0.892,0.792,0.884,0.94,0.941,0.725,0.764,0.746,0.86,0.643,0.874,0.618,0.741,0.341,0.619,0.046,0.246,0.322,0.407,0.315,0.375,0.403,0.305,0.318,0.224,0.649 +22,0.797,0.689,0.841,0.702,0.959,0.802,0.927,0.94,0.951,0.714,0.816,0.702,0.864,0.736,0.889,0.783,0.839,0.646,0.738,0.189,0.226,0.332,0.44,0.373,0.429,0.46,0.361,0.35,0.281,0.575 +23,0.846,0.751,0.858,0.711,0.968,0.8,0.929,0.938,0.955,0.687,0.819,0.734,0.857,0.708,0.938,0.826,0.905,0.816,0.845,0.324,0.172,0.39,0.463,0.42,0.455,0.44,0.395,0.328,0.31,0.364 +24,0.842,0.766,0.855,0.694,0.972,0.793,0.92,0.941,0.952,0.675,0.837,0.767,0.854,0.705,0.948,0.826,0.918,0.869,0.83,0.157,0.202,0.448,0.463,0.416,0.444,0.483,0.4,0.393,0.344,0.428 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/generators_data.csv b/test/LoadResourceData/test_gen_vre_stor/generators_data.csv new file mode 100644 index 0000000000..2155311075 --- /dev/null +++ b/test/LoadResourceData/test_gen_vre_stor/generators_data.csv @@ -0,0 +1,272 @@ +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,Can_Retire,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_conventional_hydroelectric_1,Conventional Hydroelectric,1,1,1,0,0,0,0,0,0,1,0,0.8,0,0,0,24200.8,0,748,24200.792,0,0,32.35,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0.273,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_conventional_hydroelectric_1,Conventional Hydroelectric,1,2,2,0,0,0,0,0,0,1,0,0,0,0,0,477,0,19,476.995,0,0,25.1,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +WECC,WECC_conventional_hydroelectric_1,Conventional Hydroelectric,1,3,3,0,0,0,0,0,0,1,0,0,0,0,0,46528,0,640,46528,0,0,72.7,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0.214,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,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.8,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,12806.9,0,72,12806.928,0,1,177.87,0,0,0,0,0,0,0,0,0,0,78258,0,0,0,1.88,0,0,0,124,16.5,13.34,2.921,4.478,east_north_central_coal,0.5,0,1,1,0,0,0,0.095,0.19,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 +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,109345.4,0,187,109345.445,0,1,584.74,0,0,0,0,0,0,0,0,0,0,64567,0,0,0,1.88,0,0,0,124,16.5,10.89,1.402,1.167,east_north_central_coal,0.5,0,1,1,0,0,0,0.095,0.19,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 +EIC,EIC_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,6,1,0,1,0,0,0,0,0,0,0.93,0,0,0,27155.3,0,166,27155.276,0,1,163.59,0,0,0,0,0,0,0,0,0,0,16322,0,0,0,4.53,0,0,0,92,2,9.24,2.047,2.71,east_north_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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 +EIC,EIC_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,7,1,0,1,0,0,0,0,0,0,0.93,0,0,0,169897.4,0,266,169897.392,0,1,638.71,0,0,0,0,0,0,0,0,0,0,11042,0,0,0,3.58,0,0,0,92,2,7.34,0.657,0.613,east_north_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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 +EIC,EIC_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,8,1,0,1,0,0,0,0,0,0,0.93,0,0,0,98926.5,0,988,98926.464,0,1,100.13,0,0,0,0,0,0,0,0,0,0,10031,0,0,0,5.28,0,0,0,119,3.5,12.03,2.186,2.031,east_north_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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 +EIC,EIC_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,9,1,0,1,0,0,0,0,0,0,0.93,0,0,0,10412.9,0,333,10412.91,0,1,31.27,0,0,0,0,0,0,0,0,0,0,13557,0,0,0,5.28,0,0,0,119,3.5,14.66,4.035,4.747,east_north_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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 +EIC,EIC_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,10,1,0,1,0,0,0,0,0,0,0.93,0,0,0,2578.5,0,581,2578.478,0,1,4.44,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,5.29,0,0,0,38,0,10.29,1.183,3.689,east_north_central_naturalgas,0.18,0,1,1,0,0,0,0.106666667,0.213333333,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 +EIC,EIC_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,11,1,0,1,0,0,0,0,0,0,0.93,0,0,0,39625.2,0,195,39625.17,0,1,203.21,0,0,0,0,0,0,0,0,0,0,35537,0,0,0,1.06,0,0,0,87,13.7,12.8,2.36,4.946,east_north_central_naturalgas,0.5,0,1,1,0,0,0,0.63,1.26,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 +EIC,EIC_nuclear_1,Nuclear,1,12,1,0,1,0,0,0,0,0,0,0.93,0,0,0,82406.6,0,80,82406.56,0,1,1030.08,0,0,0,0,0,0,0,0,0,0,214812,0,0,0,2.84,0,0,0,248,0,10.45,0,0.006,east_north_central_uranium,0.5,0,1,1,0,0,0,0.041666667,0.083333333,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 +EIC,EIC_petroleum_liquids_1,Petroleum Liquids,1,13,1,0,1,0,0,0,0,0,0,0.93,0,0,0,23196.2,0,2328,23196.192,0,1,9.96,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,7.97,0,0,0,38,0,15.5,3.607,4.446,east_north_central_distillate,0.18,0,1,1,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 +TRE,TRE_conventional_steam_coal_1,Conventional Steam Coal,1,14,2,0,1,0,0,0,0,0,0,0,0,0,0,5063.6,0,7,5063.597,0,1,723.37,0,0,0,0,0,0,0,0,0,0,60405,0,0,0,1.88,0,0,0,124,16.5,10.33,0.655,0.422,west_south_central_coal,0.5,0,1,1,0,0,0,0.095,0.19,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.93,0,0 +TRE,TRE_conventional_steam_coal_2,Conventional Steam Coal,2,15,2,0,1,0,0,0,0,0,0,0,0,0,0,3713,0,7,3713.003,0,1,530.43,0,0,0,0,0,0,0,0,0,0,68432,0,0,0,1.88,0,0,0,124,16.5,12.13,1.016,0.74,west_south_central_coal,0.5,0,1,1,0,0,0,0.095,0.19,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.93,0,0 +TRE,TRE_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,16,2,0,1,0,0,0,0,0,0,0,0,0,0,30139.1,0,52,30139.096,0,1,579.6,0,0,0,0,0,0,0,0,0,0,10912,0,0,0,3.59,0,0,0,92,2,7.72,0.514,0.965,west_south_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0,0 +TRE,TRE_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,17,2,0,1,0,0,0,0,0,0,0,0,0,0,6317.6,0,20,6317.6,0,1,315.88,0,0,0,0,0,0,0,0,0,0,15698,0,0,0,4.36,0,0,0,92,2,9.8,2.241,2.318,west_south_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0,0 +TRE,TRE_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,18,2,0,1,0,0,0,0,0,0,0,0,0,0,2924,0,36,2923.992,0,1,81.22,0,0,0,0,0,0,0,0,0,0,10001,0,0,0,5.28,0,0,0,119,3.5,14.08,0.577,1.146,west_south_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0,0 +TRE,TRE_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,19,2,0,1,0,0,0,0,0,0,0,0,0,0,2826.9,0,56,2826.88,0,1,50.48,0,0,0,0,0,0,0,0,0,0,11926,0,0,0,5.28,0,0,0,119,3.5,11.11,1.398,1.008,west_south_central_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0,0 +TRE,TRE_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,20,2,0,1,0,0,0,0,0,0,0,0,0,0,502.7,0,47,502.712,0,1,10.7,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,4.72,0,0,0,38,0,9.18,0.648,0.328,west_south_central_naturalgas,0.18,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0,0 +TRE,TRE_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,21,2,0,1,0,0,0,0,0,0,0,0,0,0,8249.5,0,35,8249.5,0,1,235.7,0,0,0,0,0,0,0,0,0,0,34182,0,0,0,1.06,0,0,0,87,13.7,13.24,2.888,3.381,west_south_central_naturalgas,0.5,0,1,1,0,0,0,0.63,1.26,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.93,0,0 +TRE,TRE_nuclear_1,Nuclear,1,22,2,0,1,0,0,0,0,0,0,0,0,0,0,5120,0,4,5120,0,1,1280,0,0,0,0,0,0,0,0,0,0,193275,0,0,0,2.84,0,0,0,248,0,10.45,0,0,west_south_central_uranium,0.5,0,1,1,0,0,0,0.041666667,0.083333333,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.93,0,0 +TRE,TRE_petroleum_liquids_1,Petroleum Liquids,1,23,2,0,1,0,0,0,0,0,0,0,0,0,0,23.7,0,16,23.696,0,1,1.48,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,6.38,0,0,0,38,0,12.4,0,4.068,west_south_central_distillate,0.18,0,1,1,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.93,0,0 +WECC,WECC_conventional_steam_coal_1,Conventional Steam Coal,1,24,3,0,1,0,0,0,0,0,0,0,0,0,0,11415.2,0,23,11415.199,0,1,496.31,0,0,0,0,0,0,0,0,0,0,64165,0,0,0,1.88,0,0,0,124,16.5,10.63,0.447,0.29,mountain_coal,0.5,0,1,1,0,0,0,0.095,0.19,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.93,0 +WECC,WECC_conventional_steam_coal_2,Conventional Steam Coal,2,25,3,0,1,0,0,0,0,0,0,0,0,0,0,2074.5,0,16,2074.496,0,1,129.66,0,0,0,0,0,0,0,0,0,0,77721,0,0,0,1.88,0,0,0,124,16.5,12.2,1.109,0.961,mountain_coal,0.5,0,1,1,0,0,0,0.095,0.19,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.93,0 +WECC,WECC_natural_gas_fired_combined_cycle_1,Natural Gas Fired Combined Cycle,1,26,3,0,1,0,0,0,0,0,0,0,0,0,0,37593.3,0,79,37593.335,0,1,475.86,0,0,0,0,0,0,0,0,0,0,10399,0,0,0,3.6,0,0,0,92,2,7.78,0.722,1.232,mountain_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0 +WECC,WECC_natural_gas_fired_combined_cycle_2,Natural Gas Fired Combined Cycle,2,27,3,0,1,0,0,0,0,0,0,0,0,0,0,12502.4,0,79,12502.382,0,1,158.26,0,0,0,0,0,0,0,0,0,0,16492,0,0,0,4.55,0,0,0,92,2,8.51,2.587,2.585,mountain_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0 +WECC,WECC_natural_gas_fired_combustion_turbine_1,Natural Gas Fired Combustion Turbine,1,28,3,0,1,0,0,0,0,0,0,0,0,0,0,15252.7,0,213,15252.717,0,1,71.61,0,0,0,0,0,0,0,0,0,0,10479,0,0,0,5.28,0,0,0,119,3.5,11.06,1.753,1.288,mountain_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0 +WECC,WECC_natural_gas_fired_combustion_turbine_2,Natural Gas Fired Combustion Turbine,2,29,3,0,1,0,0,0,0,0,0,0,0,0,0,6281.6,0,225,6281.55,0,1,27.92,0,0,0,0,0,0,0,0,0,0,13486,0,0,0,5.28,0,0,0,119,3.5,12.78,4.552,3.282,mountain_naturalgas,0.3,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0 +WECC,WECC_natural_gas_internal_combustion_engine_1,Natural Gas Internal Combustion Engine,1,30,3,0,1,0,0,0,0,0,0,0,0,0,0,1282.7,0,197,1282.667,0,1,6.51,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,4.88,0,0,0,38,0,9.49,1.759,1.665,mountain_naturalgas,0.18,0,1,1,0,0,0,0.106666667,0.213333333,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.93,0 +WECC,WECC_natural_gas_steam_turbine_1,Natural Gas Steam Turbine,1,31,3,0,1,0,0,0,0,0,0,0,0,0,0,2669.5,0,28,2669.492,0,1,95.34,0,0,0,0,0,0,0,0,0,0,51303,0,0,0,1.06,0,0,0,87,13.7,12.4,4.616,3.843,mountain_naturalgas,0.5,0,1,1,0,0,0,0.63,1.26,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.93,0 +WECC,WECC_nuclear_1,Nuclear,1,32,3,0,1,0,0,0,0,0,0,0,0,0,0,5175,0,4,5175,0,1,1293.75,0,0,0,0,0,0,0,0,0,0,211822,0,0,0,2.84,0,0,0,248,0,10.45,0,0,mountain_uranium,0.5,0,1,1,0,0,0,0.041666667,0.083333333,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.93,0 +WECC,WECC_petroleum_liquids_1,Petroleum Liquids,1,33,3,0,1,0,0,0,0,0,0,0,0,0,0,636.2,0,150,636.15,0,1,4.24,0,0,0,0,0,0,0,0,0,0,21000,0,0,0,7.2,0,0,0,38,0,14,2.319,4.938,mountain_distillate,0.18,0,1,1,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.93,0 +EIC,EIC_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,34,1,0,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,880383.916,56026,28000,0,0,0,2,0,0,0,106,2,6.36,0,0,east_north_central_naturalgas,0.3,0,1,1,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,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 +EIC,EIC_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,35,1,0,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,45192,21000,0,0,0,5,0,0,0,137,3.5,9.72,0,0,east_north_central_naturalgas,0.3,0,1,1,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,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 +EIC,EIC_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,36,1,0,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,2120000,120812,67000,0,0,0,6,0,0,0,106,0,7.16,0,0,east_north_central_naturalgas,0.6,0,1,1,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,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 +EIC,EIC_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,37,1,0,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,6590000,45000,0,0,0,0,2.84,0,0,0,285,0,10.44,0,0,east_north_central_uranium,0.5,0,1,1,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,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 +TRE,TRE_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,38,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,880383.916,42007,28000,0,0,0,2,0,0,0,106,2,6.36,0,0,west_south_central_naturalgas,0.3,0,1,1,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.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.93,0,0 +TRE,TRE_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,39,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,35319,21000,0,0,0,5,0,0,0,137,3.5,9.72,0,0,west_south_central_naturalgas,0.3,0,1,1,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.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.93,0,0 +TRE,TRE_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,40,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,2120000,106685,67000,0,0,0,6,0,0,0,106,0,7.16,0,0,west_south_central_naturalgas,0.6,0,1,1,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.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.93,0,0 +TRE,TRE_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,41,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,6590000,450000,0,0,0,0,2.84,0,0,0,285,0,10.44,0,0,west_south_central_uranium,0.5,0,1,1,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.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.93,0,0 +WECC,WECC_naturalgas_ccavgcf_moderate_0,NaturalGas_CCAvgCF_Moderate,0,42,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,880383.916,59543,28000,0,0,0,2,0,0,0,106,2,6.36,0,0,mountain_naturalgas,0.3,0,1,1,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,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.93,0 +WECC,WECC_naturalgas_ctavgcf_moderate_0,NaturalGas_CTAvgCF_Moderate,0,43,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,45587,21000,0,0,0,5,0,0,0,137,3.5,9.72,0,0,mountain_naturalgas,0.3,0,1,1,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,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.93,0 +WECC,WECC_naturalgas_ccccsavgcf_conservative_0,NaturalGas_CCCCSAvgCF_Conservative,0,44,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,2120000,119927,67000,0,0,0,6,0,0,0,106,0,7.16,0,0,mountain_naturalgas,0.6,0,1,1,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,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.93,0 +WECC,WECC_advnuclear_atb_moderate_0,AdvNuclear_ATB_Moderate,0,45,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,500,0,-1,-1,0,0,0,0,0,6590000,450000,0,0,0,0,2.84,0,0,0,285,0,10.44,0,0,mountain_uranium,0.5,0,1,1,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,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.93,0 +EIC,EIC_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,46,1,0,1,0,0,0,0,0,0,0.93,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,61000,0,0,0,0,5,0,0,0,137,3.5,9.72,0,0,zerocarbon_fuel,0.3,0,1,1,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,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 +TRE,TRE_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,47,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,61000,0,0,0,0,5,0,0,0,137,3.5,9.72,0,0,zerocarbon_fuel,0.3,0,1,1,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.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.93,0,0 +WECC,WECC_naturalgas_ctavgcf_moderate_0_zerocarbon,NaturalGas_CTAvgCF_Moderate_zerocarbon,0,48,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,100,0,-1,-1,0,0,0,0,0,746250.365,61000,0,0,0,0,5,0,0,0,137,3.5,9.72,0,0,zerocarbon_fuel,0.3,0,1,1,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,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.93,0 +EIC,EIC_offshore_wind_turbine_1,Offshore Wind Turbine,1,49,1,1,0,1,0,0,0,0,0,0.8,0,0,0,29.3,0,1,29.3,0,1,29.3,0,0,0,0,0,0,0,0,0,0,111496,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,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 +EIC,EIC_onshore_wind_turbine_1,Onshore Wind Turbine,1,50,1,1,0,1,0,0,0,0,0,0.8,0,0,0,47407.4,0,710,47407.41,0,1,66.77,0,0,0,0,0,0,0,0,0,0,43000,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +EIC,EIC_solar_photovoltaic_1,Solar Photovoltaic,1,51,1,1,0,1,0,0,0,0,0,0.8,0,0,0,8533.9,0,1435,8533.945,0,1,5.95,0,0,0,0,0,0,0,0,0,0,22623,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_onshore_wind_turbine_1,Onshore Wind Turbine,1,52,2,1,0,1,0,0,0,0,0,0,0,0,0,21683.1,0,133,21683.123,0,1,163.03,0,0,0,0,0,0,0,0,0,0,43000,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_solar_photovoltaic_1,Solar Photovoltaic,1,53,2,1,0,1,0,0,0,0,0,0,0,0,0,1821.5,0,28,1821.512,0,1,65.05,0,0,0,0,0,0,0,0,0,0,22623,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +WECC,WECC_geothermal_1,Geothermal,1,54,3,1,0,1,0,0,0,0,0,0,0,0,0,1752.4,0,146,2752.246,0,0,12,0,0,0,0,0,0,0,0,0,0,209101,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,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.93,0 +WECC,WECC_onshore_wind_turbine_1,Onshore Wind Turbine,1,55,3,1,0,1,0,0,0,0,0,0,0,0,0,20644.2,0,300,20644.2,0,1,68.81,0,0,0,0,0,0,0,0,0,0,43000,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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.8,0 +WECC,WECC_solar_photovoltaic_1,Solar Photovoltaic,1,56,3,1,0,1,0,0,0,0,0,0,0,0,0,14659.8,0,986,14659.848,0,1,14.87,0,0,0,0,0,0,0,0,0,0,22623,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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.8,0 +EIC,EIC_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,57,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,65762.8,-1,0,0,0,0,0,1730000,147250,78449,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,51161.657,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,58,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,14399.2,-1,0,0,0,0,0,1730000,157328,78449,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,61239.476,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,59,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,34280.8,-1,0,0,0,0,0,1730000,153961,78449,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,57872.369,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,60,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,101840.5,-1,0,0,0,0,0,1730000,168852,78449,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,72763.911,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,61,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,118605,-1,0,0,0,0,0,1730000,164784,78449,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,68695.909,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,62,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,18875.6,-1,0,0,0,0,0,1730000,146792,78449,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,50703.558,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,63,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,79943.7,-1,0,0,0,0,0,1730000,144977,78449,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,48888.699,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,64,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,23454.7,-1,0,0,0,0,0,1730000,347411,78449,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,251322.456,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,65,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,59461.7,-1,0,0,0,0,0,1730000,393568,78449,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,297479.514,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,66,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,73503.9,-1,0,0,0,0,0,1730000,155384,78449,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,59295.695,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,67,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,65762.8,-1,0,0,0,0,0,1730000,147250,78449,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,51161.657,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,68,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,14399.2,-1,0,0,0,0,0,1730000,157328,78449,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,61239.476,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,69,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,34280.8,-1,0,0,0,0,0,1730000,153961,78449,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,57872.369,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,70,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,101840.5,-1,0,0,0,0,0,1730000,168852,78449,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,72763.911,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,71,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,118605,-1,0,0,0,0,0,1730000,164784,78449,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,68695.909,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,72,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,18875.6,-1,0,0,0,0,0,1730000,146792,78449,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,50703.558,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,73,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,79943.7,-1,0,0,0,0,0,1730000,144977,78449,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,48888.699,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,74,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,23454.7,-1,0,0,0,0,0,1730000,347411,78449,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,251322.456,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,75,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,59461.7,-1,0,0,0,0,0,1730000,393568,78449,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,297479.514,1,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 +EIC,EIC_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,76,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,73503.9,-1,0,0,0,0,0,1730000,155384,78449,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,59295.695,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,77,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,65762.8,-1,0,0,0,0,0,2770000,204577,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,51161.657,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,78,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,14399.2,-1,0,0,0,0,0,2770000,214655,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,61239.476,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,79,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,34280.8,-1,0,0,0,0,0,2770000,211288,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,57872.369,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,80,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,101840.5,-1,0,0,0,0,0,2770000,226179,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,72763.911,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,81,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,118605,-1,0,0,0,0,0,2770000,222111,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,68695.909,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,82,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,18875.6,-1,0,0,0,0,0,2770000,204119,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,50703.558,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,83,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,79943.7,-1,0,0,0,0,0,2770000,202304,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,48888.699,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,84,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,23454.7,-1,0,0,0,0,0,2770000,404738,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,251322.456,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,85,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,59461.7,-1,0,0,0,0,0,2770000,450895,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,297479.514,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,86,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,73503.9,-1,0,0,0,0,0,2770000,212711,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,59295.695,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,87,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,65762.8,-1,0,0,0,0,0,2770000,204577,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,51161.657,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,88,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,14399.2,-1,0,0,0,0,0,2770000,214655,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,61239.476,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,89,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,34280.8,-1,0,0,0,0,0,2770000,211288,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,57872.369,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,90,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,101840.5,-1,0,0,0,0,0,2770000,226179,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,72763.911,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,91,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,118605,-1,0,0,0,0,0,2770000,222111,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,68695.909,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,92,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,18875.6,-1,0,0,0,0,0,2770000,204119,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,50703.558,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,93,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,79943.7,-1,0,0,0,0,0,2770000,202304,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,48888.699,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,94,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,23454.7,-1,0,0,0,0,0,2770000,404738,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,251322.456,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,95,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,59461.7,-1,0,0,0,0,0,2770000,450895,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,297479.514,1,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 +EIC,EIC_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,96,1,1,0,1,0,0,0,0,0,0.8,0,0,0,0,0,0,0,1,1,1,0,73503.9,-1,0,0,0,0,0,2770000,212711,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,59295.695,1,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,97,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,13077.5,-1,0,0,0,0,0,1730000,145004,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,98,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9995,-1,0,0,0,0,0,1730000,158104,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,99,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,22842.5,-1,0,0,0,0,0,1730000,140443,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,100,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,895,-1,0,0,0,0,0,1730000,157772,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,101,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20865,-1,0,0,0,0,0,1730000,142961,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,102,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,4480,-1,0,0,0,0,0,1730000,166128,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,103,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23652,-1,0,0,0,0,0,1730000,166849,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,104,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,10070,-1,0,0,0,0,0,1730000,157895,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,105,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20680,-1,0,0,0,0,0,1730000,167576,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,106,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,16746,-1,0,0,0,0,0,1730000,156072,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,107,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,13077.5,-1,0,0,0,0,0,1730000,145004,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,108,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9995,-1,0,0,0,0,0,1730000,158104,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,109,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,22842.5,-1,0,0,0,0,0,1730000,140443,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,110,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,895,-1,0,0,0,0,0,1730000,157772,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,111,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20865,-1,0,0,0,0,0,1730000,142961,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,112,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,4480,-1,0,0,0,0,0,1730000,166128,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,113,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23652,-1,0,0,0,0,0,1730000,166849,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,114,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,10070,-1,0,0,0,0,0,1730000,157895,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,115,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20680,-1,0,0,0,0,0,1730000,167576,78449,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,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 +TRE,TRE_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,116,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,16746,-1,0,0,0,0,0,1730000,156072,78449,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,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,117,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,13077.5,-1,0,0,0,0,0,2770000,200994,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,118,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9995,-1,0,0,0,0,0,2770000,214094,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,119,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,22842.5,-1,0,0,0,0,0,2770000,196433,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,120,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,895,-1,0,0,0,0,0,2770000,213762,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,121,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20865,-1,0,0,0,0,0,2770000,198951,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,122,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,4480,-1,0,0,0,0,0,2770000,222118,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,123,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23652,-1,0,0,0,0,0,2770000,222839,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,124,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,10070,-1,0,0,0,0,0,2770000,213885,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,125,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20680,-1,0,0,0,0,0,2770000,223566,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,126,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,16746,-1,0,0,0,0,0,2770000,212062,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,127,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,13077.5,-1,0,0,0,0,0,2770000,200994,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,128,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9995,-1,0,0,0,0,0,2770000,214094,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,129,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,22842.5,-1,0,0,0,0,0,2770000,196433,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,130,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,895,-1,0,0,0,0,0,2770000,213762,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,131,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20865,-1,0,0,0,0,0,2770000,198951,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,132,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,4480,-1,0,0,0,0,0,2770000,222118,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,133,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,23652,-1,0,0,0,0,0,2770000,222839,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,134,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,10070,-1,0,0,0,0,0,2770000,213885,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,135,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,20680,-1,0,0,0,0,0,2770000,223566,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,136,2,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,16746,-1,0,0,0,0,0,2770000,212062,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +WECC,WECC_offshorewind_class3_moderate_fixed_1_0,OffShoreWind_Class3_Moderate_fixed_1,0,137,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,26916.5,-1,0,0,0,0,0,1730000,174794,78449,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,78705.752,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_1,OffShoreWind_Class3_Moderate_fixed_1,1,138,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,29943.3,-1,0,0,0,0,0,1730000,179346,78449,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,83257.787,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_2,OffShoreWind_Class3_Moderate_fixed_1,2,139,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,39553.5,-1,0,0,0,0,0,1730000,177553,78449,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,81464.449,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_3,OffShoreWind_Class3_Moderate_fixed_1,3,140,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,18780,-1,0,0,0,0,0,1730000,162737,78449,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,66648.117,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_4,OffShoreWind_Class3_Moderate_fixed_1,4,141,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,19994,-1,0,0,0,0,0,1730000,174072,78449,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,77983.329,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_5,OffShoreWind_Class3_Moderate_fixed_1,5,142,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,36016,-1,0,0,0,0,0,1730000,175097,78449,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,79008.616,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_6,OffShoreWind_Class3_Moderate_fixed_1,6,143,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,53762,-1,0,0,0,0,0,1730000,174641,78449,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,78552.631,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_7,OffShoreWind_Class3_Moderate_fixed_1,7,144,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1544,-1,0,0,0,0,0,1730000,151442,78449,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,55353.297,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_8,OffShoreWind_Class3_Moderate_fixed_1,8,145,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,44128,-1,0,0,0,0,0,1730000,176829,78449,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,80740.015,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_1_9,OffShoreWind_Class3_Moderate_fixed_1,9,146,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9122,-1,0,0,0,0,0,1730000,151351,78449,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,55262.315,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_0,OffShoreWind_Class3_Moderate_fixed_0,0,147,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,26916.5,-1,0,0,0,0,0,1730000,174794,78449,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,78705.752,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_1,OffShoreWind_Class3_Moderate_fixed_0,1,148,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,29943.3,-1,0,0,0,0,0,1730000,179346,78449,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,83257.787,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_4,OffShoreWind_Class3_Moderate_fixed_0,4,149,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,39553.5,-1,0,0,0,0,0,1730000,177553,78449,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,81464.449,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_5,OffShoreWind_Class3_Moderate_fixed_0,5,150,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,18780,-1,0,0,0,0,0,1730000,162737,78449,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,66648.117,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_10,OffShoreWind_Class3_Moderate_fixed_0,10,151,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,19994,-1,0,0,0,0,0,1730000,174072,78449,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,77983.329,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_11,OffShoreWind_Class3_Moderate_fixed_0,11,152,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,36016,-1,0,0,0,0,0,1730000,175097,78449,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,79008.616,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_18,OffShoreWind_Class3_Moderate_fixed_0,18,153,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,53762,-1,0,0,0,0,0,1730000,174641,78449,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,78552.631,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_19,OffShoreWind_Class3_Moderate_fixed_0,19,154,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1544,-1,0,0,0,0,0,1730000,151442,78449,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,55353.297,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_28,OffShoreWind_Class3_Moderate_fixed_0,28,155,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,44128,-1,0,0,0,0,0,1730000,176829,78449,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,80740.015,1,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.8,0 +WECC,WECC_offshorewind_class3_moderate_fixed_0_29,OffShoreWind_Class3_Moderate_fixed_0,29,156,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9122,-1,0,0,0,0,0,1730000,151351,78449,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,55262.315,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_0,OffShoreWind_Class12_Moderate_floating_1,0,157,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,26916.5,-1,0,0,0,0,0,2770000,232121,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,78705.752,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_1,OffShoreWind_Class12_Moderate_floating_1,1,158,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,29943.3,-1,0,0,0,0,0,2770000,236673,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,83257.787,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_6,OffShoreWind_Class12_Moderate_floating_1,6,159,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,39553.5,-1,0,0,0,0,0,2770000,234880,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,81464.449,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_7,OffShoreWind_Class12_Moderate_floating_1,7,160,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,18780,-1,0,0,0,0,0,2770000,220064,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,66648.117,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_18,OffShoreWind_Class12_Moderate_floating_1,18,161,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,19994,-1,0,0,0,0,0,2770000,231399,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,77983.329,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_19,OffShoreWind_Class12_Moderate_floating_1,19,162,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,36016,-1,0,0,0,0,0,2770000,232424,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,79008.616,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_38,OffShoreWind_Class12_Moderate_floating_1,38,163,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,53762,-1,0,0,0,0,0,2770000,231968,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,78552.631,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_39,OffShoreWind_Class12_Moderate_floating_1,39,164,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1544,-1,0,0,0,0,0,2770000,208769,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,55353.297,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_68,OffShoreWind_Class12_Moderate_floating_1,68,165,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,44128,-1,0,0,0,0,0,2770000,234156,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,80740.015,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_1_69,OffShoreWind_Class12_Moderate_floating_1,69,166,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9122,-1,0,0,0,0,0,2770000,208678,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,55262.315,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_0,OffShoreWind_Class12_Moderate_floating_0,0,167,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,26916.5,-1,0,0,0,0,0,2770000,232121,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,78705.752,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_1,OffShoreWind_Class12_Moderate_floating_0,1,168,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,29943.3,-1,0,0,0,0,0,2770000,236673,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,83257.787,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_8,OffShoreWind_Class12_Moderate_floating_0,8,169,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,39553.5,-1,0,0,0,0,0,2770000,234880,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,81464.449,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_9,OffShoreWind_Class12_Moderate_floating_0,9,170,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,18780,-1,0,0,0,0,0,2770000,220064,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,66648.117,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_28,OffShoreWind_Class12_Moderate_floating_0,28,171,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,19994,-1,0,0,0,0,0,2770000,231399,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,77983.329,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_29,OffShoreWind_Class12_Moderate_floating_0,29,172,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,36016,-1,0,0,0,0,0,2770000,232424,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,79008.616,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_68,OffShoreWind_Class12_Moderate_floating_0,68,173,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,53762,-1,0,0,0,0,0,2770000,231968,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,78552.631,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_69,OffShoreWind_Class12_Moderate_floating_0,69,174,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1544,-1,0,0,0,0,0,2770000,208769,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,55353.297,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_138,OffShoreWind_Class12_Moderate_floating_0,138,175,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,44128,-1,0,0,0,0,0,2770000,234156,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,80740.015,1,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.8,0 +WECC,WECC_offshorewind_class12_moderate_floating_0_139,OffShoreWind_Class12_Moderate_floating_0,139,176,3,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,9122,-1,0,0,0,0,0,2770000,208678,68827,0,0,0,0,0,0,0,0,0,0,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,55262.315,1,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.8,0 +EIC,EIC_batteries_1,Batteries,1,177,1,0,0,0,0,1,0,0,0,0.95,0,0,1424.4,712.2,0,42,712.194,0,0,16.96,0,0,0,0,0,0,0,0,0,0,6235,0,0,0,0.15,0.15,0,0,0,0,10.34,0,0,None,0.041,0,0.92,0.92,0,1,10,0,0,0,0,0,0,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 +EIC,EIC_hydroelectric_pumped_storage_1,Hydroelectric Pumped Storage,1,178,1,0,0,0,0,1,0,0,0,0.95,0,0,275638,17783.1,0,104,17783.064,0,0,170.99,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0.15,0.15,0,0,0,0,10.34,0,0,None,0.524,0,0.866,0.866,0,1,20,0,0,0,0,0,0,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 +TRE,TRE_batteries_1,Batteries,1,179,2,0,0,0,0,1,0,0,0,0,0,0,721.4,360.7,0,8,360.704,0,0,45.09,0,0,0,0,0,0,0,0,0,0,6235,0,0,0,0.15,0.15,0,0,0,0,10.34,0,0,None,0.001,0,0.92,0.92,0,1,10,0,0,0,0,0,0,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.95,0,0 +WECC,WECC_batteries_1,Batteries,1,180,3,0,0,0,0,1,0,0,0,0,0,0,3611,1357.5,0,48,1357.488,0,0,28.28,0,0,0,0,0,0,0,0,0,0,6235,0,0,0,0.15,0.15,0,0,0,0,10.34,0,0,None,0.02,0,0.92,0.92,0,1,10,0,0,0,0,0,0,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.95,0 +WECC,WECC_hydroelectric_pumped_storage_1,Hydroelectric Pumped Storage,1,181,3,0,0,0,0,1,0,0,0,0,0,0,70790,4567.1,0,45,4567.095,0,0,101.49,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0.15,0.15,0,0,0,0,10.34,0,0,None,0.175,0,0.866,0.866,0,1,20,0,0,0,0,0,0,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.95,0 +EIC,EIC_battery_moderate_0,Battery_*_Moderate,0,182,1,0,0,0,0,1,0,0,0,0.95,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,238220.323,19978,5955,141861.827,11897,3546,0.15,0.15,0,0,0,0,0,0,0,None,0,0,0.92,0.92,0,1,10,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_battery_moderate_0,Battery_*_Moderate,0,183,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,238220.323,19389,5955,141861.827,11546,3546,0.15,0.15,0,0,0,0,0,0,0,None,0,0,0.92,0.92,0,1,10,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,15,0.026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +WECC,WECC_battery_moderate_0,Battery_*_Moderate,0,184,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,238220.323,20202,5955,141861.827,12030,3546,0.15,0.15,0,0,0,0,0,0,0,None,0,0,0.92,0.92,0,1,10,0,0,0,0,0,0,0,0,0,1,1,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.95,0 +WECC,WECC_trans_light_duty_1,trans_light_duty,1,185,3,0,0,0,0,0,1,0,0,0,0,0,0,88930.5,0,0,0,0,0,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,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.304267582,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,186,1,0,0,0,0,0,1,0,0,0.95,0,0,0,227552.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,None,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.29105489,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,187,2,0,0,0,0,0,1,0,0,0,0,0,0,34387.8,0,0,0,0,0,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,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.253653324,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +WECC,WECC_comm_water_heat_1,comm_water_heat,1,188,3,0,0,0,0,0,1,0,0,0,0,0,0,1130.3,0,0,0,0,0,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,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.575245441,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,189,1,0,0,0,0,0,1,0,0,0.95,0,0,0,2922.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,None,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.545242595,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,190,2,0,0,0,0,0,1,0,0,0,0,0,0,368.7,0,0,0,0,0,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,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.48278806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +WECC,WECC_res_water_heat_1,res_water_heat,1,191,3,0,0,0,0,0,1,0,0,0,0,0,0,2578.7,0,0,0,0,0,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,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.341639384,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,192,1,0,0,0,0,0,1,0,0,0.95,0,0,0,8238.2,0,0,0,0,0,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,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.358667559,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,193,2,0,0,0,0,0,1,0,0,0,0,0,0,1049.5,0,0,0,0,0,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,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.350966509,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +WECC,WECC_comm_space_heat_cool_1,comm_space_heat_cool,1,194,3,0,0,0,0,0,1,0,0,0,0,0,0,7483.3,0,0,0,0,0,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,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.172929324,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,195,1,0,0,0,0,0,1,0,0,0.95,0,0,0,41624.8,0,0,0,0,0,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,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.155632777,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,196,2,0,0,0,0,0,1,0,0,0,0,0,0,6978.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,None,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.09675803,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +WECC,WECC_res_space_heat_cool_1,res_space_heat_cool,1,197,3,0,0,0,0,0,1,0,0,0,0,0,0,12467.5,0,0,0,0,0,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,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.244983674,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,198,1,0,0,0,0,0,1,0,0,0.95,0,0,0,47457,0,0,0,0,0,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,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.208288887,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,199,2,0,0,0,0,0,1,0,0,0,0,0,0,7585.9,0,0,0,0,0,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,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.190117881,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.95,0,0 +EIC,EIC_biomass_1,Biomass,1,200,1,0,0,0,1,0,0,0,0,0.93,0,0,0,1722.5,0,1351,6256.481,0,0,1.27,0,0,0,0,0,0,0,0,0,0,150850,0,0,0,7.32,0,0,0,172,0,17.03,1.056,3.066,biomass,0.308,0,1,1,0,0,0,0,0,0,0,0,0,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 +EIC,EIC_small_hydroelectric_1,Small Hydroelectric,1,201,1,0,0,0,1,0,0,0,0,0.8,0,0,0,1672.2,0,1579,3633.279,0,0,1.06,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0.273,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_biomass_1,Biomass,1,202,2,0,0,0,1,0,0,0,0,0,0,0,0,44.5,0,30,162.9,0,0,1.48,0,0,0,0,0,0,0,0,0,0,150850,0,0,0,6.51,0,0,0,172,0,15.15,0.636,1.888,biomass,0.591,0,1,1,0,0,0,0,0,0,0,0,0,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.93,0,0 +TRE,TRE_small_hydroelectric_1,Small Hydroelectric,1,203,2,0,0,0,1,0,0,0,0,0,0,0,0,11.2,0,15,54.795,0,0,0.75,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +WECC,WECC_biomass_1,Biomass,1,204,3,0,0,0,1,0,0,0,0,0,0,0,0,551,0,274,1535.496,0,0,2.01,0,0,0,0,0,0,0,0,0,0,150850,0,0,0,7.14,0,0,0,172,0,16.63,2.779,3.894,biomass,0.362,0,1,1,0,0,0,0,0,0,0,0,0,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.93,0 +WECC,WECC_small_hydroelectric_1,Small Hydroelectric,1,205,3,0,0,0,1,0,0,0,0,0,0,0,0,1064.3,0,659,2966.818,0,0,1.62,0,0,0,0,0,0,0,0,0,0,47048,0,0,0,0,0,0,0,0,0,10.34,0,0,None,0.181,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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.8,0 +WECC,WECC_distributed_generation_1,distributed_generation,1,206,3,0,0,0,1,0,0,0,0,0,0,0,0,250535,0,0,0,0,0,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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.8,0 +EIC,EIC_distributed_generation_1,distributed_generation,1,207,1,0,0,0,1,0,0,0,0,0.8,0,0,0,1770000,0,0,0,0,0,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +TRE,TRE_distributed_generation_1,distributed_generation,1,208,2,0,0,0,1,0,0,0,0,0,0,0,0,17006,0,0,0,0,0,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,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 +EIC,EIC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,209,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,14198,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,210,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,17082,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,211,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,17267,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,212,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,25483,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,213,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,16488,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,214,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,25720,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,215,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,21224,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,216,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,32633,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,217,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,28526,0,0,0,0,0.15,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,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,1 +EIC,EIC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,218,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,244462,0,0,0,0,0.15,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,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,1 +EIC,EIC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,219,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,220,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,8863,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,221,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,4464,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,222,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,14630,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,223,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,10126,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,224,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,16248,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,225,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,22825,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,226,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,24566,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,227,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,21181,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,228,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,32414,0,0,0,0,0.15,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,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,1 +EIC,EIC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,229,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,148669,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,230,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,14393,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,231,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,20298,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,232,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,14755,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,233,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,23630,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,234,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,12498,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,235,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,23788,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,236,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,15633,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,237,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,29021,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,238,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,40897,0,0,0,0,0.15,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,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,1 +TRE,TRE_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,239,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,146712,0,0,0,0,0.15,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,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,1 +TRE,TRE_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,240,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0.15,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,1,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,1 +TRE,TRE_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,241,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,6412,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,242,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,8461,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,243,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,10479,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,244,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,14103,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,245,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,14224,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,246,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,18539,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,247,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,22325,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,248,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,17464,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,249,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,74721,0,0,0,0,0.15,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,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,1 +TRE,TRE_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,250,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,29582,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_0,LandbasedWind_Class1_Moderate_,0,251,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,20294,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_1,LandbasedWind_Class1_Moderate_,1,252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,19872,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_2,LandbasedWind_Class1_Moderate_,2,253,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,27185,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_3,LandbasedWind_Class1_Moderate_,3,254,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,19137,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_4,LandbasedWind_Class1_Moderate_,4,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,26039,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_5,LandbasedWind_Class1_Moderate_,5,256,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,133609,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_6,LandbasedWind_Class1_Moderate_,6,257,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,29900,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_7,LandbasedWind_Class1_Moderate_,7,258,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,160193,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_8,LandbasedWind_Class1_Moderate_,8,259,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,38235,0,0,0,0,0.15,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,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,1 +WECC,WECC_landbasedwind_class1_moderate_9,LandbasedWind_Class1_Moderate_,9,260,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,879445.731,274991,0,0,0,0,0.15,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,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,1 +WECC,WECC_storage_metalair_advanced_0,Storage_MetalAir_Advanced,0,261,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,-1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_0,UtilityPV_Class1_Moderate_,0,262,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,10320,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_1,UtilityPV_Class1_Moderate_,1,263,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,6016,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_2,UtilityPV_Class1_Moderate_,2,264,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,19411,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_3,UtilityPV_Class1_Moderate_,3,265,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,3992,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_4,UtilityPV_Class1_Moderate_,4,266,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,25714,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_5,UtilityPV_Class1_Moderate_,5,267,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,8052,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_6,UtilityPV_Class1_Moderate_,6,268,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,33457,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_7,UtilityPV_Class1_Moderate_,7,269,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,16842,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_8,UtilityPV_Class1_Moderate_,8,270,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,105939,0,0,0,0,0.15,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,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,1 +WECC,WECC_utilitypv_class1_moderate_9,UtilityPV_Class1_Moderate_,9,271,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,-1,-1,0,0,0,0,0,630556.245,28290,0,0,0,0,0.15,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,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,1 \ No newline at end of file diff --git a/test/LoadResourceData/test_gen_vre_stor/inputs_after_loadgen.jld2 b/test/LoadResourceData/test_gen_vre_stor/inputs_after_loadgen.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..22ad28e801205a19aa05126a499aa5ae46054f03 GIT binary patch literal 5334016 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
    4H`;RGGa$D`TMm2% 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/s(o$?V*DDc`(BMJcUL&sSneBMP>gO>~~Jd{gaFK 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

    ^lY8~4RZ8d$U}~v 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%0AQFhX1mM!2Y0?_z(R@-|XGlhJJG$Ra^YW>HoW0 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%0AgYk92tZRc$}0?!>Il)zoXgM;K!Y zf7{Sg80uLkd8|feH5TM#94;?>cX0An8}`lVcMWC#d)WUe$H@D&eUH;#oeQ3uvpMao zsopUZmo^^wXy763$N!4`!%9|5d6fZIN2bh+EoP&1%uSox%KlW?Fa5|ND~t)Vlc^)| zZcR0!8U0wNbK|dnY&(Fb+jQ!?X**r8i?;@4` ze7Fksengx8HtK;n`D-BY!+z)VPpq+F-|UYXO8mI`c3-sztb9^8H_;nO{IDPX=<<9v z>!Fzsjg=n-apmuxe&?)wOfV;3O_co?VE@4T-7xvFGisZ&2idkPimQ(G8*lW+-U)Fr zBF8G&A2d@xuYmpcd&ec(Xb-Z1Py5X!eq8Nbw7!^?yYuoPllG$|e%LQlug0e~+k?4j z*FyPG7FSw7&3vw$jdC#i#g@wcTG*d^eLd&7o(vmLaT_+fuzlc}$S)DE0NQ2+5bPcz4-4(jo`xT-$w+S*Ar z{V?;Rqw?be__1Q#fOR(gFxy2ZK`^R>uFcz$G7lfMWxrQ+?_Y)FWr>=*nv79hO~?B zZKJ<155;ts_+h_bsS;M!6J~$iL*kFu@i*LiGJP zmZK7Me(d_J_dxB(f5QH$+&s(itonUHZIa5l1UA>+>gQ~Ov|BGE?p?266Y8`gt=K;& zhiVUd4b$=@WUt}SA$yI04%urYbjbdRTK^8R|0w8?{YOKG?EfHi$RT62{ww6@vCtt$ zkAn`Gn56Y9kcs1=Lncmu4w*Pn>se=M`8Z^r*;;=FGS5@cA@6=#>kA+YKcn?!kcFSs z`YVu?pVRv5kd^0X{cXtFbG5z`vcdDvA*1GLeII1|`C2~$*?s|Z$nFcZegd-l3(z6E zFVgx_$neF`Axpie^=*(3EP)Q$bg9;NLpEIo9kR`GtsjDHvjRF~o0qiy8Dy80T0aHZ z=Vj=SeO77x2gm`dwf+m_uvef%4qF2qa@bm}UxS?ds@5~D({eWCU9V~VMacWtLx;S7 zgVtY$tnj+lKZLB-zV&Jk9fLW3346BaF#Wo>e{X`r8liR!!Ci4M=iAZB{tDP1^--0P zo;s#fuz%Pw_LcaD>-b+UP}s_$UNim}i68d={rZ@duUF>2bU%rIgpU8+3fmWX%Kx+K zVM&LN^y=rK{+VCTV%6g-VE>`;3=ep+ze2vQsMK^s>>D2JoBP52)#F7+>iDnp-U}qB zz4{-g?5}|RSx>HM>M4GSU6RN3wz>Z_Ks{a*!{qM$txIeBA+0AouQ$zk(?I3NTKLhu z?+L6Y(zYDTdJwPdm&Np;(?TRAjouH%ME{ILJ~iGg?6h~F&#VG=*4yW3B^ zj;l@f`+?!gkB#u7#?oDn=zIvtk5pat8=?HDi|PKskqxk}P22v+Jk&i>*?$-IU)URO z<$Jlg-<2rwV|i0+_F*ebNON8=O5%t8gA+FHv(X+hDVv-Zj+XeboO^QBrx=%QUG)

    Ci64vg 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 literal 0 HcmV?d00001 diff --git a/test/LoadResourceData/test_gen_vre_stor/inputs_before_loadgen.jld2 b/test/LoadResourceData/test_gen_vre_stor/inputs_before_loadgen.jld2 new file mode 100644 index 0000000000000000000000000000000000000000..56f8db5d5987338b9fafebcea67e77f62eeef149 GIT binary patch literal 18636 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 ts@7`CZRJ^I= 0, :r_id] +end + +function test_ids_with_positive(attr::Symbol, gen, dfGen) + @test GenX.ids_with_positive(gen,attr) == dfGen[dfGen[!, attr] .> 0, :r_id] +end + +function prepare_inputs_true(test_path::AbstractString, in_filenames::InputsTrue, setup::Dict) + gen_filename = in_filenames.gen_filename + inputs_filename = in_filenames.inputs_filename + dfGen = GenX.load_dataframe(joinpath(test_path, gen_filename)) + scale_factor = setup["ParameterScale"] == 1 ? GenX.ModelScalingFactor : 1. + GenX.rename!(dfGen, lowercase.(names(dfGen))) + GenX.scale_resources_data!(dfGen, scale_factor) + dfGen[!,:r_id] = 1:size(dfGen,1) + inputs_true = load(joinpath(test_path, inputs_filename)) + return dfGen, inputs_true +end + +function test_load_scaled_resources_data(gen, dfGen) + + ## Test that the data loaded correctly + # Test resource types + @test GenX.storage(gen) == dfGen[dfGen.stor .== 1, :r_id] + @test GenX.thermal(gen) == dfGen[dfGen.therm .== 1, :r_id] + @test GenX.vre(gen) == dfGen[dfGen.vre .== 1, :r_id] + @test GenX.hydro(gen) == dfGen[dfGen.hydro .== 1, :r_id] + @test GenX.flex_demand(gen) == dfGen[dfGen.flex .== 1, :r_id] + @test GenX.electrolyzer(gen) == dfGen[dfGen.electrolyzer .== 1, :r_id] + @test GenX.must_run(gen) == dfGen[dfGen.must_run .== 1, :r_id] + + @test GenX.is_LDS(gen) == dfGen[dfGen.lds .== 1, :r_id] + @test GenX.is_SDS(gen) == dfGen[dfGen.lds .== 0, :r_id] + + # Test resource attributes + @test GenX.resource_name.(gen) == dfGen.resource + @test GenX.resource_id.(gen) == dfGen.r_id + @test GenX.resource_type_mga.(gen) == dfGen.resource_type + @test GenX.zone_id.(gen) == dfGen.zone + + @test GenX.max_cap_mw.(gen) == dfGen.max_cap_mw + @test GenX.min_cap_mw.(gen) == dfGen.min_cap_mw + @test GenX.min_cap_mwh.(gen) == dfGen.min_cap_mwh + + @test GenX.existing_cap_mw.(gen) == dfGen.existing_cap_mw + @test GenX.existing_cap_mwh.(gen) == dfGen.existing_cap_mwh + + @test GenX.num_vre_bins.(gen) == dfGen.num_vre_bins + + @test GenX.qualified_hydrogen_supply.(gen) == dfGen.qualified_hydrogen_supply + + @test GenX.reg_cost.(gen) == dfGen.reg_cost + @test GenX.reg_max.(gen) == dfGen.reg_max + @test GenX.rsv_cost.(gen) == dfGen.rsv_cost + @test GenX.rsv_max.(gen) == dfGen.rsv_max + + @test GenX.inv_cost_per_mwyr.(gen) == dfGen.inv_cost_per_mwyr + @test GenX.fixed_om_cost_per_mwyr.(gen) == dfGen.fixed_om_cost_per_mwyr + @test GenX.var_om_cost_per_mwh.(gen) == dfGen.var_om_cost_per_mwh + @test GenX.inv_cost_per_mwhyr.(gen) == dfGen.inv_cost_per_mwhyr + @test GenX.fixed_om_cost_per_mwhyr.(gen) == dfGen.fixed_om_cost_per_mwhyr + @test GenX.start_cost_per_mw.(gen) == dfGen.start_cost_per_mw + + @test GenX.fuel.(gen) == dfGen.fuel + @test GenX.co2_capture_fraction.(gen) == dfGen.co2_capture_fraction + @test GenX.co2_capture_fraction_startup.(gen) == dfGen.co2_capture_fraction_startup + @test GenX.ccs_disposal_cost_per_metric_ton.(gen) == dfGen.ccs_disposal_cost_per_metric_ton + @test GenX.biomass.(gen) == dfGen.biomass + + @test GenX.ids_with_mga(gen) == dfGen[dfGen.mga .== 1, :r_id] + + @test GenX.region.(gen) == dfGen.region + @test GenX.cluster.(gen) == dfGen.cluster +end + +function test_add_policies_to_resources(gen, dfGen) + @test GenX.esr.(gen, tag=1) == dfGen.esr_1 + @test GenX.esr.(gen, tag=2) == dfGen.esr_2 + @test GenX.min_cap.(gen, tag=1) == dfGen.mincaptag_1 + @test GenX.min_cap.(gen, tag=2) == dfGen.mincaptag_2 + @test GenX.min_cap.(gen, tag=3) == dfGen.mincaptag_3 + @test GenX.derating_factor.(gen, tag=1) == dfGen.capres_1 +end + +function test_add_modules_to_resources(gen, dfGen) + @test GenX.tech_wacc.(gen) == dfGen.wacc + @test GenX.capital_recovery_period.(gen) == dfGen.capital_recovery_period + @test GenX.lifetime.(gen) == dfGen.lifetime + @test GenX.min_retired_cap_mw.(gen) == dfGen.min_retired_cap_mw + @test GenX.min_retired_energy_cap_mw.(gen) == dfGen.min_retired_energy_cap_mw + @test GenX.min_retired_charge_cap_mw.(gen) == dfGen.min_retired_charge_cap_mw +end + +function test_inputs_keys(inputs, inputs_true) + @test inputs["G"] == inputs_true["G"] + + @test inputs["HYDRO_RES"] == inputs_true["HYDRO_RES"] + @test inputs["HYDRO_RES_KNOWN_CAP"] == inputs_true["HYDRO_RES_KNOWN_CAP"] + @test inputs["STOR_ALL"] == inputs_true["STOR_ALL"] + @test inputs["STOR_SYMMETRIC"] == inputs_true["STOR_SYMMETRIC"] + @test inputs["STOR_ASYMMETRIC"] == inputs_true["STOR_ASYMMETRIC"] + @test inputs["STOR_SHORT_DURATION"] == inputs_true["STOR_SHORT_DURATION"] + @test inputs["STOR_LONG_DURATION"] == inputs_true["STOR_LONG_DURATION"] + @test inputs["STOR_HYDRO_LONG_DURATION"] == inputs_true["STOR_HYDRO_LONG_DURATION"] + @test inputs["VRE"] == inputs_true["VRE"] + @test inputs["FLEX"] == inputs_true["FLEX"] + @test inputs["MUST_RUN"] == inputs_true["MUST_RUN"] + @test inputs["ELECTROLYZER"] == inputs_true["ELECTROLYZER"] + @test inputs["RETRO"] == inputs_true["RETRO"] + @test inputs["REG"] == inputs_true["REG"] + @test inputs["RSV"] == inputs_true["RSV"] + @test inputs["THERM_ALL"] == inputs_true["THERM_ALL"] + @test inputs["THERM_COMMIT"] == inputs_true["THERM_COMMIT"] + @test inputs["THERM_NO_COMMIT"] == inputs_true["THERM_NO_COMMIT"] + @test inputs["COMMIT"] == inputs_true["COMMIT"] + @test inputs["C_Start"] == inputs_true["C_Start"] + + @test Set(inputs["RET_CAP"]) == inputs_true["RET_CAP"] + @test Set(inputs["RET_CAP_CHARGE"]) == inputs_true["RET_CAP_CHARGE"] + @test Set(inputs["RET_CAP_ENERGY"]) == inputs_true["RET_CAP_ENERGY"] + @test Set(inputs["NEW_CAP"]) == inputs_true["NEW_CAP"] + @test Set(inputs["NEW_CAP_ENERGY"]) == inputs_true["NEW_CAP_ENERGY"] + @test Set(inputs["NEW_CAP_CHARGE"]) == inputs_true["NEW_CAP_CHARGE"] + @test string.(inputs["slope_cols"]) == lowercase.(string.(inputs_true["slope_cols"])) + @test string.(inputs["intercept_cols"]) == lowercase.(string.(inputs_true["intercept_cols"])) + @test inputs["PWFU_data"] == rename!(inputs_true["PWFU_data"], lowercase.(names(inputs_true["PWFU_data"]))) + @test inputs["PWFU_Num_Segments"] == inputs_true["PWFU_Num_Segments"] + @test inputs["THERM_COMMIT_PWFU"] == inputs_true["THERM_COMMIT_PWFU"] + + @test inputs["HAS_FUEL"] == inputs_true["HAS_FUEL"] + + @test inputs["R_ZONES"] == inputs_true["R_ZONES"] + @test inputs["RESOURCE_ZONES"] == inputs_true["RESOURCE_ZONES"] + @test inputs["RESOURCE_NAMES"] == inputs_true["RESOURCES"] +end + +function test_resource_specific_attributes(gen, dfGen, inputs) + @test GenX.is_buildable(gen) == dfGen[dfGen.new_build .== 1, :r_id] + @test GenX.is_retirable(gen) == dfGen[dfGen.can_retire .== 1, :r_id] + + rs = GenX.ids_with_positive(gen, GenX.max_cap_mwh) + @test rs == dfGen[dfGen.max_cap_mwh .> 0, :r_id] + @test GenX.max_cap_mwh.(rs) == dfGen[dfGen.max_cap_mwh .> 0, :r_id] + rs = GenX.ids_with_positive(gen, GenX.max_charge_cap_mw) + @test rs == dfGen[dfGen.max_charge_cap_mw .> 0, :r_id] + @test GenX.max_charge_cap_mw.(rs) == dfGen[dfGen.max_charge_cap_mw .> 0, :r_id] + rs = GenX.ids_with_unit_commitment(gen) + @test rs == dfGen[dfGen.therm .== 1, :r_id] + @test GenX.cap_size.(gen[rs]) == dfGen[dfGen.therm.==1,:cap_size] + rs = setdiff(inputs["HAS_FUEL"], inputs["THERM_COMMIT"]) + @test GenX.heat_rate_mmbtu_per_mwh.(gen[rs]) == dfGen[rs, :heat_rate_mmbtu_per_mwh] + rs = setdiff(inputs["THERM_COMMIT"], inputs["THERM_COMMIT_PWFU"]) + @test GenX.heat_rate_mmbtu_per_mwh.(gen[rs]) == dfGen[rs, :heat_rate_mmbtu_per_mwh] + rs = inputs["THERM_COMMIT"] + @test GenX.start_fuel_mmbtu_per_mw.(gen[rs]) == dfGen[rs, :start_fuel_mmbtu_per_mw] + rs = union(inputs["STOR_ALL"], inputs["HYDRO_RES"]) + @test GenX.efficiency_up.(gen[rs]) == dfGen[rs, :eff_up] + @test GenX.efficiency_down.(gen[rs]) == dfGen[rs, :eff_down] + rs = union(inputs["THERM_ALL"], inputs["HYDRO_RES"], inputs["ELECTROLYZER"]) + @test GenX.min_power.(gen[rs]) == dfGen[rs, :min_power] + @test GenX.ramp_up_fraction.(gen[rs]) == dfGen[rs, :ramp_up_percentage] + @test GenX.ramp_down_fraction.(gen[rs]) == dfGen[rs, :ramp_dn_percentage] + rs = inputs["STOR_ASYMMETRIC"] + @test GenX.max_charge_cap_mw.(gen[rs]) == dfGen[rs, :max_charge_cap_mw] + @test GenX.min_charge_cap_mw.(gen[rs]) == dfGen[rs, :min_charge_cap_mw] + @test GenX.existing_charge_cap_mw.(gen[rs]) == dfGen[rs, :existing_charge_cap_mw] + @test GenX.inv_cost_charge_per_mwyr.(gen[rs]) == dfGen[rs, :inv_cost_charge_per_mwyr] + @test GenX.fixed_om_cost_charge_per_mwyr.(gen[rs]) == dfGen[rs, :fixed_om_cost_charge_per_mwyr] + rs = union(inputs["HYDRO_RES_KNOWN_CAP"], inputs["STOR_HYDRO_LONG_DURATION"]) + @test GenX.hydro_energy_to_power_ratio.(gen[rs]) == dfGen[rs, :hydro_energy_to_power_ratio] +end + +function test_load_resources_data() + setup = Dict( + "ParameterScale" => 0, + "Reserves" => 1, + "UCommit" => 2, + "MultiStage" => 1, + "ResourcePath" => "Resources", + ) + + test_path = joinpath("LoadResourceData", "test_gen_non_colocated") + + # load dfGen and inputs_true to compare against + input_true_filenames = InputsTrue("generators_data.csv", "inputs_after_loadgen.jld2") + dfGen, inputs_true = prepare_inputs_true(test_path, input_true_filenames, setup) + + # Test resource data is loaded correctly + gen = GenX.create_resource_array(setup, test_path) + @testset "Default fields" begin + test_load_scaled_resources_data(gen, dfGen) + end + + # Test policy fields are correctly added to the resource structs + GenX.add_policies_to_resources!(gen, setup, test_path) + @testset "Policy attributes" begin + test_add_policies_to_resources(gen, dfGen) + end + + # Test modules are correctly added to the resource structs + GenX.add_modules_to_resources!(gen, setup, test_path) + @testset "Module attributes" begin + test_add_modules_to_resources(gen, dfGen) + end + + # Test that the inputs keys are correctly set + inputs = load(joinpath(test_path, "inputs_before_loadgen.jld2")) + GenX.add_resources_to_input_data!(inputs, setup, test_path, gen) + @testset "Inputs keys" begin + test_inputs_keys(inputs, inputs_true) + end + + # Test that the resource-specific attributes are correctly set + @testset "resource-specific attributes" begin + test_resource_specific_attributes(gen, dfGen, inputs) + end +end + +function test_load_VRE_STOR_data() + + setup = Dict( + "ParameterScale" => 0, + "Reserves" => 1, + "UCommit" => 2, + "MultiStage" => 0, + "ResourcePath" => "Resources", + ) + + test_path = joinpath("LoadResourceData","test_gen_vre_stor") + input_true_filenames = InputsTrue("generators_data.csv", "inputs_after_loadgen.jld2") + dfGen, inputs_true = prepare_inputs_true(test_path, input_true_filenames, setup) + + dfVRE_STOR = GenX.load_dataframe(joinpath(test_path, "Vre_and_stor_data.csv")) + dfVRE_STOR = GenX.rename!(dfVRE_STOR, lowercase.(names(dfVRE_STOR))) + scale_factor = setup["ParameterScale"] == 1 ? GenX.ModelScalingFactor : 1. + GenX.scale_vre_stor_data!(dfVRE_STOR, scale_factor) + + gen = GenX.create_resource_array(setup, test_path) + GenX.add_policies_to_resources!(gen, setup, test_path) + inputs = load(joinpath(test_path, "inputs_before_loadgen.jld2")) + GenX.add_resources_to_input_data!(inputs, setup, test_path, gen) + + @test GenX.vre_stor(gen) == dfGen[dfGen.vre_stor .== 1, :r_id] + sort!(dfVRE_STOR, :resource) + + rs = inputs["VRE_STOR"] + @test GenX.solar(gen) == dfVRE_STOR[dfVRE_STOR.solar .== 1, :r_id] + @test GenX.wind(gen) == dfVRE_STOR[dfVRE_STOR.wind .== 1, :r_id] + @test GenX.storage_dc_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_discharge .>= 1, :r_id] + @test GenX.storage_sym_dc_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_discharge .== 1, :r_id] + @test GenX.storage_asym_dc_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_discharge .== 2, :r_id] + + @test GenX.storage_dc_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_charge .>= 1, :r_id] + @test GenX.storage_sym_dc_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_charge .== 1, :r_id] + @test GenX.storage_asym_dc_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_dc_charge .== 2, :r_id] + + @test GenX.storage_ac_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_discharge .>= 1, :r_id] + @test GenX.storage_sym_ac_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_discharge .== 1, :r_id] + @test GenX.storage_asym_ac_discharge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_discharge .== 2, :r_id] + + @test GenX.storage_ac_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_charge .>= 1, :r_id] + @test GenX.storage_sym_ac_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_charge .== 1, :r_id] + @test GenX.storage_asym_ac_charge(gen) == dfVRE_STOR[dfVRE_STOR.stor_ac_charge .== 2, :r_id] + + @test GenX.technology.(gen[rs]) == dfVRE_STOR.technology + @test GenX.is_LDS_VRE_STOR(gen) == dfVRE_STOR[dfVRE_STOR.lds_vre_stor .!= 0, :r_id] + + + for attr in (:existing_cap_solar_mw, + :existing_cap_wind_mw, + :existing_cap_inverter_mw, + :existing_cap_charge_dc_mw, + :existing_cap_charge_ac_mw, + :existing_cap_discharge_dc_mw, + :existing_cap_discharge_ac_mw) + test_macro_interface(attr, gen[rs], dfVRE_STOR) + test_ids_with_nonneg(attr, gen[rs], dfVRE_STOR) + end + + for attr in (:max_cap_solar_mw, + :max_cap_wind_mw, + :max_cap_inverter_mw, + :max_cap_charge_dc_mw, + :max_cap_charge_ac_mw, + :max_cap_discharge_dc_mw, + :max_cap_discharge_ac_mw) + test_macro_interface(attr, gen[rs], dfVRE_STOR) + test_ids_with_nonneg(attr, gen[rs], dfVRE_STOR) + test_ids_with(attr, gen[rs], dfVRE_STOR) + end + + for attr in (:min_cap_solar_mw, + :min_cap_wind_mw, + :min_cap_inverter_mw, + :min_cap_charge_dc_mw, + :min_cap_charge_ac_mw, + :min_cap_discharge_dc_mw, + :min_cap_discharge_ac_mw, + :inverter_ratio_solar, + :inverter_ratio_wind,) + test_macro_interface(attr, gen[rs], dfVRE_STOR) + test_ids_with_positive(attr, gen[rs], dfVRE_STOR) + end + + for attr in (:etainverter, + :inv_cost_inverter_per_mwyr, + :inv_cost_solar_per_mwyr, + :inv_cost_wind_per_mwyr, + :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_inverter_cost_per_mwyr, + :fixed_om_solar_cost_per_mwyr, + :fixed_om_wind_cost_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_dc, + :var_om_cost_per_mwh_discharge_dc, + :var_om_cost_per_mwh_charge_ac, + :var_om_cost_per_mwh_discharge_ac, + :eff_up_ac, + :eff_down_ac, + :eff_up_dc, + :eff_down_dc, + :power_to_energy_ac, + :power_to_energy_dc) + test_macro_interface(attr, gen[rs], dfVRE_STOR) + end + + # policies + @test GenX.esr_vrestor.(gen[rs], tag=1) == dfVRE_STOR.esr_vrestor_1 + @test GenX.esr_vrestor.(gen[rs], tag=2) == dfVRE_STOR.esr_vrestor_2 + @test GenX.min_cap_stor.(gen[rs], tag=1) == dfVRE_STOR.mincaptagstor_1 + @test GenX.min_cap_stor.(gen[rs], tag=2) == dfVRE_STOR.mincaptagstor_2 + @test GenX.derating_factor.(gen[rs], tag=1) == dfVRE_STOR.capresvrestor_1 + @test GenX.derating_factor.(gen[rs], tag=2) == dfVRE_STOR.capresvrestor_2 + @test GenX.max_cap_stor.(gen[rs], tag=1) == dfVRE_STOR.maxcaptagstor_1 + @test GenX.max_cap_stor.(gen[rs], tag=2) == dfVRE_STOR.maxcaptagstor_2 + @test GenX.min_cap_solar.(gen[rs], tag=1) == dfVRE_STOR.mincaptagsolar_1 + @test GenX.max_cap_solar.(gen[rs], tag=1) == dfVRE_STOR.maxcaptagsolar_1 + @test GenX.min_cap_wind.(gen[rs], tag=1) == dfVRE_STOR.mincaptagwind_1 + @test GenX.max_cap_wind.(gen[rs], tag=1) == dfVRE_STOR.maxcaptagwind_1 + + @test GenX.ids_with_policy(gen, GenX.min_cap_solar, tag=1) == dfVRE_STOR[dfVRE_STOR.mincaptagsolar_1 .== 1, :r_id] + @test GenX.ids_with_policy(gen, GenX.min_cap_wind, tag=1) == dfVRE_STOR[dfVRE_STOR.mincaptagwind_1 .== 1, :r_id] + @test GenX.ids_with_policy(gen, GenX.min_cap_stor, tag=1) == dfVRE_STOR[dfVRE_STOR.mincaptagstor_1 .== 1, :r_id] + @test GenX.ids_with_policy(gen, GenX.max_cap_solar, tag=1) == dfVRE_STOR[dfVRE_STOR.maxcaptagsolar_1 .== 1, :r_id] + @test GenX.ids_with_policy(gen, GenX.max_cap_wind, tag=1) == dfVRE_STOR[dfVRE_STOR.maxcaptagwind_1 .== 1, :r_id] + @test GenX.ids_with_policy(gen, GenX.max_cap_stor, tag=1) == dfVRE_STOR[dfVRE_STOR.maxcaptagstor_1 .== 1, :r_id] + + # inputs keys + @test inputs["VRE_STOR"] == dfGen[dfGen.vre_stor.==1,:r_id] + @test inputs["VS_SOLAR"] == dfVRE_STOR[(dfVRE_STOR.solar.!=0),:r_id] + @test inputs["VS_WIND"] == dfVRE_STOR[(dfVRE_STOR.wind.!=0),:r_id] + @test inputs["VS_DC"] == union(dfVRE_STOR[dfVRE_STOR.stor_dc_discharge.>=1,:r_id], dfVRE_STOR[dfVRE_STOR.stor_dc_charge.>=1,:r_id], dfVRE_STOR[dfVRE_STOR.solar.!=0,:r_id]) + + @test inputs["VS_STOR"] == union(dfVRE_STOR[dfVRE_STOR.stor_dc_charge.>=1,:r_id], dfVRE_STOR[dfVRE_STOR.stor_ac_charge.>=1,:r_id], + dfVRE_STOR[dfVRE_STOR.stor_dc_discharge.>=1,:r_id], dfVRE_STOR[dfVRE_STOR.stor_ac_discharge.>=1,:r_id]) + STOR = inputs["VS_STOR"] + @test inputs["VS_STOR_DC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_discharge.>=1),:r_id] + @test inputs["VS_SYM_DC_DISCHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_dc_discharge.==1,:r_id] + @test inputs["VS_ASYM_DC_DISCHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_dc_discharge.==2,:r_id] + @test inputs["VS_STOR_DC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_charge.>=1),:r_id] + @test inputs["VS_SYM_DC_CHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_dc_charge.==1,:r_id] + @test inputs["VS_ASYM_DC_CHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_dc_charge.==2,:r_id] + @test inputs["VS_STOR_AC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_discharge.>=1),:r_id] + @test inputs["VS_SYM_AC_DISCHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_ac_discharge.==1,:r_id] + @test inputs["VS_ASYM_AC_DISCHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_ac_discharge.==2,:r_id] + @test inputs["VS_STOR_AC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_charge.>=1),:r_id] + @test inputs["VS_SYM_AC_CHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_ac_charge.==1,:r_id] + @test inputs["VS_ASYM_AC_CHARGE"] == dfVRE_STOR[dfVRE_STOR.stor_ac_charge.==2,:r_id] + @test inputs["VS_LDS"] == dfVRE_STOR[(dfVRE_STOR.lds_vre_stor.!=0),:r_id] + @test inputs["VS_nonLDS"] == setdiff(STOR, inputs["VS_LDS"]) + @test inputs["VS_ASYM"] == union(inputs["VS_ASYM_DC_CHARGE"], inputs["VS_ASYM_DC_DISCHARGE"], inputs["VS_ASYM_AC_DISCHARGE"], inputs["VS_ASYM_AC_CHARGE"]) + @test inputs["VS_SYM_DC"] == intersect(inputs["VS_SYM_DC_CHARGE"], inputs["VS_SYM_DC_DISCHARGE"]) + @test inputs["VS_SYM_AC"] == intersect(inputs["VS_SYM_AC_CHARGE"], inputs["VS_SYM_AC_DISCHARGE"]) + + buildable = dfGen[dfGen.new_build .== 1, :r_id] + retirable = dfGen[dfGen.can_retire .== 1, :r_id] + @test inputs["NEW_CAP_SOLAR"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.solar.!=0,:r_id], dfVRE_STOR[dfVRE_STOR.max_cap_solar_mw.!=0,:r_id]) + @test inputs["RET_CAP_SOLAR"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.solar.!=0,:r_id], dfVRE_STOR[dfVRE_STOR.existing_cap_solar_mw.>=0,:r_id]) + @test inputs["NEW_CAP_WIND"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.wind.!=0,:r_id], dfVRE_STOR[dfVRE_STOR.max_cap_wind_mw.!=0,:r_id]) + @test inputs["RET_CAP_WIND"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.wind.!=0,:r_id], dfVRE_STOR[dfVRE_STOR.existing_cap_wind_mw.>=0,:r_id]) + @test inputs["NEW_CAP_DC"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.max_cap_inverter_mw.!=0,:r_id], inputs["VS_DC"]) + @test inputs["RET_CAP_DC"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.existing_cap_inverter_mw.>=0,:r_id], inputs["VS_DC"]) + @test inputs["NEW_CAP_STOR"] == intersect(buildable, dfGen[dfGen.max_cap_mwh.!=0,:r_id], inputs["VS_STOR"]) + @test inputs["RET_CAP_STOR"] == intersect(retirable, dfGen[dfGen.existing_cap_mwh.>=0,:r_id], inputs["VS_STOR"]) + @test inputs["NEW_CAP_CHARGE_DC"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.max_cap_charge_dc_mw.!=0,:r_id], inputs["VS_ASYM_DC_CHARGE"]) + @test inputs["RET_CAP_CHARGE_DC"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.existing_cap_charge_dc_mw.>=0,:r_id], inputs["VS_ASYM_DC_CHARGE"]) + @test inputs["NEW_CAP_DISCHARGE_DC"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.max_cap_discharge_dc_mw.!=0,:r_id], inputs["VS_ASYM_DC_DISCHARGE"]) + @test inputs["RET_CAP_DISCHARGE_DC"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.existing_cap_discharge_dc_mw.>=0,:r_id], inputs["VS_ASYM_DC_DISCHARGE"]) + @test inputs["NEW_CAP_CHARGE_AC"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.max_cap_charge_ac_mw.!=0,:r_id], inputs["VS_ASYM_AC_CHARGE"]) + @test inputs["RET_CAP_CHARGE_AC"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.existing_cap_charge_ac_mw.>=0,:r_id], inputs["VS_ASYM_AC_CHARGE"]) + @test inputs["NEW_CAP_DISCHARGE_AC"] == intersect(buildable, dfVRE_STOR[dfVRE_STOR.max_cap_discharge_ac_mw.!=0,:r_id], inputs["VS_ASYM_AC_DISCHARGE"]) + @test inputs["RET_CAP_DISCHARGE_AC"] == intersect(retirable, dfVRE_STOR[dfVRE_STOR.existing_cap_discharge_ac_mw.>=0,:r_id], inputs["VS_ASYM_AC_DISCHARGE"]) + @test inputs["RESOURCE_NAMES_VRE_STOR"] == collect(skipmissing(dfVRE_STOR[!,:resource][1:size(inputs["VRE_STOR"])[1]])) + @test inputs["RESOURCE_NAMES_SOLAR"] == dfVRE_STOR[(dfVRE_STOR.solar.!=0), :resource] + @test inputs["RESOURCE_NAMES_WIND"] == dfVRE_STOR[(dfVRE_STOR.wind.!=0), :resource] + @test inputs["RESOURCE_NAMES_DC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_discharge.!=0), :resource] + @test inputs["RESOURCE_NAMES_AC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_discharge.!=0), :resource] + @test inputs["RESOURCE_NAMES_DC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_charge.!=0), :resource] + @test inputs["RESOURCE_NAMES_AC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_charge.!=0), :resource] + @test inputs["ZONES_SOLAR"] == dfVRE_STOR[(dfVRE_STOR.solar.!=0), :zone] + @test inputs["ZONES_WIND"] == dfVRE_STOR[(dfVRE_STOR.wind.!=0), :zone] + @test inputs["ZONES_DC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_discharge.!=0), :zone] + @test inputs["ZONES_AC_DISCHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_discharge.!=0), :zone] + @test inputs["ZONES_DC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_dc_charge.!=0), :zone] + @test inputs["ZONES_AC_CHARGE"] == dfVRE_STOR[(dfVRE_STOR.stor_ac_charge.!=0), :zone] +end + +with_logger(ConsoleLogger(stderr, Logging.Warn)) do + test_load_resources_data() + test_load_VRE_STOR_data() +end + +end # module TestLoadResourceData \ No newline at end of file diff --git a/test/test_multistage.jl b/test/test_multistage.jl index 4c03b3d90c..ea7f1b646b 100644 --- a/test/test_multistage.jl +++ b/test/test_multistage.jl @@ -5,7 +5,7 @@ using Test include(joinpath(@__DIR__, "utilities.jl")) obj_true = [79734.80032, 41630.03494, 27855.20631] -test_path = joinpath(@__DIR__,"MultiStage"); +test_path = joinpath(@__DIR__, "MultiStage"); # Define test inputs multistage_setup = Dict( @@ -25,6 +25,7 @@ genx_setup = Dict( "UCommit" => 2, "MultiStage" => 1, "MultiStageSettingsDict" => multistage_setup, + "ResourcePath" => "Resources", ) # Run the case and get the objective value and tolerance @@ -53,7 +54,7 @@ function test_new_build(EP::Dict,inputs::Dict) for t in keys(EP) if t==1 - a = value(EP[t][:eTotalCap][1]) <= inputs[1]["dfGen"][1,:Existing_Cap_MW][1] + a = value(EP[t][:eTotalCap][1]) <= GenX.existing_cap_mw(inputs[1]["RESOURCES"][1])[1] else a = value(EP[t][:eTotalCap][1]) <= value(EP[t-1][:eTotalCap][1]) end @@ -71,7 +72,7 @@ function test_can_retire(EP::Dict,inputs::Dict) for t in keys(EP) if t==1 - a = value(EP[t][:eTotalCap][1]) >= inputs[1]["dfGen"][1,:Existing_Cap_MW][1] + a = value(EP[t][:eTotalCap][1]) >= GenX.existing_cap_mw(inputs[1]["RESOURCES"][1])[1] else a = value(EP[t][:eTotalCap][1]) >= value(EP[t-1][:eTotalCap][1]) end diff --git a/test/test_threezones.jl b/test/test_threezones.jl index 75d764d684..4489d4487b 100644 --- a/test/test_threezones.jl +++ b/test/test_threezones.jl @@ -19,7 +19,7 @@ genx_setup = Dict( ) # Run the case and get the objective value and tolerance -EP, _, _ = redirect_stdout(devnull) do +EP, inputs, _ = redirect_stdout(devnull) do run_genx_case_testing(test_path, genx_setup) end obj_test = objective_value(EP) diff --git a/test/test_time_domain_reduction.jl b/test/test_time_domain_reduction.jl index cfd8378439..b17761ee9c 100644 --- a/test/test_time_domain_reduction.jl +++ b/test/test_time_domain_reduction.jl @@ -41,8 +41,9 @@ genx_setup = Dict( settings = GenX.default_settings() merge!(settings, genx_setup) -clustering_test = +clustering_test = with_logger(ConsoleLogger(stderr, Logging.Warn)) do GenX.cluster_inputs(test_folder, settings_path, settings, random = false)["ClusterObject"] +end # Load true clustering clustering_true = JLD2.load(joinpath(TDR_Results_true, "clusters_true.jld2"))["ClusterObject"] diff --git a/test/utilities.jl b/test/utilities.jl index 94600d98ff..ae71056729 100644 --- a/test/utilities.jl +++ b/test/utilities.jl @@ -178,11 +178,67 @@ function cmp_csv(csv1::AbstractString, csv2::AbstractString) throw(CSVFileNotFound(csv2)) end - # Use unix-cmp on unix systems - Sys.isunix() && return success(`cmp --quiet $csv1 $csv2`) - df1 = CSV.read(csv1, DataFrame) df2 = CSV.read(csv2, DataFrame) - return isequal(df1, df2) + # Sort the csv files + cols = sort(names(df1)) + cols ≠ sort(names(df2)) && error("Column names in $csv1 and $csv2 are different.") + + return isapprox_df(df1, df2) +end + +""" + isapprox_df(df1::DataFrame, df2::DataFrame) + +Compare two DataFrames. Return true if they are identical or approximately equal. + +# Arguments +- `df1::DataFrame`: first DataFrame +- `df2::DataFrame`: second DataFrame + +# Returns +- `true` if the two DataFrames are identical or approximately equal +- `false` otherwise +""" +function isapprox_df(df1::DataFrame, df2::DataFrame) + @assert length(names(df1)) == length(names(df2)) + @assert Set(names(df1)) == Set(names(df2)) + is_approx = true + for col in names(df1) + !isapprox_col(df1[!, col], df2[!, col]) && return false + end + return is_approx end + +""" + isapprox_col(col1, col2) + +Compare two columns of a DataFrame. Return true if they are identical or approximately equal. + +# Arguments +- `col1::Vector`: first column +- `col2::Vector`: second column + +# Returns +- `true` if the two columns are identical or approximately equal +- `false` otherwise +""" +function isapprox_col(col1, col2) + if isequal(col1, col2) || (eltype(col1) <: Float64 && isapprox(col1, col2)) + return true + elseif eltype(col1) <: AbstractString + isapprox_col = true + for i in eachindex(col1) + if !isapprox_col + break + elseif !isnothing(tryparse(Float64, col1[i])) && !isnothing(tryparse(Float64, col2[i])) + isapprox_col = isapprox_col && isapprox(parse(Float64, col1[i]), parse(Float64, col2[i])) + else + isapprox_col = isapprox_col && isequal(col1[i], col2[i]) + end + end + return isapprox_col + end + return false +end \ No newline at end of file