-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathequ_ext.cli
109 lines (96 loc) · 6.41 KB
/
equ_ext.cli
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
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Copyright (C) 2000-2023 Energy Technology Systems Analysis Programme (ETSAP)
* This file is part of the IEA-ETSAP TIMES model generator, licensed
* under the GNU General Public License v3.0 (see file NOTICE-GPLv3.txt).
*-----------------------------------------------------------------------------
* EQU_EXT.cli - Extension for Climate Module
*-----------------------------------------------------------------------------
* Questions/Comments:
*
*=============================================================================
* CLIMATE MODULE EQUATIONS
*-----------------------------------------------------------------------------
$IFI %STAGES% == YES $SETLOCAL SWTD 'SUM(SOW,' SETLOCAL SWO ',SOW' SETLOCAL SEND ')' SETLOCAL SWTS ',SW_TSW(SOW,T,W)'
$IF %STAGES% == YES $SETLOCAL SWTD 'SUM(SW_TSW(SOW,T-1,W),' SETLOCAL SWD ',W' SETLOCAL SEND '' SETLOCAL SWT '$SW_T(T,SOW)'
$IFI NOT %STAGES% == YES $SETLOCAL SWO ",'1'" SETLOCAL SEND '' SETLOCAL SWTS ''
$IF NOT %STAGES% == YES $SETLOCAL CPAR CM_MAXC(LL,CG)
$IF %STAGES% == YES $SETLOCAL CPAR "S_CM_MAXC(LL,CG,'1'%SOW%)" %SW_STVARS%
*-----------------------------------------------------------------------------
* Balance equation for the total emissions/forcing in each T
%EQ%_CLITOT(CM_TKIND,SUPERYR(T,LL) %SOW%)$(CM_LED(LL)%SWT%)..
SUM((RTCS_VARC(R,T,C,S),CG(CM_EMIS(CM_TKIND)))$CM_GHGMAP(R,C,CG),
%VAR%_COMNET(R,T,C,S %SOW%) * CM_GHGMAP(R,C,CG) * CM_EVAR(CM_TKIND,LL))$CM_PPM(CM_TKIND) +
CM_BEMI(CM_TKIND,LL) +
SUM(CM_FORCMAP(CM_TKIND,CM_EMIS),CM_LINFOR(LL,CM_EMIS,'FX') + CM_LINFOR(LL,CM_EMIS,'N')/CM_PPM(CM_EMIS)*
SUM(CM_BOXMAP(CM_EMIS,CM_VAR,CM_BOX)$CM_PHI(CM_EMIS,CM_BOX,CM_EMIS),%VAR%_CLIBOX(CM_VAR,LL %SOW%))) +
SUM(CM_FORCMAP(CM_TKIND,CM_VAR(CG))$(NOT CM_EMIS(CM_VAR)),%CPAR%) +
SUM(SAMEAS('FORCING',CM_TKIND),CM_EXOFORC(LL))
=E= %VAR%_CLITOT(CM_TKIND,LL %SOW%);
*-----------------------------------------------------------------------------
* Balance equation for the mass of CO2 in each box in each T
%EQ%_CLICONC(CM_CONC(CM_EMIS(CM_KIND),CM_BOX),T %SOW%)%SWT%..
%SWTD%
SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BUCK), CM_AA(CM_KIND,T,'1',CM_BOX,CM_BUCK) * %VAR%_CLIBOX(CM_VAR,T-1 %SWD%)) +
CM_CC(CM_KIND,T,'1',CM_BOX) * %VAR%_CLITOT(CM_KIND,T-1 %SWS%) +
CM_BB(CM_KIND,T,'1',CM_BOX) * %VAR%_CLITOT(CM_KIND,T %SOW%) +
SUM(CM_BOXMAP(CM_KIND,CM_HISTS,CM_BUCK)$CM_AA(CM_KIND,T,'1',CM_BOX,CM_BUCK),
CM_AA(CM_KIND,T,'1',CM_BOX,CM_BUCK) * CM_CONST(CM_HISTS))$(ORD(T) EQ 1)
%SEND%
=E= SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BOX),%VAR%_CLIBOX(CM_VAR,T %SOW%));
*-----------------------------------------------------------------------------
* Balance equation for the temperature
%EQ%_CLITEMP(CM_CONC(CM_KIND('FORCING'),CM_BOX),T %SOW%)..
%SWTD%
SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BUCK), CM_AA(CM_KIND,T%SWO%,CM_BOX,CM_BUCK) * %VAR%_CLIBOX(CM_VAR,T-1 %SOW%)) +
CM_CC(CM_KIND,T%SWO%,CM_BOX) * %VAR%_CLITOT(CM_KIND,T-1 %SWS%) +
CM_BB(CM_KIND,T%SWO%,CM_BOX) * %VART%_CLITOT(CM_KIND,T %SWS%) +
SUM(CM_BOXMAP(CM_KIND,CM_HISTS,CM_BUCK)$CM_AA(CM_KIND,T%SWO%,CM_BOX,CM_BUCK),
CM_AA(CM_KIND,T%SWO%,CM_BOX,CM_BUCK) * CM_CONST(CM_HISTS))$(ORD(T) EQ 1)
%SEND%
=E= SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BOX),%VAR%_CLIBOX(CM_VAR,T %SOW%));
*-----------------------------------------------------------------------------
* Balance equation for the temperature
%EQ%_CLIBEOH(CM_CONC(CM_KIND,CM_BOX),SUPERYR(T,LL) %SOW%)$((NOT MILESTONYR(LL))$CM_LED(LL))..
SUM(YEAR(LL-CM_LED(LL)),
SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BUCK), CM_AA(CM_KIND,LL,'1',CM_BOX,CM_BUCK) * %VART%_CLIBOX(CM_VAR,YEAR %SWS%)) +
CM_CC(CM_KIND,LL,'1',CM_BOX) * %VART%_CLITOT(CM_KIND,YEAR %SWS%) +
CM_BB(CM_KIND,LL,'1',CM_BOX) * %VART%_CLITOT(CM_KIND,LL %SWS%)
)$CM_EMIS(CM_KIND) +
SUM((YEAR(LL-CM_LED(LL))%SWTS%),
SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BUCK), CM_AA(CM_KIND,LL%SWO%,CM_BOX,CM_BUCK) * %VAR%_CLIBOX(CM_VAR,YEAR %SOW%)) +
CM_CC(CM_KIND,LL%SWO%,CM_BOX) * %VAR%_CLITOT(CM_KIND,YEAR %SWD%) +
CM_BB(CM_KIND,LL%SWO%,CM_BOX) * %VAR%_CLITOT(CM_KIND,LL %SWD%)
)$(NOT CM_EMIS(CM_KIND))
=E= SUM(CM_BOXMAP(CM_KIND,CM_VAR,CM_BOX),
%VART%_CLIBOX(CM_VAR,LL %SWS%)$CM_EMIS(CM_KIND) +
%VAR%_CLIBOX(CM_VAR,LL %SOW%)$(NOT CM_EMIS(CM_KIND)));
*-----------------------------------------------------------------------------
* Constraint for the maximum atmospheric concentration of GHGs
%EQ%_CLIMAX(LL,CM_HISTS(CG) %SOW%)$%CPAR% ..
SUM((SUPERYR(YK(T,LL)),PRET(T,TT)),
* Bound on atmospheric quantity (concentration/delta-T)
SUM(CM_BOXMAP(CM_EMIS,CM_VAR,CM_BOX)$(CM_ATMAP(CM_EMIS,CM_HISTS)*CM_PHI(CM_EMIS,CM_BOX,CM_EMIS)),
(%VAR%_CLIBOX(CM_VAR,T %SOW%) + (%VARTT%_CLIBOX(CM_VAR,TT %SWS%) - %VAR%_CLIBOX(CM_VAR,T %SOW%)) *
(YEARVAL(T)-YEARVAL(LL)) / LEAD(T)) / CM_PPM(CM_EMIS)) +
* Bound on temperature
SUM(CM_BOXMAP('FORCING',CM_VAR,'ATM')$CM_ATMAP('FORCING',CM_HISTS),
$IF NOT %STAGES%==YES VAR_CLIBOX(CM_VAR,T)+(VAR_CLIBOX(CM_VAR,TT)-VAR_CLIBOX(CM_VAR,T)) * (YEARVAL(T)-YEARVAL(LL))
$IF %STAGES%==YES (SUM(SW_TSW(W,T,SOW),SW_PROB(W)*%VAR%_CLIBOX(CM_VAR,T,W))/SW_TPROB(T,SOW) * (LEAD(T)+YEARVAL(LL)-YEARVAL(T)) +
$IF %STAGES%==YES SUM(SW_TSW(WW,TT,W)$SW_TSW(SOW,TT,W),SW_PROB(WW)*%VAR%_CLIBOX(CM_VAR,TT,WW)/SW_TPROB(TT,W)) * (YEARVAL(T)-YEARVAL(LL)))
/ LEAD(T)) +
* Bound on radiative forcing
SUM(CM_TKIND(CM_HISTS)$SUM(CM_FORCMAP(CM_TKIND,CM_EMIS),1),
%VAR%_CLITOT(CM_HISTS,T %SOW%) + (%VARTT%_CLITOT(CM_HISTS,TT %SWS%) - %VAR%_CLITOT(CM_HISTS,T %SOW%)) *
(YEARVAL(T)-YEARVAL(LL)) / LEAD(T))) +
* Bound on global emissions
$IFI NOT %OBJ%==LIN SUM((CM_EMIS(CM_HISTS),PERIODYR(T,EOHYEARS(LL))), %VART%_CLITOT(CM_HISTS,T %SWS%))
$IFI %OBJ%==LIN SUM((CM_EMIS(CM_HISTS),TPULSEYR(T,LL)),TPULSE(T,LL)*%VART%_CLITOT(CM_EMIS,T %SWS%))
* Bound beyond last Milestone
+ SUM(SUPERYR(T,LL)$(NOT YK(T,LL)),
SUM(CM_BOXMAP(CM_EMIS,CM_VAR,CM_BOX)$(CM_ATMAP(CM_EMIS,CM_HISTS)*CM_PHI(CM_EMIS,CM_BOX,CM_EMIS)),
%VAR%_CLIBOX(CM_VAR,LL %SOW%) / CM_PPM(CM_EMIS)) +
SUM(CM_BOXMAP('FORCING',CM_VAR,'ATM')$CM_ATMAP('FORCING',CM_HISTS),%VAR%_CLIBOX(CM_VAR,LL %SOW%)) +
SUM(CM_TKIND(CM_HISTS)$SUM(CM_FORCMAP(CM_TKIND,CM_EMIS),1),%VAR%_CLITOT(CM_HISTS,LL %SOW%)))
=L=
%CPAR%$(SUM(CM_ATMAP(CM_KIND,CM_HISTS),YES)+CM_TKIND(CM_HISTS));
*-----------------------------------------------------------------------------