$title 日本のCGEモデル
display "@ 日本のCGEモデル";
$ontext
Time-stamp:     <2017-04-22 15:25:33 st>
First-written:  <2016/10/01>

Unit (単位):
+ 金額データは「10億円」
+ CO2排出量は「MtCO2 (二酸化炭素百万トン)」
+ 排出権価格 (炭素税) は「1000円/CO2トン」

$offtext
*       ------------------------------------------------------------
*       コントロール変数の設定

*       シナリオ名
$if not setglobal scn_name $setglobal scn_name scn_default

*       データの指定
$if not setglobal data_name $setglobal data_name japan_48x40
* $setglobal data_name japan_25x17

*       データファイル名
$setglobal data_file ./aggr_data/%data_name%.gdx

*       Debugモード
$if not setglobal debug_mode $setglobal debug_mode 0

*       BAUのチェック
$if not setglobal bau_check $setglobal bau_check 0

*       投資が可変なら1
$if not setglobal fl_vinv $setglobal fl_vinv 1

*       Energy関係のEOS
$if not setglobal eos_ene $setglobal eos_ene 1

*       非ゼロなら Wage curve model
$if not setglobal fl_wc $setglobal fl_wc 1

*       Wage curve弾力性の値
$if not setglobal wc_elas $setglobal wc_elas (-0.1)

*       失業率に対するスケールパラメータ
$if not setglobal wc_urate_sc $setglobal wc_urate_sc 1

*       CO2削減率(%)
$if not setglobal co2_rd $setglobal co2_rd 25

*       Potential Labor / Actual labor force
$if not setglobal fl_lf $setglobal fl_lf 0.667

*       消費と余暇の間のEOS
$if not setglobal elas_lf $setglobal elas_lf 0.66

parameter
    fl_vinv     投資が可変なら非ゼロ
    fl_wc       非ゼロなら Wage curve model
    co2_rd      CO2の削減率(%)
;
fl_vinv = %fl_vinv%;
fl_wc = %fl_wc%;
co2_rd = %co2_rd% / 100;
display fl_vinv, fl_wc, co2_rd;
               
*       File name for displaying title in DOS window.
file titlemaker /'titlemaker_%scn_name%.cmd'/;
putclose titlemaker '@title Solving scenario = %scn_name%' /;
execute 'titlemaker_%scn_name%.cmd';

*       --------------------------------------------------------------
*       集合の定義

*       集合ファイル名
$setglobal set_file ./set/%data_name%.set

*       集合ファイル名
$setglobal set_file_sub ./set/%data_name%_sub.set

*       集合ファイルの読み込み
* gams-include-file: ./set/japan_48x40.set 
$include %set_file% 

*       集合ファイルの読み込み
* gams-include-file: ./set/japan_48x40_sub.set 
$include %set_file_sub% 

display row, col, va, fd;
display es, agr, f_f, ely_s, ene, sen;
display e_ene_c, e_ene_nc;

*       Aliasの定義
alias (row,i), (row,ii), (col,j), (col,jj), (es,ess);
display i, j;

set oth_s(j)    その他の部門;
oth_s(j) = no;
oth_s(j)$((not agr(j)) and (not f_f(j)) and (not ely_s(j)) and (not sen(j))) = yes;
display oth_s;

set     so      ソース  / dom   国内
                          imp   輸入
                          oth   その他 /
        set_vt(i,j)
        reg_f(j)        規制される部門の集合
;
display so;

*       初期設定=全ての部門を規制
reg_f(j) = yes;
display reg_f;

*       GDX ファイルからのデータの読み込み
parameter
    io_u(*,*,*)         "Aggregated IO table (U table)"
    io_v(*,*)           "Aggregated IO table (V table)"
    io_fd(*,*,*)        "Aggregated IO table (final demand)"
    io_va(*,*)          "Aggregated IO table (value added)"
    io_co2(*,*)         "CO2 emissions (MtCO2)"

    io_u_(*,*,*)        "Aggregated IO table (U table)"
    io_v_(*,*)          "Aggregated IO table (V table)"
    io_fd_(*,*,*)       "Aggregated IO table (final demand)"
    io_va_(*,*)         "Aggregated IO table (value added)"
;
*       GDX ファイルの読み込み
$gdxin '%data_file%'
$load io_u, io_v, io_fd, io_va, io_co2, set_vt

display io_u, io_v, io_fd, io_va, io_co2, set_vt;

*       単位の変換(100万円 → 10億円)
scalar  sf_data データの単位変換のための係数    / 1e+3 /;

io_u_(row,col,so) = io_u(row,col,so) / sf_data;
io_fd_(row,fd,so) = io_fd(row,fd,so) / sf_data;
io_va_(va,col) = io_va(va,col) / sf_data;
io_v_(row,col) = io_v(row,col) / sf_data;
display io_u_, io_v_, io_fd_, io_va_;

$ontext
以下でデータの整合性のチェック。

$offtext
*       データチェックのためのパラメータ
parameters
    chk_io
    chk_va_fd
    chk_imp
    chk_sign_io         マイナスの要素を表示
    chk_io_
;
$macro mc_chk_io \
    chk_io(col,"col_sum") = \
    sum((row,so), io_u_(row,col,so)) + sum(va, io_va_(va,col)); \
    chk_io(row,"row_sum") = \
    sum((col,so), io_u_(row,col,so)) + sum((fd,so), io_fd_(row,fd,so)); \
    chk_io("sum","col_sum") = sum(col, chk_io(col,"col_sum")); \
    chk_io("sum","row_sum") = sum(row, chk_io(row,"row_sum")); \
    display chk_io;

$macro mc_chk_va_fd \
    chk_va_fd(col,"va") = sum(va, io_va_(va,col)); \
    chk_va_fd(row,"fd") = sum((fd,so), io_fd_(row,fd,so)); \
    chk_va_fd("sum","va") = sum(col, chk_va_fd(col,"va")); \
    chk_va_fd("sum","fd") = sum(row, chk_va_fd(row,"fd")); \
    display chk_va_fd;

$macro mc_chk_imp \
    chk_imp(row,"imp") \
    = sum(col, io_u_(row,col,"imp")) + sum(fd, io_fd_(row,fd,"imp")); \
    chk_imp(row,"imp_") = \
    - (io_fd_(row,"imp","oth") + io_fd_(row,"imt","oth")); \
    chk_imp(row,"imp-imp_") = chk_imp(row,"imp") - chk_imp(row,"imp_"); \
    display chk_imp;

$macro mc_chk_sign_io \
    chk_sign_io(row,col,so) = 0; \
    chk_sign_io(va,col,so) = 0; \
    chk_sign_io(row,fd,so) = 0; \
    chk_sign_io(row,col,so)$(io_u_(row,col,so) < 0) = io_u_(row,col,so); \
    chk_sign_io("cap",col,"oth")$(io_va_("cap",col) < 0) = io_va_("cap",col); \
    chk_sign_io(row,fd,so)$(io_fd_(row,fd,so) < 0) = io_fd_(row,fd,so); \
    chk_sign_io(row,"imp",so) = 0; \
    chk_sign_io(row,"imt",so) = 0; \
    display chk_sign_io;

