Skip to content

Releases: NREL/REopt_API

v1.2.0 - 2021-01-04

07 Jan 22:56
Compare
Choose a tag to compare

Minor Updates

Added
  • reo: new inputs outage_start_time_step and outage_end_time_step to replace deprecated outage_start_hour and outage_end_hour. The latter are used as time step indices in the code, so for sub-hourly problems they do not have hourly units. For now outage_start_hour and outage_end_hour are kept in place to preserve backwards-compatibility. Also note that the new inputs are not zero-indexed.
  • reo: new output bau_sustained_time_steps to replace deprecated sustain_hours (also not deprecated yet but warning is now in response).
  • *.jl: new dvProductionToCurtail for all techs in all time steps (was previously construed with dvProductionToGrid for the third sales tier, which is meant for selling energy back to the grid beyond the annual load kWh constraint.)
  • reo: new inputs for all Techs: can_net_meter, can_wholesale, can_export_beyond_site_load, can_curtail
    • the first three correspond to the previous SalesTiers, now called ExportTiers
    • reduces the problem size in many cases since the previous model always included all three SalesTiers in every scenario and the new model only includes ExportTiers with non-zero compensation when there are Technologies that can participate
Changed
  • resilience_stats: Calculate avoided_outage_costs_us_dollars from the outagesimjob endpoint
Fixed
Deprecated
  • reo: LoadProfile outage_start_hour and outage_end_hour in favor of outage_start_time_step and outage_end_time_step
  • reo: LoadProfile sustain_hours in favor of bau_sustained_time_steps
Removed

Patches

  • resilience_stats: Catch BAU cases and do not calculate avoided outage costs
  • summary: Catch jobs that errored out and do not parse results
  • reo: Catch PVWattsDownloadError when a bad response is received
  • reo: fuel_used_gal output for Generator was incorrect for scenarios with time_steps_per_hour not equal to 1

v1.1.0 - 2020-12-08

04 Jan 18:18
Compare
Choose a tag to compare

Major

Minor

Added
  • reo: Add new Financial outputs :
    • developer_annual_free_cashflow_series_us_dollars
    • offtaker_annual_free_cashflow_series_bau_us_dollars
    • offtaker_annual_free_cashflow_series_us_dollars
    • offtaker_discounted_annual_free_cashflow_series_bau_us_dollars
    • offtaker_discounted_annual_free_cashflow_series_us_dollars
  • reo: New capability to model a rolling lookback if URDB lookbackRange is non-zero
  • reo: Add a new third-party financing output:
    • net_present_cost_us_dollars
  • reo: New Wind curtailment output
    • year_one_curtailed_production_series_kw
  • reo: Emissions factor series added for ElecticTariff (defaults to AVERT regional data) and Generator:
    • emissions_factor_series_lb_CO2_per_kwh
    • emissions_factor_lb_CO2_per_gal
  • reo/proforma: ElectricTariff, Generator and Site year 1 emissions totals as new outputs from API and in Proform
    • emissions_region (Site Only)
    • year_one_emissions_lb_C02
    • year_one_emissions_bau_lb_C02
  • reo: LCOE API output added for PV and Wind:
    • lcoe_us_dollars_per_kwh
  • reo: Simple Payback/IRR API outputs added for Site:
    • irr_pct
    • simple_payback_years
  • reo: New total storage rebates ($/kWh) Storage input:
    • total_rebate_us_dollars_per_kwh
  • proforma: PV LCOE, Wind LCOE, Host Present Worth Factor, Developer Present Worth Factor, PV Energy Levelization Factor, and Simple Payback added
  • *.jlAdd new constraint that sets dvGridToStorage to zero for all grid connected time steps when Storage.canGridCharge is false
  • reo: Add hybrid load profile option. New LoadProfile inputs:
    • percent_share
    • doe_reference_name (now a str or lis of str)
  • reo: Add PV curtailment output:
    • year_one_curtailed_production_series_kw
  • proforma: Two proforma templates, now with 3 tabs instead of 2.
    [1] one party: separate optimal and BAU cash flows
    [2] two party: separate developer and host cash flows (showing capital recovery factor and developer IRR ).
  • reo: New output for year 1 existing PV production
    • average_yearly_energy_produced_bau_kwh
  • reo: Add inputs to ElectricTariff to handle custom TOU energy rates (1-hr or 15-min resolutions):
    • add_tou_energy_rates_to_urdb_rate
    • tou_energy_rates_us_dollars_per_kwh
  • reo: Handle multiple PV systems by including a list of PV dictionaries instead of a single dictionary. New PV inputs include:
    • pv_name
    • pv_number
    • location
  • reo: New custom production factor inputs for PV and Wind:
    • prod_factor_series_kw
  • reo: Three new Financial outputs:
    • initial_capital_costs
    • initial_capital_costs_after_incentives
    • replacement_costs
  • resilience_stats: New financial_check endpoint
Changed
  • reo: Remove third-party factor from initial_capital_costs_after_incentives output
  • reo/proforma: Renames two party to third-party throughout the code
  • reo: When the wholesale rate is zero, all excess production is forced into curtailment bin by setting the wholesale rate to -1,000 $/kWh
  • resilience_stats: New post-and-poll process for resilience stats and removal of avoided_outage_costs_us_dollars calculation from results endpoint

    Note in the future this kind of change will be classified as major
  • *.jl: reverted export rate inputs to negative values (to match legacy conventions)
  • reo: Enables existing diesel generator in the financial case outage simulation
