Description
A Contingency Planning Model (CPM) of international petroleum production, transportation and refining had been developed jointly at Stanford University, Sobotka and Company, and the US Department of Energy. The model is designed to examine the effects of various contingencies (crude supply interruptions) and policies (e.g. ban of Alaskan exports). The following representation is the single- region version discussed in Chapter 3.
Small Model of Types : NLP lp
Category : GAMS Model library
Main file : srcpm.gms
$title Single-Region Contingency Planning Model (SRCPM,SEQ=52)
$onText
A Contingency Planning Model (CPM) of international petroleum
production, transportation and refining had been developed jointly
at Stanford University, Sobotka and Company, and the US Department
of Energy. The model is designed to examine the effects of various
contingencies (crude supply interruptions) and policies (e.g. ban
of Alaskan exports). The following representation is the single-
region version discussed in Chapter 3.
Manne, A S, Nelson, C R, So, K C, and Weyant, J P, CPM: A Contingency
Planning Model of the International Oil Market, International Energy
Program Report. Tech. rep., Stanford University, 1982.
Keywords: nonlinear programming, linear programming, petroleum production,
production planning, energy economics
$offText
Set
c 'all commodities' / ls-light 'low sulfur light crude'
ls-medium 'low sulfur medium crude'
ls-heavy 'low sulfur heavy crude'
hs-light 'high sulfur light crude'
hs-medium 'high sulfur medium crude'
hs-heavy 'high sulfur heavy crude'
ngl 'natural gas liquids'
ls-feed 'low sulfur feed'
hs-feed 'high sulfur feed'
gasoline 'motor gasoline'
distillat 'heating oil + diesel + kerosene'
naphtha 'primary naphtha lpg + others'
ls-resid 'low sulfur fuel oil + lubes and waxes'
hs-resid 'high sulfur fuel oil + asphalt' /
cr(c) 'crude types' / ls-light, ls-medium, ls-heavy, hs-light
hs-medium, hs-heavy, ngl /
ci(c) 'intermediate products' / ls-feed, hs-feed /
cf(c) 'final products' / gasoline, distillat, naphtha, ls-resid, hs-resid /
p 'processes' / d-lsl 'distillation of low sulfur light crude'
d-lsm 'distillation of low sulfur medium crude'
d-lsh 'distillation of low sulfur heavy crude'
d-hsl 'distillation of high sulfur light crude'
d-hsm 'distillation of high sulfur medium crude'
d-hsh 'distillation of high sulfur heavy crude'
ngl 'natural gas liquids processing'
reform 'reforming'
ls-hc 'low sulfur heavy ends conversion'
hs-hc 'high sulfur heavy ends conversion'
desulf 'desulferization' /
pt 'transfer processes' / t-gas 'transfer of gasoline to distillate'
t-nap 'transfer of naphtha to distillate'
t-lsr 'transfer of low sulfur resid'
t-hsr 'transfer of high sulfur resid' /
m 'productive units' / p-still 'primary distillation'
ngl 'ngl facilities'
reformer
he-conv 'heavy ends converter'
desulf 'desulfurizer' /
l 'cost level of facilities' / b 'base or low cost',
m 'marginal or high cost' /;
Table a(c,l,p) 'input output coefficients'
d-lsl d-lsm d-lsh d-hsl d-hsm d-hsh ngl reform ls-hc hs-hc desulf
ls-light.(b,m) -1.0
ls-medium.(b,m) -1.0
ls-heavy.(b,m) -1.0
hs-light.(b,m) -1.0
hs-medium.(b,m) -1.0
hs-heavy.(b,m) -1.0
ngl.(b,m) -1.0
ls-feed.b .35 .50 .68 -1.0 .99
ls-feed.m .34 .49 .67 -1.0 .99
hs-feed.b .38 .48 .66 -1.0 -1.0
hs-feed.m .38 .47 .65 -1.0 -1.0
gasoline.b .20 .96 .67 .61
gasoline.m .20 .96 .36 .25
distillat.b .28 .25 .20 .26 .23 .18 .07 .02
distillat.m .28 .25 .20 .26 .23 .18 .18 .10
naphtha.b .35 .23 .10 .33 .27 .14 .80 -1.0 .04 .06
naphtha.m .35 .23 .10 .33 .27 .14 .80 -1.0 .03 .04
ls-resid.b .23
ls-resid.m .42
hs-resid.b .30
hs-resid.m .60 ;
Table tr(c,pt) 'transfer processes'
t-gas t-nap t-lsr t-hsr
gasoline -1.0
distillat 1.0 .93
naphtha -1.0
ls-feed -1.0
hs-feed -1.0
ls-resid 1.0
hs-resid 1.0;
Parameter loss(p,l) 'process losses';
loss(p,l) = sum(c, a(c,l,p));
display loss;
Table b(m,p) 'capacity utilization matrix'
d-lsl d-lsm d-lsh d-hsl d-hsm d-hsh ngl reform ls-hc hs-hc desulf
p-still 1 1 1 1 1 1
ngl 1
reformer 1
he-conv 1 1
desulf 1;
Table k(m,l) 'initial capacities (mbd)'
b m
p-still 50.5 7.5
ngl 3.4
reformer 7.1 .8
he-conv 7.3 2.9
desulf 2.7 .3;
Parameter
hecr(l,p) 'heavy ends conversion restriction' / b.ls-hc -.83, (b,m).hs-hc 1.0 /
hecc(l) 'heavy ends conversion capacity (mbd)' / b 3.9, m 2.5 /
trb(pt) 'transfer bounds (mbd)' / t-gas 1.7, t-nap 1.9, (t-lsr,t-hsr) inf /
trc(pt) 'transfer costs ($ per b)' / t-gas -.3 /
mcpe(c) 'imports from cpe + drawdowns (mbd)' / hs-light .7, distillat .5, hs-resid .1 /;
Table crd(cr,*) 'crude oil data'
limit price
* (mbd) ($/b)
ls-light 13.6 32.0
ls-medium 1.1 32.0
ls-heavy 1.0 32.0
hs-light 16.2 32.0
hs-medium 8.9 32.0
hs-heavy 4.4 32.0
ngl 3.1 32.0;
Table pc(l,p) 'process cost (us$ per barrel)'
d-lsl d-lsm d-lsh d-hsl d-hsm d-hsh ngl reform ls-hc hs-hc desulf
b .45 .45 .45 .50 .50 .50 .41 .27 .32 .9
m .50 .50 .50 .55 .55 .55 .50 .45 .28 1.0;
Table ddat(cf,*) 'demand data'
ref-q ref-p ref-t elas
* (mbd) ($/b) ($/b)
gasoline 12.8 45.0 0.0 -.20
distillat 13.8 41.0 0.0 -.20
naphtha 8.3 43.0 0.0 -.20
ls-resid 4.2 35.3 0.0 -.30
hs-resid 8.6 31.0 0.0 -.30;
Parameter
dema(cf) 'demand parameter a'
demb(cf) 'demand parameter b';
demb(cf) = 1/ddat(cf,"elas") + 1;
dema(cf) = ddat(cf,"ref-p")/demb(cf)/ddat(cf,"ref-q")**(demb(cf) - 1);
display dema, demb, ddat;
Variable
z(p,l) 'process level (mbd)'
u(c) 'supply of crude (mbd)'
w(pt) 'transfer activities (mbd)'
xf(c) 'shipment of final products (mbd)'
pcost 'production cost (mill $ per day)'
scps 'consumers and producers surplus (mill $ per day)';
Positive Variable z, u, w, xf;
Equation
mb(c) 'material balance (mbd)'
cc(m,l) 'capacity constraint (mbd)'
ccr(l) 'capacity restriction - heavy ends (mbd)'
pcdef 'production cost definition (mill $ per day)'
dcps 'definition of surplus (mill $ per day)';
mb(c).. mcpe(c) + sum((p,l), a(c,l,p)*z(p,l)) + u(c)$cr(c) + sum(pt, tr(c,pt)*w(pt)) =g= xf(c)$cf(c);
cc(m,l).. sum(p, b(m,p)*z(p,l)) =l= k(m,l);
ccr(l).. sum(p, hecr(l,p)*z(p,l)) =l= hecc(l);
pcdef.. pcost =e= sum((p,l), pc(l,p)*z(p,l)) + sum(pt, trc(pt)*w(pt)) + sum(cr, crd(cr,"price")*u(cr));
dcps.. scps =e= sum(cf, dema(cf)*xf(cf)**demb(cf) - ddat(cf,"ref-t")*xf(cf)) - pcost;
u.up(cr) = crd(cr,"limit");
w.up(pt) = trb(pt);
Model
refnlp 'world ref model nlp' / all /
reflp 'world ref model lp' / all - dcps /;
xf.fx(cf) = ddat(cf,"ref-q");
solve reflp minimizing pcost using lp;
xf.lo(cf) = 2;
xf.up(cf) = +inf;
solve refnlp maximizing scps using nlp;