$macro mc_chk_io_ \
    chk_io_(col,"col_sum") = \
    sum((row,so), io_u_(row,col,so)) + sum(va, io_va_(va,col)); \
    chk_io_(row,"row_sum") = \
    sum((col,so), io_u_(row,col,so)) + sum((fd,so), io_fd_(row,fd,so)); \
    chk_io_("sum","col_sum") = sum(col, chk_io_(col,"col_sum")); \
    chk_io_("sum","row_sum") = sum(row, chk_io_(row,"row_sum"));\
    chk_io_(col,"col_sum_") = sum(row, io_v_(row,col));\
    chk_io_(row,"row_sum_") = sum(col, io_v_(row,col));\
    chk_io_("sum","col_sum_") = sum(col, chk_io_(col,"col_sum_")); \
    chk_io_("sum","row_sum_") = sum(row, chk_io_(row,"row_sum_"));\
    chk_io_(col,"col_diff") = chk_io_(col,"col_sum") - chk_io_(col,"col_sum_"); \
    chk_io_(row,"row_diff") = chk_io_(row,"row_sum") - chk_io_(row,"row_sum_"); \
    chk_io_("sum","col_diff") = chk_io_("sum","col_sum") - chk_io_("sum","col_sum_"); \
    chk_io_("sum","row_diff") = chk_io_("sum","row_sum") - chk_io_("sum","row_sum_"); \
    display chk_io_;

display "@ データ修正前";
mc_chk_io;
mc_chk_va_fd;
mc_chk_imp;
mc_chk_sign_io;
mc_chk_io_;

parameter
    chk_byproduct       副産物のチェック;

chk_byproduct(row,col)$(sum(so, chk_sign_io(row,col,so)) < 0)
    = - sum(so, chk_sign_io(row,col,so));
display chk_byproduct;

*       --------------------------------------------------------------
*       以下でデータを修正
$ontext
・最終需要からマイナスの要素を除去する。
$offtext
display io_fd_;
io_fd_(row,fd,so)$chk_sign_io(row,fd,so) = 0;

$ontext
・輸入需要を増加させたことに対応し、各財の輸入量を増加させる。
$offtext
io_fd_(row,"imp","oth")
    = io_fd_(row,"imp","oth")
    + sum(fd, chk_sign_io(row,fd,"imp"));
display io_fd_;

$ontext
・国内財に対する需要が増加した分については、家計の財の賦存量として組替える。
$offtext
io_fd_(row,"hhc","oth")
    = sum(fd, chk_sign_io(row,fd,"dom"));
display io_fd_;

$ontext
+ 中間投入における負の要素を除去。
+ 副産物して扱う。
+ U表とV表を修正。
$offtext
io_v_(row,col)$chk_byproduct(row,col)
    = io_v_(row,col) + chk_byproduct(row,col);
io_u_(row,col,"dom")$chk_byproduct(row,col) = 0;

display "@ データ修正後";

*       もう一度データの整合性のチェック。マクロの呼出し。
mc_chk_io;
mc_chk_va_fd;
mc_chk_imp;
mc_chk_sign_io;
mc_chk_io_;

*       ----------------------------------------------------------------------
*       労働市場用のパラメータ
display "@ 労働市場用のパラメータ";
$ontext
失業率データ
→ 「労働力調査」の2005年12月: 4.4%
$offtext
parameter
    wc_elas     Wage curve弾力性の値
    v0          ベンチマークの実質賃金
    ur0         ベンチマークの失業率
    unempr0     ベンチマークの失業
;
wc_elas = %wc_elas%;
v0 = 1;
display wc_elas, v0;

*       失業率
ur0 = 4.4 / 100;
ur0 = ur0 * %wc_urate_sc%;
display ur0;

*       --------------------------------------------------------------
*       パラメータの定義
display "@ パラメータの定義";
parameter
        vqq0(*,*)       生産額
        vq0(*)          部門別生産額
;
vqq0(i,j) = io_v_(i,j);
vq0(j) = sum(i, vqq0(i,j));
display vqq0, vq0;

parameters
    vintd0(i,j)         中間投入額
    vintdd0(i,j)        中間投入額(国内財)
    vintdi0(i,j)        中間投入額(輸入財)
    vkd0(j)             資本投入額
    vld0(j)             労動投入額
    vltax0(j)           労働税
    vqtax0(j)           生産税額
;
vintdd0(i,j)$(io_u_(i,j,"dom") > 0) = io_u_(i,j,"dom");
vintdi0(i,j)$(io_u_(i,j,"imp") > 0)  = io_u_(i,j,"imp");
vintd0(i,j) = vintdd0(i,j) + vintdi0(i,j);
display vintdd0, vintdi0, vintd0;

vkd0(j) = io_va_("cap",j);
vld0(j) = io_va_("lab",j);
vltax0(j) = io_va_("ltx",j);
vqtax0(j) = io_va_("idt",j);
display vkd0, vld0, vltax0, vqtax0;

parameters
    sh_nd(j)            土地投入シェア
    sh_rd(j)            資源投入シェア
    vnd0(j)             土地投入
    vrd0(j)             資源投入
;
*       土地、資源の投入額シェアの仮定
sh_nd(j)$agr(j) = 0.5;
sh_rd(j)$f_f(j) = 0.5;
sh_rd(j)$ely_s(j) = 0.5;

vnd0(j) = sh_nd(j) * vkd0(j);
vkd0(j) = vkd0(j) - vnd0(j);

vrd0(j) = sh_rd(j) * vkd0(j);
vkd0(j) = vkd0(j) - vrd0(j);
display vkd0, vnd0, vkd0;

parameters
    vcdd0(i)            民間消費額(国内財)
    vcdi0(i)            民間消費額(輸入財)
    vcd0(i)             民間消費額
    vcon0               総消費額
;
vcdd0(i) = io_fd_(i,"hhc","dom");
vcdi0(i) = io_fd_(i,"hhc","imp");
vcd0(i) = vcdd0(i) + vcdi0(i);
display vcdd0, vcdi0, vcd0;

vcon0 = sum(i, vcd0(i));
display vcon0;

$ontext
・調整項としての役割を果たす変数を導入
$offtext
parameters
    vdem_hh0            家計の財の需要量(これは外生)
;
vdem_hh0(i) = io_fd_(i,"hhc","oth");
display vdem_hh0;

parameters
    vgdd0(i)            政府消費額(国内財)
    vgdi0(i)            政府消費額(輸入財)
    vgd0(i)             政府消費額
    vgov0               総政府消費額
;
vgdd0(i) = io_fd_(i,"gvc","dom");
vgdi0(i) = io_fd_(i,"gvc","imp");
vgd0(i) = vgdd0(i) + vgdi0(i);
vgov0 = sum(i, vgd0(i));
display vgdd0, vgdi0, vgd0, vgov0;

parameters
    vidd0(i)            投資額(国内財)
    vidi0(i)            投資額(輸入財)
    vid0(i)             投資額
    vinv0               総投資額
;
vidd0(i) = io_fd_(i,"inv","dom");
vidi0(i) = io_fd_(i,"inv","imp");
vid0(i) = vidd0(i) + vidi0(i);
vinv0 = sum(i, vid0(i));
display vidd0, vidi0, vid0, vinv0;

