diff --git a/CHANGELOG.md b/CHANGELOG.md index 473fcd8d3..1992a5298 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,11 +25,15 @@ Classify the change according to the following categories: ### Deprecated ### Removed -## fixed-bess-soc +## v0.59.0 ### Added +- Added two new size classes for **SteamTurbine** tech with new tech size ranges. - Add **ElectricStorage** inputs field **fixed_soc_series_fraction** and **fixed_soc_series_fraction_tolerance** to allow users to fix the SOC timeseries within a chosen absolute tolerance ### Changed - **ElectricStorage** **state_of_health** to **state_of_health_series_fraction** +- Updated **CHP.installed_cost_per_kw** and **CHP.om_cost_per_kwh** default values for size classes for recip_engine, combustion turbine, and microturbine prime mover types. +- Updated default values for **SteamTurbine** size classes. +- Reduced the number of size classes in **AbsorptionChiller** technology to five for single effect and four for double effect and updated installed and O&M costs accordingly. ## v0.58.2 ### Added diff --git a/data/absorption_chiller/absorption_chiller_defaults.json b/data/absorption_chiller/absorption_chiller_defaults.json index 5c7ef11f9..b33a5f6b5 100644 --- a/data/absorption_chiller/absorption_chiller_defaults.json +++ b/data/absorption_chiller/absorption_chiller_defaults.json @@ -2,82 +2,46 @@ "hot_water":{ "installed_cost_per_ton": [ 7000.0, - 3066.0, - 2027.0, - 1587.0, - 1527.0, - 1426.0, - 1365.0, - 1313.0, - 1312.0, - 1277.0, - 1248.0 + 4500.0, + 2300.0, + 1850.0, + 1600.0 ], "tech_sizes_for_cost_data": [ 10, 50, - 200, - 300, - 400, + 250, 500, - 600, - 700, - 800, - 900, 1000 ], "om_cost_per_ton":[ - 300.0, - 80.0, - 36.0, - 32.0, - 31.0, + 500.0, + 150.0, + 40.0, 30.0, - 28.0, - 26.0, - 23.0, - 20.0, - 18.0 + 20.0 ], "cop_thermal": 0.74, "heating_load_input": "DomesticHotWater" }, "steam":{ "installed_cost_per_ton": [ - 3723.0, - 2461.0, - 1960.0, - 1855.0, - 1709.0, - 1623.0, - 1547.0, - 1520.0, - 1470.0, - 1427.0 + 3200.0, + 2150.0, + 1650.0, + 1300.0 ], "tech_sizes_for_cost_data": [ - 50, 200, - 300, - 400, 500, - 600, - 700, - 800, - 900, - 1000 + 1000, + 2000 ], "om_cost_per_ton":[ - 100.0, - 43.0, + 50.0, 36.0, - 34.0, - 32.0, - 30.0, - 28.0, 26.0, - 23.0, - 20.0 + 16.0 ], "cop_thermal":1.42, "heating_load_input": "DomesticHotWater" diff --git a/data/chp/chp_defaults.json b/data/chp/chp_defaults.json index f0db75cff..e28c81244 100644 --- a/data/chp/chp_defaults.json +++ b/data/chp/chp_defaults.json @@ -2,36 +2,36 @@ "recip_engine": { "installed_cost_per_kw": [ [ - 4250.0, - 2000.0 + 4510.0, + 2120.0 ], [ - 4250.0, - 3700.0 + 4510.0, + 3920.0 ], [ - 3700.0, - 3450.0 + 3920.0, + 3660.0 ], [ - 3450.0, - 3150.0 + 3660.0, + 3340.0 ], [ - 3150.0, - 2800.0 + 3340.0, + 2970.0 ], [ - 2800.0, - 2550.0 + 2970.0, + 2700.0 ], [ - 2550.0, - 2350.0 + 2700.0, + 2490.0 ], [ - 2350.0, - 2000.0 + 2490.0, + 2120.0 ] ], "tech_sizes_for_cost_curve": [ @@ -69,14 +69,14 @@ ] ], "om_cost_per_kwh": [ - 0.0195, - 0.0275, - 0.0235, 0.021, - 0.0185, + 0.032, + 0.027, + 0.023, + 0.021, + 0.018, 0.016, - 0.0145, - 0.0135 + 0.015 ], "electric_efficiency_full_load": [ 0.3555, @@ -213,19 +213,19 @@ "installed_cost_per_kw": [ [ 4900.0, - 3400.0 + 3500.0 ], [ - 4900.0, - 4400.0 + 5050.0, + 4530.0 ], [ - 4400.0, - 3700.0 + 4530.0, + 3810.0 ], [ - 3700.0, - 3400.0 + 3810.0, + 3500.0 ] ], "tech_sizes_for_cost_curve": [ @@ -247,23 +247,23 @@ ] ], "om_cost_per_kwh": [ - 0.01475, - 0.0155, - 0.016, - 0.014 + 0.015, + 0.014, + 0.018, + 0.015 ], "electric_efficiency_full_load": [ - 0.2740, - 0.2648, - 0.2819, + 0.2390, + 0.2840, + 0.2840, 0.2831 ], "thermal_efficiency_full_load": { "hot_water": [ - 0.4024, - 0.4278, - 0.3841, + 0.482, + 0.395, + 0.380, 0.3770 ], "steam": @@ -329,32 +329,32 @@ "combustion_turbine": { "installed_cost_per_kw": [ [ - 5200.0, - 1700.0 + 5360.0, + 1750.0 ], [ - 5200.0, - 4200.0 + 5360.0, + 4330.0 ], [ - 4200.0, - 3400.0 + 4330.0, + 3500.0 ], [ - 3400.0, - 2850.0 + 3500.0, + 2940.0 ], [ - 2850.0, - 2500.0 + 2940.0, + 2580.0 ], [ - 2500.0, - 2150.0 + 2580.0, + 2210.0 ], [ - 2150.0, - 1700.0 + 2210.0, + 1750.0 ] ], "tech_sizes_for_cost_curve": [ @@ -388,13 +388,13 @@ ] ], "om_cost_per_kwh": [ - 0.012714, - 0.0145, + 0.013, + 0.015, 0.014, - 0.0135, + 0.014, + 0.013, 0.013, - 0.012, - 0.01 + 0.011 ], "electric_efficiency_full_load": [ 0.2854, diff --git a/data/steam_turbine/steam_turbine_default_data.json b/data/steam_turbine/steam_turbine_default_data.json index 1de8c9536..760c61ff5 100644 --- a/data/steam_turbine/steam_turbine_default_data.json +++ b/data/steam_turbine/steam_turbine_default_data.json @@ -1,50 +1,65 @@ { "installed_cost_per_kw": [ - 828.0, - 1136.0, - 682.0, - 666.0 + 1430.0, + 2700.0, + 2000.0, + 1000.0, + 800.0, + 650.0 ], "om_cost_per_kwh": [ - 0.0083, - 0.01, + 0.008, + 0.010, 0.009, - 0.006 + 0.008, + 0.007 ], "inlet_steam_pressure_psig": [ 600.0, + 300.0, 500.0, - 600.0, - 700.0 + 650.0, + 750.0, + 800.0 ], "inlet_steam_temperature_degF": [ - 592.0, + 620.0, + 450.0, 550.0, - 575.0, - 650.0 + 650.0, + 700.0, + 750.0 ], "outlet_steam_pressure_psig": [ - 117.0, - 50.0, + 160.0, + 100.0, + 100.0, 150.0, - 150.0 + 200.0, + 250.0 ], "isentropic_efficiency": [ - 0.639, - 0.525, - 0.612, - 0.78 + 0.71, + 0.65, + 0.65, + 0.685, + 0.74, + 0.825 ], "gearbox_generator_efficiency": [ - 0.947, + 0.948, 0.94, 0.94, + 0.94, + 0.96, 0.96 ], "net_to_gross_electric_ratio": [ - 0.971, + 0.972, + 0.974, 0.974, 0.966, + 0.973, 0.973 ] } \ No newline at end of file diff --git a/src/core/energy_storage/thermal_storage.jl b/src/core/energy_storage/thermal_storage.jl index 75cd3fafe..8b9d835f5 100644 --- a/src/core/energy_storage/thermal_storage.jl +++ b/src/core/energy_storage/thermal_storage.jl @@ -14,7 +14,7 @@ Cold thermal energy storage sytem; specifically, a chilled water system used to internal_efficiency_fraction::Float64 = 0.999999 # Thermal losses due to mixing from thermal power entering or leaving tank soc_min_fraction::Float64 = 0.1 # Minimum allowable TES thermal state of charge soc_init_fraction::Float64 = 0.5 # TES thermal state of charge at first hour of optimization - installed_cost_per_gal::Float64 = 1.50 # Thermal energy-based cost of TES (e.g. volume of the tank) + installed_cost_per_gal::Float64 = 1.90 # Thermal energy-based cost of TES (e.g. volume of the tank) thermal_decay_rate_fraction::Float64 = 0.0004 # Thermal loss (gain) rate as a fraction of energy storage capacity, per hour (frac*energy_capacity/hr = kw_thermal) om_cost_per_gal::Float64 = 0.0 # Yearly fixed O&M cost dependent on storage energy size macrs_option_years::Int = 5 #Note: default may change if Site.sector is not "commercial/industrial" @@ -32,7 +32,7 @@ Base.@kwdef struct ColdThermalStorageDefaults <: AbstractThermalStorageDefaults internal_efficiency_fraction::Float64 = 0.999999 soc_min_fraction::Float64 = 0.1 soc_init_fraction::Float64 = 0.5 - installed_cost_per_gal::Float64 = 1.50 + installed_cost_per_gal::Float64 = 1.90 thermal_decay_rate_fraction::Float64 = 0.0004 om_cost_per_gal::Float64 = 0.0 macrs_option_years::Int = 5 @@ -54,7 +54,7 @@ end internal_efficiency_fraction::Float64 = 0.999999 soc_min_fraction::Float64 = 0.1 soc_init_fraction::Float64 = 0.5 - installed_cost_per_gal::Float64 = 1.50 + installed_cost_per_gal::Float64 = 1.90 thermal_decay_rate_fraction::Float64 = 0.0004 om_cost_per_gal::Float64 = 0.0 macrs_option_years::Int = 5 #Note: default may change if Site.sector is not "commercial/industrial" @@ -75,7 +75,7 @@ Base.@kwdef struct HotThermalStorageDefaults <: AbstractThermalStorageDefaults internal_efficiency_fraction::Float64 = 0.999999 soc_min_fraction::Float64 = 0.1 soc_init_fraction::Float64 = 0.5 - installed_cost_per_gal::Float64 = 1.50 + installed_cost_per_gal::Float64 = 1.90 thermal_decay_rate_fraction::Float64 = 0.0004 om_cost_per_gal::Float64 = 0.0 macrs_option_years::Int = 5 diff --git a/test/runtests.jl b/test/runtests.jl index f41dcdbc7..0db219d01 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2248,7 +2248,7 @@ else # run HiGHS tests #Test CHP defaults use average fuel load, size class 2 for recip_engine @test inputs.s.chp.min_allowable_kw ≈ 50.0 atol=0.01 - @test inputs.s.chp.om_cost_per_kwh ≈ 0.0235 atol=0.0001 + @test inputs.s.chp.om_cost_per_kwh ≈ 0.027 atol=0.0001 delete!(input_data, "SpaceHeatingLoad") delete!(input_data, "DomesticHotWaterLoad") @@ -2275,7 +2275,7 @@ else # run HiGHS tests #Test CHP defaults use average fuel load, size class changes to 3 @test inputs.s.chp.min_allowable_kw ≈ 125.0 atol=0.1 - @test inputs.s.chp.om_cost_per_kwh ≈ 0.021 atol=0.0001 + @test inputs.s.chp.om_cost_per_kwh ≈ 0.023 atol=0.0001 #Update CHP prime_mover and test new defaults input_data["CHP"]["prime_mover"] = "combustion_turbine" input_data["CHP"]["size_class"] = 1 @@ -2286,7 +2286,7 @@ else # run HiGHS tests inputs = REoptInputs(s) @test inputs.s.chp.min_allowable_kw ≈ 2000.0 atol=0.1 - @test inputs.s.chp.om_cost_per_kwh ≈ 0.014499999999999999 atol=0.0001 + @test inputs.s.chp.om_cost_per_kwh ≈ 0.014999999999999999 atol=0.0001 total_heating_fuel_load_mmbtu = (sum(inputs.s.space_heating_load.loads_kw) + sum(inputs.s.dhw_load.loads_kw)) / input_data["ExistingBoiler"]["efficiency"] / REopt.KWH_PER_MMBTU @@ -2336,7 +2336,7 @@ else # run HiGHS tests inputs = REoptInputs(s) # Costs are 75% of CHP @test inputs.s.chp.installed_cost_per_kw ≈ (0.75*installed_cost_chp) atol=1.0 - @test inputs.s.chp.om_cost_per_kwh ≈ (0.75*0.0145) atol=0.0001 + @test inputs.s.chp.om_cost_per_kwh ≈ (0.75*0.015) atol=0.0001 @test inputs.s.chp.federal_itc_fraction ≈ 0.0 atol=0.0001 # Thermal efficiency set to zero @test inputs.s.chp.thermal_efficiency_full_load == 0 diff --git a/test/scenarios/chp_payback.json b/test/scenarios/chp_payback.json index 36b096db5..c7125dcf8 100644 --- a/test/scenarios/chp_payback.json +++ b/test/scenarios/chp_payback.json @@ -59,6 +59,8 @@ "can_net_meter": false, "prime_mover": "recip_engine", "size_class": 5, + "installed_cost_per_kw": 2752.9, + "om_cost_per_kwh": 0.016, "min_kw": 1104.0, "min_allowable_kw": 1104.0, "max_kw": 1104.0,