Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/source/configtables/electricity.csv
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ demand_response:,,,Settings to activate and configure demand response
,,,
imports:,,,Configure electric imports from regions outside of model scope
-- enable,,``true`` or ``false``,Enable electric imports
-- representation,,``store`` or ``generator``,"How out-of-footprint supply is represented. ``store`` (default) puts a bottomless ``Store`` behind each external zone and PRICES the interface ``Link``. ``generator`` puts a priced import ``Generator`` (carrier ``unspecified_imports``, carrying ``co2_emissions``) on the external bus, leaves the interface link unpriced, and moves the CPUC contracted out-of-state units behind the boundary so their deliveries are metered against ``volume_limit`` and the interface capacity."
-- costs,$/MWh,``wholesale`` or ``<name of carrier>`` or ``float``,Cost of electric imports from regions outside of model scope. ``Wholesale`` will use in monthly wholesales electric prices. ``float`` will assign a user specified value. ``carrier`` will take average marginal cost of the carrier.
-- co2_emissions,CO2/MWh,``float``,CO2 emissions of electric imports from regions outside of model scope.
-- capacity_limit,,``true`` or ``false``,Enable capacity limit for electric imports from regions outside of model scope
Expand Down
8 changes: 2 additions & 6 deletions workflow/repo_data/config/config.california.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ electricity:
profile: servm
imports:
enable: true
representation: generator # CPUC out-of-state contracts sit BEHIND the WECC boundary, so their deliveries are metered against the import cap
costs: 60 # flat $/MWh for unspecified imports; the 'wholesale' EIA series is retail-priced (see issue #807)
volume_limit: 25 # % of annual CA load
balancing_period: year
exports:
Expand All @@ -69,12 +71,6 @@ clustering:
aggregation_strategies:
generators:
p_min_pu: 'capacity_weighted_average' # keep the UC feasibility invariant through clustering
# CPUC out-of-state units (REMOTE_PREFIX "R ") are attached to CA buses with
# p_nom_extendable=False, while in-state units of the same carrier are extendable
# because their carrier is in extendable_carriers.Generator. Clustering groups
# one-ports by (bus, carrier), so those two land in one group and PyPSA's default
# `consense` raises. Same situation `committable: any` already handles in the base.
p_nom_extendable: any
# Hydro units disagree on up_time_before ({0, 1}). `max` keeps the integer
# dtype (capacity_weighted_average would yield a float) and is the
# UC-feasibility-safe direction: the cluster inherits the longest online
Expand Down
1 change: 1 addition & 0 deletions workflow/repo_data/config/config.default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ electricity:
# neighbors using historical EIA interchange data.
imports:
enable: false
representation: store # store = priced links off a bottomless Store; generator = priced generator (+ CPUC contracted units) behind an unpriced interface link
costs: wholesale # wholesale | carrier | float — how imported energy is priced
co2_emissions: 0.428 # tCO2/MWh assigned to imported energy
capacity_limit: true # cap import power to historical maxima
Expand Down
11 changes: 9 additions & 2 deletions workflow/rules/build_electricity.smk
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,9 @@ rule add_electricity:
planning_horizons=config["scenario"]["planning_horizons"],
eia_api=config["api"]["eia"],
remote_contracted=config["electricity"].get("remote_contracted_resources", {}),
imports_representation=config_provider(
"electricity", "imports", "representation", default="store"
),
input:
unpack(dynamic_fuel_price_files),
unpack(remote_contracted_resource_files),
Expand Down Expand Up @@ -870,7 +873,11 @@ rule add_electricity:
else []
),
output:
NETWORKS + "{interconnect}/elec_s{simpl}_l_pp.pkl",
network=NETWORKS + "{interconnect}/elec_s{simpl}_l_pp.pkl",
# CPUC contracted out-of-state units, serialized for attachment behind
# the model boundary when electricity.imports.representation == generator.
# Always declared; a sentinel is written otherwise.
remote_units=NETWORKS + "{interconnect}/remote_units_s{simpl}.pkl",
log:
LOGS + "{interconnect}/elec_s{simpl}_add_electricity.log",
benchmark:
Expand Down Expand Up @@ -1064,6 +1071,7 @@ rule add_extra_components:
+ "{interconnect}/regions_onshore_s{simpl}_{clusters}.geojson",
flowgates=flowgates_for_extra_components,
reeds_memberships="repo_data/ReEDS_Constraints/membership.csv",
remote_units=NETWORKS + "{interconnect}/remote_units_s{simpl}.pkl",
co2_storage=(
CO2 + "{interconnect}/co2_storage_s{simpl}_{clusters}.csv"
if config["scenario"]["sector"] == "" and config["co2"]["storage"] is True
Expand All @@ -1073,7 +1081,6 @@ rule add_extra_components:
params:
retirement=config["electricity"].get("retirement", "technical"),
demand_response=config["electricity"].get("demand_response", {}),
trim_network=config_provider("model_topology", "trim", default=False),
imports=config_provider("electricity", "imports", default={}),
exports=config_provider("electricity", "exports", default={}),
weather_year=config_provider("renewable_weather_years"),
Expand Down
14 changes: 11 additions & 3 deletions workflow/schemas/config.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ properties:
transmission_network: {enum: [reeds, tamu]}
topological_boundaries: {enum: [county, reeds_zone, state]}
interface_transmission_limits: {type: boolean}
trim: {type: boolean}
include:
description: >
Zone subset for footprint-scoped runs. null means "no filter"; see the
Expand Down Expand Up @@ -285,7 +284,12 @@ properties:
additionalProperties: false
properties:
enable: {type: boolean}
costs: {enum: [wholesale, carrier, float]}
representation: {enum: [store, generator]}
costs:
description: >
'wholesale' (EIA price series), a carrier name (that fleet's
average marginal cost), or a flat number in $/MWh.
type: [string, number]
co2_emissions: {type: number}
capacity_limit: {type: boolean}
volume_limit: {}
Expand All @@ -296,7 +300,11 @@ properties:
additionalProperties: false
properties:
enable: {type: boolean}
costs: {enum: [wholesale, carrier, float]}
costs:
description: >
'wholesale' (EIA price series), a carrier name (that fleet's
average marginal cost), or a flat number in $/MWh.
type: [string, number]
capacity_limit: {type: boolean}
volume_limit: {}
balancing_period: {enum: [day, week, month, year]}
Expand Down
Loading
Loading