parameters
    vexp0(i)            輸出額
    vimp0(i)            輸入額
    vimptax0(i)         関税額
    vimp_0(i)           輸入額(関税額込み)
;
vexp0(i) = io_fd_(i,"exp","oth");
vimp0(i) = - io_fd_(i,"imp","oth");
vimptax0(i) = - io_fd_(i,"imt","oth");
display vexp0, vimp0, vimptax0;

vimp_0(i) = vimp0(i) + vimptax0(i);
display vimp_0;

parameters
    vdo0(i)             国内生産
    vdd0(i)             "国内生産→国内"
    vdx0(i)             "国内生産→輸出"
;
vdo0(i) = sum(j, vqq0(i,j));
display vdo0;

vdx0(i) = vexp0(i);
vdd0(i) = vdo0(i) - vdx0(i);
display vdx0, vdd0;

parameter
    end_res(j)          資源賦存量
    end_lnd(j)          土地賦存量
    end_cap             資本賦存量
    end_res0(j)         資源賦存量(初期値)
    end_lnd0(j)         土地賦存量(初期値)
    end_cap0            資本賦存量(初期値)
;
end_res(j) = vrd0(j);
end_lnd(j) = vnd0(j);
end_cap = sum(j, vkd0(j));
end_res0(j) = end_res(j);
end_lnd0(j) = end_lnd(j);
end_cap0 = end_cap;
;
*       --------------------------------------------------------------
*       余暇・労動
parameter
    end_lab     労動賦存
    end_lab_    労動賦存(Wage curveモデル用)
    vsup0       労動供給
    vlei0       余暇需要
;
*       労動供給
vsup0 = sum(j, vld0(j));

*       労動賦存
end_lab = vsup0;

*       余暇需要
vlei0 = end_lab - vsup0;
display vsup0, end_lab, vlei0;

*       Adjustment labor supply:
end_lab_ = end_lab / (1 - ur0);

*       Benchmark unemployment:
unempr0 = ur0 * end_lab_;
display end_lab, end_lab_, unempr0;

parameter
    vca0_       経常収支(=貿易収支)
    vca0        経常収支(=貿易収支)
;
vca0_(i,"exp") = vexp0(i);
vca0_(i,"imp") = vimp0(i);
vca0_(i,"exp-imp") = vexp0(i) - vimp0(i);
vca0_("sum","exp") = sum(i, vexp0(i));
vca0_("sum","imp") = sum(i, vimp0(i));
vca0_("sum","exp-imp") = sum(i, vexp0(i) - vimp0(i));
display vca0_;

vca0 = vca0_("sum","exp-imp");
display vca0;

parameters
    vsave0      国内への貯蓄額(=国内投資額)
;
vsave0 = vinv0;

parameters
    vutil0      仮想的な効用
;
vutil0 = vsave0$fl_vinv + vcon0;
display vutil0;

parameters
    rt_m        関税率
    rt_q        生産税率
    rt_l        労動税率
    rt_li       労動所得税率
    rt_m0       関税率(初期値)
    rt_q0       生産税率(初期値)
    rt_l0       労動税率(初期値)
    rt_li0      労動所得税率(初期値)
;
rt_m(i) = 0;
rt_m(i)$vimp0(i) = vimptax0(i) / vimp0(i);
display rt_m;

rt_q(j) = 0;
rt_q(j)$vq0(j) = vqtax0(j) / vq0(j);
display rt_q;

rt_l(j) = 0;
rt_l(j)$vld0(j) = vltax0(j) / vld0(j);
display rt_l;

rt_li = 0;
display rt_li;

rt_m0(i) = rt_m(i);
rt_q0(j) = rt_q(j);
rt_l0(j) = rt_l(j);
rt_li0 = rt_li;

*       --------------------------------------------------------------
*       データのチェック
parameter chk_sec_, chk_goods_, chk_va_fd_, chk_imp_;

chk_sec_(j,"cost")
    = sum(i, vintd0(i,j)) + vld0(j) + vltax0(j) + vkd0(j)
    + vnd0(j) + vrd0(j) + vqtax0(j);
chk_sec_(j,"reve")
    = vq0(j);
chk_sec_(j,"profit") = chk_sec_(j,"reve") - chk_sec_(j,"cost");
display chk_sec_;

chk_goods_(i,"dem")
    = sum(j, vintd0(i,j)) + vcd0(i) + vgd0(i) + vid0(i) + vexp0(i)
    + vdem_hh0(i);
chk_goods_(i,"sup")
    = sum(j, vqq0(i,j)) + vimp0(i) + vimptax0(i);
chk_goods_(i,"dem-sup") = chk_goods_(i,"dem") - chk_goods_(i,"sup");

chk_goods_(i,"dem_d")
    = sum(j, vintdd0(i,j)) + vcdd0(i) + vgdd0(i) + vidd0(i)
    + vexp0(i) + vdem_hh0(i);
chk_goods_(i,"sup_d") = sum(j, vqq0(i,j));
chk_goods_(i,"dem-sup_d") = chk_goods_(i,"dem_d") - chk_goods_(i,"sup_d");
display chk_goods_;

chk_va_fd_(j,"va") = vld0(j) + vkd0(j) + vltax0(j) + vqtax0(j) + vnd0(j) + vrd0(j);
chk_va_fd_(i,"fd") = vcd0(i) + vgd0(i) + vid0(i) + vexp0(i)
    - vimp0(i) - vimptax0(i) + vdem_hh0(i);
chk_va_fd_("sum","va") = sum(j, chk_va_fd_(j,"va"));
chk_va_fd_("sum","fd") = sum(i, chk_va_fd_(i,"fd"));
display chk_va_fd_;

chk_imp_(i,"imp")
    = sum(j, vintdi0(i,j)) + vcdi0(i) + vgdi0(i) + vidi0(i);
chk_imp_(i,"imp_") = vimp0(i) + vimptax0(i);
chk_imp_(i,"diff") = chk_imp_(i,"imp") - chk_imp_(i,"imp_");
display chk_imp_;

*       --------------------------------------------------------------
*       一括税額の決定
$ontext
一括税額は政府の財政収支が均衡するように決定。

$offtext
parameter
    vlumpt0     一括税(Lump-sum tax)
    v_g_chk     政府収入・支出のチェック
;
v_g_chk("exp") = vgov0;
v_g_chk("rev") =
    sum(i, rt_m0(i)*vimp0(i))
    + sum(j, rt_l0(j)*vld0(j))
    + sum(j, rt_q0(j)*vq0(j));
v_g_chk("exp-rev") = v_g_chk("exp") - v_g_chk("rev");
display v_g_chk;

vlumpt0 = v_g_chk("exp-rev");
display vlumpt0;

*       --------------------------------------------------------------
*       エネルギー投入
parameters
    vae0(j)     エネルギー投入
    vkle0(j)    エネルギー投入+KL投入
;
vae0(j) = sum(i$ene(i), vintd0(i,j));
vae0(j)$sen(j) = sum(i$e_ene_c(i,j), vintd0(i,j)) + sum(i$ely(i), vintd0(i,j));
display vae0;

vkle0(j) = vae0(j) + vkd0(j) + vld0(j);
display vkle0;

