Releases: NREL/REopt.jl
Releases · NREL/REopt.jl
v0.31.0
Add gen HHV input, few bug fixes
What's Changed
- Fix bug causing ERP API to not work with CHP/prime gen by @hdunham in #208
- Input descriptions and small bug fixes by @adfarth in #206
- Make generator higher heating value an input by @hdunham in #209
- Add gen HHV, ERP bug fix, add to input descriptions, fix batt_roundtrip_efficiency calculation, push! not append() array in cost_curve.jl by @hdunham in #211
Full Changelog: v0.29.0...v0.30.0
Stochastic/Multi-Outages: add CHP, modify outputs; CHP fixes
What's Changed
- Make outages output names not dynamic, add units to outages results, microgrid_upgrade_cost_fraction default to 0 by @hdunham in #202
- Add CHP to stochastic/multi- outages, some CHP tweaks for UI V3 by @Bill-Becker in #201
- Stochastic/Mulit-Outages: add CHP, modify outputs. Also CHP fixes. by @Bill-Becker in #205
Full Changelog: v0.28.1...v0.29.0
v0.29.0
Added
- Add
CHP
FuelUsed
andFuelCost
modeling/tracking for stochastic/multi-outages - Add
CHP
outputs for stochastic/multi-outages
Changed
- Made outages output names not dynamic to allow integration into API
- Add missing units to outages results field names: unserved_load_series_kw, unserved_load_per_outage_kwh, generator_fuel_used_per_outage_gal
- Default
Financial
field microgrid_upgrade_cost_fraction to 0 - Add conditional logic to make
CHP.min_allowable_kw
25% ofmax_kw
if there is a conflicting relationship - Iterate on calculating
CHP
heuristic size based on average heating load which is also used to setmax_kw
if not given: oncesize_class
is determined, recalculate using the efficiency numbers for thatsize_class
.
Fixed
- Fix non-handling of cost-curve/segmented techs in stochastic outages
- Fix issues with
simulated_load.jl
monthly heating energy input to return the heating load profile
Add emissions_profile function for API endpoint
What's Changed
- allow for creation of emissions_profile endpoint in API by @hdunham in #183
- emissions_profile function by @Bill-Becker in #200
Full Changelog: v0.28.0...v0.28.1
v0.28.1
Added
emissions_profiles
function, exported for external use as an endpoint in REopt_API for the webtool/UI
CHP class size and financial input output updates
Changed
- Changed Financial breakeven_cost_of_emissions_reduction_per_tonnes_CO2 to breakeven_cost_of_emissions_reduction_per_tonne_CO2
- Changed
CHP.size_class
to start at 0 instead of 1, consistent with the API, and 0 represents the average of allsize_class
s - Change
CHP.max_kw
to be based on either the heuristic sizing from average heating load (if heating) or peak electric load (if no heating, aka Prime Generator in the UI)- The "big_number" for
max_kw
was causing the model to take forever to solve and some erroneous behavior; this is also consistent with the API to limit max_kw to a reasonable number
- The "big_number" for
Added
- Added previously missing Financial BAU outputs: lifecycle_om_costs_before_tax, lifecycle_om_costs_after_tax, year_one_om_costs_before_tax
Fixed
- Fixed if statement to determing ElectricLoad "year" from && to ||, so that defaults to 2017 if any CRB input is used
Energy Resilience and Performance Tool
Added
- Energy Resilience Performance tool: capability to model limited reliability of backup generators and RE, and calculate survival probability metrics during power outages for a DER scenario
- Exported
backup_reliability
function to run the reliability based calculations
Changed
- Changed
Generator
inputs fuel_slope_gal_per_kwh and fuel_intercept_gal_per_hr to electric_efficiency_full_load and electric_efficiency_half_load to represent the same fuel burn curve in a different way consistent withCHP
Feb 2023 Updates
What's Changed
- Update descriptions and fix missing Bau result by @adfarth in #173
- Wind acres by @adfarth in #181
- GHP fixes and for adding to API V3 by @Bill-Becker in #186
- ThermalStorage Update to Water Property with CoolProp and Round Size by @Bill-Becker in #162
- bugfix: add time series thermal loads to API type conversions, rm extra field in absorption chiller defaults by @zolanaj in #189
- Outage bug fix by @rathod-b in #190
- Fix proforma metrics by @Bill-Becker in #193
- Updates Feb 2023 by @Bill-Becker in #191
Full Changelog: v0.25.0...v0.26.0
https://github.com/NREL/REopt.jl/blob/master/CHANGELOG.md
v0.26.0
Added
- Added
has_stacktrace
boolean which is returned with error messages and indicates if error is of type which contains stacktrace - Constraint on wind sizing based on Site.land_acres
- New Wind input acres_per_kw, defaults to 0.03
- Descriptions/help text for many inputs and outputs
- Add and modify the
GHP
results to align with the existing/expected results from the v2 REopt_API - Add
CSV
andDataFrames
packages to REopt.jl dependencies
Changed
- Update REopt.jl environment to Julia v1.8
- Changed default year in ElectricLoad to be 2017 if using a CRB model and 2022 otherwise.
- Removed default year in URDBrate() functions, since year is always supplied to this function.
- In
scenario.jl
,change heating_thermal_load_reduction_with_ghp_kw
tospace_heating_thermal_load_reduction_with_ghp_kw
to be more explicit - Round Hot and Cold TES size result to 0 digits
- Use CoolProp to get water properties for Hot and Cold TES based on average of temperature inputs
Fixed
Wind
evaluations with BAU - was temporarily broken because of an unconvertedyear_one
->annual
expected name- Fixed calculation of
year_one_coincident_peak_cost_before_tax
in ElectricTariff results to correctly calculate before-tax value. Previously, the after-tax value was being calculated for this field instead. - Fixed
outage_simulator
to work with sub-hourly outage simulation scenarios - Fixed a bug which threw an error when providing time-series thermal load inputs in a scenario inputs .json.
- Fixed calculation of ["Financial"]["lifecycle_om_costs_before_tax_bau"] (was previously showing after tax result)
- Added bau_annual_emissions_tonnes_SO2 to the bau_outputs dict in results.jl and removed duplicate bau_annual_emissions_tonnes_NOx result
Removed
- Removed duplicate thermal_production_hot_water_or_steam field from the absorption chiller defaults response dictionary.
update multiple outage modeling, multi-node MPC, and IRA tax incentives
v0.25.0
Added
- multi-node MPC modeling capability
- more MPC outputs (e.g. Costs, ElectricStorage.to_load_series_kw)
- throw error if outage_durations and outage_probabilities not the same length
- throw error if length of outage_probabilities is >= 1 and sum of outage_probabilities is not equal to 1
- small incentive to minimize unserved load in each outage, not just the max over outage start times (makes expected outage results more realist and fixes same inputs giving different results)
- add
Outages
output generator_fuel_used_per_outage which is the sum over backup generators
Changed
- remove _series from non-timeseries outage output names
- make the use of _ in multiple outages output names consistent
- updates multiple outage test values that changed due to fixing timestep bug
- Updated the following default values:
- PV, Wind, Storage, CHP, GHP, Hot Water Storage, Cold Water Storage, Electric Storage: federal_itc_fraction(PV,Wind, CHP,GHP) and total_itc_fraction(Hot Water Storage, Cold Water Storage, Electric Storage) to 0.3 (30%)
- PV, Wind, Storage, CHP, GHP, Hot Water Storage, Cold Water Storage, Electric Storage: *macrs_bonus_fraction to 0.8 (80%)
- Hot Water Storage and Cold Water Storage: macrs_itc_reduction to 0.5 (50%)
- Hot Water Storage and Cold Water Storage: macrs_option_years to 7 years
Fixed
- PV results for all multi-node scenarios
- MPC objective definition w/o ElectricStorage
- fixed mulitple outages timestep off-by-one bug
Removed
- Wind ITC no longer determined based on size class. Removed all size class dependencies from wind.jl
Output naming changes
v0.24.0
Current behavior
Currently, we use the "year_one" naming convention for many outputs (scalars and time series) that include degradation, making them not a true "year_one" metrics.
We also have some inconsistencies in naming of outputs.
Changes
- Name changes shown in table below
- Generally, changes are for energy outputs (not costs) that include "year_one", and are changed to
annual_
for scalars and toelectric_to_
,thermal_to_
etc. for time series. - Changed
to_tes
andto_battery
outputs toto_storage
for consistency - Included help text to this end in results page for relevant output keys
- Added output: [
CHP
][thermal_production_series_mmbtu_per_hour
] - Removed outputs: [
Wind
][year_one_energy_produced_kwh
] and [Generator
][year_one_energy_produced_kwh
]
Key | SubKey | Series or Total | Cost or Energy | New Name |
---|---|---|---|---|
AbsorptionChiller | year_one_to_tes_series_ton | Series | Energy | thermal_to_storage_series_ton |
year_one_to_load_series_ton | Series | Energy | thermal_to_load_series_ton | |
year_one_thermal_consumption_series_mmbtu_per_hour | Series | Energy | thermal_consumption_series_mmbtu_per_hour | |
year_one_thermal_consumption_mmbtu | Total | Energy | annual_thermal_consumption_mmbtu | |
year_one_thermal_production_tonhour | Total | Energy | annual_thermal_production_tonhour | |
year_one_electric_consumption_series_kw | Series | Energy | electric_consumption_series_kw | |
year_one_electric_consumption_kwh | Total | Energy | annual_electric_consumption_kwh | |
Boiler | year_one_fuel_consumption_series_mmbtu_per_hour | Series | Energy | fuel_consumption_series_mmbtu_per_hour |
year_one_fuel_consumption_mmbtu | Total | Energy | annual_fuel_consumption_mmbtu | |
year_one_thermal_production_series_mmbtu_per_hour | Series | Energy | thermal_production_series_mmbtu_per_hour | |
year_one_thermal_production_mmbtu | Total | Energy | annual_thermal_production_mmbtu | |
year_one_thermal_to_tes_series_mmbtu_per_hour | Series | Energy | thermal_to_storage_series_mmbtu_per_hour | |
year_one_thermal_to_steamturbine_series_mmbtu_per_hour | Series | Energy | thermal_to_steamturbine_series_mmbtu_per_hour | |
year_one_thermal_to_load_series_mmbtu_per_hour | Series | Energy | thermal_to_load_series_mmbtu_per_hour | |
lifecycle_fuel_cost | Total | Cost | lifecycle_fuel_cost_after_tax | |
CHP | year_one_fuel_used_mmbtu | Total | Energy | annual_fuel_consumption_mmbtu |
year_one_electric_energy_produced_kwh | Total | Energy | annual_electric_production_kwh | |
year_one_thermal_energy_produced_mmbtu | Total | Energy | annual_thermal_production_mmbtu | |
year_one_electric_production_series_kw | Series | Energy | electric_production_series_kw | |
year_one_to_grid_series_kw | Series | Energy | electric_to_grid_series_kw | |
year_one_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw | |
year_one_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_thermal_to_tes_series_mmbtu_per_hour | Series | Energy | thermal_to_storage_series_mmbtu_per_hour | |
year_one_thermal_to_waste_series_mmbtu_per_hour | Series | Energy | thermal_curtailed_series_mmbtu_per_hour | |
year_one_thermal_to_load_series_mmbtu_per_hour | Series | Energy | thermal_to_load_series_mmbtu_per_hour | |
year_one_thermal_to_steamturbine_series_mmbtu_per_hour | Series | Energy | thermal_to_steamturbine_series_mmbtu_per_hour | |
add | Total | Energy | thermal_production_series_mmbtu_per_hour | |
year_one_chp_fuel_cost_before_tax | Total | Cost | year_one_fuel_cost_before_tax | |
year_one_chp_standby_cost_before_tax | Total | Cost | year_one_standby_cost_before_tax | |
lifecycle_chp_fuel_cost_after_tax | Total | Cost | lifecycle_fuel_cost_after_tax | |
lifecycle_chp_standby_cost_after_tax | Total | Cost | lifecycle_standby_cost_after_tax | |
ElectricStorage | year_one_soc_series_fraction | Series | Energy | soc_series_fraction |
year_one_to_load_series_kw | Series | Energy | storage_to_load_series_kw | |
ElectricUtility | year_one_energy_supplied_kwh | Total | Energy | annual_energy_supplied_kwh |
year_one_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw | |
year_one_emissions_tonnes_CO2 | Total | Energy | annual_emissions_tonnes_CO2 | |
year_one_emissions_tonnes_NOx | Total | Energy | annual_emissions_tonnes_Nox | |
year_one_emissions_tonnes_SO2 | Total | Energy | annual_emissions_tonnes_SO2 | |
year_one_emissions_tonnes_PM25 | Total | Energy | annual_emissions_tonnes_PM25 | |
ExistingBoiler | year_one_fuel_consumption_series_mmbtu_per_hour | Series | Energy | fuel_consumption_series_mmbtu_per_hour |
year_one_fuel_consumption_mmbtu | Total | Energy | annual_fuel_consumption_mmbtu | |
year_one_thermal_production_series_mmbtu_per_hour | Series | Energy | thermal_production_series_mmbtu_per_hour | |
year_one_thermal_production_mmbtu | Total | Energy | annual_thermal_production_mmbtu | |
year_one_thermal_to_tes_series_mmbtu_per_hour | Series | Energy | thermal_to_storage_series_mmbtu_per_hour | |
year_one_thermal_to_steamturbine_series_mmbtu_per_hour | Series | Energy | thermal_to_steamturbine_series_mmbtu_per_hour | |
year_one_thermal_to_load_series_mmbtu_per_hour | Series | Energy | thermal_to_load_series_mmbtu_per_hour | |
ExistingChiller | year_one_to_tes_series_ton | Series | Energy | thermal_to_storage_series_ton |
year_one_to_load_series_ton | Series | Energy | thermal_to_load_series_ton | |
year_one_electric_consumption_series_kw | Series | Energy | electric_consumption_series_kw | |
year_one_electric_consumption_kwh | Total | Energy | annual_electric_consumption_kwh | |
year_one_thermal_production_tonhour | Total | Energy | annual_thermal_production_tonhour | |
Generator | year_one_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw |
year_one_to_grid_series_kw | Series | Energy | electric_to_grid_series_kw | |
year_one_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_energy_produced_kwh | Total | Energy | Keep as-is for now | |
average_annual_energy_produced_kwh | Total | Energy | annual_energy_produced_kwh | |
average_annual_fuel_used_gal | Total | Energy | annual_fuel_consumption_gal | |
PV | year_one_energy_produced_kwh | Total | Energy | Keep as-is for now |
average_annual_energy_produced_kwh | Total | Energy | annual_energy_produced_kwh | |
year_one_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw | |
year_one_to_grid_series_kw | Series | Energy | electric_to_grid_series_kw | |
year_one_curtailed_production_series_kw | Series | Energy | electric_curtailed_series_kw | |
average_annual_energy_exported_kwh | Total | Energy | annual_energy_exported_kwh | |
Site | year_one_emissions_tonnes_CO2 | Total | Energy | annual_emissions_tonnes_CO2 |
year_one_emissions_tonnes_NOx | Total | Energy | annual_emissions_tonnes_Nox | |
year_one_emissions_tonnes_SO2 | Total | Energy | annual_emissions_tonnes_SO2 | |
year_one_emissions_tonnes_PM25 | Total | Energy | annual_emissions_tonnes_PM25 | |
year_one_emissions_from_fuelburn_tonnes_CO2 | Total | Energy | annual_emissions_from_fuelburn_tonnes_CO2 | |
year_one_emissions_from_fuelburn_tonnes_NOx | Total | Energy | annual_emissions_from_fuelburn_tonnes_NOx | |
year_one_emissions_from_fuelburn_tonnes_SO2 | Total | Energy | annual_emissions_from_fuelburn_tonnes_SO2 | |
year_one_emissions_from_fuelburn_tonnes_PM25 | Total | Energy | annual_emissions_from_fuelburn_tonnes_PM25 | |
SteamTurbine | year_one_thermal_consumption_mmbtu | Total | Energy | annual_thermal_consumption_mmbtu |
year_one_electric_energy_produced_kwh | Total | Energy | annual_electric_production_kwh | |
year_one_thermal_energy_produced_mmbtu | Total | Energy | annual_thermal_production_mmbtu | |
year_one_thermal_consumption_series_mmbtu_per_hour | Series | Energy | thermal_consumption_series_mmbtu_per_hour | |
year_one_electric_production_series_kw | Series | Energy | electric_production_series_kw | |
year_one_electric_to_grid_series_kw | Series | Energy | electric_to_grid_series_kw | |
year_one_electric_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw | |
year_one_electric_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_thermal_to_tes_series_mmbtu_per_hour | Series | Energy | thermal_to_storage_series_mmbtu_per_hour | |
year_one_thermal_to_load_series_mmbtu_per_hour | Series | Energy | thermal_to_load_series_mmbtu_per_hour | |
HotThermalStorage | year_one_soc_series_fraction | Series | Energy | soc_series_fraction |
year_one_to_load_series_mmbtu_per_hour | Series | Energy | storage_to_load_series_mmbtu_per_hour | |
ColdThermalStorage | year_one_soc_series_fraction | Series | Energy | soc_series_fraction |
year_one_to_load_series_ton | Series | Energy | storage_to_load_series_ton | |
Wind | year_one_to_battery_series_kw | Series | Energy | electric_to_storage_series_kw |
year_one_to_grid_series_kw | Series | Energy | electric_to_grid_series_kw | |
average_annual_energy_exported_kwh | Total | Energy | annual_energy_exported_kwh | |
year_one_to_load_series_kw | Series | Energy | electric_to_load_series_kw | |
year_one_energy_produced_kwh | Total | Energy | Keep as-is for now | |
average_annual_energy_produced_kwh | Total | Energy | annual_energy_produced_kwh | |
year_one_curtailed_production_series_kw | Series | Energy | electric_curtailed_series_kw |
Create custom REopt logger, Fix URDB handling
v0.23.0
Added
- Add REoptLogger type of global logger with a standard out to the console and to a dictionary
- Instantiate
logREopt
as the global logger in__init()__
function call as a global variable - Handle Warn or Error logs to save them along with information on where they occurred
- Try-catch
core/reopt.jl -> run_reopt()
functions. Process any errors when catching the error. - Add Warnings and Errors from
logREopt
to results dictionary. If error is unhandled in REopt, include a stacktrace - Add a
status
oferror
to results for consistency - Ensure all error text is returned as strings for proper handling in the API
- Instantiate
- Add
handle_errors(e::E, stacktrace::V) where {E <: Exception, V <: Vector}
andhandle_errors()
tocore/reopt.jl
to include info, warn and errors from REopt input data processing, optimization, and results processing in the returned dictionary. - Tests for user-inputs of
ElectricTariff
demand_lookback_months
anddemand_lookback_range
Changed
core/reopt.jl
added try-catch statements to callhandle_errors()
when there is a REopt error (handled or unhandled) and return it to the requestor/user.
Fixed
- URDB lookback was not incorporated based on the descriptions of how the 3 lookback variables should be entered in the code. Modified
parse_urdb_lookback_charges
function to correct. - TOU demand for 15-min load was only looking at the first 8760 timesteps.
- Tiered energy rates jsons generated by the webtool errored and could not run.
- Aligned lookback parameter names from URDB with API