Fixed
  • reo: Developer generator OM costs now based on new capacity only in API-side calculations to match Proforma spreadsheet (could results in different API-reported NPV)
  • resilience_stats: Bug fix PV was not contributing to sustaining outage in the BAU case
  • reo: In non-third party cases the owner tax and discount percents were not saved to the database resulting in inaccurate after-incentive cost calculations in the web UI
  • *.jl: Wind dispatch fixes in julia code - including hooking up missing outputs
  • *.jl: Load balances constraints fixed in julia code
  • proforma: Addressed bugs, including:
    • Removed energy generation values from cash flow sheets
    • Added Generator fixed O&M cost outputs (was not accounted for in proforma)
    • Upfront capex was wrong with existing kw and no optimal kw
    • Removed PV degradation from other techs' annual production
    • Escalation and discount rates were applied incorrectly (off by one year)
    • O&M costs were double accounted, once with tax benefit, once without
    • Total installed costs was calculated incorrectly
    • Wind and Storage bonus fraction cell references were switched with each other in proforma_generator
    • Corrected PV PBI calcultion using new existing PV production output
Deprecated
Removed

Patches

  • reo: Catch and flag NaN input parameters
  • *.jl: Update Xpress.jl to v0.12 (should fix the OOM issues with celery workers)
  • reo: Set new cap on tax rates to avoid a divide by zero in results processing and the proforma
  • *.jl: fix OutOfMemory error in docker containers when building constraints in models that have more than one time step per hour
  • reo: Fix divide by 0 error in BAU outage sim job code when no existing PV
  • reo: Fix simple_payback_years and irr_pct calcs in reo/process_results.py
  • reo: Fix bug in upfront_capex_after_incentives
  • reo: Scenario.py was checking for wrong message in exception and raising UnexpectedError instead of WindDownloadError
  • *.jl: Diesel fuel costs were indexed on electric tariff tiers, which was necessary before the reformulation, but now leads to an index error in the JuMP model.
  • reo: Addresses multiple pvs and a division by 0 case in outage simulator inputs
  • reo: Report NaN IRR values as null
  • reo: Require energyratestructure, energyweekendschedule and energyweekdayschedule in a URDB rate; added new checking of URDB float fields
  • proforma: Fix bug when year_one_export_benefit_bau_us_dollars or year_one_export_benefit_us_dollars is null
  • reo: Updated handling of cases where outagesim results are not ready
  • *.jl: DER export to grid (in NEM and wholesale SalesTiers) was not set to zero during TimeStepsWithoutGrid.
  • reo: Run scenarios through reopt.jl to get the code precompiled in system images
  • reo: Fixes generator power output bug in resilience check
  • resilience_stats: Catches case where the same outagesim job is submitted twice
  • resilience_stats: Replaces JsonResponse with ImmediateHttpResponse for errors in outagesimjob workflow
  • reo: Bug fix to enable battery dispatch results to be returned
  • resilience_stats: When an outagesimjob has already been returned the status code is now 208 (Already Reported) rather than 500
  • reo: Enable rerunning of POSTs (clean up PV and Wind prod factor and all percent_share entries in results response)
  • reo: Uses new Wind Toolkit API URL
  • proforma: Updated storage to read per kW and per kWh incentives
  • proforma: Updated final cashflow to include non-taxed year 0 incentives (CBI and IBI)
  • *.jl: MinChargeAdd in reopt.jl was only accounting for year zero charges (needs to be lifecycle charges)
  • REopt_Lite_API: Use Django version 2.2.13 (had been 2.2.6)
  • reo: Handling the financial scenario's user uploaded critical load series bug
  • reo: Fix bug in URDB parsing timestep for TOU rates
  • reo: Fix bug in error handling for load profiles with negative non-net loads
  • reo: Handle non REoptErrors in scenario.py
  • reo: results response will not return empty lists in inputs or outputs
  • reo: Use default LoadProfile year of 2017 for all built-in load profiles
  • reo: Set 2019 default year in nested_inputs
  • *.jl: Fix bug where pwf_prod_incent was accounting for the discount rate and LevelizationFactorProdIncent was accounting for production degradation
  • reo: Upgrade to URDB 7, maintain backwards compatibility
  • resilience_stats: New resilience stats and financial metrics added to user summary endpoint
  • reo: More informative PVWatts error when site it too far away
  • reo/resilience_stats: Fix bug where simulated_load endpoint was not handling monthly_totals_kwh
  • reo: Fix bug where Wind was not constrained based on land_acres
  • resilience_stats: Fix resilience stastics bugs including:
    • mis-scaling the existing PV production
    • resilience_stats was returning 8759 hours survived when critical load was met for entire year
    • resilience_stats battery model was assuming that inverter was DC capacity, but inverter is AC capacity
    • the monthly and hourly survival probabilities were being returned as 1 when there was zero probability
  • *.jl: Upgrade psutil from 4.3.1 to 5.6.6.

REopt Lite API OpenSource - Release v1.0.0

28 Feb 17:52
Compare
Choose a tag to compare

This is the first open-source release of REopt™ Lite API. The REopt™ Lite model in this repository is a free and an active development version of the REopt™ Lite API that does behind-the-meter energy optimization for design and dispatch of various Distributed Energy Resources.

Technologies included in this version are: 1. PV, 2. Wind, 3. Storage, 4. Conventional Generator
Type of loads: electrical
Types of analyses: 1. Financial (life cycle cost minimization), 2. Resilience (with the constraint of meeting critical load using on-site DERs for a specified outage with the objective of minimizing the life cycle cost).