*       --------------------------------------------------------------
*       CO2データ
display "@ CO2データ";
$ontext
CO2 データは 3EID データのものを利用。
$offtext
parameter
    qco2(i,j)   "産業からのCO2"
    qco2c(i)    "家計からのCO2"
    co2use(*)   "CO2(用途別)"
    co2so(i)    "CO2(エネルギー別)"
    co2_2005    "総排出量 (MtCO2)"
    co2_lim     "CO2へのキャップ(MtCO2)"
    co2_lim0    "CO2へのキャップ(MtCO2)"
    co2_lim_f0(j)       産業へのCO2キャップ
    co2_lim_c0          家計へのCO2キャップ
    co2_lim_f(j)        産業へのCO2キャップ
    co2_lim_c           家計へのCO2キャップ
    chk_qco2            チェック用
;
qco2(es,j) = io_co2(es,j);

$ontext
投入金額が0のところはCO2排出量も0にする。
$offtext
chk_qco2(i,j) = 0;
loop((i,j),
    if((io_co2(i,j) and (not vintd0(i,j))),
        chk_qco2(i,j) = io_co2(i,j);
    );
);
display chk_qco2;
qco2(i,j)$chk_qco2(i,j) = 0;
display qco2;

qco2c(es) = io_co2(es,"hhc");
display qco2c;

*       CO2(用途別)
co2use(j) = sum(i, qco2(i,j));
co2use("CON") = sum(i, qco2c(i));
display co2use;

*       CO2(エネルギー別)
co2so(i) = sum(j, qco2(i,j)) + qco2c(i);
display co2so;

*       総排出量 (MtCO2)
co2_2005 = sum(i, co2so(i));
display co2_2005;

co2_lim_f0(j) = sum(i, qco2(i,j));
co2_lim_c0 = sum(i, qco2c(i));
co2_lim_f(j) = co2_lim_f0(j);
co2_lim_c = co2_lim_c0;
display co2_lim_f0, co2_lim_c0;

co2_lim0 = co2_2005;
co2_lim = co2_lim0 * 10;
display co2_lim;

*       --------------------------------------------------------------
*       弾力性パラメータ
display "@ 弾力性パラメータ";
parameters
    e_cc        "EOS: 消費"
    e_ec        "EOS: エネルギー消費財"
    e_nec       "EOS: 非エネルギー消費財"
    e_kl        "EOS: 資本 vs 労動"
    e_res       "EOS: 資源 vs 非資源"
    e_lnd       "EOS: 土地 vs 非土地"
    e_kle       "EOS: 資本・労動 vs エネルギー"
    e_ely       "EOS: 電力 vs 非電力エネルギー投入"
    e_ene       "EOS: エネルギー投入"
    e_dm        "EOS: Armington弾力性"
    e_des       "EOS: 国内供給 vs 輸出供給"
;
e_cc = 0.5;
e_ec = 1;
e_nec = 1;
display e_cc, e_ec, e_nec;

e_kl(j) = 1.0;
e_ely(j) = 0.5 * %eos_ene%;
e_ene(j) = 1.0 * %eos_ene%;
display e_kl, e_ely, e_ene;

e_kle(j) = 0.5;
display e_kle;

e_res(j)$f_f(j) = 0.1;
e_res("e_f") = 0.1;
e_res("e_h") = 0.0;
e_res("e_n") = 0.0;
display e_res;

e_lnd(j) = 0.5;
e_dm(i) = 4;
e_des(i) = 2;
display e_lnd, e_dm, e_des;

*       外生変数用のパラメータ
parameters
    s_f         Scale factor
    s_f_g       Scale factor for gov consumption
    s_f_lab     Scale factor for labo endowment
;
s_f = 1;
s_f_g = 1;
s_f_lab = 1;

*       --------------------------------------------------------------
*       Benchmark data check
parameters
    chk_VA_sec          Value added by sector
    chk_out_sec         Output by sector
    chk_CO2_use         CO2 emissions by sector
    chk_CO2_use_int     "tCO2/Million Yen"
    chk_ely_use
    chk_ind_CO2
    chk_ind_CO2_use     CO2 emissions by sector
    chk_ind_CO2_use_int CO2 emissions by sector
;

chk_ely_use(j,"Value") = vintd0("ely",j);
chk_ely_use("HHC","Value") = vcd0("ely");
chk_ely_use("sum","Value") = sum(j, chk_ely_use(j,"Value")) + chk_ely_use("HHC","Value");

chk_ely_use(j,"%") = 100 * chk_ely_use(j,"Value") / chk_ely_use("sum","Value");
chk_ely_use("HHC","%") = 100 * chk_ely_use("HHC","Value") / chk_ely_use("sum","Value");
chk_ely_use("sum","%") = 100 * chk_ely_use("sum","Value") / chk_ely_use("sum","Value");

display chk_ely_use;

chk_ind_CO2 = sum(i, qco2(i,"e_f"));

display chk_ind_CO2;

chk_VA_sec(j,"Value") = vld0(j) + vkd0(j) + vltax0(j) + vqtax0(j) + vnd0(j) + vrd0(j);
chk_VA_sec("sum","Value") = sum(j, chk_VA_sec(j,"Value"));

chk_VA_sec(j,"%") = 100 * chk_VA_sec(j,"Value") / chk_VA_sec("sum","Value");
chk_VA_sec("sum","%") = 100 * chk_VA_sec("sum","Value") / chk_VA_sec("sum","Value");

display chk_VA_sec;

chk_out_sec(j,"Value") = sum(i, vqq0(i,j));
chk_out_sec("sum","Value") = sum(j, chk_out_sec(j,"Value"));

chk_out_sec(j,"%") = 100 * chk_out_sec(j,"Value") / chk_out_sec("sum","Value");
chk_out_sec("sum","%") = 100 * chk_out_sec("sum","Value") / chk_out_sec("sum","Value");

display chk_out_sec;

chk_CO2_use(j,"MtCO2") = sum(i, qco2(i,j));
chk_CO2_use("HHC","MtCO2") = sum(i, qco2c(i));
chk_CO2_use("sum","MtCO2") = sum(j, chk_CO2_use(j,"MtCO2")) + chk_CO2_use("HHC","MtCO2");

chk_CO2_use(j,"%") = 100 * chk_CO2_use(j,"MtCO2") / chk_CO2_use("sum","MtCO2");
chk_CO2_use("HHC","%") = 100 * chk_CO2_use("HHC","MtCO2") / chk_CO2_use("sum","MtCO2");
chk_CO2_use("sum","%") = 100 * chk_CO2_use("sum","MtCO2") / chk_CO2_use("sum","MtCO2");

display chk_CO2_use;

chk_CO2_use_int(j,"tCO2/M.Yen")$chk_out_sec(j,"Value")
    = 1000 * chk_CO2_use(j,"MtCO2") / chk_out_sec(j,"Value");
chk_CO2_use_int(j,"tCO2/M.Yen(VA)")$chk_VA_sec(j,"Value")
    = 1000 * chk_CO2_use(j,"MtCO2") / chk_VA_sec(j,"Value");

display chk_CO2_use_int;

chk_ind_CO2_use(j,"DE") = chk_CO2_use(j,"MtCO2");
chk_ind_CO2_use("HHC","DE") = chk_CO2_use("HHC","MtCO2");
chk_ind_CO2_use("e_f","DE") = 0;
chk_ind_CO2_use("sum","DE") =
    sum(j, chk_ind_CO2_use(j,"DE")) + chk_ind_CO2_use("HHC","DE");

