From ee78dae3f18273349369265c7053b20a23a39be2 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Sun, 31 Mar 2024 16:41:45 -0600 Subject: [PATCH 01/10] Begin adopting new `OperationalCost`s --- src/library/psi_library.jl | 66 ++++++++-------- src/library/psitest_library.jl | 133 ++++++++++++++++++--------------- 2 files changed, 108 insertions(+), 91 deletions(-) diff --git a/src/library/psi_library.jl b/src/library/psi_library.jl index 90db4748..c7b31808 100644 --- a/src/library/psi_library.jl +++ b/src/library/psi_library.jl @@ -19,7 +19,7 @@ function build_c_sys5_pjm(; kwargs...) PrimeMovers.PVe, (min = 0.0, max = 0.0), 1.0, - TwoPartCost(LinearFunctionData(0.0), 0.0), + RenewableGenerationCost(nothing), 100.0, ) wind_device = PSY.RenewableDispatch( @@ -32,7 +32,7 @@ function build_c_sys5_pjm(; kwargs...) PrimeMovers.WT, (min = 0.0, max = 0.0), 1.0, - TwoPartCost(LinearFunctionData(0.0), 0.0), + RenewableGenerationCost(nothing), 100.0, ) PSY.add_component!(c_sys5, pv_device) @@ -135,7 +135,7 @@ function build_c_sys5_pjm_rt(; kwargs...) PrimeMovers.PVe, (min = 0.0, max = 0.0), 1.0, - TwoPartCost(LinearFunctionData(0.0), 0.0), + RenewableGenerationCost(nothing), 100.0, ) wind_device = PSY.RenewableDispatch( @@ -148,7 +148,7 @@ function build_c_sys5_pjm_rt(; kwargs...) PrimeMovers.WT, (min = 0.0, max = 0.0), 1.0, - TwoPartCost(LinearFunctionData(0.0), 0.0), + RenewableGenerationCost(nothing), 100.0, ) PSY.add_component!(c_sys5, pv_device) @@ -290,8 +290,9 @@ function build_5_bus_hydro_uc_sys_targets(; kwargs...) else c_sys5_hy_uc = PSY.System(rawsys; sys_kwargs...) end - cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + cost = PSY.StorageCost(; + charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -349,8 +350,9 @@ function build_5_bus_hydro_ed_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + cost = PSY.StorageCost(; + charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -410,8 +412,9 @@ function build_5_bus_hydro_wk_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + cost = PSY.StorageCost(; + charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -861,8 +864,9 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -0.30, max = 0.30), ramp_limits = nothing, time_limits = nothing, - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 14.0, 0.0), + # Arguments + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), 0.0, 4.0, 2.0, @@ -883,8 +887,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -1.275, max = 1.275), ramp_limits = (up = 0.02 * 2.2125, down = 0.02 * 2.2125), time_limits = (up = 2.0, down = 1.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 15.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), 0.0, 1.5, 0.75, @@ -905,8 +909,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -3.90, max = 3.90), ramp_limits = (up = 0.012 * 5.2, down = 0.012 * 5.2), time_limits = (up = 3.0, down = 2.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 30.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 30.0, 0.0))), 0.0, 3.0, 1.5, @@ -927,8 +931,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -1.5, max = 1.5), ramp_limits = (up = 0.015 * 2.5, down = 0.015 * 2.5), time_limits = (up = 2.0, down = 1.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 40.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 40.0, 0.0))), 0.0, 4.0, 2.0, @@ -949,8 +953,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -4.50, max = 4.50), ramp_limits = (up = 0.015 * 7.5, down = 0.015 * 7.5), time_limits = (up = 5.0, down = 3.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 10.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 10.0, 0.0))), 0.0, 1.5, 0.75, @@ -971,8 +975,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -0.30, max = 0.30), ramp_limits = nothing, time_limits = nothing, - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 14.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), 0.0, 4.0, 2.0, @@ -993,8 +997,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -1.275, max = 1.275), ramp_limits = (up = 0.02 * 2.2125, down = 0.02 * 2.2125), time_limits = (up = 2.0, down = 1.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 15.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), 0.0, 1.5, 0.75, @@ -1015,8 +1019,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -3.90, max = 3.90), ramp_limits = (up = 0.012 * 5.2, down = 0.012 * 5.2), time_limits = (up = 3.0, down = 2.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 30.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 30.0, 0.0))), 0.0, 3.0, 1.5, @@ -1037,8 +1041,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -1.5, max = 1.5), ramp_limits = (up = 0.015 * 2.5, down = 0.015 * 2.5), time_limits = (up = 2.0, down = 1.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 40.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 40.0, 0.0))), 0.0, 4.0, 2.0, @@ -1059,8 +1063,8 @@ function build_two_zone_5_bus(; kwargs...) reactive_power_limits = (min = -4.50, max = 4.50), ramp_limits = (up = 0.015 * 7.5, down = 0.015 * 7.5), time_limits = (up = 5.0, down = 3.0), - operation_cost = ThreePartCost( - QuadraticFunctionData(0.0, 10.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 10.0, 0.0))), 0.0, 1.5, 0.75, @@ -1487,7 +1491,7 @@ function _duplicate_system(main_sys::PSY.System, twin_sys::PSY.System, HVDC_line end end end - set_variable!(get_operation_cost(g), PiecewiseLinearPointData(new_pwl_array)) + set_variable!(get_operation_cost(g), PiecewiseLinearData(new_pwl_array)) end # set service participation diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index 157af38c..d775e240 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -211,7 +211,7 @@ function build_c_sys5_re(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_re)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -467,7 +467,7 @@ function build_c_sys5_hyd(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -636,7 +636,7 @@ function build_c_sys5_hyd_ems(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -750,7 +750,7 @@ function build_c_sys5_bat(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_bat)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -841,7 +841,7 @@ function build_c_sys5_il(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_il)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -994,8 +994,8 @@ function build_sys_ramp_testing(; kwargs...) reactive_power_limits = nothing, ramp_limits = nothing, time_limits = nothing, - operation_cost = PSY.ThreePartCost( - QuadraticFunctionData(0.0, 14.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), 0.0, 4.0, 2.0, @@ -1016,8 +1016,8 @@ function build_sys_ramp_testing(; kwargs...) reactive_power_limits = nothing, ramp_limits = (up = 0.010625 * 2.0, down = 0.010625 * 2.0), time_limits = nothing, - operation_cost = PSY.ThreePartCost( - QuadraticFunctionData(0.0, 15.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), 0.0, 1.5, 0.75, @@ -1179,7 +1179,7 @@ function build_c_sys5_uc(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1291,7 +1291,7 @@ function build_c_sys5_uc_non_spin(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1431,7 +1431,7 @@ function build_c_sys5_uc_re(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -2304,7 +2304,7 @@ function build_sos_test_sys(; kwargs...) time_limits = nothing, ramp_limits = nothing, operation_cost = PSY.ThreePartCost( - PiecewiseLinearPointData( + PiecewiseLinearData( [(22.0, 1122.43), (33.0, 1617.43), (44.0, 1742.48), (55.0, 2075.88)]), 0.0, 5665.23, @@ -2327,7 +2327,7 @@ function build_sos_test_sys(; kwargs...) time_limits = nothing, ramp_limits = nothing, operation_cost = PSY.ThreePartCost( - PiecewiseLinearPointData( + PiecewiseLinearData( [ (62.0, 1500.19), (92.9, 2132.59), @@ -2399,7 +2399,7 @@ function build_pwl_test_sys(; kwargs...) time_limits = nothing, ramp_limits = nothing, operation_cost = PSY.ThreePartCost( - PiecewiseLinearPointData([ + PiecewiseLinearData([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), @@ -2426,7 +2426,7 @@ function build_pwl_test_sys(; kwargs...) time_limits = nothing, ramp_limits = nothing, operation_cost = PSY.ThreePartCost( - PiecewiseLinearPointData([ + PiecewiseLinearData([ (62.0, 1264.80), (93.0, 1897.20), (124.0, 2594.4787), @@ -2483,8 +2483,8 @@ function build_duration_test_sys(; kwargs...) reactive_power_limits = nothing, ramp_limits = nothing, time_limits = (up = 4, down = 2), - operation_cost = PSY.ThreePartCost( - QuadraticFunctionData(0.0, 14.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), 0.0, 4.0, 2.0, @@ -2506,8 +2506,8 @@ function build_duration_test_sys(; kwargs...) reactive_power_limits = nothing, ramp_limits = nothing, time_limits = (up = 6, down = 4), - operation_cost = PSY.ThreePartCost( - QuadraticFunctionData(0.0, 15.0, 0.0), + operation_cost = ThermalGenerationCost( + CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), 0.0, 1.5, 0.75, @@ -2586,13 +2586,13 @@ function build_pwl_marketbid_sys(; kwargs...) DA_load_forecast = Dict{Dates.DateTime, TimeSeries.TimeArray}() market_bid_gen1_data = Dict( ini_time => [ - PiecewiseLinearPointData([ + PiecewiseLinearData([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), ]), - PiecewiseLinearPointData([ + PiecewiseLinearData([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), @@ -2600,13 +2600,13 @@ function build_pwl_marketbid_sys(; kwargs...) ]), ], ini_time + Hour(1) => [ - PiecewiseLinearPointData([ + PiecewiseLinearData([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), ]), - PiecewiseLinearPointData([ + PiecewiseLinearData([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), @@ -2621,13 +2621,13 @@ function build_pwl_marketbid_sys(; kwargs...) ) market_bid_gen2_data = Dict( ini_time => [ - PiecewiseLinearPointData([ + PiecewiseLinearData([ (5.0, 0.0), (7.33, 290.1), (9.67, 582.72), (12.0, 894.1), ]), - PiecewiseLinearPointData([ + PiecewiseLinearData([ (5.0, 0.0), (7.33, 300.1), (9.67, 600.72), @@ -2635,13 +2635,13 @@ function build_pwl_marketbid_sys(; kwargs...) ]), ], ini_time + Hour(1) => [ - PiecewiseLinearPointData([ + PiecewiseLinearData([ (5.0, 0.0), (7.33, 290.1), (9.67, 582.72), (12.0, 894.1), ]), - PiecewiseLinearPointData([ + PiecewiseLinearData([ (5.0, 0.0), (7.33, 300.1), (9.67, 600.72), @@ -2885,7 +2885,7 @@ function build_c_sys5_bat_ems(; kwargs...) add_time_series!(c_sys5_bat, serv, Deterministic("requirement", forecast_data)) end for (ix, serv) in enumerate(get_components(ReserveDemandCurve, c_sys5_bat)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearPointData}}() + forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -2964,8 +2964,9 @@ function build_c_sys5_hybrid(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = PSY.LinearFunctionData(0.0), + discharge_variable_cost = PSY.LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3146,8 +3147,9 @@ function build_c_sys5_hybrid_uc(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = PSY.LinearFunctionData(0.0), + discharge_variable_cost = PSY.LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3273,8 +3275,9 @@ function build_c_sys5_hybrid_ed(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = PSY.LinearFunctionData(0.0), + discharge_variable_cost = PSY.LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3417,8 +3420,9 @@ function build_hydro_test_case_b_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.15), + discharge_variable_cost = LinearFunctionData(0.15), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3479,8 +3483,9 @@ function build_hydro_test_case_c_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.15), + discharge_variable_cost = LinearFunctionData(0.15), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3541,8 +3546,9 @@ function build_hydro_test_case_d_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.15), + discharge_variable_cost = LinearFunctionData(0.15), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3603,8 +3609,9 @@ function build_hydro_test_case_e_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.15), + discharge_variable_cost = LinearFunctionData(0.15), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3665,8 +3672,9 @@ function build_hydro_test_case_f_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageManagementCost(; - variable = LinearFunctionData(0.15), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.15), + discharge_variable_cost = LinearFunctionData(0.15), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3725,7 +3733,7 @@ function build_batt_test_case_b_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - TwoPartCost(LinearFunctionData(0.220), 0.0), + RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), 100.0, ) @@ -3745,8 +3753,9 @@ function build_batt_test_case_b_sys(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.0), + discharge_variable_cost = LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3800,7 +3809,7 @@ function build_batt_test_case_c_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - TwoPartCost(LinearFunctionData(0.220), 0.0), + RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), 100.0, ) @@ -3820,8 +3829,9 @@ function build_batt_test_case_c_sys(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.0), + discharge_variable_cost = LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3875,7 +3885,7 @@ function build_batt_test_case_d_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - TwoPartCost(LinearFunctionData(0.220), 0.0), + RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), 100.0, ) @@ -3895,8 +3905,9 @@ function build_batt_test_case_d_sys(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.0), + discharge_variable_cost = LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3950,7 +3961,7 @@ function build_batt_test_case_e_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - TwoPartCost(LinearFunctionData(0.220), 0.0), + RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), 100.0, ) @@ -3970,8 +3981,9 @@ function build_batt_test_case_e_sys(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.0), + discharge_variable_cost = LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -4025,7 +4037,7 @@ function build_batt_test_case_f_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - TwoPartCost(LinearFunctionData(0.220), 0.0), + RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), 100.0, ) @@ -4045,8 +4057,9 @@ function build_batt_test_case_f_sys(; kwargs...) reactive_power_limits = (min = -2.0, max = 2.0), base_power = 100.0, storage_target = 0.2, - operation_cost = PSY.StorageManagementCost(; - variable = PSY.LinearFunctionData(0.0), + operation_cost = PSY.StorageCost(; + charge_variable_cost = LinearFunctionData(0.0), + discharge_variable_cost = LinearFunctionData(0.0), fixed = 0.0, start_up = 0.0, shut_down = 0.0, From 719c7bedf9f0fe692e487c7c7320b3ee10382398 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Tue, 2 Apr 2024 19:02:51 -0600 Subject: [PATCH 02/10] Further refine operational costs --- src/library/psi_library.jl | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/library/psi_library.jl b/src/library/psi_library.jl index c7b31808..f49f39f3 100644 --- a/src/library/psi_library.jl +++ b/src/library/psi_library.jl @@ -290,7 +290,7 @@ function build_5_bus_hydro_uc_sys_targets(; kwargs...) else c_sys5_hy_uc = PSY.System(rawsys; sys_kwargs...) end - cost = PSY.StorageCost(; + cost = PSY.HydroGenerationCost(; charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), fixed = 0.0, @@ -350,15 +350,7 @@ function build_5_bus_hydro_ed_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = PSY.StorageCost(; - charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = 0.0, - ) + cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_ed) set_operation_cost!(hy, cost) end @@ -412,15 +404,7 @@ function build_5_bus_hydro_wk_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = PSY.StorageCost(; - charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = 0.0, - ) + cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_wk) set_operation_cost!(hy, cost) end From 0728b52ff3012876b46b89e48d4319317ff51088 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:24:24 -0600 Subject: [PATCH 03/10] Even further refine operational costs --- src/library/psitest_library.jl | 55 ++++++---------------------------- 1 file changed, 9 insertions(+), 46 deletions(-) diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index d775e240..9941112b 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -2784,7 +2784,7 @@ function build_test_RTS_GMLC_sys_with_hybrid(; kwargs...) storage = storage, renewable_unit = renewable_unit, base_power = 100.0, - operation_cost = TwoPartCost(nothing), + operation_cost = MarketBidCost(nothing), ) add_component!(sys, h_sys) return sys @@ -3420,15 +3420,8 @@ function build_hydro_test_case_b_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.15), - discharge_variable_cost = LinearFunctionData(0.15), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 0.0, - energy_surplus_cost = 10.0, - ), + operation_cost = HydroGenerationCost( + CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3483,15 +3476,8 @@ function build_hydro_test_case_c_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.15), - discharge_variable_cost = LinearFunctionData(0.15), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = 0.0, - ), + operation_cost = HydroGenerationCost( + CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3546,15 +3532,8 @@ function build_hydro_test_case_d_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.15), - discharge_variable_cost = LinearFunctionData(0.15), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 0.0, - energy_surplus_cost = -5.0, - ), + operation_cost = HydroGenerationCost( + CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3609,15 +3588,7 @@ function build_hydro_test_case_e_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.15), - discharge_variable_cost = LinearFunctionData(0.15), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = 40.0, - ), + operation_cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3672,15 +3643,7 @@ function build_hydro_test_case_f_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.15), - discharge_variable_cost = LinearFunctionData(0.15), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = -5.0, - ), + operation_cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, From 21f923ae349db47e7f5b87766e48b58f8183358e Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Wed, 10 Apr 2024 11:25:33 -0600 Subject: [PATCH 04/10] Commit use of custom `DATA_DIR` --- src/definitions.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/definitions.jl b/src/definitions.jl index 4ac5f5ca..57f51b8d 100644 --- a/src/definitions.jl +++ b/src/definitions.jl @@ -1,6 +1,7 @@ const PACKAGE_DIR = joinpath(dirname(dirname(pathof(PowerSystemCaseBuilder)))) -const DATA_DIR = - joinpath(LazyArtifacts.artifact"CaseData", "PowerSystemsTestData-3.0-alpha") +# const DATA_DIR = +# joinpath(LazyArtifacts.artifact"CaseData", "PowerSystemsTestData-3.0-alpha") +const DATA_DIR = joinpath(dirname(PACKAGE_DIR), "PowerSystemsTestData") # TODO remove before merging! Kludge to use custom test data until https://github.com/NREL-Sienna/PowerSystemCaseBuilder.jl/issues/54 gets resolved const RTS_DIR = joinpath(LazyArtifacts.artifact"rts", "RTS-GMLC-0.2.2") From 5ed53ad129cc54e5f1ba57ed9604ef90e1f3028e Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Wed, 10 Apr 2024 13:36:29 -0600 Subject: [PATCH 05/10] Refine interface to custom `DATA_DIR` --- src/definitions.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/definitions.jl b/src/definitions.jl index 57f51b8d..99705846 100644 --- a/src/definitions.jl +++ b/src/definitions.jl @@ -1,7 +1,7 @@ const PACKAGE_DIR = joinpath(dirname(dirname(pathof(PowerSystemCaseBuilder)))) # const DATA_DIR = # joinpath(LazyArtifacts.artifact"CaseData", "PowerSystemsTestData-3.0-alpha") -const DATA_DIR = joinpath(dirname(PACKAGE_DIR), "PowerSystemsTestData") # TODO remove before merging! Kludge to use custom test data until https://github.com/NREL-Sienna/PowerSystemCaseBuilder.jl/issues/54 gets resolved +const DATA_DIR = get(ENV, "PSB_DATA_DIR", joinpath(dirname(PACKAGE_DIR), "PowerSystemsTestData")) # TODO remove before merging! Kludge to use custom test data until https://github.com/NREL-Sienna/PowerSystemCaseBuilder.jl/issues/54 gets resolved const RTS_DIR = joinpath(LazyArtifacts.artifact"rts", "RTS-GMLC-0.2.2") From 8de4b86caa4171ce32c2fbad495d338c7c0450ff Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Wed, 10 Apr 2024 15:05:15 -0600 Subject: [PATCH 06/10] Remove more old costs --- src/library/psitest_library.jl | 76 ++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 27 deletions(-) diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index 9941112b..863a4398 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -2303,9 +2303,17 @@ function build_sos_test_sys(; kwargs...) reactive_power_limits = nothing, time_limits = nothing, ramp_limits = nothing, - operation_cost = PSY.ThreePartCost( - PiecewiseLinearData( - [(22.0, 1122.43), (33.0, 1617.43), (44.0, 1742.48), (55.0, 2075.88)]), + operation_cost = ThermalGenerationCost( + CostCurve( + InputOutputCurve( + PiecewiseLinearData( + [ + (22.0, 1122.43), + (33.0, 1617.43), + (44.0, 1742.48), + (55.0, 2075.88), + ])), + ), 0.0, 5665.23, 0.0, @@ -2326,14 +2334,16 @@ function build_sos_test_sys(; kwargs...) reactive_power_limits = nothing, time_limits = nothing, ramp_limits = nothing, - operation_cost = PSY.ThreePartCost( - PiecewiseLinearData( - [ - (62.0, 1500.19), - (92.9, 2132.59), - (124.0, 2829.875), - (155.0, 2831.444), - ]), + operation_cost = ThermalGenerationCost( + CostCurve( + InputOutputCurve( + PiecewiseLinearData([ + (62.0, 1500.19), + (92.9, 2132.59), + (124.0, 2829.875), + (155.0, 2831.444), + ])), + ), 0.0, 5665.23, 0.0, @@ -2398,13 +2408,16 @@ function build_pwl_test_sys(; kwargs...) reactive_power_limits = nothing, time_limits = nothing, ramp_limits = nothing, - operation_cost = PSY.ThreePartCost( - PiecewiseLinearData([ - (22.0, 589.99), - (33.0, 884.99), - (44.0, 1210.04), - (55.0, 1543.44), - ]), + operation_cost = ThermalGenerationCost( + CostCurve( + InputOutputCurve( + PiecewiseLinearData([ + (22.0, 589.99), + (33.0, 884.99), + (44.0, 1210.04), + (55.0, 1543.44), + ])), + ), 532.44, 5665.23, 0.0, @@ -2425,13 +2438,16 @@ function build_pwl_test_sys(; kwargs...) reactive_power_limits = nothing, time_limits = nothing, ramp_limits = nothing, - operation_cost = PSY.ThreePartCost( - PiecewiseLinearData([ - (62.0, 1264.80), - (93.0, 1897.20), - (124.0, 2594.4787), - (155.0, 3433.04), - ]), + operation_cost = ThermalGenerationCost( + CostCurve( + InputOutputCurve( + PiecewiseLinearData([ + (62.0, 1264.80), + (93.0, 1897.20), + (124.0, 2594.4787), + (155.0, 3433.04), + ])), + ), 235.397, 5665.23, 0.0, @@ -3588,7 +3604,10 @@ function build_hydro_test_case_e_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), + operation_cost = HydroGenerationCost( + CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + 0.0, + ), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3643,7 +3662,10 @@ function build_hydro_test_case_f_sys(; kwargs...) reactive_power_limits = (min = 0.0, max = 7.0), ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, - operation_cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), + operation_cost = HydroGenerationCost( + CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + 0.0, + ), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, From 0b8ef908394709a746fb839d83a4ffa149bbd170 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Wed, 10 Apr 2024 16:38:02 -0600 Subject: [PATCH 07/10] Remove `modified_tamu_ercot_da_system` --- src/library/psi_library.jl | 8 -------- src/system_descriptor_data.jl | 8 -------- src/utils/download.jl | 20 -------------------- 3 files changed, 36 deletions(-) diff --git a/src/library/psi_library.jl b/src/library/psi_library.jl index f49f39f3..b219b531 100644 --- a/src/library/psi_library.jl +++ b/src/library/psi_library.jl @@ -645,14 +645,6 @@ function build_modified_RTS_GMLC_RT_sys_noForecast(; kwargs...) return sys end -function build_modified_tamu_ercot_da_sys(; kwargs...) - sys_kwargs = filter_kwargs(; kwargs...) - data_dir = get_raw_data(; kwargs...) - system_path = joinpath(data_dir, "DA_sys.json") - sys = System(system_path; sys_kwargs...) - return sys -end - function build_two_zone_5_bus(; kwargs...) ## System with 10 buses ###################################################### """ diff --git a/src/system_descriptor_data.jl b/src/system_descriptor_data.jl index 8908fc7a..18f61a79 100644 --- a/src/system_descriptor_data.jl +++ b/src/system_descriptor_data.jl @@ -398,14 +398,6 @@ const SYSTEM_CATALOG = [ raw_data = RTS_DIR, build_function = build_HVDC_TWO_RTO_RTS_5Min_sys, ), - SystemDescriptor(; - name = "modified_tamu_ercot_da_system", - description = "Modified tamu ercot day ahead system", - category = PSISystems, - raw_data = joinpath(DATA_DIR, "tamu_ercot"), - build_function = build_modified_tamu_ercot_da_sys, - download_function = download_modified_tamu_ercot_da, - ), SystemDescriptor(; name = "psse_ACTIVSg2000_sys", description = "PSSE ACTIVSg2000 Test system", diff --git a/src/utils/download.jl b/src/utils/download.jl index 4e972b9b..05167dc6 100644 --- a/src/utils/download.jl +++ b/src/utils/download.jl @@ -68,23 +68,3 @@ function unzip(::Type{Windows}, filename, directory) end @assert success(`$path_7z x $filename -y -o$directory`) "Unable to extract $filename to $directory" end - -function download_modified_tamu_ercot_da(; kwargs...) - directory = abspath(normpath(joinpath(PACKAGE_DIR, "data"))) - data = joinpath(directory, "tamu_ercot") - # This is temporary place for hosting the dataset. - data_urls = Dict( - "DA_sys.json" => "https://www.dropbox.com/sh/uzohjqzoyinyyas/AAC40qKEowAbGax-yYiB_4wna/DA_sys.json?dl=1", - "DA_sys_validation_descriptors.json" => "https://www.dropbox.com/sh/uzohjqzoyinyyas/AADWU21wuWW62Fl5SP4ubo8Va/DA_sys_validation_descriptors.json?dl=1", - "DA_sys_time_series_storage.h5" => "https://www.dropbox.com/sh/uzohjqzoyinyyas/AADURazsNKxO5l4_1wBiW8qsa/DA_sys_time_series_storage.h5?dl=1", - ) - if !isdir(data) - @info "Downloading TAMU ERCOT dataset." - mkpath(data) - for (file, urls) in data_urls - tempfilename = Base.download(urls) - mv(tempfilename, joinpath(data, file); force = true) - end - end - return data -end From ec80beddcd9081ae832515ac500a5c2e209c52b4 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Tue, 16 Apr 2024 12:58:16 -0600 Subject: [PATCH 08/10] Make final cost adjustments to make tests pass --- src/library/psi_library.jl | 14 +++---------- src/library/psitest_library.jl | 36 +++++++++++++++++----------------- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/src/library/psi_library.jl b/src/library/psi_library.jl index b219b531..31a8d192 100644 --- a/src/library/psi_library.jl +++ b/src/library/psi_library.jl @@ -290,15 +290,7 @@ function build_5_bus_hydro_uc_sys_targets(; kwargs...) else c_sys5_hy_uc = PSY.System(rawsys; sys_kwargs...) end - cost = PSY.HydroGenerationCost(; - charge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - discharge_variable_cost = CostCurve(InputOutputCurve(LinearFunctionData(0.15))), - fixed = 0.0, - start_up = 0.0, - shut_down = 0.0, - energy_shortage_cost = 50.0, - energy_surplus_cost = 0.0, - ) + cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_uc) set_operation_cost!(hy, cost) end @@ -1439,7 +1431,7 @@ function _duplicate_system(main_sys::PSY.System, twin_sys::PSY.System, HVDC_line main_sys, ) noise_values = rand(MersenneTwister(COST_PERTURBATION_NOISE_SEED), 1_000_000) - old_pwl_array = get_variable(get_operation_cost(g)) |> get_points + old_pwl_array = get_points(get_value_curve(get_variable(get_operation_cost(g)))) new_pwl_array = similar(old_pwl_array) for (ix, (x, y)) in enumerate(old_pwl_array) if ix ∈ [1, length(old_pwl_array)] @@ -1467,7 +1459,7 @@ function _duplicate_system(main_sys::PSY.System, twin_sys::PSY.System, HVDC_line end end end - set_variable!(get_operation_cost(g), PiecewiseLinearData(new_pwl_array)) + set_variable!(get_operation_cost(g), CostCurve(PiecewisePointCurve(new_pwl_array))) end # set service participation diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index 863a4398..99b6e39d 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -2567,7 +2567,7 @@ function build_pwl_marketbid_sys(; kwargs...) time_limits = nothing, ramp_limits = nothing, operation_cost = PSY.MarketBidCost(; - no_load = 0.0, + no_load_cost = 0.0, start_up = (hot = 0.0, warm = 0.0, cold = 0.0), shut_down = 0.0, ), @@ -2591,7 +2591,7 @@ function build_pwl_marketbid_sys(; kwargs...) start_time_limits = (hot = 2.0, warm = 4.0, cold = 12.0), start_types = 3, operation_cost = PSY.MarketBidCost(; - no_load = 0.0, + no_load_cost = 0.0, start_up = (hot = 393.28, warm = 455.37, cold = 703.76), shut_down = 0.0, ), @@ -2981,8 +2981,8 @@ function build_c_sys5_hybrid(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = PSY.LinearFunctionData(0.0), - discharge_variable_cost = PSY.LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3164,8 +3164,8 @@ function build_c_sys5_hybrid_uc(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = PSY.LinearFunctionData(0.0), - discharge_variable_cost = PSY.LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3292,8 +3292,8 @@ function build_c_sys5_hybrid_ed(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = PSY.LinearFunctionData(0.0), - discharge_variable_cost = PSY.LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3739,8 +3739,8 @@ function build_batt_test_case_b_sys(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.0), - discharge_variable_cost = LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3815,8 +3815,8 @@ function build_batt_test_case_c_sys(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.0), - discharge_variable_cost = LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3891,8 +3891,8 @@ function build_batt_test_case_d_sys(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.0), - discharge_variable_cost = LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -3967,8 +3967,8 @@ function build_batt_test_case_e_sys(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.0), - discharge_variable_cost = LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, @@ -4043,8 +4043,8 @@ function build_batt_test_case_f_sys(; kwargs...) base_power = 100.0, storage_target = 0.2, operation_cost = PSY.StorageCost(; - charge_variable_cost = LinearFunctionData(0.0), - discharge_variable_cost = LinearFunctionData(0.0), + charge_variable_cost = zero(CostCurve), + discharge_variable_cost = zero(CostCurve), fixed = 0.0, start_up = 0.0, shut_down = 0.0, From 153b144a320d94ead47134cdf82f3e5a2faff622 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Fri, 19 Apr 2024 13:35:33 -0600 Subject: [PATCH 09/10] Update type of bid cost --- src/library/psitest_library.jl | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index 99b6e39d..515d55e8 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -211,7 +211,8 @@ function build_c_sys5_re(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_re)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -467,7 +468,8 @@ function build_c_sys5_hyd(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -636,7 +638,8 @@ function build_c_sys5_hyd_ems(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -750,7 +753,8 @@ function build_c_sys5_bat(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_bat)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -841,7 +845,8 @@ function build_c_sys5_il(; kwargs...) ) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_il)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1179,7 +1184,8 @@ function build_c_sys5_uc(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1291,7 +1297,8 @@ function build_c_sys5_uc_non_spin(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1431,7 +1438,8 @@ function build_c_sys5_uc_re(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -2901,7 +2909,8 @@ function build_c_sys5_bat_ems(; kwargs...) add_time_series!(c_sys5_bat, serv, Deterministic("requirement", forecast_data)) end for (ix, serv) in enumerate(get_components(ReserveDemandCurve, c_sys5_bat)) - forecast_data = SortedDict{Dates.DateTime, Vector{PiecewiseLinearData}}() + forecast_data = + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) From 52abaa537a2b7e8dfd7f6f56eb48e059c8ae7b51 Mon Sep 17 00:00:00 2001 From: GabrielKS <23368820+GabrielKS@users.noreply.github.com> Date: Mon, 22 Apr 2024 16:09:03 -0600 Subject: [PATCH 10/10] Use cost aliases --- src/library/psi_library.jl | 26 ++++----- src/library/psitest_library.jl | 98 ++++++++++++++++------------------ 2 files changed, 60 insertions(+), 64 deletions(-) diff --git a/src/library/psi_library.jl b/src/library/psi_library.jl index 31a8d192..7718832b 100644 --- a/src/library/psi_library.jl +++ b/src/library/psi_library.jl @@ -290,7 +290,7 @@ function build_5_bus_hydro_uc_sys_targets(; kwargs...) else c_sys5_hy_uc = PSY.System(rawsys; sys_kwargs...) end - cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) + cost = HydroGenerationCost(CostCurve(LinearCurve(0.15)), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_uc) set_operation_cost!(hy, cost) end @@ -342,7 +342,7 @@ function build_5_bus_hydro_ed_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) + cost = HydroGenerationCost(CostCurve(LinearCurve(0.15)), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_ed) set_operation_cost!(hy, cost) end @@ -396,7 +396,7 @@ function build_5_bus_hydro_wk_sys_targets(; kwargs...) time_series_in_memory = true, sys_kwargs..., ) - cost = HydroGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0) + cost = HydroGenerationCost(CostCurve(LinearCurve(0.15)), 0.0) for hy in get_components(HydroEnergyReservoir, c_sys5_hy_wk) set_operation_cost!(hy, cost) end @@ -834,7 +834,7 @@ function build_two_zone_5_bus(; kwargs...) time_limits = nothing, # Arguments operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 14.0, 0.0)), 0.0, 4.0, 2.0, @@ -856,7 +856,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.02 * 2.2125, down = 0.02 * 2.2125), time_limits = (up = 2.0, down = 1.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 15.0, 0.0)), 0.0, 1.5, 0.75, @@ -878,7 +878,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.012 * 5.2, down = 0.012 * 5.2), time_limits = (up = 3.0, down = 2.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 30.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 30.0, 0.0)), 0.0, 3.0, 1.5, @@ -900,7 +900,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.015 * 2.5, down = 0.015 * 2.5), time_limits = (up = 2.0, down = 1.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 40.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 40.0, 0.0)), 0.0, 4.0, 2.0, @@ -922,7 +922,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.015 * 7.5, down = 0.015 * 7.5), time_limits = (up = 5.0, down = 3.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 10.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 10.0, 0.0)), 0.0, 1.5, 0.75, @@ -944,7 +944,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = nothing, time_limits = nothing, operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 14.0, 0.0)), 0.0, 4.0, 2.0, @@ -966,7 +966,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.02 * 2.2125, down = 0.02 * 2.2125), time_limits = (up = 2.0, down = 1.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 15.0, 0.0)), 0.0, 1.5, 0.75, @@ -988,7 +988,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.012 * 5.2, down = 0.012 * 5.2), time_limits = (up = 3.0, down = 2.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 30.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 30.0, 0.0)), 0.0, 3.0, 1.5, @@ -1010,7 +1010,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.015 * 2.5, down = 0.015 * 2.5), time_limits = (up = 2.0, down = 1.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 40.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 40.0, 0.0)), 0.0, 4.0, 2.0, @@ -1032,7 +1032,7 @@ function build_two_zone_5_bus(; kwargs...) ramp_limits = (up = 0.015 * 7.5, down = 0.015 * 7.5), time_limits = (up = 5.0, down = 3.0), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 10.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 10.0, 0.0)), 0.0, 1.5, 0.75, diff --git a/src/library/psitest_library.jl b/src/library/psitest_library.jl index 515d55e8..4afa400a 100644 --- a/src/library/psitest_library.jl +++ b/src/library/psitest_library.jl @@ -212,7 +212,7 @@ function build_c_sys5_re(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_re)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -469,7 +469,7 @@ function build_c_sys5_hyd(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -639,7 +639,7 @@ function build_c_sys5_hyd_ems(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_hyd)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -754,7 +754,7 @@ function build_c_sys5_bat(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_bat)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -846,7 +846,7 @@ function build_c_sys5_il(; kwargs...) end for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_il)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = TimeSeries.timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1000,7 +1000,7 @@ function build_sys_ramp_testing(; kwargs...) ramp_limits = nothing, time_limits = nothing, operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 14.0, 0.0)), 0.0, 4.0, 2.0, @@ -1022,7 +1022,7 @@ function build_sys_ramp_testing(; kwargs...) ramp_limits = (up = 0.010625 * 2.0, down = 0.010625 * 2.0), time_limits = nothing, operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 15.0, 0.0)), 0.0, 1.5, 0.75, @@ -1185,7 +1185,7 @@ function build_c_sys5_uc(; kwargs...) for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1298,7 +1298,7 @@ function build_c_sys5_uc_non_spin(; kwargs...) for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -1439,7 +1439,7 @@ function build_c_sys5_uc_re(; kwargs...) for (ix, serv) in enumerate(PSY.get_components(PSY.ReserveDemandCurve, c_sys5_uc)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -2313,14 +2313,13 @@ function build_sos_test_sys(; kwargs...) ramp_limits = nothing, operation_cost = ThermalGenerationCost( CostCurve( - InputOutputCurve( - PiecewiseLinearData( + PiecewisePointCurve( [ (22.0, 1122.43), (33.0, 1617.43), (44.0, 1742.48), (55.0, 2075.88), - ])), + ]), ), 0.0, 5665.23, @@ -2344,13 +2343,12 @@ function build_sos_test_sys(; kwargs...) ramp_limits = nothing, operation_cost = ThermalGenerationCost( CostCurve( - InputOutputCurve( - PiecewiseLinearData([ + PiecewisePointCurve([ (62.0, 1500.19), (92.9, 2132.59), (124.0, 2829.875), (155.0, 2831.444), - ])), + ]), ), 0.0, 5665.23, @@ -2418,13 +2416,12 @@ function build_pwl_test_sys(; kwargs...) ramp_limits = nothing, operation_cost = ThermalGenerationCost( CostCurve( - InputOutputCurve( - PiecewiseLinearData([ + PiecewisePointCurve([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), - ])), + ]), ), 532.44, 5665.23, @@ -2448,13 +2445,12 @@ function build_pwl_test_sys(; kwargs...) ramp_limits = nothing, operation_cost = ThermalGenerationCost( CostCurve( - InputOutputCurve( - PiecewiseLinearData([ + PiecewisePointCurve([ (62.0, 1264.80), (93.0, 1897.20), (124.0, 2594.4787), (155.0, 3433.04), - ])), + ]), ), 235.397, 5665.23, @@ -2508,7 +2504,7 @@ function build_duration_test_sys(; kwargs...) ramp_limits = nothing, time_limits = (up = 4, down = 2), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 14.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 14.0, 0.0)), 0.0, 4.0, 2.0, @@ -2531,7 +2527,7 @@ function build_duration_test_sys(; kwargs...) ramp_limits = nothing, time_limits = (up = 6, down = 4), operation_cost = ThermalGenerationCost( - CostCurve(InputOutputCurve(QuadraticFunctionData(0.0, 15.0, 0.0))), + CostCurve(QuadraticCurve(0.0, 15.0, 0.0)), 0.0, 1.5, 0.75, @@ -2610,32 +2606,32 @@ function build_pwl_marketbid_sys(; kwargs...) DA_load_forecast = Dict{Dates.DateTime, TimeSeries.TimeArray}() market_bid_gen1_data = Dict( ini_time => [ - PiecewiseLinearData([ + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), - ]), - PiecewiseLinearData([ + ])))), + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), - ]), + ])))), ], ini_time + Hour(1) => [ - PiecewiseLinearData([ + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), - ]), - PiecewiseLinearData([ + ])))), + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (22.0, 589.99), (33.0, 884.99), (44.0, 1210.04), (55.0, 1543.44), - ]), + ])))), ], ) market_bid_gen1 = PSY.Deterministic(; @@ -2645,32 +2641,32 @@ function build_pwl_marketbid_sys(; kwargs...) ) market_bid_gen2_data = Dict( ini_time => [ - PiecewiseLinearData([ + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (5.0, 0.0), (7.33, 290.1), (9.67, 582.72), (12.0, 894.1), - ]), - PiecewiseLinearData([ + ])))), + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (5.0, 0.0), (7.33, 300.1), (9.67, 600.72), (12.0, 900.1), - ]), + ])))), ], ini_time + Hour(1) => [ - PiecewiseLinearData([ + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (5.0, 0.0), (7.33, 290.1), (9.67, 582.72), (12.0, 894.1), - ]), - PiecewiseLinearData([ + ])))), + CostCurve(IncrementalCurve(PiecewisePointCurve(([ (5.0, 0.0), (7.33, 300.1), (9.67, 600.72), (12.0, 900.1), - ]), + ])))), ], ) market_bid_gen2 = PSY.Deterministic(; @@ -2910,7 +2906,7 @@ function build_c_sys5_bat_ems(; kwargs...) end for (ix, serv) in enumerate(get_components(ReserveDemandCurve, c_sys5_bat)) forecast_data = - SortedDict{Dates.DateTime, Vector{CostCurve{PiecewisePointCurve}}}() + SortedDict{Dates.DateTime, Vector{CostCurve{PiecewiseIncrementalCurve}}}() for t in 1:2 ini_time = timestamp(ORDC_cost_ts[t])[1] forecast_data[ini_time] = TimeSeries.values(ORDC_cost_ts[t]) @@ -3446,7 +3442,7 @@ function build_hydro_test_case_b_sys(; kwargs...) ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, operation_cost = HydroGenerationCost( - CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), + CostCurve(LinearCurve(0.15)), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3502,7 +3498,7 @@ function build_hydro_test_case_c_sys(; kwargs...) ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, operation_cost = HydroGenerationCost( - CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), + CostCurve(LinearCurve(0.15)), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3558,7 +3554,7 @@ function build_hydro_test_case_d_sys(; kwargs...) ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, operation_cost = HydroGenerationCost( - CostCurve(InputOutputCurve(LinearFunctionData(0.15))), 0.0), + CostCurve(LinearCurve(0.15)), 0.0), base_power = 100.0, storage_capacity = 50.0, inflow = 4.0, @@ -3614,7 +3610,7 @@ function build_hydro_test_case_e_sys(; kwargs...) ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, operation_cost = HydroGenerationCost( - CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + CostCurve(LinearCurve(0.15)), 0.0, ), base_power = 100.0, @@ -3672,7 +3668,7 @@ function build_hydro_test_case_f_sys(; kwargs...) ramp_limits = (up = 7.0, down = 7.0), time_limits = nothing, operation_cost = HydroGenerationCost( - CostCurve(InputOutputCurve(LinearFunctionData(0.15))), + CostCurve(LinearCurve(0.15)), 0.0, ), base_power = 100.0, @@ -3727,7 +3723,7 @@ function build_batt_test_case_b_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), + RenewableGenerationCost(CostCurve(LinearCurve(0.220))), 100.0, ) @@ -3803,7 +3799,7 @@ function build_batt_test_case_c_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), + RenewableGenerationCost(CostCurve(LinearCurve(0.220))), 100.0, ) @@ -3879,7 +3875,7 @@ function build_batt_test_case_d_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), + RenewableGenerationCost(CostCurve(LinearCurve(0.220))), 100.0, ) @@ -3955,7 +3951,7 @@ function build_batt_test_case_e_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), + RenewableGenerationCost(CostCurve(LinearCurve(0.220))), 100.0, ) @@ -4031,7 +4027,7 @@ function build_batt_test_case_f_sys(; kwargs...) PrimeMovers.WT, (min = -0.800, max = 0.800), 1.0, - RenewableGenerationCost(CostCurve(InputOutputCurve(LinearFunctionData(0.220)))), + RenewableGenerationCost(CostCurve(LinearCurve(0.220))), 100.0, )