gtm.gms : International Gas Trade Model

Description

The Gas Trade Model (GTM) models interrelated gas markets.
Prices may be free to move as to equilibrate supplies and
demand. Disequilibria can be introduced with controls over
prices and/or quantities traded.


Reference

  • Manne, A S, and Beltramo, M A, GTM: An International Gas Trade Model, International Energy Program Report. Stanford University, 1984.

Small Model of Type : NLP


Category : GAMS Model library


Main file : gtm.gms

$title An International Gas Trade Model (GTM,SEQ=53)

$onText
The Gas Trade Model (GTM) models interrelated gas markets.
Prices may be free to move as to equilibrate supplies and
demand. Disequilibria can be introduced with controls over
prices and/or quantities traded.


Manne, A S, and Beltramo, M A, GTM: An International Gas Trade Model ,
International Energy Program Report. Stanford University, 1984.

Keywords: nonlinear programming, gas trade, price elasticity, energy economics,
          international trade
$offText

Set
   i       'supply regions' / mexico,   alberta-bc, atlantic,   appalacia
                              us-gulf,  mid-cont,   permian-b,  rockies
                              pacific,  alaska                            /
   j       'demand regions' / mexico,   west-can,   ont-quebec, atlantic
                              new-engl, ny-nj,      mid-atl,    south-atl
                              midwest,  south-west, central,    n-central
                              west,     n-west                            /
   jfx(j)  'regions with fixed demand' / mexico, west-can, ont-quebec, atlantic /
   ij(i,j) 'feasible links';

Table sdat(i,*) 'supply data'
                 ref-p1  ref-q1  ref-p2  ref-q2  limit
*               ($/mcf)   (tcf) ($/mcf)   (tcf)  (tcf)
   mexico                  2.0             .5     2.5
   alberta-bc              3.0            1.6     3.75
   atlantic                 .25             .03     .3
   appalacia        3.5     .58     7.0    .65     .72
   us-gulf          3.5    7.88     7.0   8.82    9.75
   mid-cont         3.5    2.07     7.0   2.31    2.55
   permian-b        3.5    1.39     7.0   1.55    1.72
   rockies          3.5    1.16     7.0   1.30    1.44
   pacific          3.5     .42     7.0    .47     .52
   alaska           2.0     .80     2.0    .1      inf;

Table ddat(j,*) 'demand data'
                 ref-p  ref-q  elas      tax  ex-dem
*              ($/mcf)  (tcf)        ($/mcf)   (tcf)
   mexico         1.0    2.2   -.5
   west-can       3.0    1.47  -.5
   ont-quebec     3.5    1.38  -.5
   atlantic       3.5     .20  -.5
   new-engl       9.37    .76  -.60
   ny-nj          8.33   1.18  -.66
   mid-atl        8.26    .89  -.65
   south-atl      8.07   1.62  -.89
   midwest        8.01   2.96  -.65
   south-west     7.29   6.04  -.84
   central        7.79   1.17  -.67
   n-central      8.06   1.51  -.54
   west           8.18   2.10  -.43
   n-west         9.39    .36  -.57;

Parameter
   supa(i) 'supply constant a'
   supb(i) 'supply constant b'
   supc(i) 'supply capacity'
   dema(j) 'demand constant a'
   demb(j) 'demand constant b';

supc(i)  = sdat(i,"limit");
supb(i)  = ((sdat(i,"ref-p1") - sdat(i,"ref-p2"))
         / (1/(supc(i) - sdat(i,"ref-q1"))-1/(supc(i) - sdat(i,"ref-q2"))))
         $ (supc(i) <> inf);
supa(i)  = sdat(i,"ref-p1") - supb(i)/(supc(i) - sdat(i,"ref-q1"));

* we rely on supa(i) evaluating to exactly zero in some cases
supa(i)          = round(supa(i),4);
supc(i)$(supc(i) = inf) = 100;
sdat(i,"sup-a")  = supa(i);
sdat(i,"sup-b")  = supb(i);
display sdat;