chk_ind_CO2_use(j,"IDE") =
    0.01 * chk_ely_use(j,"%") * chk_ind_CO2;
chk_ind_CO2_use("HHC","IDE") =
    0.01 * chk_ely_use("HHC","%") * chk_ind_CO2;
chk_ind_CO2_use("sum","IDE") =
    sum(j, chk_ind_CO2_use(j,"IDE")) + chk_ind_CO2_use("HHC","IDE");
    
chk_ind_CO2_use(j,"TE") = chk_ind_CO2_use(j,"DE") + chk_ind_CO2_use(j,"IDE");
chk_ind_CO2_use("HHC","TE") = chk_ind_CO2_use("HHC","DE") + chk_ind_CO2_use("HHC","IDE");
chk_ind_CO2_use("sum","TE") =
    sum(j, chk_ind_CO2_use(j,"TE")) + chk_ind_CO2_use("HHC","TE");

display chk_ind_CO2_use;

chk_ind_CO2_use_int(j,"tCO2/M.Yen")$chk_out_sec(j,"Value")
    = 1000 * chk_ind_CO2_use(j,"TE") / chk_out_sec(j,"Value");
chk_ind_CO2_use_int(j,"tCO2/M.Yen(VA)")$chk_VA_sec(j,"Value")
    = 1000 * chk_ind_CO2_use(j,"TE") / chk_VA_sec(j,"Value");

display chk_ind_CO2_use_int;

$if %bau_check% == 0 $goto model_def
execute_unload ".\results\bau_check.gdx",
    chk_VA_sec, chk_out_sec, chk_CO2_use, chk_CO2_use_int, chk_ind_CO2_use, chk_ely_use, chk_ind_CO2_use_int;
$if not %bau_check% == 0 $goto end

$label model_def

*       ------------------------------------------------------------
*       政策用パラメータ
parameters
    fl_vla      自主的取組のケースでは非ゼロ
    fl_etr      排出量取引による規制なら非ゼロ
    fl_etr_e    ETRから控除される部門があるケースで非ゼロ
    fl_vla_osub 自主的取組+生産補助
;
fl_vla = 0;
fl_etr = 1;
fl_etr_e = 0;
fl_vla_osub(j) = 0;
display fl_vla, fl_etr, fl_etr_e, fl_vla_osub;

option sysout = on;
*       ------------------------------------------------------------
*       モデルの記述
$ontext
+ モデルは MPSGE で記述
$offtext
$ontext

$model:jp_co2

*       Debug options for MPSGE
* $echop:.true.
* $datech:.true.
* $funlog:.true.
    
$sectors:
    q(j)$vq0(j)         ! 生産水準
    adx(i)$vdo0(i)      ! 国内供給・輸出供給の配分
    af(i,j)$vintd0(i,j) ! Armington統合(中間投入)
    ac(i)$vcd0(i)       ! Armington統合(民間消費)
    ag(i)$vgd0(i)       ! Armington統合(政府消費)
    ai(i)$vid0(i)       ! Armington統合(投資)
    ae(j)$vae0(j)       ! Energy統合
    con                 ! 民間消費
    gov                 ! 政府消費
    inv                 ! 投資
    ex(i)$vexp0(i)      ! 輸出
    im(i)$vimp0(i)      ! 輸入
    util                ! (仮想的な)効用
    lsup                ! 労動供給
    
$commodities:
    p(i)                ! 財の価格
    pd(i)$vdd0(i)       ! 国内向け供給価格
    px(i)$vdx0(i)       ! 輸出向け供給価格
    paf(i,j)$vintd0(i,j)        ! Armington統合(中間投入)
    pac(i)$vcd0(i)      ! Armington統合(民間消費)
    pag(i)$vgd0(i)      ! Armington統合(政府消費)
    pai(i)$vid0(i)      ! Armington統合(投資)
    pm(i)$vimp0(i)      ! 輸入財の価格
    pae(j)$vae0(j)      ! Energy統合
    pl                  ! 労動の価格
    pls                 ! 労動の価格
    pk                  ! 資本のレンタルプライス
    pfx                 ! 外国為替の価格
    pgov                ! 政府消費の価格
    pcon                ! 民間消費の価格
    pinv                ! 投資財の価格
    putil               ! (仮想的な)効用の価格
    plnd(j)$vnd0(j)     ! 土地の価格
    pres(j)$vrd0(j)     ! 資源の価格
    pco2$fl_etr         ! 排出枠価格
    pco2f(j)$(fl_vla and reg_f(j) and co2_lim_f0(j))    ! 排出枠価格
    pco2c$fl_vla        ! 排出枠価格

$consumers:
    m_hh                ! 家計の所得
    m_gov               ! 政府の所得

$auxiliary:
    lumpt               ! 一括税
    esl$fl_wc           ! 労動の超過供給
    ur$fl_wc            ! 失業率
    osub(j)$fl_vla_osub(j)      ! 補助金率
    co2_e$fl_etr_e              ! 控除される部門のCO2

*       Energy統合
$prod:ae(j)$(vae0(j) and (not sen(j)))  s:e_ely(j)  ene:e_ene(j)
    o:pae(j)    q:vae0(j)
    i:paf(i,j)$e_nely(i) q:vintd0(i,j)  ene:
    i:paf(i,j)$ely(i)    q:vintd0(i,j)   
    
*       Energy統合 (for PET, COP and G_H)
$prod:ae(j)$(vae0(j) and sen(j))  s:e_ely(j)  ene:e_ene(j)
    o:pae(j)    q:vae0(j)
    i:paf(i,j)$e_ene_c(i,j)     q:vintd0(i,j)  ene:
    i:paf(i,j)$ely(i)           q:vintd0(i,j)

*       生産(農業)
$prod:q(j)$(vq0(j) and agr(j))  t:0  s:e_lnd(j)  nld:0  kle(nld):e_kle(j)  kl(kle):e_kl(j)  
    o:p(i)      q:vqq0(i,j)     p:(1-rt_q0(j))  a:m_gov  t:rt_q(j)
+   a:m_gov  n:osub(j)$fl_vla_osub(j)  m:(-1)$fl_vla_osub(j)
    i:plnd(j)   q:vnd0(j)       
    i:paf(i,j)$(not ene(i))     q:vintd0(i,j)  nld:
    i:pae(j)    q:vae0(j)       kle:
    i:pl        q:vld0(j)       p:(1+rt_l0(j))  a:m_gov  t:rt_l(j)  kl:
    i:pk        q:vkd0(j)       kl:

*       生産(化石燃料)
$prod:q(j)$(vq0(j) and f_f(j))  t:0  s:e_res(j)  nrs:0  kle(nrs):e_kle(j)  kl(kle):e_kl(j)
    o:p(i)      q:vqq0(i,j)     p:(1-rt_q0(j))  a:m_gov  t:rt_q(j)
