Description
This model focuses on the long-term trends in investment, production and trade patterns in the world aluminum industry.
Large Model of Type : MIP
Category : GAMS Model library
Main file : alum.gms
$title World Aluminum Model (ALUM,SEQ=31)
$sTitle Introduction
$onText
This model focuses on the long-term trends in investment, production
and trade patterns in the world aluminum industry.
Brown, M, Dammert, A, Meeraus, A, and Stoutjesdijk, A, Worldwide
Investment Analysis - The Case of Aluminum. Tech. rep., The World
Bank, 1983.
Model Structure:
Section 1: General set definitions
Section 2: Demand characteristics for primary aluminum
Section 3: Mine data
Section 4: Technology
Section 5: Capacities and deposits
Section 6: Infrastructure and investment costs
Section 7: Operating costs
Section 8: Transport description
Section 9: Prices, tariffs and levies
Section 10: Model reduction
Section 11: Cost calculations on data
Section 12: Data checks
Section 13: Model specification
Section 14: Scenario
Section 15: Report
In sections 2 through 8, set and parameter declarations are made
made first, followed by data, and finally structural link checks.
Throughout the model TONS means Metric Tons. And TPY = Tons per year.
Keywords: mixed integer linear programming, investment trends, aluminum industry,
international trade
$offText
$eolCom //
* the following set called print order is used only to determine the
* display features of the report section.
Set po 'print order' / usa , western-us, eastern-us, west-can
east-can , wn-america, en-america, n-america
w-europe , west-eur , japan , japan+oc
n-austral , w-austral , oceania , oecd
c-amer+car, jamaica , jamaica1 , jamaica2
haiti+dr , guyana , surinam , brazil
venezuela , argentina , ws-america, es-america
s-amer+car, ghana , ayek-guin , fria-guin
toug-guin , s-leone , camer+oa , n-africa
rest-guin , zaire , rest-afric, s-africa
w-africa , e-africa , africa , india
indonesia , china , o-asia , asean
korea+oea , mid-east , rest-asia , asia-x
ldcs , ee+ussr , e-europe , asian-ussr /;
$sTitle General Set Definitions
Set
i 'mining regions'
/ usa , w-europe , n-austral, w-austral, jamaica1 , jamaica2
haiti+dr , guyana , surinam , brazil , venezuela, ghana
ayek-guin, fria-guin, toug-guin, s-leone , camer+oa , india
indonesia, china , o-asia , ee+ussr /
r 'producing regions'
/ western-us, eastern-us, west-can , east-can , w-europe
japan , w-austral , oceania , c-amer+car, jamaica
guyana , surinam , brazil , venezuela , argentina
ghana , ayek-guin , n-africa , rest-guin , zaire
rest-afric, s-africa , india , china , asean
korea+oea , mid-east , rest-asia, e-europe , asian-ussr /
j 'marketing areas'
/ wn-america, en-america, w-europe , japan , oceania , c-amer+car
ws-america, es-america, n-africa , s-africa, w-africa , e-africa
china , asean , korea+oea, mid-east, rest-asia, ee+ussr /
g 'seven region groupings'
/ n-america, west-eur, japan+oc, s-amer+car, africa, asia-x, ee+ussr /
f 'three way grouping'
/ oecd, ldcs, ee+ussr /
gi(g,i) 'map of seven regional groups to mines'
/ n-america.usa
west-eur.w-europe
japan+oc.(n-austral,w-austral)
s-amer+car.(jamaica1,jamaica2,haiti+dr,guyana,surinam,brazil,venezuela)
africa.(ghana,ayek-guin,fria-guin,toug-guin,s-leone,camer+oa)
asia-x.(india,indonesia,china,o-asia), ee+ussr.ee+ussr /
gr(g,r) 'map of seven regional groups to refineries and smelters'
/ n-america.(western-us,eastern-us,west-can,east-can)
west-eur.w-europe
japan+oc.(w-austral,oceania,japan)
s-amer+car.(guyana,surinam,brazil,venezuela,jamaica,c-amer+car,argentina)
africa.(ghana,ayek-guin,n-africa,rest-guin,zaire,rest-afric,s-africa)
asia-x.(india,china,asean,korea+oea,rest-asia,mid-east)
ee+ussr.(e-europe,asian-ussr) /
gj(g,j) 'map of seven regional groups to markets'
/ n-america.(wn-america,en-america)
west-eur.w-europe
japan+oc.(oceania,japan)
s-amer+car.(c-amer+car,ws-america,es-america)
africa.(n-africa,s-africa,w-africa,e-africa)
asia-x.(china,asean,korea+oea,rest-asia,mid-east)
ee+ussr.(ee+ussr) /
fg(f,g) 'map of seven regional groups to three way grouping'
/ oecd.(n-america,west-eur, japan+oc)
ldcs.(s-amer+car, africa, asia-x)
ee+ussr.ee+ussr /
fr(f,r) 'map of producing regions to three way grouping'
fi(f,i) 'map of mining regions to three way grouping'
fj(f,j) 'map of markets to three way grouping'
c 'commodities'
/ tri-201 'trihydrate ba 2:1 si 4%'
tri-221 'trihydrate ba 2.2:1 si 3%'
tri-241 'trihydrate ba 2.4:1 si 3%'
tri-341 'trihydrate ba 3.4:1 si 1.5%'
tri-mo-271 'mixed ba 2.7:1 si 1.5%'
tri-mo-221 'mixed ba 2.2:1 si 4%'
mono 'monohydrate bauxite'
highsi 'high silica bauxite'
alumina
aluminum
electr 'electricity' /
cf(c) 'final products' / aluminum /
ci(c) 'intermediates' / alumina /
cl(c) 'electricity' / electr /
cm(c) 'bauxites'
/ tri-201, tri-221, tri-241, tri-341, tri-mo-271, tri-mo-221, mono, highsi /
cmi 'miscellaneous inputs'
/ labor 'man-hours per ton'
energy 'million btu per ton'
soda-ash 'tons per ton'
lime 'tons per ton'
fuel-lub 'million btu per ton'
therm-egy 'million btu per ton'
coke 'tons per ton'
fluorides 'kilograms per ton'
pitch 'tons per ton'
other 'in 1980 us$ per ton' /
l 'commodity - electricity supply types'
/ el-actual 'electricity for plants in production'
el-locost 'potential electricity supplies'
el-hicost 'electricity from tradable fuels' /
p 'processes for refining and smelting'
/ ref-t201 'ref-trihydrates ba 2:1 si 4%'
ref-t221 'ref-trihydrates ba 2.2:1 si 3%'
ref-t241 'ref-trihydrates ba 2.4:1 si 3%'
ref-t341 'ref-trihydrates ba 3.4:1 si 1.5%'
ref-tm271 'ref tri-monohydrates ba 2.7:1 si1.5%'
ref-tm221 'ref-tri-monohydrates ba 2.2:1 si 4%'
ref-m 'ref-monohydrates high temp press'
ref-hs 'ref-high silica soda sinter process'
smelting 'smelting of alumina' /
m 'productive units for refining and smelting'
/ refineryt 'refinery for trihydrates'
refinerytm 'refinery for tri-monohydrates'
refinerym 'refinery for monohydrates'
refineryss 'refinery for high silica'
smelter 'to process alumina into aluminum' /
mr(m) 'productive units for refining'
/ refineryt, refinerytm, refinerym, refineryss /
ms(m) 'productive units for smelting'/ smelter /
seg 'investment segments' / 1*4 /;
Alias (r,rp), (g,gp), (f,fp);
fr(f,r) = yes$sum(g, fg(f,g)*gr(g,r));
fi(f,i) = yes$sum(g, fg(f,g)*gi(g,i));
fj(f,j) = yes$sum(g, fg(f,g)*gj(g,j));
display fr, fi, fj;
Scalar interval 'time interval for mine resource constraint' / 20 /;
$sTitle Demand Characteristics for primary Aluminum
Parameter
d(j) 'aluminum demand in the year 2000 (1000 tpy)'
nmaa2000(r) 'non-metal alumina demand in year 2000 (1000 tpy)'
nmba2000(i) 'non-metal bauxite demand in year 2000 (1000 tpy)';
Parameter
nmba1980(i) 'non-metal grade bauxite production in 1980'
/ usa 272
guyana 1765
surinam 493
n-austral 230
china 200 /
nmaa1980(r) 'non-metal grade alumina demand at smelters in 1980'
/ eastern-us 884
w-europe 857
japan 582 /;
* nonmetal bauxite consumption grows at the annual rate of 5% and
* nonmetal alumina consumption grows at the annual rate of 3.5%.
nmba2000(i) = nmba1980(i)*1.05**20;
nmaa2000(r) = nmaa1980(r)*1.035**20;
Table dem2000 'high and low demand forecasts for aluminum in the year 2000 and historical 1980'
high low 1980
w-europe 8016 6398 3884
ee+ussr 6099 4884 2776
china 1575 1575 618
c-amer+car 364 281 96
oceania 376 328 243
asean 1243 886 65
korea+oea 1374 1120 240
japan 4331 3762 1637
rest-asia 1350 987 278
mid-east 216 216 70
n-africa 74 70 35
s-africa 376 361 78
wn-america 5750 4489 2382
en-america 5750 4489 2382
ws-america 340 263 117
es-america 1549 1407 378
w-africa 70 70 31
e-africa 70 46 16;
d(j) = dem2000(j,"high");
$sTitle Mine Data
Parameter sratio(i,cm) 'strip ratios for mine locations and bauxite types'
/ usa.highsi 1.5
(w-europe,ee+ussr).mono 1.5
guyana.tri-201 1.37
brazil.tri-221 1.37
(venezuela,ghana).tri-221 1.22
o-asia.tri-241 1.22
(fria-guin,s-leone,indonesia).tri-221 1.
(jamaica1,surinam,camer+oa,india).tri-241 1.
w-austral.tri-341 1.
(n-austral,ayek-guin,toug-guin).tri-mo-221 1.
(jamaica2,haiti+dr).tri-mo-271 1.
china.highsi 1. /;
$sTitle Technology
Set ar 'row labels for matrix a'
/ tri-201 , tri-221 , tri-241 , tri-341 , tri-mo-271, tri-mo-221, mono
highsi , alumina , aluminum, labor , energy , soda-ash , lime
fuel-lub, therm-egy, coke , fluorides, pitch , other , electr /;
Parameter
batoaa(cm) 'ratio of bauxite to alumina (weight)'
aatoal(ci) 'ratio of alumina to aluminum (weight)';
Table a 'input-output coefficients'
* The electrical energy requirement is based on the prebaked system. In 1980
* 13500 - 14300kwh was required. Assuming an energy productivity improvement
* of .5% per year approxiately 12600kwh is required in the period of 1995 - 2000.
ref-t201 ref-t221 ref-t241 ref-t341 ref-tm271 ref-tm221 ref-m ref-hs smelting
tri-201 -2.000
tri-221 -2.200
tri-241 -2.400
tri-341 -3.400
tri-mo-271 -2.700
tri-mo-221 -2.200
mono -2.500
highsi -2.300
alumina 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 -1.930
aluminum 1.000
labor -1.800 -1.800 -1.800 -1.800 -2.000 -2.000 -2.000 -4.000 -8.600
energy -13.100 -13.100 -13.100 -13.100 -14.100 -14.100 -14.700 -43.000
soda-ash -.110 -.090 -.100 -.070 -.090 -.120 -.150 -.050
lime -.100 -.100 -.100 -.100 -.100 -.100 -.100 -1.750
therm-egy -4.400
coke -.375
fluorides -30.000
pitch -.1
other -30.0 -30.0 -30.0 -30.0 -30.0 -30.0 -30.0 -60.0 -220.0
electr -12.6 ;
Table b(m,p) 'capacity utilization'
ref-t201 ref-t221 ref-t241 ref-t341 ref-tm271 ref-tm221 ref-m ref-hs smelting
refineryt 1.0 1.0 1.0 1.0
refinerytm 1.0 1.0
refinerym 1.0
refineryss 1.0
smelter 1.0;
batoaa(cm) = - smin(p, a(cm,p));
aatoal(ci) = - smin(p, a(ci,p));
display batoaa, aatoal;
$sTitle Capacities and Deposits
Set
cc 'column labels for initial capacity and reserves matrix'
/ initial, invest, reserves, initial-70, reserve-70
t-70 , tm-70 , m-70 , ss-70 , smelt-70 /
ec1 'column labels for electrical energy resources matrix'
/ hydro, flaredgas, coal, lc /
mapcc(m,cc) 'map data labels for 1970 to productive units'
/ refineryt.t-70
refinerytm.tm-70
refinerym.m-70
refineryss.ss-70
smelter.smelt-70 /;
Parameter
capm(i) 'existing and commited mine capacities (1000 tpy)'
zmbar(i) 'maximum mine output level (million tons)'
capr(r,m) 'total refinery and smelter capacities (1000 tpy)'
ubar(r,*) 'electricity supply (gigawatt hours per year)'
utm 'capacity utilization for mines'
utr(m) 'capacity utilization for refineries';
Table capm1(i,*) 'mine capacities and reserves in 1980 and 1970' // comments:
initial invest reserves initial-70 reserve-70
* (1000 tpy) (1000 tpy) (million tpy) (1000 tpy) (million tpy) capacities represent
// total material removed.
usa 1945 40 2300 59
jamaica1 8420 1050 8420 1140
jamaica2 4350 542 4350 590 // the "invest" column
haiti+dr 1200 50 2000 65 // refers to firm
guyana 3720 700 4800 140 // investment commitments.
surinam 5260 490 6500 540
brazil 5150 1500 4070 550 2500
venezuela 500 500
w-europe 8803 1200 8400 1280
ee+ussr 10126 600 10100 700
n-austral 16250 3400 4560 3450
w-austral 13500 4400 1200 5500 1250
india 2150 600 1500 250
indonesia 1215 700 1340 390
china 1665 200 650 210
o-asia 605 130 1200 140
ghana 279 500 420 250
ayek-guin 9600 1200 1200
fria-guin 1440 300 2700 300
toug-guin 2500 4000 2000
s-leone 755 280 490 120
camer+oa 1020 1020;
* maximum mine output levels and capacity.
zmbar(i) = capm1(i,"reserves")*1000;
capm(i) = capm1(i,"initial") + capm1(i,"invest");
display capm, zmbar;
Table capr1(r,*) 'capacity in 1000 tpy dec. 1980'
refineryt refinerytm refinerym refineryss smelter t-70 tm-70 m-70 ss-70 smelt-70
western-us 1725 1621
eastern-us 5060 2160 800 3150 4350 1850 800 2613
west-can 268 268
east-can 670 560 843 670 560 672
jamaica 1840 1000 1840 500
c-amer+car
guyana 350 350
surinam 1320 66 1320 66
brazil 500 258 130 240
argentina 140
venezuela 400 120
w-europe 627 3551 2872 3946 2872 2557
e-europe 350 910 4126 2000 3800 1325
asian-ussr 1200 1135
oceania 3670 527 1000 280
w-austral 3670 1400
asean
korea+oea 160 98 50 35
china 888 410 380 200
japan 790 1820 1216 430 980 1216
india 670 360 360 244
rest-asia 200 60
mid-east 265
n-africa 133
ghana 281 255
ayek-guin
rest-guin 660 660
zaire
rest-afric 55
s-africa 89 ;
Table capr2(r,m) 'committed investments in 1000 tpy'
refineryt refinerytm refinerym refineryss smelter
western-us 59
eastern-us 130 226
west-can
east-can 114
jamaica
c-amer+car 45
guyana
surinam
brazil 1350 406
argentina 35
venezuela 1000 70
w-europe 1360 100 533
e-europe
asian-ussr
oceania 310 1025
w-austral 1500
asean 450 325
korea+oea
china
japan 20 -87
india 20 24
rest-asia 200 60
mid-east 135
n-africa 173
s-africa 86;
* add initial capacity to committed investments
capr(r,m) = capr1(r,m) + capr2(r,m);
display capr;
Parameter ut 'capacity utilization coefficients' / refineryt .92
refinerytm .92
refinerym .92
refineryss .92
smelter .95
mining .90 /;
utm = ut("mining");
utr(m) = ut(m);
display utm, utr;
Table egyres(r,*) 'energy resources'
hydro flaredgas coal lc // comments:
western-us 1.0 // units: hydro and flared gas reserves are
eastern-us .5 // in thousand gigawatts.
west-can 130 1.0 //
east-can 1 1.0 // lc: this is the fraction of the
jamaica // electricity needed by the smelting
c-amer+car 51 18 1.0 // industry that is available from
guyana 20 // existing cheap hydro power sources.
surinam 4 1.0
brazil 250 1.0
argentina 250 1.0
venezuela 50 35 1.0
w-europe .7
e-europe 1.2
asian-ussr 50 .9
oceania 150 450 1.0 // oceania: coal reserves in million
w-austral // gigawatt hours
asean 120 15 -1.0 // negative lc:
china 17 1.0 // in asean and korea+oea lc is
japan .2 // negative indicating no currently
india 160 .6 // existing cheap power is available
rest-asia 40 1.0 // to the smelting industry. minus
mid-east 320 1.1 // 1 is used in place of zero as it
n-africa 40 1.0 // facilitates data checks.
ghana 170 90 1.0
rest-guin 56 0.0
zaire 110
s-africa 1.0
korea+oea -1.0;
$onText
el-theory: theoretical electrical energy requirements for existing capacity:
(capacity of smelter) x (utilization factor) x (gigawatt hrs of electricity needed per 1000 tons of aluminum)
el-actual: actual energy resources available to the industry: el-theory x lc
el-locost: potential low cost energy available from more expensive hydro, flared gas and coal supplies:
0.1 x hydro potential + 0.25 x flared gas potential
el-hicost: potential energy supply from expensive coal and nuclear sources.
note: (a) in australia (oceania) only 15000 gigawatt hrs per year generated from coal is considered;
(b) in zaire, despite 109000 gigawatt hrs per yr in potential hydro power, only 2450 gigawatt hrs
per year is considered as practically available for aluminum smelting purposes;
(c) in c-amer+car although there is no smelting industry 607 gigawatt hrs per yr of electrical energy
is available;
(d) most hydro-potential power available in eastern canada is not available. but a small fraction,
together with some from western canada, totaling 3000 gigawatt hrs is available.
$offText
ubar(r,"el-theory") = capr1(r,"smelter")*0.95*14.3;
ubar(r,"el-actual")$(egyres(r,"lc") > 0) = ubar(r,"el-theory")*egyres(r,"lc");
ubar("c-amer+car","el-actual") = 607;
ubar(r,"el-locost") = (0.1*egyres(r,"hydro") + 0.25*egyres(r,"flaredgas"))*1000;
ubar("oceania","el-locost") = ubar("oceania","el-locost") + 33.3*egyres("oceania","coal");
ubar("zaire","el-locost") = .02247*egyres("zaire","hydro")*1000;
ubar("east-can","el-locost") = 3000;
display egyres, ubar;
$sTitle Infrastructure and Investment Costs
Set
rhigh(r) 'refinery locations with high level infrastructure'
rmid(r) 'refinery locations with medium level infrastructure'
rlow(r) 'refinery locations with low level infrastructure'
ihigh(i) 'mine locations with high level infrastructure'
imid(i) 'mine locations with medium level infrastructure'
ilow(i) 'mine locations with low level infrastructure'
icc 'column labels for investment cost data tables'
/ fix-cost, prop-cost, scale, omegahat /
sin1 'cost level escalators for investment at locations'
/ high, mid, low /
sin2 'cost level escalation map for refinery location'
sin3 'cost level escalation map for mine locations';
rhigh(r)$gr("n-america",r) = yes;
rhigh(r)$gr("west-eur",r) = yes;
rlow(r)$gr("africa",r) = yes;
rlow("asian-ussr") = yes;
rlow("n-africa") = no;
rlow("s-africa") = no;
rmid(r) = yes$(not rhigh(r))$(not rlow(r));
sin2(rhigh,"high") = yes;
sin2(rmid,"mid") = yes;
sin2(rlow,"low") = yes;
display rhigh, rmid, rlow;
Scalar
life 'financial life time of productive unit (years)'
rho 'riskless discount rate'
sigma 'capital recovery factor';
Parameter
omegam(i,seg) 'fixed portion of investment cost: mines (us$ 1000 tpy)'
omegar(m,seg,r) 'fixed portion of investment costs: refineries and smelters (us$ 1000 tpy)'
sbm(i,seg) 'plant size at segments: mines (1000 tpy)'
sbr(m,seg,r) 'plant size at segments: refineries and smelters (1000 tpy)'
iem(i) 'miscellaneous investment costs: mines'
ier(r) 'miscellaneous investment costs: refineries and smelters';
* to compensate for differences in existing infrastructure the parameter infac, below, is set to raise
* the effective investment costs for certain groupings.
Parameter infac(r) 'inaccess and infrastructure factor for refineries and smelters';
infac(rhigh) = 1.0;
infac(rmid) = 1.1;
infac(rlow) = 1.25;
Parameter infmi(i) 'factor for mine capital costs'
/ (usa,ee+ussr,w-europe,china) 1.0
(jamaica1,jamaica2,haiti+dr,n-austral
w-austral,ghana,guyana,surinam,brazil
venezuela,india,indonesia,o-asia
ayek-guin,fria-guin,s-leone) 1.1
(camer+oa,toug-guin) 1.25 /;
* the following scalars are used temporarily due to a problem in gams.
Scalar
one1 / 1.05 /
one2 / 1.1 /;
ihigh(i) = yes$(infmi(i) <= one1);
imid(i) = yes$(infmi(i) = one2);
ilow(i) = yes$(infmi(i) > one2);
sin3(ihigh,"high") = yes;
sin3(imid,"mid") = yes;
sin3(ilow,"low") = yes;
* investment costs
rho = .1;
life = 20;
sigma = rho*(1 + rho)**life/((1 + rho)**life - 1);
display rho, life, sigma;
* mining productive unit outputs are in tons of bauxite
Table inv(*,icc) 'investment costs and economies of scale'
fix-cost prop-cost scale
* (us$mill) (us$mill/1000tpy) (1000 tpy)
mining 30 .0275 16000
refineryt 330 0.72 2000
refinerytm 350 0.76 2000
refinerym 370 0.81 2000
refineryss 412 0.90 2000
smelter 100 2.4 200;
Table ip(sin1,*)
prop hds-s hds-r max-s max-r hds-i max-i // hds: diseconomies of scale size
high 1.2 10 5 20 10 4 6 // max: maximum size
mid 1.2 4 2 15 4 3 5 // s : smelters r: refineries
low 1.2 2 2 10 3 2 4; // i : mines
inv(m,"omegahat") = inv(m,"fix-cost") + inv(m,"prop-cost")*inv(m,"scale");
inv("mining","omegahat") = inv("mining","fix-cost") + inv("mining","prop-cost")*inv("mining","scale");
omegar(m,"1",r) = inv(m,"fix-cost")*infac(r);
omegar(m,"2",r) = inv(m,"omegahat")*infac(r);
omegar(mr,"3",r) = sum(sin1$sin2(r,sin1), omegar(mr,"2",r)*ip(sin1,"hds-r"));
omegar(ms,"3",r) = sum(sin1$sin2(r,sin1), omegar(ms,"2",r)*ip(sin1,"hds-s"));
omegar(mr,"4",r) = sum(sin1$sin2(r,sin1), omegar(mr,"2",r)*ip(sin1,"max-r")*ip(sin1,"prop"));
omegar(ms,"4",r) = sum(sin1$sin2(r,sin1), omegar(ms,"2",r)*ip(sin1,"max-s")*ip(sin1,"prop"));
sbr(m,"1",r) = 0;
sbr(m,"2",r) = inv(m,"scale");
sbr(mr,"3",r) = sum(sin1$sin2(r,sin1), sbr(mr,"2",r)*ip(sin1,"hds-r"));
sbr(ms,"3",r) = sum(sin1$sin2(r,sin1), sbr(ms,"2",r)*ip(sin1,"hds-s"));
sbr(mr,"4",r) = sum(sin1$sin2(r,sin1), sbr(mr,"2",r)*ip(sin1,"max-r"));
sbr(ms,"4",r) = sum(sin1$sin2(r,sin1), sbr(ms,"2",r)*ip(sin1,"max-s"));
iem(i) = sum(cm, infmi(i)*sratio(i,cm));
omegam(i,"1") = inv("mining","fix-cost")*iem(i);
omegam(i,"2") = inv("mining","omegahat")*iem(i);
omegam(i,"3") = sum(sin1$sin3(i,sin1), omegam(i,"2")*ip(sin1,"hds-i"));
omegam(i,"4") = sum(sin1$sin3(i,sin1), omegam(i,"2")*ip(sin1,"max-i")*ip(sin1,"prop"));
sbm(i,"1") = 0;
sbm(i,"2") = inv("mining","scale");
sbm(i,"3") = sum(sin1$sin3(i,sin1), sbm(i,"2")*ip(sin1,"hds-i"));
sbm(i,"4") = sum(sin1$sin3(i,sin1), sbm(i,"2")*ip(sin1,"max-i"));
display inv, infac, infmi, iem, ip, omegar, omegam, sbr, sbm;
$sTitle Operating Costs
Set mcc 'column labels for mine operating costs data' / wdrying, nodrying /;
Parameter
obr(i,cm) 'overburden ratio'
mdata(i,*) 'mine cost data';
* temporary*
Scalar
str1 / 1.5 /
str2 / 1.37 /
str3 / 1.22 /;
obr(i,cm)$sratio(i,cm) = 1;
obr(i,cm)$(sratio(i,cm) = str1) = 4;
obr(i,cm)$(sratio(i,cm) = str2) = 3;
obr(i,cm)$(sratio(i,cm) = str3) = 2;
mdata(i,"lmm") = .3; // labor for maintenance
mdata(i,"lmm")$fi("ldcs",i) = .4; // & mining: m-hr/ton
mdata(i,"lstrip") = sum(cm$obr(i,cm), mdata(i,"lmm")*0.33*obr(i,cm));
mdata(i,"ldry") = .1; // labor for drying
mdata(i,"ldry")$fi("ldcs",i) = .2; // m-hr/ton
mdata(i,"l-m+dry") = mdata(i,"lmm") + mdata(i,"ldry");
mdata(i,"wage") = 11; // wages: us$/m-hr
mdata(i,"wage")$gi("s-amer+car",i) = 6;
mdata(i,"wage")$gi("africa",i) = 5;
mdata(i,"wage")$gi("asia-x",i) = 2;
mdata(i,"wage")$gi("ee+ussr",i) = 4;
mdata(i,"fdry") = 2.4; // drying fuel: us-gal/ton
mdata("n-austral","fdry") = 0; // because of solar drying
mdata("w-austral","fdry") = 0; // due to low bauxite content
mdata(i,"fcost")$mdata(i,"fdry") = .8; // fuel cost: us$/us-gal
mdata(i,"mf+lub") = 1.2; // lubricant cost: us$
mdata(i,"other") = 3.5; // miscellaneous cost
display sratio, obr, mdata;
Parameter
ors(r,p) 'operating costs at refineries and smelters (us$ per ton)'
mlc(i) 'labor cost at mines (us$ per ton)'
mfc(i,mcc) 'fuel cost at mines (us$ per ton)'
om(i) 'operating cost at mines (us$ per ton)'
orswl(cmi) 'refineries and smelter operating cost excluding labor'
/ soda-ash 170 , fuel-lub 1, therm-egy 7.5
energy 4.5, pitch 250, other 1
lime 40 , coke 675, fluorides .8 /
orsl(r) 'refinery and smelter labor cost d (us$ per man-hr)'
/ (western-us, eastern-us, west-can, east-can , w-austral
oceania , mid-east , japan , argentina, w-europe) 11
(surinam , brazil , venezuela , c-amer+car, s-africa
zaire , ghana , ayek-guin , rest-guin , guyana
e-europe, jamaica, asian-ussr, rest-afric) 5
(korea+oea, n-africa, india, china, asean, rest-asia) 3 /
costrs(r,cmi) 'cost data for unit input at refineries and smelters';
costrs(r,cmi) = orswl(cmi);
costrs(r,"labor") = orsl(r);
* refinery and smelter operating costs.
ors(r,p) = sum(cmi, abs(a(cmi,p)*costrs(r,cmi)));
display costrs, ors;
* min costs computation:
* step 1: labor costs
* step 2: fuel costs
* step 3: operating costs for locations with drying costs
* step 4: operating costs for locations without drying costs
* step 5: special cases
* step 1.
mlc(i) = (mdata(i,"l-m+dry") + mdata(i,"lstrip"))*mdata(i,"wage");
* step 2.
mfc(i,"nodrying")$(mdata(i,"fdry") <= 0) = mdata(i,"mf+lub");
mfc(i,"wdrying")$(mdata(i,"fdry") > 0) = mdata(i,"fdry")*mdata(i,"fcost") + mdata(i,"mf+lub");
* step 3.
om(i)$(mdata(i,"fdry") > 0) = mlc(i) + mfc(i,"wdrying") + mdata(i,"other");
* step 4.
om(i)$(mdata(i,"fdry") <= 0) = mlc(i) + mfc(i,"nodrying") + mdata(i,"other");
display ors, om;
$sTitle Transport Description
* this section describes the transport structure of the model. the port sets are defined first, followed by
* the set of "land" transport modes that exist between the mines and the ports. then land distances and sea
* distances between mines and ports, and between ports, respectively, are defined. the assumption is that
* only mines might be located away from ports, and that all refineries, smelters, and market centers are
* either located next to ports or are ports themselves.
Parameter
mur(i,r) 'transport cost (us$ per ton)'
murs(i,r) 'transport cost (us$ per ton): sea'
murl(i) 'transport cost (us$ per ton): land'
mui(r,rp) 'transport cost (us$ per ton): interplant'
muf(r,j) 'transport cost (us$ per ton): final';
Set
n 'ports'
/ accra , albahrayn, alexandria, antalya , banana
belawan , belem , bombay , bunbury , ciudad-guy
conakry , douala , freetown , itea , kamsar
kaohsiun , leningrad, linden , miragoane, mobile
nacala , new-york , panama , paramarib, perth
pontianak, portland , p-alfred , p-johore , p-madryn
p-rhoades, rich-bay , rio-de-jan, rotterdam, shanghai
sydney , tokyo , valparaiso, vancouver, veracruz
vishakap , vladivstk, weipa /
nl(n) 'large ports'
ns(n) 'small ports'
/ linden, paramarib, vishakap, douala, itea, freetown, p-johore, perth /
modes 'modes of transportation between mines and ports'
/ rail, road, river-shal, river-deep, conveyor /
cotc 'commodities for ocean transport cost determination'
/ bauxite, alumina, aluminum /
freight 'freight categories' / f 'aluminuim freight carrier'
fnl 'obo carriers - 60000 dwt'
fns 'bauxite carriers - 25000 dwt' /
cotcf(cotc) 'freight commodities with bilevel freight charges' / bauxite, alumina /
* the following sets provide the various mappings between ports and mines, refineries, smelters and markets.
in(i,n) 'mines to ports map'
/ usa.mobile , jamaica1.p-rhoades , jamaica2.p-rhoades
haiti+dr.miragoane, guyana.linden , surinam.paramarib
brazil.belem , venezuela.ciudad-guy, w-europe.itea
ee+ussr.leningrad , n-austral.weipa , w-austral.bunbury
india.vishakap , indonesia.pontianak , china.shanghai
o-asia.p-johore , ghana.accra , ayek-guin.kamsar
fria-guin.conakry , toug-guin.conakry , s-leone.freetown
camer+oa.douala /
rn(r,n) 'production locations to ports map'
/ guyana.linden , surinam.paramarib , brazil.belem
venezuela.ciudad-guy, w-europe.rotterdam , e-europe.leningrad
w-austral.bunbury , india.vishakap , china.shanghai
ghana.accra , ayek-guin.kamsar , western-us.portland
eastern-us.mobile , west-can.vancouver , east-can.p-alfred
jamaica.p-rhoades , c-amer+car.veracruz, argentina.p-madryn
asian-ussr.vladivstk, oceania.weipa , asean.belawan
korea+oea.kaohsiun , japan.tokyo , rest-asia.antalya
mid-east.albahrayn , n-africa.alexandria, rest-guin.conakry
zaire.banana , rest-afric.nacala , s-africa.rich-bay /
jn(j,n) 'markets to ports map'
/ w-europe.rotterdam , ee+ussr.leningrad , china.shanghai
c-amer+car.panama , oceania.sydney , asean.belawan
korea+oea.kaohsiun , japan.tokyo , rest-asia.bombay
mid-east.albahrayn , n-africa.alexandria, s-africa.rich-bay
wn-america.portland , en-america.new-york, ws-america.valparaiso
es-america.rio-de-jan, w-africa.douala , e-africa.nacala /;
nl(n) = yes$(not ns(n));
Alias (n,np);
display n, ns, nl, modes, rp;
Table dmp(i,modes) 'distances in miles from mine to port by mode'
rail road river-shal river-deep conveyor
usa 174
jamaica1 4
jamaica2 4
haiti+dr 4
guyana 140
surinam 50 200
brazil 14 690
venezuela 20 250
w-europe 20
ee+ussr 30
n-austral 24
w-austral 30
india 100
indonesia 80
china 170
o-asia 20
ghana 50
ayek-guin 75
fria-guin 75
toug-guin 200
s-leone 34
camer+oa 350 ;
Parameter mpc(modes) 'transport cost per ton per mile from i to n'
/ rail .05 , road .4 , river-shal .016
river-deep .006, conveyor .03 /;
Table otc(cotc,*) 'ocean transport cost'
fixed f fnl fns
* (1980 us$ per (1980 us$ per metric ton
* metric ton) per nautical mile)
bauxite 3.5 .0024 .0036
alumina 3.5 .00288 .00432
aluminum 4.0 .01 ;
Table sd(n,np) 'sea distances (nautical miles)'
accra albahrayn alexandria antalya banana belawan belem bombay bunbury ciudad-guy conakry douala freetown
albahrayn 9590
alexandria 6622 3296
antalya 4283 3478 349
banana 1067 7181 7755 8426
belawan 6832 3598 4733 3243 6821
belem 4271 8360 5107 5107 6592 9659
bombay 6832 1700 3213 3394 6821 2154 9565
bunbury 7374 5270 6460 6658 4600 9700 10688 4156
ciudad-guy 3951 9696 6400 6400 5594 10034 1222 9784 10347
conakry 1036 6800 3950 4576 2468 3080 2500 7900 8000 3050
douala 671 7389 5649 6514 742 3674 4226 7102 6200 4600 1726
freetown 955 7041 4073 3818 2070 8401 2600 7787 7900 2996 100 1626
itea 3457 3895 600 500 5596 5644 4279 3648 7009 4397 4750 6249 4673
kamsar 1130 6866 3898 4476 2245 8656 3316 7962 8050 2996 80 1600 175
kaohsiun 10866 7389 7589 8426 11530 3035 10958 4848 4600 10059 11550 6710 11437
leningrad 5123 7550 4582 4342 6214 10766 5243 5959 10361 7521 5265 6991 5365
linden 4170 10968 5180 5180 7250 10998 896 9623 11570 419 3396 5122 3496
miragoane 4622 8295 5327 5000 8204 8518 1866 10665 9200 681 3000 5293 3667
mobile 5616 9776 6438 6317 9685 9208 3124 11667 10814 1963 4700 5997 4710
nacala 4565 8226 3935 4981 3125 5372 6765 3461 11425 7391 5560 4785 5520
new-york 6213 8251 5119 4998 9025 10504 2975 11398 11570 1939 5200 6723 5383
panama 5016 9754 6294 6173 8712 9370 2757 9343 9444 1539 4200 5860 4234
paramarib 4397 11113 7860 5097 7339 9474 747 9407 9400 646 5450 7540 5500
perth 7374 6067 6486 6656 5550 2573 9221 3986 76 8976 8032 7293 7977
pontianak 7865 3316 4852 5000 7515 800 11351 2109 2000 10885 8900 8205 8889
portland 9920 13267 10163 10040 11018 7509 6307 7509 8850 5408 8950 11269 8953
p-alfred 6552 8358 5390 4981 9364 12292 3680 11737 11425 2644 5560 7062 5600
p-johore 7199 3652 5100 5446 7188 368 10026 2441 2473 10401 8900 8085 8769
p-madryn 4351 8660 7112 7102 6689 8996 3274 8300 8951 4551 3780 4524 3712
p-rhoades 4785 8276 5998 5097 8823 9964 2159 10875 9400 1103 5450 6328 3830
rich-bay 2619 4957 5504 6000 795 5291 4368 4597 4755 5594 3300 2432 3190
rio-de-jan 3200 8280 8827 6062 5547 10232 2174 7920 8078 3400 2640 4239 2613
rotterdam 3628 6541 3245 3243 5163 8142 4214 6415 9700 4231 3080 5009 3127
shanghai 10405 5859 7307 8244 9395 2574 11237 4648 4100 10338 10800 6249 10976
sydney 8859 7874 9322 8654 8852 4593 9761 6023 2100 9213 9900 8264 9614
tokyo 7647 6551 8081 8252 10087 4548 10555 4538 4410 9231 11668 10974 11768
valparaiso 6870 10651 8910 8789 7918 9710 6142 10674 7705 4155 6160 8476 6850
vancouver 7514 13630 10698 10160 11177 7445 6470 12292 9270 5571 9100 11203 9107
veracruz 5838 9891 6923 6661 9800 12167 3925 12261 11294 2519 4900 6510 4883
vishakap 7271 3813 5170 4931 7370 1281 10119 1670 3600 10576 8322 7472 8230
vladivstk 11202 6656 8307 9214 11664 3371 11072 5445 5050 9879 11900 10950 11773
weipa 9473 6120 7664 7846 3500 2836 10920 4849 2713 10139 11817 11000 11900
+ itea kamsar kaohsiun leningrad linden miragoane mobile nacala new-york panama paramarib perth pontianak
kamsar 3650
kaohsiun 8680 11612
leningrad 3469 3993 12410
linden 4352 3215 10078 5199
miragoane 6284 3287 9366 4544 1057
mobile 5930 4661 10579 6103 2404 2770
nacala 4396 5162 6449 4923 7061 7504 9038
new-york 4185 5142 10528 4428 2217 1489 1874 8361
panama 6773 5939 8510 6080 1558 776 1413 9991 2018
paramarib 4269 3442 10211 5108 215 1272 2691 7445 2334 1691
perth 7086 8132 4600 12095 9192 10263 10814 4300 11849 9487 9407
pontianak 5919 8542 3130 9804 10687 11401 11900 3709 10505 10625 10604 2811
portland 9214 8953 5156 9763 5427 4715 5405 9891 5887 3869 5560 8894 6028
p-alfred 4155 5481 11724 4362 3077 2579 2991 8464 1460 3204 3150 11425 10572
p-johore 5799 9023 2668 9704 9990 11281 11540 4080 10871 10505 9841 2391 420
p-madryn 6700 2993 10158 7957 3954 5140 6645 6033 5871 5491 3813 8111 9699
p-rhoades 4885 3830 9114 5360 1334 430 1108 8539 1474 594 1549 10081 11220
rich-bay 6079 3365 9306 7420 5026 5948 7461 1797 6801 8194 5980 4755 6100
rio-de-jan 6602 2613 11309 6806 2853 4367 5133 5653 4770 4484 2713 8034 9266
rotterdam 2417 2980 11052 1102 4097 4039 4850 6604 3376 4842 4056 9731 8097
shanghai 8498 11151 369 11643 10357 9645 10061 6249 10584 8648 10490 4000 2075
sydney 8908 9989 5178 13926 9192 8520 9210 6400 9692 7674 10735 2157 4600
tokyo 8506 8777 838 12603 9059 8538 9105 6931 9700 7692 9274 4340 2767
valparaiso 9389 6163 10500 8510 4174 3392 4026 8015 4634 2616 4307 7748 10903
vancouver 9334 9107 5100 9926 5590 4878 5568 11158 6050 4032 5723 9265 5960
veracruz 5835 4883 9983 6140 2429 2239 2876 9100 1989 1463 2578 10950 12388
vishakap 5625 8401 4314 9752 10415 10980 12661 2706 8673 11805 11266 3600 1700
vladivstk 9468 11948 726 13197 9315 9480 10693 7076 9775 7757 10325 5022 2872
weipa 8199 11900 3500 12172 10618 10160 10013 6548 10618 8600 10291 2600 2000
+ portland p-alfred p-johore p-madryn p-rhoades rich-bay rio-de-jan rotterdam shanghai sydney tokyo
p-alfred 7073
p-johore 7142 12659
p-madryn 8471 6455 8996
p-rhoades 4463 2744 11242 5224
rich-bay 7561 7134 5658 3720 7586
rio-de-jan 8353 5354 8846 1151 4194 3323
rotterdam 8711 3310 8509 6358 4308 6505 5300
shanghai 5445 11852 2207 12267 9393 9585 11109 10591
sydney 6737 10878 4222 6810 8268 6624 9455 12516 4636
tokyo 4328 10896 2899 10697 8286 8478 11513 10768 1117 4330
valparaiso 5764 5820 10483 2852 3120 6050 3670 7458 10148 6294 9280
vancouver 371 7236 7078 8100 4626 7932 9797 8874 5379 7108 4272
veracruz 5332 3540 11968 6375 1210 7576 4079 5088 9463 8157 9155
vishakap 10726 12230 1300 9203 11354 5040 8363 10793 3856 5760 4199
vladivstk 4278 12568 3004 12338 9228 8457 11780 12599 998 5105 962
weipa 6294 11804 2468 8611 10291 7217 9605 10805 3000 1900 3500
+ valparaiso vancouver veracruz vishakap vladivstk
vancouver 6135
veracruz 4079 5495
vishakap 10734 10813 9736
vladivstk 9606 4396 10097 4304
weipa 8165 6614 10064 3970 4150;
Parameter
seacost(n,np,cotc) 'port to port transport cost (us$ per ton)'
fcp(n,np,cotc,freight) 'freight charge possibilities';
sd(n,np) = max(sd(n,np),sd(np,n));
* note:
* this construction may cause problems of double counting or zero distances. this is the result of the format of
* the distance matrix: which is a lower triangular matrix plus an irregular block
* set allowed combinations of fcp to 1 as follows:
* for aluminum shipments, the freight charge is incurred if sea distances exist between any two ports.
fcp(n,np,"aluminum","f")$sd(n,np) = 1;
* bauxite and alumina incur lower freight charge levels if the two
* ports are large ports - transporting by obo carriers of 60,000 dwt.
fcp(n,np,cotcf,"fnl")$(nl(n)$nl(np)$sd(n,np)) = 1;
* bauxite and alumina incur the higher freight charge levels if at least
* one port is a small port - transporting by bauxite carriers of 25,000 dwt.
fcp(n,np,cotcf,"fns")$((not(nl(n)*nl(np)))$sd(n,np)) = 1;
seacost(n,np,cotc)$sd(n,np) = otc(cotc,"fixed") + sum(freight$(fcp(n,np,cotc,freight) <> 0), otc(cotc,freight)*sd(n,np));
* murs(i,i) = sum((n,np)$(in(i,n)*rn(i,np)),seacost(n,np,"bauxite"));
* mui(i,ip) = sum((n,np)$(rn(i,n)*rn(ip,np)),seacost(n,np,"alumina"));
* muf(i,j) = sum((n,np)$(jn(j,n)*rn(i,np)),seacost(n,np,"aluminum"));
* note:
* the assignments written this way take too much time to execute. until further improvements in gams we use the
* following formulation using some extra parameters.
Parameter
mursx 'intermediate transport cost calculations: bauxite'
muix 'intermediate transport cost calculations: alumina'
mufx 'intermediate transport cost calculations: aluminum';
mursx(i,np) = sum(n$in(i,n), seacost(n,np,"bauxite"));
murs(i,r) = sum(np$rn(r,np), mursx(i,np));
muix(r,np) = sum(n$rn(r,n), seacost(n,np,"alumina"));
mui(r,rp) = sum(np$rn(rp,np), muix(r,np));
mufx(r,np) = sum(n$rn(r,n), seacost(n,np,"aluminum"));
muf(r,j) = sum(np$jn(j,np), mufx(r,np));
murl(i) = sum( modes, dmp(i,modes)*mpc(modes));
mur (i,r) = murs(i,r) + murl(i);
display fcp, otc, sd, murs, murl, mur, mui, muf, seacost;
$sTitle Prices, Tariffs and Levies
* define mappings for levies
Set
nir(i,r) 'regional clusters having no levies from i to r'
/ usa.(western-us,eastern-us)
(jamaica1,jamaica2).jamaica
guyana.guyana
surinam.surinam
brazil.brazil
venezuela.venezuela
w-europe.w-europe
ee+ussr.(e-europe,asian-ussr)
(n-austral,w-austral).(oceania,w-austral)
india.india
indonesia.asean
china.china
o-asia.rest-asia
ghana.ghana
(ayek-guin,fria-guin,toug-guin).(ayek-guin,rest-guin) /
rr(r,r) 'production clusters having no levies on alumina'
/(western-us,eastern-us,west-can,east-can).(western-us
eastern-us,west-can,east-can)
(e-europe,asian-ussr).(e-europe,asian-ussr)
(oceania,w-austral).(oceania,w-austral)
(ayek-guin,rest-guin).(ayek-guin,rest-guin) /;
rr(r,r) = yes;
* define mappings for tariffs
Set
frtrade(j,r) 'no tariff on aluminum shipments to from'
/ w-europe.(w-europe,jamaica,guyana,surinam,ghana,zaire,rest-afric,ayek-guin,rest-guin)
ee+ussr.(e-europe, asian-ussr)
oceania.(oceania, w-austral)
china.china
c-amer+car.c-amer+car
asean.asean
korea+oea.korea+oea
japan.japan
rest-asia.india
rest-asia.rest-asia
n-africa.n-africa
(wn-america,en-america).(western-us,eastern-us,west-can,east-can)
es-america.(argentina,brazil)
ws-america.venezuela
w-africa.(ghana,ayek-guin) /
fraa(rp,r) 'no tariff on alumina shipments to from'
/ jamaica.jamaica
guyana.guyana
surinam.surinam
brazil.brazil
venezuela.venezuela
w-europe.(w-europe,jamaica,guyana,surinam,ghana,zaire,ayek-guin,rest-guin,rest-afric)
e-europe.(e-europe,asian-ussr)
asian-ussr.(e-europe,asian-ussr)
asean.asean
china.china
india.india
rest-asia.rest-asia
n-africa.n-africa
ghana.ghana
(ayek-guin,rest-guin).(ayek-guin,rest-guin)
zaire.zaire /
l80 'labels for electricity cost in 1980' / ela-1980, ell-1980, elh-1980 /
ll80(l,l80) 'map from 1980 price labelsto electricity types' / el-actual.ela-1980
el-locost.ell-1980
el-hicost.elh-1980 /
nftrade(j,r) 'mapping of regions and plants with tariff on shipments'
nfaa(rp,r) 'mapping of regions with tariffs on alumina';
nftrade(j,r) = yes$(not frtrade(j,r));
nfaa(rp,r) = yes$(not fraa(rp,r));
display nftrade, nfaa;
Parameter
alphaa(rp) 'alumina tariffs in us$ per ton'
prelec(r,l) 'electrcity price in usmils per kwh or us$ per mwh';
Table pelec(r,*) 'us mils per kwh or us$ per mwh'
el-actual el-locost el-hicost ela-1980 ell-1980 elh-1980
western-us 20 50 5 5 28 // el-locost:
eastern-us 24 50 5 5 28 // electricity generated
west-can 4 30 50 5 5 28 // with flared gas is
east-can 4 30 50 5 5 28 // considered at us$20
jamaica 50 28 // per mwh, hydro power
c-amer+car 20 20 50 3 3 24 // is priced at us$20
guyana 20 50 13 13 28 // per mwh for high head
surinam 4.5 30 50 7 7 29 // rivers and us$30 per
brazil 20 20 50 7 7 29 // mwh for low head
argentina 8 30 50 7 7 29 // rivers.
venezuela 26 30 50 3 3 24
w-europe 20 50 5 5 28 // el-hicost
e-europe 20 50 4 4 23 // refers to coal fired
asian-ussr 20 20 50 30 30 30 // or nuclear plants.
oceania 12 20 50 4 4 28
w-austral 50 28 28 28
asean 20 50 20 20 28
korea+oea 50 28 28 28
china 20 20 50 28 28 28
japan 30 50 28 28 28
india 20 30 50 7 7 28
rest-asia 20 30 50 4 4 28
mid-east 3 20 50 4 4 28
n-africa 20 20 50 7 7 29
ghana 4.8 20 50 7 7 29
ayek-guin 50 29 29 29
rest-guin 20 50 7 7 29
zaire 6 50 7 7 29
rest-afric 50 7 7 29
s-africa 20 50 7 7 29;
prelec(r,l) = pelec(r,l);
display prelec;
Scalar
pa 'market price for alumina (us$ per ton)' / 330 /
gamma 'complement of actual trade flow' / 1 /;
* units for tariff data tariff values are given as fractions of import prices.
Parameter
tariffaa(r) 'tariff on imported alumina' / jamaica .12
guyana .15
surinam .05
brazil .15
venezuela .05
w-europe .056
e-europe .05
asian-ussr .05
asean .10
china .05
india .40
rest-asia .40
n-africa .05
ghana .50
ayek-guin .35
rest-guin .35
zaire .05 /
alphal(j) 'tariff on imported aluminum' / wn-america .00
en-america .00
c-amer+car .059
ws-america .50
es-america .45
w-europe .058
ee+ussr .05
oceania .00
asean .10
korea+oea .10
china .20
japan .09
rest-asia .40
mid-east .00
n-africa .05
w-africa .06
e-africa .00
s-africa .00 /;
* convert tariffs from percentages to us $.
alphaa(rp) = pa*tariffaa(rp);
display alphaa;
* note: units for levy data levies on alumina and bauxite are expressed as fractions per ton of aluminum content.
Parameter
betab(i) 'levies on bauxite' / jamaica1 .026
jamaica2 .026
haiti+dr .073
surinam .049
indonesia .003
ghana .005
ayek-guin .021
fria-guin .021
toug-guin .021 /
betaa(r) 'levies on alumnina' / surinam .020
asean .003
ghana .005
ayek-guin .021
rest-guin .021 /;
* convert the bauxite and alumina levies to a per ton of aluminum basis
betab(i) = sum(cm$sratio(i,cm), betab(i)/(sum(ci, aatoal(ci))*batoaa(cm)));
betaa(r) = betaa(r)/(sum(ci, aatoal(ci)));
display alphal, betab, betaa;
$sTitle Model Reduction
Set
cpospi 'commodity production possibilities at mines'
cnir 'regional clusters with levies on bauxite shipments from i to r';
cpospi(i,cm)$sratio(i,cm) = yes;
cnir(cm,i,r)$(cpospi(i,cm)-nir(i,r)) = yes;
Scalar pl 'world market price of aluminum (us$ per ton aluminum)';
pl = na;
display cpospi, cnir;
$sTitle Cost Calculations on Data
Set
clab 'labels'
/ bauxite 'bauxite costs' , alumina 'alumina costs'
aluminum 'aluminum costs' , net-levy
transport 'cost by sea' , del-cost 'delivered cost'
naoh 'caustic soda' , cao 'lime'
power 'electricity costs' , mc2 'energy'
labour , thermal 'energy'
coke-1 'coke inputs' , mfp 'fluorides'
pit 'pitch' , other-in 'other input costs'
operating 'costs' , capital 'costs'
inland 'transport costs' , levy
tariff , tot-exp 'total export cost'
less-tax 'tax savings' , less-dry 'savings on drying'
tot-local 'local process cost', tot-f-o-b 'export cost' /
case 'case identification numbers' / 1*23 /
comb1(case,i,r) 'combinations: case-mines-refineries'
/ 1.jamaica1.eastern-us, 2.jamaica2.eastern-us, 3.brazil.eastern-us
4.ayek-guin.eastern-us, 5.w-europe.w-europe, 6.ayek-guin.w-europe
7.n-austral.w-europe, 8.w-austral.w-austral, 9.w-austral.w-austral
10.brazil.brazil, 11.ayek-guin.ayek-guin, 12.ayek-guin.ayek-guin
13.surinam.surinam, 14.ghana.ghana, 15.ghana.mid-east
16.indonesia.asean, 17.indonesia.asean, 18.indonesia.japan
19.indonesia.korea+oea, 20.jamaica2.jamaica, 21.jamaica2.jamaica
22.jamaica2.jamaica, 23.surinam.surinam /
comb2(case,rp,j) 'combinations: cases-smelters-markets'
/ 1.eastern-us.en-america, 2.eastern-us.en-america, 3.eastern-us.en-america
4.eastern-us.en-america, 5.w-europe.w-europe, 6.w-europe.w-europe
7.w-europe.w-europe, 8.eastern-us.en-america, 9.w-europe.w-europe
10.eastern-us.en-america, 11.eastern-us.en-america, 12.w-europe.w-europe
13.eastern-us.en-america, 14.ghana.w-europe, 15.surinam.w-europe
16.japan.japan, 17.asean.japan, 18.japan.japan
19.western-us.en-america, 20.jamaica.en-america, 21.jamaica.en-america
22.eastern-us.en-america, 23.surinam.en-america /;
Parameter
x1 'cost components at mines'
x2 'cost components at refineries'
x3 'cost components at smelters'
x4 'cost components at markets';
* compute income tax savings for local processing
* logic: if the ore mined at i is processed at r (same location) then a percentage of the total
* investment cost can be deducted from production or export levy imposed at i
pl = 2000;
Parameter
betabp 'convert production or export levy at i from rate to dollar'
tax1a 'tax savings from refineries'
tax1b 'tax savings from smelters'
taxs2 'total tax savings'
lts(i,r) 'tax deductions as a percentage of investment cost' / jamaica1.jamaica .02
jamaica2.jamaica .02
surinam.surinam .02
haiti+dr.c-amer+car .02 /;
betabp(i) = pl*betab(i);
Parameter bbb,aaa; aaa(i,r) = 1$nir(i,r);
bbb(i,r)$((aaa(i,r) = 1) and (lts(i,r) <> 0)) = betabp(i);
tax1a(i,r) = -sum((cm,p,mr)$(sratio(i,cm) > 0 and a(cm,p) < 0 and b(mr,p) > 0),
(1000*lts(i,r)*omegar(mr,"2",r)/sbr(mr,"2",r))/a(cm,p));
tax1b(i,r) = (1000*lts(i,r)*omegar("smelter","2",r)/sbr("smelter","2",r))
/sum(cm$sratio(i,cm), aatoal("alumina")*batoaa(cm));
taxs2(i) = sum((r,rp)$(nir(i,r)*rr(r,rp)), tax1a(i,r) + tax1b(i,rp));
taxs2(i)$((betabp(i) - taxs2(i)) < 0) = betabp(i);
display aaa, bbb, tax1a, tax1b, taxs2;
* select electricity cost level
Parameter
cel1
celcost(r) 'electriciy cost at smelter';
* option 1: cheapest electricity
* cel1(r,l) = -a("electr","smelting")*prelec(r,l)$(ubar(r,l) < 0);
* cel1(r,l)$(cel1(r,l) eq 0) = 12.6*50;
* celcost(r) = smin(l, cel1(r,l));
* option 2: select the minimum between locost and expensive
celcost(r) = 12.6*prelec(r,"el-locost")$ubar(r,"el-locost");
celcost(r)$(celcost(r) = 0) = 12.6*50;
* option 3: all locations have most expensive
* celcost(r) = 12.6*50;
display celcost;
* main section
Set
cmm(cm)
proc(p)
mmm(m);
loop((case,i,r)$comb1(case,i,r), loop((rp,j)$comb2(case,rp,j),
cmm(cm) = yes$sratio(i,cm);
proc(p) = yes$sum(cmm, a(cmm,p) < 0);
mmm(m) = yes$sum(proc, b(m,proc));
display cmm, proc, mmm;
loop((cm,p,m)$(cmm(cm)*proc(p)*mmm(m)),
x1("operating",case) = om(i);
x1("capital",case) = (sigma*1000*omegam(i,"2")/sbm(i,"2"))/ut("mining");
x1("inland",case) = murl(i);
x1("levy",case) = betabp(i)$( (aaa(i,r) = 0) or (aaa(i,r) <> 0 and lts(i,r) <> 0));
x1("tot-exp",case) = sum(clab, x1(clab,case));
x1("less-tax",case) = taxs2(i)$(bbb(i,r) <> 0);
x1("tot-local",case) = x1("tot-exp",case) - x1("less-tax",case);
x2("bauxite",case) = - a(cm,p)*(x1("operating",case) + x1("capital",case) + x1("inland",case));
x2("transport",case) = - a(cm,p)*murs(i,r);
x2("net-levy",case) = - a(cm,p)*pl*betab(i)$(not nir(i,r));
x2("del-cost",case) = sum(clab, x2(clab,case));
x2("naoh",case) = - a("soda-ash",p)*costrs(r,"soda-ash");
x2("cao",case) = - a("lime",p)*costrs(r,"lime");
x2("mc2",case) = - a("energy",p)*costrs(r,"energy");
x2("labour",case) = - a("labor",p)*costrs(r,"labor");
x2("other-in",case) = - a("other",p)*costrs(r,"other");
x2("operating",case) = x2("naoh",case) + x2("cao",case) + x2("mc2",case) + x2("labour",case) + x2("other-in",case);
x2("capital",case) = (1000*sigma*omegar(m,"2",r)/sbr(m,"2",r))/ut(m);
x2("tot-f-o-b",case) = x2("del-cost",case) + x2("operating",case) + x2("capital",case);
x3("alumina",case) = - a("alumina","smelting")*x2("tot-f-o-b",case);
x3("net-levy",case) = - a("alumina","smelting")*(pl*betaa(r)$(not rr(r,rp)) + alphaa(rp)$nfaa(rp,r));
x3("transport",case) = - a("alumina","smelting")*mui(r,rp);
x3("del-cost",case) = sum(clab, x3(clab,case));
x3("power",case) = celcost(rp);
x3("labour",case) = - a("labor","smelting")*costrs(rp,"labor");
x3("thermal",case) = - a("therm-egy","smelting")*costrs(rp,"therm-egy");
x3("coke-1",case) = - a("coke","smelting")*costrs(rp,"coke");
x3("mfp",case) = - a("fluorides","smelting")*costrs(rp,"fluorides");
x3("pit",case) = - a("pitch","smelting")*costrs(rp,"pitch");
x3("other-in",case) = - a("other","smelting")*costrs(rp,"other");
x3("operating",case) = x3("power",case) + x3("labour",case) + x3("thermal",case) + x3("coke-1",case)
+ x3("mfp",case) + x3("pit",case) + x3("other-in",case);
x3("capital",case) = (1000*sigma*omegar("smelter","2",rp)/sbr("smelter","2",rp))/ut("smelter");
x3("tot-f-o-b",case) = x3("del-cost",case) + x3("operating",case) + x3("capital",case);
x4("aluminum",case) = x3("tot-f-o-b",case);
x4("transport",case) = muf(rp,j);
x4("levy",case) = (pl*alphal(j)$nftrade(j,rp));
x4("del-cost",case) = sum(clab, x4(clab,case)));
);
);
display x1, x2, x3, x4;
$sTitle Data Checks
Set
dc1(i) 'inconsistency between mine capacities and reserves'
dc3(r,m) 'productive unit with capacity but no process to operate'
dc4(r,p) 'productive unit having capacity and process mapping but no input commodities'
dc5(r) 'location with nonzero smelter capacity but with zero electricity availability'
dc6(r) 'location with nonzero smelter capacity but negative electricity availability'
dc7(i) 'mines with capacity but no infrastructure factor'
dc8(r,cmi) 'refineries and smelters with nonzero capacity but zero operating cost'
dc9(i) 'mines with capacity but with no labor cost or fuel cost or operating costs'
dc10(i) 'unmapped mines to ports'
dc11(r) 'unmapped production centers to ports'
dc12(j) 'unmapped markets to ports'
dc13(i,modes) 'mines having nonzero distances to ports but zero cost'
dc14(r) 'existing cheap electricity available at no cost'
dc15(r) 'refineries and smelters with low cost future power sources but at no cost'
dc16(j) 'markets having a nonzero tariff on imported aluminum but zero demand'
dc17(j) 'inconsistency between the world price of aluminum and aluminum demand level'
dc18(i,r) 'bauxite levy and port mapping but no sea transport cost'
dc19(rp,r) 'alumina levy between refiners with port mapping but no sea transport cost'
dc20(rp,r) 'alumina tariffs between refiners with port mapping but no sea transport cost'
dc21(j,r) 'aluminum tariff between smelters and markets with port mapping but no sea cost';
dc1(i)$((capm(i) <> 0) and (zmbar(i) = 0)) = yes;
dc3(r,m)$((capr(r,m) <> 0) and (sum(p, b(m,p)) = 0)) = yes;
dc4(r,p)$(((sum(m, capr(r,m)) <> 0) and (sum(m, b(m,p)) <> 0))
and (sum(ar, a(ar,p)) = 0)) = yes;
dc5(r)$((capr(r,"smelter") <> 0) and (egyres(r,"lc") = 0)) = yes;
dc6(r)$((capr(r,"smelter") <> 0) and (egyres(r,"lc") < 0)
and (ubar(r,"el-actual") < 0)) = yes;
dc7(i)$((infmi(i) = 0) and (capm(i) <> 0)) = yes;
dc8(r,cmi)$((sum(m, capr(r,m)) <> 0) and (costrs(r,cmi) = 0)) = yes;
dc9(i)$((capm(i) <> 0) and ((sum(mcc, mlc(i)) = 0)
or (sum(mcc, mfc(i,mcc)) = 0)
or (om(i) = 0))) = yes;
dc10(i) = yes$(sum(n$in(i,n), 1) <> 1);
dc11(r) = yes$(sum(n$rn(r,n), 1) <> 1);
dc12(j) = yes$(sum(n$jn(j,n), 1) <> 1);
dc13(i,modes)$((dmp(i,modes) <> 0) and (mpc(modes) = 0)) = yes;
dc14(r)$((prelec(r,"el-actual") = 0) and (egyres(r,"lc") > 0)) = yes;
dc15(r)$((prelec(r,"el-locost") = 0) and ((egyres(r,"hydro") + egyres(r,"flaredgas")
+ egyres(r,"coal")) > 0)) = yes;
dc16(j)$((alphal(j) <> 0) and (d(j) = 0)) = yes;
dc18(i,r)$((murs(i,r) = 0) and (sum(cm$cnir(cm,i,r), betab(i)) <> 0)) = yes;
dc19(rp,r)$((mui(r,rp) = 0) and (betaa(r) <> 0)$nfaa(rp,r)) = yes;
dc20(rp,r)$((mui(r,rp) = 0) and (tariffaa(rp) <> 0)$nfaa(rp,r)) = yes;
dc21(j,r)$((muf(r,j) = 0) and (alphal(j) <> 0)$nftrade(j,r)) = yes;
$sTitle Data Check and Program Abort
* the following procedure will test if the data checks made earlier are non-zero, and if they are it will display a
* message followed by the data where the error possibly occurs. the job will then be aborted.
abort$sum(i,dc1(i))"inconsistency between mine capacities and zmbar", dc1, capm, zmbar
abort$sum((r,m),dc3(r,m))"following locations have prod. units which have capacity but no process", dc3, capr, b
abort$sum((r,p),dc4(r,p))"these locations have prod units with cap and process mapping but no comm data", dc4, b, a
abort$sum(r,dc5(r))"smelter locations with smelter capacity but zero electricity availability", dc5, capr, egyres
abort$sum(r,dc6(r))"locations with nonzero smelter capacity but negative electricity requirements", dc6, capr, egyres, ubar
abort$sum(i,dc7(i))"mines with capacity but no infrastructure factor data", dc7, capm, infmi
abort$sum((r,cmi),dc8(r,cmi))"refineries and smelters having nonzero capacity but zero operating costs", dc8, capr, costrs
abort$sum(i,dc9(i))"mines with capacity but with no labor cost or fuel cost or operating costs", dc9, capm, mlc, mfc, om
abort$sum(i,dc10(i))"mines without a map to ports", dc10, i, n, in
abort$sum(r,dc11(r))"production regions without map to ports", dc11, r, n, rn
abort$sum(j,dc12(j))"marketing regions without a map to ports", dc12, j, n, jn
abort$sum((i,modes),dc13(i,modes))"mines having nonzero distances to ports but at zero cost", dc13, dmp, mpc
abort$sum(r,dc14(r))"smelters with electricity from existing cheap power sources but at no cost", dc14, prelec, egyres
abort$sum(r,dc15(r))"refineries and smelters with low cost future power sources but at no cost", dc15, prelec, egyres
abort$sum(j,dc16(j))"markets with a nonzero tariff on imported aluminum but with no demand", dc16, alphal, d
abort$sum((i,r),dc18(i,r))"levy between bauxite producer and user with port map but no sea transport cost", dc18, betab, murs
abort$sum((rp,r),dc19(rp,r))"alumina levy between refiners with port map but at no sea transport cost", dc19, betaa, mui
abort$sum((rp,r),dc20(rp,r))"alumina tariff between refiner and smelter with port map but no sea trans cost", dc20, tariffaa, mui
abort$sum((j,r),dc21(j,r))"aluminum tariff between smelters and markets with port mapping but no sea cost", dc21, alphal, muf;
$sTitle Model Specification
Variable
xf(r,j) 'shipment: final products (1000 tpy)'
xi(r,rp) 'shipment: intermediates (1000 tpy)'
xm(c,i,r) 'shipment: bauxites (1000 tpy)'
z(p,r) 'process level (1000 tpy)'
zm(cm,i) 'mining output level (1000 tpy)'
u(l,r) 'electricity supply (gigawatt hours per year)'
hm(i) 'expansions (linear): mines (million tons per annual capacity)'
hr(r,m) 'expansions (linear): refinery and smelter (million tons per annual capacity)'
sm(seg,i) 'expansions (fixed): mines (million tons per annual capacity)'
sr(m,seg,r) 'expansions (fixed): refinery and smelter (million tons per annual capacity)'
ym(i) 'binary expansion variable: mines'
yr(r,m) 'binary expansion variable: refineries and smelters'
phikm 'investment cost: mines (us$ million)'
phikr 'investment cost: refineries and smelters (us$ million)'
phiom 'operating cost: mines (us$ million)'
phior 'operating cost: refineries and smelters (us$ million)'
phit 'cost: transport (us$ million)'
phitf 'cost: tariffs (us$ million)'
phil 'cost: royalties and levies (us$ million)'
phi1 'cost: total (us$ million)'
phi2 'cost: total cost without tariffs (us$ million)'
phi3 'cost: total cost without levies (us$ million)'
phi4 'cost: total cost without levies or tariffs (us$ million)';
Positive Variable xf, xi, xm, z, zm, u, hm, hr, sm, sr;
Binary Variable ym, yr;
Equation
mbm(cm,i) 'material balance: mines (1000 units)'
mbr(c,r) 'material balance: refineries and smelters (1000 units)'
fdb(j) 'final demand balance (1000 units)'
ccm(i) 'capacity constraint: mines (million typ)'
ccr(r,m) 'capacity constraint: refineries and smelters (million typ)'
i1m(i) 'definition of h: mines'
i1r(r,m) 'definition of h: refineries and smelters'
i2m(i) 'convex combination and 0-1 constraint: mines'
i2r(r,m) 'convex combination and 0-1 constraint: refineries and smelters'
res(cm,i) 'bauxite reserve constraint (1000 tons)'
tba(f) 'trade restrictions: bauxite'
taa(f) 'trade restrictions: alumina'
tal(f) 'trade restrictions: aluminum'
akm 'accounting: mine investments (us$ million)'
akr 'accounting: refinery and smelter investments (us$ million)'
aom 'accounting: mine operating costs (us$ million)'
aor 'accounting: refineries and smelters operating costs (us$ million)'
at 'accounting: transport cost (us$ million)'
atf 'accounting: tariffs (us$ million)'
al 'accounting: royalties and levies (us$ million)'
a1 'accounting: total cost (us$ million)'
a2 'accounting: total cost without tariffs (us$ million)'
a3 'accounting: total cost without levies (us$ million)'
a4 'accounting: total cost with no levies or tariffs (us$ million)';
mbm(cm,i)$cpospi(i,cm).. zm(cm,i) =g= sum(r, xm(cm,i,r)) + nmba2000(i);
mbr(c,r).. sum(p, a(c,p)*z(p,r)) + sum(i, xm(c,i,r)$(cm(c)$cpospi(i,c)))
+ sum(rp, xi(rp,r)$ci(c)) + sum(l$prelec(r,l), u(l,r)$cl(c))
=g= sum(j, xf(r,j)$cf(c)) + sum(rp, xi(r,rp)$ci(c)) + nmaa2000(r)$ci(c);
fdb(j).. sum(r, xf(r,j)) =g= d(j);
res(cm,i)$cpospi(i,cm).. interval*zm(cm,i) =l= zmbar(i);
ccm(i).. sum(cm$cpospi(i,cm), zm(cm,i)) =l= utm*(capm(i) + hm(i));
ccr(r,m).. sum(p, b(m,p)*z(p,r)) =l= utr(m)*(capr(r,m) + hr(r,m));
i1m(i).. hm(i) =e= sum(seg, sbm(i,seg)*sm(seg,i));
i1r(r,m).. hr(r,m) =e= sum(seg, sbr(m,seg,r)*sr(m,seg,r));
i2m(i).. ym(i) =e= sum(seg, sm(seg,i));
i2r(r,m).. yr(r,m) =e= sum(seg, sr(m,seg,r));
tba(f).. sum((cm,i,r)$(fr(f,r)*cpospi(i,cm)), xm(cm,i,r)$fi(f,i) - gamma*xm(cm,i,r)) =g= 0;
taa(f).. (1 - gamma)*sum((ci,r)$fr(f,r), -a(ci,"smelting")*z("smelting",r))
=g= sum((r,rp)$fr(f,rp), xi(r,rp)$(not fr(f,r)));
tal(f).. sum((r,j)$fj(f,j), xf(r,j)$fr(f,r) - gamma*xf(r,j)) =g= 0;
aom.. phiom =e= sum((cm,i)$cpospi(i,cm),om(i)*zm(cm,i))/1000;
aor.. phior =e= (sum((r,p), ors(r,p)*z(p,r)) + sum((r,l), prelec(r,l)*u(l,r)))/1000;
at.. phit =e= sum(r, sum(j, muf(r,j)*xf(r,j)) + sum(rp, mui(r,rp)*xi(r,rp))
+ sum((cm,i)$cpospi(i,cm), mur(i,r)*xm(cm,i,r)))/1000;
akm.. phikm =e= sigma*sum((seg,i), omegam(i,seg)*sm(seg,i));
akr.. phikr =e= sigma*sum((seg,r,m), omegar(m,seg,r)*sr(m,seg,r));
atf.. phitf =e= (sum(j, pl*alphal(j)*sum(r$nftrade(j,r), xf(r,j)))
+ sum(rp, alphaa(rp) *sum(r$nfaa(rp,r), xi(r,rp))))/1000;
al.. phil =e= pl*(sum((cm,i,r)$cnir(cm,i,r), betab(i)*xm(cm,i,r))
+ sum((r,rp)$(not rr(r,rp)), betaa(r)*xi(r,rp)))/1000;
a1.. phi1 =e= phit + phiom + phior + phikm + phikr + phitf + phil;
a2.. phi2 =e= phit + phiom + phior + phikm + phikr + phil;
a3.. phi3 =e= phit + phiom + phior + phikm + phikr + phitf;
a4.. phi4 =e= phit + phiom + phior + phikm + phikr;
$sTitle Scenario and Model
pl = 2000;
d(j) = dem2000(j,"low");
gamma = 0;
u.up(l,r) = ubar(r,l);
u.up("el-hicost",r) = +inf;
Model gam 'global aluminum model' / all /;
solve gam minimizing phi4 using mip;
abort$(gam.modelStat <> %modelStat.optimal% and
gam.modelStat <> %modelStat.integerSolution%) 'no solution';
$sTitle Report
Set
rcol 'report columns'
/ ncap-exist, ncap-com, ncap-new
ncap-tot , ecap-tot, production
shipped , non-ind , ecap-ut /
rcolel 'column labels for electricity reporting'
/ el-actual, el-locost
el-hicost, el-total
el-cost , av-cost /;
Parameter
repb 'bauxite production and consumption (1000 tpy)'
arepb 'bauxite production and consumption (1000 tpy)'
brepb 'bauxite production and consumption (1000 tpy)'
repaa 'alumina production and consumption (1000 tpy)'
arepaa 'alumina production and consumption (1000 tpy)'
brepaa 'alumina production and consumption (1000 tpy)'
repam 'aluminium production and consumption (1000 tpy)'
arepam 'aluminium production and consumption (1000 tpy)'
brepam 'aluminium production and consumption (1000 tpy)'
repel 'electricity report by plants'
arepel 'electricity report by regions'
brepel 'electricity report by blocks';
repb(i,r) = sum(cm, xm.l(cm,i,r));
repb("**total**",r) = sum(i, repb(i,r));
repb(i,"shipped") = sum(r, repb(i,r));
repb(i,"non-ind") = nmba2000(i);
repb(i,"production") = sum(cm, zm.l(cm,i));
repb(i,"ecap-tot") = ut("mining")*(capm(i)+hm.l(i));
repb(i,"ncap-tot") = capm(i)+hm.l(i);
repb(i,"ncap-exist") = capm1(i,"initial");
repb(i,"ncap-com") = capm1(i,"invest");
repb(i,"ncap-new") = hm.l(i);
repb(i,"ecap-ut")$repb(i,"ecap-tot") = repb(i,"production")/repb(i,"ecap-tot");
repb("**total**",rcol) = sum(i,repb(i,rcol));
repb("**total**","ecap-ut") = repb("**total**","production")/repb("**total**","ecap-tot");
arepb(g,rcol) = sum(i$gi(g,i),repb(i,rcol));
arepb(g,gp) = sum((i,r)$(gi(g,i)*gr(gp,r)), repb(i,r));
arepb("**total**",g) = sum(gp, arepb(gp,g));
arepb("**total**",rcol) = repb("**total**",rcol);
arepb(g,"ecap-ut")$arepb(g,"ecap-tot") = arepb(g,"production")/arepb(g,"ecap-tot");
brepb(f,rcol) = sum(g$fg(f,g),arepb(g,rcol));
brepb(f,fp) = sum((g,gp)$(fg(f,g)*fg(fp,gp)), arepb(g,gp));
brepb("**total**",f) = sum(fp, brepb(fp,f));
brepb("**total**",rcol) = arepb("**total**",rcol);
brepb(f,"ecap-ut")$brepb(f,"ecap-tot") = brepb(f,"production")/brepb(f,"ecap-tot");
Set smelt / smelter /;
repaa(r,rp) = xi.l(r,rp);
repaa(r,"non-ind") = nmaa2000(r);
repaa(r,"production") = sum(p$(a("alumina",p) >= 0), a("alumina",p)*z.l(p,r));
repaa(r,r) = repaa(r,"production") - sum(rp, repaa(r,rp)) - repaa(r,"non-ind");
repaa(r,"shipped") = repaa(r,"production") - repaa(r,"non-ind");
repaa("**total**",rp) = sum(r, repaa(r,rp));
repaa(r,"ecap-tot") = sum(m$(not smelt(m)), ut(m)*(capr(r,m)+hr.l(r,m)));
repaa(r,"ncap-tot") = sum(m$(not smelt(m)), capr(r,m)+hr.l(r,m));
repaa(r,"ncap-exist") = sum(m$(not smelt(m)), capr1(r,m));
repaa(r,"ncap-com") = sum(m$(not smelt(m)), capr2(r,m));
repaa(r,"ncap-new") = sum(m$(not smelt(m)), hr.l(r,m));
repaa(r,"ecap-ut")$repaa(r,"ecap-tot") = sum((p,m)$(not smelt(m)), b(m,p)*z.l(p,r))/repaa(r,"ecap-tot");
repaa("**total**",rcol) = sum(r, repaa(r,rcol));
repaa("**total**","ecap-ut") = repaa("**total**","production")/repaa("**total**","ecap-tot");
arepaa(g,rcol) = sum(r$gr(g,r),repaa(r,rcol));
arepaa(g,gp) = sum((r,rp)$(gr(g,r)*gr(gp,rp)), repaa(r,rp));
arepaa("**total**",g) = sum(gp, arepaa(gp,g));
arepaa("**total**",rcol) = repaa("**total**",rcol);
arepaa(g,"ecap-ut")$arepaa(g,"ecap-tot") = arepaa(g,"production")/arepaa(g,"ecap-tot");
brepaa(f,rcol) = sum(g$fg(f,g),arepaa(g,rcol));
brepaa(f,fp) = sum((g,gp)$(fg(f,g)*fg(fp,gp)), arepaa(g,gp));
brepaa("**total**",f) = sum(fp, brepaa(fp,f));
brepaa("**total**",rcol) = arepaa("**total**",rcol);
brepaa(f,"ecap-ut")$brepaa(f,"ecap-tot") = brepaa(f,"production")/brepaa(f,"ecap-tot");
repam(r,j) = xf.l(r,j);
repam("**total**",j) = sum(r, repam(r,j));
repam(r,"shipped") = sum(j, repam(r,j));
repam(r,"production") = a("aluminum","smelting")*z.l("smelting",r);
repam(r,"ecap-tot") = ut("smelter")*(capr(r,"smelter")+hr.l(r,"smelter"));
repam(r,"ncap-tot") = (capr(r,"smelter")+hr.l(r,"smelter"));
repam(r,"ncap-exist") = capr1(r,"smelter");
repam(r,"ncap-com") = capr2(r,"smelter");
repam(r,"ncap-new") = hr.l(r,"smelter");
repam(r,"ecap-ut")$repam(r,"ecap-tot") = b("smelter","smelting")*z.l("smelting",r)/repam(r,"ecap-tot");
repam("**total**",rcol) = sum(r, repam(r,rcol));
repam("**total**","ecap-ut") = repam("**total**","production")/repam("**total**","ecap-tot");
arepam(g,rcol) = sum(r$gr(g,r),repam(r,rcol));
arepam(g,gp) = sum((r,j)$(gr(g,r)*gj(gp,j)), repam(r,j));
arepam("**total**",g) = sum(gp, arepam(gp,g));
arepam("**total**",rcol) = repam("**total**",rcol);
arepam(g,"ecap-ut")$arepam(g,"ecap-tot") = arepam(g,"production")/arepam(g,"ecap-tot");
brepam(f,rcol) = sum(g$fg(f,g),arepam(g,rcol));
brepam(f,fp) = sum((g,gp)$(fg(f,g)*fg(fp,gp)), arepam(g,gp));
brepam("**total**",f) = sum(fp, brepam(fp,f));
brepam("**total**",rcol) = arepam("**total**",rcol);
brepam(f,"ecap-ut")$brepam(f,"ecap-tot") = brepam(f,"production")/brepam(f,"ecap-tot");
display brepb, brepaa, brepam, arepb, arepaa, arepam, repb, repaa, repam;
repel(r,l) = u.l(l,r);
repel(r,"el-total") = sum(l, repel(r,l));
repel(r,"el-cost") = sum(l, repel(r,l)*prelec(r,l))/1000;
repel(r,"av-cost")$repel(r,"el-total") = (repel(r,"el-cost")/repel(r,"el-total"))*1000;
repel("**total**",rcolel) = sum(r, repel(r,rcolel));
repel("**total**","av-cost") = (repel("**total**","el-cost")/repel("**total**","el-total"))*1000;
repel(r,"cost/ton")$repam(r,"production") = (repel(r,"el-cost")/repam(r,"production"))*1000;
arepel(g,rcolel) = sum(r$gr(g,r), repel(r,rcolel));
arepel("**total**",rcolel) = repel("**total**",rcolel);
arepel(g,"av-cost")$arepel(g,"el-total") = (arepel(g,"el-cost")/arepel(g,"el-total"))*1000;
arepel("**total**","av-cost") = repel("**total**","av-cost");
arepel(g,"cost/ton")$arepam(g,"production") = (arepel(g,"el-cost")/arepam(g,"production"))*1000;
brepel(f,rcolel) = sum(g$fg(f,g), arepel(g,rcolel));
brepel("**total**",rcolel) = arepel("**total**",rcolel);
brepel(f,"av-cost")$brepel(f,"el-total") = (brepel(f,"el-cost")/brepel(f,"el-total"))*1000;
brepel("**total**","av-cost") = arepel("**total**","av-cost");
brepel(f,"cost/ton")$brepam(f,"production") = (brepel(f,"el-cost")/brepam(f,"production"))*1000;
repel("**total**","cost/ton") = (repel("**total**","el-cost")/repam("**total**","production"))*1000;
arepel("**total**","cost/ton") = repel("**total**","cost/ton");
brepel("**total**","cost/ton") = repel("**total**","cost/ton");
display repel, arepel, brepel;
display phikm.l, phikr.l, phiom.l, phior.l, phit.l, phitf.l, phil.l, phi1.l, phi2.l, phi3.l, phi4.l;