Merge branch 'master' into ukraine_hackathon
This commit is contained in:
commit
6444640c1f
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
|
6
.github/workflows/ci.yaml
vendored
6
.github/workflows/ci.yaml
vendored
@ -81,7 +81,7 @@ jobs:
|
||||
run: echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
|
||||
|
||||
- name: Create environment cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
id: cache
|
||||
with:
|
||||
path: ${{ matrix.prefix }}
|
||||
@ -95,6 +95,4 @@ jobs:
|
||||
run: |
|
||||
conda activate pypsa-eur
|
||||
conda list
|
||||
cp test/config.test1.yaml config.yaml
|
||||
snakemake --cores all solve_all_networks
|
||||
rm -rf resources/*.nc resources/*.geojson resources/*.h5 networks results
|
||||
snakemake -call solve_all_networks --configfile test/config.test1.yaml
|
||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
|
@ -17,7 +17,7 @@ repos:
|
||||
|
||||
# Sort package imports alphabetically
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 5.11.4
|
||||
rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
args: ["--profile", "black", "--filter-files"]
|
||||
@ -39,7 +39,7 @@ repos:
|
||||
|
||||
# Make docstrings PEP 257 compliant
|
||||
- repo: https://github.com/PyCQA/docformatter
|
||||
rev: v1.6.0.rc1
|
||||
rev: v1.5.1
|
||||
hooks:
|
||||
- id: docformatter
|
||||
args: ["--in-place", "--make-summary-multi-line", "--pre-summary-newline"]
|
||||
@ -51,7 +51,7 @@ repos:
|
||||
|
||||
# Formatting with "black" coding style
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 22.12.0
|
||||
rev: 23.1.0
|
||||
hooks:
|
||||
# Format Python files
|
||||
- id: black
|
||||
@ -67,14 +67,14 @@ repos:
|
||||
|
||||
# Do YAML formatting (before the linter checks it for misses)
|
||||
- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
|
||||
rev: v2.6.0
|
||||
rev: v2.7.0
|
||||
hooks:
|
||||
- id: pretty-format-yaml
|
||||
args: [--autofix, --indent, "2", --preserve-quotes]
|
||||
|
||||
# Format Snakemake rule / workflow files
|
||||
- repo: https://github.com/snakemake/snakefmt
|
||||
rev: v0.8.0
|
||||
rev: v0.8.1
|
||||
hooks:
|
||||
- id: snakefmt
|
||||
|
||||
@ -87,6 +87,6 @@ repos:
|
||||
|
||||
# Check for FSFE REUSE compliance (licensing)
|
||||
- repo: https://github.com/fsfe/reuse-tool
|
||||
rev: v1.1.0
|
||||
rev: v1.1.2
|
||||
hooks:
|
||||
- id: reuse
|
||||
|
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
|
@ -12,7 +12,7 @@ Copyright: 2019 Fabian Neumann (TUB, KIT)
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: data/*
|
||||
Copyright: 2017-2022 The PyPSA-Eur Authors
|
||||
Copyright: 2017-2023 The PyPSA-Eur Authors
|
||||
License: CC-BY-4.0
|
||||
|
||||
Files: .github/*
|
||||
@ -20,9 +20,9 @@ Copyright: 2019 The PyPSA-Eur Authors
|
||||
License: CC0-1.0
|
||||
|
||||
Files: matplotlibrc
|
||||
Copyright: : 2017-2022 The PyPSA-Eur Authors
|
||||
Copyright: : 2017-2023 The PyPSA-Eur Authors
|
||||
License: CC0-1.0
|
||||
|
||||
Files: borg-it
|
||||
Copyright: : 2017-2022 The PyPSA-Eur Authors
|
||||
Copyright: : 2017-2023 The PyPSA-Eur Authors
|
||||
License: CC0-1.0
|
||||
|
@ -6,7 +6,7 @@ cff-version: 1.1.0
|
||||
message: "If you use this package, please cite the corresponding manuscript in Energy Strategy Reviews."
|
||||
title: "PyPSA-Eur: An open optimisation model of the European transmission system"
|
||||
repository: https://github.com/pypsa/pypsa-eur
|
||||
version: 0.6.1
|
||||
version: 0.7.0
|
||||
license: MIT
|
||||
journal: Energy Strategy Reviews
|
||||
doi: 10.1016/j.esr.2018.08.012
|
||||
|
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright 2017-2022 The PyPSA-Eur Authors
|
||||
Copyright 2017-2023 The PyPSA-Eur Authors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2017-2023 The PyPSA-Eur Authors
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
-->
|
||||
|
||||
|
18
Snakefile
18
Snakefile
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -355,7 +355,13 @@ rule retrieve_ship_raster:
|
||||
rule build_ship_raster:
|
||||
input:
|
||||
ship_density="data/shipdensity_global.zip",
|
||||
cutouts=expand("cutouts/" + CDIR + "{cutouts}.nc", **config["atlite"]),
|
||||
cutouts=expand(
|
||||
"cutouts/" + CDIR + "{cutout}.nc",
|
||||
cutout=[
|
||||
config["renewable"][k]["cutout"]
|
||||
for k in config["electricity"]["renewable_carriers"]
|
||||
],
|
||||
),
|
||||
output:
|
||||
"resources/" + RDIR + "shipdensity_raster.nc",
|
||||
log:
|
||||
@ -387,7 +393,7 @@ rule build_renewable_profiles:
|
||||
),
|
||||
gebco=lambda w: (
|
||||
"data/bundle/GEBCO_2014_2D.nc"
|
||||
if "max_depth" in config["renewable"][w.technology].keys()
|
||||
if config["renewable"][w.technology].get("max_depth")
|
||||
else []
|
||||
),
|
||||
ship_density=lambda w: (
|
||||
@ -425,9 +431,7 @@ rule build_hydro_profile:
|
||||
input:
|
||||
country_shapes="resources/" + RDIR + "country_shapes.geojson",
|
||||
eia_hydro_generation="data/eia_hydro_annual_generation.csv",
|
||||
cutout=f"cutouts/" + CDIR + config["renewable"]["hydro"]["cutout"] + ".nc"
|
||||
if "hydro" in config["renewable"]
|
||||
else [],
|
||||
cutout=f"cutouts/" + CDIR + config["renewable"]["hydro"]["cutout"] + ".nc",
|
||||
output:
|
||||
"resources/" + RDIR + "profile_hydro.nc",
|
||||
log:
|
||||
@ -442,7 +446,7 @@ rule add_electricity:
|
||||
input:
|
||||
**{
|
||||
f"profile_{tech}": "resources/" + RDIR + f"profile_{tech}.nc"
|
||||
for tech in config["renewable"]
|
||||
for tech in config["electricity"]["renewable_carriers"]
|
||||
},
|
||||
**{
|
||||
f"conventional_{carrier}_{attr}": fn
|
||||
|
@ -1,8 +1,8 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
version: 0.6.1
|
||||
version: 0.7.0
|
||||
tutorial: false
|
||||
|
||||
logging:
|
||||
@ -25,7 +25,7 @@ countries: ['AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'F
|
||||
snapshots:
|
||||
start: "2013-01-01"
|
||||
end: "2014-01-01"
|
||||
closed: 'left' # end is not inclusive
|
||||
inclusive: 'left' # include start, not end
|
||||
|
||||
enable:
|
||||
prepare_links_p_nom: false
|
||||
@ -228,7 +228,7 @@ load:
|
||||
|
||||
costs:
|
||||
year: 2030
|
||||
version: v0.4.0
|
||||
version: v0.5.0
|
||||
rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person)
|
||||
fill_values:
|
||||
FOM: 0
|
||||
@ -276,33 +276,86 @@ clustering:
|
||||
efficiency: mean
|
||||
|
||||
solving:
|
||||
#tmpdir: "path/to/tmp"
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
clip_p_max_pu: 1.e-2
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
skip_iterations: true
|
||||
track_iterations: false
|
||||
min_iterations: 4
|
||||
max_iterations: 6
|
||||
clip_p_max_pu: 0.01
|
||||
skip_iterations: false
|
||||
track_iterations: false
|
||||
#nhours: 10
|
||||
keep_shadowprices:
|
||||
- Bus
|
||||
- Line
|
||||
- Link
|
||||
- Transformer
|
||||
- GlobalConstraint
|
||||
- Generator
|
||||
- Store
|
||||
- StorageUnit
|
||||
|
||||
solver:
|
||||
name: gurobi
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-5
|
||||
FeasibilityTol: 1.e-6
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
# solver:
|
||||
# name: cplex
|
||||
# threads: 4
|
||||
# lpmethod: 4 # barrier
|
||||
# solutiontype: 2 # non basic solution, ie no crossover
|
||||
# barrier.convergetol: 1.e-5
|
||||
# feasopt.tolerance: 1.e-6
|
||||
options: gurobi-default
|
||||
|
||||
solver_options:
|
||||
highs-default:
|
||||
# refer to https://ergo-code.github.io/HiGHS/options/definitions.html#solver
|
||||
threads: 4
|
||||
solver: "ipm"
|
||||
run_crossover: "off"
|
||||
small_matrix_value: 1e-6
|
||||
large_matrix_value: 1e9
|
||||
primal_feasibility_tolerance: 1e-5
|
||||
dual_feasibility_tolerance: 1e-5
|
||||
ipm_optimality_tolerance: 1e-4
|
||||
parallel: "on"
|
||||
random_seed: 123
|
||||
gurobi-default:
|
||||
threads: 4
|
||||
method: 2 # barrier
|
||||
crossover: 0
|
||||
BarConvTol: 1.e-6
|
||||
Seed: 123
|
||||
AggFill: 0
|
||||
PreDual: 0
|
||||
GURO_PAR_BARDENSETHRESH: 200
|
||||
seed: 10 # Consistent seed for all plattforms
|
||||
gurobi-numeric-focus:
|
||||
name: gurobi
|
||||
NumericFocus: 3 # Favour numeric stability over speed
|
||||
method: 2 # barrier
|
||||
crossover: 0 # do not use crossover
|
||||
BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge
|
||||
BarConvTol: 1.e-5
|
||||
FeasibilityTol: 1.e-4
|
||||
OptimalityTol: 1.e-4
|
||||
ObjScale: -0.5
|
||||
threads: 8
|
||||
Seed: 123
|
||||
gurobi-fallback: # Use gurobi defaults
|
||||
name: gurobi
|
||||
crossover: 0
|
||||
method: 2 # barrier
|
||||
BarHomogeneous: 1 # Use homogeneous barrier if standard does not converge
|
||||
BarConvTol: 1.e-5
|
||||
FeasibilityTol: 1.e-5
|
||||
OptimalityTol: 1.e-5
|
||||
Seed: 123
|
||||
threads: 8
|
||||
cplex-default:
|
||||
threads: 4
|
||||
lpmethod: 4 # barrier
|
||||
solutiontype: 2 # non basic solution, ie no crossover
|
||||
barrier_convergetol: 1.e-5
|
||||
feasopt_tolerance: 1.e-6
|
||||
cbc-default: {} # Used in CI
|
||||
glpk-default: {} # Used in CI
|
||||
|
||||
mem: 30000 #memory in MB; 20 GB enough for 50+B+I+H2; 100 GB for 181+B+I+H2
|
||||
|
||||
|
||||
plotting:
|
||||
map:
|
||||
|
@ -1,8 +1,8 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
version: 0.6.1
|
||||
version: 0.7.0
|
||||
tutorial: true
|
||||
|
||||
logging:
|
||||
@ -24,7 +24,7 @@ countries: ['BE']
|
||||
snapshots:
|
||||
start: "2013-03-01"
|
||||
end: "2013-04-01"
|
||||
closed: 'left' # end is not inclusive
|
||||
inclusive: 'left' # include start, not end
|
||||
|
||||
enable:
|
||||
prepare_links_p_nom: false
|
||||
@ -50,9 +50,29 @@ electricity:
|
||||
battery: 6
|
||||
H2: 168
|
||||
|
||||
powerplants_filter: false # use pandas query strings here, e.g. Country not in ['Germany']
|
||||
custom_powerplants: false # use pandas query strings here, e.g. Country in ['Germany']
|
||||
conventional_carriers: [coal, CCGT] # [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||
# use pandas query strings here, e.g. Country not in ['Germany']
|
||||
powerplants_filter: (DateOut >= 2022 or DateOut != DateOut)
|
||||
# use pandas query strings here, e.g. Country in ['Germany']
|
||||
custom_powerplants: false
|
||||
|
||||
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro]
|
||||
|
||||
estimate_renewable_capacities:
|
||||
enable: true
|
||||
# Add capacities from OPSD data
|
||||
from_opsd: true
|
||||
# Renewable capacities are based on existing capacities reported by IRENA
|
||||
year: 2020
|
||||
# Artificially limit maximum capacities to factor * (IRENA capacities),
|
||||
# i.e. 110% of <years>'s capacities => expansion_limit: 1.1
|
||||
# false: Use estimated renewable potentials determine by the workflow
|
||||
expansion_limit: false
|
||||
technology_mapping:
|
||||
# Wind is the Fueltype in powerplantmatching, onwind, offwind-{ac,dc} the carrier in PyPSA-Eur
|
||||
Offshore: [offwind-ac, offwind-dc]
|
||||
Onshore: [onwind]
|
||||
PV: [solar]
|
||||
|
||||
atlite:
|
||||
nprocesses: 4
|
||||
@ -163,7 +183,7 @@ load:
|
||||
|
||||
costs:
|
||||
year: 2030
|
||||
version: v0.4.0
|
||||
version: v0.5.0
|
||||
rooftop_share: 0.14
|
||||
fill_values:
|
||||
FOM: 0
|
||||
|
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
74
doc/_static/theme_overrides.css
vendored
74
doc/_static/theme_overrides.css
vendored
@ -1,74 +0,0 @@
|
||||
/* SPDX-FileCopyrightText: 2017-2022 The PyPSA-Eur Authors
|
||||
SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
.wy-side-nav-search {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.wy-side-nav-search .wy-dropdown>a,
|
||||
.wy-side-nav-search>a {
|
||||
color: rgb(34, 97, 156)
|
||||
}
|
||||
|
||||
.wy-side-nav-search>div.version {
|
||||
color: rgb(34, 97, 156)
|
||||
}
|
||||
|
||||
.wy-menu-vertical header,
|
||||
.wy-menu-vertical p.caption,
|
||||
.rst-versions a {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
.wy-menu-vertical a.reference:hover,
|
||||
.wy-menu-vertical a.reference.internal:hover {
|
||||
background: #dddddd;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.wy-nav-side {
|
||||
background: #efefef;
|
||||
}
|
||||
|
||||
.wy-menu-vertical a.reference {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.rst-versions .rst-current-version,
|
||||
.wy-nav-top,
|
||||
.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a:hover {
|
||||
background: #002221;
|
||||
}
|
||||
|
||||
.wy-nav-content .highlight {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.rst-content code.literal,
|
||||
.rst-content tt.literal {
|
||||
color: rgb(34, 97, 156)
|
||||
}
|
||||
|
||||
.wy-nav-content a.reference {
|
||||
color: rgb(34, 97, 156);
|
||||
}
|
||||
|
||||
|
||||
/* override table width restrictions */
|
||||
|
||||
@media screen and (min-width: 767px) {
|
||||
.wy-table-responsive table td {
|
||||
/* !important prevents the common CSS stylesheets from overriding
|
||||
this as on RTD they are loaded after this stylesheet */
|
||||
white-space: normal !important;
|
||||
background: rgb(250, 250, 250) !important;
|
||||
}
|
||||
.wy-table-responsive {
|
||||
max-width: 100%;
|
||||
overflow: visible !important;
|
||||
}
|
||||
.wy-nav-content {
|
||||
max-width: 910px !important;
|
||||
}
|
||||
}
|
@ -1,130 +0,0 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2020 Maximilian Parzen and Emmanuel Paez
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
||||
.. _cloudcomputing:
|
||||
|
||||
###########################
|
||||
Cloud Computing
|
||||
###########################
|
||||
|
||||
Google Cloud Platform (GCP)
|
||||
===========================
|
||||
|
||||
.. note::
|
||||
This set of instructions is partially Windows specific.
|
||||
We are happy to take pull requests explaining where the procedures deviate from the descriptions below for other operating systems.
|
||||
Likewise, tutorials for other cloud computing solutions are also highly welcome.
|
||||
|
||||
The Google Cloud Platform (GCP) is a cloud computing service you can use to run PyPSA-Eur calculations, especially if
|
||||
|
||||
- you do not have immediate access to high-performance computating facilities,
|
||||
- you have problems with the Windows operating system and want a quick run on a linux-based system,
|
||||
- you want to model whole of Europe in sufficient spatial and temporal resolution,
|
||||
- you need quick results (trial version includes 32 vCPU cores and up to 800 GB of memory).
|
||||
|
||||
With the Google Cloud Platform you set up a virtual machine in the cloud which can store and operate data.
|
||||
Like on your local computer, you have to install all software and solvers, and create paths on the virtual machine to set up the required environment.
|
||||
The 300$ free trial budget is offered which equals roughly 10-20 simulations with 180 nodes at hourly basis.
|
||||
The following steps are required:
|
||||
|
||||
- `Google Cloud Platform registration <https://console.cloud.google.com>`_, to receive 300$ free budget.
|
||||
- `Creating an Virtual Machine (VM) instance <https://www.ibm.com/products/ilog-cplex-optimization-studio>`_, which is practically a virtual computer with Linux as OS.
|
||||
- `Installation of Cloud SDK <https://cloud.google.com/sdk/>`_, to create a communication channel between your computer and the cloud virtual machine (VM).
|
||||
- `Installation of WinSCP (Windows) <https://winscp.net/eng/download.php>`_ (or alternative), to handle or transfer files between the VM and you local computer.
|
||||
|
||||
Step 1 - Google Cloud Platform registration
|
||||
-------------------------------------------
|
||||
|
||||
First, register at the `Google Cloud Platform <https://console.cloud.google.com>`_ (GCP).
|
||||
Ann active bank account is required, which will not be charged unless you exceed the trial budget.
|
||||
|
||||
Step 2 - Create your Virtual Machine instance
|
||||
---------------------------------------------
|
||||
|
||||
With the following steps we create a Virtual Machine (VM) on Google Cloud.
|
||||
|
||||
- Click on the `GCP Dashboard <https://console.cloud.google.com/home/dashboard>`_.
|
||||
- Click on the "COMPUTE" header, on the "Compute Engine" and then on the "VM instance".
|
||||
- Click on create.
|
||||
- Click on new VM instance.
|
||||
|
||||
Now a window with the machine details will open. You have to configure the following things:
|
||||
|
||||
- Name: Set a name for your VM. Cannot be changed after creation.
|
||||
- Region: You can keep the default us-central1 (Iowa), since it is a cheap computational region. Sometimes your machine is limited in a specific region. Just pick another region in that case.
|
||||
- Machine configuration: The machine configuration sets how powerful your VM is.
|
||||
You can start with a 1 vCPU and 3.75 GB memory, N1 series machine as every operating second cost money.
|
||||
You can edit your machine configuration later. So use a cheap machine type configuration to transfer data and
|
||||
only when everything is ready and tested, your expensive machine type, for instance a custom 8 vCPU with 160 GB memory.
|
||||
Solvers do not parallelise well, so we recommend not to choose more than 8 vCPU.
|
||||
Check ``snakemake -n -j 1 solve_all_networks`` as a dry run to see how much memory is required.
|
||||
The memory requirements will vary depending on the spatial and temporal resoulution of your optimisation.
|
||||
Example: for an hourly, 181 node full European network, set 8 vCPU and 150 GB memory since the dry-run calculated a 135 GB memory requirement.)
|
||||
- Boot disk: As default, your VM is created with 10 GB. Depending on how much you want to handle on one VM you should increase the disk size.
|
||||
We recommend a disk size of 100 GB for a safe start (cost roughly 8$ per month), the disk can be resized at any later stage with an additional disk.
|
||||
- Click on create and celebrate your first VM on GCP.
|
||||
|
||||
Step 3 - Installation of Cloud SDK
|
||||
----------------------------------
|
||||
|
||||
- Download Google Cloud SDK `SDK <https://cloud.google.com/sdk>`_. Check that you are logged in in your Google account. The link should lead you to the Windows installation of Google Cloud SDK.
|
||||
- Follow the "Quickstart for Windows - Before you begin" steps.
|
||||
- After the successful installation and initialization, close the Google Cloud SDK reopen it again. Type the following command into the "Google Cloud SDK Shell":
|
||||
|
||||
.. code:: bash
|
||||
|
||||
gcloud compute ssh <your VM instance name> -- -L 8888:localhost:8888
|
||||
|
||||
- This command above will open a PuTTy command window that is connected to your Virtual Machine. Time to celebrate if it works!
|
||||
- Now install all necessary tools. As little help, the first steps:
|
||||
.. code:: bash
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get install bzip2 libxml2-dev
|
||||
sudo apt-get install wget
|
||||
wget https://repo.anaconda.com/archive/Anaconda3-2020.07-Linux-x86_64.sh
|
||||
ls (to see what anaconda file to bash)
|
||||
bash Anaconda3-2020.07-Linux-x86_64.sh
|
||||
source ~/.bashrc
|
||||
|
||||
- Close and reopen the PuTTy file (-> open Google Cloud SDK -> initialize again with the command above to open the PuTTY command window). Now ``conda`` can be listed with ``conda list``.
|
||||
Noq you can follow the standard installation instructions to finalize your machine (don't forget the solvers - for bigger simulations use commercial solvers such as Gurobi).
|
||||
|
||||
Step 4 - Installation of WinSCP
|
||||
-------------------------------
|
||||
|
||||
For smooth data exchange between the VM and your local computer you may use WinSCP on Windows.
|
||||
Make sure that your instance is operating for the next steps.
|
||||
|
||||
- Download `WinSCP <https://winscp.net/eng/download.php>`_ and follow the default installation steps.
|
||||
- Open WinSCP after the installation. A login window will open.
|
||||
- Keep SFTP as file protocol.
|
||||
- As host name insert the External IP of your VM (click in your internet browser on your GCP VM instance to see the external IP)
|
||||
- Set the User name in WinSCP to the name you see in your PuTTy window (check step 3 - for instance [username]@[VM-name]:~$)
|
||||
- Click on the advanced setting. SSH -> Authentication.
|
||||
- Option 1. Click on the Tools button and "Install Public Key into Server..". Somewhere in your folder structure must be a public key. I found it with the following folder syntax on my local windows computer -> :\Users\...\.ssh (there should be a PKK file).
|
||||
- Option 2. Click on the Tools button and "Generate new key pair...". Save the private key at a folder you remember and add it to the "private key file" field in WinSCP. Upload the public key to the metadeta of your instance.
|
||||
- Click ok and save. Then click Login. If successful WinSCP will open on the left side your local computer folder structure and on the right side the folder structure of your VM. (If you followed Option 2 and its not initially working. Stop your instance, refresh the website, reopen the WinSCP field. Afterwards your your Login should be successful)
|
||||
|
||||
If you had struggle with the above steps, you could also try `this video <https://www.youtube.com/watch?v=lYx1oQkEF0E>`_.
|
||||
|
||||
.. note::
|
||||
Double check the External IP of your VM before you try to login with WinSCP. It's often a cause for an error.
|
||||
|
||||
Step 5 - Extra. Copying your instance with all its data and paths included
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
Especially if you think about operating several instance for quicker simulations, you can create a so called `"image" <https://console.cloud.google.com/compute/images?authuser=1&project=exalted-country-284917>`_ of the virtual machine.
|
||||
The "image" includes all the data and software set-ups from your VM. Afterwards you can create a VM from an image and avoid all the installation steps above.
|
||||
|
||||
Important points when to solve networks in PyPSA
|
||||
------------------------------------------------
|
||||
|
||||
If you use the GCP with the default PyPSA-Eur settings, your budget will be used up very quickly. The following tips should help you to make the most of your budget:
|
||||
|
||||
- Always test using low resolution networks; i.e. a single country at 5 nodes and 24h resolution for 2 month of weather data.
|
||||
- Adjust your solver in the ``config.yaml`` file. Set ``solving: skip_iterations: true``.
|
||||
This will lead to a single solver iteration which is often precise enough.
|
23
doc/conf.py
23
doc/conf.py
@ -67,7 +67,7 @@ master_doc = "index"
|
||||
|
||||
# General information about the project.
|
||||
project = "PyPSA-Eur"
|
||||
copyright = "2017-2022 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS); 2019-2022 Fabian Neumann (TUB, KIT)"
|
||||
copyright = "2017-2023 Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS); 2019-2023 Fabian Neumann (TUB, KIT)"
|
||||
author = "Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtberger (FIAS), Tom Brown (TUB, KIT, FIAS), Fabian Neumann (TUB, KIT)"
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
@ -75,16 +75,16 @@ author = "Jonas Hoersch (KIT, FIAS), Fabian Hofmann (TUB, FIAS), David Schlachtb
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = "0.6"
|
||||
version = "0.7"
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = "0.6.1"
|
||||
release = "0.7.0"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
language = "en"
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
@ -128,14 +128,15 @@ todo_include_todos = True
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = "sphinx_rtd_theme"
|
||||
html_theme = "sphinx_book_theme"
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
html_theme_options = {
|
||||
"display_version": True,
|
||||
"sticky_navigation": True,
|
||||
"repository_url": "https://github.com/pypsa/pypsa-eur",
|
||||
"use_repository_button": True,
|
||||
"show_navbar_depth": 2,
|
||||
}
|
||||
|
||||
|
||||
@ -144,14 +145,14 @@ html_theme_options = {
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
# html_title = None
|
||||
html_title = "PyPSA-Eur"
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
# html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
# html_logo = None
|
||||
html_logo = "img/pypsa-logo.png"
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
@ -159,11 +160,11 @@ html_theme_options = {
|
||||
# html_favicon = None
|
||||
|
||||
# These folders are copied to the documentation's HTML output
|
||||
html_static_path = ["_static"]
|
||||
# html_static_path = ["_static"]
|
||||
|
||||
# These paths are either relative to html_static_path
|
||||
# or fully qualified paths (eg. https://...)
|
||||
html_css_files = ["theme_overrides.css"]
|
||||
# html_css_files = ["theme_overrides.css"]
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
|
@ -1,9 +1,12 @@
|
||||
,Unit,Values,Description
|
||||
nprocesses,--,int,"Number of parallel processes in cutout preparation"
|
||||
show_progress,bool,true/false,"Whether progressbar for atlite conversion processes should be shown. False saves time."
|
||||
cutouts,,,
|
||||
-- {name},--,"Convention is to name cutouts like ``<region>-<year>-<source>`` (e.g. ``europe-2013-era5``).","Name of the cutout netcdf file. The user may specify multiple cutouts under configuration ``atlite: cutouts:``. Reference is used in configuration ``renewable: {technology}: cutout:``. The cutout ``base`` may be used to automatically calculate temporal and spatial bounds of the network."
|
||||
-- -- module,--,"Subset of {'era5','sarah'}","Source of the reanalysis weather dataset (e.g. `ERA5 <https://www.ecmwf.int/en/forecasts/datasets/reanalysis-datasets/era5>`_ or `SARAH-2 <https://wui.cmsaf.eu/safira/action/viewDoiDetails?acronym=SARAH_V002>`_)"
|
||||
-- -- x,°,"Float interval within [-180, 180]","Range of longitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes."
|
||||
-- -- y,°,"Float interval within [-90, 90]","Range of latitudes to download weather data for. If not defined, it defaults to the spatial bounds of all bus shapes."
|
||||
-- -- dx,°,"Larger than 0.25","Grid resolution for longitude"
|
||||
-- -- dy,°,"Larger than 0.25","Grid resolution for latitude"
|
||||
-- -- time,,"Time interval within ['1979', '2018'] (with valid pandas date time strings)","Time span to download weather data for. If not defined, it defaults to the time interval spanned by the snapshots."
|
||||
-- -- features,,"String or list of strings with valid cutout features ('inlfux', 'wind').","When freshly building a cutout, retrieve data only for those features. If not defined, it defaults to all available features."
|
||||
|
|
@ -4,6 +4,8 @@ simplify_network,,,
|
||||
-- algorithm,str,"One of {‘kmeans’, ‘hac’, ‘modularity‘}",
|
||||
-- feature,str,"Str in the format ‘carrier1+carrier2+...+carrierN-X’, where CarrierI can be from {‘solar’, ‘onwind’, ‘offwind’, ‘ror’} and X is one of {‘cap’, ‘time’}.",
|
||||
-- exclude_carriers,list,"List of Str like [ 'solar', 'onwind'] or empy list []","List of carriers which will not be aggregated. If empty, all carriers will be aggregated."
|
||||
-- remove stubs,bool,"true/false","Controls whether radial parts of the network should be recursively aggregated. Defaults to true."
|
||||
-- remove_stubs_across_borders,bool,"true/false","Controls whether radial parts of the network should be recursively aggregated across borders. Defaults to true."
|
||||
cluster_network,,,
|
||||
-- algorithm,str,"One of {‘kmeans’, ‘hac’}",
|
||||
-- feature,str,"Str in the format ‘carrier1+carrier2+...+carrierN-X’, where CarrierI can be from {‘solar’, ‘onwind’, ‘offwind’, ‘ror’} and X is one of {‘cap’, ‘time’}.",
|
||||
|
|
@ -1,6 +1,6 @@
|
||||
,Unit,Values,Description
|
||||
year,--,"YYYY; e.g. '2030'","Year for which to retrieve cost assumptions of ``resources/costs.csv``."
|
||||
version,--,"vX.X.X; e.g. 'v0.1.0'","Version of ``technology-data`` repository to use."
|
||||
version,--,"vX.X.X; e.g. 'v0.5.0'","Version of ``technology-data`` repository to use."
|
||||
rooftop_share,--,float,"Share of rooftop PV when calculating capital cost of solar (joint rooftop and utility-scale PV)."
|
||||
fill_values,--,float,"Default values if not specified for a technology in ``resources/costs.csv``."
|
||||
capital_cost,EUR/MW,"Keys should be in the 'technology' column of ``resources/costs.csv``. Values can be any float.","For the given technologies, assumptions about their capital investment costs are set to the corresponding value. Optional; overwrites cost assumptions from ``resources/costs.csv``."
|
||||
|
|
@ -1,5 +1,4 @@
|
||||
,Unit,Values,Description
|
||||
url,--,string,"Link to open power system data time series data."
|
||||
power_statistics,bool,"{true, false}",Whether to load the electricity consumption data of the ENTSOE power statistics (only for files from 2019 and before) or from the ENTSOE transparency data (only has load data from 2015 onwards).
|
||||
interpolate_limit,hours,integer,"Maximum gap size (consecutive nans) which interpolated linearly."
|
||||
time_shift_for_large_gaps,string,string,"Periods which are used for copying time-slices in order to fill large gaps of nans. Have to be valid ``pandas`` period strings."
|
||||
|
|
@ -4,10 +4,13 @@ resource,,,
|
||||
-- method,--,"Must be 'wind'","A superordinate technology type."
|
||||
-- turbine,--,"One of turbine types included in `atlite <https://github.com/PyPSA/atlite/tree/master/atlite/resources/windturbine>`_","Specifies the turbine type and its characteristic power curve."
|
||||
capacity_per_sqkm,:math:`MW/km^2`,float,"Allowable density of wind turbine placement."
|
||||
correction_factor,--,float,"Correction factor for capacity factor time series."
|
||||
excluder_resolution,m,float,"Resolution on which to perform geographical elibility analysis."
|
||||
corine,--,"Any *realistic* subset of the `CORINE Land Cover code list <http://www.eea.europa.eu/data-and-maps/data/corine-land-cover-2006-raster-1/corine-land-cover-classes-and/clc_legend.csv/at_download/file>`_","Specifies areas according to CORINE Land Cover codes which are generally eligible for AC-connected offshore wind turbine placement."
|
||||
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``."
|
||||
ship_threshold,--,float,"Ship density threshold from which areas are excluded."
|
||||
max_depth,m,float,"Maximum sea water depth at which wind turbines can be build. Maritime areas with deeper waters are excluded in the process of calculating the AC-connected offshore wind potential."
|
||||
min_shore_distance,m,float,"Minimum distance to the shore below which wind turbines cannot be build. Such areas close to the shore are excluded in the process of calculating the AC-connected offshore wind potential."
|
||||
max_shore_distance,m,float,"Maximum distance to the shore above which wind turbines cannot be build. Such areas close to the shore are excluded in the process of calculating the AC-connected offshore wind potential."
|
||||
potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`"
|
||||
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."
|
||||
|
|
@ -4,10 +4,13 @@ resource,,,
|
||||
-- method,--,"Must be 'wind'","A superordinate technology type."
|
||||
-- turbine,--,"One of turbine types included in `atlite <https://github.com/PyPSA/atlite/tree/master/atlite/resources/windturbine>`__","Specifies the turbine type and its characteristic power curve."
|
||||
capacity_per_sqkm,:math:`MW/km^2`,float,"Allowable density of wind turbine placement."
|
||||
correction_factor,--,float,"Correction factor for capacity factor time series."
|
||||
excluder_resolution,m,float,"Resolution on which to perform geographical elibility analysis."
|
||||
corine,--,"Any *realistic* subset of the `CORINE Land Cover code list <http://www.eea.europa.eu/data-and-maps/data/corine-land-cover-2006-raster-1/corine-land-cover-classes-and/clc_legend.csv/at_download/file>`_","Specifies areas according to CORINE Land Cover codes which are generally eligible for AC-connected offshore wind turbine placement."
|
||||
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ natural protection areas. Area is excluded if ``true``."
|
||||
ship_threshold,--,float,"Ship density threshold from which areas are excluded."
|
||||
max_depth,m,float,"Maximum sea water depth at which wind turbines can be build. Maritime areas with deeper waters are excluded in the process of calculating the AC-connected offshore wind potential."
|
||||
min_shore_distance,m,float,"Minimum distance to the shore below which wind turbines cannot be build. Such areas close to the shore are excluded in the process of calculating the AC-connected offshore wind potential."
|
||||
min_shore_distance,m,float,"Minimum distance to the shore below which wind turbines cannot be build."
|
||||
max_shore_distance,m,float,"Maximum distance to the shore above which wind turbines cannot be build."
|
||||
potential,--,"One of {'simple', 'conservative'}","Method to compute the maximal installable potential for a node; confer :ref:`renewableprofiles`"
|
||||
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."
|
||||
|
|
@ -11,3 +11,5 @@ corine,,,
|
||||
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ 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`"
|
||||
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."
|
||||
excluder_resolution,m,float,"Resolution on which to perform geographical elibility analysis."
|
||||
|
|
@ -1,4 +1,4 @@
|
||||
,Unit,Values,Description
|
||||
start,--,"str or datetime-like; e.g. YYYY-MM-DD","Left bound of date range"
|
||||
end,--,"str or datetime-like; e.g. YYYY-MM-DD","Right bound of date range"
|
||||
closed,--,"One of {None, ‘left’, ‘right’}","Make the time interval closed to the ``left``, ``right``, or open on both sides ``None``."
|
||||
inclusive,--,"One of {'neither', 'both', ‘left’, ‘right’}","Make the time interval closed to the ``left``, ``right``, or both sides ``both`` or neither side ``None``."
|
||||
|
|
@ -12,3 +12,4 @@ corine,--,"Any subset of the `CORINE Land Cover code list <http://www.eea.europa
|
||||
natura,bool,"{true, false}","Switch to exclude `Natura 2000 <https://en.wikipedia.org/wiki/Natura_2000>`_ 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`"
|
||||
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."
|
||||
|
|
@ -6,5 +6,5 @@ min_iterations,--,int,"Minimum number of solving iterations in between which res
|
||||
max_iterations,--,int,"Maximum number of solving iterations in between which resistance and reactence (``x/r``) are updated for branches according to ``s_nom_opt`` of the previous run."
|
||||
nhours,--,int,"Specifies the :math:`n` first snapshots to take into account. Must be less than the total number of snapshots. Rather recommended only for debugging."
|
||||
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."
|
||||
skip_iterations,bool,"{'true','false'}","Skip iterating, do not update impedances of branches."
|
||||
skip_iterations,bool,"{'true','false'}","Skip iterating, do not update impedances of branches. Defaults to true."
|
||||
track_iterations,bool,"{'true','false'}","Flag whether to store the intermediate branch capacities and objective function values are recorded for each iteration in ``network.lines['s_nom_opt_X']`` (where ``X`` labels the iteration)"
|
||||
|
|
@ -1,15 +1,18 @@
|
||||
,Unit,Values,Description
|
||||
version,--,0.x.x,"Version of PyPSA-Eur"
|
||||
version,--,0.x.x,"Version of PyPSA-Eur. Descriptive only."
|
||||
tutorial,bool,"{true, false}","Switch to retrieve the tutorial data set instead of the full data set."
|
||||
logging,,,
|
||||
-- level,--,"Any of {'INFO', 'WARNING', 'ERROR'}","Restrict console outputs to all infos, warning or errors only"
|
||||
-- format,--,"","Custom format for log messages. See `LogRecord <https://docs.python.org/3/library/logging.html#logging.LogRecord>`_ attributes."
|
||||
summary_dir,--,"e.g. 'results'","Directory into which results are written."
|
||||
run,,,
|
||||
-- name,--,"any string","Specify a name for your run. Results will be stored under this name."
|
||||
-- shared_cutouts,bool,"{true, false}","Switch to select whether cutouts should be shared across runs."
|
||||
countries,--,"Subset of {'AL', 'AT', 'BA', 'BE', 'BG', 'CH', 'CZ', 'DE', 'DK', 'EE', 'ES', 'FI', 'FR', 'GB', 'GR', 'HR', 'HU', 'IE', 'IT', 'LT', 'LU', 'LV', 'ME', 'MK', 'NL', 'NO', 'PL', 'PT', 'RO', 'RS', 'SE', 'SI', 'SK'}","European countries defined by their `Two-letter country codes (ISO 3166-1) <https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2>`_ which should be included in the energy system model."
|
||||
focus_weights,--,"Keys should be two-digit country codes (e.g. DE) and values should range between 0 and 1","Ratio of total clusters for particular countries. the remaining weight is distributed according to mean load. An example: ``focus_weights: 'DE': 0.6 'FR': 0.2``."
|
||||
enable,,,
|
||||
-- prepare_links_p_nom,bool,"{true, false}","Switch to retrieve current HVDC projects from `Wikipedia <https://en.wikipedia.org/wiki/List_of_HVDC_projects>`_"
|
||||
-- retrieve_databundle,bool,"{true, false}","Switch to retrieve databundle from zenodo via the rule :mod:`retrieve_databundle` or whether to keep a custom databundle located in the corresponding folder."
|
||||
-- retrieve_cost_data,bool,"{true, false}","Switch to retrieve technology cost data from `technology-data repository <https://github.com/PyPSA/technology-data>`_."
|
||||
-- build_cutout,bool,"{true, false}","Switch to enable the building of cutouts via the rule :mod:`build_cutout`."
|
||||
-- retrieve_cutout,bool,"{true, false}","Switch to enable the retrieval of cutouts from zenodo with :mod:`retrieve_cutout`."
|
||||
-- build_natura_raster,bool,"{true, false}","Switch to enable the creation of the raster ``natura.tiff`` via the rule :mod:`build_natura_raster`."
|
||||
|
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -18,7 +18,7 @@ Top-level configuration
|
||||
|
||||
.. literalinclude:: ../config.default.yaml
|
||||
:language: yaml
|
||||
:lines: 5-12,20,31-38
|
||||
:lines: 5-11,23,30-38
|
||||
|
||||
|
||||
.. csv-table::
|
||||
@ -52,7 +52,7 @@ facilitate running multiple scenarios through a single command
|
||||
|
||||
.. code:: bash
|
||||
|
||||
snakemake -j 1 solve_all_networks
|
||||
snakemake -call solve_all_networks
|
||||
|
||||
For each wildcard, a **list of values** is provided. The rule ``solve_all_networks`` will trigger the rules for creating ``results/networks/elec_s{simpl}_{clusters}_ec_l{ll}_{opts}.nc`` for **all combinations** of the provided wildcard values as defined by Python's `itertools.product(...) <https://docs.python.org/2/library/itertools.html#itertools.product>`_ function that snakemake's `expand(...) function <https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#targets>`_ uses.
|
||||
|
||||
@ -192,7 +192,7 @@ Define and specify the ``atlite.Cutout`` used for calculating renewable potentia
|
||||
.. _lines_cf:
|
||||
|
||||
``conventional``
|
||||
=============
|
||||
================
|
||||
|
||||
Define additional generator attribute for conventional carrier types. If a scalar value is given it is applied to all generators. However if a string starting with "data/" is given, the value is interpreted as a path to a csv file with country specific values. Then, the values are read in and applied to all generators of the given carrier in the given country. Note that the value(s) overwrite the existing values in the corresponding section of the ``generators`` dataframe.
|
||||
|
||||
@ -252,7 +252,8 @@ Define additional generator attribute for conventional carrier types. If a scala
|
||||
|
||||
.. literalinclude:: ../config.default.yaml
|
||||
:language: yaml
|
||||
:lines: 212-217
|
||||
:start-at: load:
|
||||
:end-before: costs:
|
||||
|
||||
.. csv-table::
|
||||
:header-rows: 1
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -7,9 +7,9 @@
|
||||
Contributing
|
||||
#######################
|
||||
|
||||
We happily welcome anyone interested in contributing to this project,
|
||||
be it with new ideas, suggestions, by filing bug reports or contributing code
|
||||
to our `GitHub repository <https://github.com/PyPSA/PyPSA-Eur>`_.
|
||||
We welcome anyone interested in contributing to this project, be it with new
|
||||
ideas, suggestions, by filing bug reports or contributing code to our `GitHub
|
||||
repository <https://github.com/PyPSA/PyPSA-Eur>`_.
|
||||
|
||||
* If you already have some code changes, you can submit them directly as a `pull request <https://github.com/PyPSA/pypsa-eur/pulls>`_.
|
||||
* If you are wondering where we would greatly appreciate your efforts, check out the ``help wanted`` tag in the `issues list <https://github.com/PyPSA/pypsa-eur/issues>`_ and initiate a discussion there.
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -9,9 +9,7 @@ Cost Assumptions
|
||||
|
||||
The database of cost assumptions is retrieved from the repository
|
||||
`PyPSA/technology-data <https://github.com/pypsa/technology-data>`_ and then
|
||||
saved to ``resources/costs.csv``. Cost assumptions of previous PyPSA-Eur
|
||||
versions can be restored by setting in the ``Snakefile``:
|
||||
``COSTS="data/costs.csv"``.
|
||||
saved to ``resources/costs.csv``.
|
||||
|
||||
The ``config.yaml`` provides options to choose a reference year (``costs: year:``) and use a specific version of the repository ``costs: version:``.
|
||||
|
||||
|
BIN
doc/img/pypsa-logo.png
Executable file
BIN
doc/img/pypsa-logo.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
Binary file not shown.
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 206 KiB |
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -116,7 +116,6 @@ Documentation
|
||||
* :doc:`release_notes`
|
||||
* :doc:`limitations`
|
||||
* :doc:`contributing`
|
||||
* :doc:`cloudcomputing`
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
@ -126,7 +125,6 @@ Documentation
|
||||
release_notes
|
||||
limitations
|
||||
contributing
|
||||
cloudcomputing
|
||||
|
||||
Warnings
|
||||
========
|
||||
@ -150,8 +148,10 @@ in addition to reading this documentation.
|
||||
|
||||
- Documentation of `PyPSA <https://pypsa.readthedocs.io>`__, the package for
|
||||
simulating and optimising modern power systems which PyPSA-Eur uses under the hood.
|
||||
- Course on `Energy System Modelling <https://nworbmot.org/courses/esm-2019/>`_,
|
||||
Karlsruhe Institute of Technology (KIT), `Dr. Tom Brown <https://nworbmot.org>`_
|
||||
- Course on `Energy Systems <https://nworbmot.org/courses/es-22/>`_,
|
||||
Technical University of Berlin (TUB), `Prof. Dr. Tom Brown <https://nworbmot.org>`_
|
||||
- Course on `Data Science for Energy System Modelling <https://fneum.github.io/data-science-for-esm/intro.html>`_,
|
||||
Technical University of Berlin (TUB), `Dr. Fabian Neumann <https://neumann.fyi>`_
|
||||
|
||||
Citing PyPSA-Eur
|
||||
================
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -103,8 +103,12 @@ It might be the case that you can only retrieve solutions by using a commercial
|
||||
conda activate pypsa-eur
|
||||
conda install -c conda-forge ipopt glpk
|
||||
|
||||
.. warning::
|
||||
On Windows, new versions of ``ipopt`` have caused problems. Consider downgrading to version 3.11.1.
|
||||
or
|
||||
|
||||
.. code:: bash
|
||||
|
||||
conda activate pypsa-eur
|
||||
pip install highspy
|
||||
|
||||
.. _defaultconfig:
|
||||
|
||||
@ -123,11 +127,3 @@ Before first use, create a ``config.yaml`` by copying the example.
|
||||
|
||||
Users are advised to regularly check their own ``config.yaml`` against changes in the ``config.default.yaml``
|
||||
when pulling a new version from the remote repository.
|
||||
|
||||
.. Using PyPSA-Eur with Docker Images
|
||||
.. ==================================
|
||||
|
||||
.. If docker. Optional.
|
||||
.. To run on cloud computing.
|
||||
.. Gurobi license - floating token server - license must not be tied to a particular machine
|
||||
.. Provide ``Dockerfile``.
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -28,17 +28,18 @@ For instance an invocation to
|
||||
|
||||
.. code:: bash
|
||||
|
||||
.../pypsa-eur % snakemake -j 1 networks/elec_s_128.nc
|
||||
.../pypsa-eur % snakemake -call results/networks/elec_s_128_ec_lvopt_Co2L-3H.nc
|
||||
|
||||
follows this dependency graph:
|
||||
|
||||
.. image:: img/workflow.png
|
||||
:class: full-width
|
||||
|
||||
The **blocks** represent the individual rules which are required to create the file ``networks/elec_s_128.nc``. The **arrows** indicate the outputs from preceding rules which a particular rule takes as input data.
|
||||
|
||||
.. note::
|
||||
The dependency graph shown above was generated using
|
||||
``snakemake --dag networks/elec_s_128.nc | dot -Tpng > workflow.png``
|
||||
``snakemake --dag results/networks/elec_s_128_ec_lvopt_Co2L-3H.nc -F | sed -n "/digraph/,/}/p" | dot -Tpng -o workflow.png``
|
||||
|
||||
For the use of ``snakemake``, it makes sense to familiarize oneself quickly with its `basic tutorial <https://snakemake.readthedocs.io/en/stable/tutorial/basics.html>`_ and then read carefully through the section `Executing Snakemake <https://snakemake.readthedocs.io/en/stable/executable.html>`_, noting the arguments ``-j``, ``-n``, ``-r``, but also ``--dag``, ``-R`` and ``-t``.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
REM SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
REM SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
REM SPDX-License-Identifier: MIT
|
||||
|
||||
@ECHO OFF
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -28,6 +28,7 @@ Then the process continues by calculating conventional power plant capacities, p
|
||||
|
||||
- :mod:`build_powerplants` for today's thermal power plant capacities using `powerplantmatching <https://github.com/FRESNA/powerplantmatching>`_ allocating these to the closest substation for each powerplant,
|
||||
- :mod:`build_natura_raster` for rasterising NATURA2000 natural protection areas,
|
||||
- :mod:`build_ship_raster` for building shipping traffic density,
|
||||
- :mod:`build_renewable_profiles` for the hourly capacity factors and installation potentials constrained by land-use in each substation's Voronoi cell for PV, onshore and offshore wind, and
|
||||
- :mod:`build_hydro_profile` for the hourly per-unit hydro power availability time series.
|
||||
|
||||
@ -42,6 +43,7 @@ together into a detailed PyPSA network stored in ``networks/elec.nc``.
|
||||
preparation/build_load_data
|
||||
preparation/build_cutout
|
||||
preparation/build_natura_raster
|
||||
preparation/build_ship_raster
|
||||
preparation/prepare_links_p_nom
|
||||
preparation/base_network
|
||||
preparation/build_bus_regions
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2020-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2020-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
12
doc/preparation/build_ship_raster.rst
Normal file
12
doc/preparation/build_ship_raster.rst
Normal file
@ -0,0 +1,12 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
.. _ship:
|
||||
|
||||
Rule ``build_ship_raster``
|
||||
===============================
|
||||
|
||||
|
||||
.. automodule:: build_ship_raster
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -77,3 +77,55 @@ This rule, as a substitute for :mod:`build_natura_raster`, downloads an already
|
||||
|
||||
.. seealso::
|
||||
For details see :mod:`build_natura_raster`.
|
||||
|
||||
|
||||
Rule ``retrieve_load_data``
|
||||
---------------------------
|
||||
|
||||
This rule downloads hourly electric load data for each country from the `OPSD platform <data.open-power-system-data.org/time_series/2019-06-05/time_series_60min_singleindex.csv>`_.
|
||||
|
||||
**Relevant Settings**
|
||||
|
||||
None.
|
||||
|
||||
**Outputs**
|
||||
|
||||
- ``data/load_raw.csv``
|
||||
|
||||
|
||||
Rule ``retrieve_cost_data``
|
||||
---------------------------
|
||||
|
||||
This rule downloads techno-economic assumptions from the `technology-data repository <https://github.com/pypsa/technology-data>`_.
|
||||
|
||||
**Relevant Settings**
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
enable:
|
||||
retrieve_cost_data:
|
||||
|
||||
costs:
|
||||
year:
|
||||
version:
|
||||
|
||||
.. seealso::
|
||||
Documentation of the configuration file ``config.yaml`` at
|
||||
:ref:`costs_cf`
|
||||
|
||||
**Outputs**
|
||||
|
||||
- ``resources/costs.csv``
|
||||
|
||||
Rule ``retrieve_ship_raster``
|
||||
-----------------------------
|
||||
|
||||
This rule downloads data on global shipping traffic density from the `World Bank Data Catalogue <https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-Traffic-Density>`_.
|
||||
|
||||
**Relevant Settings**
|
||||
|
||||
None.
|
||||
|
||||
**Outputs**
|
||||
|
||||
- ``data/shipdensity_global.zip``
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -10,11 +10,81 @@ Release Notes
|
||||
Upcoming Release
|
||||
================
|
||||
|
||||
* Carriers of generators can now be excluded from aggregation in clustering network and simplify network.
|
||||
* The solver configuration in `config.default.yaml` are now modularized. To change the set of solver options, change to value in `solving`: `solver`: `options` to one of the keys `solving`: `solver_options`.
|
||||
|
||||
|
||||
PyPSA-Eur 0.7.0 (16th February 2023)
|
||||
====================================
|
||||
|
||||
|
||||
**New Features**
|
||||
|
||||
* Carriers of generators can now be excluded from aggregation in clustering
|
||||
network and simplify network (see ``exclude_carriers``).
|
||||
|
||||
* Added control for removing stubs in :mod:`simplify_network` with options
|
||||
``remove_stubs`` and ``remove_stubs_across_countries``.
|
||||
|
||||
* Add control for showing a progressbar in ``atlite`` processes
|
||||
(``show_progress``). Disabling the progressbar saves a lot of time.
|
||||
|
||||
* Added control for resolution of land eligibility analysis (see
|
||||
``excluder_resolution``).
|
||||
|
||||
|
||||
**Breaking Changes**
|
||||
|
||||
* The config entry ``snapshots: closed:`` was renamed to ``snapshots:
|
||||
inclusive:`` to address the upstream deprecation with ``pandas=1.4``. The
|
||||
previous setting ``None`` is no longer supported and replaced by ``both``, see
|
||||
the `pandas documentation
|
||||
<https://pandas.pydata.org/docs/reference/api/pandas.date_range.html>`_.
|
||||
Minimum version is now ``pandas>=1.4``.
|
||||
|
||||
* The configuration setting ``summary_dir`` was removed.
|
||||
|
||||
|
||||
**Changes**
|
||||
|
||||
* Configuration defaults to new ``technology-data`` version 0.5.0.
|
||||
|
||||
* Fixed CRS warnings when projection of datasets was not specified.
|
||||
|
||||
* Cleaned shape unary unions.
|
||||
|
||||
* Increased resource requirements for some rules.
|
||||
|
||||
* Updated documentation.
|
||||
|
||||
* The documentation now uses the ``sphinx_book_theme``.
|
||||
|
||||
|
||||
**Bugs and Compatibility**
|
||||
|
||||
|
||||
* Bugfix: Corrected extent of natural protection areas in :mod:`build_natura_raster`.
|
||||
|
||||
* Bugfix: Use correct load variables for formulating reserve constraints.
|
||||
|
||||
* Bugfix: Use all available energy-to-power ratios for hydropower plants.
|
||||
|
||||
* Bugfix: The most recent processing of the ``entsoegridkit`` extract required
|
||||
further manual corrections. Also, the connection points of TYNDP links were
|
||||
corrected.
|
||||
|
||||
* Bugfix: Handle absence of hydropower inflow in ``EQ`` constraint.
|
||||
|
||||
* Compatibility with ``pyomo>=6.4.3`` in :mod:`cluster_network`.
|
||||
|
||||
* Upgrade to ``shapely>=2``.
|
||||
|
||||
* Updated version of CI cache action to version 3.
|
||||
*
|
||||
* Updated dependency constraints in ``environment.yaml``.
|
||||
|
||||
* Address various deprecation warnings.
|
||||
|
||||
* Fix EQ constraint for the case no hydro inflow is available
|
||||
|
||||
* Bugfix in the reserve constraint will increase demand related reserve requirements
|
||||
|
||||
PyPSA-Eur 0.6.1 (20th September 2022)
|
||||
=====================================
|
||||
@ -66,27 +136,20 @@ PyPSA-Eur 0.5.0 (27th July 2022)
|
||||
**New Features**
|
||||
|
||||
* New network topology extracted from the ENTSO-E interactive map.
|
||||
|
||||
* Added existing renewable capacities for all countries based on IRENA
|
||||
statistics (IRENASTAT) using new ``powerplantmatching`` version:
|
||||
* The corresponding ``config`` entries changed, cf. ``config.default.yaml``:
|
||||
* old: ``estimate_renewable_capacities_from_capacity_stats``
|
||||
* new: ``estimate_renewable_capacities``
|
||||
* The estimation is endabled by setting the subkey ``enable`` to ``True``.
|
||||
* Configuration of reference year for capacities can be configured (default:
|
||||
``2020``)
|
||||
* The list of renewables provided by the OPSD database can be used as a basis,
|
||||
using the tag ``from_opsd: True``. This adds the renewables from the
|
||||
database and fills up the missing capacities with the heuristic
|
||||
distribution.
|
||||
* Uniform expansion limit of renewable build-up based on existing capacities
|
||||
can be configured using ``expansion_limit`` option (default: ``false``;
|
||||
limited to determined renewable potentials)
|
||||
* Distribution of country-level capacities proportional to maximum annual
|
||||
energy yield for each bus region
|
||||
* The config key ``renewable_capacities_from_OPSD`` is deprecated and was moved
|
||||
under the section, ``estimate_renewable_capacities``. To enable it, set
|
||||
``from_opsd`` to ``True``.
|
||||
* The corresponding ``config`` entries changed from ``estimate_renewable_capacities_from_capacity_stats`` to ``estimate_renewable_capacities``.
|
||||
* The estimation is endabled by setting the subkey ``enable`` to ``True``.
|
||||
* Configuration of reference year for capacities can be configured (default: ``2020``)
|
||||
* The list of renewables provided by the OPSD database can be used as a basis, using the tag ``from_opsd: True``. This adds the renewables from the database and fills up the missing capacities with the heuristic distribution.
|
||||
* Uniform expansion limit of renewable build-up based on existing capacities
|
||||
can be configured using ``expansion_limit`` option (default: ``false``;
|
||||
limited to determined renewable potentials)
|
||||
* Distribution of country-level capacities proportional to maximum annual
|
||||
energy yield for each bus region
|
||||
* The config key ``renewable_capacities_from_OPSD`` is deprecated and was moved
|
||||
under the section, ``estimate_renewable_capacities``. To enable it, set
|
||||
``from_opsd`` to ``True``.
|
||||
|
||||
* Add operational reserve margin constraint analogous to `GenX implementation
|
||||
<https://genxproject.github.io/GenX/dev/core/#Reserves>`_. Can be activated
|
||||
@ -548,7 +611,7 @@ Release Process
|
||||
|
||||
* Update ``envs/environment.fixed.yaml`` via
|
||||
``conda env export -n pypsa-eur -f envs/environment.fixed.yaml --no-builds``
|
||||
from an up-to-date `pypsa-eur` environment.
|
||||
from an up-to-date ``pypsa-eur`` environment.
|
||||
|
||||
* Update version number in ``doc/conf.py``, ``CITATION.cff`` and ``*config.*.yaml``.
|
||||
|
||||
@ -559,7 +622,7 @@ Release Process
|
||||
|
||||
* Upload code to `zenodo code repository <https://doi.org/10.5281/zenodo.3520874>`_ with `MIT license <https://opensource.org/licenses/MIT>`_.
|
||||
|
||||
* Create pre-built networks for ``config.default.yaml`` by running ``snakemake -j 1 extra_components_all_networks``.
|
||||
* Create pre-built networks for ``config.default.yaml`` by running ``snakemake -call extra_components_all_networks``.
|
||||
|
||||
* Upload pre-built networks to `zenodo data repository <https://doi.org/10.5281/zenodo.3601881>`_ with `CC BY 4.0 <https://creativecommons.org/licenses/by/4.0/>`_ license.
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
# SPDX-FileCopyrightText: : 2019-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2019-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
sphinx
|
||||
sphinx_rtd_theme
|
||||
sphinx_book_theme
|
||||
|
||||
pypsa
|
||||
vresutils>=0.3.1
|
||||
powerplantmatching>=0.4.8
|
||||
atlite>=0.2.2
|
||||
dask<=2021.3.1
|
||||
powerplantmatching>=0.5.5
|
||||
atlite>=0.2.9
|
||||
dask
|
||||
|
||||
# cartopy
|
||||
scikit-learn
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
|
210
doc/tutorial.rst
210
doc/tutorial.rst
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -37,7 +37,7 @@ To run the tutorial, use this as your configuration file ``config.yaml``.
|
||||
|
||||
This configuration is set to download a reduced data set via the rules :mod:`retrieve_databundle`,
|
||||
:mod:`retrieve_natura_raster`, :mod:`retrieve_cutout` totalling at less than 250 MB.
|
||||
The full set of data dependencies would consume 5.3 GB.
|
||||
The full set of data dependencies would take 5.3 GB.
|
||||
For more information on the data dependencies of PyPSA-Eur, continue reading :ref:`data`.
|
||||
|
||||
How to customise PyPSA-Eur?
|
||||
@ -62,7 +62,7 @@ It is also possible to allow less or more carbon-dioxide emissions. Here, we lim
|
||||
.. literalinclude:: ../config.tutorial.yaml
|
||||
:language: yaml
|
||||
:start-at: electricity:
|
||||
:end-before: exentable_carriers:
|
||||
:end-before: extendable_carriers:
|
||||
|
||||
PyPSA-Eur also includes a database of existing conventional powerplants.
|
||||
We can select which types of powerplants we like to be included:
|
||||
@ -107,8 +107,8 @@ on the commercial solvers Gurobi or CPLEX (for which free academic licenses are
|
||||
|
||||
Alternatively, choose another installed solver in the ``config.yaml`` at ``solving: solver:``.
|
||||
|
||||
Note, that we only note major changes to the provided default configuration that is comprehensibly documented in :ref:`config`.
|
||||
There are many more configuration options beyond what is adapted for the tutorial!
|
||||
Note, that we only focus on changes relative to the default configuration.
|
||||
There are many more configuration options, which are documented at :ref:`config`.
|
||||
|
||||
How to use the ``snakemake`` rules?
|
||||
===================================
|
||||
@ -124,7 +124,7 @@ clustered down to 6 buses and every 24 hours aggregated to one snapshot. The com
|
||||
|
||||
.. code:: bash
|
||||
|
||||
.../pypsa-eur % snakemake -j 1 results/networks/elec_s_6_ec_lcopt_Co2L-24H.nc
|
||||
.../pypsa-eur % snakemake -call results/networks/elec_s_6_ec_lcopt_Co2L-24H.nc
|
||||
|
||||
orders ``snakemake`` to run the script ``solve_network`` that produces the solved network and stores it in ``.../pypsa-eur/results/networks`` with the name ``elec_s_6_ec_lcopt_Co2L-24H.nc``:
|
||||
|
||||
@ -132,61 +132,99 @@ orders ``snakemake`` to run the script ``solve_network`` that produces the solve
|
||||
:start-at: rule solve_network:
|
||||
:end-before: rule solve_operations_network:
|
||||
|
||||
.. until https://github.com/snakemake/snakemake/issues/46 closed
|
||||
|
||||
This triggers a workflow of multiple preceding jobs that depend on each rule's inputs and outputs:
|
||||
|
||||
.. graphviz::
|
||||
:class: full-width
|
||||
:align: center
|
||||
|
||||
digraph snakemake_dag {
|
||||
graph[bgcolor=white, margin=0];
|
||||
node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
|
||||
node[shape=box, style=rounded, fontname=sans, fontsize=10, penwidth=2];
|
||||
edge[penwidth=2, color=grey];
|
||||
0[label = "solve_network", color = "0.10 0.6 0.85", style="rounded"];
|
||||
1[label = "prepare_network\nll: copt\nopts: Co2L-24H", color = "0.13 0.6 0.85", style="rounded"];
|
||||
2[label = "cluster_network\nclusters: 6", color = "0.51 0.6 0.85", style="rounded"];
|
||||
3[label = "simplify_network\nnetwork: elec\nsimpl: ", color = "0.00 0.6 0.85", style="rounded"];
|
||||
4[label = "add_electricity", color = "0.60 0.6 0.85", style="rounded"];
|
||||
5[label = "build_bus_regions", color = "0.19 0.6 0.85", style="rounded"];
|
||||
6[label = "base_network", color = "0.38 0.6 0.85", style="rounded"];
|
||||
7[label = "build_shapes", color = "0.03 0.6 0.85", style="rounded"];
|
||||
8[label = "build_renewable_profiles\ntechnology: onwind", color = "0.48 0.6 0.85", style="rounded"];
|
||||
9[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.48 0.6 0.85", style="rounded"];
|
||||
10[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.48 0.6 0.85", style="rounded"];
|
||||
11[label = "build_renewable_profiles\ntechnology: solar", color = "0.48 0.6 0.85", style="rounded"];
|
||||
12[label = "build_cutout\ncutout: europe-2013-era5", color = "0.35 0.6 0.85", style="rounded,dashed"];
|
||||
0[label = "solve_network", color = "0.21 0.6 0.85", style="rounded"];
|
||||
1[label = "prepare_network\nll: copt\nopts: Co2L-24H", color = "0.02 0.6 0.85", style="rounded"];
|
||||
2[label = "add_extra_components", color = "0.37 0.6 0.85", style="rounded"];
|
||||
3[label = "cluster_network\nclusters: 6", color = "0.39 0.6 0.85", style="rounded"];
|
||||
4[label = "simplify_network\nsimpl: ", color = "0.11 0.6 0.85", style="rounded"];
|
||||
5[label = "add_electricity", color = "0.23 0.6 0.85", style="rounded"];
|
||||
6[label = "build_renewable_profiles\ntechnology: onwind", color = "0.57 0.6 0.85", style="rounded"];
|
||||
7[label = "base_network", color = "0.09 0.6 0.85", style="rounded"];
|
||||
8[label = "build_shapes", color = "0.41 0.6 0.85", style="rounded"];
|
||||
9[label = "retrieve_databundle", color = "0.28 0.6 0.85", style="rounded"];
|
||||
10[label = "retrieve_natura_raster", color = "0.62 0.6 0.85", style="rounded"];
|
||||
11[label = "build_bus_regions", color = "0.53 0.6 0.85", style="rounded"];
|
||||
12[label = "retrieve_cutout\ncutout: europe-2013-era5", color = "0.05 0.6 0.85", style="rounded,dashed"];
|
||||
13[label = "build_renewable_profiles\ntechnology: offwind-ac", color = "0.57 0.6 0.85", style="rounded"];
|
||||
14[label = "build_ship_raster", color = "0.64 0.6 0.85", style="rounded"];
|
||||
15[label = "retrieve_ship_raster", color = "0.07 0.6 0.85", style="rounded,dashed"];
|
||||
16[label = "retrieve_cutout\ncutout: europe-2013-sarah", color = "0.05 0.6 0.85", style="rounded,dashed"];
|
||||
17[label = "build_renewable_profiles\ntechnology: offwind-dc", color = "0.57 0.6 0.85", style="rounded"];
|
||||
18[label = "build_renewable_profiles\ntechnology: solar", color = "0.57 0.6 0.85", style="rounded"];
|
||||
19[label = "build_hydro_profile", color = "0.44 0.6 0.85", style="rounded"];
|
||||
20[label = "retrieve_cost_data", color = "0.30 0.6 0.85", style="rounded"];
|
||||
21[label = "build_powerplants", color = "0.16 0.6 0.85", style="rounded"];
|
||||
22[label = "build_load_data", color = "0.00 0.6 0.85", style="rounded"];
|
||||
23[label = "retrieve_load_data", color = "0.34 0.6 0.85", style="rounded,dashed"];
|
||||
1 -> 0
|
||||
2 -> 1
|
||||
20 -> 1
|
||||
3 -> 2
|
||||
20 -> 2
|
||||
4 -> 3
|
||||
5 -> 3
|
||||
6 -> 4
|
||||
20 -> 3
|
||||
5 -> 4
|
||||
7 -> 4
|
||||
8 -> 4
|
||||
9 -> 4
|
||||
10 -> 4
|
||||
20 -> 4
|
||||
11 -> 4
|
||||
7 -> 5
|
||||
6 -> 5
|
||||
13 -> 5
|
||||
17 -> 5
|
||||
18 -> 5
|
||||
19 -> 5
|
||||
7 -> 5
|
||||
20 -> 5
|
||||
11 -> 5
|
||||
21 -> 5
|
||||
9 -> 5
|
||||
22 -> 5
|
||||
8 -> 5
|
||||
7 -> 6
|
||||
6 -> 8
|
||||
7 -> 8
|
||||
5 -> 8
|
||||
12 -> 8
|
||||
6 -> 9
|
||||
7 -> 9
|
||||
5 -> 9
|
||||
12 -> 9
|
||||
6 -> 10
|
||||
7 -> 10
|
||||
5 -> 10
|
||||
12 -> 10
|
||||
6 -> 11
|
||||
9 -> 6
|
||||
10 -> 6
|
||||
8 -> 6
|
||||
11 -> 6
|
||||
12 -> 6
|
||||
8 -> 7
|
||||
9 -> 8
|
||||
8 -> 11
|
||||
7 -> 11
|
||||
5 -> 11
|
||||
12 -> 11
|
||||
7 -> 13
|
||||
9 -> 13
|
||||
10 -> 13
|
||||
14 -> 13
|
||||
8 -> 13
|
||||
11 -> 13
|
||||
12 -> 13
|
||||
15 -> 14
|
||||
12 -> 14
|
||||
16 -> 14
|
||||
7 -> 17
|
||||
9 -> 17
|
||||
10 -> 17
|
||||
14 -> 17
|
||||
8 -> 17
|
||||
11 -> 17
|
||||
12 -> 17
|
||||
7 -> 18
|
||||
9 -> 18
|
||||
10 -> 18
|
||||
8 -> 18
|
||||
11 -> 18
|
||||
16 -> 18
|
||||
8 -> 19
|
||||
12 -> 19
|
||||
7 -> 21
|
||||
23 -> 22
|
||||
}
|
||||
|
||||
|
|
||||
@ -196,57 +234,47 @@ In the terminal, this will show up as a list of jobs to be run:
|
||||
.. code:: bash
|
||||
|
||||
Building DAG of jobs...
|
||||
Using shell: /bin/bash
|
||||
Provided cores: 1
|
||||
Rules claiming more threads will be scaled down.
|
||||
Unlimited resources: mem
|
||||
Job counts:
|
||||
count jobs
|
||||
1 add_electricity
|
||||
1 base_network
|
||||
1 build_bus_regions
|
||||
4 build_renewable_profiles
|
||||
1 build_shapes
|
||||
1 cluster_network
|
||||
1 prepare_network
|
||||
1 simplify_network
|
||||
1 solve_network
|
||||
12
|
||||
Job stats:
|
||||
job count min threads max threads
|
||||
------------------------ ------- ------------- -------------
|
||||
add_electricity 1 1 1
|
||||
add_extra_components 1 1 1
|
||||
base_network 1 1 1
|
||||
build_bus_regions 1 1 1
|
||||
build_hydro_profile 1 1 1
|
||||
build_load_data 1 1 1
|
||||
build_powerplants 1 1 1
|
||||
build_renewable_profiles 4 1 1
|
||||
build_shapes 1 1 1
|
||||
build_ship_raster 1 1 1
|
||||
cluster_network 1 1 1
|
||||
prepare_network 1 1 1
|
||||
retrieve_cost_data 1 1 1
|
||||
retrieve_databundle 1 1 1
|
||||
retrieve_natura_raster 1 1 1
|
||||
simplify_network 1 1 1
|
||||
solve_network 1 1 1
|
||||
total 20 1 1
|
||||
|
||||
|
||||
``snakemake`` then runs these jobs in the correct order.
|
||||
|
||||
A job (here ``simplify_network``) will display its attributes and normally some logs in the terminal:
|
||||
A job (here ``simplify_network``) will display its attributes and normally some logs below this block:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
[<DATETIME>]
|
||||
[Mon Jan 1 00:00:00 2023]
|
||||
rule simplify_network:
|
||||
input: networks/elec.nc, resources/costs.csv, resources/regions_onshore.geojson, resources/regions_offshore.geojson
|
||||
output: networks/elec_s.nc, resources/regions_onshore_elec_s.geojson, resources/regions_offshore_elec_s.geojson, resources/clustermaps_elec_s.h5
|
||||
jobid: 3
|
||||
output: networks/elec_s.nc, resources/regions_onshore_elec_s.geojson, resources/regions_offshore_elec_s.geojson, resources/busmap_elec_s.csv, resources/connection_costs_s.csv
|
||||
log: logs/simplify_network/elec_s.log
|
||||
jobid: 4
|
||||
benchmark: benchmarks/simplify_network/elec_s
|
||||
wildcards: network=elec, simpl=
|
||||
resources: mem=4000
|
||||
reason: Missing output files: resources/busmap_elec_s.csv, resources/regions_onshore_elec_s.geojson, networks/elec_s.nc, resources/regions_offshore_elec_s.geojson; Input files updated by another job: resources/regions_offshore.geojson, resources/regions_onshore.geojson, resources/costs.csv, networks/elec.nc
|
||||
wildcards: simpl=
|
||||
resources: tmpdir=/tmp, mem_mb=4000, mem_mib=3815
|
||||
|
||||
INFO:pypsa.io:Imported network elec.nc has buses, carriers, generators, lines, links, loads, storage_units, transformers
|
||||
INFO:__main__:Mapping all network lines onto a single 380kV layer
|
||||
INFO:__main__:Simplifying connected link components
|
||||
INFO:__main__:Removing stubs
|
||||
INFO:__main__:Displacing offwind-ac generator(s) and adding connection costs to capital_costs: 20128 Eur/MW/a for `5718 offwind-ac`
|
||||
INFO:__main__:Displacing offwind-dc generator(s) and adding connection costs to capital_costs: 14994 Eur/MW/a for `5718 offwind-dc`, 26939 Eur/MW/a for `5724 offwind-dc`, 29621 Eur/MW/a for `5725 offwind-dc`
|
||||
INFO:pypsa.io:Exported network elec_s.nc has lines, carriers, links, storage_units, loads, buses, generators
|
||||
[<DATETIME>]
|
||||
Finished job 3.
|
||||
9 of 12 steps (75%) done
|
||||
|
||||
Once the whole worktree is finished, it should show state so in the terminal:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
Finished job 0.
|
||||
12 of 12 steps (100%) done
|
||||
Complete log: /home/XXXX/pypsa-eur/.snakemake/log/20XX-XX-XXTXX.snakemake.log
|
||||
snakemake results/networks/elec_s_6_ec_lcopt_Co2L-24H.nc 519,84s user 34,26s system 242% cpu 3:48,83 total
|
||||
Once the whole worktree is finished, it should state so in the terminal.
|
||||
|
||||
You will notice that many intermediate stages are saved, namely the outputs of each individual ``snakemake`` rule.
|
||||
|
||||
@ -254,15 +282,15 @@ You can produce any output file occurring in the ``Snakefile`` by running
|
||||
|
||||
.. code:: bash
|
||||
|
||||
.../pypsa-eur % snakemake -j 1 <output file>
|
||||
.../pypsa-eur % snakemake -call <output file>
|
||||
|
||||
For example, you can explore the evolution of the PyPSA networks by running
|
||||
|
||||
#. ``.../pypsa-eur % snakemake -j 1 networks/base.nc``
|
||||
#. ``.../pypsa-eur % snakemake -j 1 networks/elec.nc``
|
||||
#. ``.../pypsa-eur % snakemake -j 1 networks/elec_s.nc``
|
||||
#. ``.../pypsa-eur % snakemake -j 1 networks/elec_s_6.nc``
|
||||
#. ``.../pypsa-eur % snakemake -j 1 networks/elec_s_6_ec_lcopt_Co2L-24H.nc``
|
||||
#. ``.../pypsa-eur % snakemake -call networks/base.nc``
|
||||
#. ``.../pypsa-eur % snakemake -call networks/elec.nc``
|
||||
#. ``.../pypsa-eur % snakemake -call networks/elec_s.nc``
|
||||
#. ``.../pypsa-eur % snakemake -call networks/elec_s_6.nc``
|
||||
#. ``.../pypsa-eur % snakemake -call networks/elec_s_6_ec_lcopt_Co2L-24H.nc``
|
||||
|
||||
There's a special rule: If you simply run
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
..
|
||||
SPDX-FileCopyrightText: 2019-2022 The PyPSA-Eur Authors
|
||||
SPDX-FileCopyrightText: 2019-2023 The PyPSA-Eur Authors
|
||||
|
||||
SPDX-License-Identifier: CC-BY-4.0
|
||||
|
||||
@ -107,7 +107,7 @@ in Germany (in the solution for Europe) use:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
snakemake -j 1 results/summaries/elec_s_all_lall_Co2L-3H_DE
|
||||
snakemake -call results/summaries/elec_s_all_lall_Co2L-3H_DE
|
||||
|
||||
.. _cutout_wc:
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
@ -11,392 +11,339 @@ channels:
|
||||
dependencies:
|
||||
- _libgcc_mutex=0.1
|
||||
- _openmp_mutex=4.5
|
||||
- abseil-cpp=20210324.2
|
||||
- affine=2.3.1
|
||||
- alsa-lib=1.2.3.2
|
||||
- altair=4.2.0
|
||||
- affine=2.4.0
|
||||
- alsa-lib=1.2.8
|
||||
- ampl-mp=3.1.0
|
||||
- amply=0.1.5
|
||||
- anyio=3.6.1
|
||||
- appdirs=1.4.4
|
||||
- argon2-cffi=21.3.0
|
||||
- argon2-cffi-bindings=21.2.0
|
||||
- arrow-cpp=8.0.0
|
||||
- asttokens=2.0.5
|
||||
- atlite=0.2.9
|
||||
- attrs=21.4.0
|
||||
- aws-c-cal=0.5.11
|
||||
- aws-c-common=0.6.2
|
||||
- aws-c-event-stream=0.2.7
|
||||
- aws-c-io=0.10.5
|
||||
- aws-checksums=0.1.11
|
||||
- aws-sdk-cpp=1.8.186
|
||||
- babel=2.10.3
|
||||
- asttokens=2.2.1
|
||||
- atlite=0.2.10
|
||||
- attr=2.5.1
|
||||
- attrs=22.2.0
|
||||
- backcall=0.2.0
|
||||
- backports=1.0
|
||||
- backports.functools_lru_cache=1.6.4
|
||||
- beautifulsoup4=4.11.1
|
||||
- bleach=5.0.1
|
||||
- blinker=1.4
|
||||
- blosc=1.21.1
|
||||
- beautifulsoup4=4.11.2
|
||||
- blosc=1.21.3
|
||||
- bokeh=2.4.3
|
||||
- boost-cpp=1.74.0
|
||||
- bottleneck=1.3.5
|
||||
- branca=0.5.0
|
||||
- boost-cpp=1.78.0
|
||||
- bottleneck=1.3.6
|
||||
- branca=0.6.0
|
||||
- brotli=1.0.9
|
||||
- brotli-bin=1.0.9
|
||||
- brotlipy=0.7.0
|
||||
- bzip2=1.0.8
|
||||
- c-ares=1.18.1
|
||||
- ca-certificates=2022.6.15.1
|
||||
- cachetools=5.0.0
|
||||
- ca-certificates=2022.12.7
|
||||
- cairo=1.16.0
|
||||
- cartopy=0.20.1
|
||||
- cartopy=0.21.1
|
||||
- cdsapi=0.5.1
|
||||
- certifi=2022.6.15.1
|
||||
- certifi=2022.12.7
|
||||
- cffi=1.15.1
|
||||
- cfitsio=4.0.0
|
||||
- cftime=1.6.1
|
||||
- charset-normalizer=2.1.0
|
||||
- click=8.0.4
|
||||
- cfitsio=4.2.0
|
||||
- cftime=1.6.2
|
||||
- charset-normalizer=2.1.1
|
||||
- click=8.1.3
|
||||
- click-plugins=1.1.1
|
||||
- cligj=0.7.2
|
||||
- cloudpickle=2.1.0
|
||||
- cloudpickle=2.2.1
|
||||
- coin-or-cbc=2.10.8
|
||||
- coin-or-cgl=0.60.6
|
||||
- coin-or-clp=1.17.7
|
||||
- coin-or-osi=0.108.7
|
||||
- coin-or-utils=2.11.6
|
||||
- coincbc=2.10.8
|
||||
- colorama=0.4.5
|
||||
- colorcet=3.0.0
|
||||
- commonmark=0.9.1
|
||||
- colorama=0.4.6
|
||||
- configargparse=1.5.3
|
||||
- connection_pool=0.0.3
|
||||
- country_converter=0.7.4
|
||||
- cryptography=37.0.4
|
||||
- curl=7.83.1
|
||||
- country_converter=0.8.0
|
||||
- cryptography=39.0.1
|
||||
- curl=7.88.0
|
||||
- cycler=0.11.0
|
||||
- cytoolz=0.12.0
|
||||
- dask=2022.7.0
|
||||
- dask-core=2022.7.0
|
||||
- dataclasses=0.8
|
||||
- dask=2023.2.0
|
||||
- dask-core=2023.2.0
|
||||
- datrie=0.8.2
|
||||
- dbus=1.13.6
|
||||
- debugpy=1.6.0
|
||||
- decorator=5.1.1
|
||||
- defusedxml=0.7.1
|
||||
- deprecation=2.1.0
|
||||
- descartes=1.1.0
|
||||
- distributed=2022.7.0
|
||||
- distro=1.6.0
|
||||
- distributed=2023.2.0
|
||||
- distro=1.8.0
|
||||
- docutils=0.19
|
||||
- dpath=2.0.6
|
||||
- entrypoints=0.4
|
||||
- entsoe-py=0.5.4
|
||||
- et_xmlfile=1.0.1
|
||||
- executing=0.8.3
|
||||
- expat=2.4.8
|
||||
- filelock=3.7.1
|
||||
- fiona=1.8.20
|
||||
- flit-core=3.7.1
|
||||
- folium=0.12.1.post1
|
||||
- dpath=2.1.4
|
||||
- entsoe-py=0.5.8
|
||||
- et_xmlfile=1.1.0
|
||||
- exceptiongroup=1.1.0
|
||||
- executing=1.2.0
|
||||
- expat=2.5.0
|
||||
- fftw=3.3.10
|
||||
- filelock=3.9.0
|
||||
- fiona=1.9.1
|
||||
- folium=0.14.0
|
||||
- font-ttf-dejavu-sans-mono=2.37
|
||||
- font-ttf-inconsolata=3.000
|
||||
- font-ttf-source-code-pro=2.038
|
||||
- font-ttf-ubuntu=0.83
|
||||
- fontconfig=2.14.0
|
||||
- fontconfig=2.14.2
|
||||
- fonts-conda-ecosystem=1
|
||||
- fonts-conda-forge=1
|
||||
- fonttools=4.34.4
|
||||
- freetype=2.10.4
|
||||
- fonttools=4.38.0
|
||||
- freetype=2.12.1
|
||||
- freexl=1.0.6
|
||||
- fsspec=2022.5.0
|
||||
- future=0.18.2
|
||||
- gdal=3.3.3
|
||||
- fsspec=2023.1.0
|
||||
- gdal=3.6.2
|
||||
- geographiclib=1.52
|
||||
- geojson-rewind=1.0.2
|
||||
- geopandas=0.11.0
|
||||
- geopandas-base=0.11.0
|
||||
- geopy=2.2.0
|
||||
- geos=3.10.0
|
||||
- geotiff=1.7.0
|
||||
- gettext=0.19.8.1
|
||||
- gflags=2.2.2
|
||||
- geopandas=0.12.2
|
||||
- geopandas-base=0.12.2
|
||||
- geopy=2.3.0
|
||||
- geos=3.11.1
|
||||
- geotiff=1.7.1
|
||||
- gettext=0.21.1
|
||||
- giflib=5.2.1
|
||||
- gitdb=4.0.9
|
||||
- gitpython=3.1.27
|
||||
- glog=0.6.0
|
||||
- gmp=6.2.1
|
||||
- gitdb=4.0.10
|
||||
- gitpython=3.1.30
|
||||
- glib=2.74.1
|
||||
- glib-tools=2.74.1
|
||||
- graphite2=1.3.13
|
||||
- grpc-cpp=1.45.2
|
||||
- gst-plugins-base=1.18.5
|
||||
- gstreamer=1.18.5
|
||||
- harfbuzz=2.9.1
|
||||
- gst-plugins-base=1.22.0
|
||||
- gstreamer=1.22.0
|
||||
- gstreamer-orc=0.4.33
|
||||
- harfbuzz=6.0.0
|
||||
- hdf4=4.2.15
|
||||
- hdf5=1.12.1
|
||||
- hdf5=1.12.2
|
||||
- heapdict=1.0.1
|
||||
- icu=68.2
|
||||
- idna=3.3
|
||||
- importlib-metadata=4.11.4
|
||||
- importlib_metadata=4.11.4
|
||||
- importlib_resources=5.8.0
|
||||
- iniconfig=1.1.1
|
||||
- ipykernel=6.15.1
|
||||
- ipython=8.4.0
|
||||
- ipython_genutils=0.2.0
|
||||
- ipywidgets=7.7.1
|
||||
- jedi=0.18.1
|
||||
- humanfriendly=10.0
|
||||
- icu=70.1
|
||||
- idna=3.4
|
||||
- importlib-metadata=6.0.0
|
||||
- importlib_resources=5.10.2
|
||||
- iniconfig=2.0.0
|
||||
- ipopt=3.14.11
|
||||
- ipython=8.10.0
|
||||
- jack=1.9.22
|
||||
- jedi=0.18.2
|
||||
- jinja2=3.1.2
|
||||
- joblib=1.1.0
|
||||
- joblib=1.2.0
|
||||
- jpeg=9e
|
||||
- json-c=0.15
|
||||
- json5=0.9.5
|
||||
- jsonschema=4.7.2
|
||||
- jupyter_client=7.3.4
|
||||
- jupyter_core=4.10.0
|
||||
- jupyter_server=1.18.1
|
||||
- kealib=1.4.15
|
||||
- json-c=0.16
|
||||
- jsonschema=4.17.3
|
||||
- jupyter_core=5.2.0
|
||||
- kealib=1.5.0
|
||||
- keyutils=1.6.1
|
||||
- kiwisolver=1.4.4
|
||||
- krb5=1.19.3
|
||||
- lcms2=2.12
|
||||
- ld_impl_linux-64=2.36.1
|
||||
- lerc=3.0
|
||||
- krb5=1.20.1
|
||||
- lame=3.100
|
||||
- lcms2=2.14
|
||||
- ld_impl_linux-64=2.40
|
||||
- lerc=4.0.0
|
||||
- libaec=1.0.6
|
||||
- libblas=3.9.0
|
||||
- libbrotlicommon=1.0.9
|
||||
- libbrotlidec=1.0.9
|
||||
- libbrotlienc=1.0.9
|
||||
- libcap=2.66
|
||||
- libcblas=3.9.0
|
||||
- libclang=11.1.0
|
||||
- libcrc32c=1.1.2
|
||||
- libcurl=7.83.1
|
||||
- libdap4=3.20.6
|
||||
- libdeflate=1.12
|
||||
- libclang=15.0.7
|
||||
- libclang13=15.0.7
|
||||
- libcups=2.3.3
|
||||
- libcurl=7.88.0
|
||||
- libdb=6.2.32
|
||||
- libdeflate=1.17
|
||||
- libedit=3.1.20191231
|
||||
- libev=4.33
|
||||
- libevent=2.1.10
|
||||
- libffi=3.4.2
|
||||
- libgcc-ng=12.1.0
|
||||
- libgdal=3.3.3
|
||||
- libgfortran-ng=12.1.0
|
||||
- libgfortran5=12.1.0
|
||||
- libglib=2.72.1
|
||||
- libgomp=12.1.0
|
||||
- libgoogle-cloud=1.40.2
|
||||
- libiconv=1.16
|
||||
- libflac=1.4.2
|
||||
- libgcc-ng=12.2.0
|
||||
- libgcrypt=1.10.1
|
||||
- libgdal=3.6.2
|
||||
- libgfortran-ng=12.2.0
|
||||
- libgfortran5=12.2.0
|
||||
- libglib=2.74.1
|
||||
- libgomp=12.2.0
|
||||
- libgpg-error=1.46
|
||||
- libiconv=1.17
|
||||
- libkml=1.3.0
|
||||
- liblapack=3.9.0
|
||||
- liblapacke=3.9.0
|
||||
- libllvm11=11.1.0
|
||||
- libllvm15=15.0.7
|
||||
- libnetcdf=4.8.1
|
||||
- libnghttp2=1.47.0
|
||||
- libnghttp2=1.51.0
|
||||
- libnsl=2.0.0
|
||||
- libogg=1.3.4
|
||||
- libopenblas=0.3.20
|
||||
- libopenblas=0.3.21
|
||||
- libopus=1.3.1
|
||||
- libpng=1.6.37
|
||||
- libpq=13.5
|
||||
- libprotobuf=3.20.1
|
||||
- libpng=1.6.39
|
||||
- libpq=15.2
|
||||
- librttopo=1.1.0
|
||||
- libsodium=1.0.18
|
||||
- libsndfile=1.2.0
|
||||
- libspatialindex=1.9.3
|
||||
- libspatialite=5.0.1
|
||||
- libsqlite=3.40.0
|
||||
- libssh2=1.10.0
|
||||
- libstdcxx-ng=12.1.0
|
||||
- libthrift=0.16.0
|
||||
- libtiff=4.4.0
|
||||
- libutf8proc=2.7.0
|
||||
- libstdcxx-ng=12.2.0
|
||||
- libsystemd0=252
|
||||
- libtiff=4.5.0
|
||||
- libtool=2.4.7
|
||||
- libudev1=252
|
||||
- libuuid=2.32.1
|
||||
- libvorbis=1.3.7
|
||||
- libwebp=1.2.2
|
||||
- libwebp-base=1.2.2
|
||||
- libwebp-base=1.2.4
|
||||
- libxcb=1.13
|
||||
- libxkbcommon=1.0.3
|
||||
- libxml2=2.9.12
|
||||
- libxslt=1.1.33
|
||||
- libxkbcommon=1.5.0
|
||||
- libxml2=2.10.3
|
||||
- libxslt=1.1.37
|
||||
- libzip=1.9.2
|
||||
- libzlib=1.2.12
|
||||
- libzlib=1.2.13
|
||||
- linopy=0.1.3
|
||||
- locket=1.0.0
|
||||
- lxml=4.8.0
|
||||
- lz4=4.0.0
|
||||
- lz4-c=1.9.3
|
||||
- lxml=4.9.2
|
||||
- lz4=4.3.2
|
||||
- lz4-c=1.9.4
|
||||
- lzo=2.10
|
||||
- mapclassify=2.4.3
|
||||
- markdown=3.4.1
|
||||
- markupsafe=2.1.1
|
||||
- matplotlib=3.5.2
|
||||
- matplotlib-base=3.5.2
|
||||
- matplotlib-inline=0.1.3
|
||||
- memory_profiler=0.60.0
|
||||
- mapclassify=2.5.0
|
||||
- markupsafe=2.1.2
|
||||
- matplotlib=3.5.3
|
||||
- matplotlib-base=3.5.3
|
||||
- matplotlib-inline=0.1.6
|
||||
- memory_profiler=0.61.0
|
||||
- metis=5.1.0
|
||||
- mistune=0.8.4
|
||||
- mpg123=1.31.2
|
||||
- msgpack-python=1.0.4
|
||||
- mumps-include=5.2.1
|
||||
- mumps-seq=5.2.1
|
||||
- munch=2.5.0
|
||||
- munkres=1.1.4
|
||||
- mysql-common=8.0.29
|
||||
- mysql-libs=8.0.29
|
||||
- nbclassic=0.4.3
|
||||
- nbclient=0.6.6
|
||||
- nbconvert=6.5.0
|
||||
- nbconvert-core=6.5.0
|
||||
- nbconvert-pandoc=6.5.0
|
||||
- nbformat=5.4.0
|
||||
- mysql-common=8.0.32
|
||||
- mysql-libs=8.0.32
|
||||
- nbformat=5.7.3
|
||||
- ncurses=6.3
|
||||
- nest-asyncio=1.5.5
|
||||
- netcdf4=1.6.0
|
||||
- networkx=2.8.4
|
||||
- netcdf4=1.6.2
|
||||
- networkx=3.0
|
||||
- nomkl=1.0
|
||||
- notebook=6.4.12
|
||||
- notebook-shim=0.1.0
|
||||
- nspr=4.32
|
||||
- nss=3.78
|
||||
- nspr=4.35
|
||||
- nss=3.88
|
||||
- numexpr=2.8.3
|
||||
- numpy=1.23.1
|
||||
- openjdk=11.0.9.1
|
||||
- openjpeg=2.4.0
|
||||
- openpyxl=3.0.9
|
||||
- openssl=1.1.1q
|
||||
- orc=1.7.5
|
||||
- packaging=21.3
|
||||
- pandas=1.4.3
|
||||
- pandoc=2.18
|
||||
- pandocfilters=1.5.0
|
||||
- parquet-cpp=1.5.1
|
||||
- numpy=1.23.5
|
||||
- openjdk=17.0.3
|
||||
- openjpeg=2.5.0
|
||||
- openpyxl=3.1.0
|
||||
- openssl=3.0.8
|
||||
- packaging=23.0
|
||||
- pandas=1.5.3
|
||||
- parso=0.8.3
|
||||
- partd=1.2.0
|
||||
- patsy=0.5.2
|
||||
- pcre=8.45
|
||||
- partd=1.3.0
|
||||
- patsy=0.5.3
|
||||
- pcre2=10.40
|
||||
- pexpect=4.8.0
|
||||
- pickleshare=0.7.5
|
||||
- pillow=9.2.0
|
||||
- pip=22.1.2
|
||||
- pillow=9.4.0
|
||||
- pip=23.0
|
||||
- pixman=0.40.0
|
||||
- pkgutil-resolve-name=1.3.10
|
||||
- plac=1.3.5
|
||||
- platformdirs=3.0.0
|
||||
- pluggy=1.0.0
|
||||
- ply=3.11
|
||||
- poppler=21.09.0
|
||||
- poppler-data=0.4.11
|
||||
- postgresql=13.5
|
||||
- powerplantmatching=0.5.4
|
||||
- progressbar2=4.0.0
|
||||
- proj=8.1.1
|
||||
- prometheus_client=0.14.1
|
||||
- prompt-toolkit=3.0.30
|
||||
- protobuf=3.20.1
|
||||
- psutil=5.9.1
|
||||
- pooch=1.6.0
|
||||
- poppler=22.12.0
|
||||
- poppler-data=0.4.12
|
||||
- postgresql=15.2
|
||||
- powerplantmatching=0.5.6
|
||||
- progressbar2=4.2.0
|
||||
- proj=9.1.0
|
||||
- prompt-toolkit=3.0.36
|
||||
- psutil=5.9.4
|
||||
- pthread-stubs=0.4
|
||||
- ptyprocess=0.7.0
|
||||
- pulp=2.6.0
|
||||
- pulp=2.7.0
|
||||
- pulseaudio=16.1
|
||||
- pure_eval=0.2.2
|
||||
- py=1.11.0
|
||||
- pyarrow=8.0.0
|
||||
- pycountry=20.7.3
|
||||
- pycountry=22.3.5
|
||||
- pycparser=2.21
|
||||
- pyct=0.4.6
|
||||
- pyct-core=0.4.6
|
||||
- pydeck=0.7.1
|
||||
- pygments=2.12.0
|
||||
- pympler=0.9
|
||||
- pyomo=6.4.1
|
||||
- pyopenssl=22.0.0
|
||||
- pygments=2.14.0
|
||||
- pyomo=6.4.4
|
||||
- pyopenssl=23.0.0
|
||||
- pyparsing=3.0.9
|
||||
- pyproj=3.2.1
|
||||
- pypsa=0.20.0
|
||||
- pyqt=5.12.3
|
||||
- pyqt-impl=5.12.3
|
||||
- pyqt5-sip=4.19.18
|
||||
- pyqtchart=5.12
|
||||
- pyqtwebengine=5.12.1
|
||||
- pyrsistent=0.18.1
|
||||
- pyshp=2.3.0
|
||||
- pyproj=3.4.1
|
||||
- pypsa=0.22.1
|
||||
- pyqt=5.15.7
|
||||
- pyqt5-sip=12.11.0
|
||||
- pyrsistent=0.19.3
|
||||
- pyshp=2.3.1
|
||||
- pysocks=1.7.1
|
||||
- pytables=3.7.0
|
||||
- pytest=7.1.2
|
||||
- python=3.9.13
|
||||
- pytest=7.2.1
|
||||
- python=3.10.9
|
||||
- python-dateutil=2.8.2
|
||||
- python-fastjsonschema=2.16.1
|
||||
- python-tzdata=2022.1
|
||||
- python-utils=3.3.3
|
||||
- python_abi=3.9
|
||||
- pytz=2022.1
|
||||
- pytz-deprecation-shim=0.1.0.post0
|
||||
- pyviz_comms=2.2.0
|
||||
- pyxlsb=1.0.9
|
||||
- python-fastjsonschema=2.16.2
|
||||
- python-utils=3.5.2
|
||||
- python_abi=3.10
|
||||
- pytz=2022.7.1
|
||||
- pyxlsb=1.0.10
|
||||
- pyyaml=6.0
|
||||
- pyzmq=23.2.0
|
||||
- qt=5.12.9
|
||||
- rasterio=1.2.9
|
||||
- ratelimiter=1.2.0
|
||||
- re2=2022.06.01
|
||||
- qt-main=5.15.8
|
||||
- rasterio=1.3.4
|
||||
- readline=8.1.2
|
||||
- requests=2.28.1
|
||||
- retry=0.9.2
|
||||
- rich=12.5.1
|
||||
- rtree=1.0.0
|
||||
- s2n=1.0.10
|
||||
- scikit-learn=1.1.1
|
||||
- scipy=1.8.1
|
||||
- requests=2.28.2
|
||||
- reretry=0.11.8
|
||||
- rtree=1.0.1
|
||||
- scikit-learn=1.2.1
|
||||
- scipy=1.10.0
|
||||
- scotch=6.0.9
|
||||
- seaborn=0.11.2
|
||||
- seaborn-base=0.11.2
|
||||
- semver=2.13.0
|
||||
- send2trash=1.8.0
|
||||
- setuptools=63.2.0
|
||||
- setuptools-scm=7.0.5
|
||||
- setuptools_scm=7.0.5
|
||||
- shapely=1.8.0
|
||||
- seaborn=0.12.2
|
||||
- seaborn-base=0.12.2
|
||||
- setuptools=67.3.2
|
||||
- setuptools-scm=7.1.0
|
||||
- setuptools_scm=7.1.0
|
||||
- shapely=2.0.1
|
||||
- sip=6.7.7
|
||||
- six=1.16.0
|
||||
- smart_open=6.0.0
|
||||
- smart_open=6.3.0
|
||||
- smmap=3.0.5
|
||||
- snakemake-minimal=7.8.5
|
||||
- snakemake-minimal=7.22.0
|
||||
- snappy=1.1.9
|
||||
- sniffio=1.2.0
|
||||
- snuggs=1.4.7
|
||||
- sortedcontainers=2.4.0
|
||||
- soupsieve=2.3.1
|
||||
- sqlite=3.39.1
|
||||
- stack_data=0.3.0
|
||||
- statsmodels=0.13.2
|
||||
- soupsieve=2.3.2.post1
|
||||
- sqlite=3.40.0
|
||||
- stack_data=0.6.2
|
||||
- statsmodels=0.13.5
|
||||
- stopit=1.1.2
|
||||
- streamlit=1.10.0
|
||||
- tabula-py=2.2.0
|
||||
- tabulate=0.8.10
|
||||
- tabula-py=2.6.0
|
||||
- tabulate=0.9.0
|
||||
- tblib=1.7.0
|
||||
- tenacity=8.0.1
|
||||
- terminado=0.15.0
|
||||
- threadpoolctl=3.1.0
|
||||
- tiledb=2.3.4
|
||||
- tinycss2=1.1.1
|
||||
- throttler=1.2.1
|
||||
- tiledb=2.13.2
|
||||
- tk=8.6.12
|
||||
- toml=0.10.2
|
||||
- tomli=2.0.1
|
||||
- toolz=0.12.0
|
||||
- toposort=1.7
|
||||
- tornado=6.1
|
||||
- tqdm=4.64.0
|
||||
- traitlets=5.3.0
|
||||
- typing-extensions=4.3.0
|
||||
- typing_extensions=4.3.0
|
||||
- tzcode=2022a
|
||||
- tzdata=2022a
|
||||
- tzlocal=4.2
|
||||
- unicodedata2=14.0.0
|
||||
- unidecode=1.3.4
|
||||
- toposort=1.9
|
||||
- tornado=6.2
|
||||
- tqdm=4.64.1
|
||||
- traitlets=5.9.0
|
||||
- typing-extensions=4.4.0
|
||||
- typing_extensions=4.4.0
|
||||
- tzcode=2022g
|
||||
- tzdata=2022g
|
||||
- unicodedata2=15.0.0
|
||||
- unidecode=1.3.6
|
||||
- unixodbc=2.3.10
|
||||
- urllib3=1.26.10
|
||||
- validators=0.18.2
|
||||
- watchdog=2.1.9
|
||||
- wcwidth=0.2.5
|
||||
- webencodings=0.5.1
|
||||
- websocket-client=1.3.3
|
||||
- wheel=0.37.1
|
||||
- widgetsnbextension=3.6.1
|
||||
- urllib3=1.26.14
|
||||
- wcwidth=0.2.6
|
||||
- wheel=0.38.4
|
||||
- wrapt=1.14.1
|
||||
- xarray=2022.3.0
|
||||
- xerces-c=3.2.3
|
||||
- xarray=2023.2.0
|
||||
- xcb-util=0.4.0
|
||||
- xcb-util-image=0.4.0
|
||||
- xcb-util-keysyms=0.4.0
|
||||
- xcb-util-renderutil=0.3.9
|
||||
- xcb-util-wm=0.4.1
|
||||
- xerces-c=3.2.4
|
||||
- xlrd=2.0.1
|
||||
- xorg-fixesproto=5.0
|
||||
- xorg-inputproto=2.3.2
|
||||
@ -415,16 +362,17 @@ dependencies:
|
||||
- xorg-renderproto=0.11.1
|
||||
- xorg-xextproto=7.3.0
|
||||
- xorg-xproto=7.0.31
|
||||
- xyzservices=2022.6.0
|
||||
- xz=5.2.5
|
||||
- xyzservices=2022.9.0
|
||||
- xz=5.2.6
|
||||
- yaml=0.2.5
|
||||
- yte=1.5.1
|
||||
- zeromq=4.3.4
|
||||
- zict=2.2.0
|
||||
- zipp=3.8.0
|
||||
- zlib=1.2.12
|
||||
- zipp=3.13.0
|
||||
- zlib=1.2.13
|
||||
- zstd=1.5.2
|
||||
- pip:
|
||||
- countrycode==0.2
|
||||
- tsam==2.1.0
|
||||
- highspy==1.5.0.dev0
|
||||
- pybind11==2.10.3
|
||||
- tsam==2.2.2
|
||||
- vresutils==0.3.1
|
||||
|
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -18,7 +18,7 @@ dependencies:
|
||||
|
||||
# Dependencies of the workflow itself
|
||||
- xlrd
|
||||
- openpyxl
|
||||
- openpyxl!=3.1.1
|
||||
- pycountry
|
||||
- seaborn
|
||||
- snakemake-minimal
|
||||
@ -28,14 +28,13 @@ dependencies:
|
||||
- lxml
|
||||
- powerplantmatching>=0.5.5
|
||||
- numpy<1.24
|
||||
- pandas
|
||||
- pandas>=1.4
|
||||
- geopandas>=0.11.0
|
||||
- xarray
|
||||
- netcdf4
|
||||
- networkx
|
||||
- scipy
|
||||
- shapely<2.0
|
||||
- progressbar2
|
||||
- shapely>=2.0
|
||||
- pyomo
|
||||
- matplotlib<3.6
|
||||
- proj
|
||||
|
@ -1,11 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import urllib
|
||||
from pathlib import Path
|
||||
|
||||
import pandas as pd
|
||||
from tqdm import tqdm
|
||||
|
||||
REGION_COLS = ["geometry", "name", "x", "y", "country"]
|
||||
|
||||
@ -251,16 +253,14 @@ def aggregate_costs(n, flatten=False, opts=None, existing_only=False):
|
||||
|
||||
|
||||
def progress_retrieve(url, file):
|
||||
import urllib
|
||||
with tqdm(unit="B", unit_scale=True, unit_divisor=1024, miniters=1) as t:
|
||||
|
||||
from progressbar import ProgressBar
|
||||
def update_to(b=1, bsize=1, tsize=None):
|
||||
if tsize is not None:
|
||||
t.total = tsize
|
||||
t.update(b * bsize - t.n)
|
||||
|
||||
pbar = ProgressBar(0, 100)
|
||||
|
||||
def dlProgress(count, blockSize, totalSize):
|
||||
pbar.update(int(count * blockSize * 100 / totalSize))
|
||||
|
||||
urllib.request.urlretrieve(url, file, reporthook=dlProgress)
|
||||
urllib.request.urlretrieve(url, file, reporthook=update_to)
|
||||
|
||||
|
||||
def get_aggregation_strategies(aggregation_strategies):
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -402,12 +402,10 @@ def attach_conventional_generators(
|
||||
)
|
||||
|
||||
for carrier in conventional_config:
|
||||
|
||||
# Generators with technology affected
|
||||
idx = n.generators.query("carrier == @carrier").index
|
||||
|
||||
for attr in list(set(conventional_config[carrier]) & set(n.generators)):
|
||||
|
||||
values = conventional_config[carrier][attr]
|
||||
|
||||
if f"conventional_{carrier}_{attr}" in conventional_inputs:
|
||||
@ -506,7 +504,7 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **con
|
||||
e_target = hydro_stats["E_store[TWh]"].clip(lower=0.2) * 1e6
|
||||
e_installed = hydro.eval("p_nom * max_hours").groupby(hydro.country).sum()
|
||||
e_missing = e_target - e_installed
|
||||
missing_mh_i = hydro.query("max_hours == 0").index
|
||||
missing_mh_i = hydro.query("max_hours.isnull()").index
|
||||
|
||||
if hydro_max_hours == "energy_capacity_totals_by_country":
|
||||
# watch out some p_nom values like IE's are totally underrepresented
|
||||
@ -519,6 +517,8 @@ def attach_hydro(n, costs, ppl, profile_hydro, hydro_capacities, carriers, **con
|
||||
hydro_stats["E_store[TWh]"] * 1e3 / hydro_stats["p_nom_discharge[GW]"]
|
||||
)
|
||||
|
||||
max_hours_country.clip(0, inplace=True)
|
||||
|
||||
missing_countries = pd.Index(hydro["country"].unique()).difference(
|
||||
max_hours_country.dropna().index
|
||||
)
|
||||
@ -728,7 +728,7 @@ if __name__ == "__main__":
|
||||
ppl = load_powerplants(snakemake.input.powerplants)
|
||||
|
||||
if "renewable_carriers" in snakemake.config["electricity"]:
|
||||
renewable_carriers = set(snakemake.config["renewable"])
|
||||
renewable_carriers = set(snakemake.config["electricity"]["renewable_carriers"])
|
||||
else:
|
||||
logger.warning(
|
||||
"Missing key `renewable_carriers` under config entry `electricity`. "
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -694,7 +694,6 @@ def base_network(
|
||||
parameter_corrections,
|
||||
config,
|
||||
):
|
||||
|
||||
buses = _load_buses_from_eg(eg_buses, europe_shape, config["electricity"])
|
||||
|
||||
links = _load_links_from_eg(buses, eg_links)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -276,7 +276,6 @@ def manual_adjustment(load, fn_load, powerstatistics, countries):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
if "snakemake" not in globals():
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -187,7 +187,6 @@ import time
|
||||
import atlite
|
||||
import geopandas as gpd
|
||||
import numpy as np
|
||||
import progressbar as pgb
|
||||
import xarray as xr
|
||||
from _helpers import configure_logging
|
||||
from dask.distributed import Client, LocalCluster
|
||||
@ -203,7 +202,6 @@ if __name__ == "__main__":
|
||||
|
||||
snakemake = mock_snakemake("build_renewable_profiles", technology="solar")
|
||||
configure_logging(snakemake)
|
||||
pgb.streams.wrap_stderr()
|
||||
|
||||
nprocesses = int(snakemake.threads)
|
||||
noprogress = not snakemake.config["atlite"].get("show_progress", False)
|
||||
@ -258,7 +256,7 @@ if __name__ == "__main__":
|
||||
snakemake.input.ship_density, codes=func, crs=4326, allow_no_overlap=True
|
||||
)
|
||||
|
||||
if "max_depth" in config:
|
||||
if config.get("max_depth"):
|
||||
# lambda not supported for atlite + multiprocessing
|
||||
# use named function np.greater with partially frozen argument instead
|
||||
# and exclude areas where: -max_depth > grid cell depth
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -80,7 +80,6 @@ import pandas as pd
|
||||
import pycountry as pyc
|
||||
from _helpers import configure_logging
|
||||
from shapely.geometry import MultiPolygon, Polygon
|
||||
from shapely.ops import unary_union
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -158,8 +157,7 @@ def country_cover(country_shapes, eez_shapes=None):
|
||||
shapes = country_shapes
|
||||
if eez_shapes is not None:
|
||||
shapes = pd.concat([shapes, eez_shapes])
|
||||
|
||||
europe_shape = unary_union(shapes)
|
||||
europe_shape = shapes.unary_union
|
||||
if isinstance(europe_shape, MultiPolygon):
|
||||
europe_shape = max(europe_shape, key=attrgetter("area"))
|
||||
return Polygon(shell=europe_shape.exterior)
|
||||
@ -237,9 +235,11 @@ def nuts3(country_shapes, nuts3, nuts3pop, nuts3gdp, ch_cantons, ch_popgdp):
|
||||
manual = gpd.GeoDataFrame(
|
||||
[["BA1", "BA", 3871.0], ["RS1", "RS", 7210.0], ["AL1", "AL", 2893.0]],
|
||||
columns=["NUTS_ID", "country", "pop"],
|
||||
).set_index("NUTS_ID")
|
||||
)
|
||||
manual["geometry"] = manual["country"].map(country_shapes)
|
||||
manual = manual.dropna()
|
||||
manual = manual.set_index("NUTS_ID")
|
||||
manual = manual.set_crs("ETRS89")
|
||||
|
||||
df = pd.concat([df, manual], sort=False)
|
||||
|
||||
|
@ -4,11 +4,11 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
"""
|
||||
Transforms the global ship density data from
|
||||
https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-
|
||||
Traffic-Density to the size of the considered cutout. The global ship density
|
||||
raster is later used for the exclusion when calculating the offshore
|
||||
potentials.
|
||||
Transforms the global ship density data from the `World Bank Data Catalogue.
|
||||
|
||||
<https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-Traffic-Density>`_
|
||||
to the size of the considered cutout. The global ship density raster is later
|
||||
used for the exclusion when calculating the offshore potentials.
|
||||
|
||||
Relevant Settings
|
||||
-----------------
|
||||
@ -26,12 +26,17 @@ Relevant Settings
|
||||
Inputs
|
||||
------
|
||||
|
||||
- ``data/bundle/shipdensity/shipdensity_global.zip``: `Global ship density from <https://datacatalog.worldbank.org/search/dataset/0037580/Global-Shipping-Traffic-Density>`.
|
||||
- ``data/bundle/shipdensity/shipdensity_global.zip``: Global shipping traffic
|
||||
density from `World Bank Data Catalogue
|
||||
<https://datacatalog.worldbank.org/search/dataset/0037580/>`_.
|
||||
|
||||
Outputs
|
||||
-------
|
||||
|
||||
- ``resources/europe_shipdensity_raster.nc``: Reduced version of `Global ship density from <https://datacatalog.worldbank.org/search/dataset/0037580/` to reduce computation time.
|
||||
- ``resources/europe_shipdensity_raster.nc``: Reduced version of global shipping
|
||||
traffic density from `World Bank Data Catalogue
|
||||
<https://datacatalog.worldbank.org/search/dataset/0037580/>`_ to reduce
|
||||
computation time.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -238,7 +238,6 @@ def distribute_clusters(n, n_clusters, focus_weights=None, solver_name="cbc"):
|
||||
), f"Number of clusters must be {len(N)} <= n_clusters <= {N.sum()} for this selection of countries."
|
||||
|
||||
if focus_weights is not None:
|
||||
|
||||
total_focus = sum(list(focus_weights.values()))
|
||||
|
||||
assert (
|
||||
@ -396,7 +395,6 @@ def clustering_for_n_clusters(
|
||||
extended_link_costs=0,
|
||||
focus_weights=None,
|
||||
):
|
||||
|
||||
bus_strategies, generator_strategies = get_aggregation_strategies(
|
||||
aggregation_strategies
|
||||
)
|
||||
@ -480,9 +478,10 @@ if __name__ == "__main__":
|
||||
aggregate_carriers = set(n.generators.carrier) - set(exclude_carriers)
|
||||
if snakemake.wildcards.clusters.endswith("m"):
|
||||
n_clusters = int(snakemake.wildcards.clusters[:-1])
|
||||
aggregate_carriers = snakemake.config["electricity"].get(
|
||||
"conventional_carriers"
|
||||
conventional = set(
|
||||
snakemake.config["electricity"].get("conventional_carriers", [])
|
||||
)
|
||||
aggregate_carriers = conventional.intersection(aggregate_carriers)
|
||||
elif snakemake.wildcards.clusters == "all":
|
||||
n_clusters = len(n.buses)
|
||||
else:
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -164,7 +164,6 @@ def calculate_curtailment(n, label, curtailment):
|
||||
|
||||
def calculate_energy(n, label, energy):
|
||||
for c in n.iterate_components(n.one_port_components | n.branch_components):
|
||||
|
||||
if c.name in {"Generator", "Load", "ShuntImpedance"}:
|
||||
c_energies = (
|
||||
c.pnl.p.multiply(n.snapshot_weightings.generators, axis=0)
|
||||
@ -238,7 +237,6 @@ def calculate_supply(n, label, supply):
|
||||
load_types = n.buses.carrier.unique()
|
||||
|
||||
for i in load_types:
|
||||
|
||||
buses = n.buses.query("carrier == @i").index
|
||||
|
||||
bus_map = pd.Series(False, index=n.buses.index)
|
||||
@ -246,7 +244,6 @@ def calculate_supply(n, label, supply):
|
||||
bus_map.loc[buses] = True
|
||||
|
||||
for c in n.iterate_components(n.one_port_components):
|
||||
|
||||
items = c.df.index[c.df.bus.map(bus_map)]
|
||||
|
||||
if len(items) == 0 or c.pnl.p.empty:
|
||||
@ -267,9 +264,7 @@ def calculate_supply(n, label, supply):
|
||||
supply.loc[idx[raw_index], label] = s.values
|
||||
|
||||
for c in n.iterate_components(n.branch_components):
|
||||
|
||||
for end in ["0", "1"]:
|
||||
|
||||
items = c.df.index[c.df["bus" + end].map(bus_map)]
|
||||
|
||||
if len(items) == 0 or c.pnl["p" + end].empty:
|
||||
@ -298,7 +293,6 @@ def calculate_supply_energy(n, label, supply_energy):
|
||||
load_types = n.buses.carrier.unique()
|
||||
|
||||
for i in load_types:
|
||||
|
||||
buses = n.buses.query("carrier == @i").index
|
||||
|
||||
bus_map = pd.Series(False, index=n.buses.index)
|
||||
@ -306,7 +300,6 @@ def calculate_supply_energy(n, label, supply_energy):
|
||||
bus_map.loc[buses] = True
|
||||
|
||||
for c in n.iterate_components(n.one_port_components):
|
||||
|
||||
items = c.df.index[c.df.bus.map(bus_map)]
|
||||
|
||||
if len(items) == 0 or c.pnl.p.empty:
|
||||
@ -327,9 +320,7 @@ def calculate_supply_energy(n, label, supply_energy):
|
||||
supply_energy.loc[idx[raw_index], label] = s.values
|
||||
|
||||
for c in n.iterate_components(n.branch_components):
|
||||
|
||||
for end in ["0", "1"]:
|
||||
|
||||
items = c.df.index[c.df["bus" + end].map(bus_map)]
|
||||
|
||||
if len(items) == 0 or c.pnl["p" + end].empty:
|
||||
@ -431,7 +422,6 @@ def calculate_weighted_prices(n, label, weighted_prices):
|
||||
}
|
||||
|
||||
for carrier in link_loads:
|
||||
|
||||
if carrier == "electricity":
|
||||
suffix = ""
|
||||
elif carrier[:5] == "space":
|
||||
@ -454,7 +444,6 @@ def calculate_weighted_prices(n, label, weighted_prices):
|
||||
load = n.loads_t.p_set[buses]
|
||||
|
||||
for tech in link_loads[carrier]:
|
||||
|
||||
names = n.links.index[n.links.index.to_series().str[-len(tech) :] == tech]
|
||||
|
||||
if names.empty:
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2019-2022 Fabian Hofmann (TUB, FIAS)
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -324,7 +324,6 @@ def simplify_links(n, costs, config, output, aggregation_strategies=dict()):
|
||||
)
|
||||
|
||||
for lbl in labels.value_counts().loc[lambda s: s > 2].index:
|
||||
|
||||
for b, buses, links in split_links(labels.index[labels == lbl]):
|
||||
if len(buses) <= 2:
|
||||
continue
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
@ -373,8 +373,11 @@ def extra_functionality(n, snapshots):
|
||||
|
||||
|
||||
def solve_network(n, config, opts="", **kwargs):
|
||||
solver_options = config["solving"]["solver"].copy()
|
||||
solver_name = solver_options.pop("name")
|
||||
set_of_options = config["solving"]["solver"]["options"]
|
||||
solver_options = (
|
||||
config["solving"]["solver_options"][set_of_options] if set_of_options else {}
|
||||
)
|
||||
solver_name = config["solving"]["solver"]["name"]
|
||||
cf_solving = config["solving"]["options"]
|
||||
track_iterations = cf_solving.get("track_iterations", False)
|
||||
min_iterations = cf_solving.get("min_iterations", 4)
|
||||
@ -411,7 +414,7 @@ if __name__ == "__main__":
|
||||
from _helpers import mock_snakemake
|
||||
|
||||
snakemake = mock_snakemake(
|
||||
"solve_network", simpl="", clusters="5", ll="copt", opts="Co2L-BAU-CCL-24H"
|
||||
"solve_network", simpl="", clusters="5", ll="v1.5", opts=""
|
||||
)
|
||||
configure_logging(snakemake)
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
@ -1,19 +1,10 @@
|
||||
# SPDX-FileCopyrightText: : 2017-2022 The PyPSA-Eur Authors
|
||||
# SPDX-FileCopyrightText: : 2017-2023 The PyPSA-Eur Authors
|
||||
#
|
||||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
version: 0.6.1
|
||||
tutorial: true
|
||||
logging:
|
||||
level: INFO
|
||||
format: '%(levelname)s:%(name)s:%(message)s'
|
||||
|
||||
run:
|
||||
name: ""
|
||||
|
||||
scenario:
|
||||
simpl: ['']
|
||||
ll: ['copt']
|
||||
clusters: [5]
|
||||
opts: [Co2L-24H]
|
||||
|
||||
@ -22,20 +13,8 @@ countries: ['BE']
|
||||
snapshots:
|
||||
start: "2013-03-01"
|
||||
end: "2013-03-08"
|
||||
closed: 'left' # end is not inclusive
|
||||
|
||||
enable:
|
||||
prepare_links_p_nom: false
|
||||
retrieve_databundle: true
|
||||
retrieve_cost_data: true
|
||||
build_cutout: false
|
||||
retrieve_cutout: true
|
||||
build_natura_raster: false
|
||||
retrieve_natura_raster: true
|
||||
custom_busmap: false
|
||||
|
||||
electricity:
|
||||
voltages: [220., 300., 380.]
|
||||
co2limit: 100.e+6
|
||||
|
||||
extendable_carriers:
|
||||
@ -44,17 +23,10 @@ electricity:
|
||||
Store: [H2]
|
||||
Link: [H2 pipeline]
|
||||
|
||||
max_hours:
|
||||
battery: 6
|
||||
H2: 168
|
||||
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc]
|
||||
|
||||
powerplants_filter: false # use pandas query strings here, e.g. Country not in ['Germany']
|
||||
custom_powerplants: false # use pandas query strings here, e.g. Country in ['Germany']
|
||||
conventional_carriers: [coal, CCGT] # [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
|
||||
|
||||
atlite:
|
||||
nprocesses: 4
|
||||
show_progress: false # false saves time
|
||||
cutouts:
|
||||
be-03-2013-era5:
|
||||
module: era5
|
||||
@ -65,246 +37,21 @@ atlite:
|
||||
renewable:
|
||||
onwind:
|
||||
cutout: be-03-2013-era5
|
||||
resource:
|
||||
method: wind
|
||||
turbine: Vestas_V112_3MW
|
||||
capacity_per_sqkm: 3 # ScholzPhd Tab 4.3.1: 10MW/km^2
|
||||
# correction_factor: 0.93
|
||||
corine:
|
||||
# Scholz, Y. (2012). Renewable energy based electricity supply at low costs:
|
||||
# development of the REMix model and application for Europe. ( p.42 / p.28)
|
||||
grid_codes: [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32]
|
||||
distance: 1000
|
||||
distance_grid_codes: [1, 2, 3, 4, 5, 6]
|
||||
natura: true
|
||||
excluder_resolution: 200
|
||||
potential: simple # or conservative
|
||||
clip_p_max_pu: 1.e-2
|
||||
offwind-ac:
|
||||
cutout: be-03-2013-era5
|
||||
resource:
|
||||
method: wind
|
||||
turbine: NREL_ReferenceTurbine_5MW_offshore
|
||||
capacity_per_sqkm: 3
|
||||
# correction_factor: 0.93
|
||||
corine: [44, 255]
|
||||
natura: true
|
||||
ship_threshold: 400
|
||||
max_shore_distance: 30000
|
||||
excluder_resolution: 200
|
||||
potential: simple # or conservative
|
||||
clip_p_max_pu: 1.e-2
|
||||
max_depth: false
|
||||
offwind-dc:
|
||||
cutout: be-03-2013-era5
|
||||
resource:
|
||||
method: wind
|
||||
turbine: NREL_ReferenceTurbine_5MW_offshore
|
||||
# ScholzPhd Tab 4.3.1: 10MW/km^2
|
||||
capacity_per_sqkm: 3
|
||||
# correction_factor: 0.93
|
||||
corine: [44, 255]
|
||||
natura: true
|
||||
ship_threshold: 400
|
||||
min_shore_distance: 30000
|
||||
excluder_resolution: 200
|
||||
potential: simple # or conservative
|
||||
clip_p_max_pu: 1.e-2
|
||||
max_depth: false
|
||||
solar:
|
||||
cutout: be-03-2013-era5
|
||||
resource:
|
||||
method: pv
|
||||
panel: CSi
|
||||
orientation:
|
||||
slope: 35.
|
||||
azimuth: 180.
|
||||
capacity_per_sqkm: 1.7 # ScholzPhd Tab 4.3.1: 170 MW/km^2
|
||||
# Determined by comparing uncorrected area-weighted full-load hours to those
|
||||
# published in Supplementary Data to
|
||||
# Pietzcker, Robert Carl, et al. "Using the sun to decarbonize the power
|
||||
# sector: The economic potential of photovoltaics and concentrating solar
|
||||
# power." Applied Energy 135 (2014): 704-720.
|
||||
correction_factor: 0.854337
|
||||
corine: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 31, 32]
|
||||
natura: true
|
||||
excluder_resolution: 200
|
||||
potential: simple # or conservative
|
||||
clip_p_max_pu: 1.e-2
|
||||
|
||||
lines:
|
||||
types:
|
||||
220.: "Al/St 240/40 2-bundle 220.0"
|
||||
300.: "Al/St 240/40 3-bundle 300.0"
|
||||
380.: "Al/St 240/40 4-bundle 380.0"
|
||||
s_max_pu: 0.7
|
||||
s_nom_max: .inf
|
||||
length_factor: 1.25
|
||||
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||
|
||||
links:
|
||||
p_max_pu: 1.0
|
||||
p_nom_max: .inf
|
||||
include_tyndp: true
|
||||
under_construction: 'zero' # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
|
||||
|
||||
transformers:
|
||||
x: 0.1
|
||||
s_nom: 2000.
|
||||
type: ''
|
||||
|
||||
load:
|
||||
power_statistics: true # only for files from <2019; set false in order to get ENTSOE transparency data
|
||||
interpolate_limit: 3 # data gaps up until this size are interpolated linearly
|
||||
time_shift_for_large_gaps: 1w # data gaps up until this size are copied by copying from
|
||||
manual_adjustments: true # false
|
||||
scaling_factor: 1.0
|
||||
|
||||
costs:
|
||||
year: 2030
|
||||
version: v0.4.0
|
||||
rooftop_share: 0.14
|
||||
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.01
|
||||
onwind: 0.015
|
||||
offwind: 0.015
|
||||
H2: 0.
|
||||
battery: 0.
|
||||
emission_prices: # only used with the option Ep
|
||||
co2: 0.
|
||||
|
||||
clustering:
|
||||
simplify_network:
|
||||
to_substations: false # network is simplified to nodes with positive or negative power injection (i.e. substations or offwind connections)
|
||||
algorithm: kmeans # choose from: [hac, kmeans]
|
||||
feature: solar+onwind-time # only for hac. choose from: [solar+onwind-time, solar+onwind-cap, solar-time, solar-cap, solar+offwind-cap] etc.
|
||||
cluster_network:
|
||||
algorithm: kmeans
|
||||
feature: solar+onwind-time
|
||||
exclude_carriers: ["OCGT", "offwind-ac", "coal"]
|
||||
aggregation_strategies:
|
||||
generators:
|
||||
p_nom_max: sum # use "min" for more conservative assumptions
|
||||
p_nom_min: sum
|
||||
p_min_pu: mean
|
||||
marginal_cost: mean
|
||||
committable: any
|
||||
ramp_limit_up: max
|
||||
ramp_limit_down: max
|
||||
efficiency: mean
|
||||
|
||||
|
||||
solving:
|
||||
options:
|
||||
formulation: kirchhoff
|
||||
load_shedding: false
|
||||
noisy_costs: true
|
||||
min_iterations: 1
|
||||
max_iterations: 1
|
||||
clip_p_max_pu: 0.01
|
||||
#nhours: 10
|
||||
solver:
|
||||
name: glpk
|
||||
# solver:
|
||||
# name: gurobi
|
||||
# threads: 4
|
||||
# method: 2 # barrier
|
||||
# crossover: 0
|
||||
# BarConvTol: 1.e-5
|
||||
# FeasibilityTol: 1.e-6
|
||||
# AggFill: 0
|
||||
# PreDual: 0
|
||||
# GURO_PAR_BARDENSETHRESH: 200
|
||||
# solver:
|
||||
# name: cplex
|
||||
# threads: 4
|
||||
# lpmethod: 4 # barrier
|
||||
# solutiontype: 2 # non basic solution, ie no crossover
|
||||
# barrier.convergetol: 1.e-5
|
||||
# feasopt.tolerance: 1.e-6
|
||||
|
||||
plotting:
|
||||
map:
|
||||
figsize: [7, 7]
|
||||
boundaries: [-10.2, 29, 35, 72]
|
||||
p_nom:
|
||||
bus_size_factor: 5.e+4
|
||||
linewidth_factor: 3.e+3
|
||||
|
||||
costs_max: 800
|
||||
costs_threshold: 1
|
||||
|
||||
energy_max: 15000.
|
||||
energy_min: -10000.
|
||||
energy_threshold: 50.
|
||||
|
||||
vre_techs: ["onwind", "offwind-ac", "offwind-dc", "solar", "ror"]
|
||||
conv_techs: ["OCGT", "CCGT", "Nuclear", "Coal"]
|
||||
storage_techs: ["hydro+PHS", "battery", "H2"]
|
||||
load_carriers: ["AC load"]
|
||||
AC_carriers: ["AC line", "AC transformer"]
|
||||
link_carriers: ["DC line", "Converter AC-DC"]
|
||||
tech_colors:
|
||||
"onwind": "#235ebc"
|
||||
"onshore wind": "#235ebc"
|
||||
'offwind': "#6895dd"
|
||||
'offwind-ac': "#6895dd"
|
||||
'offshore wind': "#6895dd"
|
||||
'offshore wind ac': "#6895dd"
|
||||
'offwind-dc': "#74c6f2"
|
||||
'offshore wind dc': "#74c6f2"
|
||||
"hydro": "#08ad97"
|
||||
"hydro+PHS": "#08ad97"
|
||||
"PHS": "#08ad97"
|
||||
"hydro reservoir": "#08ad97"
|
||||
'hydroelectricity': '#08ad97'
|
||||
"ror": "#4adbc8"
|
||||
"run of river": "#4adbc8"
|
||||
'solar': "#f9d002"
|
||||
'solar PV': "#f9d002"
|
||||
'solar thermal': '#ffef60'
|
||||
'biomass': '#0c6013'
|
||||
'solid biomass': '#06540d'
|
||||
'biogas': '#23932d'
|
||||
'waste': '#68896b'
|
||||
'geothermal': '#ba91b1'
|
||||
"OCGT": "#d35050"
|
||||
"gas": "#d35050"
|
||||
"natural gas": "#d35050"
|
||||
"CCGT": "#b20101"
|
||||
"nuclear": "#ff9000"
|
||||
"coal": "#707070"
|
||||
"lignite": "#9e5a01"
|
||||
"oil": "#262626"
|
||||
"H2": "#ea048a"
|
||||
"hydrogen storage": "#ea048a"
|
||||
"battery": "#b8ea04"
|
||||
"Electric load": "#f9d002"
|
||||
"electricity": "#f9d002"
|
||||
"lines": "#70af1d"
|
||||
"transmission lines": "#70af1d"
|
||||
"AC-AC": "#70af1d"
|
||||
"AC line": "#70af1d"
|
||||
"links": "#8a1caf"
|
||||
"HVDC links": "#8a1caf"
|
||||
"DC-DC": "#8a1caf"
|
||||
"DC link": "#8a1caf"
|
||||
nice_names:
|
||||
OCGT: "Open-Cycle Gas"
|
||||
CCGT: "Combined-Cycle Gas"
|
||||
offwind-ac: "Offshore Wind (AC)"
|
||||
offwind-dc: "Offshore Wind (DC)"
|
||||
onwind: "Onshore Wind"
|
||||
solar: "Solar"
|
||||
PHS: "Pumped Hydro Storage"
|
||||
hydro: "Reservoir & Dam"
|
||||
battery: "Battery Storage"
|
||||
H2: "Hydrogen Storage"
|
||||
lines: "Transmission Lines"
|
||||
ror: "Run of River"
|
||||
options: "glpk-default"
|
||||
|
Loading…
Reference in New Issue
Block a user