+   a:m_gov  n:osub(j)$fl_vla_osub(j)  m:(-1)$fl_vla_osub(j)
    i:pres(j)   q:vrd0(j)       
    i:paf(i,j)$(not ene(i))     q:vintd0(i,j)  nrs:
    i:pae(j)    q:vae0(j)       kle:
    i:pl        q:vld0(j)       p:(1+rt_l0(j))  a:m_gov  t:rt_l(j)  kl:
    i:pk        q:vkd0(j)       kl:

*       生産(電力)
$prod:q(j)$(vq0(j) and ely_s(j))  t:0  s:e_res(j)  nrs:0  kle(nrs):e_kle(j) kl(kle):e_kl(j)
    o:p(i)      q:vqq0(i,j)     p:(1-rt_q0(j))  a:m_gov  t:rt_q(j)
+   a:m_gov  n:osub(j)$fl_vla_osub(j)  m:(-1)$fl_vla_osub(j)
    i:pres(j)   q:vrd0(j)       
    i:paf(i,j)$(not ene(i))     q:vintd0(i,j)  nrs:
    i:pae(j)    q:vae0(j)       kle:
    i:pl        q:vld0(j)       p:(1+rt_l0(j))  a:m_gov  t:rt_l(j)  kl:
    i:pk        q:vkd0(j)       kl:

*       生産(PET, COP and G_H)
$prod:q(j)$(vq0(j) and sen(j))  t:0  s:0  kle:e_kle(j)  kl(kle):e_kl(j)
    o:p(i)      q:vqq0(i,j)     p:(1-rt_q0(j))  a:m_gov  t:rt_q(j)
+   a:m_gov  n:osub(j)$fl_vla_osub(j)  m:(-1)$fl_vla_osub(j)
    i:paf(i,j)$(not ene(i))     q:vintd0(i,j)
    i:paf(i,j)$e_ene_nc(i,j)    q:vintd0(i,j)
    i:pae(j)    q:vae0(j)       kle:
    i:pl        q:vld0(j)       p:(1+rt_l0(j))  a:m_gov  t:rt_l(j)  kl:
    i:pk        q:vkd0(j)       kl:

*       生産(その他)
$prod:q(j)$(vq0(j) and oth_s(j))  t:0  s:0  kle:e_kle(j)  kl(kle):e_kl(j)
    o:p(i)      q:vqq0(i,j)     p:(1-rt_q0(j))  a:m_gov  t:rt_q(j)
+   a:m_gov  n:osub(j)$fl_vla_osub(j)  m:(-1)$fl_vla_osub(j)
    i:paf(i,j)$(not ene(i))     q:vintd0(i,j)
    i:pae(j)    q:vae0(j)       kle:
    i:pl        q:vld0(j)       p:(1+rt_l0(j))  a:m_gov  t:rt_l(j)  kl:
    i:pk        q:vkd0(j)       kl:

*       国内供給・輸出供給の配分
$prod:adx(i)$vdo0(i)  t:e_des(i)
    o:px(i)     q:vdx0(i)
    o:pd(i)     q:vdd0(i)
    i:p(i)      q:vdo0(i)

*       Armington統合(中間投入)
$prod:af(i,j)$(vintd0(i,j) and (not es(i)))  s:e_dm(i)
    o:paf(i,j)  q:vintd0(i,j)
    i:pd(i)     q:vintdd0(i,j)
    i:pm(i)     q:vintdi0(i,j)

*       Armington統合(中間投入)
$prod:af(i,j)$(vintd0(i,j) and es(i))  s:0  dm:e_dm(i)
    o:paf(i,j)  q:vintd0(i,j)
    i:pco2$(fl_etr and reg_f(j))        q:qco2(i,j)
    i:pco2f(j)$(fl_vla and reg_f(j))    q:qco2(i,j)
    i:pd(i)     q:vintdd0(i,j)  dm:
    i:pm(i)     q:vintdi0(i,j)  dm:

*       Armington統合(民間消費)
$prod:ac(i)$(vcd0(i) and (not es(i)))  s:e_dm(i)
    o:pac(i)    q:vcd0(i)
    i:pd(i)     q:vcdd0(i)
    i:pm(i)     q:vcdi0(i)

*       Armington統合(民間消費)
$prod:ac(i)$(vcd0(i) and es(i))  s:0  dm:e_dm(i)
    o:pac(i)    q:vcd0(i)
    i:pco2$fl_etr       q:qco2c(i)
    i:pco2c$fl_vla      q:qco2c(i)
    i:pd(i)     q:vcdd0(i)  dm:
    i:pm(i)     q:vcdi0(i)  dm:

*       Armington統合(政府消費)
$prod:ag(i)$vgd0(i)  s:e_dm(i)
    o:pag(i)    q:vgd0(i)
    i:pd(i)     q:vgdd0(i)
    i:pm(i)     q:vgdi0(i)

*       Armington統合(投資)
$prod:ai(i)$vid0(i)  s:e_dm(i)
    o:pai(i)    q:vid0(i)
    i:pd(i)     q:vidd0(i)
    i:pm(i)     q:vidi0(i)

*       民間消費
$prod:con  s:e_cc  ec:e_ec  nec:e_nec
    o:pcon      q:vcon0
    i:pac(i)$ene(i)             q:vcd0(i)  ec:
    i:pac(i)$(not ene(i))       q:vcd0(i)  nec:

*       政府消費
$prod:gov  s:0
    o:pgov      q:vgov0
    i:pag(i)    q:vgd0(i)

*       投資
$prod:inv  s:0
    o:pinv      q:vinv0
    i:pai(i)    q:vid0(i)

*       輸出
$prod:ex(i)$vexp0(i)
    o:pfx       q:vexp0(i)
    i:px(i)     q:vexp0(i)

*       輸入      
$prod:im(i)$vimp0(i)
    o:pm(i)     q:vimp_0(i)
    i:pfx       q:vimp0(i)  p:(1+rt_m0(i))  a:m_gov  t:rt_m(i)

*       (仮想的な)効用    
$prod:util  s:1
    o:putil     q:vutil0
    i:pcon      q:vcon0
    i:pinv$fl_vinv      q:vsave0

*       労動供給
$prod:lsup
    o:pl        q:vsup0
    i:pls       q:vsup0  a:m_gov  t:rt_li

*       --------------------------------------------------------------
*       所得変数

*       家計の所得    
$demand:m_hh
    d:putil     q:vutil0
    e:pk        q:(end_cap*s_f)
    e:plnd(j)   q:(end_lnd(j)*s_f)
    e:pres(j)   q:(end_res(j)*s_f)
    e:pd(i)     q:(-vdem_hh0(i)*s_f)
    e:pfx       q:(-vca0*s_f)
    e:pgov      q:(-vlumpt0)    r:lumpt
    e:pinv$(not fl_vinv)        q:(-vsave0*s_f)
    e:pls$(not fl_wc)   q:(end_lab*s_f*s_f_lab)
    e:pls$fl_wc         q:(end_lab_*s_f*s_f_lab)
    e:pls$fl_wc q:(-1)  r:esl
    
*       政府の所得
$demand:m_gov
    d:pgov      q:vgov0
    e:pgov      q:vlumpt0       r:lumpt
    e:pco2$fl_etr       q:(co2_lim)
    e:pco2$fl_etr_e     q:(-1)  r:co2_e
    e:pco2f(j)$(fl_vla and reg_f(j))    q:(co2_lim_f(j))
    e:pco2c$fl_vla      q:(co2_lim_c)