demb(j) = 1/ddat(j,"elas") + 1;
dema(j) = ddat(j,"ref-p")/demb(j)/ddat(j,"ref-q")**(demb(j) - 1);
ddat(j,"dem-a") = dema(j);
ddat(j,"dem-b") = demb(j);
display ddat;

Table utc(i,j) 'unit transport cost ($ per mcf)'
                mexico  west-can  ont-quebec  atlantic  new-engl  ny-nj  mid-atl  south-atl  midwest  south-west
   mexico          .25                                             2.29     2.22       2.03     1.96        1.25
   alberta-bc                .40         .90                1.15   1.10     1.10       1.55      .80        1.25
   atlantic                                                 1.50
   appalacia                                                                 .72                 .46
   us-gulf                                                  2.12   1.08     1.01        .82      .75         .04
   mid-cont                                                                                      .86         .14
   permian-b                                                                            .83      .77         .05
   rockies                                                                                       .53
   alaska                                                                                       6.0

   +            central  n-central  west  n-west
   mexico                           2.13
   alberta-bc       .80        .65   .70     .65
   us-gulf          .54
   mid-cont         .64
   permian-b        .55              .94
   rockies          .31        .58   .70    1.91
   pacific                           .43        ;

Table pc(i,j)  'pipeline capacities       (tcf)'
                mexico  west-can  ont-quebec  atlantic  new-engl  ny-nj  mid-atl  south-atl  midwest  south-west
   mexico          inf                                             .067     .067       .067     .067
   alberta-bc                inf         inf                .30    .150     .10                  inf
   atlantic                                        inf       inf
   appalacia                                                                .34                 .35
   us-gulf                                                   inf  1.390    1.060      2.0      2.62         3.73
   mid-cont                                                                                     .62         2.30
   permian-b                                                                                    .12         1.45
   rockies                                                                                      .48
   alaska                                                                                       .80

   +            central  n-central  west  n-west
   mexico                           .033
   alberta-bc       inf        inf   inf     inf
   mid-cont        1.03
   permian-b                       1.46
   rockies          .14        inf  .10      inf
   pacific                          .48         ;

Set
   check1(i,j) 'supply links with zero cost and non-zero capacity'
   check2(i,j) 'supply links with nonzero cost but zero capacity';

check1(i,j) = yes$(utc(i,j) =  0 and pc(i,j) <> 0);
check2(i,j) = yes$(utc(i,j) <> 0 and pc(i,j) =  0);
ij(i,j)     = yes$pc(i,j);
display check1, check2;

Variable
   x(i,j)  'shipment of natural gas (tcf)'
   s(i)    'regional supply         (tcf)'
   d(j)    'regional demand         (tcf)'
   benefit 'consumers benefits minus cost';

Positive Variable x, s, d;

Equation
   sb(i) 'supply balance         (tcf)'
   db(j) 'demand balance         (tcf)'
   bdef  'benefit definition';

sb(i)..   sum(j$ij(i,j), x(i,j)) =l= s(i);

db(j)..   sum(i$ij(i,j), x(i,j)) =g= d(j);

bdef..    benefit =e= sum(j, dema(j)*d(j)**demb(j))
                   -  sum(i, supa(i)*s(i) - supb(i)*log((supc(i) - s(i))/supc(i)))
                   -  sum((i,j)$ij(i,j), utc(i,j)*x(i,j));

x.up(i,j) = pc(i,j);
d.lo(j)   = .2;
d.fx(jfx) = ddat(jfx,"ref-q");
s.up(i)   = 0.99*supc(i);

Model gtm 'gas transport model' / all /;

solve gtm maximizing benefit using nlp;

Parameter
   report1(i,*) 'supply summary report'
   report2(j,*) 'demand summary report';

report1(i,"supply")   = s.l(i);
report1(i,"capacity") = s.up(i);
report1(i,"price")    = sb.m(i);
report2(j,"demand")   = d.l(j);
report2(j,"price")    = -db.m(j);

display report1, report2, x.l;