forked from pypsa-meets-earth/pypsa-earth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.default.yaml
981 lines (905 loc) · 35.8 KB
/
config.default.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
# SPDX-FileCopyrightText: PyPSA-Earth and PyPSA-Eur Authors
#
# SPDX-License-Identifier: CC0-1.0
version: 0.4.1
tutorial: false
logging:
level: INFO
format: "%(levelname)s:%(name)s:%(message)s"
results_dir: results/
summary_dir: results/
costs_dir: data/ # TODO change to the equivalent of technology data
foresight: overnight
countries: ["NG", "BJ"]
# Can be replaced by country ["NG", "BJ"], continent ["Africa"] or user-specific region, see more at https://pypsa-earth.readthedocs.io/en/latest/configuration.html#top-level-configuration
enable:
retrieve_databundle: true # Recommended 'true', for the first run. Otherwise data might be missing.
retrieve_databundle_sector: true
retrieve_cost_data: true # true: retrieves cost data from technology data and saves in resources/costs.csv, false: uses cost data in data/costs.csv
download_osm_data: true # If 'true', OpenStreetMap data will be downloaded for the above given countries
build_natura_raster: false # If True, then an exclusion raster will be build
build_cutout: false
# If "build_cutout" : true, then environmental data is extracted according to `snapshots` date range and `countries`
# requires cds API key https://cds.climate.copernicus.eu/api-how-to
# More information https://atlite.readthedocs.io/en/latest/introduction.html#datasets
progress_bar: true # show progress bar during downloading routines and other long-running tasks
custom_rules: [] # Default empty [] or link to custom rule file e.g. ["my_folder/my_rules.smk"] that add rules to Snakefile
run:
name: "" # use this to keep track of runs with different settings
shared_cutouts: true # set to true to share the default cutout(s) across runs
# Note: value false requires build_cutout to be enabled
allow_scenario_failure: false # If True, the workflow will continue even if a scenario in run_scnenario fails
scenario:
simpl: [""]
ll: ["copt"]
clusters: [10]
opts: [Co2L-3H]
planning_horizons: # investment years for myopic and perfect; or costs year for overnight
- 2030
sopts:
- "144H"
demand:
- "AB"
snapshots:
start: "2013-01-01"
end: "2014-01-01"
inclusive: "left" # end is not inclusive
# definition of the Coordinate Reference Systems
crs:
geo_crs: EPSG:4326 # general geographic projection, not used for metric measures. "EPSG:4326" is the standard used by OSM and google maps
distance_crs: EPSG:3857 # projection for distance measurements only. Possible recommended values are "EPSG:3857" (used by OSM and Google Maps)
area_crs: ESRI:54009 # projection for area measurements only. Possible recommended values are Global Mollweide "ESRI:54009"
# download_osm_data_nprocesses: 10 # (optional) number of threads used to download osm data
augmented_line_connection:
add_to_snakefile: false # If True, includes this rule to the workflow
connectivity_upgrade: 2 # Min. lines connection per node,
# https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation.html#networkx.algorithms.connectivity.edge_augmentation.k_edge_augmentation
new_line_type: ["HVAC"] # Expanded lines can be either ["HVAC"] or ["HVDC"] or both ["HVAC", "HVDC"]
min_expansion: 1 # [MW] New created line expands by float/int input
min_DC_length: 600 # [km] Minimum line length of DC line
cluster_options:
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.
exclude_carriers: []
remove_stubs: true
remove_stubs_across_borders: true
p_threshold_drop_isolated: 20 # [MW] isolated buses are being discarded if bus mean power is below the specified threshold
p_threshold_merge_isolated: 300 # [MW] isolated buses are being merged into a single isolated bus if a bus mean power is below the specified threshold
s_threshold_fetch_isolated: 0.05 # [-] a share of the national load for merging an isolated network into a backbone network
cluster_network:
algorithm: kmeans
feature: solar+onwind-time
exclude_carriers: []
alternative_clustering: false # "False" use Voronoi shapes, "True" use GADM shapes
distribute_cluster: ["load"] # Distributes cluster nodes per country according to ['load'],['pop'] or ['gdp']
out_logging: true # When "True", logging is printed to console
aggregation_strategies:
generators: # use "min" for more conservative assumptions
p_nom: sum
p_nom_max: sum
p_nom_min: sum
p_min_pu: mean
marginal_cost: mean
committable: any
ramp_limit_up: max
ramp_limit_down: max
efficiency: mean
build_shape_options:
gadm_layer_id: 1 # GADM level area used for the gadm_shapes. Codes are country-dependent but roughly: 0: country, 1: region/county-like, 2: municipality-like
update_file: false # When true, all the input files are downloaded again and replace the existing files
out_logging: true # When true, logging is printed to console
year: 2020 # reference year used to derive shapes, info on population and info on GDP
nprocesses: 3 # number of processes to be used in build_shapes
worldpop_method: "standard" # "standard" pulls from web 1kmx1km raster, "api" pulls from API 100mx100m raster,
# false (not "false") no pop addition to shape which is useful when generating only cutout
gdp_method: "standard" # "standard" pulls from web 1x1km raster, false (not "false") no gdp addition to shape which useful when generating only cutout
contended_flag: "set_by_country" # "set_by_country" assigns the contended areas to the countries according to the GADM database, "drop" drops these contended areas from the model
gadm_file_prefix: "gadm41_"
gadm_url_prefix: "https://geodata.ucdavis.edu/gadm/gadm4.1/gpkg/"
clean_osm_data_options: # osm = OpenStreetMap
names_by_shapes: true # Set the country name based on the extended country shapes
threshold_voltage: 51000 # [V] minimum voltage threshold to keep the asset (cable, line, generator, etc.) [V]
tag_substation: "transmission" # Filters only substations with 'transmission' tag, ('distribution' also available)
add_line_endings: true # When "True", then line endings are added to the dataset of the substations
generator_name_method: OSM # Methodology to specify the name to the generator. Options: OSM (name as by OSM dataset), closest_city (name by the closest city)
use_custom_lines: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom)
path_custom_lines: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_lines.geojson)
use_custom_substations: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom)
path_custom_substations: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_substations.geojson)
use_custom_cables: "OSM_only" # Use OSM (OSM_only), customized (custom_only), or both data sets (add_custom)
path_custom_cables: false # If exists, provide the specific absolute path of the custom file e.g. (...\data\custom_cables.geojson)
build_osm_network: # Options of the build_osm_network script; osm = OpenStreetMap
group_close_buses: true # When "True", close buses are merged and guarantee the voltage matching among line endings
group_tolerance_buses: 5000 # [m] (default 5000) Tolerance in meters of the close buses to merge
split_overpassing_lines: true # When True, lines overpassing buses are splitted and connected to the bueses
overpassing_lines_tolerance: 1 # [m] (default 1) Tolerance to identify lines overpassing buses
force_ac: false # When true, it forces all components (lines and substation) to be AC-only. To be used if DC assets create problem.
base_network:
min_voltage_substation_offshore: 51000 # [V] minimum voltage of the offshore substations
min_voltage_rebase_voltage: 51000 # [V] minimum voltage in base network
load_options:
ssp: "ssp2-2.6" # shared socio-economic pathway (GDP and population growth) scenario to consider
weather_year: 2013 # Load scenarios available with different weather year (different renewable potentials)
prediction_year: 2030 # Load scenarios available with different prediction year (GDP, population)
scale: 1 # scales all load time-series, i.e. 2 = doubles load
electricity:
base_voltage: 380.
voltages: [132., 220., 300., 380., 500., 750.]
co2limit: 7.75e+7 # European default, 0.05 * 3.1e9*0.5, needs to be adjusted for Africa
co2base: 1.487e+9 # European default, adjustment to Africa necessary
agg_p_nom_limits: data/agg_p_nom_minmax.csv
hvdc_as_lines: false # should HVDC lines be modeled as `Line` or as `Link` component?
automatic_emission: false
automatic_emission_base_year: 1990 # 1990 is taken as default. Any year from 1970 to 2018 can be selected.
operational_reserve: # like https://genxproject.github.io/GenX/dev/core/#Reserves
activate: false
epsilon_load: 0.02 # share of total load
epsilon_vres: 0.02 # share of total renewable supply
contingency: 0 # fixed capacity in MW
max_hours:
battery: 6
H2: 168
extendable_carriers:
Generator: [solar, onwind, offwind-ac, offwind-dc, OCGT]
StorageUnit: [] # battery, H2
Store: [battery, H2]
Link: [] # H2 pipeline
powerplants_filter: (DateOut >= 2022 or DateOut != DateOut)
custom_powerplants: false # "false" use only powerplantmatching (ppm) data, "merge" combines ppm and custom powerplants, "replace" use only custom powerplants
conventional_carriers: [nuclear, oil, OCGT, CCGT, coal, lignite, geothermal, biomass]
renewable_carriers: [solar, onwind, offwind-ac, offwind-dc, hydro]
estimate_renewable_capacities:
stats: "irena" # False, = greenfield expansion, 'irena' uses IRENA stats to add expansion limits
year: 2023 # Reference year, available years for IRENA stats are 2000 to 2023
p_nom_min: 1 # any float, scales the minimum expansion acquired from stats, i.e. 110% of <years>'s capacities => p_nom_min: 1.1
p_nom_max: false # sets the expansion constraint, False to deactivate this option and use estimated renewable potentials determine by the workflow, float scales the p_nom_min factor accordingly
technology_mapping:
# Wind is the Fueltype in ppm.data.Capacity_stats, onwind, offwind-{ac,dc} the carrier in PyPSA-Earth
Offshore: [offwind-ac, offwind-dc]
Onshore: [onwind]
PV: [solar]
lines:
ac_types:
132.: "243-AL1/39-ST1A 20.0"
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"
500.: "Al/St 240/40 4-bundle 380.0"
750.: "Al/St 560/50 4-bundle 750.0"
dc_types:
500.: "HVDC XLPE 1000"
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
under_construction: "zero" # 'zero': set capacity to zero, 'remove': remove, 'keep': with full capacity
transformers:
x: 0.1
s_nom: 2000.
type: ""
atlite:
nprocesses: 4
cutouts:
cutout-2013-era5:
module: era5
dx: 0.3 # cutout resolution
dy: 0.3 # cutout resolution
# The cutout time is automatically set by the snapshot range. See `snapshot:` option above and 'build_cutout.py'.
# time: ["2013-01-01", "2014-01-01"] # to manually specify a different weather year (~70 years available)
# The cutout spatial extent [x,y] is automatically set by country selection. See `countires:` option above and 'build_cutout.py'.
# x: [-12., 35.] # set cutout range manual, instead of automatic by boundaries of country
# y: [33., 72] # manual set cutout range
renewable:
onwind:
cutout: cutout-2013-era5
resource:
method: wind
turbine: Vestas_V112_3MW
capacity_per_sqkm: 3 # conservative, ScholzPhd Tab 4.3.1: 10MW/km^2
# correction_factor: 0.93
copernicus:
# Scholz, Y. (2012). Renewable energy based electricity supply at low costs:
# development of the REMix model and application for Europe. ( p.42 / p.28)
# CLC grid codes:
# 11X/12X - Various forest types
# 20 - Shrubs
# 30 - Herbaceus vegetation
# 40 - Cropland
# 50 - Urban
# 60 - Bare / Sparse vegetation
# 80 - Permanent water bodies
# 100 - Moss and lichen
# 200 - Open sea
grid_codes: [20, 30, 40, 60, 100, 111, 112, 113, 114, 115, 116, 121, 122, 123, 124, 125, 126]
distance: 1000
distance_grid_codes: [50]
natura: true
potential: simple # or conservative
clip_p_max_pu: 1.e-2
extendable: true
offwind-ac:
cutout: cutout-2013-era5
resource:
method: wind
turbine: NREL_ReferenceTurbine_5MW_offshore
capacity_per_sqkm: 2
# correction_factor: 0.8855
# proxy for wake losses
# from 10.1016/j.energy.2018.08.153
# until done more rigorously in #153
copernicus:
grid_codes: [80, 200]
natura: true
max_depth: 50
max_shore_distance: 30000
potential: simple # or conservative
clip_p_max_pu: 1.e-2
extendable: true
offwind-dc:
cutout: cutout-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.8855
# proxy for wake losses
# from 10.1016/j.energy.2018.08.153
# until done more rigorously in #153
copernicus:
grid_codes: [80, 200]
natura: true
max_depth: 50
min_shore_distance: 30000
potential: simple # or conservative
clip_p_max_pu: 1.e-2
extendable: true
solar:
cutout: cutout-2013-era5
resource:
method: pv
panel: CSi
orientation: latitude_optimal # will lead into optimal design
# slope: 0. # slope: 0 represent a flat panel
# azimuth: 180. # azimuth: 180 south orientation
capacity_per_sqkm: 4.6 # From 1.7 to 4.6 addresses issue #361
# 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
copernicus:
grid_codes: [20, 30, 40, 50, 60, 90, 100]
natura: true
potential: simple # or conservative
clip_p_max_pu: 1.e-2
extendable: true
hydro:
cutout: cutout-2013-era5
hydrobasins_level: 6
resource:
method: hydro
hydrobasins: data/hydrobasins/hybas_world.shp
flowspeed: 1.0 # m/s
# weight_with_height: false
# show_progress: true
carriers: [ror, PHS, hydro]
PHS_max_hours: 6
hydro_max_hours: "energy_capacity_totals_by_country" # not active
hydro_max_hours_default: 6.0 # (optional, default 6) Default value of max_hours for hydro when NaN values are found
clip_min_inflow: 1.0
extendable: true
normalization:
method: hydro_capacities # 'hydro_capacities' to rescale country hydro production by using hydro_capacities, 'eia' to rescale by eia data, false for no rescaling
year: 2013 # (optional) year of statistics used to rescale the runoff time series. When not provided, the cutout weather year is used
multiplier: 1.1 # multiplier applied after the normalization of the hydro production; default 1.0
csp:
cutout: cutout-2013-era5
resource:
method: csp
installation: SAM_solar_tower
capacity_per_sqkm: 2.392 # From 1.7 to 4.6 addresses issue #361
# 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.
copernicus:
grid_codes: [20, 30, 40, 60, 90]
distancing_codes: [50]
distance_to_codes: 3000
natura: true
potential: simple # or conservative
clip_p_max_pu: 1.e-2
extendable: true
csp_model: advanced # simple or advanced
enhanced_geothermal:
enable: true
max_levels: 4
# TODO: Needs to be adjusted for Africa.
costs:
year: 2030
version: v0.6.2
discountrate: [0.071] #, 0.086, 0.111]
# [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html # noqa: E501
USD2013_to_EUR2013: 0.7532 # [EUR/USD] ECB: https://www.ecb.europa.eu/stats/exchange/eurofxref/html/eurofxref-graph-usd.en.html
rooftop_share: 0.14 # based on the potentials, assuming (0.1 kW/m2 and 10 m2/person)
fill_values:
FOM: 0
VOM: 0
efficiency: 1
fuel: 0
investment: 0
lifetime: 25
CO2 intensity: 0
discount rate: 0.07
marginal_cost: # EUR/MWh
solar: 0.01
onwind: 0.015
offwind: 0.015
hydro: 0.
H2: 0.
electrolysis: 0.
fuel cell: 0.
battery: 0.
battery inverter: 0.
emission_prices: # in currency per tonne emission, only used with the option Ep
co2: 0.
# investment: # EUR/MW
# CCGT: 830000
# FOM: # %/year
# CCGT: 3.35
# VOM: # EUR/MWh
# CCGT: 4.2
# fuel: # EUR/MWh
# gas: 10.1
# lifetime: # years
# CCGT: 25.0
# efficiency: # per unit
# CCGT: 0.58
lines:
length_factor: 1.25 #to estimate offwind connection costs
monte_carlo:
# Description: Specify Monte Carlo sampling options for uncertainty analysis.
# Define the option list for Monte Carlo sampling.
# Make sure add_to_snakefile is set to true to enable Monte-Carlo
options:
add_to_snakefile: false # When set to true, enables Monte Carlo sampling
samples: 9 # number of optimizations. Note that number of samples when using scipy has to be the square of a prime number
sampling_strategy: "chaospy" # "pydoe2", "chaospy", "scipy", packages that are supported
seed: 42 # set seedling for reproducibilty
# Uncertanties on any PyPSA object are specified by declaring the specific PyPSA object under the key 'uncertainties'.
# For each PyPSA object, the 'type' and 'args' keys represent the type of distribution and its argument, respectively.
# Supported distributions types are uniform, normal, lognormal, triangle, beta and gamma.
# The arguments of the distribution are passed using the key 'args' as follows, tailored by distribution type
# normal: [mean, std], lognormal: [mean, std], uniform: [lower_bound, upper_bound],
# triangle: [mid_point (between 0 - 1)], beta: [alpha, beta], gamma: [shape, scale]
# More info on the distributions are documented in the Chaospy reference guide...
# https://chaospy.readthedocs.io/en/master/reference/distribution/index.html
# An abstract example is as follows:
# {pypsa network object, e.g. "loads_t.p_set"}:
# type: {any supported distribution among the previous: "uniform", "normal", ...}
# args: {arguments passed as a list depending on the distribution, see the above and more at https://pypsa.readthedocs.io/}
uncertainties:
loads_t.p_set:
type: uniform
args: [0, 1]
generators_t.p_max_pu.loc[:, n.generators.carrier == "onwind"]:
type: lognormal
args: [1.5]
generators_t.p_max_pu.loc[:, n.generators.carrier == "solar"]:
type: beta
args: [0.5, 2]
# ------------------- SECTOR OPTIONS -------------------
policy_config:
hydrogen:
temporal_matching: "no_res_matching" # either "h2_yearly_matching", "h2_monthly_matching", "no_res_matching"
spatial_matching: false
additionality: false # RE electricity is equal to the amount required for additional hydrogen export compared to the 0 export case ("reference_case")
allowed_excess: 1.0
is_reference: false # Whether or not this network is a reference case network, relevant only if additionality is _true_
remove_h2_load: false #Whether or not to remove the h2 load from the network, relevant only if is_reference is _true_
path_to_ref: "" # Path to the reference case network for additionality calculation, relevant only if additionality is _true_ and is_reference is _false_
re_country_load: false # Set to "True" to force the RE electricity to be equal to the electricity required for hydrogen export and the country electricity load. "False" excludes the country electricity load from the constraint.
demand_data:
update_data: true # if true, the workflow downloads the energy balances data saved in data/demand/unsd/data again. Turn on for the first run.
base_year: 2019
other_industries: false # Whether or not to include industries that are not specified. some countries have has exaggerated numbers, check carefully.
aluminium_year: 2019 # Year of the aluminium demand data specified in `data/AL_production.csv`
fossil_reserves:
oil: 100 #TWh Maybe redundant
export:
h2export: [10] # Yearly export demand in TWh
store: true # [True, False] # specifies whether an export store to balance demand is implemented
store_capital_costs: "no_costs" # ["standard_costs", "no_costs"] # specifies the costs of the export store. "standard_costs" takes CAPEX of "hydrogen storage tank type 1 including compressor"
export_profile: "ship" # use "ship" or "constant"
ship:
ship_capacity: 0.4 # TWh # 0.05 TWh for new ones, 0.003 TWh for Susio Frontier, 0.4 TWh according to Hampp2021: "Corresponds to 11360 t H2 (l) with LHV of 33.3333 Mwh/t_H2. Cihlar et al 2020 based on IEA 2019, Table 3-B"
travel_time: 288 # hours # From Agadir to Rotterdam and back (12*24)
fill_time: 24 # hours, for 48h see Hampp2021
unload_time: 24 # hours for 48h see Hampp2021
custom_data:
renewables: [] # ['csp', 'rooftop-solar', 'solar']
elec_demand: false
heat_demand: false
industry_demand: false
industry_database: false
transport_demand: false
water_costs: false
h2_underground: false
add_existing: false
custom_sectors: false
gas_network: false # If "True" then a custom .csv file must be placed in "resources/custom_data/pipelines.csv" , If "False" the user can choose btw "greenfield" or Model built-in datasets. Please refer to ["sector"] below.
industry:
reference_year: 2015
solar_thermal:
clearsky_model: simple
orientation:
slope: 45.
azimuth: 180.
existing_capacities:
grouping_years_power: [1960, 1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020, 2025, 2030]
grouping_years_heat: [1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2019] # these should not extend 2020
threshold_capacity: 10
default_heating_lifetime: 20
conventional_carriers:
- lignite
- coal
- oil
- uranium
sector:
gas:
spatial_gas: true # ALWAYS TRUE
network: false # ALWAYS FALSE for now (NOT USED)
network_data: GGIT # Global dataset -> 'GGIT' , European dataset -> 'IGGIELGN'
network_data_GGIT_status: ["Construction", "Operating", "Idle", "Shelved", "Mothballed", "Proposed"]
hydrogen:
network: true
H2_retrofit_capacity_per_CH4: 0.6
network_limit: 2000 #GWkm
network_routes: gas # "gas or "greenfield". If "gas" -> the network data are fetched from ["sector"]["gas"]["network_data"]. If "greenfield" -> the network follows the topology of electrical transmission lines
gas_network_repurposing: true # If true -> ["sector"]["gas"]["network"] is automatically false
underground_storage: false
hydrogen_colors: false
set_color_shares: false
blue_share: 0.40
pink_share: 0.05
coal:
shift_to_elec: true # If true, residential and services demand of coal is shifted to electricity. If false, the final energy demand of coal is disregarded
international_bunkers: false #Whether or not to count the emissions of international aviation and navigation
oil:
spatial_oil: true
district_heating:
potential: 0.3 #maximum fraction of urban demand which can be supplied by district heating
#increase of today's district heating demand to potential maximum district heating share
#progress = 0 means today's district heating share, progress=-1 means maximum fraction of urban demand is supplied by district heating
progress: 1
# 2020: 0.0
# 2030: 0.3
# 2040: 0.6
# 2050: 1.0
district_heating_loss: 0.15
reduce_space_heat_exogenously: true # reduces space heat demand by a given factor (applied before losses in DH)
# this can represent e.g. building renovation, building demolition, or if
# the factor is negative: increasing floor area, increased thermal comfort, population growth
reduce_space_heat_exogenously_factor: 0.29 # per unit reduction in space heat demand
# the default factors are determined by the LTS scenario from http://tool.european-calculator.eu/app/buildings/building-types-area/?levers=1ddd4444421213bdbbbddd44444ffffff11f411111221111211l212221
# 2020: 0.10 # this results in a space heat demand reduction of 10%
# 2025: 0.09 # first heat demand increases compared to 2020 because of larger floor area per capita
# 2030: 0.09
# 2035: 0.11
# 2040: 0.16
# 2045: 0.21
# 2050: 0.29
tes: true
tes_tau: # 180 day time constant for centralised, 3 day for decentralised
decentral: 3
central: 180
boilers: true
oil_boilers: false
chp: true
micro_chp: false
solar_thermal: true
heat_pump_sink_T: 55 #Celsius, based on DTU / large area radiators; used un build_cop_profiles.py
time_dep_hp_cop: true #time dependent heat pump coefficient of performance
solar_cf_correction: 0.788457 # = >>>1/1.2683
bev_plug_to_wheel_efficiency: 0.2 #kWh/km from EPA https://www.fueleconomy.gov/feg/ for Tesla Model S
bev_charge_efficiency: 0.9 #BEV (dis-)charging efficiency
transport_heating_deadband_upper: 20.
transport_heating_deadband_lower: 15.
ICE_lower_degree_factor: 0.375 #in per cent increase in fuel consumption per degree above deadband
ICE_upper_degree_factor: 1.6
EV_lower_degree_factor: 0.98
EV_upper_degree_factor: 0.63
bev_avail_max: 0.95
bev_avail_mean: 0.8
bev_dsm_restriction_value: 0.75 #Set to 0 for no restriction on BEV DSM
bev_dsm_restriction_time: 7 #Time at which SOC of BEV has to be dsm_restriction_value
v2g: true #allows feed-in to grid from EV battery
bev_dsm: true #turns on EV battery
bev_energy: 0.05 #average battery size in MWh
bev_availability: 0.5 #How many cars do smart charging
transport_fuel_cell_efficiency: 0.5
transport_internal_combustion_efficiency: 0.3
industry_util_factor: 0.7
biomass_transport: true # biomass transport between nodes
biomass_transport_default_cost: 0.1 #EUR/km/MWh
solid_biomass_potential: 40 # TWh/a, Potential of whole modelled area
biogas_potential: 0.5 # TWh/a, Potential of whole modelled area
efficiency_heat_oil_to_elec: 0.9
efficiency_heat_biomass_to_elec: 0.9
efficiency_heat_gas_to_elec: 0.9
dynamic_transport:
enable: false # If "True", then the BEV and FCEV shares are obtained depending on the "Co2L"-wildcard (e.g. "Co2L0.70: 0.10"). If "False", then the shares are obtained depending on the "demand" wildcard and "planning_horizons" wildcard as listed below (e.g. "DF_2050: 0.08")
land_transport_electric_share:
Co2L2.0: 0.00
Co2L1.0: 0.01
Co2L0.90: 0.03
Co2L0.80: 0.06
Co2L0.70: 0.10
Co2L0.60: 0.17
Co2L0.50: 0.27
Co2L0.40: 0.40
Co2L0.30: 0.55
Co2L0.20: 0.69
Co2L0.10: 0.80
Co2L0.00: 0.88
land_transport_fuel_cell_share:
Co2L2.0: 0.01
Co2L1.0: 0.01
Co2L0.90: 0.01
Co2L0.80: 0.01
Co2L0.70: 0.01
Co2L0.60: 0.01
Co2L0.50: 0.01
Co2L0.40: 0.01
Co2L0.30: 0.01
Co2L0.20: 0.01
Co2L0.10: 0.01
Co2L0.00: 0.01
land_transport_fuel_cell_share: # 1 means all FCEVs HERE
BU_2030: 0.00
AP_2030: 0.004
NZ_2030: 0.02
DF_2030: 0.01
AB_2030: 0.01
BU_2050: 0.00
AP_2050: 0.06
NZ_2050: 0.28
DF_2050: 0.08
land_transport_electric_share: # 1 means all EVs # This leads to problems when non-zero HERE
BU_2030: 0.00
AP_2030: 0.075
NZ_2030: 0.13
DF_2030: 0.01
AB_2030: 0.01
BU_2050: 0.00
AP_2050: 0.42
NZ_2050: 0.68
DF_2050: 0.011
co2_network: true
co2_sequestration_potential: 200 #MtCO2/a sequestration potential for Europe
co2_sequestration_cost: 10 #EUR/tCO2 for sequestration of CO2
hydrogen_underground_storage: true
shipping_hydrogen_liquefaction: false
shipping_average_efficiency: 0.4 #For conversion of fuel oil to propulsion in 2011
shipping_hydrogen_share: #1.0
BU_2030: 0.00
AP_2030: 0.00
NZ_2030: 0.10
DF_2030: 0.05
AB_2030: 0.05
BU_2050: 0.00
AP_2050: 0.25
NZ_2050: 0.36
DF_2050: 0.12
gadm_level: 1
h2_cavern: true
marginal_cost_storage: 0
methanation: true
helmeth: true
dac: true
SMR: true
SMR CC: true
cc_fraction: 0.9
cc: true
space_heat_share: 0.6 # the share of space heating from all heating. Remainder goes to water heating.
airport_sizing_factor: 3
min_part_load_fischer_tropsch: 0.9
conventional_generation: # generator : carrier
OCGT: gas
#Gen_Test: oil # Just for testing purposes
solving:
options:
formulation: kirchhoff
load_shedding: true
noisy_costs: true
min_iterations: 4
max_iterations: 6
clip_p_max_pu: 0.01
skip_iterations: true
track_iterations: false
# nhours: 10
solver:
name: gurobi
options: gurobi-default
solver_options:
highs-default:
# refer to https://ergo-code.github.io/HiGHS/dev/options/definitions/
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
gurobi-numeric-focus:
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
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
copt-default:
Threads: 8
LpMethod: 2
Crossover: 0
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:
figsize: [7, 7]
boundaries: [-10.2, 29, 35, 72]
p_nom:
bus_size_factor: 5.e+4
linewidth_factor: 3.e+3
color_geomap:
ocean: white
land: whitesmoke
costs_max: 10
costs_threshold: 0.2
energy_max: 20000
energy_min: -20000
energy_threshold: 15
vre_techs:
- onwind
- offwind-ac
- offwind-dc
- solar
- ror
conv_techs:
- OCGT
- CCGT
- nuclear
- Nuclear
- coal
- oil
storage_techs:
- hydro+PHS
- battery
- H2
renewable_storage_techs:
- PHS
- hydro
load_carriers:
- AC load
AC_carriers:
- AC line
- AC transformer
link_carriers:
- DC line
- Converter AC-DC
heat_links:
- heat pump
- resistive heater
- CHP heat
- CHP electric
- gas boiler
- central heat pump
- central resistive heater
- central CHP heat
- central CHP electric
- central gas boiler
heat_generators:
- gas boiler
- central gas boiler
- solar thermal collector
- central solar thermal collector
tech_colors:
onwind: #235ebc
onshore wind: #235ebc
offwind: #6895dd
offwind-ac: #6895dd
offshore wind: #6895dd
offshore wind ac: #6895dd
offshore wind (AC): #6895dd
offwind-dc: #74c6f2
offshore wind dc: #74c6f2
offshore wind (DC): #74c6f2
wave: #004444
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
solar rooftop: #ffef60
biomass: #0c6013
solid biomass: #06540d
solid biomass for industry co2 from atmosphere: #654321
solid biomass for industry co2 to stored: #654321
solid biomass for industry CC: #654321
biogas: #23932d
waste: #68896b
geothermal: #ba91b1
OCGT: #d35050
OCGT marginal: sandybrown
OCGT-heat: #ee8340
gas: #d35050
natural gas: #d35050
gas boiler: #ee8340
gas boilers: #ee8340
gas boiler marginal: #ee8340
gas-to-power/heat: brown
SMR: #4F4F2F
SMR CC: darkblue
oil: #262626
oil boiler: #B5A642
oil emissions: #666666
gas for industry: #333333
gas for industry CC: brown
gas for industry co2 to atmosphere: #654321
gas for industry co2 to stored: #654321
nuclear: #ff9000
Nuclear: r
Nuclear marginal: r
uranium: r
coal: #707070
Coal: k
Coal marginal: k
lignite: #9e5a01
Lignite: grey
Lignite marginal: grey
H2: #ea048a
H2 for industry: #222222
H2 for shipping: #6495ED
H2 liquefaction: m
hydrogen storage: #ea048a
battery: slategray
battery discharger: slategray
battery charger: slategray
battery storage: slategray
home battery: #614700
home battery storage: #614700
lines: #70af1d
transmission lines: #70af1d
AC: #70af1d
AC-AC: #70af1d
AC line: #70af1d
links: #8a1caf
HVDC links: #8a1caf
DC: #8a1caf
DC-DC: #8a1caf
DC link: #8a1caf
load: #ff0000
load shedding: #ff0000
Electric load: b
electricity: k
electric demand: k
electricity distribution grid: y
heat: darkred
Heat load: r
heat pumps: #76EE00
heat pump: #76EE00
air heat pump: #76EE00
ground heat pump: #40AA00
CHP: r
CHP heat: r
CHP electric: r
heat demand: darkred
rural heat: #880000
central heat: #b22222
decentral heat: #800000
low-temperature heat for industry: #991111
process heat: #FF3333
power-to-heat: red
resistive heater: pink
Sabatier: #FF1493
methanation: #FF1493
power-to-gas: purple
power-to-liquid: darkgreen
helmeth: #7D0552
DAC: deeppink
co2 stored: #123456
CO2 pipeline: gray
CO2 sequestration: #123456
co2: #123456
co2 vent: #654321
process emissions: #222222
process emissions CC: gray
process emissions to stored: #444444
process emissions to atmosphere: #888888
agriculture heat: #D07A7A
agriculture machinery oil: #1e1e1e
agriculture machinery oil emissions: #111111
agriculture electricity: #222222
Fischer-Tropsch: #44DD33
kerosene for aviation: #44BB11
naphtha for industry: #44FF55
land transport oil: #44DD33
land transport oil emissions: #666666
land transport fuel cell: #AAAAAA
land transport EV: grey
V2G: grey
BEV charger: grey
shipping: #6495ED
shipping oil: #6495ED
shipping oil emissions: #6495ED
water tanks: #BBBBBB
hot water storage: #BBBBBB
hot water charging: #BBBBBB
hot water discharging: #999999
Li ion: grey
district heating: #CC4E5C
retrofitting: purple
building retrofitting: purple
solid biomass transport: green
biomass EOP: green
high-temp electrolysis: magenta
today: #D2691E
Ambient: k
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