Skip to content

Commit

Permalink
Merge pull request #510 from PyPSA/develop
Browse files Browse the repository at this point in the history
v0.5.0
  • Loading branch information
ktehranchi authored Jan 9, 2025
2 parents f4b0294 + 0c5d633 commit 393f6c8
Show file tree
Hide file tree
Showing 78 changed files with 9,255 additions and 4,617 deletions.
1 change: 1 addition & 0 deletions docs/source/config-spatial.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
(spatial)=
# Spatial Configuration

## Configuring Spatial Scope
Expand Down
2 changes: 1 addition & 1 deletion docs/source/configtables/opts.csv
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ Trigger, Description, Definition, Status
``SAFE``, Add a capacity reserve margin of a certain fraction above the peak demand to which renewable generators and storage do *not* contribute. Ignores network., ``solve_network`` `add_opts_constraints() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/solve_network.py#L73>`__,In active use
``SAFER``,Adds Regional Capacity Reserve Margin (SAFE) Constraints for defined region- set to a percentage above peak demand level for which renewables and storage do not contribute to. , ``solve_network``,In active use
``Ep``, Add cost for a carbon-dioxide price configured in ``costs: emission_prices: co2`` to ``marginal_cost`` of generators (other emission types listed in ``network.carriers`` possible as well), ``prepare_network``: `add_emission_prices() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L24>`_ and its `caller <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L158>`__, In active use
``CCL``,Add minimum or maximum levels of generator nominal capacity per carrier for individual countries. Each constraint can be designated for a specified planning horizon in multi-period models. Opts and path for agg_p_nom_minmax.csv must be defined, ``solve_network``, In active use
``TCT``,"Add minimum or maximum levels of generator nominal capacity per carrier(s), per region(s), per investment horizon. Opts and path for technology_capacity_targets.csv must be defined", ``solve_network``, In active use
``CH4L``,"Add an overall absolute gas limit. If configured in ``electricity: gaslimit`` it is given in MWh thermal, if a float is appended, the overall gaslimit is assumed to be given in TWh thermal (e.g. ``CH4L200`` limits gas dispatch to 200 TWh termal)", ``prepare_network``: ``add_gaslimit()``, In active use
34 changes: 15 additions & 19 deletions docs/source/data-costs.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,30 @@
# Costs
## Costs and Candidate Resources

In PyPSA-USA, candidate resource forecasted capital and operating costs are defined by the NREL Annual Technology Baseline (ATB) accessed through the PUDL project.
In PyPSA-USA, candidate resource forecasted capital and operating costs are defined by the NREL Annual Technology Baseline (ATB) accessed through the PUDL project. The model currently uses the 2024 ATB which provides data for expected costs across the years 2025 - 2050. Users are able to configure which ATB model case and scenario to reference:

