Skip to content

GenX.jl v0.4.0

Latest
Compare
Choose a tag to compare
@sambuddhac sambuddhac released this 07 May 14:33
62c0c0c

Note: user guide "Porting a module from GenX v0.3.6 to GenX v0.4.0" available at this link.

What's Changed

This present version of GenX.jl through this new release introduces a few new modules and technologies. It also introduces a new version of the folder structure for case studies and a reformatted version of the input files for demand, reserves and resources. The documentation pages have also been updated to reflect these new changes as well as we have a much more logically consistent and user-friendly structure of organization of the documentation pages. We hope, this will cater better and more effectively, all kinds of users, whether developers/contributors, or energy modelers.

Added

  • Feature CO2 and fuel module (#536)
    Adds a fuel module which enables modeling of fuel usage via (1) a constant heat rate and (2)
    piecewise-linear approximation of heat rate curves.
    Adds a CO2 module that determines the CO2 emissions based on fuel consumption, CO2 capture
    fraction, and whether the feedstock is biomass.
  • Enable thermal power plants to burn multiple fuels (#586)
  • Feature electrolysis basic (#525)
    Adds hydrogen electrolyzer model which enables the addition of hydrogen electrolyzer
    demands along with optional clean supply constraints.
  • Add ability of storage to contribute to capacity reserves (#475)
  • Add Co-located VRE+Storage Module (#523)
  • Add output for dual of capacity constraint (#473)
  • Add PR template (#516)
  • Validation ensures that resource flags (THERM, HYDRO, LDS etc) are self-consistent (#513).
  • Maintenance formulation for thermal-commit plants (#556).
  • Add new tests for GenX: three-zone, multi-stage, electrolyzer, VRE+storage,
    piecewise_fuel+CO2, and TDR (#563 and #578).
  • Added a DC OPF method (#543) to calculate power flows across all lines
  • Added write_operating_reserve_price_revenue.jl to compute annual operating reserve and regulation revenue.
    and added the operating reserve and regulation revenue to net revenue (#611)
  • Add functions to compute conflicting constraints when model is infeasible if supported by the solver (#624).
  • New settings parameter, VirtualChargeDischargeCost to test script and VREStor example case. The PR 608 attempts to
    introduce this parameter as cost of virtual charging and discharging to avoid unusual results (#608).
  • New settings parameter, StorageVirtualDischarge, to turn storage virtual charging and discharging off if desired by the user (#638).
  • Add module to retrofit existing resources with new technologies (#600).
  • Formatted the code and added a format check to the CI pipeline (#673).
  • Add check when capital recovery period is zero and investment costs are non-zero in multi-stage GenX (#666)
  • Added condition number scaling added to objective function (#667)
  • Added versioned doc-pages for v0.3.6 and v0.4.0
  • Added a warning message in write_costs_multistage mentioning the approximate value of costs currently. (#680)

Fixed

  • Reserves have been renamed as OperationReserves in order to distinguish it from Capacity Reserve Margin (#641)
  • Generators_data.csv is not split into multiple different input files grouped together according to different resources (#612)
  • Assign correct investment cost per stage in objective function initialization for multi-stage runs (#530)
  • Fix name of Fixed_OM_Cost_Charge_per_MWyr when reading from Generators_data in multistage code. (#533)
    Previously there was a typo in this in the multistage code that led to a silent bug, which affects outputs,
    for anyone running non-myopic multistage GenX with asymmetric storage.
  • Fix computation of cumulative minimum capacity retirements in multistage GenX (#514)
  • Fix access of eELOSSByZone expr before initialization (#541)
  • Correctly write unmet reserves (in reg_dn.csv) (#575)
  • Correctly scale total reserves column (in reg_dn.csv) (#594)
  • Add validation for Reg_Max and Rsv_Max columns in Generators_data.csv when MUST_RUN is set to 1 (#576)
  • Fix scaling of transmission losses in write_transmission_losses.jl (#621)
  • Fix cost assignment to virtual storage charge/discharge - issue #604 (#608)
  • Fix modeling of hydro reservoir with long duration storage (#572).
  • Fix update of starting transmission capacity in multistage GenX
  • Fix write_status with UCommit = WriteShadowPrices = 1 (#645)
  • Fixed outputting capital recovery cost to 0 if the remaining number of years is 0 (#666)
  • Updated the docstring for the initialize_cost_to_go function and adjusted the formula for the discount factor to reflect the code
    implementation (#672).
  • Fix write_multi_stage_cost.jl: add discount with OPEX multipliers to cUnmetPolicyPenalty (#679)
  • Fix DF calculation in DDP to make it more generic for variable length stages (#680)
  • Fix write_power_balance.jl: add additional two columns ("VRE_Storage_Discharge" and "VRE_Storage_Charge") for VRE_STOR

Changed

  • Use add_to_expression! instead of the += and -= operators for memory performance improvements (#498).
  • Generally, 'demand' is now used where (electrical) 'load' was used previously (#397).
  • Load_data.csv is being renamed to Demand_data.csv. (#397)
  • Load_MW_z* columns in that file are renamed to Demand_MW_z*. (#397)
  • In Reserves.csv, Reg_Req_Percent_Load and Rsv_Req_Percent_Load are renamed to ..._Demand. (#397)
  • Load and LoadWeight keys in the time_domain_reduction_settings.yml file are renamed to Demand, DemandWeight. (#397)
  • The New_Build column in Generators_data.csv has been separated into two: New_Build and Can_Retire (#392).
    Values in each column are {0,1}.
  • Separate proprietary JuMP solvers from the GenX package.
    This allows users of Gurobi or CPLEX to use them without modifying
    the source code of the GenX package directly. This is a key step in publishing
    GenX as a proper Julia package. This does require change to the Run.jl files,
    to specify the solver. (#531)
  • In the examples, change Reg_Max and Rsv_Max of any MUST_RUN generators to 0.
    This mitigates but does not fully fix (#576).
  • Expressions of virtual charging and discharging costs in storage_all.jl and vre_stor.jl
  • The input file Generators_data.csv has been split into different files, one for each type of generator.
    The new files are: Thermal.csv, Hydro.csv, Vre.csv, Storage.csv, Flex_demand.csv, Must_run.csv,
    Electrolyzer.csv, and Vre_stor.csv. The examples have been updated, and new tests have been added to
    check the new data format (#612).
  • The settings parameter Reserves has been renamed to OperationalReserves, Reserves.csv to
    Operational_reserves.csv, and the .jl files contain the word reserves have been renamed to
    operational_reserves (#641).
  • New folder structure for a GenX case. The input files are now organized in the following folders: settings,
    policies, resources and system. The examples and tests have been updated to reflect this change.
  • New folder structure implemented for example_system. This folder now consists of nine separate folders each pertaining to a different
    case study example, ranging from the ISONE three zones, with singlestage, multistage, electrolyzers, all the way to the 9 bus IEEE
    case for running DC-OPF.
  • Pruned HiGHS solver settings to the necessary minimum (#668)
  • Changed deploydoc URL to GenX.jl (#662)

Deprecated

  • The above load keys, which generally refer to electrical demand, are being deprecated.
    Users should update their case files.
    For now this is done in a backward-compatible manner, and @info reminders are written to the log to prompt the user to update.
    "Load" now typically refers only to the transferrence of data from files to memory,
    except for a few places such as the common term "value of lost load" which refers to non-served demand (#397).
  • New_Build = -1 in Generators_data.csv: instead, use New_Build = 0 and Can_Retire = 0.
  • The matrix-style input of the grid for Network.csv is deprecated in favor a column-style input.
    Instead of columns z1, z2, ... with entries -1, 0, 1, use two columns: Start_Zone, End_Zone (#591).

Full Changelog: v0.3.6...v0.4.0-rc

Full List of Changes from GenX v0.3.6 to prerelease v0.4.0-rc

New Contributors

Full Changelog: v0.3.7...v0.4.0

Full List of Changes from GenX v0.3.7 to v0.4.0

New Contributors

Full Changelog: v0.3.7...v0.4.0