*       --------------------------------------------------------------
*       制約式

*       一括税の水準
$constraint:lumpt
    gov =e= s_f * s_f_g;

*       ----------------------------------------------------------------------
*       実質賃金への制約(Wage curveモデル)
$constraint:ur$fl_wc
    pl / pcon =e= v0 * (ur / ur0)**(wc_elas);

*       労動の超過供給量
$constraint:esl$fl_wc
    esl - ur * (end_lab_*s_f) =g= 0;

$constraint:osub(j)$fl_vla_osub(j)
    osub(j) * sum(i$vqq0(i,j), p(i)*z_qq(i,j)) =e= pco2f(j)*co2_lim_f(j);
    
*       控除されている部門からのCO2
$constraint:co2_e$fl_etr_e
    co2_e =e=
    sum((i,j)$(es(i) and (not reg_f(j))), qco2(i,j) * af(i,j));

*       --------------------------------------------------------------
*       その他の変数の定義
$report:
    v:z_intd(i,j)       i:paf(i,j)      prod:q(j)       ! 中間投入需要

$report:
    v:z_ld(j)   i:pl    prod:q(j)               ! 労動需要
    v:z_kd(j)   i:pk    prod:q(j)               ! 資本需要
    v:z_nd(j)   i:plnd(j)       prod:q(j)       ! 土地需要
    v:z_rd(j)   i:pres(j)       prod:q(j)       ! 土地需要

$report:
    v:z_qq(i,j) o:p(i)          prod:q(j)       ! 生産量(部門別)
    v:z_qdd(i)  o:pd(i)         prod:adx(i)     ! 国内生産→国内供給
    v:z_qdx(i)  o:px(i)         prod:adx(i)     ! 国内生産→輸出供給
    v:z_qd(i)   i:p(i)          prod:adx(i)     ! 国内生産
    v:z_ae(j)   o:pae(j)        prod:ae(j)      ! Energy統合

$report:
    v:z_ex_i(i) i:px(i)         prod:ex(i)      ! 輸出量
    v:z_im_i(i) i:pfx           prod:im(i)      ! 輸入量

$report:
    v:z_cd(i)   i:pac(i)        prod:con        ! 民間消費需要
    v:z_gd(i)   i:pag(i)        prod:gov        ! 政府消費需要
    v:z_id(i)$fl_vinv   i:pai(i)        prod:inv        ! 投資需要

$report:
    v:z_co2(i,j)$(fl_etr and reg_f(j) and es(i) and qco2(i,j))  i:pco2  prod:af(i,j)  ! CO2排出量(企業)
    v:z_co2c(i)$(fl_etr and es(i) and qco2c(i))  i:pco2  prod:ac(i)  ! CO2排出量(消費)
    v:z_co2(i,j)$(fl_vla and reg_f(j) and es(i) and qco2(i,j))  i:pco2f(j)  prod:af(i,j)  ! CO2排出量(企業)
    v:z_co2c(i)$(fl_vla and es(i) and qco2c(i))  i:pco2c  prod:ac(i)  ! CO2排出量(消費)

$report:
    v:z_util    o:putil         prod:util       ! 仮想的な効用
    v:z_con     o:pcon          prod:con        ! 民間消費
    v:z_inv$fl_vinv  o:pinv     prod:inv        ! 投資
    v:z_gov     o:pgov          prod:gov        ! 政府消費
    v:z_lsup    o:pl    prod:lsup               ! 労働供給
    
$offtext
$sysinclude mpsgeset jp_co2

*       --------------------------------------------------------------
*       変数の初期値
lumpt.lo = -inf;
lumpt.up = +inf;
lumpt.l = 1;

*       排出枠価格の初期値
pco2.l = 0;
pco2f.l(j) = 0;
pco2c.l = 0;

*       ニュメレール
pcon.fx = 1;

*       労動の超過供給
esl.l = 0 + unempr0$fl_wc;
esl.lo = -1e-1;
*       失業率
ur.l = ur0;
ur.lo = -1e-6;

*       補助金率
osub.l(j) = 0;
osub.lo(j) = 0;

*       ----------------------------------------------------------------------
*       Benchmark replication.
display "@ Benchmark replication";
jp_co2.iterlim = 0;
$include jp_co2.gen
solve jp_co2 using mcp;

*       ----------------------------------------------------------------------
*       Cleanup calculation.
display "@ Cleanup calculation";
jp_co2.iterlim = 10000;
$include jp_co2.gen
solve jp_co2 using mcp;

$include sub_results_parameters.gms

$ontext
シナリオ

+ 詳しくは論文。
+ 「VLA_」は「VLA」を計算しやすくするためのシナリオ。分析するシナリオではない。
$offtext
set     scn_all 分析するシナリオ(全部) /
        BAU     基準均衡
        ETR     全ての部門を対象とした排出量取引による削減
        ETR_A   鉄鋼部門を免除したETR
        ETR_B   電力部門を免除したETR
        ETR_C   輸送部門を免除したETR
        ETR_D   電力部門のみを対象としたETR
        ETR_E   電力,鉄鋼,輸送部門のみを対象としたETR
        VLA_
        VLA     自主な行動による削減
        /
        scn_solve(scn_all) 分析するシナリオ(実際に解くもの) /
        BAU
        ETR
        ETR_A
        ETR_B
        ETR_C
        ETR_D
        ETR_E
        VLA_
        VLA
        /
        scn_c(scn_all)
;
alias(scn,scn_solve);

*       ----------------------------------------------------------------------
*       モデルを解くプログラム
$include ./sub_solve_model.gms

*       --------------------------------------------------------------
*       結果
display l_intd, l_cd, l_gd, l_id, l_ex_i, l_im_i, l_util, l_con, l_gov, l_inv,
        l_ex, l_im, l_im_, l_nex, l_gdp, l_income, l_q, l_ld, l_kd, l_p, l_pcon,
        l_pfx, l_ae, l_co2, l_co2_use, l_co2_use_sh, l_co2_so, l_co2t, l_co2_,
        l_pco2, l_pco2f, l_pco2c, l_pco2_, l_ur, l_trd;

*       --------------------------------------------------------------
*       変化率の計算
pc_intd(i,j,scn)$l_intd(i,j,"bau")
    = 100 * (l_intd(i,j,scn) / l_intd(i,j,"bau") - 1) + eps;
pc_cd(i,scn)$l_cd(i,"bau") 
    = 100 * (l_cd(i,scn) / l_cd(i,"bau") - 1) + eps;
pc_gd(i,scn)$l_gd(i,"bau") 
    = 100 * (l_gd(i,scn) / l_gd(i,"bau") - 1) + eps;
pc_id(i,scn)$l_id(i,"bau") 
    = 100 * (l_id(i,scn) / l_id(i,"bau") - 1) + eps;
pc_ex_i(i,scn)$l_ex_i(i,"bau") 
    = 100 * (l_ex_i(i,scn) / l_ex_i(i,"bau") - 1) + eps;
pc_im_i(i,scn)$l_im_i(i,"bau") 
    = 100 * (l_im_i(i,scn) / l_im_i(i,"bau") - 1) + eps;
