-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathrpt_par.cli
79 lines (78 loc) · 4.62 KB
/
rpt_par.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
*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* 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).
*-----------------------------------------------------------------------------
* RPT_PAR.cli - Extension for Climate Module
* %1-%2 - none or LOOP(SOW, ) for stochastics
*-----------------------------------------------------------------------------
* Questions/Comments:
*
*-----------------------------------------------------------------------------
* Calculate Reporting parameters for Climate Module
%1
OPTION CLEAR=CM_RESULT,CLEAR=CM_MAXC_M;
*-----------------------------------------------------------------------------
* Calculate incremental radiative forcing in each year
OPTION CLEAR=MY_ARRAY;
MY_F = SUM(CM_BOXMAP('CO2-GTC',CM_VAR,CM_BOX)$CM_PHI('CO2-GTC',CM_BOX,'CO2-GTC'),CM_CONST(CM_VAR))/CM_CONST('CO2-PREIND');
VALLVL = CM_CONST('GAMMA') / LOG(2);
Z = SMIN(T,M(T))-CM_CALIB;
LOOP(LL$CM_LED(LL), CNT = MAX(1,CM_LED(LL));
ATTLVL = SUM(CM_BOXMAP('CO2-GTC',CM_VAR,CM_BOX)$CM_PHI('CO2-GTC',CM_BOX,'CO2-GTC'),VAR_CLIBOX.L(CM_VAR,LL))/CM_CONST('CO2-PREIND');
Z = (ATTLVL - MY_F) / CNT;
FOR(F = 0 TO CNT-1, MY_ARRAY(LL-F) = VALLVL*LOG(ATTLVL-F*Z)+CM_EXOFORC(LL-F));
MY_F = ATTLVL;
);
CM_RESULT('FORC+CO2',LL)$CM_LED(LL) = MY_ARRAY(LL)-CM_EXOFORC(LL);
*-----------------------------------------------------------------------------
* Calculate radiative forcing from other emissions in each year
LOOP(SUPERYR(T,LL)$CM_LED(LL), CM_RESULT(CM_OFOR,LL) =
SUM(CM_FORCMAP(CM_OFOR,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.L(CM_VAR,LL))) +
SUM(CM_FORCMAP(CM_TKIND(CM_OFOR),CM_VAR)$(NOT CM_EMIS(CM_VAR)),VAR_CLITOT.L(CM_OFOR,LL)));
LOOP(MIYR_1(T), FIRST_VAL =
SUM(CM_FORCMAP(CM_OFOR,CM_EMIS),CM_LINFOR(T,CM_EMIS,'FX')+CM_LINFOR(T,CM_EMIS,'N')/CM_PPM(CM_EMIS)*
SUM(CM_BOXMAP(CM_EMIS,CM_VAR,CM_BOX)$CM_PHI(CM_EMIS,CM_BOX,CM_EMIS),CM_CONST(CM_VAR))) +
SUM(CM_FORCMAP(CM_TKIND,CM_VAR)$(NOT CM_EMIS(CM_VAR)),VAR_CLITOT.L(CM_TKIND,T)));
LOOP(LL$CM_LED(LL), CNT = MAX(1,CM_LED(LL));
LAST_VAL = SUM(CM_FORCMAP(CM_OFOR,CM_VAR),CM_RESULT(CM_OFOR,LL));
FOR(F = 0 TO CNT-1, MY_F = F/CNT; MY_FIL2(LL-F) = MY_F*FIRST_VAL+(1-MY_F)*LAST_VAL);
FIRST_VAL = LAST_VAL);
MY_ARRAY(LL)$MY_ARRAY(LL) = MY_ARRAY(LL) + MY_FIL2(LL);
*-----------------------------------------------------------------------------
CM_DT_FORC(LL) = MY_ARRAY(LL);
*-----------------------------------------------------------------------------
* Calculate the ith powers of SIG, i=1...Z, where Z = LEAD(T)
* First intialize CM_DD to the identity matrix, CM_EE to zero
LOOP((CM_VAR('FORCING'),LL)$CM_LED(LL), Z = CM_LED(LL);
OPTION CLEAR=CM_RR;
CM_RR('1',CM_BUCK,CM_BOX) = DIAG(CM_BUCK,CM_BOX);
FOR(F = 0 TO Z-1,
CM_RR('2',CM_BOX,'LO') = CM_RR('2',CM_BOX,'LO') + MY_ARRAY(LL-F)*CM_RR('1',CM_BOX,'ATM');
CM_RR('1',CM_BUCK,CM_BOX) = SUM(ITEM$CM_BOX(ITEM),CM_RR('1',CM_BUCK,ITEM)*CM_SIG(SOW,ITEM,CM_BOX));
);
* Calculate temperature changes
CM_DELTAT(LL,CM_BOX) =
CM_RR('1',CM_BOX,'ATM') * CM_DELTAT(LL-CM_LED(LL),'ATM') +
CM_RR('1',CM_BOX,'LO') * CM_DELTAT(LL-CM_LED(LL),'LO') +
CM_RR('2',CM_BOX,'LO') * CM_SIG1(SOW) +
(CM_RR('1',CM_BOX,'ATM') * CM_CONST('DELTA-ATM') +
CM_RR('1',CM_BOX,'LO') * CM_CONST('DELTA-LO'))$MIYR_1(LL);
);
*-----------------------------------------------------------------------------
* Shadow price of total and maximum constraints
CM_MAXC_M(CM_VAR,T) $= ABS(EQ_CLITOT.M(CM_VAR,T,T));
CM_MAXC_M(CM_VAR,LL) $= MAX(CM_MAXC_M(CM_VAR,LL),ABS(EQ_CLIMAX.M(LL,CM_VAR)))$EQ_CLIMAX.M(LL,CM_VAR);
*-----------------------------------------------------------------------------
* Collect all basic results
CM_RESULT(CM_VAR,LL) $= VAR_CLITOT.L(CM_VAR,LL);
CM_RESULT(CM_VAR,LL) $= VAR_CLIBOX.L(CM_VAR,LL);
LOOP(CM_ATMAP(CM_EMIS,CM_HISTS), CM_RESULT(CM_HISTS,LL)$CM_LED(LL) =
SUM(CM_BOXMAP(CM_EMIS,CM_VAR,CM_BOX)$CM_PHI(CM_EMIS,CM_BOX,CM_EMIS),VAR_CLIBOX.L(CM_VAR,LL))/CM_PPM(CM_EMIS));
CM_RESULT('FORC+TOT',LL)$CM_LED(LL) $= CM_DT_FORC(LL);
CM_RESULT('DELTA+ATM',LL) $= CM_DELTAT(LL,'ATM');
CM_RESULT('DELTA+LO',LL) $= CM_DELTAT(LL,'LO');
CM_SRESULT(SOW,ITEM,LL) $= CM_RESULT(ITEM,LL);
CM_SMAXC_M(SOW,ITEM,LL) $= CM_MAXC_M(ITEM,LL);
%2