pypsa / pypsa-ariadne Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
At the moment in scenario.yaml
the options for [sector][transport]
are visible even though they are changed dynamically within the workflow. Tom suggests to hide and overwrite them without displaying them in the file.
existing urban decentral and rural heat pumps (buld year <2020) draw electricity from the AC bus, newly build ones from the low voltage bus. that's a bug and everything should be connected to low voltage
When running with load_shedding to debug the oil bus we realized that it is used sometimes and that this load_shedding is actually independent of the oil bus.
Once PR is merged into ariadne2
, all gas plants (OCGT, CCGT and CHP) need to be forced to switch to hydrogen from a certain year on:
Kraftwerksstrategie currently expects a switch in 2035-2040.
The German GHG target does not account for the export/import of renewable gas.
So far, in addditional_functionality.py
the function add_co2limit_country()
sums over all German links emitting CO2 and subtracting/adding only renewable oil related emissions. This translates to encouraging the export of renewable gas from Germany to other countries since it relaxes the GHG emission target for Germany
Since the gas buses are spatially resolved, the issue becomes more complicated than the unraveling of the oil bus.
In a first brainstorm session with @lindnemi we discussed the following solution which leads to doubling the number of gas storage and gas buses quadrupling of gas links.
Final Energy|Transportation|Liquids|Biomass
in ariadne database[sector][land_transport_ice_biofuel_share]
[sector][shipping_biofuel_share]
[sector][aviation_biofuel_share]
prepare_sector_network.py
add_land_transport()
, add_industry()
buses
, loads
and links
We have to add unsustainable biomass especially for 2020. Exogenously forcing a phase out or adding CO2 emissions for that.
Maybe add a cheaper source of biomass and phase out its potential.
and maybe even boilers?
Might be worth considering: https://github.com/github/renaming
Wir haben für die 2. Projektphase eine neue interne Instanz der Szenarien-Datenbank bei IIASA angelegt: https://data.ene.iiasa.ac.at/ariadne2-intern/#/workspaces.
In der neuen DB sind die folgenden Szenarien-Slots für den Upload der neuen Szenarien verfügbar:
CurrentPolicies
KN2045_Bal_v4
KN2045_Elec_v4
KN2045_H2_v4
KN2045plus_LowDemand
KN2045plus_EasyRide
KN2045minus_WorstCase
KN2045minus_SupplyFocus
CurrentPolicies als bessere Bezeichnung für das Trend-Szenario, KN2045plus steht für mögliche Übererfüllung der Ziele, KN2045minus für eine mögliche Zielverfehlung.
Es bestehen die bisherigen Berechtigungen zum Up- und Download, ebenso gilt die Nutzungsvereinbarung, der alle zugriffsberechtigten Teams zugestimmt haben (zur Sicherheit noch einmal im Anhang). Insbesondere sind alle geteilten Szenarien-Ergebnisse nur intern zu verwenden und vertraulich zu behandeln.
Wie schon in Projektphase 1, wird es demnächst wieder zusätzlich eine öffentliche Instanz geben.
Viele Grüße,
Frederike
I don't know how we ended up with pyam==1.6, but this is two year old version gets installed when resolving the environment.yaml.
Meanwhile pyam is at 2.2.0 and we should update. However, this requires some syntax changes:
https://github.com/IAMconsortium/pyam/releases
Since #95,we need variables form Aladin for the transportation transformation (in build_scenarios.py). However, at the moment these are not included in the database.REMIND is used as an intermediate replacement, but should be swapped out eventually
For coal, oil and gas the prices are changing across scenarios. We want to integrate those into PyPSA-Ariadne as well.
First idea:
ariadne-data/costs_yyyy-modifications.csv
files with a flagmodify_cost_data
add if statements for the four scenariosFunctionality for h2_import_limits (additional_functionality) might not work as intended. Reasons:
The maps show too large of an area around Germany. This might be related to the location of the co2 atmosphere bus.
The variable Final Energy|Liquids
is ~360 PJ lower compared to Remind. This is mostly due to the discrepancy between Final Energy|Liquids|Transportation|
and reality.
The initial data in PyPSA-Eur (see pop_weighted_energy_totals_s_{nodes}.csv
) is correct. The subcategories total road
and non electricity rail
add up to 618TWh = 2224.8 PJ. Together with the subcategories domestic aviation = 10.5 TWh
and domestic navigation = 3.4TWh
this adds to 2274 PJ which is only 40 PJ shy of what Remind is exporting.
The conversion steps to kilometers traveled and then to a oil load leads to a loss of 357 PJ in demand.
Real values e.g. taken from DLR
Observation:
Explanation:
Fix:
[Neuwirth et al] (https://www.sciencedirect.com/science/article/pii/S0196890421012280?via%3Dihub) show that steel and ammonia production in Germany is located at 4-5 sites.
So far the demand is distributed more evenly which leads to an overestimation of the H2 network.
Rules to change:
build_industrial_energy_demand_per_node_today
build_industrial_distribution_key
Not all regions have to have a load profile, then this expression fails:
n.loads_t.p_set[boiler_loads]
Currently not taking scenario specific data from the database but from the Leitmodell in the config.yaml
At least for CurrentPolicies, probably also for all other scenarios.
So far the export_ariadne_variables.py
there is no differentiation between Non-Energy Use
and excl Non-Energy Use
.
To the export the variables under the category Final Energy|Industry excl Non-Energy Use
should be added.
It would be nice to have 16 nodes in Germany, one for each Bundesstaat. Ariadne DB allows the states as regions, so we might want to report results on the state level at some point
I ran the hydrogen scenario in its very prelimary definition, but got an error:
TypeError: lossy_bidirectional_links() got an unexpected keyword argument 'subset'
And that's exactly what happens. The keyword subset is used here
To do this we have to decouple the model from the Ariadne database.
Maybe provide a file with reasonable default input values and introduce a config option to switch from fully Open Source to Ariadne specific.
Adding existing capacities: Atm we are adding existing capacities such that for planning horizon e.g. 2020 all existing capacities from 2020 until 2025 are added. This leads to existing capacities of e.g. solar PV of 81 GW (have been built until 2023) which are already present to the model in 2020.
However we are setting co2 constraints and capacity expansion limits (Ausbauziele EE) according to the specific year, where they should be reached. This means, the model has capacities from the future to meet current co2 targets. E.g. it has 2023 solar PV capacities to meet 2020 co2 targets.
Additionally we are implying limits on the capacity of e.g. solar expansion in 2020 and 2025. These limits apply for the specific year, which causes problems as the maximum targets are too low if the future capacity is added.
I suggest we align the logic such that planning horizon 2020 includes everything that is built until 2020. For 2025 this would mean the model has all capacities that are available until now and it uses the period 2020-2025 to optimize. Also the investment costs and capacity expansion would then apply to the period before the planning horizon.
Possible problems:
Changes to be made (probably more :)):
build_year
when adding capacities: custom_pipes.query("build_year <= @investment_year", inplace=True)
p_nom_extendable=False
, via p_nom
taking into account build years (i.e. less in 2025 than in 2030)). Pipelines outside of Germany should be extendable because we don't have data.p_nom_extendable=True
but with Kernnetz capacities as p_nom_min
(as implemented now).Add config (if not already implemented in PyPSA-Eur) that allows to switch between NEP21/23 and overheadlines/cable.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.