Skip to content

Commit

Permalink
Merge pull request #159 from NREL/changelog
Browse files Browse the repository at this point in the history
## New
Changelog updated 
Establishes formatting guidelines for continued tracking
  • Loading branch information
t-kwasnik authored Jan 4, 2021
2 parents 4d8c158 + 2d56a75 commit d3c493d
Showing 1 changed file with 181 additions and 16 deletions.
197 changes: 181 additions & 16 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,188 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## develop (unreleased) 2020-12-08

### Bug Fixes
- `fuel_used_gal` output for `Generator` was incorrect for scenarios with `time_steps_per_hour != 1`
- `check_common_outputs` was not testing that outputs of type `list` are both `list`s in the expected and calculated outputs

### Changes
- changed `test_flexible_time_steps` to include an outage
- changed check in `validators.py` from "outage_start_hour and outage_end_hour cannot be the same" to "outage_start_hour must be less than outage_end_hour"
- 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.
- new output `bau_sustained_time_steps` to replace deprecated `sustain_hours` (also not deprecated yet but warning is now in response).
- new `dvProductionToCurtail` in reopt.jl 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.
- new inputs for all Techs: `can_net_meter`, `can_wholesale`, `can_export_beyond_site_load`, `can_curtail`
## Guidelines

Use **bold** markup for field and model names (i.e. **outage_start_time_step**)

Use `code` markup for REopt Lite-specific file names, classes and endpoints (i.e `reo/validators.py`)

Use _italic_ for code terms (i.e. _list_)

Prepend change with tag(s) directing where it is in the repository:


`reo`,`proforma`,`resilience_stats`,`*.jl`,`REopt_Lite_API`

Classify the change according to the following categories:

### Major Updates
### Minor Updates
##### Added
##### Changed
##### Fixed
##### Deprecated
##### Removed
### Patches

## develop (unreleased)
### Major Updates
### 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

## First Public Release [1.0.0] - 2020-02-28
### Added
##### Changed
##### 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

- `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
### 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
- `*.jl`Add 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 `REoptError`s 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.

## v1.0.0 - 2020-02-28
### Major
- First release of the REopt API

0 comments on commit d3c493d

Please sign in to comment.