forked from remindmodel/remind
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.gms
executable file
·1937 lines (1899 loc) · 130 KB
/
main.gms
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
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
*** | (C) 2006-2024 Potsdam Institute for Climate Impact Research (PIK)
*** | authors, and contributors see CITATION.cff file. This file is part
*** | of REMIND and licensed under AGPL-3.0-or-later. Under Section 7 of
*** | AGPL-3.0, you are granted additional permissions described in the
*** | REMIND License Exception, version 1.0 (see LICENSE file).
*** | Contact: [email protected]
*** SOF ./main.gms
*' @title REMIND - REgional Model of INvestments and Development
*'
*' @description REMIND is a global multi-regional model incorporating the economy, the climate system
*' and a detailed representation of the energy sector. It solves for an intertemporal Pareto optimum
*' in economic and energy investments in the model regions, fully accounting for interregional trade in
*' goods, energy carriers and emissions allowances. REMIND enables analyses of technology options and
*' policy proposals for climate change mitigation.
*'
*' The macro-economic core of REMIND is a Ramsey-type optimal growth model in which intertemporal global
*' welfare is optimized subject to equilibrium constraints ([02_welfare]). Intertemporal optimization
*' ([80_optimization]) with perfect foresight is subject to market clearing. The model explicitly represents
*' trade in final goods, primary energy carriers, and when certain climate policies are enabled, emissions
*' allowances ([24_trade]). The macro-economic production factors are capital, labor, and final energy.
*' A nested production function with constant elasticity of substitution determines the final energy demand
*' ([01_macro], [29_CES_parameters]). REMIND uses economic output for investments in the macro-economic
*' capital stock as well as for consumption, trade, and energy system expenditures.
*'
*' The macro-economic core and the energy system part are hard-linked via the final energy demand and the
*' costs incurred by the energy system. Economic activity results in demand for final energy in different
*' sectors (transport ([35_transport]), industry ([37_industry]), buildings ([36_buildings])...) and of
*' different type (electric ([32_power]) and non-electric). The primary energy carriers in REMIND include
*' both exhaustible and renewable resources. Exhaustible resources comprise uranium as well as three fossil
*' resources ([31_fossil]), namely coal, oil, and gas. Renewable resources include hydro, wind, solar,
*' geothermal, and biomass ([30_biomass]). More than 50 technologies are available for the conversion of
*' primary energy into secondary energy carriers as well as for the distribution of secondary energy carriers
*' into final energy.
*'
*' The model accounts for the full range of anthropogenic greenhouse gas (GHG) emissions, most of which are
*' represented by source. REMIND simulates emissions from long-lived GHGs (CO2, CH4, N2O), short-lived GHGs
*' (CO, NOx, VOC) and aerosols (SO2, BC, OC). It accounts for these emissions with different levels of detail
*' depending on the types and sources of emissions. It calculates CO2 emissions from fuel combustion, CH4
*' emissions from fossil fuel extraction and residential energy use, and N2O emissions from energy supply
*' based on sources.
*'
*' The code is structured in a modular way, with code belonging either to the model's core, or to one of the
*' modules. The folder structure is as follows: at the top level are the folders config, core, modules and
*' scripts. The config folder contains the REMIND settings and configuration information. The core folder
*' contains all the files that are part of the core. The modules folder holds all the files that belong to
*' the modules, with numbered sub-folders for every module. The scripts folder contains helpful scripts for
*' starting a model run and analysing results.
*'
*' REMIND is run by executing the main.gms file, which loads the configuration information and builds the model,
*' by concatenating all necessary files from the core and modules folders into a single file called full.gms.
*' The concatenation process starts with files from the core and continues with files from activated modules,
*' in increasing order of module-number. It observes the following structure:
*'
*' ```
*' SETS
*'
*' DECLARATION ---> of equations, variables, parameters, and scalars
*'
*' DATAINPUT
*'
*' EQUATIONS
*'
*' PRELOOP ---> initial calibration of e.g. macroeconomic model
*'
*' LOOP
*' ---> read gdx
*' ----------------------------------------------- BEGIN OF NEGISH/NASH ITERATION LOOP -----
*' * BOUNDS
*' * PRESOLVE
*' * SOLVE ---> solve statement in module 80_optimization
*' * POSTSOLVE
*'
*' ---> write gdx
*' ----------------------------------------------- END OF NEGISHI/NASH ITERATATION LOOP ----
*'
*' OUTPUT
*' ```
*'
*' The GAMS code follows a Coding Etiquette:
*'
*' #### Naming conventions:
*'
*' * Please put effort into choosing intelligible names
*' * Don't just enumerate existing names: `budget1`/`budget2`, `tradebal1`/`tradebal2` will cause everyone
*' for the next years much more frustration than if you choose names like `emi_budget_G8`/`emi_budget_Mud`,
*' `tradebal_res`/`tradebal_perm`/`tradebal_good`
*' * Explain the abbreviation you designed in the descriptive text (the part with the `" "` behind each
*' parameter/variable/equation declaration). `directteinv` is easier to memorize if you know it means "Direct technology investment"
*' * Within REMIND files: use Capitalization to improve readability. `XpPerm` is more easily translated into
*' "Export of Permits" than `xpperm`, the first part of the name (after the prefix) should describe the type
*' of parameter/variable (e.g. `sh` for share, `cap` for capacity, `prod` for production, `dem` for demand, `cost` for costs)
*'
*' #### Prefixes:
*' Use the following *prefixes*:
*'
*' * "q_" to designate equations,
*' * "v_" to designate variables,
*' * "s_" to designate scalars,
*' * "f_" to designate file parameters (parameters that contain unaltered data read in from input files),
*' * "o_" to designate output parameters (parameters that do not affect the optimization, but are affected by it),
*' * "p_" to designate other parameters (parameters that were derived from "f_" parameters or defined in code),
*' * "c_" to designate config switches (parameters that enable different configuration choices),
*' * "s_FIRSTUNIT_2_SECONDUNIT" to designate a scalar used to convert from the FIRSTUNIT to the SECONDUNIT
*' through multiplication, e.g. s_GWh_2_EJ.
*'
*' These prefixes are extended in some cases by a second letter:
*'
*' * "?m_" to designate objects used in the core and in at least one module.
*' * "?00_" to designate objects used in a single module, exclusively, with the 2-digit number corresponding
*' to the module number.
*'
*' Sets are treated differently: instead of a prefix, sets exclusively used within a module get that module's
*' number added as a suffix. If the set is used in more than one module no suffix is given.
*'
*' The units (e.g., TWa, EJ, GtC, GtCO2, ...) of variables and parameters are
*' documented in the declaration files using square brackets at the end of the
*' explanatory text (e.g. `v_var(set1,set2) "variable [unit]"`).
*'
*' For the labels of parameters, scalars and set, use double quotes only.
*'
*' #### Commenting:
*'
*' * Comment all parts of the code generously
*' * For all equations, it should become clear from the comments what part of the equation is supposed to do what
*' * Variables and parameters should be declared along with a descriptive text (use `" "` for descriptive text to avoid compilation errors)
*' * Use three asterisks `***` for comments or `*'` if the comment should show up in the documentation of REMIND
*' * Never use 4 asterisks (reserved for GAMS error messages)
*' * Don't use the string `infes` in comments
*' * Don't use `$+number` combinations, e.g., `$20` (this interferes with GAMS error codes).
*' * Indicate the end of a file by inserting `*** EOF filename.inc ***`
*'
*' #### Sets
*'
*' * Don't use set element names with three capital letters (like `ETS` or `ESR`), otherwise the magclass R
*' library might interpret this as a region name when reading in GDX data
*'
*'
*' #### Equations:
*' The general idea is not to write code and equations as short as possible, but to write them in a way they
*' can be read and understood as fast as possible. To that end:
*'
*' * Write the mathematical operator (`*`, `/`, `+`, `-`) at the beginning of a line, not the end of the last line
*' * Leave a space before and after `+` and `-` operators and equation signs (`=g=`, `=l=`, `=e=`)
*' * Leave a space behind the comma of a sum (not behind the commas in set element calling)
*' * Use indentations to make the structure more readable
*' * Use full quotes (`"feel"`) instead of single quotes (`'feel'`) when specifying individual elements of
*' a set (this makes automatic replacement via sed easier)
*' * Put the equation sign (`=g=`, `=l=`, `=e=`) in a single line without anything else
*'
*'
*' #### Switches:
*' A switch must be defined in main.gms
*' Follow this mode of definition for parameters, including the indentation:
*' --------
*' parameter
*' param_name "explanation what it means"
*' ;
*' param_name = 0; !! def = 0 !! regexp = 0|1
*' --------
*' * def shows the default value, which is added only for the user to remember if changed manually
*' * regexp is optional, the value is read by scripts/start/checkFixCfg.R to check the validity of the input.
*' In this case, it checks whether the value fits this regular expression: ^(0|1)$
*' Use 'value1|value2' for specific values, use '[1-7]' for a row of integers.
*' Three shortcut are defined: use 'is.numeric' for numeric values, 'is.nonnegative' for >= 0,
*' and 'is.share' if the value must be >= 0 and <= 1
*'
*'
*' #### Other general rules:
*' * Decompose large model equations into several small equations to enhance readability and model diagnostics
*' * Don't use hard-coded numbers in the equations part of the model
*' * Parameters should not be overwritten in the initialization part of the models. Use if-statements instead.
*' Notable exceptions include parameters that are part a loop iteration, e.g. Negishi weights.
*' * Have your work double-checked! To avoid bugs and problems: If you make major changes to your code, ask an
*' experienced colleague to review the changes before they are pushed to the git main repository.
*' * Use sets and subsets to avoid redundant formulation of code (e.g., for technology groups)
*' * If big data tables are read in exclude them from the `.lst`-file (by using `$offlisting` and `$onlisting`),
*' nevertheless display the parameter afterwards for an easier debugging later
*' * When declaring a parameter/variable/equation always add the sets it is declared for,
*' e.g. `parameter test(x,y);` instead of `parameter test;`
*' * do not set variables for all set entries to zero (if not necessary), as this will blow up memory requirements.
*'
*##################### R SECTION START (VERSION INFO) ##########################
*
* will be updated automatically when starting a REMIND run
*
*###################### R SECTION END (VERSION INFO) ###########################
*----------------------------------------------------------------------
*** main.gms: main file. welcome to remind!
*----------------------------------------------------------------------
file logfile /""/;
logfile.lw = 0;
logfile.nr = 2;
logfile.nd = 3;
logfile.nw = 0;
logfile.nz = 0;
*--------------------------------------------------------------------------
*** preliminaries:
*--------------------------------------------------------------------------
*** allow empty data sets:
$onempty
*** create dummy identifier to fill empty sets:
$phantom null
*** include unique element list:
$onuellist
*** include $-statements in listing
$ondollar
*** include end-of-line comments
$ONeolcom
*** remove the warnings for very small exponents (x**-60) when post-processing
$offdigit
*** turn profiling off (0) or on (1-3, different levels of detail)
option profile = 0;
file foo_msg; !! This creates a dummy output file with a well-defined output format:
foo_msg.nr = 1; !! namely F-format (decimal) (and not E-format = scientific notation)
*** The file can throughout the code be activated with `putclose foo_msg;` and used in the form `put_utility foo_msg "msg" / "xxxx"` to print out xxxx to full.lst
*** and be sure that the numeric format is F-format
*' @title{extrapage: "00_configuration"} Configuration
*' @code{extrapage: "00_configuration"}
*--------------------------------------------------------------------------
*' ### Configuration - Settings for Scenarios:
*--------------------------------------------------------------------------
***--------------------- Run name and description -------------------------
$setGlobal c_expname default
$setGlobal c_description REMIND run with default settings
***------------------------------------------------------------------------------
*' #### MODULES
***------------------------------------------------------------------------------
*'--------------------- 01_macro -----------------------------------------
*'
*' * (singleSectorGr) neo-classical, single sector growth model
$setGlobal macro singleSectorGr !! def = singleSectorGr
*'--------------------- 02_welfare ---------------------------------------
*'
*' * (utilitarian) utilitarian aka. Benthamite social welfare function
*' * (ineqLognormal) welfare function with subregional income distribution effects implemented with a lognormal approach
$setGlobal welfare utilitarian !! def = utilitarian
*'--------------------- 04_PE_FE_parameters ------------------------------
*'
*' * (iea2014): new PE-FE parameters based on IEA 2014
$setGlobal PE_FE_parameters iea2014 !! def = iea2014
*'--------------------- 05_initialCap ------------------------------------
*'
*' * (on): load existing CES parameters matching model configuration
$setGlobal initialCap on !! def = on
*'--------------------- 11_aerosols --------------------------------------
*'
*' * (exoGAINS):
$setGlobal aerosols exoGAINS !! def = exoGAINS
*'--------------------- 15_climate ---------------------------------------
*'
*' * (off): no climate coupling
*' * (magicc7_ar6): MAGICC7 - iterative coupling of MAGICC7 simple climate model.
$setGlobal climate off !! def = off
*'--------------------- 16_downscaleTemperature --------------------------
*'
*' * (off)
*' * (CMIP5): downscale GMT to regional temperature based on CMIP5 data (between iterations, no runtime impact). [Requires climate = off, cm_rcp_scen = none, iterative_target_adj = 9] curved convergence of CO2 prices between regions until cm_taxCO2_regiDiff_endYr; developed countries have linear path through (cm_taxCO2_historicalYr, cm_taxCO2_historical) and (cm_startyear, cm_taxCO2_startyear);
$setGlobal downscaleTemperature off !! def = off
*'--------------------- 20_growth ------------------------------------------
*'
*' * (exogenous): exogenous growth
*' * (spillover): endogenous growth with spillover externality !!Warning: not yet calibrated!!
$setglobal growth exogenous !! def = exogenous
*'--------------------- 21_tax ------------------------------------------
*'
*' * (on): tax mechanism active
*' * (off): no tax mechanism
$setglobal tax on !! def = on
*'--------------------- 22_subsidizeLearning -----------------------------
*'
*' * (globallyOptimal): Only works with Nash, gives cooperative solution w.r.t. the learning spillover - this should then be equivalent to the Negishi solution.
*' * (off): do not subsidize learning. Default setting for Negishi. With Nash, this gives the non-cooperative solution w.r.t. the learning spillover.
$setglobal subsidizeLearning off !! def = off
*'---------------------- 23_capitalMarket -------------------------------
*'
*' * (imperfect): Imperfect capital market: brings initial consumption shares closer to empirical data
*' * (debt_limit): Weak imperfection of capital market by debt and surplus growth limits
$setglobal capitalMarket debt_limit !! def = debt_limit
*'---------------------- 24_trade ---------------------------------------
*'
*' * (standard): macro-economic commodities and primary energy commodities trading
*' * (se_trade): macro-economic commodities, primary energy commodities and secondary energy hydrogen and electricity trading
*' * (capacity): capacity-based trade implementation
$setglobal trade standard !! def = standard
*'---------------------- 26_agCosts ----------------------------------------
*'
*' * (off): agricultural costs zero, no trade taken into account
*' * (costs): includes total landuse costs
*' * (costs_trade): includes agricultural production costs and the MAgPIE trade balance
$setglobal agCosts costs !! def = costs
*'--------------------- 29_CES_parameters ----------------------------
*'
*' * (load): load existing CES parameters matching model configuration
*' * (calibrate): calculate new CES parameters based on v_cesIO trajectories -- under development!
$setglobal CES_parameters load !! def = load
*'--------------------- 30_biomass ----------------------------------------
*'
*' * (magpie_40): using supply curves derived from MAgpIE 4.0
$setglobal biomass magpie_40 !! def = magpie_40
*'--------------------- 31_fossil ----------------------------------------
*'
*' * (timeDepGrades): time-dependent grade structure of fossil resources (oil & gas only)
*' * (grades2poly) : simplified version of the time-dependent grade realization (using polynomial functions)
*' * (exogenous) : exogenous fossil extraction and costs
*' * (MOFEX) : contains the standalone version of MOFEX (Model Of Fossil EXtraction), which minimizes the discounted extraction and trade costs of fossils while balancing trade for each time step. Not to be run within a REMIND run but instead through the standalone architecture or soft-linked with REMIND (not yet implemented)
$setglobal fossil grades2poly !! def = grades2poly
*'--------------------- 32_power ----------------------------------------
*'
*' * (IntC) : Power sector formulation with Integration Cost (IntC) markups and curtailment for VRE integration - linearly increasing with VRE share -, and fixed capacity factors for dispatchable power plants
$setglobal power IntC !! def = IntC
*'--------------------- 33_CDR ----------------------------------------
*'
*' * (portfolio) : CDR options added via switches: cm_33[option abbreviation]
$setglobal CDR portfolio !! def = portfolio
*'--------------------- 35_transport ----------------------------------------
*'
*' * (edge_esm): transport realization with iterative coupling to logit-based transport model EDGE-Transport with detailed representation of transport modes and technologies
$setglobal transport edge_esm !! def = edge_esm
*'--------------------- 36_buildings ---------------------------------
*'
*' * (simple): representation of final energy demand via a CES function calibrated to EDGE-Buildings' demand trajectories
$setglobal buildings simple !! def = simple
*'--------------------- 37_industry ----------------------------------
*'
*' * (fixed_shares): fixed shares of industry sub-sectors (cement, chemicals,
*' steel, other) in industry FE use
*' * (subsectors): models industry subsectors explicitly with individual CES nests
*' for cement, chemicals, steel, and otherInd production.
$setglobal industry subsectors !! def = subsectors
*'--------------------- 39_CCU ---------------------------------
*'
*' * (on): representation of technologies for producing synthetic liquids and synthetic gases based on hydrogen and captured carbon
*' * (off): no representation of carbon caputre and utilization technologies.
$setglobal CCU on !! def = on
*'--------------------- 40_techpol ----------------------------------------
*'
*' * (none): no technology policies
*' * (lowCarbonPush): [works only with Negishi] global low-carbon push until 2030: PV, CSP, Wind, Gas-CCS, Bio-CCS and Electromobility
*' * (coalPhaseout): [works only with Negishi] global phase-out of new freely-emitting coal conversion, caps all coal routes with the exception of coaltr: coal solids can still expand
*' * (coalPhaseoutRegional): [works only with Negishi] global phase-out of new freely-emitting coal conversion, caps all coal routes with the exception of coaltr: coal solids can still expand
*' * (CombLowCandCoalPO): [works only with Negishi] combination of lowCarbonPush and coalPhaseout
*' * (NDC): Technology targets for 2030 for spv,windon,tnrs.
*' * (NPi): Reference technology targets, mostly already enacted (N)ational (P)olicies (i)mplemented, mostly for 2020
*' * (EVmandates): mandate for electric vehicles - used for UBA project
$setglobal techpol none !! def = none
*'--------------------- 41_emicapregi ----------------------------------------
*'
*' * (none): no regional emission caps
*' * (CandC): contraction and convergence allocation (under construction)
*' * (GDPint): GDP intensity allocation (under construction)
*' * (POPint): sovereignity (per cap.) allocation (under construction)
*' * (exog): exogenous emission cap path (generic) (under construction)
*' * (PerCapitaConvergence): based on CandC: convergence, to be run with emiscen = 4
*' * (AbilityToPay): mitigation requirement shared based on per-capita GDP, to be run with emiscen = 4
$setglobal emicapregi none !! def = none
*'--------------------- 45_carbonprice ----------------------------------------
*'
*' This module defines the carbon price pm_taxCO2eq, with behaviour across regions governed by similar principles (e.g. global targets, or all following NDC or NPi policies).
*'
*' * (functionalForm): [REMIND default for peak budget and end-of-century budget runs]
*' * Carbon price trajectory follows a prescribed functional form (linear/exponential) - either until peak year or until end-of-century -
*' * and can be endogenously adjusted to meet CO2 budget targets - either peak or end-of-century - that are formulated in terms of total cumulated CO2 emissions from 2020 (cm_budgetCO2from2020).
*' * Flexible choices for regional carbon price differentiation.
*' * Four main design choices:
*' * [Global anchor trajectory]: The realization uses a global anchor trajectory based on which the regional carbon price trajectories are defined.
*' * The functional form (linear/exponential) of the global anchor trajectory is chosen via cm_taxCO2_functionalForm [default = linear].
*' * The (initial) carbon price in cm_startyear is chosen via cm_taxCO2_startyear. This value is endogenously adjusted to meet CO2 budget targets if cm_iterative_target_adj is set to 5, 7, or 9.
*' * (linear): The linear curve is determined by the two points (cm_taxCO2_historicalYr, cm_taxCO2_historical) and (cm_startyear, cm_taxCO2_startyear).
*' * By default, cm_taxCO2_historicalYr is the last timestep before cm_startyear, and cm_taxCO2_historical is the carbon price in that timestep in the reference run (path_gdx_ref) - computed as the maximum of pm_taxCO2eq over all regions.
*' * (exponential): The exponential curve is determined by exponential growth rate (cm_taxCO2_expGrowth).
*' * [Post-peak behaviour]: The global anchor trajectory can be adjusted after reaching the peak of global CO2 emissions in cm_peakBudgYr. See cm_iterative_target_adj and 45_carbonprice/functionalForm/realization.gms for details.
*' * [Regional differentiation]: Regional carbon price differentiation relative to global anchor trajectory is chosen via cm_taxCO2_regiDiff [default = initialSpread10].
*' * [Interpolation from path_gdx_ref]: To smoothen a potential jump of carbon prices in cm_startyear, an interpolation between (a) the carbon prices before cm_startyear procided by path_gdx_ref and (b) the carbon prices from cm_startyear onward defined by parts I-III can be chosen via cm_taxCO2_interpolation [default = off].
*' * In addition, the carbon prices provided by path_gdx_ref can be used as a lower bound based on the switch cm_taxCO2_lowerBound_path_gdx_ref [def = on].
*' * (expoLinear): 4.5% exponential increase until cm_expoLinear_yearStart, transitioning into linear increase thereafter
*' * (exogenous): carbon price is specified using an external input file or using the switch cm_regiExoPrice. Requires cm_emiscen = 9 and cm_iterative_target_adj = 0
*' * (temperatureNotToExceed): [test and verify before using it!] Find the optimal carbon carbon tax (set cm_emiscen = 1, iterative_target_adj = 9] curved convergence of CO2 prices between regions until cm_taxCO2_regiDiff_endYr; developed countries have linear path through (cm_taxCO2_historicalYr, cm_taxCO2_historical) and (cm_startyear, cm_taxCO2_startyear);
*' * (NDC): implements a carbon price trajectory consistent with the NDC targets (up to 2030) and a trajectory of comparable ambition post 2030 (1.25%/yr price increase and regional convergence of carbon price). Choose version using cm_NDC_version "2023_cond", "2023_uncond", or replace 2023 by 2022, 2021 or 2018 to get all NDC published until end of these years.
*' * (NPi): National Policies Implemented, extrapolation of historical (until 2020) carbon prices
*' * (none): no tax policy (combined with all emiscens except emiscen = 9)
*** (exponential) is superseded by (functionalForm): For a globally uniform, exponentially increasing carbonprice path until end of century [in combination with cm_iterative_target_adj = 0 or 5], set cm_taxCO2_functionalForm = exponential, cm_taxCO2_regiDiff = none, cm_taxCO2_interpolation = off, cm_taxCO2_lowerBound_path_gdx_ref = off, cm_peakBudgYr = 2100, and choose the initial carbonprice in cm_startyear via cm_taxCO2_startyear.
*** (linear) is superseded by (functionalForm): For a globally uniform, linearly increasing carbonprice path until end of century [in combination with cm_iterative_target_adj = 0 or 5], set cm_taxCO2_functionalForm = linear, cm_taxCO2_regiDiff = none, cm_taxCO2_interpolation = off, cm_taxCO2_lowerBound_path_gdx_ref = off, cm_peakBudgYr = 2100, and choose the initial carbonprice in cm_startyear via cm_taxCO2_startyear. [Adjust historical reference point (cm_taxCO2_historicalYr, cm_taxCO2_historical) if needed.]
$setglobal carbonprice none !! def = none
*'--------------------- 46_carbonpriceRegi ---------------------------------
*'
*' This module applies a markup pm_taxCO2eqRegi on top of pm_taxCO2eq to achieve additional intermediate targets.
*'
*' * (none): no regional carbonprice policies
*' * (NDC): implements a carbon price markup trajectory consistent with the NDC targets between 2030 and 2070
*' * (netZero): implements a carbon price markup trajectory consistent with the net zero targets, the region settings can be adjusted with cm_netZeroScen
$setglobal carbonpriceRegi none !! def = none
*'--------------------- 47_regipol -----------------------------------------
*'
*' The regiCarbonPrice realisation defines more detailed region or emissions market specific targets, overwriting the behaviour of pm_taxCO2eq and pm_taxCO2eqRegi for these regions.
*'
*' * (none): no regional policies
*' * (regiCarbonPrice): region-specific policies and refinements (regional emissions targets, co2 prices, phase-out policies etc.)
$setglobal regipol none !! def = none
*'--------------------- 50_damages ---------------------------------------
*'
*' * (off): no damages on GDP
*' * (DiceLike): DICE-like damages (linear-quadratic damages on GDP). Choose specification via cm_damage_DiceLike_specification
*' * (BurkeLike): Burke-like damages (growth rate damages on GDP). Choose specification via cm_damage_BurkeLike_specification and cm_damage_BurkeLike_persistenceTime
*' * (KotzWenz): damage function based on Kotz et al. (2024)
*' * (KWLike): Damage function based on Kalkuhl & Wenz (2020)
*' * (KW_SE): Damage function based on Kalkuhl & Wenz (2020), but for the upper bound of the damages based on their standard error calculation
*' * (KWTCint): Combines aggregate damages from Kalkuhl & Wenz (2020) and tropical cyclone damages from Krichene et al. (2022)
*' * (Labor): Labor supply damages from Dasgupta et al. (2021)
*' * (TC): tropical cyclone damages from Krichene et al. (2022)
$setGlobal damages off !! def = off
*'--------------------- 51_internalizeDamages ----------------------------
*'
*' * (off):
*' * (DiceLikeItr): Internalize DICE-like damages (calculate the SCC) adjust cm_damages_SccHorizon. Requires cm_emiscen set to 9 for now.
*' * (BurkeLikeItr): Internalize Burke-like damages (calculate the SCC) adjust cm_damages_SccHorizo. Requires cm_emiscen set to 9 for now.
*' * (KotzWenzItr): Internalize KotzWenz damages (calculate the SCC). Requires cm_emiscen set to 9.
*' * (KWlikeItr): Internalize damage function based on Kalkuhl & Wenz (2020). Requires cm_emiscen set to 9 for now.
*' * (KWlikeItrCPnash): Internalize damage function based on Kalkuhl & Wenz (2020), but with Nash SCC, i.e. each region only internalizes its own damages. Requires cm_emiscen set to 9 for now.
*' * (KWlikeItrCPreg): Internalize damage function based on Kalkuhl & Wenz (2020), but with regional SCC instead of a global uniform price. Requires cm_emiscen set to 9 for now.
*' * (KW_SEitr): Internalize damage function based on Kalkuhl & Wenz (2020) for upper limit based on standard error. Requires cm_emiscen set to 9 for now.
*' * (KWTCintItr): Internalize combined damages from Kalkuhl & Wenz (2020) and from tropical cyclones. Requires cm_emiscen set to 9 for now.
*' * (LabItr): Internalize labor supply damages based on Dasgupta et al. (2021). Requires cm_emiscen set to 9 for now.
*' * (TCitr): Internalize tropical cyclone damage function based on Krichene et al. (2022). Requires cm_emiscen set to 9 for now.
$setGlobal internalizeDamages off !! def = off
*'--------------------- 70_water -------------------------------------------
*'
*' * (off): no water demand taken into account
*' * (heat): as exogenous only that vintage structure in combination with time dependent cooling shares as vintages and efficiency factors are also considered and demand is a function of excess heat as opposed to electricity output
$setglobal water heat !! def = heat
*'--------------------- 80_optimization ----------------------------------
*'
*' * (nash): Nash solution. Adjust cm_nash_autoconverge to needs.
*' * (negishi): calculates a Negishi solution (social planner)
*' * (testOneRegi): solves the problem for one region for given prices (taken from gdx).
*' ! Warning: For development purposes only !
$setGlobal optimization nash !! def = nash
*'--------------------- 81_codePerformance -------------------------------
*'
*' * (off): nothing happens
*' * (on): test code performance: noumerous (30) succesive runs performed in a triangle, tax0, tax30, tax150, all growing exponentially.
$setGlobal codePerformance off !! def = off
***-----------------------------------------------------------------------------
*' #### SWITCHES
***-----------------------------------------------------------------------------
parameter
cm_nash_mode "mode for solving nash problem"
;
cm_nash_mode = 2; !! def = 2 !! regexp = 1|2
*' * (1): debug - all regions are run in a sequence and the lst-file will contain information on infeasiblities
*' * (2): parallel - all regions are run in parallel
*'
parameter
cm_iteration_max "number of iterations, if optimization is set to negishi or testOneRegi; is overwritten in Nash mode, except if cm_nash_autoconverge is set to 0"
;
cm_iteration_max = 1; !! def = 1
*'
parameter
cm_abortOnConsecFail "number of iterations of consecutive infeasibilities/failures to solve for one region, after which the run automatically switches to serial debug mode"
;
cm_abortOnConsecFail = 2; !! def = 2 !! regexp = [0-9]+
*'
parameter
cm_solver_try_max "maximum number of inner iterations within one Negishi iteration (<10)"
;
cm_solver_try_max = 2; !! def = 2
*' set to at least five by testOneRegi
parameter
c_keep_iteration_gdxes "save intermediate iteration gdxes"
;
c_keep_iteration_gdxes = 0; !! def = 0 !! regexp = 0|1
*' in default we do not save gdx files from each iteration to limit the number of the output files but this might be helpful for debugging
*'
*' * (0) gdx files from each iteration are NOT saved
*' * (1) gdx files from each iteration are saved
parameter
cm_keep_presolve_gdxes "save gdxes for all regions/solver tries/nash iterations for debugging"
;
cm_keep_presolve_gdxes = 0; !! def = 0 !! regexp = 0|1
*'
parameter
cm_nash_autoconverge "choice of nash convergence mode"
;
cm_nash_autoconverge = 1; !! def = 1 !! regexp = [0-3]
*' * (0): manually set number of iterations by adjusting cm_iteration_max
*' * (1): run until solution is sufficiently converged - coarse tolerances, quick solution. ! do not use in production runs !
*' * (2): run until solution is sufficiently converged - fine tolerances, for production runs.
*' * (3): run until solution is sufficiently converged using very relaxed targets - very coarse tolerances, two times higher than option 1. ! do not use in production runs !
*'
parameter
cm_emiscen "policy scenario choice"
;
cm_emiscen = 1; !! def = 1 !! regexp = 0|1|4|6|9|10
*' * (0): no global budget. Policy may still be prescribed by 41_emicaprei module.
*' * (1): BAU
*' * (4): emission time path
*' * (6): budget
*' * (9): tax scenario (requires running module 21_tax "on"), tax level controlled by module 45_carbonprice and cm_taxCO2_startyear, other GHG etc. controlled by cm_rcp_scen
*' * (10): used for cost-benefit analysis
*' *JeS* WARNING: data for cm_emiscen 4 only exists for multigas_scen 2 bau scenarios and for multigas_scen 1
parameter
cm_taxCO2_startyear "level of co2 tax in start year in $ per t CO2eq"
;
cm_taxCO2_startyear = -1; !! def = -1 !! regexp = -1|is.nonnegative
*' * (-1): default setting equivalent to no carbon tax
*' * (any number >= 0): CO2 tax in start year [if cm_iterative_target_adj eq 0];
*' * initialization of CO2 tax in start year [if cm_iterative_target_adj eq 5, 7 or 9]
parameter
cm_taxCO2_expGrowth "growth rate of carbon tax"
;
cm_taxCO2_expGrowth = 1.045; !! def = 1.045 !! regexp = is.numeric
*' (any number >= 0): rate of exponential increase over time, default value chosen to be consistent with interest rate
parameter
cm_budgetCO2from2020 "CO2 budget for all economic sectors starting from 2020 (GtCO2). It can be either peak budget, but can also be an end-of-century budget"
;
cm_budgetCO2from2020 = 1150; !! def = 1150
*' budgets from AR6 for 2020-2100 (including 2020), for 1.5 C: 500 Gt CO2 peak budget (400 Gt CO2 end of century), for 2 C: 1150 Gt CO2
parameter
cm_peakBudgYr "date of net-zero CO2 emissions for peak budget runs without overshoot"
;
cm_peakBudgYr = 2050; !! def = 2050
*' time of net-zero CO2 emissions (peak budget)
*' endogenous adjustment by algorithms in 45_carbonprice/functionalForm/postsolve.gms [requires emiscen = 9 and cm_iterative_target_adj = 7 or 9]
parameter
cm_taxCO2_IncAfterPeakBudgYr "annual increase of CO2 tax after cm_peakBudgYr in $ per tCO2"
;
cm_taxCO2_IncAfterPeakBudgYr = 0; !! def = 0 . For weak targets (higher than 1100 Peak Budget), this value might need to increased to prevent continually increasing temperatures
*'
parameter
cm_expoLinear_yearStart "time at which carbon price increases linearly instead of exponentially"
;
cm_expoLinear_yearStart = 2050; !! def = 2050
*'
parameter
c_macscen "scenario switch on whether or not to use MAC (Marginal Abatement Cost) for certain sectors not related to direct combustion of fossil fuel, e.g. fugitive emissions from old mines, forestry, agriculture and cement"
;
c_macscen = 1; !! def = 1 !! regexp = 1|2
*' * (1): on
*' * (2): off
*'
parameter
cm_nucscen "nuclear option choice"
;
cm_nucscen = 2; !! def = 2 !! regexp = 1|2|5|6
*' * (1): default, no restriction, let nuclear be endogenously invested
*' * (2): no fnrs, tnrs with restricted new builds until 2030 (based on current data on plants under construction, planned or proposed)
*' * (5): no new nuclear investments after 2020
*' * (6): +33% investment costs for tnrs under SSP5, uranium resources increased by a factor of 10
*'
parameter
cm_ccapturescen "carbon capture option choice, no carbon capture only if CCS and CCU are switched off!"
;
cm_ccapturescen = 1; !! def = 1 !! regexp = [1-4]
*' * (1): yes
*' * (2): no carbon capture (only if CCS and CCU are switched off!)
*' * (3): no bio carbon capture
*' * (4): no carbon capture in the electricity sector
*'
parameter
c_bioliqscen "2nd generation bioenergy liquids technology choice"
;
c_bioliqscen = 1; !! def = 1 !! regexp = 0|1
*' * (0): no technologies
*' * (1): all technologies
*'
parameter
c_bioh2scen "bioenergy hydrogen technology choice"
;
c_bioh2scen = 1; !! def = 1 !! regexp = 0|1
*' * (0): no technologies
*' * (1): all technologies
*'
parameter
c_shGreenH2 "lower bound on share of green hydrogen in all hydrogen from 2030 onwards"
;
c_shGreenH2 = 0; !! def = 0 !! regexp = is.share
*' (a number between 0 and 1): share
parameter
c_shBioTrans "upper bound on share of bioliquids in transport from 2025 onwards"
;
c_shBioTrans = 1; !! def = 1 !! regexp = is.share
*' (a number between 0 and 1): share
parameter
cm_shSynLiq "lower bound on share of synfuels in SE liquids by 2045, gradual scale-up before"
;
cm_shSynLiq = 0; !! def = 0 !! regexp = is.share
*' (a number between 0 and 1): share
parameter
cm_shSynGas "lower bound on share of synthetic gas in SE gases by 2045, gradual scale-up before"
;
cm_shSynGas = 0; !! def = 0 !! regexp = is.share
*'
parameter
cm_IndCCSscen "CCS for Industry"
;
cm_IndCCSscen = 1; !! def = 1
*'
parameter
cm_optimisticMAC "assume optimistic Industry MAC from AR5 Ch. 10?"
;
cm_optimisticMAC = 0; !! def = 0
*'
parameter
cm_CCS_cement "CCS for cement sub-sector"
;
cm_CCS_cement = 1; !! def = 1
*'
parameter
cm_CCS_chemicals "CCS for chemicals sub-sector"
;
cm_CCS_chemicals = 1; !! def = 1
*'
parameter
cm_CCS_steel "CCS for steel sub-sector"
;
cm_CCS_steel = 1; !! def = 1
*'
parameter
cm_bioenergy_SustTax "level of the bioenergy sustainability tax in fraction of bioenergy price"
;
cm_bioenergy_SustTax = 1.5; !! def = 1.5
*' Only effective if 21_tax is on.
*' The tax is only applied to purpose grown 2nd generation (lignocellulosic)
*' biomass and the level increases linearly with bioenergy demand. A value of 1
*' refers to a tax level of 100% at a production of 200 EJ per yr globally
*' (implies 50% at 100 EJ per yr or 150% at 300 EJ per yr, for example).
*'
*' * (0): setting equivalent to no tax
*' * (1.5): (default), implying a tax level of 150% at a demand of
*' 200 EJ per yr (or 75% at 100 EJ per yr)
*' * (any number ge 0): defines tax level at 200 EJ per yr
*'
parameter
cm_bioenergy_EF_for_tax "bioenergy emission factor that is used to derive a bioenergy tax [kgCO2 per GJ]"
;
cm_bioenergy_EF_for_tax = 0; !! def = 0
*' Only effective if 21_tax is on, applied to all regions specified by
*' cm_regi_bioenergy_EFTax. Please note that the tax, which is derived from
*' this emission factor, is not the same as the sustainabilty tax described
*' above. Please also note that the emission factor is only used to inform
*' the tax level, i.e. associated emissions do not enter the emissions balance
*' equations.
*'
*' * (0) off
*' * (20) Sets the emission factor to 20 kgCO2 per GJ, which for example
*' results in a tax of 2 $ per GJ (primary energy) at a carbon price of
*' 100 $ per tCO2:
*' 20 kgCO2 per GJ * 100 $ per tCO2
*' eq 0.02 tCO2 per GJ * 100 $ per tCO2
*' eq 2 $ per GJ
*'
parameter
cm_tradecostBio "choose financial tradecosts multiplier for biomass (purpose grown pebiolc)"
;
cm_tradecostBio = 1; !! def = 1
*** (1): medium trade costs (used e.g. for for SSP2)
*** (0.5) low tradecosts (used e.g. for other SSP scenarios than SSP2)
*** (any value ge 0): set costs multiplier to that value
*'
parameter
cm_1stgen_phaseout "scenario setting for phase-out of 1st generation biofuels"
;
cm_1stgen_phaseout = 0; !! def = 0 !! regexp = 0|1
*' * (0): no phase-out. Production of 1st generation biofuels after 2045 is bound from below by 90% of maximum resource potential ("maxprod")
*' * (1): phase-out. No new capacities for 1st generation biofuel technologies are built after 2030 (i.e. added capacity vm_deltaCap equals 0), in practice this means a slow phaseout of 1st generation biofuel due to lack of economic competitiveness. Bioenergy production is bound from below by 90% of maximum biomass resource potential in 2045
*'
parameter
cm_phaseoutBiolc "Switch that allows for a full phaseout of all bioenergy technologies globally"
;
cm_phaseoutBiolc = 0; !! def = 0 !! regexp = 0|1
*** Only working with magpie_40 realization of 30_biomass module.
*** (0): (default) No phaseout
*** (1): Phaseout capacities of all bioenergy technologies using pebiolc, as far
*** as historical bounds on bioenergy technologies allow it. This covers
*** all types of lignocellulosic feedstocks, i.e. purpose grown biomass and
*** residues. Lower bounds on future electricity production due to NDC
*** targets in p40_ElecBioBound are removed. The first year, in which no new
*** capacities are allowed, is 2025 or cm_startyear if larger.
*'
parameter
cm_startyear "first optimized modelling time step [year]"
;
cm_startyear = 2005; !! def = 2005 for a baseline !! regexp = 20[0-9](0|5)
*' * (2005): standard for baseline to check if model is well calibrated
*' * (2015): standard for all policy runs (eq. to fix2010), NDC, NPi and production baselines, especially if various baselines with varying parameters are explored
*' * (....): later start for delay policy runs, eg. 2025 for what used to be delay2020
*'
parameter
c_start_budget "start of GHG budget limit"
;
c_start_budget = 2100; !! def = 2100
*'
parameter
cm_prtpScen "pure rate of time preference standard values"
;
cm_prtpScen = 1; !! def = 1 !! regexp = 1|3
*' * (1): 1.5 %
*' * (3): 3 %
*'
parameter
cm_fetaxscen "choice of final energy tax path, subsidy path and inconvenience cost path, values other than zero enable final energy tax"
;
cm_fetaxscen = 3; !! def = 3 !! regexp = [0-5]
*' even if set to 0, the PE inconvenience cost per SO2-cost for coal are always on if module 21_tax is on
*' * (0): no tax, sub, inconv
*' * (1): constant t,s,i (used in SSP 5 and ADVANCE WP3.1 HighOilSub)
*' * (2): converging tax, phased out sub (-2030), no inconvenience cost so far (used in SSP 1)
*' * (3): constant tax, phased out sub (-2050), no inconvenience cost so far (used in SSP 2)
*' * (4): constant tax, phased out sub (-2030), no inconvenience cost so far (used in SDP)
*' * (5): roll back of final energy taxes to get back to a no-policy case (previously known as BAU)
*'
parameter
cm_distrBeta "elasticity of tax revenue redistribution"
;
cm_distrBeta = 1; !! def = 1 !! regexp = 0|1
*' (0): equal per capita redistribution
*' (1): proportional redistribution
*'
parameter
cm_multigasscen "scenario on GHG portfolio to be included in permit trading scheme"
;
cm_multigasscen = 2; !! def = 2 !! regexp = [1-3]
*' * (1): CO2 only
*' * (2): all GHG
*' * (3): all GHG excl CO2 emissions from LULUCF
*'
parameter
cm_permittradescen "scenario on permit trade"
;
cm_permittradescen = 1; !! def = 1 !! regexp = [1-3]
*' * (1): full permit trade (no restrictions)
*' * (2): no permit trade (only domestic mitigation)
*' * (3): limited trade (certain percentage of GDP)
*'
parameter
cm_rentdiscoil "[grades2poly] discount factor for the oil rent"
;
cm_rentdiscoil = 0.2; !! def = 0.2
*'
parameter
cm_rentdiscoil2 "[grades2poly] discount factor for the oil rent achieved in 2100"
;
cm_rentdiscoil2 = 0.9; !! def = 0.9
*'
parameter
cm_rentconvoil "[grades2poly] number of years required to converge to the 2100 oil rent"
;
cm_rentconvoil = 50; !! def = 50
*'
parameter
cm_rentdiscgas "[grades2poly] discount factor for the gas rent"
;
cm_rentdiscgas = 0.6; !! def = 0.6
*'
parameter
cm_rentdiscgas2 "[grades2poly] discount factor for the gas rent achieved in 2100"
;
cm_rentdiscgas2 = 0.8; !! def = 0.8
*'
parameter
cm_rentconvgas "[grades2poly] number of years required to converge to the 2100 gas rent"
;
cm_rentconvgas = 50; !! def = 50
*'
parameter
cm_rentdisccoal "[grades2poly] discount factor for the coal rent"
;
cm_rentdisccoal = 0.4; !! def = 0.4
*'
parameter
cm_rentdisccoal2 "[grades2poly] discount factor for the coal rent achieved in 2100"
;
cm_rentdisccoal2 = 0.6; !! def = 0.6
*'
parameter
cm_rentconvcoal "[grades2poly] number of years required to converge to the 2100 coal rent"
;
cm_rentconvcoal = 50; !! def = 50
*'
parameter
c_cint_scen "additional GHG emissions from mining fossil fuels"
;
c_cint_scen = 1; !! def = 1 !! regexp = 0|1
*' * (0): switch is off (emissions are not accounted)
*' * (1): switch is on (emissions are accounted)
*'
parameter
cm_so2tax_scen "level of SO2 tax"
;
cm_so2tax_scen = 1; !! def = 1 !! regexp = [0-4]
*' * (0): so2 tax is set to zero
*' * (1): so2 tax is low
*' * (2): so2 tax is standard
*' * (3): so2 tax is high
*' * (4): so2 tax intermediary between 1 and 2, multiplying (1) tax by the ratio (3) and (2)
*'
parameter
c_techAssumptScen "scenario for assumptions of energy technologies based on SSP scenarios, 1: SSP2 (default), 2: SSP1, 3: SSP5, 4: SSP3"
;
c_techAssumptScen = 1; !! def = 1 !! regexp = [1-4]
*' This flag defines an energy technology scenario according to SSP scenario
*' * (1) SSP2: reference scenario - default investment costs & learning rates for pv, csp and wind
*' * (2) SSP1: advanced renewable energy techno., pessimistic for nuclear and CCS
*' * (3) SSP5: pessimistic techno-economic assumptions
*'
parameter
c_ccsinjecratescen "CCS injection rate factor applied to total regional storage potentials, yielding an upper bound on annual injection"
;
c_ccsinjecratescen = 1; !! def = 1 !! regexp = [0-6]
*' This switch determines the upper bound of the annual CCS injection rate.
*' CCS here refers to carbon sequestration, carbon capture is modelled separately.
*' * (0) no "CCS" as in no carbon sequestration at all
*' * (1) reference case: 0.005; max 19.7 GtCO2/yr globally
*' * (2) lower estimate: 0.0025; max 9.8 GtCO2/yr globally
*' * (3) upper estimate: 0.0075; max 29.5 GtCO2/yr globally
*' * (4) unconstrained: 1; max 3900 GtCO2/yr globally
*' * (5) sustainability case: 0.001; max 3.9 GtCO2/yr globally
*' * (6) intermediate estimate: 0.0022; max 8.6 GtCO2/yr globally
*'
parameter
c_ccscapratescen "CCS capture rate"
;
c_ccscapratescen = 1; !! def = 1 !! regexp = 1|2
*' This flag determines the CO2 capture rate of selected CCS technologies
*' * (1) reference (90%)
*' * (2) increased capture rate (99%)
*'
parameter
c_export_tax_scen "choose which oil export tax is used in the model. 0 = none, 1 = fix"
;
c_export_tax_scen = 0; !! def = 0 !! regexp = 0|1
*'
parameter
cm_iterative_target_adj "settings on iterative adjustment for CO2 tax based on in-iteration emission or forcing level. Allow iteratively generated endogenous global CO2 tax under peak budget constraint or end-of-century budget constraint."
;
cm_iterative_target_adj = 0; !! def = 0 !! regexp = 0|2|3|5|7|9
*' * (0): no iterative adjustment of CO2 tax (terminology: CO2 price and CO2 tax in REMIND is used interchangeably)
*' * (2): iterative adjustment of CO2 tax or cumulative emission based on climate forcing calculated by climate model magicc, for runs with budget or CO2 tax constraints. See ./modules/45_carbonprice/NDC/postsolve.gms for direct algorithm
*' * (3): [requires 45_carbonprice = NDC and emiscen = 9] iterative adjustment of CO2 tax based on 2025 or 2030 regionally differentiated emissions, for runs with emission budget or CO2 tax constraints. See ./modules/45_carbonprice/NDC/postsolve.gms for direct algorithm
*' * (5): [requires 45_carbonprice = functionalForm and emiscen = 9] iterative adjustment of CO2 tax based on economy-wide CO2 cumulative emission budget(2020-2100), for runs with emission budget or CO2 tax constraints. [see 45_carbonprice/functionalForm/postsolve.gms for direct algorithm]
*' * (7): [requires 45_carbonprice = functionalForm and emiscen = 9] iterative adjustment of CO2 tax based on economy-wide CO2 cumulative emission peak budget, for runs with emission budget or CO2 tax constraints. Features: results in a peak budget with zero net CO2 emissions after peak budget is reached. See core/postsolve.gms for direct algorithms [see 45_carbonprice/functionalForm/postsolve.gms for direct algorithm]
*' * (9): [requires 45_carbonprice = functionalForm and emiscen = 9] iterative adjustment of CO2 tax based on economy-wide CO2 cumulative emission peak budget, for runs with emission budget or CO2 tax constraints. Features: 1) after the year when budget peaks, CO2 tax has an annual increase by cm_taxCO2_IncAfterPeakBudgYr, 2) automatically shifts cm_peakBudgYr to find the correct year of budget peaking for a given budget. [see 45_carbonprice/functionalForm/postsolve.gms for direct algorithm]
*'
parameter
cm_NDC_divergentScenario "choose scenario about convergence of CO2eq prices [45_carbonprice = NDC]"
;
cm_NDC_divergentScenario = 0; !! def = 0 !! regexp = [0-2]
*' * (0) 70 years after 2030
*' * (1) 120 years after 2030
*' * (2) until year 3000 ("never")
*'
parameter
cm_gdximport_target "whether or not the starting value for iteratively adjusted CO2 tax trajectories for all regions (scenarios defined by cm_iterative_target_adj) should be read in from the input.gdx"
;
cm_gdximport_target = 0; !! def = 0 !! regexp = 0|1
*' * (0): no import
*' * (1): the values from the gdx are read in (works only if the gdx has a parameter value) ATTENTION: make sure that the values from the gdx have the right structure (e.g. regionally differentiated or not)
*'
parameter
cm_33DAC "choose whether DAC (direct air capture) should be included into the CDR portfolio."
;
cm_33DAC = 1; !! def = 1 !! regexp = 0|1
*' * (1): direct air capture is included
*' * (0): not included
*'
parameter
cm_33EW "choose whether EW (enhanced weathering) should be included into the CDR portfolio."
;
cm_33EW = 0; !! def = 0 !! regexp = 0|1
*' * (1): enhanced weathering is included
*' * (0): not included
*'
parameter
cm_33OAE "choose whether OAE (ocean alkalinity enhancement) should be included into the CDR portfolio. 0 = OAE not used, 1 = used"
;
cm_33OAE = 0; !! def = 0
*' Since OAE is quite a cheap CDR option, runs might not converge because the model tries to deploy
*' a lot of OAE. In this case, use a quantity target to limit OAE by adding something like:
*' (2070,2080,2090,2100).GLO.tax.t.oae.all 5000 to cm_implicitQttyTarget in your config file,
*' starting from the year in which OAE is deployed above 5000 MtCO2 / yr. This will limit the global
*' deployment to 5000 Mt / yr in timesteps 2070-2100.
*' * (1): ocean alkalinity enhancement is included
*' * (0): not included
*'
parameter
cm_33_OAE_eff "OAE efficiency measured in tCO2 uptaken by the ocean per tCaO. Typically between 0.9-1.4 (which corresponds to 1.2-1.8 molCO2/molCaO). [tCO2/tCaO]"
;
cm_33_OAE_eff = 1.2; !! def = 1.2
*'
parameter
cm_33_OAE_scen "OAE distribution scenarios"
;
cm_33_OAE_scen = 1; !! def = 1
*' * (0): pessimistic: a rather low discharge rate (30 tCaO per h), corresponding to high distribution costs
*' * (1): optimistic: a high discharge rate (250 tCaO per h), corresponding to lower distribution costs
*'
parameter
cm_33_OAE_startyr "The year when OAE could start being deployed [year]"
;
cm_33_OAE_startyr = 2030; !! def = 2030 !! regexp = 20[3-9](0|5)
*' * (2030): earliest year when OAE could be deployed
*' * (....): later timesteps
*'
parameter
cm_gs_ew "grain size (for enhanced weathering, CDR module) [micrometre]"
;
cm_gs_ew = 20; !! def = 20 !! regexp = is.numeric
*'
parameter
cm_LimRock "limit amount of rock spread each year [Gt]"
;
cm_LimRock = 1000; !! def = 1000
*'
parameter
cm_33_EW_upScalingRateLimit "Annual growth rate limit on upscaling of mining & spreading rocks on fields"
;
cm_33_EW_upScalingRateLimit = 0.2; !! def = 20% !! regexp = is.nonnegative
parameter
cm_33_EW_shortTermLimit "Limit on 2030 potential for enhanced weathering, defined as % of land on which EW is applied. Default 0.5% of land"
;
cm_33_EW_shortTermLimit = 0.005; !! def = 0.5% !! regexp = is.nonnegative
*'
parameter
cm_postTargetIncrease "carbon price increase per year after regipol emission target is reached (euro per tCO2)"
;
cm_postTargetIncrease = 0; !! def = 0
*'
parameter
cm_implicitQttyTarget_tolerance "tolerance for regipol implicit quantity target deviations convergence."
;
cm_implicitQttyTarget_tolerance = 0.01; !! def = 0.01, i.e. regipol implicit quantity targets must be met within 1% of target deviation
*'
parameter
cm_emiMktTargetDelay "number of years for delayed price change in the emission tax convergence algorithm. Not applied to first target set."
;
cm_emiMktTargetDelay = 0; !! def = 0
*'
parameter
cm_distrAlphaDam "income elasticity of damages for inequality"
;
cm_distrAlphaDam = 1; !! def = 1
*' 1 means damage is distributed proportional to income, i.e. distributionally neutral, 0 means equal per capita distribution of damage
parameter
cm_damages_BurkeLike_specification "empirical specification for Burke-like damage functions"
;
cm_damages_BurkeLike_specification = 0; !! def = 0
*' {0,5} Selects the main Burke specification "pooled, short-run" (0) or an alternative one "pooled, long-run "(5)
parameter
cm_damages_BurkeLike_persistenceTime "persistence time in years for Burke-like damage functions"
;
cm_damages_BurkeLike_persistenceTime = 30; !! def = 30
*' Persistence time (half-time) in years. Highly uncertain, but may be in between 5 and 55 years.
parameter
cm_damages_SccHorizon "Horizon for SCC calculation. Damages cm_damagesSccHorizon years into the future are internalized."
;
cm_damages_SccHorizon = 100; !! def = 100
*' Horizon for SCC calculation. Damages cm_damagesSccHorizon years into the future are internalized.
parameter
cm_damage_KWSE "standard error for Kalkuhl & Wenz damages"
;
cm_damage_KWSE = 0; !! def = 0
*' {1.645 for 90% CI, 1.96 for 95% CI, no correction when 0}
parameter
cm_sccConvergence "convergence indicator for SCC iteration"
;
cm_sccConvergence = 0.05; !! def = 0.05
;
parameter
cm_tempConvergence "convergence indicator for temperature in damage iteration"
;
cm_tempConvergence = 0.05; !! def = 0.05
;
parameter
cm_carbonprice_temperatureLimit "not-to-exceed temperature target in degree above pre-industrial [45_carbonprice = temperatureNotToExceed]"
;
cm_carbonprice_temperatureLimit = 1.8; !! def = 1.8
*'
parameter
cm_frac_CCS "tax on carbon transport & storage (ccsinje) to reflect risk of leakage, formulated as fraction of ccsinje O&M costs"
;
cm_frac_CCS = 10; !! def = 10
*'
parameter
cm_frac_NetNegEmi "tax on net negative emissions to reflect risk of overshooting, formulated as fraction of carbon price"