pc_util(scn)$l_util("bau") 
    = 100 * (l_util(scn) / l_util("bau") - 1) + eps;
pc_con(scn)$l_con("bau") 
    = 100 * (l_con(scn) / l_con("bau") - 1) + eps;
pc_gov(scn)$l_gov("bau") 
    = 100 * (l_gov(scn) / l_gov("bau") - 1) + eps;
pc_inv(scn)$l_inv("bau") 
    = 100 * (l_inv(scn) / l_inv("bau") - 1) + eps;
pc_ex(scn)$l_ex("bau") 
    = 100 * (l_ex(scn) / l_ex("bau") - 1) + eps;
pc_im(scn)$l_im("bau") 
    = 100 * (l_im(scn) / l_im("bau") - 1) + eps;
pc_im_(scn)$l_im_("bau") 
    = 100 * (l_im_(scn) / l_im_("bau") - 1) + eps;
pc_nex(scn)$l_nex("bau") 
    = 100 * (l_nex(scn) / l_nex("bau") - 1) + eps;
pc_gdp(scn)$l_gdp("bau") 
    = 100 * (l_gdp(scn) / l_gdp("bau") - 1) + eps;
pc_income(scn)$l_income("bau") 
    = 100 * (l_income(scn) / l_income("bau") - 1) + eps;
pc_lsup(scn)$l_lsup("bau") 
    = 100 * (l_lsup(scn) / l_lsup("bau") - 1) + eps;
pc_co2t(scn)$l_co2t("bau") 
    = 100 * (l_co2t(scn) / l_co2t("bau") - 1) + eps;
pc_q(j,scn)$l_q(j,"bau") 
    = 100 * (l_q(j,scn) / l_q(j,"bau") - 1) + eps;
pc_qd(i,scn)$l_qd(i,"bau") 
    = 100 * (l_qd(i,scn) / l_qd(i,"bau") - 1) + eps;
pc_q_(j,scn)$l_q_(j,"bau") 
    = 100 * (l_q_(j,scn) / l_q_(j,"bau") - 1) + eps;
pc_ld(j,scn)$l_ld(j,"bau") 
    = 100 * (l_ld(j,scn) / l_ld(j,"bau") - 1) + eps;
pc_ld("sum",scn)$l_ld("sum","bau") 
    = 100 * (l_ld("sum",scn) / l_ld("sum","bau") - 1) + eps;
pc_kd(j,scn)$l_kd(j,"bau") 
    = 100 * (l_kd(j,scn) / l_kd(j,"bau") - 1) + eps;
pc_kd("sum",scn)$l_kd("sum","bau") 
    = 100 * (l_kd("sum",scn) / l_kd("sum","bau") - 1) + eps;
pc_ae(j,scn)$l_ae(j,"bau") 
    = 100 * (l_ae(j,scn) / l_ae(j,"bau") - 1) + eps;
pc_p(i,scn)$l_p(i,"bau") 
    = 100 * (l_p(i,scn) / l_p(i,"bau") - 1) + eps;
pc_pcon(scn)$l_pcon("bau") 
    = 100 * (l_pcon(scn) / l_pcon("bau") - 1) + eps;
pc_pfx(scn)$l_pfx("bau") 
    = 100 * (l_pfx(scn) / l_pfx("bau") - 1) + eps;
pc_wage(scn)$l_wage("bau") 
    = 100 * (l_wage(scn) / l_wage("bau") - 1) + eps;

display pc_intd, pc_cd, pc_gd, pc_id, pc_ex_i, pc_im_i, pc_util, pc_con, pc_gov,
        pc_inv, pc_ex, pc_im, pc_im_, pc_ex, pc_gdp, pc_income, pc_co2t, pc_q,
        pc_lsup, pc_qd, pc_q_, pc_wage, pc_ld, pc_kd, pc_p, pc_pcon, pc_pfx,
        pc_ae;

d_qd(i,scn)$l_qd(i,"bau") = l_qd(i,scn) - l_qd(i,"bau") + eps;
d_q_(j,scn)$l_q_(j,"bau") = l_q_(j,scn) - l_q_(j,"bau") + eps;
d_nex(scn) = l_nex(scn) - l_nex("bau") + eps;
d_ld(j,scn)$l_ld(j,"bau") = l_ld(j,scn) - l_ld(j,"bau") + eps;
d_ld("sum",scn)$l_ld("sum","bau") = l_ld("sum",scn) - l_ld("sum","bau") + eps;
d_kd(j,scn)$l_kd(j,"bau") = l_kd(j,scn) - l_kd(j,"bau") + eps;
d_kd("sum",scn)$l_kd("sum","bau") = l_kd("sum",scn) - l_kd("sum","bau") + eps;

display d_qd, d_q_, d_nex, d_ld, d_kd;

l_summary("CO2_",scn) = l_co2t(scn) + eps;
l_summary("PCO2(1000yen/t)",scn) = l_pco2(scn) + eps;
l_summary("INC_",scn) = l_income(scn) + eps;
l_summary("GDP_",scn) = l_gdp(scn) + eps;
l_summary("CON_",scn) = l_con(scn) + eps;
l_summary("GOV_",scn) = l_gov(scn) + eps;
l_summary("INV_",scn) = l_inv(scn) + eps;
l_summary("EX_",scn) = l_ex(scn) + eps;
l_summary("IM_",scn) = l_im_(scn) + eps;
l_summary("LSUP_",scn) = l_lsup(scn) + eps;
l_summary("UTIL_",scn) = l_util(scn) + eps;
l_summary("UR_",scn) = l_ur(scn) + eps;
l_summary("PCO2_(1000yen/t)",scn) = l_pco2_(scn) + eps;

pc_summary("CO2_",scn) = pc_co2t(scn) + eps;
pc_summary("PCO2(1000yen/t)",scn) = l_pco2(scn) + eps;
pc_summary("INC_",scn) = pc_income(scn) + eps;
pc_summary("GDP_",scn) = pc_gdp(scn) + eps;
pc_summary("CON_",scn) = pc_con(scn) + eps;
pc_summary("GOV_",scn) = pc_gov(scn) + eps;
pc_summary("INV_",scn) = pc_inv(scn) + eps;
pc_summary("EX_",scn) = pc_ex(scn) + eps;
pc_summary("IM_",scn) = pc_im_(scn) + eps;
pc_summary("LSUP_",scn) = pc_lsup(scn) + eps;
pc_summary("UTIL_",scn) = pc_util(scn) + eps;
pc_summary("UR_",scn) = l_ur(scn) + eps;
pc_summary("PCO2_(1000yen/t)",scn) = l_pco2_(scn) + eps;

display chk_pcon_m;
display l_summary, pc_summary;

bau_check("CO2_") = l_summary("CO2_","bau");
bau_check("INC_") = l_summary("INC_","bau");
bau_check("GDP_") = l_summary("GDP_","bau");

display bau_check;

*       GDX ファイルに結果を出力
execute_unload ".\results\%scn_name%_results.gdx", l_summary, pc_summary, pc_q,
    l_q, pc_qd, d_qd, pc_q_, d_q_, bau_check;

$label end

execute 'del titlemaker_%scn_name%.cmd';


* --------------------
* Local Variables:
* mode: gams
* fill-column: 80
* coding: sjis-dos
* End: