Skip to content

Commit

Permalink
Merge pull request #406 from PyPSA/develop
Browse files Browse the repository at this point in the history
v0.3.0 Candidate
trevorb1 authored Sep 5, 2024
2 parents 0538dcf + baa2923 commit a056649
Showing 122 changed files with 13,632 additions and 4,273 deletions.
Binary file added docs/source/_static/networks/ReEDS_Topology.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/source/_static/plots/capacity-bar.png
Binary file not shown.
Binary file removed docs/source/_static/plots/capacity-map.png
Binary file not shown.
Binary file removed docs/source/_static/plots/costs-bar.png
Binary file not shown.
Binary file removed docs/source/_static/plots/emissions-area.png
Binary file not shown.
Binary file removed docs/source/_static/plots/emissions-map.png
Binary file not shown.
Binary file removed docs/source/_static/plots/production-area.png
Binary file not shown.
Binary file added docs/source/_static/sectors/service-demand.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
30 changes: 19 additions & 11 deletions docs/source/about-introduction.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,34 @@
(introduction)=
# Introduction

```{warning}
**This model is under active development. If you would like to chat about using the model please don't hesitate to reach out to ktehranchi@stanford.edu and trevor_barnes@sfu.ca for support**
```
PyPSA-USA is an open-source tool that enables you to model and simulate the United States energy system with flexibility.

PyPSA-USA is an open-source energy system dataset of the United States energy system with continental US coverage.
PyPSA-USA offers a versatile toolkit that allows you to customize the **data** for your energy system model with ease. Through a simple configuration file, you can control the spatial, temporal, and operational resolution of your model. Access a range of cleaned and prepared historical and forecasted data to build a model tailored to your needs.

PyPSA-USA provides you with a toolkit to customize the **data** of energy system model with ease. Through configuration file you can control the spatial, temporal, and operational resolution of your energy system model with access to cleaned and prepared historical and forecasted data. This means, you can build a model of **ERCOT, WECC, or the Eastern interconnection**, where the transmission network is clustered to **N# of user defined nodes**, which can respect the boundaries of **balancing areas, states, or REeDs GIS Shapes**, using **historical EIA-930 demand data years 2018-2023** OR **NREL EFS forcasted demand [2030, 2040, 2050]**, with **historical daily/monthly fuel prices from ISOs/EIA [choice of year]**, AND imported capital cost projections from the **NREL Annual Technology Baseline**.
Whether you’re focusing on **ERCOT, WECC, or the Eastern Interconnection**, PyPSA-USA gives you the flexibility to:
- Choose between multiple transmission networks.
- Cluster the nodal network a user-defined number of nodes, respecting county lines, balancing areas, states, NERC region boundaries.
- Utilize **historical EIA-930 demand data** (2018-2023) or **NREL EFS forecasted demand** (2030, 2040, 2050).
- Incorporate **historical daily/monthly fuel prices** from ISOs/EIA for your chosen year.
- Import cost projections from the **NREL Annual Technology Baseline** and **Annual Energy Outlook**.

You can create data model- and export to use in your own homebrewed optimization model via csv tables, or xarray netCDF model.
You can create and export data models for use in your own optimization models via CSV tables or xarray netCDF formats.

Beyond creating a data model, PyPSA-USA also provides an interface for running capacity expansion planning and operational simulation models with DC power flow with the Python for Power System Analysis package. You can run expansion planning exercises which integrate regional and national policy constraints like RPS standards, emissions standards, PRMs, and more.
PyPSA-USA also provides an interface for running capacity expansion planning and operational simulation models with the Python for Power System Analysis (pypsa) package. You can run expansion planning exercises which integrate regional and national policy constraints like RPS standards, emissions standards, PRMs, and more.

PyPSA-USA builds on and leverages the work of [PyPSA-EUR](https://pypsa-eur.readthedocs.io/en/latest/index.html) developed by TU Berlin. PyPSA-USA is actively developed by the [INES Research Group](https://ines.stanford.edu) at Stanford University and the [ΔE+ Research Group](https://www.sfu.ca/see/research/delta-e.html) at Simon Fraser University.
PyPSA-USA builds on and leverages the work of [PyPSA-EUR](https://pypsa-eur.readthedocs.io/en/latest/index.html) developed by TU Berlin. It is actively developed by the [INES Research Group](https://ines.stanford.edu) at Stanford University and the [ΔE+ Research Group](https://www.sfu.ca/see/research/delta-e.html) at Simon Fraser University. We welcome contributions and collaborations from the community- please don't hesitate to reach out!

(workflow)=
## Workflow

The diagram below illustrates the workflow of PyPSA-USA, highlighting how the data flows through the model scripts.

![pypsa-usa workflow](https://github.com/PyPSA/pypsa-usa/blob/master/workflow/repo_data/dag.jpg?raw=true)

(folder-structure)=
## Folder Structure

The project is organized based on the folder structure below. The workflow folder contains all data and scripts neccesary to run the pypsa-usa model. After the first time you run the snakemake file, your directory will be built and populated with the associated data. Because most of the files are too large to store on github, we pull data from various sources into the `data` folder. The `repo_data` folder contains smaller files suitable for github. The resources folder contains intermediate files built by snakemake rules through the workflow. You'll see sub-folders created for each interconnection you run the model with.

The envs folder contains the conda env yaml files neccesary to build your mamba/conda environment. The scripts folder contains the individual python scripts that are referenced in the Snakefile rules.
PyPSA-USA is organized to facilitate easy navigation and efficient execution. Below is the folder structure of the project. Each folder serves a specific purpose, from environment setup to data processing and storage. After running the Snakemake file for the first time, your directory will be built and populated with the necessary data files.

```bash
├── .gitignore
@@ -59,3 +62,8 @@ The envs folder contains the conda env yaml files neccesary to build your mamba/
| │ └── example_data.csv
| └── Snakefile
```


```{warning}
**This model is under active development. If you need assistance or would like to discuss using the model, please reach out to ktehranchi@stanford.edu and trevor_barnes@sfu.ca.**
```
3 changes: 2 additions & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@


project = "pypsa-usa"
copyright = "2023, Kamran Tehranchi, Trevor Barnes"
copyright = "2024, Kamran Tehranchi, Trevor Barnes"
author = "Kamran Tehranchi, Trevor Barnes"

# -- General configuration ---------------------------------------------------
@@ -37,6 +37,7 @@
#'rinoh.frontend.sphinx',
"sphinx.ext.imgconverter", # for SVG conversion
]
myst_heading_anchors = 3

templates_path = ["_templates"]
exclude_patterns = []
37 changes: 1 addition & 36 deletions docs/source/config-configuration.md
Original file line number Diff line number Diff line change
@@ -208,42 +208,7 @@ See [here](./config-co2-base.md) for information on interconnect level base emis
``` -->

```{warning}
Sector coupling studies are all under active development
```

```yaml
sector:
co2_sequestration_potential: 0
natural_gas:
allow_imports_exports: true # false to be implemented
cyclic_storage: false
heating:
heat_pump_sink_T: 55.
demand:
profile:
residential: eulp # efs, eulp
commercial: eulp # efs, eulp
transport: efs # efs
industry: efs # efs
scale:
residential: aeo # efs, aeo
commercial: aeo # efs, aeo
transport: aeo # efs, aeo
industry: aeo # efs, aeo
disaggregation:
residential: pop # pop
commercial: pop # pop
transport: pop # pop
industry: pop # pop
scenarios:
aeo: reference
```
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,7,22,33
:file: configtables/sector.csv
Sector coupling studies are all under active development. More info to come!
```


14 changes: 2 additions & 12 deletions docs/source/config-sectors.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@
(sectors)=
# Sectors

```{note}
More information to come!
```

(natural-gas-sector)=
## Natural Gas

Below is a schematic showing the representation of the natural gas network.

```{eval-rst}
.. image:: _static/sectors/natural-gas.png
:scale: 20 %
```{warning}
Sector coupling studies are all under active development. More info to come!
```
15 changes: 5 additions & 10 deletions docs/source/config-wildcards.md
Original file line number Diff line number Diff line change
@@ -26,12 +26,12 @@ A visual representation of each `{interconnect}` is shown below:
:scale: 100 %
```

<!-- (simpl)=
## The ``{simpl}`` wildcard -->
(simpl)=
## The ``{simpl}`` wildcard

<!-- The ``{simpl}`` wildcard specifies number of buses a detailed
The ``{simpl}`` wildcard specifies number of buses a detailed
network model should be pre-clustered to in the rule
:mod:`simplify_network` (before :mod:`cluster_network`). -->
:mod:`simplify_network` (before :mod:`cluster_network`).

(clusters)=
## The `{clusters}` wildcard
@@ -105,11 +105,7 @@ is provided, an electrical only study is completed.
| Sector | Code | Description | Status |
|-------------|------|------------------------------------------------|-------------|
| Electricity | E | Electrical sector. Will always be run. | Runs |
| Natural Gas | G | Natural gas sector | Development |
| Heating | H | Heating and Cooling | Development |
| Industry | I | Industrial Processes | Development |
| Transport | T | Transportation sector | Development |
| Methane | M | Methane tracking. Requires natural gas sector. | Future |
| Natural Gas | G | All sectors added | Development |

(scope)=
## The `{scope}` wildcard
@@ -121,7 +117,6 @@ Sector coupling studies are all under active development
Takes values `residential`, `urban`, `total`. Used in sector coupling studies to define
population breakdown.


(cutout_wc)=
## The `{cutout}` wildcard

2 changes: 1 addition & 1 deletion docs/source/configtables/electricity.csv
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@ co2limit,:math:`t_{CO_2-eq}/a`,float,Cap on total annual system carbon dioxide e
co2base,:math:`t_{CO_2-eq}/a`,float,Reference value of total annual system carbon dioxide emissions if relative emission reduction target is specified in ``{opts}`` wildcard.
retirement, --,One of ``economic`` or ``technical``,"Sets the retirement method for converntional generators. If ``technical`` all generators ``p_nom_min`` are set to ``p_nom`` to prevent selling off of the asset. Retirements are then tracked in post-proccessing. If ``economic`` existing plants have their ``p_nom_min`` set as ``0``, ``p_nom_max`` set to ``p_nom``, and capital costs set to fixed costs. Generators with ``p_nom`` are then added to handle capacity expansion."""
,,,
operational_reserve:,,,Settings for reserve requirements following `GenX <https://genxproject.github.io/GenX/dev/core/#Reserves>`_
operational_reserve:,,,Settings for reserve requirements following `GenX <https://genxproject.github.io/GenX.jl/stable/Model_Reference/core/#Operational-Reserves>`_
--activate,bool,true or false,Whether to take operational reserve requirements into account during optimisation
--epsilon_load,--,float,share of total load
--epsilon_vres,--,float,share of total renewable supply
2 changes: 1 addition & 1 deletion docs/source/configtables/onwind.csv
Original file line number Diff line number Diff line change
@@ -9,6 +9,6 @@ grid codes,--,Any subset of the Copornicus Land Cover code list (see assumptions
distance,m,float,Distance to keep from areas specified in ``distance_grid_codes``
distance_grid_codes,--,Any subset of the Copornicus Land Cover code list (see assumptions).,Specifies areas according to Land Cover codes which are generally eligible for wind turbine placement.
natura,bool,"{true, false}",Switch to exclude Protected Planet natural protection areas. Area is excluded if ``true``.
potential,--,"One of {'simple', 'conservative'}",Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
potential,--,"One of {'simple', 'conservative'}",Method to compute the maximal installable potential for a node
clip_p_max_pu,p.u.,float,To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero.
correction_factor,--,float,Correction factor for capacity factor time series.
2 changes: 1 addition & 1 deletion docs/source/configtables/scenario.csv
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
,Unit,Values,Description
planning_horizons,int,"(2018-2023, 2030, 2040, 2050)","Specifies the year of demand data to use. Historical values will use EIA930 data, Future years will use NREL EFS data. Specify multiple planning horizons to build a multi-horizon model."
foresight,str,"perfect", "Specifies foresight option for multi-horizon optimization. Currently only "perfect" foresight is supported. Myopic foresight will be added in the future."
foresight,str,perfect,Specifies foresight option for multi-horizon optimization. Currently only perfect foresight is supported. Myopic foresight will be added in the future.
2 changes: 1 addition & 1 deletion docs/source/configtables/solar.csv
Original file line number Diff line number Diff line change
@@ -12,6 +12,6 @@ capacity_per_sqkm,:math:`MW/km^2`,float,Allowable density of solar panel placeme
correction_factor,--,float,A correction factor for the capacity factor (availability) time series.
corine,--,Any subset of the Copornicus Land Cover code list (see assumptions).,Specifies areas according to Land Cover codes which are generally eligible for wind turbine placement.
natura,bool,"{true, false}",Switch to exclude Protected Planet natural protection areas. Area is excluded if ``true``.
potential,--,"One of {'simple', 'conservative'}",Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`
potential,--,"One of {'simple', 'conservative'}",Method to compute the maximal installable potential for a node
clip_p_max_pu,p.u.,float,To avoid too small values in the renewables` per-unit availability time series values below this threshold are set to zero.
excluder_resolution,m,float,Resolution on which to perform geographical elibility analysis.
36 changes: 36 additions & 0 deletions docs/source/data-costs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
(data-costs)=
# 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.

### Implemented Candidate Resources

PyPSA-USA includes a variety of candidate resources, each with specific parameters:

- **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
- **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).

## 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)

## Sector Costs

Running sector studies will use the same power system costs as electrical only studies. Costs specific to each sector can be found in the [service sector](./data-services.md), [transportation sector](./data-transportation.md), and [industrial sector](./data-industrial.md) pages accordingly.
47 changes: 47 additions & 0 deletions docs/source/data-demand.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
(data-demand)=
# Electricity Demand

PyPSA-USA offers access to both exogenously defined historical and future forecasted electrical demand data.

## Historical Demand

Historical demand data is imported from the EIA930 via the [GridEmissions](https://github.com/jdechalendar/gridemissions) tool, covering the years 2018-2023. This data is defined at the balancing area region level.

## Forecasted Demand

Forecasted demand is sourced from the NREL Electrification Futures Study (EFS), providing hourly demand forecasts for the years 2030, 2040, and 2050. The EFS data includes forecasts for varying levels and speeds of electrification across sectorally specified residential, commercial, and industrial end-uses. The non-sector coupled setting in pypsa-usa aggregates these demands to one load per node.

The EFS also provides electrification cases, with reference, medium, and high electrification cases, with slow, moderate, and rapid speeds. These scenarios can be controlled via the configuration `demand: scenario: efs_case: / efs_speed:`.

## Demand Disaggregation

Electrical load is disaggregated based on population, folling the implementation in the nodal network dataset. See the paper on the [nodal network](./data-transmission.md#tamu-synthetic-nodal-network) for more information on specifics of load disaggregation.

## Usage

The user determines weather to use historical demand years via a combination of the planning horizons setting, and the electricity demand setting. If conducting historical simulations, the user must select a planning horizon in the past (2018-2023), and set `profile: eia`.

If conducting forward-looking planning cases the user must set future planning_horizon year (2025- 2050) and set `profile: efs`.

For the years between 2030, 2040, and 2050, PyPSA-USA implements a scaling factor that interpolates between future years or scales historical demand using forecasts from the Annual Energy Outlook (AEO).

```
scenario:
planning_horizons: [] # Historical or Future Year(s)
electricity:
demand:
profile: efs # efs, eia
scenario:
efs_case: reference # reference, medium, high
efs_speed: moderate # slow, moderate, rapid
aeo: reference
```

### Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/demand.csv
```
59 changes: 59 additions & 0 deletions docs/source/data-generators.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
(data-generators)=
# Generators

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.

## Generator Data Integration

PyPSA-USA integrates unit-level generator data from PUDL, which includes:

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

## 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.

- **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).
- Monthly unit-level fuel prices and additional plant efficiencies are collected via PUDL EIA-923.

- **Data Imputation**:
- Missing data is imputed using capacity-weighted averages calculated by NERC region and unit technology type.
- Wholesale daily natural gas prices for fuel regions across the WECC are imputed using CAISO OASIS data.
- Monthly fuel prices for coal and natural gas, spatially resolved by state, are supplemented by data from the EIA.
- For technologies like biomass and nuclear, where fuel prices are not available from other sources, projected fuel costs from the NREL ATB are used.

- **Future Fuel Costs**:
- Forecasted annual fuel prices are imported from the EIA's Annual Energy Outlook (AEO).

# Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/generators.csv
```
6 changes: 6 additions & 0 deletions docs/source/data-industrial.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(data-industrial)=
# Industrial Sector

```{warning}
Sector coupling studies are all under active development. More info to come!
```
6 changes: 6 additions & 0 deletions docs/source/data-naturalgas.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(data-naturalgas)=
# Natural Gas Sector

```{warning}
Sector coupling studies are all under active development. More info to come!
```
38 changes: 38 additions & 0 deletions docs/source/data-policies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
(data-policies)=
# State and Federal Policy

## Policy Constraints

### Integration with ReEDS

PyPSA-USA integrates with the ReEDS capacity expansion model developed by NREL to incorporate data on regional and federal policies. This integration allows for the modeling of various policy-driven constraints that guide the decarbonization process.

### Implemented Policy Constraints

PyPSA-USA currently supports several key policy constraints, including:

- **Planning Reserve Margins**: Constrains capacity to meet a reserve margin above peak demand.
- **Clean Energy Standards (CES)**: Mandates the proportion of electricity generation that must come from clean energy sources.
- **Renewable Portfolio Standards (RPS)**: Requires a specific percentage of electricity generation to come from renewable sources.
- **Technology Capacity Targets**: Sets specific capacity expansion or retirement goals for certain technologies, such as wind, solar, or nuclear.
- **Emissions Constraints**: Limits the total emissions allowed within a region, with options to penalize imports by user-defined emissions factors.

### Flexible Policy Horizons and Geographic Scope Enforcements

Each of these constraints can be defined for different investment horizons (e.g., 2030, 2040, 2050) and applied uniquely across various geographical levels:

- **State-Level**
- **Balancing Areas (BAs)**
- **Interconnects**
- **National Level**

Users have the flexibility to apply the policy constraints defined by ReEDS or to implement custom policy constraints, allowing for the exploration of new policy pathways and scenarios.


### Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/policies.csv
```
41 changes: 41 additions & 0 deletions docs/source/data-renewables.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
(data-renewables)=
# Renewables

## Weather Data and Renewable Resource Availability

### Integration with Atlite

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**
- **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.

### Land-Use Data and Renewable Integration

Land-use data is a critical factor in determining the technical potential for renewable energy integration. PyPSA-USA provides users with data on renewable resource availability, which is informed by layers of flexibly assigned land-use classifications, including:

- **Urban Areas**
- **Forested Regions**
- **Scrub-Land**
- **Satellite Imagery**
- **Federally Protected Lands**
- **Bathymetry**
- **State-Level Land Exclusions**

These land exclusion layers are combined to create estimates of land available for renewable energy development, which can be customized for different technologies. This approach allows users to accurately assess the technical potential for renewable integration based on realistic land-use constraints.

Additional details on the configurations available in the Atlite weather-energy simulation tool can be found in the configurations section.


### Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/renewables.csv
```
38 changes: 38 additions & 0 deletions docs/source/data-services.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
(data-services)=
# Service Sector

The service sector represents both the residential and commercial sectors. Each of these sectors are represented in the same way, but have different load shapes, profiles, and technology charasteristics.

## Demand

The service sector represents demand for electricity, cooling, space heating, and water heating. These loads are pulled at a state level from the [NREL End Use Load Profile](https://www.nrel.gov/buildings/end-use-load-profiles.html) (EULP) dataset. Loads are grouped based on end-use fuel aggregated to hourly values. Dissagregation follows same population based dissagregation method from the electrical network.

An example of the loads for a multi-family home in California (resampled to daily values) is given below.

![alt text](./_static/sectors/service-demand.png)

The EULP dataset gives loads at a state level. The load is dissagregated following [population breakdowns](./data-demand.md#demand-disaggregation) described in the electrical network. Furthermore, if splitting urban and rural areas, load is split according to [Census metrics](https://www.census.gov/geographies/mapping-files/time-series/geo/cartographic-boundary.2020.html#list-tab-1883739534) on proportions living in urban/rural areas within each clustered region.

## Technologies

The following technologies are available to be modelled within the service sector

```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,30
:file: datatables/sector_service_techs.csv
```

## Performance Characteristics

The following table gives an overview of the sources used to define the performance charactersitics of technologies in the service sector.

```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,22,22
:file: datatables/sector_service_chars.csv
```

## Usage
52 changes: 52 additions & 0 deletions docs/source/data-transmission.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
(data-transmission)=
# Transmission

## Transmission Networks

PyPSA-USA offers a unique capability by integrating two options of transmission networks: the ReEDS NARIS-derived zonal network and the Breakthrough Energy - Texas A&M University (TAMU) synthetic nodal network.

### TAMU Synthetic Nodal Network

The **TAMU synthetic nodal network** offers a high-resolution representation of the US power system, specifically designed for operational simulations. See the [Xu. et al.](https://arxiv.org/abs/2002.06155) paper for a detailed description of the network. This network includes:

- **High Spatial Resolution**: Comprising 82,549 buses, 41,561 substations, 83,497 AC lines, and 17 HVDC lines, it provides a detailed view of the transmission grid.
- **DC Power Flow**: Provides data for DC-power flow approximation.
- **Clustering**: Due to its high resolution, the TAMU network is not suitable for capacity expansion planning without clustering. As part of the PyPSA-USA workflow we implement the clustering algorithms developed by [M. Frysztracki et. al.](https://energyinformatics.springeropen.com/articles/10.1186/s42162-022-00187-7) and integrated into the PyPSA package.

While representative of the US electricity system, the TAMU network is synthetic and not precisely aligned with the actual US transmission network. As such we integrated the ReEDS NARIS dataset for planning applications where more precise inter-regional transfer capacity ratings are neccesary.

![TAMU_clustered](./_static/networks/TAMU_Clustered_500.png)

### ReEDS NARIS Zonal Network

The **ReEDS zonal network** is a Balancing Authority resolution transmission network derived from the North American Renewable Integration Study ([NARIS](https://www.nrel.gov/analysis/naris.html)) network. The network which divides the continental US into 137 zones. This network is designed to respect state boundaries and can be mapped to balancing authorities, NERC regions, and RTOs/ISOs. Key features of this network include:

- **Zonal Representation**: The network topology is designed for transport model type transmission representations, akin to modeling area interchanges as controllable DC-links.
- **N-1 Interface Limits**: The interface transmission limits are calculated using the method developed by [Brown et. al.](https://arxiv.org/abs/2308.03612). The ReEDS network uses the CEII protected NARIS dataset as the base nodal network from which the ITLS are calculated.
- **Suitable for Capacity Expansion**: The zonal network's lower spatial resolution is well-suited for capacity expansion planning, as it simplifies computational requirements.


![ReEDS_topology](./_static/networks/ReEDS_Topology.png)


### Usage

The TAMU network is the default transmission network in PyPSA-USA, you can modify it's resolution though the `simpl` and `clusters` wildcards in the configuration files.

To use the ReEDS network in PyPSA-USA, you must enable the `links: transport_model` setting, and set the proper number of `cluster` nodes for your modeled interconnection. You can find the details on number of nodes in each zone in the table below.

```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,33
:file: datatables/transmission_nodes.csv
```

(transmission-data)=
### Data
```{eval-rst}
.. csv-table::
:header-rows: 1
:widths: 22,22,33
:file: datatables/transmission.csv
```
6 changes: 6 additions & 0 deletions docs/source/data-transportation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(data-transportation)=
# Transportation Sector

```{warning}
Sector coupling studies are all under active development. More info to come!
```
3 changes: 3 additions & 0 deletions docs/source/datatables/demand.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Characteristic,Data Source,Spatial Scale,Temporal Scale
Historical Demand,GridEmissions (EIA930),Balancing Area,Hourly (2018- 2023)
Future Demand,NREL Electrification Futures Study (EFS),States,"Hourly (2030, 2040, 2050)"
16 changes: 16 additions & 0 deletions docs/source/datatables/generators.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Characteristic,Data Source,Spatial Scale,Temporal Scale
Nameplate Capacity,EIA860 (PUDL),Unit Level,-
Storage Energy Capacity,EIA860 (PUDL),Unit Level,-
Seasonal Derating,EIA860 (PUDL),Unit Level,Summer / Winter
Minimum Capacity,EIA860 (PUDL),Unit Level,-
Heat Rate,"EIA-923 (PUDL), CEMS ",Unit / Plant Levels,-
Operation & Maint. Costs,WECC ADS + NREL ATB (PUDL),Unit / Plant Levels,-
Historical Fuel Costs,PUDL ,,
Fuel Costs (Natural Gas),CAISO OASIS,WECC Fuel Region (~BA),Daily
Fuel Costs (Natural Gas),EIA API,State Level,Monthly
Fuel Costs (Coal),EIA API ,State Level,Quarterly
Fuel Costs (Nuclear & Biomass),NREL ATB (PUDL),National,Annual
Unit Commitment Costs,WECC ADS,WECC Unit-level,-
Future Fuel Costs,EIA AEO (PUDL),9 CONUS Regions,Annual
Fuel Emissions Rates,NREL ATB (PUDL),National,-
Capital Costs,NREL ATB (PUDL),EIA State Multipliers,2022-2050
5 changes: 5 additions & 0 deletions docs/source/datatables/policies.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Policy Constraint,Data Source,Spatial Resolution,Temporal Scope
Renewable Portfolio Standards,NREL ReEDS,States,Annual (present - 2050)
Planning Reserve Margins,NREL ReEDS,NERC Regions,-
Technology Capacity Constraints,-,-,-
Emissions Constraints,NREL ReEDS,States,Annual (present - 2050)
9 changes: 9 additions & 0 deletions docs/source/datatables/renewables.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Characteristic,Data Source,Spatial Scale,Temporal Scale
Nameplate Capacity,EIA860,Unit Level,-
Capacity Factor Profiles,Atlite (ERA5),30 km,Hourly (1940 - present)
Hydro Profiles,BE/TAMU,Unit Level,Hourly (2019)
Technical Potential,CEC Wind and Solar Screens,Variable (< 30 km),-
,Copernicus Land-Sat,,-
,GEBCO Bathymetry,,-
,BOEM Planning Areas,,-
Operation & Maint. Costs,WECC ADS + NREL ATB,Unit / Plant Levels,-
21 changes: 21 additions & 0 deletions docs/source/datatables/sector_service_chars.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Sector,Technology,Metric,Source
Residential,Furnaces,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Water Heaters,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Air Conditioners,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Air Source Heat Pump,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
Commercial,Furnaces,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Water Heaters,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Air Conditioners,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
,Ground Source Heat Pump,Costs,EIA Buildings Sector Appliance and Equipment Costs and Efficiencies
Residential,Air Source Heat Pump,Efficiency,Time dependent COP calculated
,Ground Source Heat Pump,Efficiency,Time dependent COP calculated
Commercial,Air Source Heat Pump,Efficiency,Time dependent COP calculated
,Ground Source Heat Pump,Efficiency,Time dependent COP calculated
Residential,Furnaces,Existing Stock,EIA Residential Energy Consumption Survey
,Water Heaters,Existing Stock,EIA Residential Energy Consumption Survey
,Air Conditioners,Existing Stock,EIA Residential Energy Consumption Survey
,Heat Pumps,Existing Stock,EIA Residential Energy Consumption Survey
Commercial,Furnaces,Existing Stock,EIA Commercial Energy Consumption Survey
,Water Heaters,Existing Stock,EIA Commercial Energy Consumption Survey
,Air Conditioners,Existing Stock,EIA Commercial Energy Consumption Survey
,Heat Pumps,Existing Stock,EIA Commercial Energy Consumption Survey
13 changes: 13 additions & 0 deletions docs/source/datatables/sector_service_techs.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Technology,Abbreviation,Required Configuration
Electrical Distribution,elec-dist,Always on
Air Conditioner,air-con,Heat Load
Oil Furnace,lpg-furnace,Heat Load
Gas Furnace,gas-furnace,Heat Load
Electric Furnace,elec-furnace,Heat Load
Heat Store,heat-store,Heat Load
Air Conditioner,air-con,Cooling Load
Air Source Heat Pump,ashp,Heat Load
Ground Source Heat Pump,gshp,Heat Load
Oil Water Heater,lpg-heater,Heat Load
Gas Water Heater,gas-heater,Heat Load
Electric Water Heater,elec-heater,Heat Load
7 changes: 7 additions & 0 deletions docs/source/datatables/transmission.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Characteristic,Data Source,Spatial Scale
Transmission Topology,Breakthrough Energy / TAMU,CONUS / Interconnections
Transmission Topology,ReEDS (NARIS),CONUS
Clustering Shapes,ReEDS,CONUS
,Balancing Areas (Mixed),
,States,
Transmission Expansion Costs,NREL ReEDS,CONUS
6 changes: 6 additions & 0 deletions docs/source/datatables/transmission_nodes.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Spatial Scope,Reeds Zones,TAMU
,(Min Clusters),(Max Clusters)
Western,34,"4,919"
Texas,7,"1,338"
Eastern,98,"35,304"
USA,132,"41,561"
40 changes: 21 additions & 19 deletions docs/source/index.md
Original file line number Diff line number Diff line change
@@ -5,22 +5,20 @@

# PyPSA-USA

```{warning}
**This model is under active development. If you would like to chat about using the model please don't hesitate to reach out to ktehranchi@stanford.edu and trevor_barnes@sfu.ca for support**
```

PyPSA-USA is an open-source energy system dataset of the United States energy system designed for expansion planning and operational simulations.
PyPSA-USA is an open-source energy system dataset and modeling tool designed for expansion planning and operational simulations across the United States.

% update to be a url
![PyPSA-USA_Network](_static/PyPSA-USA_network.png)

PyPSA-USA provides you with a toolkit to customize the **data** and **policy constraints** of energy system planning model with ease. Through configuration file you can control the spatial, temporal, and operational resolution of your energy system model with access to cleaned and prepared historical and forecasted data. This means, you can build a model of **ERCOT, WECC, or the Eastern interconnection**, where the transmission network is clustered to **N nodes**, respecting the boundaries of **balancing areas, states, or REeDs shape boundaries**, using **historical EIA-930 demand data years 2018-2023** or **NREL EFS forcasted demand**, with **historical fuel prices from ISOs/EIA**, and capital cost projections from the **NREL Annual Technology Baseline**.
PyPSA-USA provides a versatile toolkit that allows you to customize both the **data** and **policy constraints** of your energy system planning model with ease. Through a straightforward configuration file, you can control the spatial, temporal, and operational resolution of your model, using access to cleaned and prepared historical and forecasted data.

You can create and export the power system data model to use in your own homebrewed optimization model OR use the built-in PyPSA-USA optimization features to layer on additional policy and operational constraints. For planning studies, we've integrated data on regional Renewable Portfolio Standards (RPS), emissions constraints, and other state-level policy constraints. We're actively building this model so more features are on the way!

PyPSA-USA builds on and leverages the work of [PyPSA-EUR](https://pypsa-eur.readthedocs.io/en/latest/index.html) developed by TU Berlin. PyPSA-USA is actively developed by the [INES Research Group](https://ines.stanford.edu) at Stanford University and the [ΔE+ Research Group](https://www.sfu.ca/see/research/delta-e.html) at Simon Fraser University.


```{warning}
**This model is under active development. If you would like to chat about using the model please don't hesitate to reach out to ktehranchi@stanford.edu and trevor_barnes@sfu.ca for support**
```

<!-- ```{include} ../../README.md
:relative-images:
@@ -48,26 +46,30 @@ about-usage
```

```{toctree}
:caption: 'Configuration:'
:caption: 'Model Data:'
:maxdepth: 1
:hidden:
config-wildcards
config-configuration
config-sectors
data-transmission
data-demand
data-generators
data-renewables
data-costs
data-policies
data-naturalgas
data-services
data-industrial
data-transportation
```

```{toctree}
:caption: 'Rules Overview:'
:caption: 'Model Configuration:'
:maxdepth: 1
:hidden:
rules-retrieving-data
rules-build-network
rules-build-sector-network
rules-simplify
rules-solve
rules-summary
config-wildcards
config-configuration
config-sectors
```

```{toctree}
@@ -82,6 +84,6 @@ contributing

```{toctree}
:hidden:
rules-retrieving-data
config-co2-base
```
50 changes: 0 additions & 50 deletions docs/source/rules-build-network.md

This file was deleted.

32 changes: 0 additions & 32 deletions docs/source/rules-build-sector-network.md

This file was deleted.

1 change: 1 addition & 0 deletions docs/source/rules-retrieving-data.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
(retrieve-data)=
# Retrieve Data

Numerous datasets used in PyPSA USA are large and are not stored on GitHub. Insted, data is stored on Zenodo or supplier websites, and the workflow will automatically download these datasets via the `retrieve` rules
19 changes: 0 additions & 19 deletions docs/source/rules-simplify.md

This file was deleted.

79 changes: 0 additions & 79 deletions docs/source/rules-solve.md

This file was deleted.

33 changes: 0 additions & 33 deletions docs/source/rules-summary.md

This file was deleted.

160 changes: 131 additions & 29 deletions workflow/Snakefile
Original file line number Diff line number Diff line change
@@ -19,7 +19,7 @@ FIGURES_MAPS = [
"emissions_map.pdf",
"renewable_potential_map.pdf",
"demand_map.pdf",
"lmp_map.pdf",
# "lmp_map.pdf",
]

FIGURES_EMISSIONS = [
@@ -39,25 +39,16 @@ FIGURES_SYSTEM = [
"bar_regional_capacity_additions.pdf",
"global_constraint_shadow_prices.pdf",
"generator_data_panel.pdf",
"curtailment_heatmap.pdf",
"capfac_heatmap.pdf",
# "curtailment_heatmap.pdf",
# "capfac_heatmap.pdf",
"fuel_costs.pdf",
"region_lmps.pdf",
]

FIGURES_NATURAL_GAS = [
"natural_gas_demand.html",
"natural_gas_processing.html",
"natural_gas_linepack.html",
"natural_gas_storage.html",
"natural_gas_domestic_trade.html",
"natural_gas_international_trade.html",
]

FIGURES_VALIDATE = [
"daily_stacked_comparison.pdf",
"carrier_production_bar.pdf",
"val_bar_regional_emissions.pdf",
# "val_bar_regional_emissions.pdf",
"val_bar_state_emissions.pdf",
"val_generator_data_panel.pdf",
# "val_heatmap_capacity_factor.pdf",
@@ -92,11 +83,12 @@ wildcard_constraints:


# Merge subworkflow configs and main config
configfile: "config/config.validation.yaml"
configfile: "config/config.default.yaml"
configfile: "config/config.cluster.yaml"
configfile: "config/config.common.yaml"
configfile: "config/config.plotting.yaml"
configfile: "config/config.api.yaml"
configfile: "config/config.sector.yaml"


run = config.get("run", {})
@@ -116,6 +108,7 @@ include: "rules/build_electricity.smk"
include: "rules/build_sector.smk"
include: "rules/solve_electricity.smk"
include: "rules/postprocess.smk"
include: "rules/postprocess_sector.smk"
include: "rules/validate.smk"


@@ -130,12 +123,14 @@ if "E" not in config["scenario"]["sector"]:

def electricity_figures(wildcards):
figs = []
if not config["run"]["validation"]:
if "G" in config["scenario"]["sector"].split("-"):
return []
elif not config["run"]["validation"]:
# maps
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/maps/{figure}",
+ "{interconnect}/figures/s{simpl}_cluster_{clusters}/l{ll}_{opts}_{sector}/maps/{figure}",
**config["scenario"],
figure=FIGURES_MAPS,
)
@@ -144,7 +139,7 @@ def electricity_figures(wildcards):
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/emissions/{figure}",
+ "{interconnect}/figures/s{simpl}_cluster_{clusters}/l{ll}_{opts}_{sector}/emissions/{figure}",
**config["scenario"],
figure=FIGURES_EMISSIONS,
)
@@ -153,7 +148,7 @@ def electricity_figures(wildcards):
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/production/{figure}",
+ "{interconnect}/figures/s{simpl}_cluster_{clusters}/l{ll}_{opts}_{sector}/production/{figure}",
**config["scenario"],
figure=FIGURES_PRODUCTION,
)
@@ -162,7 +157,7 @@ def electricity_figures(wildcards):
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/system/{figure}",
+ "{interconnect}/figures/s{simpl}_cluster_{clusters}/l{ll}_{opts}_{sector}/system/{figure}",
**config["scenario"],
figure=FIGURES_SYSTEM,
)
@@ -173,25 +168,132 @@ def electricity_figures(wildcards):


def sector_figures(wildcards):

figs = []

states = INTERCONNECT_2_STATE[config["scenario"]["interconnect"][0]]

if "G" in config["scenario"]["sector"].split("-"):
figs.append("natural_gas.html")
if not figs:
return []
else:
return expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/gas/{figure}",
**config["scenario"],
figure=FIGURES_NATURAL_GAS,
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/gas/{figure}",
**config["scenario"],
figure=FIGURES_SECTOR_NATURAL_GAS,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/{s}/emissions/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_EMISSIONS,
s=states,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/emissions/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_EMISSIONS,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/{s}/production/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_PRODUCTION,
s=states,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/production/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_PRODUCTION,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/{s}/capacity/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_CAPACITY,
s=states,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/capacity/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_CAPACITY,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/{s}/loads/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_LOADS,
s=states,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/loads/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_LOADS,
)
)
"""
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/{s}/validate/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_VALIDATE,
s=states,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/validate/{figure}.png",
**config["scenario"],
figure=FIGURES_SECTOR_VALIDATE,
)
)
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/validate/{figure}.png",
**config["scenario"],
figure=FIGURES_SYSTEM_VALIDATION,
)
)
"""
figs.append(
expand(
RESULTS
+ "{interconnect}/figures/s{simpl}_c{clusters}/l{ll}_{opts}_{sector}/system/production/{figure}.png",
**config["scenario"],
figure=FIGURES_SYSTEM_PRODUCTION,
)
)
return list(chain(*figs))
return figs


def validation_figures(wildcards):
if config["run"]["validation"]:
return expand(
RESULTS
+ "{interconnect}/figures/cluster_{clusters}/l{ll}_{opts}_{sector}/{figure}",
+ "{interconnect}/figures/s{simpl}_cluster_{clusters}/l{ll}_{opts}_{sector}/{figure}",
**config["scenario"],
figure=FIGURES_VALIDATE,
)
4 changes: 2 additions & 2 deletions workflow/envs/environment.yaml
Original file line number Diff line number Diff line change
@@ -35,7 +35,6 @@ dependencies:
- matplotlib==3.8.0
- plotly==5.17.0
- graphviz
- duckdb==1.0.0

# Keep in conda environment when calling ipython
- ipython==8.16.1
@@ -61,5 +60,6 @@ dependencies:
- pip:
- vresutils==0.3.1
- tsam>=1.1.0
- gurobipy==10.0.3
- gurobipy==11.0.3
- highspy
- duckdb==0.10.0
204 changes: 204 additions & 0 deletions workflow/notebooks/sector_loads/industrial_load.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import geopandas as gpd\n",
"import pandas as pd\n",
"import plotly.express as px\n",
"from pathlib import Path"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"shape_path = Path(\"./../../data/counties/cb_2020_us_county_500k.shp\")\n",
"data_path = Path(\"./../../data/industry_load/2014_update_20170910-0116.csv\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gdf = gpd.read_file(shape_path)\n",
"df = pd.read_csv(data_path)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"county_2_state = df.set_index(\"fips_matching\")[\"fipstate\"].to_dict()\n",
"fips_2_state = {\n",
" \"01\": \"ALABAMA\",\n",
" \"02\": \"ALASKA\",\n",
" \"04\": \"ARIZONA\",\n",
" \"05\": \"ARKANSAS\",\n",
" \"06\": \"CALIFORNIA\",\n",
" \"08\": \"COLORADO\",\n",
" \"09\": \"CONNECTICUT\",\n",
" \"10\": \"DELAWARE\",\n",
" \"11\": \"DISTRICT OF COLUMBIA\",\n",
" \"12\": \"FLORIDA\",\n",
" \"13\": \"GEORGIA\",\n",
" \"15\": \"HAWAII\",\n",
" \"16\": \"IDAHO\",\n",
" \"17\": \"ILLINOIS\",\n",
" \"18\": \"INDIANA\",\n",
" \"19\": \"IOWA\",\n",
" \"20\": \"KANSAS\",\n",
" \"21\": \"KENTUCKY\",\n",
" \"22\": \"LOUISIANA\",\n",
" \"23\": \"MAINE\",\n",
" \"24\": \"MARYLAND\",\n",
" \"25\": \"MASSACHUSETTS\",\n",
" \"26\": \"MICHIGAN\",\n",
" \"27\": \"MINNESOTA\",\n",
" \"28\": \"MISSISSIPPI\",\n",
" \"29\": \"MISSOURI\",\n",
" \"30\": \"MONTANA\",\n",
" \"31\": \"NEBRASKA\",\n",
" \"32\": \"NEVADA\",\n",
" \"33\": \"NEW HAMPSHIRE\",\n",
" \"34\": \"NEW JERSEY\",\n",
" \"35\": \"NEW MEXICO\",\n",
" \"36\": \"NEW YORK\",\n",
" \"37\": \"NORTH CAROLINA\",\n",
" \"38\": \"NORTH DAKOTA\",\n",
" \"39\": \"OHIO\",\n",
" \"40\": \"OKLAHOMA\",\n",
" \"41\": \"OREGON\",\n",
" \"42\": \"PENNSYLVANIA\",\n",
" \"44\": \"RHODE ISLAND\",\n",
" \"45\": \"SOUTH CAROLINA\",\n",
" \"46\": \"SOUTH DAKOTA\",\n",
" \"47\": \"TENNESSEE\",\n",
" \"48\": \"TEXAS\",\n",
" \"49\": \"UTAH\",\n",
" \"50\": \"VERMONT\",\n",
" \"51\": \"VIRGINIA\",\n",
" \"53\": \"WASHINGTON\",\n",
" \"54\": \"WEST VIRGINIA\",\n",
" \"55\": \"WISCONSIN\",\n",
" \"56\": \"WYOMING\",\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df.columns"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"shapes = gdf[[\"GEOID\", \"geometry\"]].set_index(\"GEOID\")\n",
"shapes.index = shapes.index.astype(int)\n",
"shapes.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"energy = (\n",
" df[[\"fips_matching\", \"Total\"]]\n",
" .rename(columns={\"fips_matching\": \"GEOID\"})\n",
" .groupby(\"GEOID\")\n",
" .sum()\n",
")\n",
"energy.index = energy.index.astype(int)\n",
"energy.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"final = shapes.join(energy).fillna(0)\n",
"final[\"state\"] = final.index.map(county_2_state)\n",
"final = final.dropna()\n",
"final[\"state\"] = final.state.map(lambda x: fips_2_state[\"{:02d}\".format(int(x))])\n",
"final"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"filtered = final[\n",
" final.state.isin(\n",
" [\n",
" \"CALIFORNIA\",\n",
" \"WASHINGTON\",\n",
" \"IDAHO\",\n",
" \"OREGON\",\n",
" \"NEW MEXICO\",\n",
" \"NEVADA\",\n",
" \"UTAH\",\n",
" \"WYOMING\",\n",
" \"MONTANA\",\n",
" \"ARIZONA\",\n",
" \"COLORADO\",\n",
" ]\n",
" )\n",
"]\n",
"# filtered = final.copy()\n",
"px.choropleth(\n",
" filtered,\n",
" geojson=filtered.geometry,\n",
" locations=filtered.index,\n",
" color=\"Total\",\n",
" color_continuous_scale=\"Viridis\",\n",
" # range_color=(0, 12),\n",
" scope=\"usa\",\n",
")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "pypsa-usa",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
424 changes: 424 additions & 0 deletions workflow/notebooks/sector_loads/load_profiles.ipynb

Large diffs are not rendered by default.

File renamed without changes.
Binary file added workflow/repo_data/config/.DS_Store
Binary file not shown.
17 changes: 9 additions & 8 deletions workflow/repo_data/config/config.cluster.yaml
Original file line number Diff line number Diff line change
@@ -8,22 +8,23 @@ __default__:
output: logs/{rule}/log-%j.out
error: logs/{rule}/errlog-%j.err



build_renewable_profiles:
walltime: 02:00:00
walltime: 06:00:00

add_electricity:
walltime: 02:00:00
walltime: 06:00:00

simplify_network:
walltime: 02:00:00
walltime: 09:00:00

cluster_network:
walltime: 02:00:00
walltime: 09:00:00

solve_network:
walltime: 06:00:00
walltime: '24:00:00'

solve_network_validation:
walltime: 06:00:00
walltime: 09:00:00

add_demand:
walltime: 02:00:00
9 changes: 4 additions & 5 deletions workflow/repo_data/config/config.common.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@

countries: [US]

network_configuration: "pypsa-usa" # "pypsa-usa" or "ads2032"

foresight: 'perfect'

# docs :
renewable:
@@ -16,7 +15,7 @@ renewable:
correction_factor: 1 # 0.93
corine:
#all keys labeled corrine are actually copernicus codes. Using the name corrine bc using the pypsa-eur convention: https://land.copernicus.eu/global/sites/cgls.vito.be/files/products/CGLOPS1_PUM_LC100m-V3_I3.4.pdf
grid_codes: [20, 30, 40, 60, 100, 112, 113, 114, 115]
grid_codes: [20, 30, 40, 60, 100, 111, 112, 113, 114, 115]
distance: 10 #buffer from distance_grid_codes that are to be excluded
distance_grid_codes: [50]
natura: true
@@ -35,7 +34,7 @@ renewable:
corine:
grid_codes: [80, 200] #page 28 of https://land.copernicus.eu/global/sites/cgls.vito.be/files/products/CGLOPS1_PUM_LC100m-V3_I3.4.pdf
natura: true
boem_screen: true
boem_screen: False
max_depth: 60 # meters, ref https://www.nrel.gov/docs/fy16osti/66599.pdf
min_shore_distance: 22000 # meters
max_shore_distance: 65000 # meters
@@ -70,7 +69,7 @@ renewable:
capacity_per_sqkm: 4.6 # From 1.7 to 4.6 addresses issue #361 - TODO revisit this assumption
correction_factor: 1 # 0.854337
corine:
grid_codes: [20, 30, 40, 60, 90, 100] #see above for codes
grid_codes: [20, 30, 60, 90, 100] #see above for codes
natura: true
cec: true
potential: conservative # simple or conservative
127 changes: 49 additions & 78 deletions workflow/repo_data/config/config.default.yaml
Original file line number Diff line number Diff line change
@@ -9,17 +9,14 @@ run:

# docs :
scenario:
interconnect: [western] #"usa|texas|western|eastern"
clusters: [40]
opts: [REM-1000SEG]
interconnect: [texas] #"usa|texas|western|eastern"
clusters: [10]
simpl: [20]
opts: [RPS-REM-500SEG]
ll: [v1.0]
scope: "total" # "urban", "rural", or "total"
sector: "" # G
planning_horizons:
- 2030 #(2018-2023, 2030, 2040, 2050)

foresight: 'perfect'

planning_horizons: [2030, 2040, 2050]

# docs :
enable:
@@ -33,14 +30,14 @@ snapshots:

# docs :
electricity:
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, geothermal, biomass] # Choose the conventional plant types to include in network
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, geothermal, biomass, waste] # Choose the conventional plant types to include in network
renewable_carriers: [onwind, offwind, offwind_floating, solar, hydro] # Choose the renewable plant types to include in network
voltage_simplified: 230 #Voltage level to simplify network to in rule "simplify network"
co2limit: 1.4728e+9
co2limit_enable: false
co2base: 226.86e+6
co2limit: 1.4728e+9 # 0.8 * 1.841e+9
co2limit_enable: false # For sector coupled studies
co2base: 226.86e+6 #base_from_2020 Locations of the 250 MMmt of CO2 emissions from the WECC 2021.
gaslimit: false # global gas usage limit of X MWh_th
gaslimit_enable: false
gaslimit_enable: false # For sector coupled studies
retirement: economic # "economic" or "technical"
SAFE_reservemargin: 0.14
regional_Co2_limits: 'config/policy_constraints/regional_Co2_limits.csv'
@@ -49,7 +46,6 @@ electricity:
SAFE_regional_reservemargins: 'config/policy_constraints/SAFE_regional_prm.csv'
transmission_interface_limits: 'config/policy_constraints/transmission_interface_limits.csv'


operational_reserve:
activate: false
epsilon_load: 0.02
@@ -61,93 +57,81 @@ electricity:
H2: 168

extendable_carriers:
Generator: [solar, onwind, offwind, offwind_floating, OCGT, CCGT, coal] # Select Generator types allowed to be built/retired
StorageUnit: [4hr_battery_storage] # [Xhr-battery-storage (2-10 hours), Xhr-PHS (8,10,12 hrs)]
Generator: [solar, onwind, offwind, offwind_floating, OCGT, CCGT, coal, nuclear, coal-95CCS, CCGT-95CCS, SMR] #include CCGT-CCS
StorageUnit: [4hr_battery_storage, 8hr_battery_storage] # [Xhr-battery-storage (2-10 hours)]
Store: []
Link: []

demand:
profile: eia # efs, eia
profile: efs # efs, eia
scenario:
efs_case: reference # reference, medium, high
efs_speed: moderate # slow, moderate, rapid
aeo: reference

autarky:
enable: false
by_country: false

# docs :
conventional:
unit_commitment: false
dynamic_fuel_price:
pudl: true
wholesale: true


# docs :
lines:
types: # All temporary values, need to be updated
115.: "Al/St 240/40 2-bundle 220.0"
138.: "Al/St 240/40 2-bundle 220.0"
161.: "Al/St 240/40 2-bundle 220.0"
230.: "Al/St 240/40 2-bundle 220.0"
345.: "Al/St 240/40 4-bundle 380.0"
500.: "Al/St 560/50 4-bundle 750.0"
765.: "Al/St 560/50 4-bundle 750.0"
s_max_pu: 0.7
s_nom_max: .inf
max_extension: 1000.0e+3
max_extension: 2000 #MW
length_factor: 1.25
interface_transmission_limits: true # Imposes ITLs over AC Lines
transport_model: false # If minimum nodes set, AC lines will be replaced with links according to ITLs

interface_transmission_limits: false
transport_model: false

# docs :
links:
p_max_pu: 1.0
p_nom_max: .inf
max_extension: 1000.0e+3

max_extension: 2000 #MW

# docs :
costs:
atb:
model_case: "Market" # Market, R&D
scenario: "Moderate" # Advanced, Conservative, Moderate
aeo:
scenario: "reference" # reference, high, low
social_discount_rate: 0.02
version: v0.6.0
rooftop_share: 0.0
ng_fuel_year: 2019 # year of the natural gas price from CAISO [2019- 2023]
fill_values:
FOM: 0
VOM: 0
efficiency: 1
fuel: 0
investment: 0
lifetime: 25
"CO2 intensity": 0
"discount rate": 0.07
marginal_cost:
solar: 0.00
onwind: 0.00
offwind: 0.00
hydro: 0.
H2: 0.
electrolysis: 0.
fuel cell: 0.
battery: 0.
battery inverter: 0.
emission_prices: # in currency per tonne emission, only used with the option Ep
enable: false
co2: 0.
co2_monthly_prices: false
ptc_modifier:
onwind: 18.2547
geothermal: 18.2547
biomass: 18.2547
onwind: 27.50
biomass: 27.50
itc_modifier:
solar: 0.3
offwind: 0.3
offwind_floating: 0.3
EGS: 0.3
geothermal: 0.3
SMR: 0.3
nuclear: 0.3
hydro: 0.3
2hr_battery_storage: 0.3
4hr_battery_storage: 0.3
6hr_battery_storage: 0.3
8hr_battery_storage: 0.3
10hr_battery_storage: 0.3
8hr_PHS: 0.3
10hr_PHS: 0.3
12hr_PHS: 0.3
max_growth:
base:
SMR: 1000
rate:
SMR: 1.15
nuclear: 1.15


# docs :
sector:
@@ -157,24 +141,9 @@ sector:
cyclic_storage: false
heating:
heat_pump_sink_T: 55.
demand:
profile:
residential: eulp # efs, eulp
commercial: eulp # efs, eulp
transport: efs # efs
industry: efs # efs
scale:
residential: aeo # efs, aeo
commercial: aeo # efs, aeo
transport: aeo # efs, aeo
industry: aeo # efs, aeo
disaggregation:
residential: pop # pop
commercial: pop # pop
transport: pop # pop
industry: pop # pop
scenarios:
aeo: reference
transport:
exogenous: True # false to be implemented
ev_policy: "config/policy_constraints/ev_policy.csv"

# docs :
clustering:
@@ -190,12 +159,14 @@ clustering:
consider_efficiency_classes: false
aggregation_strategies:
generators:
committable: any
build_year: 'capacity_weighted_average'
lifetime: 'capacity_weighted_average'
start_up_cost: 'capacity_weighted_average'
min_up_time: 'capacity_weighted_average'
min_down_time: 'capacity_weighted_average'
ramp_limit_up: max
ramp_limit_down: max
committable: any
vom_cost: mean
fuel_cost: mean
heat_rate: mean
223 changes: 222 additions & 1 deletion workflow/repo_data/config/config.plotting.yaml
Original file line number Diff line number Diff line change
@@ -91,6 +91,121 @@ plotting:
"10hr_PHS_charger": "#058a79"
"12hr_PHS_charger": "#047d6c"

# sector studies only

"res-elec": "#f9d002"
"res-heat": "#E79CA2"
"res-cool": "#9CE7E2"
"com-elec": "#f9d002"
"com-heat": "#E79CA2"
"com-cool": "#9CE7E2"
"ind-elec": "#f9d002"
"ind-heat": "#E79CA2"
"trn-elec": "#f9d002"

"gas storage": "#f69d09"
"gas pipeline": "#f69d09"
"gas export": "#d02f2f"
"gas import": "#ae3dc2"

trn-veh: "#0a0100"
trn-elec-veh: "#0a0100"
trn-elec-lgt: "#2BAAD4"
trn-elec-med: "#2FD085"
trn-elec-hvy: "#6DCD32"
trn-elec-bus: "#d3d32c"
trn-lpg: "#0a0100"
trn-lpg-veh: "#0a0100"
trn-lpg-lgt: "#D4552B"
trn-lpg-med: "#D02F7A"
trn-lpg-hvy: "#9232CD"
trn-lpg-bus: "#2C2CD3"

trn-rail: "#0a0100"
trn-lpg-rail: "#0a0100"
trn-lpg-rail-psg: "#9F9160"
trn-lpg-rail-ship: "#606E9F"

trn-air: "#0a0100"
trn-lpg-air: "#0a0100"
trn-lpg-air-psg: "#A45B75"

trn-boat: "#0a0100"
trn-lpg-boat: "#0a0100"
trn-lpg-boat-ship: "#5BA48A"

res-space-heat: "#F10E1B"
com-space-heat: "#F10E1B"
res-water-heat: "#F10E1B"
com-water-heat: "#F10E1B"
res-rural-cool: "#196CE6"
com-rural-cool: "#196CE6"
res-urban-cool: "#196CE6"
com-urban-cool: "#196CE6"
res-urban-space-heat: "#F10E1B"
com-rural-space-heat: "#F10E1B"
res-rural-space-heat: "#F10E1B"
com-urban-space-heat: "#F10E1B"
res-rural-water-heat: "#E817C3"
com-rural-water-heat: "#E817C3"
res-urban-water-heat: "#E817C3"
com-urban-water-heat: "#E817C3"
res-rural-air-con: "#3B98C4"
com-rural-air-con: "#3B98C4"
res-urban-air-con: "#3B98C4"
com-urban-air-con: "#3B98C4"
res-rural-gas-furnace: "#F68D09"
com-rural-gas-furnace: "#F68D09"
res-urban-gas-furnace: "#F68D09"
com-urban-gas-furnace: "#F68D09"
res-rural-space-gas-furnace: "#F68D09"
com-rural-space-gas-furnace: "#F68D09"
res-urban-space-gas-furnace: "#F68D09"
com-urban-space-gas-furnace: "#F68D09"
res-rural-lpg-furnace: "#006B88"
com-urban-lpg-furnace: "#006B88"
res-urban-lpg-furnace: "#006B88"
com-rural-lpg-furnace: "#006B88"
res-rural-space-lpg-furnace: "#006B88"
com-rural-space-lpg-furnace: "#006B88"
com-urban-space-lpg-furnace: "#006B88"
res-urban-space-lpg-furnace: "#006B88"
res-rural-elec-furnace: "#DCEC13"
com-rural-elec-furnace: "#DCEC13"
res-urban-elec-furnace: "#DCEC13"
com-urban-elec-furnace: "#DCEC13"
res-rural-space-elec-furnace: "#DCEC13"
com-rural-space-elec-furnace: "#DCEC13"
com-urban-space-elec-furnace: "#DCEC13"
res-urban-space-elec-furnace: "#DCEC13"
res-rural-water-gas: "#D87627"
com-rural-water-gas: "#D87627"
res-urban-water-gas: "#D87627"
com-urban-water-gas: "#D87627"
res-rural-water-lpg: "#774115"
com-rural-water-lpg: "#774115"
res-urban-water-lpg: "#774115"
com-urban-water-lpg: "#774115"
res-rural-water-elec: "#5CDC23"
com-rural-water-elec: "#5CDC23"
res-urban-water-elec: "#5CDC23"
com-urban-water-elec: "#5CDC23"
res-urban-ashp: "#E14C1E"
com-urban-ashp: "#E14C1E"
res-rural-gshp: "#D926A6"
com-rural-gshp: "#D926A6"
res-rural-space-heat-store: "#3096CF"
com-rural-space-heat-store: "#3096CF"
res-urban-space-heat-store: "#3096CF"
com-urban-space-heat-store: "#3096CF"
res-elec-infra: "#9CD926"
com-elec-infra: "#9CD926"

ind-coal-boiler: "#EC13B4"
ind-heat-pump: "#E83E17"
ind-gas-furnace: "#E0AE1F"
ind-elec-infra: "#9CD926"

nice_names:
OCGT: "Open-Cycle Gas"
CCGT: "Combined-Cycle Gas"
@@ -105,6 +220,9 @@ plotting:
lines: "Transmission Lines"
ror: "Run of River"
Load: "Load Shed"

# sector studies only

res-elec: "Residential Electrical"
res-heat: "Residential Heating"
res-cool: "Residential Cooling"
@@ -113,4 +231,107 @@ plotting:
com-cool: "Commercial Cooling"
ind-elec: "Industrial Electrical"
ind-heat: "Industrial Heating"
trn-elec: "Transportation Electrical"
trn-elec: "Transportation Electrical"

"gas storage": "Natural Gas Storage"
"gas pipeline": "Natural Gas Pipeline"
"gas export": "Natural Gas Export"
"gas import": "Natural Gas Import"

trn-veh: "Vehicles"
trn-elec-veh: "Electric Vehicles"
trn-elec-lgt: "Light Duty EV"
trn-elec-med: "Medium Duty EV"
trn-elec-hvy: "Heavy Duty EV"
trn-elec-bus: "Electric Bus"
trn-lpg: "Transportaion Gas"
trn-lpg-veh: "Gas Vehicles"
trn-lpg-lgt: "Light Duty ICE"
trn-lpg-med: "Medium Duty ICE"
trn-lpg-hvy: "Heavy Duty ICE"
trn-lpg-bus: "Gas Bus"

trn-rail: "Rail"
trn-lpg-rail: "Rail Oil"
trn-lpg-rail-psg: "Passenger Rail Gas"
trn-lpg-rail-ship: "Shipping Rail Gas"

trn-air: "Airplane"
trn-lpg-air: "Airplane Gas"
trn-lpg-air-psg: "Passenger Air Gas"

trn-boat: "Marine Shipping Gas"
trn-lpg-boat: "Domestic Marine Shipping Gas"
trn-lpg-boat-ship: "Domestic Marine Shipping Gas"

res-space-heat: "Space Heat"
com-space-heat: "Space Heat"
res-water-heat: "Water Heat"
com-water-heat: "Water Heat"
res-rural-cool: "Cool"
com-rural-cool: "Cool"
res-urban-cool: "Cool"
com-urban-cool: "Cool"
res-urban-space-heat: "Space Heat"
com-rural-space-heat: "Space Heat"
res-rural-space-heat: "Space Heat"
com-urban-space-heat: "Space Heat"
res-rural-water-heat: "Water Heat"
com-rural-water-heat: "Water Heat"
res-urban-water-heat: "Water Heat"
com-urban-water-heat: "Water Heat"
res-rural-air-con: "Air Conditioner"
com-rural-air-con: "Air Conditioner"
res-urban-air-con: "Air Conditioner"
com-urban-air-con: "Air Conditioner"
res-rural-gas-furnace: "Gas Furnace"
com-rural-gas-furnace: "Gas Furnace"
res-urban-gas-furnace: "Gas Furnace"
com-urban-gas-furnace: "Gas Furnace"
res-rural-space-gas-furnace: "Gas Furnace"
com-rural-space-gas-furnace: "Gas Furnace"
res-urban-space-gas-furnace: "Gas Furnace"
com-urban-space-gas-furnace: "Gas Furnace"
res-rural-lpg-furnace: "Oil Furnace"
com-urban-lpg-furnace: "Oil Furnace"
res-urban-lpg-furnace: "Oil Furnace"
com-rural-lpg-furnace: "Oil Furnace"
res-rural-space-lpg-furnace: "Oil Furnace"
com-rural-space-lpg-furnace: "Oil Furnace"
com-urban-space-lpg-furnace: "Oil Furnace"
res-urban-space-lpg-furnace: "Oil Furnace"
res-rural-elec-furnace: "Electric Furnace"
com-rural-elec-furnace: "Electric Furnace"
res-urban-elec-furnace: "Electric Furnace"
com-urban-elec-furnace: "Electric Furnace"
res-rural-space-elec-furnace: "Electric Furnace"
com-rural-space-elec-furnace: "Electric Furnace"
com-urban-space-elec-furnace: "Electric Furnace"
res-urban-space-elec-furnace: "Electric Furnace"
res-rural-water-gas: "Gas Water Heater"
com-rural-water-gas: "Gas Water Heater"
res-urban-water-gas: "Gas Water Heater"
com-urban-water-gas: "Gas Water Heater"
res-rural-water-lpg: "Oil Water Heater"
com-rural-water-lpg: "Oil Water Heater"
res-urban-water-lpg: "Oil Water Heater"
com-urban-water-lpg: "Oil Water Heater"
res-rural-water-elec: "Electric Water Heater"
com-rural-water-elec: "Electric Water Heater"
res-urban-water-elec: "Electric Water Heater"
com-urban-water-elec: "Electric Water Heater"
res-urban-ashp: "Air Source Heat Pump"
com-urban-ashp: "Air Source Heat Pump"
res-rural-gshp: "Ground Source Heat Pump"
com-rural-gshp: "Ground Source Heat Pump"
res-rural-space-heat-store: "Building Insulation"
com-rural-space-heat-store: "Building Insulation"
res-urban-space-heat-store: "Building Insulation"
com-urban-space-heat-store: "Building Insulation"
res-elec-infra: "Electric Distribution"
com-elec-infra: "Electric Distribution"

ind-coal-boiler: "Coal Boiler"
ind-heat-pump: "Heat Pump"
ind-gas-furnace: "Gas Furnace"
ind-elec-infra: "Electric Distribution"
62 changes: 62 additions & 0 deletions workflow/repo_data/config/config.sector.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# sector coupling studies

# docs :
sector:
co2:
sequestration_potential: 0
policy: "config/policy_constraints/sector_co2_limits.csv"
natural_gas:
allow_imports_exports: true # false to be implemented
cyclic_storage: false
methane:
leakage_rate: 2 # percent # to be implemented
gwp: 18 # to be implemented
heating:
heat_pump_sink_T: 55.
standing_loss_space: 0
standing_loss_water: 0.032
service_sector:
dynamic_costs: True # false to be implemented
split_res_com: True # false to be implemented
split_urban_rural: True # false to be implemented
split_space_water_heating: True # false to be implemented
brownfield: True
gas_connection:
rural: 1 # to be implemented
urban: 1 # to be implemented
total: 1 # to be implemented
technologies:
space_heating:
elec_furnace: true
gas_furnace: true
oil_furnace: true
heat_pump: true
air_con: true
water_heating: # false to be implemented
elec_water_tank: false # true to be implemented
elec_instant: false # true to be implemented
gas_water_tank: true
gas_instant: true
oil_water_tank: true
loads:
heating: true
cooling: true
transport_sector:
brownfield: True # false to be implemented
dynamic_costs: True # false to be implemented
exogenous: True # false to be implemented
ev_policy: "config/policy_constraints/ev_policy.csv"
modes: # false to be implemented
vehicle: true
rail: true
air: true
boat: true
industrial_sector:
brownfield: True # false to be implemented
dynamic_costs: True # false to be implemented
technologies: # false to be implemented
gas_furnace: true
coal_furnace: true
heat_pump: true


134 changes: 62 additions & 72 deletions workflow/repo_data/config/config.tutorial.yaml
Original file line number Diff line number Diff line change
@@ -10,37 +10,33 @@ run:
# docs :
scenario:
interconnect: [texas] #"usa|texas|western|eastern"
clusters: [20]
opts: [REM-1000SEG]
ll: [v1.05]
clusters: [10]
simpl: [500]
opts: [RPS-REM-400SEG]
ll: [v1.0]
scope: "total" # "urban", "rural", or "total"
sector: "" # G
planning_horizons:
- 2030 #(2018-2023, 2030, 2040, 2050)

foresight: 'perfect'

planning_horizons: [2030, 2050] #(2018-2023, 2030, 2040, 2050)

# docs :
enable:
build_cutout: false

snapshots: # Defines renewable weather year, and annual snapshot time-scope
snapshots:
start: "2019-01-01"
end: "2019-02-01"
inclusive: "left"


# docs :
electricity:
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, geothermal, biomass] # Choose the conventional plant types to include in network
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, geothermal, biomass, waste] # Choose the conventional plant types to include in network
renewable_carriers: [onwind, offwind, offwind_floating, solar, hydro] # Choose the renewable plant types to include in network
voltage_simplified: 230
co2limit: 180.3e+3
co2limit_enable: true
co2base: 180.3e+6
voltage_simplified: 230 #Voltage level to simplify network to in rule "simplify network"
co2limit: 1.4728e+9 # 0.8 * 1.841e+9
co2limit_enable: false # For sector coupled studies
co2base: 226.86e+6 #base_from_2020 Locations of the 250 MMmt of CO2 emissions from the WECC 2021.
gaslimit: false # global gas usage limit of X MWh_th
gaslimit_enable: false
gaslimit_enable: false # For sector coupled studies
retirement: economic # "economic" or "technical"
SAFE_reservemargin: 0.14
regional_Co2_limits: 'config/policy_constraints/regional_Co2_limits.csv'
@@ -60,18 +56,17 @@ electricity:
H2: 168

extendable_carriers:
Generator: [solar, onwind, offwind, offwind_floating, OCGT, CCGT, coal] # Select Generator types allowed to be built/retired
StorageUnit: [4hr_battery_storage] # [Xhr-battery-storage (2-10 hours), Xhr-PHS (8,10,12 hrs)]
Generator: [solar, onwind, offwind, offwind_floating, OCGT, CCGT, coal, nuclear, coal-95CCS, CCGT-95CCS, SMR] #include CCGT-CCS
StorageUnit: [4hr_battery_storage, 8hr_battery_storage, 8hr_PHS, 10hr_PHS, 12hr_PHS] # [Xhr-battery-storage (2-10 hours)]
Store: []
Link: []

demand: #EFS used for given planning_horizons year (only ref/mod implemented)
EFS_case: reference # reference, medium, high
EFS_speed: moderate # slow, moderate, rapid

autarky:
enable: false
by_country: false
demand:
profile: efs # efs, eia
scenario:
efs_case: reference # reference, medium, high
efs_speed: moderate # slow, moderate, rapid
aeo: reference

# docs :
conventional:
@@ -82,70 +77,56 @@ conventional:

# docs :
lines:
types: # All temporary values, need to be updated
115.: "Al/St 240/40 2-bundle 220.0"
138.: "Al/St 240/40 2-bundle 220.0"
161.: "Al/St 240/40 2-bundle 220.0"
230.: "Al/St 240/40 2-bundle 220.0"
345.: "Al/St 240/40 4-bundle 380.0"
500.: "Al/St 560/50 4-bundle 750.0"
765.: "Al/St 560/50 4-bundle 750.0"
s_max_pu: 0.7
s_nom_max: .inf
max_extension: 1000.0e+3
max_extension: 2000 #MW
length_factor: 1.25
interface_transmission_limits: true # Imposes ITLs over AC Lines
transport_model: false # If minimum nodes set, AC lines will be replaced with links according to ITLs

interface_transmission_limits: false
transport_model: false

# docs :
links:
p_max_pu: 1.0
p_nom_max: .inf
max_extension: 1000.0e+3
max_extension: 2000 #MW

# docs :
load:
scaling_factor: 1.0

# docs :
costs:
costs:
atb:
model_case: "Market" # Market, R&D
scenario: "Moderate" # Advanced, Conservative, Moderate
aeo:
scenario: "reference" # reference, high, low
social_discount_rate: 0.02
version: v0.6.0
rooftop_share: 0.0
ng_fuel_year: 2019 # year of the natural gas price from CAISO [2019- 2023]
fill_values:
FOM: 0
VOM: 0
efficiency: 1
fuel: 0
investment: 0
lifetime: 25
"CO2 intensity": 0
"discount rate": 0.07
marginal_cost:
solar: 0.00
onwind: 0.00
offwind: 0.00
hydro: 0.
H2: 0.
electrolysis: 0.
fuel cell: 0.
battery: 0.
battery inverter: 0.
emission_prices: # in currency per tonne emission, only used with the option Ep
enable: false
co2: 0.
co2_monthly_prices: false
ptc_modifier:
onwind: 18.2547
geothermal: 18.2547
biomass: 18.2547
onwind: 27.50
biomass: 27.50
itc_modifier:
solar: 0.3
offwind: 0.3
offwind_floating: 0.3
EGS: 0.3
geothermal: 0.3
SMR: 0.3
nuclear: 0.3
hydro: 0.3
4hr_battery_storage: 0.3
6hr_battery_storage: 0.3
8hr_battery_storage: 0.3
8hr_PHS: 0.3
10hr_PHS: 0.3
12hr_PHS: 0.3
max_growth:
base:
SMR: 1000
rate:
SMR: 1.15
nuclear: 1.15


# docs :
@@ -189,20 +170,22 @@ clustering:
consider_efficiency_classes: false
aggregation_strategies:
generators:
committable: any
build_year: 'capacity_weighted_average'
lifetime: 'capacity_weighted_average'
start_up_cost: 'capacity_weighted_average'
min_up_time: 'capacity_weighted_average'
min_down_time: 'capacity_weighted_average'
ramp_limit_up: max
ramp_limit_down: max
# Mean heat-rates, VOM, and fuel are not used in the model, only for post processing purposes
committable: any
vom_cost: mean
fuel_cost: mean
heat_rate: mean
heat_rate: mean
temporal:
resolution_elec: false
resolution_sector: false

focus_weights:
# California: 0.5


# docs :
solving:
@@ -285,3 +268,10 @@ solving:

mem: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
walltime: "12:00:00"


# docs :
custom_files:
activate: false
files_path: ''
network_name: ''
284 changes: 0 additions & 284 deletions workflow/repo_data/config/config.validation.yaml

This file was deleted.

51 changes: 51 additions & 0 deletions workflow/repo_data/config/policy_constraints/sector_co2_limits.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
year,state,sector,co2_limit_mmt
2030,USA,all,9710
2030,AL,all,108.4
2030,AZ,all,83
2030,AR,all,62
2030,CA,all,324
2030,CO,all,85.4
2030,CT,all,36.6
2030,DE,all,13
2030,DC,all,2.5
2030,FL,all,226.3
2030,GA,all,124.1
2030,ID,all,20.5
2030,IL,all,184.2
2030,IN,all,166.4
2030,IA,all,73.1
2030,KS,all,59.8
2030,KY,all,111.3
2030,LA,all,188.6
2030,ME,all,14.4
2030,MD,all,52.6
2030,MA,all,56.1
2030,MI,all,147.8
2030,MN,all,83.2
2030,MS,all,63.1
2030,MO,all,117
2030,MT,all,28.5
2030,NE,all,47.2
2030,NV,all,39.4
2030,NH,all,13.3
2030,NJ,all,89.1
2030,NM,all,45.9
2030,NY,all,156
2030,NC,all,115.6
2030,ND,all,56.5
2030,OH,all,194
2030,OK,all,87.8
2030,OR,all,38.5
2030,PA,all,213.5
2030,RI,all,10.6
2030,SC,all,69.3
2030,SD,all,15.2
2030,TN,all,92.7
2030,TX,all,663.5
2030,UT,all,62.1
2030,VT,all,5.6
2030,VA,all,98
2030,WA,all,73.8
2030,WV,all,88.4
2030,WI,all,92.5
2030,WY,all,54.6
Binary file not shown.
24 changes: 24 additions & 0 deletions workflow/repo_data/costs/additional_costs.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
technology,parameter,value,unit,source,further_description
gas,co2_emissions,0.18058,tCO2/MWh_th,EIA,https://www.eia.gov/environment/emissions/co2_vol_mass.php
coal,co2_emissions,0.3453,tCO2/MWh_th,EIA,https://www.eia.gov/environment/emissions/co2_vol_mass.php
oil,co2_emissions,0.34851,tCO2/MWh_th,EIA,https://www.eia.gov/environment/emissions/co2_vol_mass.php
direct firing gas,FOM,1.1818,%/year,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",312.a Direct firing Natural Gas: Fixed O&M
direct firing gas,VOM,0.2794,EUR/MWh,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",312.a Direct firing Natural Gas: Variable O&M
direct firing gas,efficiency,1,per unit,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx","312.a Direct firing Natural Gas: Total efficiency,net,annual average"
direct firing gas,investment,15.105,EUR/kW,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",312.a Direct firing Natural Gas: Nominal investment
direct firing gas,lifetime,15,years,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",312.a Direct firing Natural Gas: Technical lifetime
central coal CHP,FOM,1.6316,%/year,"Danish Energy Agency,technology_data_for_el_and_dh.xlsx",01 Coal CHP: Fixed O&M
central coal CHP,VOM,3.005,EUR/MWh,"Danish Energy Agency,technology_data_for_el_and_dh.xlsx",01 Coal CHP: Variable O&M
central coal CHP,efficiency,0.52,per unit,"Danish Energy Agency,technology_data_for_el_and_dh.xlsx","01 Coal CHP: Electricity efficiency,condensation mode,net"
central coal CHP,investment,1968.795,EUR/kW,"Danish Energy Agency,technology_data_for_el_and_dh.xlsx",01 Coal CHP: Nominal investment
central coal CHP,lifetime,25,years,"Danish Energy Agency,technology_data_for_el_and_dh.xlsx",01 Coal CHP: Technical lifetime
industrial heat pump high temperature,FOM,0.0931,%/year,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.b High temp. hp Up to 150: Fixed O&M
industrial heat pump high temperature,VOM,3.2224,EUR/MWh,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.b High temp. hp Up to 150: Variable O&M
industrial heat pump high temperature,efficiency,3.05,per unit,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx","302.b High temp. hp Up to 150: Total efficiency,net,annual average"
industrial heat pump high temperature,investment,941.1019,EUR/kW,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.b High temp. hp Up to 150: Nominal investment
industrial heat pump high temperature,lifetime,20,years,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.b High temp. hp Up to 150: Technical lifetime
industrial heat pump medium temperature,FOM,0.1117,%/year,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.a High temp. hp Up to 125 C: Fixed O&M
industrial heat pump medium temperature,VOM,3.2224,EUR/MWh,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.a High temp. hp Up to 125 C: Variable O&M
industrial heat pump medium temperature,efficiency,2.7,per unit,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx","302.a High temp. hp Up to 125 C: Total efficiency,net,annual average"
industrial heat pump medium temperature,investment,784.2516,EUR/kW,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.a High temp. hp Up to 125 C: Nominal investment
industrial heat pump medium temperature,lifetime,20,years,"Danish Energy Agency,technology_data_for_industrial_process_heat.xlsx",302.a High temp. hp Up to 125 C: Technical lifetime
59 changes: 59 additions & 0 deletions workflow/repo_data/costs/efs_icev_costs.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
technology,parameter,value,unit,year,source,further description
Light Duty Cars ICEV,investment,23389,Capital Cost (2016$),2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 4 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,investment,25104,Capital Cost (2016$),2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 4 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,investment,26792,Capital Cost (2016$),2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 4 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,investment,26918,Capital Cost (2016$),2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 4 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,investment,26918,Capital Cost (2016$),2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 4 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,investment,28061,Capital Cost (2016$),2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 5 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,investment,29606,Capital Cost (2016$),2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 5 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,investment,31275,Capital Cost (2016$),2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 5 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,investment,31421,Capital Cost (2016$),2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 5 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,investment,31421,Capital Cost (2016$),2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 5 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,55000,Capital Cost (2016$),2017,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,56072,Capital Cost (2016$),2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,57679,Capital Cost (2016$),2025,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,59188,Capital Cost (2016$),2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,60029,Capital Cost (2016$),2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,investment,61126,Capital Cost (2016$),2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 8 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,120000,Capital Cost (2016$),2017,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,120908,Capital Cost (2016$),2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,122271,Capital Cost (2016$),2025,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,128470,Capital Cost (2016$),2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,129377,Capital Cost (2016$),2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,investment,129886,Capital Cost (2016$),2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 9 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2017,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2025,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Buses ICEV,investment,435000,Capital Cost (2016$),2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 11 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,efficiency,25.9,MPGe,2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 6 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,efficiency,30.7,MPGe,2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 6 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,efficiency,36,MPGe,2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 6 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,efficiency,39.9,MPGe,2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 6 at https://data.nrel.gov/submissions/93
Light Duty Cars ICEV,efficiency,42.5,MPGe,2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 6 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,efficiency,16.35,MPGe,2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 7 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,efficiency,18.69,MPGe,2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 7 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,efficiency,20.47,MPGe,2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 7 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,efficiency,24.35,MPGe,2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 7 at https://data.nrel.gov/submissions/93
Light Duty Trucks ICEV,efficiency,25.06,MPGe,2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 7 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,7.61,MPGe,2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,7.71,MPGe,2017,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,8.02,MPGe,2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,9.62,MPGe,2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,11.1,MPGe,2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Medium Duty Trucks ICEV,efficiency,11.51,MPGe,2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,5.33,MPGe,2015,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,5.44,MPGe,2017,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,5.67,MPGe,2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,6.61,MPGe,2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,7.41,MPGe,2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Heavy Duty Trucks ICEV,efficiency,7.6,MPGe,2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 10 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,3.45,MPGe,2016,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,3.67,MPGe,2020,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,3.92,MPGe,2025,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,4.28,MPGe,2030,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,4.61,MPGe,2035,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,4.8,MPGe,2040,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,4.88,MPGe,2045,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Buses ICEV,efficiency,4.92,MPGe,2050,https://www.nrel.gov/docs/fy18osti/70485.pdf,Table 12 at https://data.nrel.gov/submissions/93
Loading

0 comments on commit a056649

Please sign in to comment.