Skip to content

Commit dc60111

Browse files
authored
Merge pull request #445 from ktehranchi/kt/tx_county_cost_fix
docs updates & multiple fixes
2 parents 3a37b81 + ab62247 commit dc60111

File tree

17 files changed

+345
-338
lines changed

17 files changed

+345
-338
lines changed
179 KB
Loading

docs/source/config-spatial.md

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ PyPSA-USA allows for flexible configuration of the spatial scope of your energy
99

1010
### Example: Modeling California
1111

12-
To create a model that includes only California, you can specify the relevant ReEDS zone IDs (p8-11) as shown below. This will limit the spatial scope to the specified regions within California.
12+
To create a model that includes only California, you can specify the relevant ReEDS zone IDs (p8-11) as shown below. This will limit the spatial scope to the specified regions within California. Your interconnect could be set to `western` or `usa`.
1313

1414
```yaml
1515
model_topology:
@@ -19,48 +19,62 @@ model_topology:
1919
2020
Alternatively, you can use the reeds_state: 'CA' option to achieve the same result by specifying the entire state.
2121
22-
<!-- ### Custom Aggregation Example
23-
If you'd like to create custom nodal aggregations, you can use the model_topology: aggregate: option. For instance, to cluster Arizona, Nevada, and New Mexico into a single region (WECC_SW), you would configure the model as follows:
22+
## Configuring Resource Resolution
23+
PyPSA-USA allows you to independently configure the resolution of resource zones from the transmission network. You can control this using the simpl and clusters parameters in the configuration file.
2424
25+
For example, if you want a transmission network with 10 nodes and a resource model with 100 nodes, you would configure it as follows:
2526
2627
```yaml
27-
model_topology:
28-
aggregate:
29-
reeds_state:
30-
WECC_SW : ['AZ', 'NV', 'NM']
28+
scenario:
29+
clusters: [10m]
30+
simpl: [100]
3131
```
3232
33-
This configuration will dissolve the borders between these states, effectively creating a copper-plate network where resources can be clustered and shared across the region. -->
34-
35-
## Configuring Spatial Resolution
33+
This setup results in a model with 10 transmission nodes and 100 distinct resource zones, allowing for more granular modeling of renewable resource distribution while keeping the transmission network simplified.
3634
37-
PyPSA-USA gives you control over the spatial resolution of your transmission and resource networks, allowing for detailed or aggregated views depending on your modeling needs.
35+
## Configuring Transmission Resolution
3836
3937
### Transmission Network Selection
40-
You can specify the transmission network you want to use by setting the model_topology: transmission_network: option. There are two available options:
38+
You can specify the transmission network you want to use by setting the `model_topology: transmission_network:` option. There are two available options:
4139

40+
- 'reeds': The ReEDS NARIS networks.
4241
- 'tamu': The synthetic BE-TAMU nodal network.
43-
- 'reeds': The ReEDS zonal network.
44-
45-
### Configuring Node Clusters
46-
When using the ReEDS network, you need to specify the number of clusters (nodes) for your modeled interconnection. The number of nodes for each zone is **detailed in the table below**. If you're working with custom configurations, PyPSA-USA will notify you during the cluster_network stage, indicating the correct number of nodes to set in the clusters configuration.
4742

48-
### Resource Group Resolution
49-
PyPSA-USA allows you to independently configure the resolution of resource zones from the transmission network. You can control this using the simpl and clusters parameters in the configuration file.
43+
When selecting between the three ReEDS NARIS networks, you will need to also specify the `model_topology: topological_boundaries:`. Currently you can set either `county` or `reeds_zone`. To use the FERC 1000 regions, you will need to use the custom network topologies described in the example below.
5044

51-
For example, if you want a transmission network with 10 nodes and a resource model with 100 nodes, you would configure it as follows:
45+
### Transmission Network Resolution
5246

53-
```yaml
54-
scenario:
55-
clusters: [10m]
56-
simpl: [100]
57-
```
58-
This setup results in a model with 10 transmission nodes and 100 distinct resource zones, allowing for more granular modeling of renewable resource distribution while keeping the transmission network simplified.
47+
IF you are using the TAMU/BE network, you can flexibly set an arbitrary number of clusters between the min and max number of nodes. If using a ReEDS NARIS network, you need to specify the minimum number of clusters (nodes) for your modeled interconnection. The number of nodes for each zone is **detailed in the table below**.
5948

49+
If you're working with custom configurations, PyPSA-USA will notify you during the cluster_network stage, indicating the correct number of nodes to set in the clusters configuration.
6050

6151
```{eval-rst}
6252
.. csv-table::
6353
:header-rows: 1
6454
:widths: 22,22,33
6555
:file: datatables/transmission_nodes.csv
6656
```
57+
58+
#### Example: Meshed ReEDS NARIS WECC Topology
59+
60+
If you would like to mesh the three ReEDS NARIS networks you can do so by using the `model_topology: aggregate:` option. For instance, to create a model where California is represented at a county level resolution, but Non-CA WECC areas are represented at the FERC 1000 level, you would configure the model as follows:
61+
62+
63+
```yaml
64+
scenario:
65+
interconnect: [western]
66+
clusters: [87]
67+
simpl: [380] # can be set differently based on number of resource zones you'd like to keep
68+
69+
70+
model_topology:
71+
transmission_network: 'reeds'
72+
topological_boundaries: 'county'
73+
interface_transmission_limits: false
74+
include:
75+
# nothing specified here since we are modeling the entire WECC
76+
aggregate:
77+
trans_grp: ['NorthernGrid_South', 'NorthernGrid_West', 'NorthernGrid_East', 'WestConnect_North','WestConnect_South']
78+
```
79+
80+
This configuration will copper plate the Non-CA regions listed under `trans_grp`, effectively creating a copper-plate network where resources can be clustered and shared across the region. Using these custom aggregation requires information on the region memberships which you can find in `workflow/repo_data/ReEDS_Constraints/membership.csv`.

docs/source/config-wildcards.md

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,35 +48,28 @@ The `{ll}` wildcard specifies what limits on
4848
line expansion are set for the optimisation model.
4949
It is handled in the rule :mod:`prepare_network`.
5050

51-
The wildcard, in general, consists of two parts:
51+
We reccomend using the line volume limit for constraining
52+
transission expansion. Use ``lv`` (for setting a limit on line volume)
5253

53-
1. The first part can be
54-
``v`` (for setting a limit on line volume) or
55-
``c`` (for setting a limit on line cost)
54+
After ``lv`` you can specify two type of limits:
5655

57-
2. The second part can be
5856
``opt`` or a float bigger than one (e.g. 1.25).
5957

6058
(a) If ``opt`` is chosen line expansion is optimised
61-
according to its capital cost
62-
(where the choice ``v`` only considers overhead costs for HVDC transmission lines, while
63-
``c`` uses more accurate costs distinguishing between
64-
overhead and underwater sections and including inverter pairs).
59+
according to its capital cost.
6560

6661
(b) ``v1.25`` will limit the total volume of line expansion
6762
to 25 % of currently installed capacities weighted by
6863
individual line lengths; investment costs are neglected.
6964

70-
(c) ``c1.25`` will allow to build a transmission network that
71-
costs no more than 25 % more than the current system.
7265

7366
(opts)=
7467
## The `{opts}` wildcard
7568

7669
The `{opts}` wildcard is used for electricity-only studies. It triggers
7770
optional constraints, which are activated in either :mod:`prepare_network` or
7871
the :mod:`solve_network` step. It may hold multiple triggers separated by `-`,
79-
i.e. `Co2L-3H` contains the `Co2L` trigger and the `3H` switch.
72+
i.e. `REM-3H` contains the `REM` regional emissions limit trigger and the `3H` switch.
8073

8174
The REM, SAFER, RPS can be defined using either the reeds zone name 'p##"
8275
the state code (eg, TX, CA, MT), pypsa-usa interconnect name (western, eastern, texas, usa),

docs/source/configtables/clustering.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ feature,str," {'solar+onwind-time', 'solar+onwind-cap', 'solar-time', 'solar-cap
99
aggregation_strategies:,,,
1010
table --> {key},str,"{'mean','max','min',etc}","Specifiy the method of aggregating fields within the generators, buses tables. "
1111
focus_weights:,,,
12-
region_name',float,,Specify the proportion of nodes to be attributed to a given zone in the form (California: 0.5) for half of all nodes to be located in California
12+
region_name',float,,Specify the proportion of nodes to be attributed to a given zone in the form (California: 0.5) for half of all nodes to be located in California. Only used with TAMU Network
Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
,Unit,Values,Description
22
conventional_carriers,--,"Any subset of {nuclear, oil, OCGT, CCGT, coal, geothermal, biomass}","List of conventional power plants to include in the model from ``resources/powerplants.csv``. If an included carrier is also listed in ``extendable_carriers``, the capacity is taken as a lower bound."
33
renewable_carriers,--,"Any subset of {solar, onwind, offwind-ac, offwind-dc, hydro}",List of renewable generators to include in the model.
4-
voltage_simplified,kV,int,Voltage level to simplify network to in rule ``simplify_network``
5-
gaslimit,MWhth,float or false,Global gas usage limit (Set False for development)
6-
co2limit,:math:`t_{CO_2-eq}/a`,float,Cap on total annual system carbon dioxide emissions
7-
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.
84
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."""
95
,,,
106
operational_reserve:,,,Settings for reserve requirements following `GenX <https://genxproject.github.io/GenX.jl/stable/Model_Reference/core/#Operational-Reserves>`_
11-
--activate,bool,true or false,Whether to take operational reserve requirements into account during optimisation
12-
--epsilon_load,--,float,share of total load
13-
--epsilon_vres,--,float,share of total renewable supply
14-
--contingency,MW,float,fixed reserve capacity
7+
#NAME?,bool,true or false,Whether to take operational reserve requirements into account during optimisation
8+
#NAME?,--,float,share of total load
9+
#NAME?,--,float,share of total renewable supply
10+
#NAME?,MW,float,fixed reserve capacity
1511
,,,
1612
max_hours:,,,
1713
battery,h,float,Maximum state of charge capacity of the battery in terms of hours at full output capacity ``p_nom``. Cf. `PyPSA documentation <https://pypsa.readthedocs.io/en/latest/components.html#storage-unit>`_.
@@ -23,14 +19,14 @@ Store,--,Any subset of {``battery``},Adds extendable storage units (battery and/
2319
Links,--,Any subset of {},Adds extendable linksat every connection where there are lines or HVDC links without capacity limits and with zero initial capacity. Hydrogen pipelines require hydrogen storage to be modelled as ``Store``.
2420
,,,
2521
demand:,,,
26-
--profile,--,"One of {``efs``, ``eia``}",Datasource for electrical load data. ``EFS`` pulls future state level electrical demand data. ``EIA`` pulls historical balancing level electrical demand dataa.
27-
--scale,--,"One of {``efs``, ``aeo``}, or a float",(UNDER DEVELOPMENT) Used to scale the demand profile data. ``AEO`` will scale according to demand projections from the Annual Energy Outlook. ``EFS`` will scale according to growth rates from the Electrification Futures Study. Or can sclae according to a user defined value.
28-
--disaggregation,--,One of {``pop``},Method to dissagreagate load data. ``pop`` will dissagregate based on population from Breakthrough Energy.
22+
#NAME?,--,"One of {``efs``, ``eia``}",Datasource for electrical load data. ``EFS`` pulls future state level electrical demand data. ``EIA`` pulls historical balancing level electrical demand dataa.
23+
#NAME?,--,"One of {``efs``, ``aeo``}, or a float",(UNDER DEVELOPMENT) Used to scale the demand profile data. ``AEO`` will scale according to demand projections from the Annual Energy Outlook. ``EFS`` will scale according to growth rates from the Electrification Futures Study. Or can sclae according to a user defined value.
24+
#NAME?,--,One of {``pop``},Method to dissagreagate load data. ``pop`` will dissagregate based on population from Breakthrough Energy.
2925
scenario:,,,
30-
--efs_case,--,"One of {``reference``, ``medium``, ``high``}",(UNDER DEVELOPMENT) Extracts EFS data according to level of adoption
31-
--efs_speed,--,"One of {``slow``, ``moderate``, ``fast``}",(UNDER DEVELOPMENT) Extracts EFS data according to speed of electrification
32-
--aeo,--,One of the AEO scenarios `here <https://www.eia.gov/outlooks/aeo/data/browser/>`_,(UNDER DEVELOPMENT) Scales future demand according to the AEO scenario
26+
#NAME?,--,"One of {``reference``, ``medium``, ``high``}",(UNDER DEVELOPMENT) Extracts EFS data according to level of adoption
27+
#NAME?,--,"One of {``slow``, ``moderate``, ``fast``}",(UNDER DEVELOPMENT) Extracts EFS data according to speed of electrification
28+
#NAME?,--,One of the AEO scenarios `here <https://www.eia.gov/outlooks/aeo/data/browser/>`_,(UNDER DEVELOPMENT) Scales future demand according to the AEO scenario
3329
,,,
3430
autarky,,,
35-
--enable,bool,``true`` or ``false``,Require each node to be autarkic by removing all lines and links.
36-
--by_country,bool,``true`` or ``false``,Require each region to be autarkic by removing all cross-border lines and links. ``electricity: autarky`` must be enabled.
31+
#NAME?,bool,``true`` or ``false``,Require each node to be autarkic by removing all lines and links.
32+
#NAME?,bool,``true`` or ``false``,Require each region to be autarkic by removing all cross-border lines and links. ``electricity: autarky`` must be enabled.

docs/source/configtables/lines.csv

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@ types,--,"Values should specify a `line type in PyPSA <https://pypsa.readthedocs
33
s_max_pu,--,"Value in [0.,1.]",Correction factor for line capacities (`s_nom`) to approximate :math:`N-1` security and reserve capacity for reactive power flows
44
s_nom_max,MW,float,Global upper limit for the maximum capacity of each extendable line.
55
max_extension,MW,float,Upper limit for the extended capacity of each extendable line.
6-
length_factor,--,float,Correction factor to account for the fact that buses are *not* connected by lines through air-line distance.
7-
interface_transmission_limits, --, true or false, Activate the Interface Transmission Limits (ITL) zones limits.
6+
length_factor,--,float,Correction factor to account for the fact that buses are *not* connected by lines through air-line distance. Only used in TAMU network.

docs/source/configtables/opts.csv

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
Trigger, Description, Definition, Status
22
``nH``; i.e. ``2H``-``6H``, Resample the time-resolution by averaging over every ``n`` snapshots, ``prepare_network``: `average_every_nhours() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L110>`_ and its `caller <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L146>`__), In active use
33
``nSEG``; e.g. ``4380SEG``, Apply time series segmentation with `tsam <https://tsam.readthedocs.io/en/latest/index.html>`_ package to ``n`` adjacent snapshots of varying lengths based on capacity factors of varying renewables hydro inflow and load., ``prepare_network``: apply_time_segmentation(),In active use
4-
``Co2L``, Add an overall absolute carbon-dioxide emissions limit configured in ``electricity: co2limit``. If a float is appended an overall emission limit relative to the emission level given in ``electricity: co2base`` is added (e.g. ``Co2L0.05`` limits emissisions to 5% of what is given in ``electricity: co2base``), ``prepare_network``: `add_co2limit() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L19>`_ and its `caller <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L154>`__, In active use
54
``REM``, Add regional carbon-dioxide emissions limits configured in ``electricity: regional_Co2_limits``. These can be specified in the file linked at ``electricity: regional_Co2_limits`` in the configuration. File defaults to ``repo_data/regional_co2_limits.csv``., ``prepare_network``: `add_co2limit() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L19>`_ and its `caller <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/prepare_network.py#L154>`__, In active use
65
``RPS``,Add Renewable Portfolio Standard (RPS) constraints to shares of generator production (MWh) per carrier for individual countries. Standards can be set for single carriers or groups of carriers. Each constraint can be designated for a specified planning horizon in multi-period models. Opts and path for portfolio_standards.csv must be defined, ``solve_network``, In active use
76
``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
87
``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
98
``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
109
``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
11-
``EQ``," ""Require each country or node to on average produce a minimal share of its total consumption itself. Example: ``EQ0.5c`` demands each country to produce on average at least 50% of its consumption; ``EQ0.5`` demands each node to produce on average at least 50% of its consumption.""", ``solve_network``, In active use
12-
``ATK``," ""Require each node to be autarkic. Example: ``ATK`` removes all lines and links. ``ATKc`` removes all cross-border lines and links.""", ``prepare_network``, In active use
13-
``BAU``, Add a per-``carrier`` minimal overall capacity; i.e. at least ``40GW`` of ``OCGT`` in Europe; configured in ``electricity: BAU_mincapacities``, ``solve_network``: `add_opts_constraints() <https://github.com/PyPSA/pypsa-eur/blob/6b964540ed39d44079cdabddee8333f486d0cd63/scripts/solve_network.py#L66>`__, Untested
14-
``carrier+{c|p|m}factor``,"Alter the capital cost (``c``), installable potential (``p``) or marginal costs (``m``) of a carrier by a factor. Example: ``solar+c0.5`` reduces the capital cost of solar to 50\% of original values.", ``prepare_network``, In active use
1510
``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

0 commit comments

Comments
 (0)