Merge branch 'master' into validation
This commit is contained in:
commit
f90ef3bb73
@ -39,7 +39,7 @@ repos:
|
|||||||
|
|
||||||
# Make docstrings PEP 257 compliant
|
# Make docstrings PEP 257 compliant
|
||||||
- repo: https://github.com/PyCQA/docformatter
|
- repo: https://github.com/PyCQA/docformatter
|
||||||
rev: v1.7.3
|
rev: v1.7.4
|
||||||
hooks:
|
hooks:
|
||||||
- id: docformatter
|
- id: docformatter
|
||||||
args: ["--in-place", "--make-summary-multi-line", "--pre-summary-newline"]
|
args: ["--in-place", "--make-summary-multi-line", "--pre-summary-newline"]
|
||||||
|
@ -274,12 +274,14 @@ lines:
|
|||||||
380.: "Al/St 240/40 4-bundle 380.0"
|
380.: "Al/St 240/40 4-bundle 380.0"
|
||||||
s_max_pu: 0.7
|
s_max_pu: 0.7
|
||||||
s_nom_max: .inf
|
s_nom_max: .inf
|
||||||
|
max_extension: .inf
|
||||||
length_factor: 1.25
|
length_factor: 1.25
|
||||||
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||||
|
|
||||||
links:
|
links:
|
||||||
p_max_pu: 1.0
|
p_max_pu: 1.0
|
||||||
p_nom_max: .inf
|
p_nom_max: .inf
|
||||||
|
max_extension: .inf
|
||||||
include_tyndp: true
|
include_tyndp: true
|
||||||
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||||
|
|
||||||
|
@ -2,5 +2,6 @@
|
|||||||
types,--,"Values should specify a `line type in PyPSA <https://pypsa.readthedocs.io/en/latest/components.html#line-types>`_. Keys should specify the corresponding voltage level (e.g. 220., 300. and 380. kV)","Specifies line types to assume for the different voltage levels of the ENTSO-E grid extraction. Should normally handle voltage levels 220, 300, and 380 kV"
|
types,--,"Values should specify a `line type in PyPSA <https://pypsa.readthedocs.io/en/latest/components.html#line-types>`_. Keys should specify the corresponding voltage level (e.g. 220., 300. and 380. kV)","Specifies line types to assume for the different voltage levels of the ENTSO-E grid extraction. Should normally handle voltage levels 220, 300, and 380 kV"
|
||||||
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"
|
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"
|
||||||
s_nom_max,MW,"float","Global upper limit for the maximum capacity of each extendable line."
|
s_nom_max,MW,"float","Global upper limit for the maximum capacity of each extendable line."
|
||||||
|
max_extension,MW,"float","Upper limit for the extended capacity of each extendable line."
|
||||||
length_factor,--,float,"Correction factor to account for the fact that buses are *not* connected by lines through air-line distance."
|
length_factor,--,float,"Correction factor to account for the fact that buses are *not* connected by lines through air-line distance."
|
||||||
under_construction,--,"One of {'zero': set capacity to zero, 'remove': remove completely, 'keep': keep with full capacity}","Specifies how to handle lines which are currently under construction."
|
under_construction,--,"One of {'zero': set capacity to zero, 'remove': remove completely, 'keep': keep with full capacity}","Specifies how to handle lines which are currently under construction."
|
||||||
|
|
@ -1,5 +1,6 @@
|
|||||||
,Unit,Values,Description
|
,Unit,Values,Description
|
||||||
p_max_pu,--,"Value in [0.,1.]","Correction factor for link capacities ``p_nom``."
|
p_max_pu,--,"Value in [0.,1.]","Correction factor for link capacities ``p_nom``."
|
||||||
p_nom_max,MW,"float","Global upper limit for the maximum capacity of each extendable DC link."
|
p_nom_max,MW,"float","Global upper limit for the maximum capacity of each extendable DC link."
|
||||||
|
max_extension,MW,"float","Upper limit for the extended capacity of each extendable DC link."
|
||||||
include_tyndp,bool,"{'true', 'false'}","Specifies whether to add HVDC link projects from the `TYNDP 2018 <https://tyndp.entsoe.eu/tyndp2018/projects/>`_ which are at least in permitting."
|
include_tyndp,bool,"{'true', 'false'}","Specifies whether to add HVDC link projects from the `TYNDP 2018 <https://tyndp.entsoe.eu/tyndp2018/projects/>`_ which are at least in permitting."
|
||||||
under_construction,--,"One of {'zero': set capacity to zero, 'remove': remove completely, 'keep': keep with full capacity}","Specifies how to handle lines which are currently under construction."
|
under_construction,--,"One of {'zero': set capacity to zero, 'remove': remove completely, 'keep': keep with full capacity}","Specifies how to handle lines which are currently under construction."
|
||||||
|
|
@ -32,6 +32,10 @@ Upcoming Release
|
|||||||
|
|
||||||
* Remove ``vresutils`` dependency.
|
* Remove ``vresutils`` dependency.
|
||||||
|
|
||||||
|
* Added configuration option ``lines: max_extension:`` and ``links:
|
||||||
|
max_extension:``` to control the maximum capacity addition per line or link in
|
||||||
|
MW.
|
||||||
|
|
||||||
* Add option to include a piecewise linear approximation of transmission losses,
|
* Add option to include a piecewise linear approximation of transmission losses,
|
||||||
e.g. by setting ``solving: options: transmission_losses: 2`` for an
|
e.g. by setting ``solving: options: transmission_losses: 2`` for an
|
||||||
approximation with two tangents.
|
approximation with two tangents.
|
||||||
|
@ -251,7 +251,22 @@ def enforce_autarky(n, only_crossborder=False):
|
|||||||
n.mremove("Link", links_rm)
|
n.mremove("Link", links_rm)
|
||||||
|
|
||||||
|
|
||||||
def set_line_nom_max(n, s_nom_max_set=np.inf, p_nom_max_set=np.inf):
|
def set_line_nom_max(
|
||||||
|
n,
|
||||||
|
s_nom_max_set=np.inf,
|
||||||
|
p_nom_max_set=np.inf,
|
||||||
|
s_nom_max_ext=np.inf,
|
||||||
|
p_nom_max_ext=np.inf,
|
||||||
|
):
|
||||||
|
if np.isfinite(s_nom_max_ext) and s_nom_max_ext > 0:
|
||||||
|
logger.info(f"Limiting line extensions to {s_nom_max_ext} MW")
|
||||||
|
n.lines["s_nom_max"] = n.lines["s_nom"] + s_nom_max_ext
|
||||||
|
|
||||||
|
if np.isfinite(p_nom_max_ext) and p_nom_max_ext > 0:
|
||||||
|
logger.info(f"Limiting line extensions to {p_nom_max_ext} MW")
|
||||||
|
hvdc = n.links.index[n.links.carrier == "DC"]
|
||||||
|
n.links.loc[hvdc, "p_nom_max"] = n.links.loc[hvdc, "p_nom"] + p_nom_max_ext
|
||||||
|
|
||||||
n.lines.s_nom_max.clip(upper=s_nom_max_set, inplace=True)
|
n.lines.s_nom_max.clip(upper=s_nom_max_set, inplace=True)
|
||||||
n.links.p_nom_max.clip(upper=p_nom_max_set, inplace=True)
|
n.links.p_nom_max.clip(upper=p_nom_max_set, inplace=True)
|
||||||
|
|
||||||
@ -356,8 +371,10 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
set_line_nom_max(
|
set_line_nom_max(
|
||||||
n,
|
n,
|
||||||
s_nom_max_set=snakemake.params.lines.get("s_nom_max,", np.inf),
|
s_nom_max_set=snakemake.params.lines.get("s_nom_max", np.inf),
|
||||||
p_nom_max_set=snakemake.params.links.get("p_nom_max,", np.inf),
|
p_nom_max_set=snakemake.params.links.get("p_nom_max", np.inf),
|
||||||
|
s_nom_max_ext=snakemake.params.lines.get("max_extension", np.inf),
|
||||||
|
p_nom_max_ext=snakemake.params.links.get("max_extension", np.inf),
|
||||||
)
|
)
|
||||||
|
|
||||||
if "ATK" in opts:
|
if "ATK" in opts:
|
||||||
|
@ -3056,7 +3056,6 @@ def maybe_adjust_costs_and_potentials(n, opts):
|
|||||||
logger.info(f"changing {attr} for {carrier} by factor {factor}")
|
logger.info(f"changing {attr} for {carrier} by factor {factor}")
|
||||||
|
|
||||||
|
|
||||||
# TODO this should rather be a config no wildcard
|
|
||||||
def limit_individual_line_extension(n, maxext):
|
def limit_individual_line_extension(n, maxext):
|
||||||
logger.info(f"Limiting new HVAC and HVDC extensions to {maxext} MW")
|
logger.info(f"Limiting new HVAC and HVDC extensions to {maxext} MW")
|
||||||
n.lines["s_nom_max"] = n.lines["s_nom"] + maxext
|
n.lines["s_nom_max"] = n.lines["s_nom"] + maxext
|
||||||
|
@ -152,7 +152,7 @@ def prepare_network(
|
|||||||
if "clip_p_max_pu" in solve_opts:
|
if "clip_p_max_pu" in solve_opts:
|
||||||
for df in (
|
for df in (
|
||||||
n.generators_t.p_max_pu,
|
n.generators_t.p_max_pu,
|
||||||
n.generators_t.p_min_pu, # TODO: check if this can be removed
|
n.generators_t.p_min_pu,
|
||||||
n.storage_units_t.inflow,
|
n.storage_units_t.inflow,
|
||||||
):
|
):
|
||||||
df.where(df > solve_opts["clip_p_max_pu"], other=0.0, inplace=True)
|
df.where(df > solve_opts["clip_p_max_pu"], other=0.0, inplace=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user