Description
Carbon-Related Trade Model (static).
Large Model of Types : MPSGE mcp
Category : GAMS Model library
Main file : co2mge.gms
$title Carbon-Related Trade Model (static) (CO2MGE,SEQ=142)
$onText
Carbon-Related Trade Model (static).
Perroni, C, and Rutherford, T F, International Trade in Carbon Emission Rights
and Basic Materials: General Equilibrium Calculations for 2020.
Scandinavian Journal of Economics 95, 3 (1993), 257-278.
Keywords: mixed complementarity problem, general equilibrium model, Carbon dioxide emissions
international trade, emission, forecasting, greenhouse gases
$offText
Set
SCENARIOS 'scenarios used for graphs in paper'
/ BENCH, GLOBAL-B, GLOBAL-E, GLOBAL-T, GLOBAL
OECD-B, OECD-E, OECD-L, OECD-T, OECD /
SC(SCENARIOS) 'single scenario to run here' / OECD-L /
R 'regions' / USA 'USA'
OEC 'OECD countries'
SUE 'Soviet Union and Eastern Europe'
CHN 'China'
ROW 'Rest of the World' /
OECD(R) 'OECD regions' / USA, OEC /
ES 'ETA sectors' / HYDR 'Global 2100 electric sector HYDRO'
COLR 'Global 2100 electric sector COAL-R'
NUCR 'Global 2100 electric sector NUC-R'
GASN 'Global 2100 electric sector GAS-N'
COLN 'Global 2100 electric sector COAL-N'
ADVL 'Global 2100 electric sector ADV-LC'
ADVH 'Global 2100 electric sector ADV-HC'
NEBK 'Global 2100 non-electric sector NE-BAK'
RNEW 'Global 2100 non-electric sector RNEW'
SYNF 'Global 2100 non-electric sector SYNF'
CLDU 'Global 2100 non-electric sector CLDU'
OILM 'Global 2100 non-electric sector OILMX'
OILX 'Global 2100 non-electric sector OILMX'
OILL 'Global 2100 non-electric sector OIL-LC'
OILH 'Global 2100 non-electric sector OIL-HC'
GASL 'Global 2100 non-electric sector GAS-LC'
GASH 'Global 2100 non-electric sector GAS-HC'
GNEL 'Global 2100 non-electric sector GNEL' /
ET(ES) 'electric technologies'
/ HYDR, COLR, NUCR, GASN, COLN, ADVL, ADVH /
NT(ES) 'non-electric technologies'
/ NEBK, RNEW, SYNF, CLDU, OILM, OILX, OILL, OILH, GNEL /
GS(ES) 'gas supply technologies'
/ GASL, GASH /
G 'goods' / DOME 'non-basic production (Y)'
DOMI 'K-L-E-N-BSMA aggregate in non-basic production'
BSMA 'basic materials'
NELE 'non-electric energy'
ELEC 'electric energy'
RESR 'basic material resource'
SBVA 'basic material intermediate inputs'
GASS 'gas supply'
CRTS 'CO2 emission rights'
OILT 'internationally traded oil'
UBND 'upper bounds'
LBND 'lower bounds'
KSPC 'specific capital'
KLVA 'capital-labor value added' /
MS 'macro sectors' / CONS 'Regional consumer'
SDOM 'DOME production'
SDMI 'DOMI production'
SBSM 'BSMA production'
SBVA 'BSMA intermediate production'
DOMX 'DOME exports'
DOMM 'DOME imports'
BSMX 'BSMA exports'
BSMM 'BSMA imports'
CO2X 'Carbon rights export'
CO2M 'Carbon rights import'
IMEX 'Current account balance'
ETAG 'Aggregated ETA sector' /
TP 'time periods' / BASE, FUTURE /
EG(G) 'ETA input goods'
BE(G) 'basic energy goods'
OILM(ES) 'oil import sector'
OILX(ES) 'oil export sector'
UPPER(ES,R) 'ETA activities with active upper bounds'
LOWER(ES,R) 'ETA activities with active lower bounds'
FIXED(ES,R) 'ETA activities fixed'
BASIC(ES,R) 'ETA activities operated between bounds';
Alias (R,RR);
EG(G) = no;
EG("NELE") = yes;
EG("ELEC") = yes;
EG("GASS") = yes;
OILM(ES) = no;
OILM("OILM") = yes;
OILX(ES) = no;
OILX("OILX") = yes;
BE(G) = no;
BE("NELE") = yes;
BE("ELEC") = yes;
Scalar
BYR 'base year' / 1990 /
FYR 'future year' / 2020 /;
Table BYD(R,*) 'base year macro data (1990).'
* GDP Gross Domestic product (US$ billions)
* PN Reference non-electric price ($ per MBTU).
* QN Total non-electric energy (MBTU)
* QE Total electric energy (TKWH)
* BMAM Basic materials imports (US$ millions)
GDP ELVS PN QN QE BMAM
USA 5.60 0.33 3.5 51.335 2.661 10
OEC 10.20 0.33 4.0 50.858 3.288 -66
SUE 2.68 0.33 2.0 47.207 1.406 4
CHN 1.10 0.33 2.0 22.610 0.541 4
ROW 3.34 0.33 2.0 49.870 2.111 49;
Table FYD(R,*) 'future year data'
* GDP Gross Domestic product (US$ billions)
* PN Reference non-electric price ($ per MBTU).
* PE Reference electric price ($ per TKWH).
* PG Reference price natural gas ($ per MBTU).
* PO Reference price of oil ($ per MBTU).
GDP PN PE PG PO
USA 10.431 11.0 51.0 6.1 9.0
OEC 19.788 11.0 51.0 6.1 9.0
SUE 4.950 9.0 51.0 5.0 9.0
CHN 3.698 9.0 51.0 4.8 9.0
ROW 8.615 9.0 51.0 4.8 9.0;
Table ELTECH(ET,R,*) 'electric technology data.'
* COST US $ per TKWH
* CARBON CO2 emission rate (tons per TKWH).
* GAS Gas inputs (MBTU per TKWH).
COST CARBON GAS
HYDR.USA 2.6
HYDR.OEC 2.6
HYDR.SUE 2.6
HYDR.CHN 2.1
HYDR.ROW 3.6
COLR.USA 20.1 0.2779
COLR.OEC 23.2 0.2844
COLR.SUE 20.1 0.2680
COLR.CHN 26.1 0.2776
COLR.ROW 27.9 0.3600
NUCR.USA 20.6
NUCR.OEC 20.6
NUCR.SUE 20.6
NUCR.CHN 18.2
NUCR.ROW 25.4
* NOTE: THESE COSTS ARE REDUCED TO AVOID BENCHMARK LOSS:
GASN.USA 12.0 7.500
GASN.OEC 12.0 7.500
GASN.SUE 12.0 7.500
GASN.CHN 12.0 7.500
GASN.ROW 15.0 7.500
COLN.USA 51.0 0.2533
COLN.OEC 51.0 0.2533
COLN.SUE 51.0 0.2533
COLN.CHN 51.0 0.2533
COLN.ROW 51.0 0.2533
ADVH.USA 75.0
ADVH.OEC 75.0
ADVH.SUE 75.0
ADVH.CHN 75.0
ADVH.ROW 75.0
ADVL.USA 50.0
ADVL.OEC 50.0
ADVL.SUE 50.0
ADVL.CHN 50.0
ADVL.ROW 50.0 ;
Table GASTECH(GS,R,*) 'gas supply data.'
* COST US $ per MBTU
* CARBON CO2 emission rate (tons per MBTU).
COST CARBON
GASL.USA 1.5 0.01374
GASL.OEC 1.5 0.01374
GASL.SUE 1.5 0.01374
GASL.CHN 1.5 0.01374
GASL.ROW 0.5 0.01374
GASH.USA 5.0 0.01374
GASH.OEC 5.0 0.01374
GASH.SUE 5.0 0.01374
GASH.CHN 5.0 0.01374
GASH.ROW 5.0 0.01374;
Table NETECH(NT,R,*) 'non-electric technology data.'
* COST US $ per MBTU
* CARBON CO2 emission rate (tons per MBTU).
* GAS Natural gas inputs (MBTU per MBTU).
* OILT Oil trade coefficient (MBTU export per unit activity)
COST CARBON GAS OILT
NEBK.USA 16.667
NEBK.OEC 16.667
NEBK.SUE 16.667
NEBK.CHN 16.667
NEBK.ROW 16.667
RNEW.USA 6.000
RNEW.OEC 6.000
RNEW.SUE 6.000
RNEW.CHN 6.000
RNEW.ROW 6.000
SYNF.USA 8.333 0.04
SYNF.OEC 8.333 0.04
SYNF.SUE 8.333 0.04
SYNF.CHN 8.333 0.04
SYNF.ROW 8.333 0.04
CLDU.USA 2.0 0.02412
CLDU.OEC 3.0 0.02412
CLDU.SUE 2.0 0.02412
CLDU.CHN 2.0 0.02412
CLDU.ROW 2.0 0.02412
OILM.USA 0.01994 -1.000
OILM.OEC 0.01994 -1.000
OILM.SUE 0.01994 -1.000
OILM.CHN 0.01994 -1.000
OILM.ROW 0.01994 -1.000
OILX.USA -0.01994 1.000
OILX.OEC -0.01994 1.000
OILX.SUE -0.01994 1.000
OILX.CHN -0.01994 1.000
OILX.ROW -0.01994 1.000
OILL.USA 2.5 0.01994
OILL.OEC 2.5 0.01994
OILL.SUE 2.5 0.01994
OILL.CHN 2.5 0.01994
OILL.ROW 1.0 0.01994
OILH.USA 6.0 0.01994
OILH.OEC 6.0 0.01994
OILH.SUE 6.0 0.01994
OILH.CHN 6.0 0.01994
OILH.ROW 6.0 0.01994
* Note: these costs have been reduced relative to
* the Global 2100 numbers.
GNEL.USA 1.0 1.000
GNEL.OEC 1.0 1.000
GNEL.SUE 1.0 1.000
GNEL.CHN 1.0 1.000
GNEL.ROW 1.0 1.000;
Table ELSUPPLY(ET,R,*) 'electric supplies bounds and elasticities.'
* UBND Upper bound (TKWH).
* LBND Lower bound (TKWH).
* LVL Reference output level for 2020 (TKWH).
* ESUP Elasticity of supply for activities operating in 2020.
UBND LBND LVL ESUP
HYDR.USA 0.190 0.190 0.190
HYDR.OEC 0.835 0.835 0.835
HYDR.SUE 0.213 0.213 0.213
HYDR.CHN 0.099 0.099 0.099
HYDR.ROW 0.452 0.452 0.452
COLR.USA 0.740 0.740 1.000
COLR.OEC 0.458 0.458 1.000
COLR.SUE 0.096 0.096 1.000
COLR.CHN 0.191 0.191 1.000
COLR.ROW 0.430 0.430 1.000
NUCR.USA 0.280 0.280
NUCR.OEC 0.424 0.424
NUCR.SUE 0.157 0.105 1.000
GASN.USA 3.200 0.072 1.000
GASN.OEC 3.200 0.072 1.000
GASN.SUE 3.200 0.289 1.000
GASN.CHN 3.200 0.072 1.000
GASN.ROW 3.200 0.072 1.000
COLN.USA +INF 2.985 1.000
COLN.OEC +INF 2.995 1.000
COLN.SUE +INF 2.102 1.000
COLN.CHN +INF 1.703 1.000
COLN.ROW +INF 4.238 1.000
ADVL.USA 0.1 0.100 1.000
ADVL.OEC 0.2 0.198 1.000
ADVL.SUE 0.1 0.100 1.000
ADVL.CHN 0.1 0.100 1.000
ADVL.ROW 0.1 0.100 1.000
ADVH.USA 0.8
ADVH.OEC 1.5
ADVH.SUE 0.8
ADVH.CHN 0.8
ADVH.ROW 0.8 ;
Table NESUPPLY(NT,R,*) 'non-electric supplies bounds and elasticities.'
* UBND Upper bound (MBTU).
* LBND Lower bound (MBTU).
* LVL Reference output level for 2020 (MBTU).
* ESUP Elasticity of supply for activities operating in 2020.
UBND LBND LVL ESUP
CLDU.USA 2.740 2.740
CLDU.OEC 5.250 5.250
CLDU.SUE 11.440 11.440
CLDU.CHN 17.590 17.590
CLDU.ROW 12.230 12.230
NEBK.USA +INF
NEBK.OEC +INF
NEBK.SUE +INF
NEBK.CHN +INF
NEBK.ROW +INF
RNEW.USA 10.0 10.000
RNEW.OEC 10.0 10.000
RNEW.SUE 10.0 5.254 1.000
RNEW.CHN 10.0 5.293 1.000
RNEW.ROW 10.0 9.695 1.000
SYNF.USA +INF 2.926 1.000
SYNF.OEC +INF 2.617 1.000
SYNF.CHN +INF 0.851 1.000
SYNF.ROW +INF 0.426 1.000
OILM.USA +INF 27.909
OILM.OEC +INF 24.825
OILX.SUE 3.0 3.0
OILX.CHN 0.6 0.6
OILX.ROW +INF 49.134
OILL.USA 8.223 8.223
OILL.OEC 8.295 8.295
OILL.SUE 15.369 15.369
OILL.CHN 5.504 5.504
OILL.ROW 59.465 59.465
OILH.USA +INF 3.027 1.000
OILH.OEC +INF 4.442 1.000
OILH.SUE +INF 1.041 1.000
OILH.CHN +INF 3.588 1.000
OILH.ROW +INF 19.947 1.000
* NB: GNEL NUMBERS ADJUSTED SLIGHTLY TO ACHIEVE GAS MARKET BALANCE:
GNEL.USA +INF 10.720 1.000
GNEL.OEC +INF 17.302 1.000
GNEL.SUE +INF 25.507 1.000
GNEL.CHN +INF 4.026 1.000
GNEL.ROW +INF 37.648 1.000;
Table GASSUPPLY(GS,R,*) 'natural gas supplies bounds and elasticities.'
* UBND Upper bound (MBTU).
* LBND Lower bound (MBTU).
* LVL Reference output level for 2020 (MBTU).
* ESUP Elasticity of supply for activities operating in 2020.
UBND LBND LVL ESUP
GASL.USA 8.148 8.148
GASL.OEC 12.546 12.546
GASL.SUE 27.675 27.675
GASL.CHN 2.441 2.441
GASL.ROW 22.831 22.831
GASH.USA +INF 3.112 1.000
GASH.OEC +INF 5.296 1.000
GASH.CHN +INF 2.125 1.000
GASH.ROW +INF 15.357 1.000;
Set ETACOL / GASOUT, GASINP, NELEOUT, NELEINP, ELECOUT, ELECINP, OILEXP
OILIMP, CARBOUT, CARBINP, YOUT, YINP, KINP /;
Parameter
GDP(R,TP) 'domestic GDP'
GDPGR(R) 'GDP growth factor'
PN(R,TP) 'reference price of non-electric'
PE(R,TP) 'reference price of electric'
PG(R,TP) 'reference price of gas'
PO(R,TP) 'reference price of oil'
QN(R,TP) 'non-electric energy production'
QE(R,TP) 'electric energy production'
BMAM(R) 'basic materials imports (base year)'
ELVS(R) 'electricity value share'
BDRT(R) 'basic materials share of domestic product'
NBSH(R) 'non-electric value share of basic materials'
EBSH(R) 'electric value share of basic materials'
RSHR(R) 'resource share of basic materials (calibrated)'
BDEL(R) 'basic-GDP growth elasticity'
ELEC(ES,R) 'electricity supply'
NELE(ES,R) 'non-electric supply'
GASS(ES,R) 'gas supply'
OILT(ES,R) 'oil trade'
UBND(ES,R) 'energy sector upper bound'
LBND(ES,R) 'energy sector lower bound'
LEVL(ES,R) 'reference activity level'
COST(ES,R) 'domestic inputs to energy production'
CARBON(ES,R) 'carbon coefficient'
ESUP(ES,R) 'elasticity of supply'
QB(R) 'BMAT benchmark quantity'
QG(R) 'BMAT benchmark quantity'
QD(R) 'BMAT benchmark quantity'
PNI(R) 'future price index'
PEI(R) 'future price index'
PGI(R) 'future price index'
PDI(R) 'future price index'
PBI(R) 'future price index'
BMESHR(R,G) 'basic materials share of domestic energy (%)'
GDPSHR(R,G) 'cost shares of GDP (%)'
DOMSHR(R,G) 'cost shares in gross output (%)'
BMMSHR(R) 'basic material import share of consumption (%)'
MX(R,MS,G) 'macro accounts for future year'
ROWSUM(G,R) 'row sum check for macro accounts'
COLSUM(MS,R) 'column sum check for macro accounts'
EX(R,ES,G) 'ETA accounts for future year'
GASBAL(R) 'check of gas market balance'
BMCHK(G) 'check of world market balance'
BMCRTS(R) 'benchmark CRTS'
PCTPFT(ES,R) 'unit profit margin in benchmark'
PROFIT(ES,R) 'adjusted ETA profits'
UNITPROFIT(ES,R) 'adjusted ETA profits per unit activity'
BMPROFIT(ES,R) 'benchmark ETA profits'
NETLOSS(ES,R) 'benchmark loss'
* PARAMETERS USED IN MODEL PRESENTATION:
ESUBB(R) 'energy-other input substitution in B'
ESUBC(R) 'substitution elasticity in Y'
Y0(R) 'non-energy output'
W0(R) 'non-ernery demand'
NY0(R) 'non-electric energy input to Y'
EY0(R) 'electric energy input to Y'
VY0(R) 'value-added input to Y'
BY0(R) 'basic materials input to Y'
B0(R) 'basic materials production'
RB0(R) 'resource inputs to B'
NB0(R) 'non-electric energy input to B'
EB0(R) 'electric energy input to Y'
VB0(R) 'value-added input to Y'
ETA(R,ES,ETACOL) 'energy technology'
CRTS_N(R) 'Carbon rights allocation (non-traded)'
CRTS_T(R) 'Carbon rights allocation (traded)'
VA0(R) 'regional value-added endowment'
EMIT0(*) 'benchmark emissions'
CO2EMIT(*) 'CO2 emissions'
RESULTS 'results summary';
Scalar
NYR 'number of years projected'
OILBAL 'check of world oil market balance'
BMATBAL 'check of basic materials trade balance'
BMATFAC 'BMAT growth factor'
BEPS 'epsilon for diagnosing bounds' / 1.E-5 /
ALPHA 'calibrated DOME value share';
Set LVL 'emission levels' / L1*L6 /;
Parameter CO2LEVEL(LVL) 'CO2 abatement levels'
/ L1 1.2, L2 1.1, L3 1.0, L4 0.9, L5 0.8, L6 0.7 /;
Table CARBLIM(R,*) 'Carbon emissions limits and CRTS trade flag.'
LEVEL TRADE
USA 1.144 0
OEC 1.100 0
SUE 0.844 0
CHN 0.962 0
ROW 2.253 0;
Table BMATPROD(R,*) 'basic materials production data.'
* NBSH Non-electric share of basic materials cost.
* EBSH Electric share of basic materials cost.
* BDRT Basic-GDP ratio.
* BDEL Basic materials : GDP growth elasticity.
NBSH EBSH BDRT BDEL
USA 0.070 0.070 0.125 0.6
OEC 0.070 0.070 0.125 0.6
SUE 0.070 0.070 0.200 0.8
CHN 0.070 0.070 0.200 0.8
ROW 0.070 0.070 0.125 0.8;
Table ELAST(R,*) 'elasticities of substitution and supply'
* ESUBC Elasticity of substitution in non-basic production.
* ESUBB Elasticity of substitution in basic materials production.
* ELEC Elasticity of supply for operating electric technologies.
* NELE Elasticity of supply for operating non-electric technologies.
* GAS Elasticity of supply for operating gas technologies.
* BMAT Elasticity of supply for basic materials.
ESUBC ESUBB ELEC NELE GAS BMAT
USA 0.5 0.3 1.0 1.0 1.0 1.0
OEC 0.5 0.3 1.0 1.0 1.0 1.0
SUE 0.25 0.3 1.0 1.0 1.0 1.0
CHN 0.25 0.3 1.0 1.0 1.0 1.0
ROW 0.25 0.3 1.0 1.0 1.0 1.0;
* VERIFY THAT EXACTLY ONE COUNTERFACTUAL SCENARIO HAS BEEN SELECTED:
abort$(sum(SCENARIOS$SC(SCENARIOS), 1) <> 1) " A SINGLE SCENARIO NOT SELECTED";
if(SC("BENCH"),
$sTitle: Carbon-related Trade Model - Benchmark Replication
CARBLIM(R,"LEVEL") = +inf;
CO2LEVEL(LVL)$(ord(LVL) > 1) = 0;
);
if(SC("OECD-L"),
$sTitle: Carbon-related Trade Model - OECD Abatement with high Leakage
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
CARBLIM(OECD,"TRADE") = 1;
ELAST(R,"BMAT") = 4;
ELAST(R,"ESUBC") = 2*ELAST(R,"ESUBC");
ELAST(R,"ESUBB") = 2*ELAST(R,"ESUBB");
);
if(SC("GLOBAL-E"),
$sTitle: Carbon-related Trade Model - Global Abatement with low Elasticity
CARBLIM(R,"TRADE") = 1;
ELAST(R,"ESUBC") = 0.5*ELAST(R,"ESUBC");
ELAST(R,"ESUBB") = 0.5*ELAST(R,"ESUBB");
);
if(SC("GLOBAL-T"),
$sTitle: Carbon-related Trade Model - Global Abatement with Trade in CRTS
CARBLIM(R,"TRADE") = 1;
);
if(SC("GLOBAL"),
$sTitle: Carbon-related Trade Model - Global Abatement with no Trade in CRTS
);
if(SC("OECD-B"),
$sTitle: Carbon-related Trade Model - OECD Abatement with high BMAT Elasticity
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
CARBLIM(OECD,"TRADE") = 1;
ELAST(R,"BMAT") = 4;
);
if(SC("OECD-E"),
$sTitle: Carbon-related Trade Model - OECD Abatement with low Elasticities
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
CARBLIM(OECD,"TRADE") = 1;
ELAST(R,"ESUBC") = 0.5*ELAST(R,"ESUBC");
ELAST(R,"ESUBB") = 0.5*ELAST(R,"ESUBB");
);
if(SC("OECD-L"),
$sTitle: Carbon-related Trade Model - OECD Abatement with high Leakage
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
CARBLIM(OECD,"TRADE") = 1;
ELAST(R,"BMAT") = 4;
ELAST(R,"ESUBC") = 2*ELAST(R,"ESUBC");
ELAST(R,"ESUBB") = 2*ELAST(R,"ESUBB");
);
if(SC("OECD-T"),
$sTitle: Carbon-related Trade Model - OECD Abatement with Trade
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
CARBLIM(OECD,"TRADE") = 1;
);
if(SC("OECD"),
$sTitle: Carbon-related Trade Model - OECD Abatement with no Trade in CRTS
CARBLIM(R,"LEVEL")$(not OECD(R)) = +inf;
);
* BENCHMARKING BEGINS HERE:
* ========================
NYR = FYR - BYR;
GDP(R,"BASE") = BYD(R,"GDP");
PN(R,"BASE") = BYD(R,"PN");
QN(R,"BASE") = BYD(R,"QN");
QE(R,"BASE") = BYD(R,"QE");
ELVS(R) = BYD(R,"ELVS");
BMAM(R) = 0.001*BYD(R,"BMAM");
BDRT(R) = BMATPROD(R,"BDRT");
NBSH(R) = BMATPROD(R,"NBSH");
EBSH(R) = BMATPROD(R,"EBSH");
BDEL(R) = BMATPROD(R,"BDEL");
GDP(R,"FUTURE") = FYD(R,"GDP");
PN(R, "FUTURE") = FYD(R,"PN");
PE(R, "FUTURE") = FYD(R,"PE");
PG(R, "FUTURE") = FYD(R,"PG");
PO(R, "FUTURE") = FYD(R,"PO");
ELEC(ET,R) = 1;
NELE(NT,R) = 1;
NELE(OILX,R) = -1;
GASS(GS,R) = 1;
GASS(ET,R) = -ELTECH(ET,R,"GAS");
GASS(NT,R) = -NETECH(NT,R,"GAS");
COST(ET,R) = ELTECH(ET,R,"COST");
COST(NT,R) = NETECH(NT,R,"COST");
COST(GS,R) = GASTECH(GS,R,"COST");
CARBON(ET,R) = ELTECH(ET,R,"CARBON");
CARBON(NT,R) = NETECH(NT,R,"CARBON");
CARBON(GS,R) = GASTECH(GS,R,"CARBON");
OILT(NT,R) = NETECH(NT,R,"OILT");
UBND(ET,R) = ELSUPPLY(ET,R,"UBND");
LBND(ET,R) = ELSUPPLY(ET,R,"LBND");
LEVL(ET,R) = ELSUPPLY(ET,R,"LVL");
ESUP(ET,R) = ELSUPPLY(ET,R,"ESUP")*ELAST(R,"ELEC");
UBND(NT,R) = NESUPPLY(NT,R,"UBND");
LBND(NT,R) = NESUPPLY(NT,R,"LBND");
LEVL(NT,R) = NESUPPLY(NT,R,"LVL");
ESUP(NT,R) = NESUPPLY(NT,R,"ESUP")*ELAST(R,"NELE");
UBND(GS,R) = GASSUPPLY(GS,R,"UBND");
LBND(GS,R) = GASSUPPLY(GS,R,"LBND");
LEVL(GS,R) = GASSUPPLY(GS,R,"LVL");
ESUP(GS,R) = GASSUPPLY(GS,R,"ESUP")*ELAST(R,"GAS");
* Benchmark calculations for the Carbon Trade model.
* Check ETA data consistency:
abort$(smax((ES,R), LBND(ES,R) - UBND(ES,R)) > 0)
" *** ERROR: ETA SUPPLY LOWER BOUND EXCEEDS UPPER BOUND";
abort$(smax((ES,R), LEVL(ES,R) - UBND(ES,R)) > 0)
" *** ERROR: ETA BENCHMARK SUPPLY EXCEEDS UPPER BOUND";
abort$(smax((ES,R), LBND(ES,R)- LEVL(ES,R)) > 0)
" *** ERROR: ETA BENCHMARK SUPPLY VIOLATES LOWER BOUND";
BMATBAL = sum(R, BMAM(R));
abort$(abs(BMATBAL) > 0.01) " Imbalance in BMAT trade data.", BMAM, BMATBAL;
GASBAL(R) = sum(ES, GASS(ES,R)*LEVL(ES,R));
abort$(smax(R, abs(GASBAL(R))) > 0.01) " Gas supply - demand imbalance.", GASBAL;
OILBAL = sum((R,ES), OILT(ES,R)*LEVL(ES,R));
abort$(OILBAL > 0.01) " International oil market imbalance.", OILBAL;
* DATA ADJUSTMENTS:
* Impose balance in basic materials trade:
loop(R$(ord(R) = 1), BMAM(R) = BMAM(R) - BMATBAL;);
* Check gas supply-demand balances and adjust GNEL accordingly:
LEVL("GNEL",R) = LEVL("GNEL",R) - GASBAL(R)/LEVL("GNEL",R);
* Assign oil trade discrepency to first region:
loop(R$(ord(R) = card(R)),
LEVL("OILX",R) = LEVL("OILX",R) - OILBAL/LEVL("OILX",R);
UBND("OILX",R) = min( UBND("OILX",R), LEVL("OILX",R));
);
* ETA CALIBRATION AND BENCHMARK:
* Initialize the ETA SAM:
EX(R,ES,G) = 0;
* Pull out coefficients (value):
EX(R,ES,"NELE") = PN(R,"FUTURE")*NELE(ES,R)/1000;
EX(R,ES,"ELEC") = PE(R,"FUTURE")*ELEC(ES,R)/1000;
EX(R,ES,"GASS") = PG(R,"FUTURE")*GASS(ES,R)/1000;
EX(R,ES,"OILT") = PO(R,"FUTURE")*OILT(ES,R)/1000;
EX(R,ES,"DOME") = -COST(ES,R)/1000;
* Compute benchmark profit (per unit activity):
BMPROFIT(ES,R) = sum(G, EX(R,ES,G));
NETLOSS(ES,R) = min(LEVL(ES,R)*(BMPROFIT(ES,R) - EX(R,ES,"DOME")), 0);
abort$(smin((ES,R), NETLOSS(ES,R)) < 0)
" --- BENCHMARK PROFIT INCONSISTENCY", BMPROFIT, NETLOSS, COST, EX;
* Define arrays which indicate the benchmark state of ETA activities:
FIXED(ES,R) = yes$(UBND(ES,R) < LBND(ES,R) + BEPS);
LEVL(ES,R)$FIXED(ES,R) = LBND(ES,R);
UBND(ES,R)$FIXED(ES,R) = LBND(ES,R);
UPPER(ES,R)$(not FIXED(ES,R)) = yes$(LEVL(ES,R) > UBND(ES,R) - BEPS);
LOWER(ES,R)$(not FIXED(ES,R)) = yes$(LEVL(ES,R) < LBND(ES,R) + BEPS);
BASIC(ES,R) = yes$(not (FIXED(ES,R) + UPPER(ES,R) + LOWER(ES,R)));
* Check that activities at bounds have appropriate profits:
abort$(smin((ES,R)$UPPER(ES,R), BMPROFIT(ES,R)) < 0)
" Upper bounded activity makes negative profit:", BMPROFIT, UPPER;
abort$(smax((ES,R)$LOWER(ES,R), BMPROFIT(ES,R)) > 0)
" Lower bounded activity makes positive profit:", BMPROFIT, LOWER;
* Calibrate the supply functions:
loop((ES,R)$FIXED(ES,R),
EX(R,ES,"KSPC") = 0;
EX(R,ES,"UBND") = -BMPROFIT(ES,R);
EX(R,ES,"LBND") = 0;
);
loop((ES,R)$(not FIXED(ES,R)),
if(BASIC(ES,R),
ALPHA = ESUP(ES,R)/(1 + ESUP(ES,R));
EX(R,ES,"KSPC") = (-BMPROFIT(ES,R) + EX(R,ES,"DOME"))*(1 - ALPHA);
EX(R,ES,"DOME") = ALPHA*EX(R,ES,"KSPC")/(1 - ALPHA);
EX(R,ES,"UBND") = 0;
EX(R,ES,"LBND") = 0;
else
if(ESUP(ES,R)*LEVL(ES,R) > 0,
ALPHA = ESUP(ES,R)/(1 + ESUP(ES,R));
EX(R,ES,"KSPC") = (-BMPROFIT(ES,R) + EX(R,ES,"DOME"))*(1 - ALPHA);
EX(R,ES,"DOME") = ALPHA*EX(R,ES,"KSPC")/(1 - ALPHA);
EX(R,ES,"UBND") = 0;
EX(R,ES,"LBND") = 0;
else
EX(R,ES,"KSPC") = 0;
EX(R,ES,"UBND")$UPPER(ES,R) = -BMPROFIT(ES,R);
EX(R,ES,"LBND")$LOWER(ES,R) = BMPROFIT(ES,R);
);
);
);
UNITPROFIT(ES,R)$(not FIXED(ES,R)) = sum(G, EX(R,ES,G));
PROFIT(ES,R) $(not FIXED(ES,R)) = LEVL(ES,R)*sum(G, EX(R,ES,G));
display BMPROFIT, PROFIT, UNITPROFIT, EX, FIXED, BASIC, UPPER, LOWER;
* Redefine the UPPER and LOWER indicator arrays to include
* bounds which are inactive in the benchmark:
loop((ES,R)$LBND(ES,R), LOWER(ES,R)$(BASIC(ES,R) + UPPER(ES,R)) = yes;);
loop((ES,R)$(UBND(ES,R) < inf), UPPER(ES,R)$(BASIC(ES,R) + LOWER(ES,R)) = yes;);
UPPER(ES,R)$FIXED(ES,R) = no;
LOWER(ES,R)$FIXED(ES,R) = no;
LOWER(ES,R)$(LBND(ES,R) = 0) = no;
* MACRO CALIBRATION AND BENCHMARK:
* Initialize the MACRO SAM:
MX(R,MS,G) = 0;
* Incorporate row representing ETA commodity inputs:
MX(R,"ETAG",G) = sum(ES, EX(R,ES,G)*LEVL(ES,R));
* Trade balance
* Oil trade:
MX(R,"IMEX","OILT") = -MX(R,"ETAG","OILT");
* Compute BMAT 1990=2020 trade index:
GDPGR(R) = (GDP(R,"FUTURE")/GDP(R,"BASE"))**(1.0/NYR) - 1;
* BMAT growth factor based on geometric mean:
BMATFAC = prod(R, (1 + GDPGR(R)*BDEL(R))**NYR)**(1/card(R));
* BMAT trade extrapolated using growth factor:
MX(R,"IMEX","BSMA") = BMAM(R)*BMATFAC;
* Non-basic trade:
MX(R,"IMEX","DOME") = -sum(G, MX(R,"IMEX",G));
* Infer RSHR(R) from the supply elasticity:
RSHR(R) = 1/(1 + ELAST(R,"BMAT"));
* 2020 B quantity:
QB(R) = BDRT(R)*GDP(R,"BASE")*(1 + BDEL(R)*GDPGR(R))**NYR;
QD(R) = QB(R)*(1 - RSHR(R) - EBSH(R) - NBSH(R));
* B production: conditional demands and output (values at 2020 prices)
MX(R,"SBSM","RESR") = - QB(R)*RSHR(R);
MX(R,"SBSM","NELE") = - QB(R)*NBSH(R);
MX(R,"SBSM","ELEC") = - QB(R)*EBSH(R);
MX(R,"SBSM","KLVA") = - QD(R);
* Total B production:
MX(R,"SBSM","BSMA") = - sum(G, MX(R,"SBSM",G));
* Energy inputs to macro production: values are computed as
* residual, the difference between supply and B sector inputs.
MX(R,"SDMI",BE) = - MX(R,"ETAG",BE) - MX(R,"SBSM",BE);
* NB: GDP defined as consumption plus investment, which is then
* equal to K-L value added plus net value of capacity constraints,
* KLVA = GDP - net value of capacity constraints.
MX(R,"SDMI","KLVA") = - (GDP(R,"FUTURE") + QD(R) + MX(R,"ETAG","UBND") - MX(R,"ETAG","LBND"));
MX(R,"SDMI","BSMA") = - (MX(R,"SBSM","BSMA") + MX(R,"IMEX","BSMA"));
abort$(smax(R, MX(R,"SDMI","BSMA")) > 0) " NEGATIVE INPUTS OF BMAT.", MX;
* Total DOMI production:
MX(R,"SDMI","DOMI") = -sum(G, MX(R,"SDMI",G));
* DOME:
MX(R,"SDOM","DOMI") = -MX(R,"SDMI","DOMI");
* Domestic non-basic production:
MX(R,"SDOM","DOME") = -sum(G, MX(R,"SDOM",G));
* Consumer:
MX(R,"CONS","RESR") = -MX(R,"SBSM","RESR");
MX(R,"CONS","KLVA") = -MX(R,"SDMI","KLVA") - MX(R,"SBSM","KLVA");
MX(R,"CONS","UBND") = -MX(R,"ETAG","UBND");
MX(R,"CONS","LBND") = -MX(R,"ETAG","LBND");
MX(R,"CONS","KSPC") = -MX(R,"ETAG","KSPC");
MX(R,"CONS","DOME") = -sum(MS, MX(R,MS,"DOME"));
* Install carbon emissions coefficient (price=0 in benchmark)
* and define carbon rights for the benchmark:
EX(R,ES,"CRTS") = -CARBON(ES,R);
BMCRTS(R) = -sum(ES, EX(R,ES,"CRTS")*LEVL(ES,R));
BMCHK(G) = sum(R, MX(R,"IMEX", G));
* Basic materials share of energy inputs:
BMESHR(R,BE) = -100*MX(R,"SBSM",BE)/MX(R,"ETAG",BE);
GDPSHR(R,BE) = 100*MX(R,"ETAG",BE)/GDP(R,"FUTURE");
DOMSHR(R,G) = -100*MX(R,"SDMI",G)/MX(R,"SDOM","DOME");
DOMSHR(R,"DOMI") = 0;
BMMSHR(R) = -MX(R,"IMEX","BSMA")/MX(R,"SDMI","BSMA");
* Trap benchmark errors:
abort$(smax((R,BE), MX(R,"SDMI",BE)) > 0) "*** Negative ELEC or NELE inputs to SDMI.";
ROWSUM(G, R) = sum(MS, MX(R,MS,G));
COLSUM(MS,R) = sum(G, MX(R,MS,G));
display BMCRTS, BMCHK, BMESHR, GDPSHR, DOMSHR, BMMSHR, ROWSUM, COLSUM;
* Extract elasticities:
ESUBC(R) = ELAST(R,"ESUBC");
ESUBB(R) = ELAST(R,"ESUBB");
* EXTRACT DATA FROM THE BENCHMARK
W0(R) = -MX(R,"CONS","DOME");
Y0(R) = MX(R,"SDOM","DOME");
NY0(R) = -MX(R,"SDMI","NELE");
EY0(R) = -MX(R,"SDMI","ELEC");
VY0(R) = -MX(R,"SDMI","KLVA");
BY0(R) = -MX(R,"SDMI","BSMA");
B0(R) = MX(R,"SBSM","BSMA");
RB0(R) = -MX(R,"SBSM","RESR");
NB0(R) = -MX(R,"SBSM","NELE");
EB0(R) = -MX(R,"SBSM","ELEC");
VB0(R) = -MX(R,"SBSM","KLVA");
VA0(R) = VY0(R) + VB0(R);
EMIT0(R) = -sum(ES, LEVL(ES,R)*EX(R,ES,"CRTS"));
EMIT0("TOTAL") = sum(R, EMIT0(R));
ETA(R,ES,"GASOUT") = max( EX(R,ES,"GASS"), 0);
ETA(R,ES,"GASINP") = max(-EX(R,ES,"GASS"), 0);
ETA(R,ES,"NELEOUT") = max( EX(R,ES,"NELE"), 0);
ETA(R,ES,"NELEINP") = max(-EX(R,ES,"NELE"), 0);
ETA(R,ES,"ELECOUT") = max( EX(R,ES,"ELEC"), 0);
ETA(R,ES,"ELECINP") = max(-EX(R,ES,"ELEC"), 0);
ETA(R,ES,"OILEXP") = max( EX(R,ES,"OILT"), 0);
ETA(R,ES,"OILIMP") = max(-EX(R,ES,"OILT"), 0);
ETA(R,ES,"CARBOUT") = max( EX(R,ES,"CRTS"), 0);
ETA(R,ES,"CARBINP") = max(-EX(R,ES,"CRTS"), 0);
ETA(R,ES,"YOUT") = max( EX(R,ES,"DOME"), 0);
ETA(R,ES,"YINP") = max(-EX(R,ES,"DOME"), 0);
ETA(R,ES,"KINP") = max(-EX(R,ES,"KSPC"), 0);
$onText
$MODEL:CRTM_S
$SECTORS:
Y(R) ! OTHER OUTPUT
B(R) ! BASIC MATERIALS OUTPUT
E(ES,R)$(not FIXED(ES,R)) ! ENERGY SECTOR OUTPUT
$COMMODITIES:
PWY ! OTHER OUTPUT PRICE
PWB ! WORLD PRICE OF BASIC MATERIALS
PWOIL ! WORLD PRICE OF OIL
PGAS(R) ! REGIONAL PRICE OF GAS
PELEC(R) ! REGIONAL ELECTRIC PRICE
PNELE(R) ! REGIONAL NON-ELECTRIC PRICE
PVA(R) ! REGIONAL PRICE OF VALUE-ADDED
PBR(R) ! REGIONAL PRICE OF BASIC MATERIALS RESOURCE
PU(ES,R)$UPPER(ES,R) ! ENERGY SUPPLY UPPER BOUND
PL(ES,R)$LOWER(ES,R) ! ENERGY SUPPLY LOWER BOUND
PK(ES,R)$ETA(R,ES,"KINP") ! ENERGY SUPPLY SPECIFIC FACTOR
PWC$(smax(R,CRTS_T(R))) ! WORLD PRICE OF CARBON RIGHTS
PC(R)$CRTS_N(R) ! REGIONAL CARBON EMISSION PRICE
$CONSUMERS:
RA(R) ! REPRESENTATIVE AGENT
* Generate report variables for inputs and demands:
$REPORT:
V:W(R) D:PWY DEMAND:RA(R)
V:BC(R) I:PWB PROD:Y(R)
V:EY(R) I:PELEC(R) PROD:Y(R)
V:NY(R) I:PNELE(R) PROD:Y(R)
V:EB(R) I:PELEC(R) PROD:B(R)
V:NB(R) I:PNELE(R) PROD:B(R)
* Non-basic production:
$PROD:Y(R) s:ESUBC(R) a:1
O:PWY Q:Y0(R)
I:PNELE(R) Q:NY0(R) a:
I:PELEC(R) Q:EY0(R) a:
I:PVA(R) Q:VY0(R)
I:PWB Q:BY0(R)
* Basic materials production:
$PROD:B(R) s:1 a:ESUBB(R) b(a):1
O:PWB Q:B0(R)
I:PBR(R) Q:RB0(R)
I:PNELE(R) Q:NB0(R) b:
I:PELEC(R) Q:EB0(R) b:
I:PVA(R) Q:VB0(R) a:
* Energy activities:
$PROD:E(ES,R)$(not FIXED(ES,R)) s:0 a:1
* Energy inputs and outputs:
O:PGAS(R) Q:ETA(R,ES,"GASOUT")
O:PNELE(R) Q:ETA(R,ES,"NELEOUT")
O:PELEC(R) Q:ETA(R,ES,"ELECOUT")
I:PGAS(R) Q:ETA(R,ES,"GASINP")
I:PNELE(R) Q:ETA(R,ES,"NELEINP")
I:PELEC(R) Q:ETA(R,ES,"ELECINP")
O:PWOIL Q:ETA(R,ES,"OILEXP")
I:PWOIL Q:ETA(R,ES,"OILIMP")
* Carbon requirements (international and domestic):
O:PC(R)$CRTS_N(R) Q:ETA(R,ES,"CARBOUT")
I:PC(R)$CRTS_N(R) Q:ETA(R,ES,"CARBINP")
O:PWC$CRTS_T(R) Q:ETA(R,ES,"CARBOUT")
I:PWC$CRTS_T(R) Q:ETA(R,ES,"CARBINP")
* Upper and lower bounds:
I:PU(ES,R)$UPPER(ES,R) Q:1
O:PL(ES,R)$LOWER(ES,R) Q:1
* Other inputs:
O:PWY Q:ETA(R,ES,"YOUT")
I:PWY Q:ETA(R,ES,"YINP") a:$ETA(R,ES,"KINP")
I:PK(ES,R) Q:ETA(R,ES,"KINP") a:$ETA(R,ES,"YINP")
$DEMAND:RA(R)
* All regions consume the non-energy good:
D:PWY Q:W0(R)
* Value-added endowment:
E:PVA(R) Q:VA0(R)
* Basic materials resource endowment:
E:PBR(R) Q:RB0(R)
* Upper and lower bounds on energy sector activities:
E:PU(ES,R)$UPPER(ES,R) Q:UBND(ES,R)
E:PL(ES,R)$LOWER(ES,R) Q:(-LBND(ES,R))
* Specific capital:
E:PK(ES,R) Q:(ETA(R,ES,"KINP")*LEVL(ES,R))
* Carbon emission rights:
E:PWC Q:CRTS_T(R)
E:PC(R) Q:CRTS_N(R)
* Fixed ETA activities:
E:PGAS(R) Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"GASOUT")))
E:PNELE(R) Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"NELEOUT")))
E:PELEC(R) Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"ELECOUT")))
E:PGAS(R) Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"GASINP")))
E:PNELE(R) Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"NELEINP")))
E:PELEC(R) Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"ELECINP")))
E:PWOIL Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"OILEXP")))
E:PWOIL Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"OILIMP")))
E:PC(R)$CRTS_N(R) Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"CARBOUT")))
E:PC(R)$CRTS_N(R) Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"CARBINP")))
E:PWC$CRTS_T(R) Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"CARBOUT")))
E:PWC$CRTS_T(R) Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"CARBINP")))
E:PWY Q:(sum(ES$FIXED(ES,R), LEVL(ES,R)*ETA(R,ES,"YOUT")))
E:PWY Q:(sum(ES$FIXED(ES,R), -LEVL(ES,R)*ETA(R,ES,"YINP")))
$offText
$sysInclude mpsgeset CRTM_S
E.l(ES,R) = LEVL(ES,R);
PU.l(ES,R) = -EX(R,ES,"UBND");
PL.l(ES,R) = -EX(R,ES,"LBND");
* CHECK BENCHMARK WITH NO CARBON RESTRICTIONS:
CRTS_N(R) = 0;
CRTS_T(R) = 0;
CRTM_S.iterLim = 0;
$include CRTM_S.GEN
solve CRTM_S using mcp;
* LOOP OVER CO2 LEVELS:
loop(LVL$CO2LEVEL(LVL),
* SET THE LEVEL OF EMISSIONS:
CRTS_N(R) = 0;
CRTS_T(R) = 0;
loop(R$(CARBLIM(R,"LEVEL") < inf),
if(CARBLIM(R,"TRADE"), CRTS_T(R) = CARBLIM(R,"LEVEL")*CO2LEVEL(LVL);
else CRTS_N(R) = CARBLIM(R,"LEVEL")*CO2LEVEL(LVL););
);
* DEFINE A NUMERAIRE:
PWY.fx = 1;
* GENERATE AND SOLVE:
CRTM_S.iterLim = 2000;
$ include CRTM_S.GEN
solve CRTM_S using mcp;
* EXTRACT THE SOLUTION VALUES:
RESULTS("CPU","--",LVL) = CRTM_S.resUsd;
RESULTS("CONTOL","--",LVL) = CRTM_S.objVal;
RESULTS("NITER","--",LVL) = CRTM_S.iterUsd;
CO2EMIT(R) = -sum(ES, EX(R,ES,"CRTS")*E.l(ES,R));
CO2EMIT("TOTAL") = sum(R, CO2EMIT(R));
RESULTS("CO2EXP",R,LVL) = ((CO2EMIT(R) - CRTS_T(R))*PWC.l*1000)$CRTS_T(R);
RESULTS("CO2PCT",R,LVL) = 100*(CO2EMIT(R) - EMIT0(R))/EMIT0(R);
RESULTS("CO2PCT","TOTAL",LVL) = 100*(CO2EMIT("TOTAL") - EMIT0("TOTAL"))/EMIT0("TOTAL");
RESULTS("CO2TAX",R,LVL) = 1000*(PC.l(R)$CRTS_N(R) + PWC.l$CRTS_T(R));
RESULTS("LEAKAGE","--",LVL) = 0;
RESULTS("LEAKAGE","--",LVL)$sum(R$(CARBLIM(R,"LEVEL") < inf), EMIT0(R) - CO2EMIT(R))
= 100*(1 - (EMIT0("TOTAL") - CO2EMIT("TOTAL"))
/ sum(R$(CARBLIM(R,"LEVEL") < inf), EMIT0(R) - CO2EMIT(R)));
RESULTS("BMATOUTP",R,LVL) = 100*(B.l(R) - 1);
RESULTS("POIL",R,LVL) = PNELE.l(R)*PO(R,"FUTURE");
RESULTS("POIL","WORLD",LVL) = PWOIL.l*PO("USA","FUTURE");
RESULTS("EV",R,LVL) = 100*(W.l(R) - W0(R))/W0(R);
);
option RESULTS:1:2:1;
display RESULTS;
$onText
* THE FOLLOWING CODE IS NOT USED FOR THE GAMS LIBRARY VERSION
* APPEND THE SOLUTION TO THE REPORT FILE:
File REP / crtm-s.rep /;
* APPEND TO THIS FILE:
REP.AP = 1;
* SCIENTIFIC FORMAT WITH 17 COLUMN NUMBERS, 8 DECIMALS
REP.NR = 2;
REP.NW = 17;
REP.ND = 8;
* NO PADDING ON LABELS:
REP.LW = 0;
put REP;
* DUMP RESULTS FOR AGGREGATION IN THE REPORT PROGRAM:
loop((SC,LVL)$CO2LEVEL(LVL),
put SC.TL'.CONTOL.TOTAL.', LVL.TL, @32, RESULTS("CONTOL","--",LVL)/;
put SC.TL '.NITER.TOTAL.', LVL.TL, @32, RESULTS("NITER","--",LVL)/;
put SC.TL,'.CPU.TOTAL.' , LVL.TL, @32, RESULTS("CPU","--",LVL) /;
put SC.TL,'.CO2PCT.TOTAL.', LVL.TL, @32, RESULTS("CO2PCT","TOTAL",LVL)/;
put SC.TL,'.LEAKAGE.TOTAL.',LVL.TL, @32, RESULTS("LEAKAGE","--",LVL)/;
put SC.TL,'.POIL.WORLD.', LVL.TL, @32, RESULTS("POIL","WORLD",LVL)/;
loop(R,
put SC.TL,'.CO2EXP.',R.TL,'.', LVL.TL, @32, RESULTS("CO2EXP",R,LVL)/;
put SC.TL,'.CO2PCT.',R.TL,'.', LVL.TL, @32, RESULTS("CO2PCT",R,LVL)/;
put SC.TL,'.CO2TAX.',R.TL,'.', LVL.TL, @32, RESULTS("CO2TAX",R,LVL)/;
put SC.TL,'.BMATOUTP.'R.TL,'.',LVL.TL, @32, RESULTS("BMATOUTP",R,LVL)/;
put SC.TL,'.POIL.',R.TL,'.', LVL.TL, @32, RESULTS("POIL",R,LVL)/;
);
);
$offText