### Implemented Candidate Resources
```yaml
atb:
model_case: "Market" # Market, R&D
scenario: "Moderate" # Advanced, Conservative, Moderate
```
PyPSA-USA includes a variety of candidate resources, each with specific parameters:
To reflect regional differences, capital costs are adjusted using [EIA state-level CapEx multipliers](https://www.eia.gov/analysis/studies/powerplants/capitalcost/pdf/capital_cost_AEO2020.pdf).
### Candidate Resources
- **Coal Plants**: With and without Carbon Capture Storage (CCS) at 95% and 99% capture rates.
- **Natural Gas**: Combustion Turbines and Combined Cycle plants, with and without 95% CCS.
- **Nuclear Reactors**: Small and Large Nuclear Reactors
- **Hydrogen Combustion Turbines**: Hydrogen Combusion Turbines are implemented under the assumption of market-available hydrogen drop-in fuel. Following the default assumptions in the [ReEDS Hydrogen implementation](https://nrel.github.io/ReEDS-2.0/model_documentation.html#drop-in-renewable-fuel). This implementation does not account for the energy or costs required to produce or transport the fuel. Future work will implement a more detailed production, transport, and storage model of hydrogen.
- **Nuclear Reactors**: Large Nuclear Reactors (AP1000) and Small Modular Reactors
- **Renewable Energy**: Utility-scale onshore wind, fixed-bottom and floating offshore wind, utility-scale solar.
- **Energy Storage**: 2-10 hour Battery Energy Storage Systems (BESS).
- **Pumped Hydro Storage (PHS)**: A method of storing energy by moving water between reservoirs at different elevations.

### Cost Parameters

The model uses forecasted data from the NREL ATB for:

- **Capital Expenditure (CapEx)**
- **Operations and Maintenance (O&M) Costs**
- **Capital Recovery Periods**
- **Fuel Efficiencies**
- **Weighted Average Cost of Capital (WACC)**

To reflect regional differences, capital costs are adjusted using [EIA state-level CapEx multipliers](https://www.eia.gov/analysis/studies/powerplants/capitalcost/pdf/capital_cost_AEO2020.pdf).
- **Battery Energy Storage**: 2-10 hour Battery Energy Storage Systems (BESS).
- **Pumped Hydro Storage (PHS)**: Supply curves for 8-12 hour PHS are integrated from the [NREL Closed-Loop PHS dataset](https://www2.nrel.gov/gis/psh-supply-curves).
- **Enhanced Geothermal Systems (EGS**): Methods for implementation will be released in a forthcoming paper.
## Fuel Costs
PyPSA-USA integrates fuel costs that varry across spatial scopes and temporal scales. For more information, see [here](./data-generators.md#fuel-costs)
PyPSA-USA integrates fuel costs that varry across spatial scopes and temporal scales. For more information, see [here](./data-generators.md#fuel-costs-and-heat-rates)
## Sector Costs
Expand Down
65 changes: 33 additions & 32 deletions docs/source/data-generators.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,19 @@
(data-generators)=
# Generators
# Generators & Storage Units

PyPSA-USA utilizes the [Public Utility Data Liberation (PUDL)](https://catalystcoop-pudl.readthedocs.io/en/latest/index.html) project database as the core source for generator and storage device data. The PUDL database aggregates and cleans data from various agencies, including the Energy Information Agency (EIA), Federal Energy Regulatory Commission (FERC), and the National Renewable Energy Laboratory (NREL). This integration supports reproducibility and ensures continuity as new reports are released.
PyPSA-USA utilizes the [Public Utility Data Liberation (PUDL)](https://catalystcoop-pudl.readthedocs.io/en/latest/index.html) project database as the core source for generator and storage device data. The PUDL database aggregates and cleans data from various agencies, including the Energy Information Agency (EIA), Federal Energy Regulatory Commission (FERC), and the National Renewable Energy Laboratory (NREL). This integration supports reproducibility and ensures continuity as new reports are released. The PUDL data is supplemented with data from the WECC Anchor Data Set (ADS) as well as the EIA API.

## Generator Data Integration
## Modeling Generators and Energy Storage

PyPSA-USA integrates unit-level generator data from PUDL, which includes:
PyPSA-USA provides unit-level generator data on unit level Heat Rates, plant fuel costs seasonal derating, power and energy capacities, fuel types, and more. While generator data is input at a EIA unit-level, the model clusters generators by their technology type (named `carrier`) to reduce the computational cost of optimization models. PyPSA-USA generators are clustered to Combined-Cycle Gas Turbines (CCGT), Open-Cycle Gas Turbines (OCGT), coal, CCGTs with Carbon Capture and Storage (CCS), coal with CCS, oil, Hydrogen Combustion Turbines, Nuclear (large-scale AP1000), Small Modular Reactor Nuclear, biomass, traditional geothermal, waste, hydro, utility-scale solar, onshore wind, fixed-bottom offshore wind, floating offshore wind, and Enhanced Geothermal Systems (EGS). Storage Units include Li-ion battery energy storage systems (2-10 hour storage capacity) and Pumped-Hydro Storage (8-12 hour storage capacity). Users have control over the clustering settings using the configuration settings described in the [configuration section](./config-configuration.md)

- **Heat Rates**
- **Plant Fuel Costs**
- **Seasonal Derating**
- **Power and Energy Capacities**
- **Fuel type and historical Costs**
## Fuel Costs and Heat-rates

## Thermal Unit Commitment and Ramping Constraints

To model thermal unit commitment and ramping constraints, data from the WECC Anchor Data Set (ADS) is incorporated. This dataset is used by transmission and system planners across the WECC region and includes:

- **Start-up and Shut-down Costs**
- **Minimum Up and Down Time**
- **Ramping Limits**

For plants outside the WECC, and for internal plants missing data, PyPSA-USA imputes values using capacity-weighted averages by technology type.

## Renewable Resource Constraints

Renewable resources like solar and wind are constrained by technical capacity limits based on land-use and resource characteristics. These limits are calculated using various land-use layers that progressively reduce the land available for resource development.

- **Solar and Wind Capacity Limits**: Determined by multiple land-use layers.
- **Geothermal and Pumped Hydro Storage (PHS)**: These resources require more complex modeling due to subsurface and surface characteristics. Regional supply curves for these resources, including capital costs and technical capacity, are incorporated from specialized datasets.
- **PHS**: Uses data from the NREL Closed-Loop PHS dataset.
- **Geothermal Resources**: Availability data is sourced from FGEM, with further details to be provided in a forthcoming paper.

## Fuel Costs

In production cost-minimizing optimization models, a generator’s marginal cost to produce electricity is a primary driver of dispatch decisions and electricity prices. However, generator fuel prices and efficiencies are not uniformly available across the United States, and generators often enter into bilateral contracts that are not directly correlated with wholesale fuel prices. To address these challenges, PyPSA-USA integrates fuel prices and unit-level fuel costs across varying spatial scopes and temporal scales.
In production cost-minimizing optimization models, a generator’s marginal cost to produce electricity is a primary driver of dispatch decisions and electricity prices. However, generator fuel prices and efficiencies are not uniformly available across the United States, and generators often enter into bilateral contracts that are not directly correlated with wholesale fuel prices. To address these challenges, PyPSA-USA provides a few options for the source of generator fuel prices, Generator heat-rates are also assimilated from multiple data-sources by selecting the highest-quality available data-source for a given generation unit before falling-back to coarser data.

- **Fuel Price Integration**:
- Fuel prices are collected and overlaid to select the highest resolution available, defaulting to coarser data if necessary.
- Single-point unit-level generator fuel efficiencies are sourced from a CEMS-based dataset (D. Suri et. al.) (citation inbound).
- Single-point unit-level generator fuel efficiencies are sourced from a CEMS-based dataset [D. Suri et. al.](https://arxiv.org/pdf/2408.05209).
- Monthly unit-level fuel prices and additional plant efficiencies are collected via PUDL EIA-923.

- **Data Imputation**:
Expand All @@ -50,10 +25,36 @@ In production cost-minimizing optimization models, a generator’s marginal cost
- **Future Fuel Costs**:
- Forecasted annual fuel prices are imported from the EIA's Annual Energy Outlook (AEO).

## Renewable Resources

**Solar & Wind Profiles**

PyPSA-USA leverages the Atlite tool to provide access to decades of weather data with varying spatial resolutions. Atlite is used to estimate hourly renewable resource availability across the United States, typically at a spatial resolution of 30 km² cells. Within PyPSA-USA, users can configure:

- **Weather Year**
- **Turbine Type**
- **Solar Array Type**
- **Land-Use Parameters**
- **Availability Simulation Parameters**

The hourly renewable capacity factors calculated by Atlite are weighted based on land-use availability factors. This ensures that areas unsuitable for specific technology types do not disproportionately affect the renewable resource capacity assigned to each node. These weighted capacity factors are aggregated into 41,564 distinct zones across the United States. These zones are then clustered using one of the clustering algorithms developed for PyPSA-Eur.

**Enhanced Geothermal (EGS) and Pumped Hydro Storage (PHS)**: These resources require more complex modeling due to subsurface and surface characteristics. Regional supply curves for these resources, including capital costs and technical capacity, are incorporated from specialized datasets.
- **PHS**: Uses data from the [NREL Closed-Loop PHS dataset](https://www2.nrel.gov/gis/psh-supply-curves).
- **EGS**: Availability data is sourced from [FGEM](https://fgem.readthedocs.io/en/latest/), with further details to be provided in a forthcoming paper.


# Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/generators.csv
```
Renewables Data:
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/renewables.csv
```
41 changes: 0 additions & 41 deletions docs/source/data-renewables.md

This file was deleted.

5 changes: 5 additions & 0 deletions docs/source/data-transmission.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ While representative of the US electricity system, the TAMU network is synthetic
![TAMU_clustered](./_static/networks/TAMU_Clustered_500.png)



```{info}
See the [Spatial Configuration](./config-spatial.md) page for information on how to choose between networks.
```

(transmission-data)=
### Data
```{eval-rst}
Expand Down
19 changes: 19 additions & 0 deletions docs/source/datatables/sector_natural_gas.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Configuration Option,Configuration Value ,Description,Constraint ,Applied to
``import.min``,0,No import requirement,Σ(p) >= 0,S2 S1 gas trade
,0.5,Import at least half of historical year value ,Σ(p) >= 5000,S2 S1 gas trade
,1,Import at least half of historical year value ,Σ(p) >= 10000,S2 S1 gas trade
,2,Import at least double the historical year value ,Σ(p) >= 20000,S2 S1 gas trade
``import.max``,0,No imports allowed,Σ(p) <= 0,S2 S1 gas trade
,0.5,Import up to half of historical year value ,Σ(p) <= 5000,S2 S1 gas trade
,1,Import up to the full historical year value ,Σ(p) <= 10000,S2 S1 gas trade
,2,Import up to double the historical year value ,Σ(p) <= 20000,S2 S1 gas trade
,inf,Unlimited Imports ,No constraint added,S2 S1 gas trade
``export.min``,0,No exports requirement,Σ(p) >= 0,S1 S2 gas trade
,0.5,Export at least half of historical year value ,Σ(p) >= 5000,S1 S2 gas trade
,1,Export at least half of historical year value ,Σ(p) >= 10000,S1 S2 gas trade
,2,Export at least double the historical year value ,Σ(p) >= 20000,S1 S2 gas trade
``export.max``,0,No exports allowed,Σ(p) <= 0,S1 S2 gas trade
,0.5,Export up to half of historical year value ,Σ(p) <= 5000,S1 S2 gas trade
,1,Exportup to the historical year value ,Σ(p) <= 10000,S1 S2 gas trade
,2,Export up to double the historical year value ,Σ(p) <= 20000,S1 S2 gas trade
,inf,Unlimited Export ,No constraint added,S1 S2 gas trade
1 change: 0 additions & 1 deletion docs/source/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ about-usage
data-transmission
data-demand
data-generators
data-renewables
data-costs
data-policies
data-sectors
Expand Down
Loading

0 comments on commit 393f6c8

Please sign in to comment.