diff --git a/db/csvs_test_examples/csv_data_master.csv b/db/csvs_test_examples/csv_data_master.csv index 8f6fc671b..a88ddfba8 100644 --- a/db/csvs_test_examples/csv_data_master.csv +++ b/db/csvs_test_examples/csv_data_master.csv @@ -48,31 +48,37 @@ reserves/lf_reserves_up/project_lf_reserves_up_bas,lf_reserves_up,project_lf_res reserves/lf_reserves_up/req,lf_reserves_up,lf_reserves_up_scenario_id,system_lf_reserves_up,dir_main,,0,0,timepoint.csv,,, reserves/lf_reserves_up/req,lf_reserves_up,lf_reserves_up_scenario_id,system_lf_reserves_up_percent,dir_aux,,0,0,percentage.csv,,, reserves/lf_reserves_up/req,lf_reserves_up,lf_reserves_up_scenario_id,system_lf_reserves_up_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/lf_reserves_up/req,lf_reserves_up,lf_reserves_up_scenario_id,system_lf_reserves_up_project,dir_aux,,0,0,project.csv,,, reserves/lf_reserves_down/geography_lf_reserves_down_bas,lf_reserves_down,lf_reserves_down_ba_scenario_id,geography_lf_reserves_down_bas,simple,,0,0,,,, reserves/lf_reserves_down/project_lf_reserves_down_bas,lf_reserves_down,project_lf_reserves_down_ba_scenario_id,project_lf_reserves_down_bas,simple,,0,0,,,, reserves/lf_reserves_down/req,lf_reserves_down,lf_reserves_down_scenario_id,system_lf_reserves_down,dir_main,,0,0,timepoint.csv,,, reserves/lf_reserves_down/req,lf_reserves_down,lf_reserves_down_scenario_id,system_lf_reserves_down_percent,dir_aux,,0,0,percentage.csv,,, reserves/lf_reserves_down/req,lf_reserves_down,lf_reserves_down_scenario_id,system_lf_reserves_down_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/lf_reserves_down/req,lf_reserves_down,lf_reserves_down_scenario_id,system_lf_reserves_down_project,dir_aux,,0,0,project.csv,,, reserves/regulation_up/geography_regulation_up_bas,regulation_up,regulation_up_ba_scenario_id,geography_regulation_up_bas,simple,,0,0,,,, reserves/regulation_up/project_regulation_up_bas,regulation_up,project_regulation_up_ba_scenario_id,project_regulation_up_bas,simple,,0,0,,,, reserves/regulation_up/req,regulation_up,regulation_up_scenario_id,system_regulation_up,dir_main,,0,0,timepoint.csv,,, reserves/regulation_up/req,regulation_up,regulation_up_scenario_id,system_regulation_up_percent,dir_aux,,0,0,percentage.csv,,, reserves/regulation_up/req,regulation_up,regulation_up_scenario_id,system_regulation_up_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/regulation_up/req,regulation_up,regulation_up_scenario_id,system_regulation_up_project,dir_aux,,0,0,project.csv,,, reserves/regulation_down/geography_regulation_down_bas,regulation_down,regulation_down_ba_scenario_id,geography_regulation_down_bas,simple,,0,0,,,, reserves/regulation_down/project_regulation_down_bas,regulation_down,project_regulation_down_ba_scenario_id,project_regulation_down_bas,simple,,0,0,,,, reserves/regulation_down/req,regulation_down,regulation_down_scenario_id,system_regulation_down,dir_main,,0,0,timepoint.csv,,, reserves/regulation_down/req,regulation_down,regulation_down_scenario_id,system_regulation_down_percent,dir_aux,,0,0,percentage.csv,,, reserves/regulation_down/req,regulation_down,regulation_down_scenario_id,system_regulation_down_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/regulation_down/req,regulation_down,regulation_down_scenario_id,system_regulation_down_project,dir_aux,,0,0,project.csv,,, reserves/frequency_response/geography_frequency_response_bas,frequency_response,frequency_response_ba_scenario_id,geography_frequency_response_bas,simple,,0,0,,,, reserves/frequency_response/project_frequency_response_bas,frequency_response,project_frequency_response_ba_scenario_id,project_frequency_response_bas,simple,,0,0,,,, reserves/frequency_response/req,frequency_response,frequency_response_scenario_id,system_frequency_response,dir_main,,0,0,timepoint.csv,,, reserves/frequency_response/req,frequency_response,frequency_response_scenario_id,system_frequency_response_percent,dir_aux,,0,0,percentage.csv,,, reserves/frequency_response/req,frequency_response,frequency_response_scenario_id,system_frequency_response_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/frequency_response/req,frequency_response,frequency_response_scenario_id,system_frequency_response_project,dir_aux,,0,0,project.csv,,, reserves/spinning_reserves/geography_spinning_reserves_bas,spinning_reserves,spinning_reserves_ba_scenario_id,geography_spinning_reserves_bas,simple,,0,0,,,, reserves/spinning_reserves/project_spinning_reserves_bas,spinning_reserves,project_spinning_reserves_ba_scenario_id,project_spinning_reserves_bas,simple,,0,0,,,, reserves/spinning_reserves/req,spinning_reserves,spinning_reserves_scenario_id,system_spinning_reserves,dir_main,,0,0,timepoint.csv,,, reserves/spinning_reserves/req,spinning_reserves,spinning_reserves_scenario_id,system_spinning_reserves_percent,dir_aux,,0,0,percentage.csv,,, reserves/spinning_reserves/req,spinning_reserves,spinning_reserves_scenario_id,system_spinning_reserves_percent_lz_map,dir_aux,,0,0,percentage_load_zone_map.csv,,, +reserves/spinning_reserves/req,spinning_reserves,spinning_reserves_scenario_id,system_spinning_reserves_project,dir_aux,,0,0,project.csv,,, policy/energy_targets/zones,energy_target,energy_target_zone_scenario_id,geography_energy_target_zones,simple,,0,0,,,, policy/energy_targets/project_zones,energy_target,project_energy_target_zone_scenario_id,project_energy_target_zones,simple,,0,0,,,, policy/energy_targets/period_targets,energy_target,period_energy_target_scenario_id,system_period_energy_targets,dir_main,,0,0,targets.csv,,, diff --git a/db/csvs_test_examples/reserves/frequency_response/req/1_region_frequency_response/project.csv b/db/csvs_test_examples/reserves/frequency_response/req/1_region_frequency_response/project.csv new file mode 100644 index 000000000..8aa345fd0 --- /dev/null +++ b/db/csvs_test_examples/reserves/frequency_response/req/1_region_frequency_response/project.csv @@ -0,0 +1 @@ +frequency_response_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_down/req/1_system_lf_reserves_down_1/project.csv b/db/csvs_test_examples/reserves/lf_reserves_down/req/1_system_lf_reserves_down_1/project.csv new file mode 100644 index 000000000..4e8d5ea87 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_down/req/1_system_lf_reserves_down_1/project.csv @@ -0,0 +1 @@ +lf_reserves_down_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_down/req/2_system_lf_reserves_down_2/project.csv b/db/csvs_test_examples/reserves/lf_reserves_down/req/2_system_lf_reserves_down_2/project.csv new file mode 100644 index 000000000..4e8d5ea87 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_down/req/2_system_lf_reserves_down_2/project.csv @@ -0,0 +1 @@ +lf_reserves_down_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_down/req/3_base_tmp_plus_percent_req/project.csv b/db/csvs_test_examples/reserves/lf_reserves_down/req/3_base_tmp_plus_percent_req/project.csv new file mode 100644 index 000000000..4e8d5ea87 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_down/req/3_base_tmp_plus_percent_req/project.csv @@ -0,0 +1 @@ +lf_reserves_down_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/1_system_lf_reserves_up_1/project.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/1_system_lf_reserves_up_1/project.csv new file mode 100644 index 000000000..2bec55051 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/1_system_lf_reserves_up_1/project.csv @@ -0,0 +1 @@ +lf_reserves_up_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/2_system_lf_reserves_up_2/project.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/2_system_lf_reserves_up_2/project.csv new file mode 100644 index 000000000..2bec55051 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/2_system_lf_reserves_up_2/project.csv @@ -0,0 +1 @@ +lf_reserves_up_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage.csv new file mode 100644 index 000000000..fba5f7335 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage.csv @@ -0,0 +1 @@ +lf_reserves_up_ba,percent_load_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage_load_zone_map.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage_load_zone_map.csv new file mode 100644 index 000000000..86eb93532 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/percentage_load_zone_map.csv @@ -0,0 +1 @@ +lf_reserves_up_ba,load_zone \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/project.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/project.csv new file mode 100644 index 000000000..c543fe6ae --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/project.csv @@ -0,0 +1,3 @@ +lf_reserves_up_ba,project,percent_power_req,percent_capacity_req +Zone1,Wind,0.05, +Zone1,Solar,,0.03 \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/timepoint.csv b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/timepoint.csv new file mode 100644 index 000000000..991d41dd9 --- /dev/null +++ b/db/csvs_test_examples/reserves/lf_reserves_up/req/3_lf_reserves_up_w_project_contribution/timepoint.csv @@ -0,0 +1,73 @@ +lf_reserves_up_ba,stage_id,timepoint,lf_reserves_up_mw +Zone1,1,20200101,1 +Zone1,1,20200102,2 +Zone1,1,20200201,1 +Zone1,1,20200202,2 +Zone1,1,20200301,1 +Zone1,1,20200302,2 +Zone1,1,20300101,1 +Zone1,1,20300102,2 +Zone1,1,20300201,1 +Zone1,1,20300202,2 +Zone1,1,20300301,1 +Zone1,1,20300302,2 +Zone1,2,20200101,1 +Zone1,2,20200102,2 +Zone1,2,20200201,1 +Zone1,2,20200202,2 +Zone1,2,20200301,1 +Zone1,2,20200302,2 +Zone1,2,20300101,1 +Zone1,2,20300102,2 +Zone1,2,20300201,1 +Zone1,2,20300202,2 +Zone1,2,20300301,1 +Zone1,2,20300302,2 +Zone1,3,20200101,1 +Zone1,3,20200102,2 +Zone1,3,20200201,1 +Zone1,3,20200202,2 +Zone1,3,20200301,1 +Zone1,3,20200302,2 +Zone1,3,20300101,1 +Zone1,3,20300102,2 +Zone1,3,20300201,1 +Zone1,3,20300202,2 +Zone1,3,20300301,1 +Zone1,3,20300302,2 +Zone2,1,20200101,1 +Zone2,1,20200102,2 +Zone2,1,20200201,1 +Zone2,1,20200202,2 +Zone2,1,20200301,1 +Zone2,1,20200302,2 +Zone2,1,20300101,1 +Zone2,1,20300102,2 +Zone2,1,20300201,1 +Zone2,1,20300202,2 +Zone2,1,20300301,1 +Zone2,1,20300302,2 +Zone2,2,20200101,1 +Zone2,2,20200102,2 +Zone2,2,20200201,1 +Zone2,2,20200202,2 +Zone2,2,20200301,1 +Zone2,2,20200302,2 +Zone2,2,20300101,1 +Zone2,2,20300102,2 +Zone2,2,20300201,1 +Zone2,2,20300202,2 +Zone2,2,20300301,1 +Zone2,2,20300302,2 +Zone2,3,20200101,1 +Zone2,3,20200102,2 +Zone2,3,20200201,1 +Zone2,3,20200202,2 +Zone2,3,20200301,1 +Zone2,3,20200302,2 +Zone2,3,20300101,1 +Zone2,3,20300102,2 +Zone2,3,20300201,1 +Zone2,3,20300202,2 +Zone2,3,20300301,1 +Zone2,3,20300302,2 diff --git a/db/csvs_test_examples/reserves/regulation_down/req/1_system_regulation_down_1/project.csv b/db/csvs_test_examples/reserves/regulation_down/req/1_system_regulation_down_1/project.csv new file mode 100644 index 000000000..4361cefa3 --- /dev/null +++ b/db/csvs_test_examples/reserves/regulation_down/req/1_system_regulation_down_1/project.csv @@ -0,0 +1 @@ +regulation_down_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/regulation_down/req/2_system_regulation_down_2/project.csv b/db/csvs_test_examples/reserves/regulation_down/req/2_system_regulation_down_2/project.csv new file mode 100644 index 000000000..4361cefa3 --- /dev/null +++ b/db/csvs_test_examples/reserves/regulation_down/req/2_system_regulation_down_2/project.csv @@ -0,0 +1 @@ +regulation_down_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/regulation_up/req/1_system_regulation_up_1/project.csv b/db/csvs_test_examples/reserves/regulation_up/req/1_system_regulation_up_1/project.csv new file mode 100644 index 000000000..7fa3a433b --- /dev/null +++ b/db/csvs_test_examples/reserves/regulation_up/req/1_system_regulation_up_1/project.csv @@ -0,0 +1 @@ +regulation_up_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/regulation_up/req/2_system_regulation_up_2/project.csv b/db/csvs_test_examples/reserves/regulation_up/req/2_system_regulation_up_2/project.csv new file mode 100644 index 000000000..7fa3a433b --- /dev/null +++ b/db/csvs_test_examples/reserves/regulation_up/req/2_system_regulation_up_2/project.csv @@ -0,0 +1 @@ +regulation_up_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/reserves/spinning_reserves/req/1_region_spinning_reserves/project.csv b/db/csvs_test_examples/reserves/spinning_reserves/req/1_region_spinning_reserves/project.csv new file mode 100644 index 000000000..d0f75a1e0 --- /dev/null +++ b/db/csvs_test_examples/reserves/spinning_reserves/req/1_region_spinning_reserves/project.csv @@ -0,0 +1 @@ +spinning_reserves_ba,project,percent_power_req,percent_capacity_req \ No newline at end of file diff --git a/db/csvs_test_examples/scenarios.csv b/db/csvs_test_examples/scenarios.csv index c92f50c81..35e9382c5 100644 --- a/db/csvs_test_examples/scenarios.csv +++ b/db/csvs_test_examples/scenarios.csv @@ -1,102 +1,102 @@ -optional_feature_or_subscenarios,test,test_w_storage,test_w_hydro,test_new_solar,test_new_binary_solar,test_new_build_storage,test_new_build_storage_cumulative_min_max,test_new_binary_build_storage,test_no_overgen_allowed,test_no_reserves,test_variable_gen_reserves,test_new_solar_carbon_cap,test_new_solar_carbon_tax,test_ramp_up_constraints,test_ramp_up_and_down_constraints,2horizons,2horizons_w_hydro,2horizons_w_hydro_and_nuclear_binary_availability,2horizons_w_hydro_w_balancing_types,2periods,2periods_gen_lin_econ_retirement,2periods_gen_bin_econ_retirement,2periods_new_build,2periods_new_build_2zones,2periods_new_build_2zones_singleBA,2periods_new_build_2zones_transmission,2periods_new_build_2zones_transmission_w_losses,2periods_new_build_2zones_transmission_w_losses_opp_dir,2periods_new_build_2zones_new_build_transmission,2periods_new_build_cumulative_min_max,2periods_new_build_rps,2periods_new_build_rps_variable_reserves,2periods_new_build_rps_variable_reserves_subhourly_adj,2periods_new_build_rps_w_rps_eligible_storage,2periods_new_build_rps_w_rps_ineligible_storage,2periods_new_build_simple_prm,test_new_solar_carbon_cap_2zones_dont_count_tx,test_new_solar_carbon_cap_2zones_tx,single_stage_prod_cost,multi_stage_prod_cost,multi_stage_prod_cost_w_hydro,single_stage_prod_cost_cycle_select,test_tx_simple,test_tx_dcopf,2periods_new_build_local_capacity,test_startup_shutdown_rates,test_no_fuels,test_variable_om_curves,test_aux_cons,2periods_new_build_rps_percent_target,single_stage_prod_cost_linked_subproblems,multi_stage_prod_cost_linked_subproblems,test_w_lf_down_percent_req,2periods_new_build_capgroups,test_markets,2periods_new_build_horizon_energy_target,2periods_new_build_period_and_horizon_energy_target,2periods_new_build_horizon_energy_target_halfyear,test_new_build_gen_var_stor_hyb,test_carbon_tax_allowance,test_min_max_build_trans,2periods_new_build_2zones_transmission_Tx1halfavail,2periods_new_build_2zones_transmission_Tx1halfavailmonthly,test_cheap_fuel_blend,test_new_solar_carbon_cap_2zones_tx_low_carbon_fuel_blend,test_cheap_fuel_blend_w_limit,test_new_solar_fuel_burn_limit,test_new_solar_fuel_burn_limit_relative,test_w_solver_options,test_carbon_tax_allowance_with_different_fuel_groups,test_performance_standard,test_tx_flow -of_transmission,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1 -of_transmission_hurdle_rates,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_simultaneous_flow_limits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +optional_feature_or_subscenarios,test,test_w_storage,test_w_hydro,test_new_solar,test_new_binary_solar,test_new_build_storage,test_new_build_storage_cumulative_min_max,test_new_binary_build_storage,test_no_overgen_allowed,test_no_reserves,test_variable_gen_reserves,test_new_solar_carbon_cap,test_new_solar_carbon_tax,test_ramp_up_constraints,test_ramp_up_and_down_constraints,2horizons,2horizons_w_hydro,2horizons_w_hydro_and_nuclear_binary_availability,2horizons_w_hydro_w_balancing_types,2periods,2periods_gen_lin_econ_retirement,2periods_gen_bin_econ_retirement,2periods_new_build,2periods_new_build_2zones,2periods_new_build_2zones_singleBA,2periods_new_build_2zones_transmission,2periods_new_build_2zones_transmission_w_losses,2periods_new_build_2zones_transmission_w_losses_opp_dir,2periods_new_build_2zones_new_build_transmission,2periods_new_build_cumulative_min_max,2periods_new_build_rps,2periods_new_build_rps_variable_reserves,2periods_new_build_rps_variable_reserves_subhourly_adj,2periods_new_build_rps_w_rps_eligible_storage,2periods_new_build_rps_w_rps_ineligible_storage,2periods_new_build_simple_prm,test_new_solar_carbon_cap_2zones_dont_count_tx,test_new_solar_carbon_cap_2zones_tx,single_stage_prod_cost,multi_stage_prod_cost,multi_stage_prod_cost_w_hydro,single_stage_prod_cost_cycle_select,test_tx_simple,test_tx_dcopf,2periods_new_build_local_capacity,test_startup_shutdown_rates,test_no_fuels,test_variable_om_curves,test_aux_cons,2periods_new_build_rps_percent_target,single_stage_prod_cost_linked_subproblems,multi_stage_prod_cost_linked_subproblems,test_w_lf_down_percent_req,2periods_new_build_capgroups,test_markets,2periods_new_build_horizon_energy_target,2periods_new_build_period_and_horizon_energy_target,2periods_new_build_horizon_energy_target_halfyear,test_new_build_gen_var_stor_hyb,test_carbon_tax_allowance,test_min_max_build_trans,2periods_new_build_2zones_transmission_Tx1halfavail,2periods_new_build_2zones_transmission_Tx1halfavailmonthly,test_cheap_fuel_blend,test_new_solar_carbon_cap_2zones_tx_low_carbon_fuel_blend,test_cheap_fuel_blend_w_limit,test_new_solar_fuel_burn_limit,test_new_solar_fuel_burn_limit_relative,test_w_solver_options,test_carbon_tax_allowance_with_different_fuel_groups,test_performance_standard,test_tx_flow,test_new_solar_reserve_prj_contribution +of_transmission,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1, +of_transmission_hurdle_rates,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_simultaneous_flow_limits,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, of_lf_reserves_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,"1 -",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_lf_reserves_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_regulation_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_regulation_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -of_frequency_response,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_spinning_reserves,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_period_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,, -of_horizon_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,, -of_carbon_cap,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -of_track_carbon_imports,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -of_carbon_tax,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,, -of_performance_standard,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -of_fuel_burn_limit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,, -of_prm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_local_capacity,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_elcc_surface,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -of_markets,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, -of_tuning,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -temporal_scenario_id,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,4,5,5,4,1,1,6,7,1,1,1,6,8,9,1,6,1,6,6,6,3,1,6,6,6,1,1,1,1,1,1,1,1,1 -load_zone_scenario_id,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,2,4 -load_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,1,1,1,1,1,1,1,1,2,4,1,1,1,3,1,1,1,2,1,3,3,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1 -project_portfolio_scenario_id,1,2,3,4,5,6,6,7,1,1,1,4,4,1,1,1,3,3,3,1,8,9,10,11,11,12,12,12,12,10,13,13,13,14,14,10,15,15,1,1,3,1,16,16,10,17,1,1,1,13,1,1,1,10,1,13,13,13,18,4,12,12,12,1,15,1,4,4,1,4,15,16 -project_operational_chars_scenario_id,1,1,1,1,1,1,1,1,1,1,2,1,1,3,4,1,5,10,6,1,1,1,1,1,1,1,1,1,1,1,1,7,7,8,8,1,1,1,7,1,9,18,1,1,1,11,12,13,14,1,7,7,1,1,1,1,1,1,1,15,1,1,1,15,16,17,1,1,1,17,16,1 -project_availability_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_load_zone_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_elcc_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_specified_capacity_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,3,3,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,3 -project_specified_fixed_cost_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -fuel_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1 -fuel_price_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -project_new_cost_scenario_id,,,,1,1,1,1,1,,,,1,1,,,,,,,,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,1,1,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1,,1,1,,1,1,1 -project_new_potential_scenario_id,,,,1,,,1,,,,,2,2,,,,,,,,,,,,,,,,,1,,,,,,,2,2,,,,,2,2,,,,,,,,,,,,,,,,2,,,,,2,,2,2,,2,2,2 -project_new_binary_build_size_scenario_id,,,,,1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, -project_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, -transmission_portfolio_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,2,,,,,,,,1,1,,,,,3,3,,,,,,,,,,,,,,,,,2,1,1,,1,,,,,,1,3 -transmission_load_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,2,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1 -transmission_specified_capacity_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1 -transmission_availability_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,2,3,,1,,,,,,1,1 -transmission_operational_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,3,3,1,,,,,,,,1,1,,,,,1,2,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1 -transmission_hurdle_rate_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_new_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -transmission_new_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,, -transmission_flow_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1 -transmission_carbon_cap_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -transmission_simultaneous_flow_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -transmission_simultaneous_flow_limit_line_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -lf_reserves_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1 -project_lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5 -lf_reserves_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1 -project_lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5 -regulation_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1 -project_regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5 -regulation_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 -regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1 -project_regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5 -frequency_response_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -spinning_reserves_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -period_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,2,,,,,,,1,,,,,,,,,,,,,,, -horizon_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,3,,,,,,,,,,,,,, -energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,, -project_energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,2,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,, -carbon_cap_target_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -project_carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1 -carbon_tax_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,, -carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,, -project_carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,, -project_carbon_tax_allowance_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,, -performance_standard_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -project_performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -fuel_burn_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,,,, -fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,, -project_fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,, -prm_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -prm_energy_only_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -elcc_surface_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -local_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -project_local_capacity_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,, -tuning_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -solver_options_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,, -market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, -load_zone_market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, -market_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, -market_volume_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,, +",1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_lf_reserves_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_regulation_up,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_regulation_down,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +of_frequency_response,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_spinning_reserves,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_period_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,,1,,,,,,,,,,,,,,,, +of_horizon_energy_target,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,,,,,,,,,,,,,,, +of_carbon_cap,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +of_track_carbon_imports,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +of_carbon_tax,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,, +of_performance_standard,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +of_fuel_burn_limit,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,, +of_prm,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_local_capacity,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_elcc_surface,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +of_markets,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +of_tuning,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +temporal_scenario_id,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,2,2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,1,4,5,5,4,1,1,6,7,1,1,1,6,8,9,1,6,1,6,6,6,3,1,6,6,6,1,1,1,1,1,1,1,1,1,1 +load_zone_scenario_id,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,2,4,1 +load_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,1,1,1,1,1,1,1,1,2,4,1,1,1,3,1,1,1,2,1,3,3,3,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1 +project_portfolio_scenario_id,1,2,3,4,5,6,6,7,1,1,1,4,4,1,1,1,3,3,3,1,8,9,10,11,11,12,12,12,12,10,13,13,13,14,14,10,15,15,1,1,3,1,16,16,10,17,1,1,1,13,1,1,1,10,1,13,13,13,18,4,12,12,12,1,15,1,4,4,1,4,15,16,4 +project_operational_chars_scenario_id,1,1,1,1,1,1,1,1,1,1,2,1,1,3,4,1,5,10,6,1,1,1,1,1,1,1,1,1,1,1,1,7,7,8,8,1,1,1,7,1,9,18,1,1,1,11,12,13,14,1,7,7,1,1,1,1,1,1,1,15,1,1,1,15,16,17,1,1,1,17,16,1,1 +project_availability_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_load_zone_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_elcc_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_specified_capacity_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,3,3,1,1,1,1,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,3,3,1 +project_specified_fixed_cost_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +fuel_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1 +fuel_price_scenario_id,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +project_new_cost_scenario_id,,,,1,1,1,1,1,,,,1,1,,,,,,,,,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,,,,1,1,1,,,,,1,,,,1,,1,1,1,1,1,1,1,1,,1,,1,1,,1,1,1,1 +project_new_potential_scenario_id,,,,1,,,1,,,,,2,2,,,,,,,,,,,,,,,,,1,,,,,,,2,2,,,,,2,2,,,,,,,,,,,,,,,,2,,,,,2,,2,2,,2,2,2,1 +project_new_binary_build_size_scenario_id,,,,,1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_capacity_group_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, +project_capacity_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,, +transmission_portfolio_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,2,,,,,,,,1,1,,,,,3,3,,,,,,,,,,,,,,,,,2,1,1,,1,,,,,,1,3, +transmission_load_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,2,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1, +transmission_specified_capacity_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1, +transmission_availability_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,1,2,3,,1,,,,,,1,1, +transmission_operational_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,1,3,3,1,,,,,,,,1,1,,,,,1,2,,,,,,,,,,,,,,,,,1,1,1,,1,,,,,,1,1, +transmission_hurdle_rate_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_new_cost_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +transmission_new_potential_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,, +transmission_flow_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1, +transmission_carbon_cap_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +transmission_simultaneous_flow_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +transmission_simultaneous_flow_limit_line_group_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +lf_reserves_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3 +lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1 +project_lf_reserves_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1 +lf_reserves_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1 +project_lf_reserves_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1 +regulation_up_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1 +project_regulation_up_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1 +regulation_down_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,3,3,3,3,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,1,1,1 +project_regulation_down_ba_scenario_id,1,1,1,1,1,1,1,1,1,,2,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,4,4,5,5,1,5,5,1,1,5,1,5,5,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,5,1 +frequency_response_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_frequency_response_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +spinning_reserves_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_spinning_reserves_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +period_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,2,,,,,,,1,,,,,,,,,,,,,,,, +horizon_energy_target_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,3,,,,,,,,,,,,,,, +energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,1,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,, +project_energy_target_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,1,1,2,,,,,,,,,,,,,,,1,,,,,,1,1,1,,,,,,,,,,,,,,, +carbon_cap_target_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +project_carbon_cap_zone_scenario_id,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,,1,1,,,,,,,,,,,,,,,,,,,,,1,,,,,,,1, +carbon_tax_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,, +carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,, +project_carbon_tax_zone_scenario_id,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,, +project_carbon_tax_allowance_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,1,,, +performance_standard_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +project_performance_standard_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,, +fuel_burn_limit_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2,,,,, +fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,, +project_fuel_burn_limit_ba_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,1,,,,, +prm_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_prm_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +prm_energy_only_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +elcc_surface_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +local_capacity_requirement_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_local_capacity_zone_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +project_local_capacity_chars_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,, +tuning_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +solver_options_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,, +market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +load_zone_market_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +market_price_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, +market_volume_scenario_id,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/db/db_schema.sql b/db/db_schema.sql index 5a3aa33ba..74163ff9a 100644 --- a/db/db_schema.sql +++ b/db/db_schema.sql @@ -2108,6 +2108,7 @@ subscenarios_system_lf_reserves_up (lf_reserves_up_scenario_id) -- need to specify which load, i.e. specify a mapping between the reserve BA -- and the load zones whose load should be part of the requirement -- calculation (mapping should be one-to-many) +-- Note that the by-timepoint requirement and the percent requirement are additive DROP TABLE IF EXISTS inputs_system_lf_reserves_up_percent; CREATE TABLE inputs_system_lf_reserves_up_percent ( lf_reserves_up_scenario_id INTEGER, @@ -2124,6 +2125,19 @@ load_zone VARCHAR(32), PRIMARY KEY (lf_reserves_up_scenario_id, lf_reserves_up_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_lf_reserves_up_project; +CREATE TABLE inputs_system_lf_reserves_up_project ( +lf_reserves_up_scenario_id INTEGER, +lf_reserves_up_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (lf_reserves_up_scenario_id, lf_reserves_up_ba, project) +); + -- LF reserves down DROP TABLE IF EXISTS subscenarios_system_lf_reserves_down; CREATE TABLE subscenarios_system_lf_reserves_down ( @@ -2168,6 +2182,19 @@ load_zone VARCHAR(32), PRIMARY KEY (lf_reserves_down_scenario_id, lf_reserves_down_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_lf_reserves_down_project; +CREATE TABLE inputs_system_lf_reserves_down_project ( +lf_reserves_down_scenario_id INTEGER, +lf_reserves_down_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (lf_reserves_down_scenario_id, lf_reserves_down_ba, project) +); + -- Regulation up DROP TABLE IF EXISTS subscenarios_system_regulation_up; CREATE TABLE subscenarios_system_regulation_up ( @@ -2211,6 +2238,19 @@ load_zone VARCHAR(32), PRIMARY KEY (regulation_down_scenario_id, regulation_down_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_regulation_down_project; +CREATE TABLE inputs_system_regulation_down_project ( +regulation_down_scenario_id INTEGER, +regulation_down_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (regulation_down_scenario_id, regulation_down_ba, project) +); + -- Regulation down DROP TABLE IF EXISTS subscenarios_system_regulation_down; CREATE TABLE subscenarios_system_regulation_down ( @@ -2255,6 +2295,20 @@ load_zone VARCHAR(32), PRIMARY KEY (regulation_up_scenario_id, regulation_up_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_regulation_up_project; +CREATE TABLE inputs_system_regulation_up_project ( +regulation_up_scenario_id INTEGER, +regulation_up_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (regulation_up_scenario_id, regulation_up_ba, project) +); + + -- Frequency response DROP TABLE IF EXISTS subscenarios_system_frequency_response; CREATE TABLE subscenarios_system_frequency_response ( @@ -2300,6 +2354,19 @@ load_zone VARCHAR(32), PRIMARY KEY (frequency_response_scenario_id, frequency_response_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_frequency_response_project; +CREATE TABLE inputs_system_frequency_response_project ( +frequency_response_scenario_id INTEGER, +frequency_response_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (frequency_response_scenario_id, frequency_response_ba, project) +); + -- Spinning reserves DROP TABLE IF EXISTS subscenarios_system_spinning_reserves; CREATE TABLE subscenarios_system_spinning_reserves ( @@ -2344,6 +2411,19 @@ load_zone VARCHAR(32), PRIMARY KEY (spinning_reserves_scenario_id, spinning_reserves_ba, load_zone) ); +-- Projects can also contribute to the requirement, specified as percent of their +-- power output in a timepoint or a percentage of their capacity +-- Note this is additive to the by-timepoint and percent requirements +DROP TABLE IF EXISTS inputs_system_spinning_reserves_project; +CREATE TABLE inputs_system_spinning_reserves_project ( +spinning_reserves_scenario_id INTEGER, +spinning_reserves_ba VARCHAR(32), +project VARCHAR(64), +percent_power_req FLOAT, +percent_capacity_req FLOAT, +PRIMARY KEY (spinning_reserves_scenario_id, spinning_reserves_ba, project) +); + -- -- Policy -- -- -- Energy target requirements diff --git a/examples/test_new_solar_reserve_prj_contribution/features.csv b/examples/test_new_solar_reserve_prj_contribution/features.csv new file mode 100644 index 000000000..7f1c75136 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/features.csv @@ -0,0 +1,5 @@ +features +lf_reserves_up +lf_reserves_down +regulation_up +regulation_down diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/fuel_prices.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/fuel_prices.tab new file mode 100644 index 000000000..d3925717d --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/fuel_prices.tab @@ -0,0 +1,7 @@ +fuel period month fuel_price_per_mmbtu +Coal 2020 1 4.0 +Coal 2020 2 4.0 +Gas 2020 1 5.0 +Gas 2020 2 5.0 +Uranium 2020 1 2.0 +Uranium 2020 2 2.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/fuels.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/fuels.tab new file mode 100644 index 000000000..28fb3cd64 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/fuels.tab @@ -0,0 +1,4 @@ +fuel co2_intensity_tons_per_mmbtu fuel_group +Coal 0.09552 Solid +Gas 0.05306 Gas +Uranium 0.0 Other diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/heat_rate_curves.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/heat_rate_curves.tab new file mode 100644 index 000000000..070147c16 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/heat_rate_curves.tab @@ -0,0 +1,8 @@ +project period load_point_fraction average_heat_rate_mmbtu_per_mwh +Coal 0 0.4 1250.0 +Coal 0 1.0 506.0 +Gas_CCGT 0 0.5 506.0 +Gas_CCGT 0 1.0 256.0 +Gas_CT 0 0.4 208.33333 +Gas_CT 0 1.0 88.13333 +Nuclear 0 1.0 1666.67 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/horizon_timepoints.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/horizon_timepoints.tab new file mode 100644 index 000000000..ba1741348 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/horizon_timepoints.tab @@ -0,0 +1,3 @@ +horizon balancing_type_horizon timepoint +202001 day 20200101 +202001 day 20200102 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/horizons.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/horizons.tab new file mode 100644 index 000000000..169518ded --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/horizons.tab @@ -0,0 +1,2 @@ +horizon balancing_type_horizon boundary +202001 day circular diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_down_tmp_requirement.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_down_tmp_requirement.tab new file mode 100644 index 000000000..891ff1859 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_down_tmp_requirement.tab @@ -0,0 +1,3 @@ +ba timepoint requirement +Zone1 20200101 1.0 +Zone1 20200102 2.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_requirement_project_contributions.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_requirement_project_contributions.tab new file mode 100644 index 000000000..be5dc152f --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_requirement_project_contributions.tab @@ -0,0 +1,3 @@ +ba project percent_power_req percent_capacity_req +Zone1 Solar . 0.03 +Zone1 Wind 0.05 . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_tmp_requirement.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_tmp_requirement.tab new file mode 100644 index 000000000..891ff1859 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/lf_reserves_up_tmp_requirement.tab @@ -0,0 +1,3 @@ +ba timepoint requirement +Zone1 20200101 1.0 +Zone1 20200102 2.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_down_balancing_areas.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_down_balancing_areas.tab new file mode 100644 index 000000000..7e4fdfbf2 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_down_balancing_areas.tab @@ -0,0 +1,2 @@ +balancing_area allow_violation violation_penalty_per_mw reserve_to_energy_adjustment +Zone1 1 999999999.0 . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_up_balancing_areas.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_up_balancing_areas.tab new file mode 100644 index 000000000..7e4fdfbf2 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/load_following_up_balancing_areas.tab @@ -0,0 +1,2 @@ +balancing_area allow_violation violation_penalty_per_mw reserve_to_energy_adjustment +Zone1 1 999999999.0 . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/load_mw.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/load_mw.tab new file mode 100644 index 000000000..ab0dfaed2 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/load_mw.tab @@ -0,0 +1,3 @@ +LOAD_ZONES timepoint load_mw +Zone1 20200101 10.0 +Zone1 20200102 20.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/load_zones.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/load_zones.tab new file mode 100644 index 000000000..9275b9448 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/load_zones.tab @@ -0,0 +1,2 @@ +load_zone allow_overgeneration overgeneration_penalty_per_mw allow_unserved_energy unserved_energy_penalty_per_mwh max_unserved_load_penalty_per_mw export_penalty_cost_per_mwh +Zone1 1 99999999.0 1 99999999.0 0.0 0.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/new_build_generator_vintage_costs.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/new_build_generator_vintage_costs.tab new file mode 100644 index 000000000..2034d92a7 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/new_build_generator_vintage_costs.tab @@ -0,0 +1,2 @@ +project vintage lifetime_yrs annualized_real_cost_per_mw_yr min_cumulative_new_build_mw max_cumulative_new_build_mw +Solar 2020 30 100.0 0.0 4.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/periods.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/periods.tab new file mode 100644 index 000000000..cd509b3ba --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/periods.tab @@ -0,0 +1,2 @@ +period discount_factor period_start_year period_end_year hours_in_period_timepoints +2020 1.0 2020.0 2021.0 8760.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/project_fuels.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/project_fuels.tab new file mode 100644 index 000000000..c4e98fbb5 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/project_fuels.tab @@ -0,0 +1,5 @@ +project fuel min_fraction_in_fuel_blend max_fraction_in_fuel_blend +Coal Coal . . +Gas_CCGT Gas . . +Gas_CT Gas . . +Nuclear Uranium . . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/projects.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/projects.tab new file mode 100644 index 000000000..41bc312e3 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/projects.tab @@ -0,0 +1,7 @@ +project capacity_type availability_type operational_type balancing_type_project technology load_zone variable_om_cost_per_mwh min_stable_level_fraction unit_size_mw startup_cost_per_mw shutdown_cost_per_mw startup_fuel_mmbtu_per_mw startup_plus_ramp_up_rate shutdown_plus_ramp_down_rate ramp_up_when_on_rate ramp_down_when_on_rate ramp_up_violation_penalty ramp_down_violation_penalty min_up_time_hours min_up_time_violation_penalty min_down_time_hours min_down_time_violation_penalty charging_efficiency discharging_efficiency charging_capacity_multiplier discharging_capacity_multiplier minimum_duration_hours maximum_duration_hours aux_consumption_frac_capacity aux_consumption_frac_power last_commitment_stage curtailment_cost_per_pwh lf_reserves_up_ba lf_reserves_up_derate lf_reserves_down_ba lf_reserves_down_derate regulation_up_ba regulation_up_derate regulation_down_ba regulation_down_derate lf_reserves_up_ramp_rate lf_reserves_down_ramp_rate regulation_up_ramp_rate regulation_down_ramp_rate +Coal gen_spec exogenous gen_commit_cap day Coal Zone1 1.0 0.4 6.0 1.0 0.0 . . . . . . . . . . . . . . . . . . . 2 . . . . . Zone1 . Zone1 . . . . . +Gas_CCGT gen_spec exogenous gen_commit_cap day Gas Zone1 2.0 0.4 6.0 1.0 2.0 . . . . . . . . . . . . . . . . . . . 1 . Zone1 . Zone1 . Zone1 . Zone1 . . . . . +Gas_CT gen_spec exogenous gen_commit_cap day Gas Zone1 2.0 0.4 6.0 0.0 1.0 . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . +Nuclear gen_spec exogenous gen_must_run day Nuclear Zone1 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +Solar gen_new_lin exogenous gen_var day Solar Zone1 0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +Wind gen_spec exogenous gen_var day Wind Zone1 0.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_balancing_areas.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_balancing_areas.tab new file mode 100644 index 000000000..7e4fdfbf2 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_balancing_areas.tab @@ -0,0 +1,2 @@ +balancing_area allow_violation violation_penalty_per_mw reserve_to_energy_adjustment +Zone1 1 999999999.0 . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_tmp_requirement.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_tmp_requirement.tab new file mode 100644 index 000000000..891ff1859 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_down_tmp_requirement.tab @@ -0,0 +1,3 @@ +ba timepoint requirement +Zone1 20200101 1.0 +Zone1 20200102 2.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_balancing_areas.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_balancing_areas.tab new file mode 100644 index 000000000..7e4fdfbf2 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_balancing_areas.tab @@ -0,0 +1,2 @@ +balancing_area allow_violation violation_penalty_per_mw reserve_to_energy_adjustment +Zone1 1 999999999.0 . diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_tmp_requirement.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_tmp_requirement.tab new file mode 100644 index 000000000..891ff1859 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/regulation_up_tmp_requirement.tab @@ -0,0 +1,3 @@ +ba timepoint requirement +Zone1 20200101 1.0 +Zone1 20200102 2.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/spec_capacity_period_params.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/spec_capacity_period_params.tab new file mode 100644 index 000000000..03ca0a51c --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/spec_capacity_period_params.tab @@ -0,0 +1,6 @@ +project period specified_capacity_mw hyb_gen_specified_capacity_mw hyb_stor_specified_capacity_mw specified_capacity_mwh fixed_cost_per_mw_yr hyb_gen_fixed_cost_per_mw_yr hyb_stor_fixed_cost_per_mw_yr fixed_cost_per_mwh_yr +Coal 2020 6.0 0.0 +Gas_CCGT 2020 6.0 0.0 +Gas_CT 2020 6.0 0.0 +Nuclear 2020 6.0 0.0 +Wind 2020 2.0 0.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/timepoints.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/timepoints.tab new file mode 100644 index 000000000..d82db603e --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/timepoints.tab @@ -0,0 +1,3 @@ +timepoint period timepoint_weight number_of_hours_in_timepoint previous_stage_timepoint_map month +20200101 2020 4380.0 1 . 1 +20200102 2020 4380.0 1 . 1 diff --git a/examples/test_new_solar_reserve_prj_contribution/inputs/variable_generator_profiles.tab b/examples/test_new_solar_reserve_prj_contribution/inputs/variable_generator_profiles.tab new file mode 100644 index 000000000..94cd63e53 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/inputs/variable_generator_profiles.tab @@ -0,0 +1,5 @@ +project timepoint cap_factor +Wind 20200101 0.9 +Wind 20200102 0.5 +Solar 20200101 0.05 +Solar 20200102 1.0 diff --git a/examples/test_new_solar_reserve_prj_contribution/results/objective_function_value.txt b/examples/test_new_solar_reserve_prj_contribution/results/objective_function_value.txt new file mode 100644 index 000000000..44b2e3b34 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/results/objective_function_value.txt @@ -0,0 +1 @@ +Objective function: -3796311064738.05 \ No newline at end of file diff --git a/examples/test_new_solar_reserve_prj_contribution/results/solver_status.txt b/examples/test_new_solar_reserve_prj_contribution/results/solver_status.txt new file mode 100644 index 000000000..b5754e203 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/results/solver_status.txt @@ -0,0 +1 @@ +ok \ No newline at end of file diff --git a/examples/test_new_solar_reserve_prj_contribution/results/summary_results.txt b/examples/test_new_solar_reserve_prj_contribution/results/summary_results.txt new file mode 100644 index 000000000..df32201d5 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/results/summary_results.txt @@ -0,0 +1,17 @@ +##### SUMMARY RESULTS FOR SCENARIO *test_new_solar_reserve_prj_contribution* ##### + +### CAPACITY RESULTS ### + +--> New Generation Capacity <-- +No new generation was built. + +### OPERATIONAL RESULTS ### + +--> Energy Production <-- + Annual Energy (MWh) % Total Power +load_zone period technology +Zone1 2020 Coal 18,688.00 13.91 + Gas 63,072.00 46.96 + Nuclear 52,560.00 39.13 + Solar 0.00 0.00 + Wind 0.00 0.00 diff --git a/examples/test_new_solar_reserve_prj_contribution/results/termination_condition.txt b/examples/test_new_solar_reserve_prj_contribution/results/termination_condition.txt new file mode 100644 index 000000000..644457f4c --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/results/termination_condition.txt @@ -0,0 +1 @@ +optimal \ No newline at end of file diff --git a/examples/test_new_solar_reserve_prj_contribution/scenario_description.csv b/examples/test_new_solar_reserve_prj_contribution/scenario_description.csv new file mode 100644 index 000000000..6b48922cd --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/scenario_description.csv @@ -0,0 +1,101 @@ +scenario_id,73 +scenario_name,test_new_solar_reserve_prj_contribution +of_transmission, +of_transmission_hurdle_rates, +of_simultaneous_flow_limits, +of_lf_reserves_up,1 +of_lf_reserves_down,1 +of_regulation_up,1 +of_regulation_down,1 +of_frequency_response, +of_spinning_reserves, +of_period_energy_target, +of_horizon_energy_target, +of_carbon_cap, +of_track_carbon_imports, +of_carbon_tax, +of_performance_standard, +of_fuel_burn_limit, +of_prm, +of_elcc_surface, +of_local_capacity, +of_markets, +of_tuning, +temporal_scenario_id,1 +load_zone_scenario_id,1 +lf_reserves_up_ba_scenario_id,1 +lf_reserves_down_ba_scenario_id,1 +regulation_up_ba_scenario_id,1 +regulation_down_ba_scenario_id,1 +frequency_response_ba_scenario_id,NULL +spinning_reserves_ba_scenario_id,NULL +energy_target_zone_scenario_id,NULL +carbon_cap_zone_scenario_id,NULL +carbon_tax_zone_scenario_id,NULL +performance_standard_zone_scenario_id,NULL +fuel_burn_limit_ba_scenario_id,NULL +prm_zone_scenario_id,NULL +local_capacity_zone_scenario_id,NULL +market_scenario_id,NULL +project_portfolio_scenario_id,4 +project_operational_chars_scenario_id,1 +project_availability_scenario_id,1 +fuel_scenario_id,1 +project_load_zone_scenario_id,1 +project_lf_reserves_up_ba_scenario_id,1 +project_lf_reserves_down_ba_scenario_id,1 +project_regulation_up_ba_scenario_id,1 +project_regulation_down_ba_scenario_id,1 +project_frequency_response_ba_scenario_id,NULL +project_spinning_reserves_ba_scenario_id,NULL +project_energy_target_zone_scenario_id,NULL +project_carbon_cap_zone_scenario_id,NULL +project_carbon_tax_zone_scenario_id,NULL +project_carbon_tax_allowance_scenario_id,NULL +project_performance_standard_zone_scenario_id,NULL +project_fuel_burn_limit_ba_scenario_id,NULL +project_prm_zone_scenario_id,NULL +project_elcc_chars_scenario_id,NULL +prm_energy_only_scenario_id,NULL +project_local_capacity_zone_scenario_id,NULL +project_local_capacity_chars_scenario_id,NULL +load_zone_market_scenario_id,NULL +project_specified_capacity_scenario_id,1 +project_specified_fixed_cost_scenario_id,1 +fuel_price_scenario_id,1 +project_new_cost_scenario_id,1 +project_new_potential_scenario_id,1 +project_new_binary_build_size_scenario_id,NULL +project_capacity_group_requirement_scenario_id,NULL +project_capacity_group_scenario_id,NULL +transmission_portfolio_scenario_id,NULL +transmission_load_zone_scenario_id,NULL +transmission_specified_capacity_scenario_id,NULL +transmission_new_cost_scenario_id,NULL +transmission_availability_scenario_id,NULL +transmission_operational_chars_scenario_id,NULL +transmission_hurdle_rate_scenario_id,NULL +transmission_new_potential_scenario_id,NULL +transmission_flow_scenario_id,NULL +transmission_carbon_cap_zone_scenario_id,NULL +transmission_simultaneous_flow_limit_scenario_id,NULL +transmission_simultaneous_flow_limit_line_group_scenario_id,NULL +load_scenario_id,1 +lf_reserves_up_scenario_id,3 +lf_reserves_down_scenario_id,1 +regulation_up_scenario_id,1 +regulation_down_scenario_id,1 +frequency_response_scenario_id,NULL +spinning_reserves_scenario_id,NULL +period_energy_target_scenario_id,NULL +horizon_energy_target_scenario_id,NULL +carbon_cap_target_scenario_id,NULL +carbon_tax_scenario_id,NULL +performance_standard_scenario_id,NULL +fuel_burn_limit_scenario_id,NULL +prm_requirement_scenario_id,NULL +local_capacity_requirement_scenario_id,NULL +elcc_surface_scenario_id,NULL +market_price_scenario_id,NULL +market_volume_scenario_id,NULL +tuning_scenario_id,NULL diff --git a/examples/test_new_solar_reserve_prj_contribution/units.csv b/examples/test_new_solar_reserve_prj_contribution/units.csv new file mode 100644 index 000000000..50a443355 --- /dev/null +++ b/examples/test_new_solar_reserve_prj_contribution/units.csv @@ -0,0 +1,15 @@ +metric,unit +power,MW +energy,MWh +fuel_energy,MMBtu +cost,USD +carbon_emissions,tonnes CO2 +time_for_cost,yr. +heat_rate,MMBtu/MWh +fuel_emission_intensity,tonnes CO2/MMBtu +fuel_price,USD/MMBtu +variable_om_cost,USD/MWh +fixed_om_cost,USD/MW-yr. +fixed_om_cost_energy,USD/MW-yr. +capacity_cost,USD/MW-yr. +energy_capacity_cost,USD/MWh-yr. diff --git a/gridpath/auxiliary/module_list.py b/gridpath/auxiliary/module_list.py index fb327c4ff..624a4042e 100644 --- a/gridpath/auxiliary/module_list.py +++ b/gridpath/auxiliary/module_list.py @@ -61,12 +61,6 @@ def all_modules_list(): "geography.local_capacity_zones", "geography.markets", "system.load_balance.static_load_requirement", - "system.reserves.requirement.lf_reserves_up", - "system.reserves.requirement.lf_reserves_down", - "system.reserves.requirement.regulation_up", - "system.reserves.requirement.regulation_down", - "system.reserves.requirement.frequency_response", - "system.reserves.requirement.spinning_reserves", "system.policy.energy_targets.period_energy_target", "system.policy.energy_targets.horizon_energy_target", "system.policy.carbon_cap.carbon_cap", @@ -125,6 +119,12 @@ def all_modules_list(): "transmission.operations.hurdle_costs", "transmission.operations.simultaneous_flow_limits", "transmission.operations.carbon_emissions", + "system.reserves.requirement.lf_reserves_up", + "system.reserves.requirement.lf_reserves_down", + "system.reserves.requirement.regulation_up", + "system.reserves.requirement.regulation_down", + "system.reserves.requirement.frequency_response", + "system.reserves.requirement.spinning_reserves", "system.load_balance.aggregate_project_power", "system.load_balance.aggregate_transmission_power", "transmission.operations.export_penalty_costs", diff --git a/gridpath/system/reserves/requirement/frequency_response.py b/gridpath/system/reserves/requirement/frequency_response.py index bb5068976..6b53445f8 100644 --- a/gridpath/system/reserves/requirement/frequency_response.py +++ b/gridpath/system/reserves/requirement/frequency_response.py @@ -37,6 +37,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="frequency_response_requirement_mw", reserve_requirement_percent_param="fr_per_req", reserve_zone_load_zone_set="FR_BA_LZ", + ba_prj_req_contribution_set="FR_BA_PRJ_CONTRIBUTION", + prj_power_param="fr_prj_pwr_contribution", + prj_capacity_param="fr_prj_cap_contribution", reserve_requirement_expression="Frequency_Response_Requirement", ) @@ -69,6 +72,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="frequency_response_requirement_mw", reserve_zone_load_zone_set="FR_BA_LZ", reserve_requirement_percent_param="fr_per_req", + ba_prj_req_contribution_set="FR_BA_PRJ_CONTRIBUTION", + prj_power_param="fr_prj_pwr_contribution", + prj_capacity_param="fr_prj_cap_contribution", reserve_type="frequency_response", ) @@ -122,7 +128,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -133,5 +139,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="frequency_response", ) diff --git a/gridpath/system/reserves/requirement/lf_reserves_down.py b/gridpath/system/reserves/requirement/lf_reserves_down.py index 83ec1880b..3f4130e0f 100644 --- a/gridpath/system/reserves/requirement/lf_reserves_down.py +++ b/gridpath/system/reserves/requirement/lf_reserves_down.py @@ -36,6 +36,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="lf_reserves_down_requirement_mw", reserve_requirement_percent_param="lf_down_per_req", reserve_zone_load_zone_set="LF_DOWN_BA_LZ", + ba_prj_req_contribution_set="LF_DOWN_BA_PRJ_CONTRIBUTION", + prj_power_param="lf_down_prj_pwr_contribution", + prj_capacity_param="lf_down_prj_cap_contribution", reserve_requirement_expression="LF_Down_Requirement", ) @@ -51,6 +54,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="lf_reserves_down_requirement_mw", reserve_zone_load_zone_set="LF_DOWN_BA_LZ", reserve_requirement_percent_param="lf_down_per_req", + ba_prj_req_contribution_set="LF_DOWN_BA_PRJ_CONTRIBUTION", + prj_power_param="lf_down_prj_pwr_contribution", + prj_capacity_param="lf_down_prj_cap_contribution", reserve_type="lf_reserves_down", ) @@ -104,7 +110,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -115,5 +121,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="lf_reserves_down", ) diff --git a/gridpath/system/reserves/requirement/lf_reserves_up.py b/gridpath/system/reserves/requirement/lf_reserves_up.py index a90b6a1ca..fb78eb661 100644 --- a/gridpath/system/reserves/requirement/lf_reserves_up.py +++ b/gridpath/system/reserves/requirement/lf_reserves_up.py @@ -35,6 +35,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="lf_reserves_up_requirement_mw", reserve_requirement_percent_param="lf_up_per_req", reserve_zone_load_zone_set="LF_UP_BA_LZ", + ba_prj_req_contribution_set="LF_UP_BA_PRJ_CONTRIBUTION", + prj_power_param="lf_up_prj_pwr_contribution", + prj_capacity_param="lf_up_prj_cap_contribution", reserve_requirement_expression="LF_Up_Requirement", ) @@ -50,6 +53,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="lf_reserves_up_requirement_mw", reserve_zone_load_zone_set="LF_UP_BA_LZ", reserve_requirement_percent_param="lf_up_per_req", + ba_prj_req_contribution_set="LF_UP_BA_PRJ_CONTRIBUTION", + prj_power_param="lf_up_prj_pwr_contribution", + prj_capacity_param="lf_up_prj_cap_contribution", reserve_type="lf_reserves_up", ) @@ -103,7 +109,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -114,5 +120,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="lf_reserves_up", ) diff --git a/gridpath/system/reserves/requirement/regulation_down.py b/gridpath/system/reserves/requirement/regulation_down.py index 667c2b8cd..eedf6a6de 100644 --- a/gridpath/system/reserves/requirement/regulation_down.py +++ b/gridpath/system/reserves/requirement/regulation_down.py @@ -35,6 +35,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="regulation_down_requirement_mw", reserve_requirement_percent_param="reg_down_per_req", reserve_zone_load_zone_set="REG_DOWN_BA_LZ", + ba_prj_req_contribution_set="REG_DOWN_BA_PRJ_CONTRIBUTION", + prj_power_param="reg_down_prj_pwr_contribution", + prj_capacity_param="reg_down_prj_cap_contribution", reserve_requirement_expression="Reg_Down_Requirement", ) @@ -50,6 +53,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="regulation_down_requirement_mw", reserve_zone_load_zone_set="REG_DOWN_BA_LZ", reserve_requirement_percent_param="reg_down_per_req", + ba_prj_req_contribution_set="REG_DOWN_BA_PRJ_CONTRIBUTION", + prj_power_param="reg_down_prj_pwr_contribution", + prj_capacity_param="reg_down_prj_cap_contribution", reserve_type="regulation_down", ) @@ -103,7 +109,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -114,5 +120,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="regulation_down", ) diff --git a/gridpath/system/reserves/requirement/regulation_up.py b/gridpath/system/reserves/requirement/regulation_up.py index aedd50082..3a5c1833b 100644 --- a/gridpath/system/reserves/requirement/regulation_up.py +++ b/gridpath/system/reserves/requirement/regulation_up.py @@ -35,6 +35,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="regulation_up_requirement_mw", reserve_requirement_percent_param="reg_up_per_req", reserve_zone_load_zone_set="REG_UP_BA_LZ", + ba_prj_req_contribution_set="REG_UP_BA_PRJ_CONTRIBUTION", + prj_power_param="reg_up_prj_pwr_contribution", + prj_capacity_param="reg_up_prj_cap_contribution", reserve_requirement_expression="Reg_Up_Requirement", ) @@ -50,6 +53,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="regulation_up_requirement_mw", reserve_zone_load_zone_set="REG_UP_BA_LZ", reserve_requirement_percent_param="reg_up_per_req", + ba_prj_req_contribution_set="REG_UP_BA_PRJ_CONTRIBUTION", + prj_power_param="reg_up_prj_pwr_contribution", + prj_capacity_param="reg_up_prj_cap_contribution", reserve_type="regulation_up", ) @@ -103,7 +109,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -114,5 +120,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="regulation_up", ) diff --git a/gridpath/system/reserves/requirement/reserve_requirements.py b/gridpath/system/reserves/requirement/reserve_requirements.py index 92a0f39af..fa835b96c 100644 --- a/gridpath/system/reserves/requirement/reserve_requirements.py +++ b/gridpath/system/reserves/requirement/reserve_requirements.py @@ -24,6 +24,9 @@ def generic_add_model_components( reserve_requirement_tmp_param, reserve_requirement_percent_param, reserve_zone_load_zone_set, + ba_prj_req_contribution_set, + prj_power_param, + prj_capacity_param, reserve_requirement_expression, ): """ @@ -33,6 +36,9 @@ def generic_add_model_components( :param reserve_requirement_tmp_param: :param reserve_requirement_percent_param: :param reserve_zone_load_zone_set: + :param ba_prj_req_contribution_set: + :param prj_power_param: + :param prj_capacity_param: :param reserve_requirement_expression: :return: @@ -40,7 +46,10 @@ def generic_add_model_components( related to a particular reserve requirement, including 1) the reserve requirement by zone and timepoint, if any 2) the reserve requirement as a percent of load and map for which load - zones' load to consider. + zones' load to consider + 3) the contributions to the reserve requirement from projects: there are two + types of these contributions, those based on the power output in the timepoint + and those based on the project capacity. """ # Magnitude of the requirement by reserve zone and timepoint @@ -66,6 +75,30 @@ def generic_add_model_components( Set(dimen=2, within=getattr(m, reserve_zone_set) * m.LOAD_ZONES), ) + # Projects contributing to BA requirement based on power output in the timepoint + # and on capacity in the period + setattr( + m, + ba_prj_req_contribution_set, + Set(dimen=2, within=getattr(m, reserve_zone_set) * m.PROJECTS), + ) + + setattr( + m, + prj_power_param, + Param( + getattr(m, ba_prj_req_contribution_set), within=PercentFraction, default=0 + ), + ) + + setattr( + m, + prj_capacity_param, + Param( + getattr(m, ba_prj_req_contribution_set), within=PercentFraction, default=0 + ), + ) + def reserve_requirement_rule(mod, reserve_zone, tmp): # If we have a map of reserve zones to load zones, apply the percentage # target; if no map provided, the percentage_target is 0 @@ -79,9 +112,34 @@ def reserve_requirement_rule(mod, reserve_zone, tmp): else: percentage_target = 0 + # Project contributions, if any projects in the respective set + if getattr(mod, ba_prj_req_contribution_set): + # Project contributions to requirement based on power output + prj_pwr_contribution = sum( + getattr(mod, prj_power_param)[reserve_zone, prj] + * mod.Power_Provision_MW[prj, tmp] + for (_reserve_zone, prj) in getattr(mod, ba_prj_req_contribution_set) + if _reserve_zone == reserve_zone + ) + + # Project contributions to requirement based on (available) capacity + # We are not holding the extra reserves when projects are unavailable + prj_cap_contribution = sum( + getattr(mod, prj_capacity_param)[reserve_zone, prj] + * mod.Capacity_MW[prj, mod.period[tmp]] + * mod.Availability_Derate[prj, tmp] + for (_reserve_zone, prj) in getattr(mod, ba_prj_req_contribution_set) + if _reserve_zone == reserve_zone + ) + else: + prj_pwr_contribution = 0 + prj_cap_contribution = 0 + return ( getattr(mod, reserve_requirement_tmp_param)[reserve_zone, tmp] + percentage_target + + prj_pwr_contribution + + prj_cap_contribution ) setattr( @@ -103,6 +161,9 @@ def generic_load_model_data( reserve_requirement_param, reserve_zone_load_zone_set, reserve_requirement_percent_param, + ba_prj_req_contribution_set, + prj_power_param, + prj_capacity_param, reserve_type, ): """ @@ -116,6 +177,9 @@ def generic_load_model_data( :param reserve_requirement_param: :param reserve_zone_load_zone_set: :param reserve_requirement_percent_param + :param ba_prj_req_contribution_set + :param prj_power_param + :param prj_capacity_param :param reserve_type: :return: """ @@ -153,6 +217,19 @@ def generic_load_model_data( else: data_portal.data()[reserve_zone_load_zone_set] = {None: []} + # If we have a project contributions file, load it into the respective + prj_contr_filename = os.path.join( + input_dir, "{}_requirement_project_contributions.tab".format(reserve_type) + ) + if os.path.exists(prj_contr_filename): + data_portal.load( + filename=prj_contr_filename, + index=getattr(m, ba_prj_req_contribution_set), + param=(getattr(m, prj_power_param), getattr(m, prj_capacity_param)), + ) + else: + data_portal.data()[ba_prj_req_contribution_set] = {None: []} + def generic_get_inputs_from_database( scenario_id, @@ -257,7 +334,38 @@ def generic_get_inputs_from_database( ) ) - return tmp_req, percentage_req, lz_mapping + # Get any project contributions to the magnitude of the reserve requirement + c4 = conn.cursor() + project_contributions = c4.execute( + """ + SELECT {reserve_type}_ba, project, percent_power_req, percent_capacity_req + FROM inputs_system_{reserve_type}_project + JOIN ( + SELECT {reserve_type}_ba + FROM inputs_geography_{reserve_type}_bas + WHERE {reserve_type}_ba_scenario_id = {reserve_type_ba_subscenario_id} + ) as relevant_bas + USING ({reserve_type}_ba) + JOIN ( + SELECT project + FROM inputs_project_portfolios + WHERE project_portfolio_scenario_id = ( + SELECT project_portfolio_scenario_id + FROM scenarios + WHERE scenario_id = {scenario_id} + ) + ) as relevant_prj + USING (project) + WHERE {reserve_type}_scenario_id = {reserve_type_req_subscenario_id} + """.format( + reserve_type=reserve_type, + reserve_type_ba_subscenario_id=reserve_type_ba_subscenario_id, + scenario_id=scenario_id, + reserve_type_req_subscenario_id=reserve_type_req_subscenario_id, + ) + ) + + return tmp_req, percentage_req, lz_mapping, project_contributions def generic_write_model_inputs( @@ -267,6 +375,7 @@ def generic_write_model_inputs( timepoint_req, percent_req, percent_map, + project_contributions, reserve_type, ): """ @@ -278,6 +387,7 @@ def generic_write_model_inputs( :param timepoint_req: :param percent_req: :param percent_map: + :param project_contributions: :param reserve_type: :return: """ @@ -333,3 +443,33 @@ def generic_write_model_inputs( writer.writerow(row) else: pass + + # Project contributions to the magnitude requirement + project_contributions = project_contributions.fetchall() + + prj_contributions = False + for (ba, prj, pwr, cap) in project_contributions: + if pwr is not None or cap is not None: + prj_contributions = True + + if prj_contributions: + with open( + os.path.join( + inputs_dir, + "{}_requirement_project_contributions.tab".format(reserve_type), + ), + "w", + newline="", + ) as prj_file: + writer = csv.writer(prj_file, delimiter="\t", lineterminator="\n") + + # Write header + writer.writerow( + ["ba", "project", "percent_power_req", "percent_capacity_req"] + ) + for (ba, prj, pwr, cap) in project_contributions: + if pwr is None: + pwr = "." + if cap is None: + cap = "." + writer.writerow([ba, prj, pwr, cap]) diff --git a/gridpath/system/reserves/requirement/spinning_reserves.py b/gridpath/system/reserves/requirement/spinning_reserves.py index bc525ac1c..dd6579988 100644 --- a/gridpath/system/reserves/requirement/spinning_reserves.py +++ b/gridpath/system/reserves/requirement/spinning_reserves.py @@ -35,6 +35,9 @@ def add_model_components(m, d, scenario_directory, subproblem, stage): reserve_requirement_tmp_param="spinning_reserves_requirement_mw", reserve_requirement_percent_param="spin_per_req", reserve_zone_load_zone_set="SPIN_BA_LZ", + ba_prj_req_contribution_set="SPIN_BA_PRJ_CONTRIBUTION", + prj_power_param="spin_prj_pwr_contribution", + prj_capacity_param="spin_prj_cap_contribution", reserve_requirement_expression="Spin_Requirement", ) @@ -50,6 +53,9 @@ def load_model_data(m, d, data_portal, scenario_directory, subproblem, stage): reserve_requirement_param="spinning_reserves_requirement_mw", reserve_zone_load_zone_set="SPIN_BA_LZ", reserve_requirement_percent_param="spin_per_req", + ba_prj_req_contribution_set="SPIN_BA_PRJ_CONTRIBUTION", + prj_power_param="spin_prj_pwr_contribution", + prj_capacity_param="spin_prj_cap_contribution", reserve_type="spinning_reserves", ) @@ -103,7 +109,7 @@ def write_model_inputs( :return: """ - tmp_req, percent_req, percent_map = get_inputs_from_database( + tmp_req, percent_req, percent_map, project_contributions = get_inputs_from_database( scenario_id, subscenarios, subproblem, stage, conn ) @@ -114,5 +120,6 @@ def write_model_inputs( timepoint_req=tmp_req, percent_req=percent_req, percent_map=percent_map, + project_contributions=project_contributions, reserve_type="spinning_reserves", ) diff --git a/tests/objective/system/reserve_violation_penalties/test_lf_reserves_up.py b/tests/objective/system/reserve_violation_penalties/test_lf_reserves_up.py index 053da07e4..980a2b342 100644 --- a/tests/objective/system/reserve_violation_penalties/test_lf_reserves_up.py +++ b/tests/objective/system/reserve_violation_penalties/test_lf_reserves_up.py @@ -36,9 +36,12 @@ "geography.load_following_up_balancing_areas", "project", "project.capacity.capacity", + "project.availability.availability", "project.fuels", "project.operations", "project.operations.reserves.lf_reserves_up", + "project.operations.operational_types", + "project.operations.power", "system.reserves.requirement.lf_reserves_up", "system.reserves.aggregation.lf_reserves_up", "system.reserves.balance.lf_reserves_up", diff --git a/tests/system/reserves/aggregation/test_lf_reserves_up.py b/tests/system/reserves/aggregation/test_lf_reserves_up.py index 2a72c495d..6b8181460 100644 --- a/tests/system/reserves/aggregation/test_lf_reserves_up.py +++ b/tests/system/reserves/aggregation/test_lf_reserves_up.py @@ -36,9 +36,12 @@ "geography.load_following_up_balancing_areas", "project", "project.capacity.capacity", + "project.availability.availability", "project.fuels", "project.operations", "project.operations.reserves.lf_reserves_up", + "project.operations.operational_types", + "project.operations.power", "system.reserves.requirement.lf_reserves_up", ] NAME_OF_MODULE_BEING_TESTED = "system.reserves.aggregation.lf_reserves_up" diff --git a/tests/system/reserves/balance/test_lf_reserves_up.py b/tests/system/reserves/balance/test_lf_reserves_up.py index 7eca368d8..f540371a8 100644 --- a/tests/system/reserves/balance/test_lf_reserves_up.py +++ b/tests/system/reserves/balance/test_lf_reserves_up.py @@ -36,9 +36,12 @@ "geography.load_following_up_balancing_areas", "project", "project.capacity.capacity", + "project.availability.availability", "project.fuels", "project.operations", "project.operations.reserves.lf_reserves_up", + "project.operations.operational_types", + "project.operations.power", "system.reserves.requirement.lf_reserves_up", "system.reserves.aggregation.lf_reserves_up", ] diff --git a/tests/system/reserves/requirement/test_lf_reserves_up.py b/tests/system/reserves/requirement/test_lf_reserves_up.py index 05abd2f22..055a5e3cb 100644 --- a/tests/system/reserves/requirement/test_lf_reserves_up.py +++ b/tests/system/reserves/requirement/test_lf_reserves_up.py @@ -37,9 +37,12 @@ "geography.load_following_up_balancing_areas", "project", "project.capacity.capacity", + "project.availability.availability", "project.fuels", "project.operations", "project.operations.reserves.lf_reserves_up", + "project.operations.operational_types", + "project.operations.power", ] NAME_OF_MODULE_BEING_TESTED = "system.reserves.requirement.lf_reserves_up" IMPORTED_PREREQ_MODULES = list() @@ -134,6 +137,30 @@ def test_data_loaded_correctly(self): ) self.assertDictEqual(expected_req, actual_req) + # Set: LF_UP_BA_PRJ_PWR_CONTRIBUTION + expected_prj_contr_set = sorted([("Zone1", "Wind"), ("Zone1", "Customer_PV")]) + + actual_prj_contr_set = sorted( + [(ba, prj) for (ba, prj) in instance.LF_UP_BA_PRJ_CONTRIBUTION] + ) + self.assertListEqual(expected_prj_contr_set, actual_prj_contr_set) + + # Param: lf_up_prj_pwr_contribution + expected_pwr_contr = {("Zone1", "Wind"): 0.05, ("Zone1", "Customer_PV"): 0} + actual_pwr_contr = { + (ba, prj): instance.lf_up_prj_pwr_contribution[ba, prj] + for (ba, prj) in instance.LF_UP_BA_PRJ_CONTRIBUTION + } + self.assertDictEqual(expected_pwr_contr, actual_pwr_contr) + + # Param: lf_up_prj_cap_contribution + expected_cap_contr = {("Zone1", "Wind"): 0, ("Zone1", "Customer_PV"): 0.03} + actual_cap_contr = { + (ba, prj): instance.lf_up_prj_cap_contribution[ba, prj] + for (ba, prj) in instance.LF_UP_BA_PRJ_CONTRIBUTION + } + self.assertDictEqual(expected_cap_contr, actual_cap_contr) + if __name__ == "__main__": unittest.main() diff --git a/tests/test_data/inputs/lf_reserves_up_requirement_project_contributions.tab b/tests/test_data/inputs/lf_reserves_up_requirement_project_contributions.tab new file mode 100644 index 000000000..a15ee16aa --- /dev/null +++ b/tests/test_data/inputs/lf_reserves_up_requirement_project_contributions.tab @@ -0,0 +1,3 @@ +ba project percent_power_req percent_capacity_req +Zone1 Customer_PV . 0.03 +Zone1 Wind 0.05 . diff --git a/tests/test_examples.py b/tests/test_examples.py index 73cab790d..f087a3997 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -1101,6 +1101,20 @@ def test_tx_flow(self): self.check_validation("test_tx_flow") self.run_and_check_objective("test_tx_flow", -59124336744013.484) + def test_example_test_new_solar_reserve_prj_contribution(self): + """ + Check validation and objective function value of + "test_reserve_prj_contribution" example. + This example is based on "test_new_solar" with the only difference, the LF UP + requirement ID + :return: + """ + + self.check_validation("test_new_solar_reserve_prj_contribution") + self.run_and_check_objective( + "test_new_solar_reserve_prj_contribution", -3796311064738.0493 + ) + @classmethod def tearDownClass(cls): os.remove(DB_PATH)