* This version is used for Wei and Liu (2017). Estimation of global rebound effect caused by energy efficiency improvement. Energy Economics 66 (2017) 27-34 $if not set ds $set ds iaee $INCLUDE GTAP_input_header $INCLUDE GTAP_input_main $INCLUDE Zvalues_header $INCLUDE Zvalues_main $INCLUDE scenarios_declare $INCLUDE emissions $INCLUDE elasticities $INCLUDE closure $INCLUDE time_declare $INCLUDE mpsge_all ** Single run to calibrate the base-year data and provide an initial equilibrium ** After the base-year equilibrium is obtained, then the single run should be deactivated by setting, e.g. "loop(SIM$(ord(SIM)=0)" Parameter modstat(SIM) model statement; *loop(SIM$(ord(SIM)=1), loop(SIM$(ord(SIM)=0), Loop(t$(ord(t)=1), calib_toggle = 1 ; calib_KHAT(r) = 0; KHAT0.L(r) = KHAT(r) ; $INCLUDE GRACE.GEN GLOBTRST.FX= GLOBTRUST; GRACE.optfile =1; option savepoint=1; SOLVE GRACE USING MCP; IF (((GRACE.modelstat <> 1) OR (GRACE.solvestat <> 1)), modstat(SIM) = 0; abort$(modstat(SIM)=0) "Couldn't solve!"; ELSE modstat(SIM) = 1; ); loop(tmax$(sum((f,r)$(not fnat(f)),sqr(EFFTFP.L(f,r)-1))>0.000001), eff_if(f,a,i,r)$(not fnat(f)) = eff_if(f,a,i,r)*(1+EFFTFP.L(f,r))/2 ; $INCLUDE GRACE.GEN GLOBTRST.FX= GLOBTRUST; option savepoint=1; SOLVE GRACE USING MCP; IF (((GRACE.modelstat <> 1) OR (GRACE.solvestat <> 1)), modstat(SIM) = 0; abort$(modstat(SIM)=0) "Couldn't solve!"; ELSE modstat(SIM) = 1; ); ); $INCLUDE time_define ); IO_ABSZ(y,a,yy,r) = IO_ABS.L(y,a,yy,r) ; FD_ABSZ(y,j,r) = FD_ABS.L(y,j,r) ; EFFTFPZ(f,r) = EFFTFP.L(f,r) ; EFFTFP_SZ(f,y,r) = EFFTFP_S.L(f,y,r) ; CAPAZ(a,y,r) = CAPA.L(a,y,r) ; TS_PrimenZ(y,r) = TS_Primen.L(y,r) ; KHAT(r) = KHAT0.L(r) ; calib_KHAT(r) = 0; execute_unload 'Zvalues.gdx', PFAZ,tFD,PFDZ,PIMZ,PDAZ,CAPAZ P_IOZ,PTMZ,dDEP,KHAT,EXRZ,FDZ, FDZ,TRNZ,FTOT,GLOBTRUST,GLOBTRUSTSHARE IFZ,IFAZ,IMZ,IMTOTZ,INVZ,IOZ,IOAZ, TRNZ, XDZ,REGINCZ,SAVZ, VKBZ,GDPZ,EMSTOTZ,FOSSZ VKEZ,TRANRZ,XZ,XDAZ,XDDZ,SAVINGS,GDPgZ,EFFTFPZ,EFFTFP_SZ,TS_PrimenZ PPZ,PERMITZ,FreeF_SH,NFreeF_SH,C_toggle,calib_toggle,Csub_toggle,calib_capa,calib_primen,calib_GDP,calib_KHAT evf,evh,eR,eM,eVA,eKLE,eENE,eNEL,eJTOP,eJENE,eJNEN,eARM,eIMP,ty,ti,tf,tx,tm eff_xd,eff,eff_f,eff_if,eghga_io,eghga_hh,IO_ABSZ,FD_ABSZ , ROREZ, RORGFLEX Prim_eng,Prim_enZ,Ctrad_toggle ,eRG VKE.L,RORE.L,INV.L,PINDEX.L,PINDEXW.L,GDP.L,EMSTOT.L,FOSS.L,EFFTFP.L,EFFTFP_S.L,PERMIT.L,tflnd.L,gene_gz,gene_g_t ; ); ** end of single run * Loop Section option solprint=off option savepoint=0; ** multiple period run LOOP(SIM$SIMCUR(SIM), * Loop(t$(ord(t)<=0), Loop(t$(ord(t)<=card(t)), If(ord(t) =1, t_size = 1; execute_load 'Zvalues.gdx', PFAZ,tFD,PFDZ,PIMZ,PDAZ,CAPAZ P_IOZ,PTMZ,dDEP,KHAT,EXRZ,FDZ, FDZ,TRNZ,FTOT,GLOBTRUST,GLOBTRUSTSHARE IFZ,IFAZ,IMZ,IMTOTZ,INVZ,IOZ,IOAZ, TRNZ, XDZ,REGINCZ,SAVZ, VKBZ,GDPZ,EMSTOTZ,FOSSZ VKEZ,TRANRZ,XZ,XDAZ,XDDZ,SAVINGS,GDPgZ,EFFTFPZ,EFFTFP_SZ,TS_PrimenZ ,eRG PPZ,PERMITZ,FreeF_SH,NFreeF_SH, C_toggle,calib_toggle,Csub_toggle,calib_capa,calib_primen,calib_GDP,calib_KHAT evf,evh,eR,eM,eVA,eKLE,eENE,eNEL,eJTOP,eJENE,eJNEN,eARM,eIMP,ty,ti,tf,tx,tm eff_xd,eff,eff_f,eff_if,eghga_io,eghga_hh,gene_gz,IO_ABSZ,FD_ABSZ,ROREZ, RORGFLEX Prim_eng,Prim_enZ,Ctrad_toggle ,eRG VKE.L,RORE.L,INV.L,PINDEX.L,PINDEXW.L,GDP.L,EMSTOT.L,FOSS.L,EFFTFP.L,EFFTFP_S.L,PERMIT.L,tflnd.L,gene_gz,gene_g_t ; execute_loadpoint 'GRACE_p.gdx'; $if exist efftfp.gdx calib_toggle = 0; * Sensitivity analysis with respect to values of specific elasticities * eKLE(i,r) = 0.1; * eJTOP(j,r) = 0.05; else t_size = 1; ); * Calibrate the BAU scenario by setting "calib_toggle = 1" * calib_toggle = 1; calib_toggle = 0; calib_KHAT(r) = 0; * Determine the price normalization by the fixed GLOBTRST GLOBTRST.FX= GLOBTRUST; $INCLUDE scenarios_define $INCLUDE GRACE.GEN GRACE.iterlim =2e+9; GRACE.RESLIM = 10000000 ; GRACE.optfile = 1 ; SOLVE GRACE USING MCP; IF (((GRACE.modelstat <> 1) OR (GRACE.solvestat <> 1)), modstat(SIM) = 0; abort$(modstat(SIM)=0) "Couldn't solve!"; ELSE modstat(SIM) = 1; ); * Calibrate productivity of labor and capital to obtain the exogeous GDP growth and energy consumption in BAU loop(tmax$((sum((f,r)$(not fnat(f)),sqr(EFFTFP.L(f,r)-1))>0.0001) and calib_toggle), eff_if(f,a,i,r)$((not ie(i)) and (not fnat(f))) = eff_if(f,a,i,r)*(1+(EFFTFP.L(f,r)-1)/(2$fcap(f)+2$flab(f)) ) ; eff_if(f,a,i,r)$((not ie(i)) and fnat(f) and rdvp(r)) = eff_if(f,a,i,r)*(1+(EFFTFP.L('LAB',r)-1)/2.5) ; $INCLUDE GRACE.GEN GLOBTRST.FX= GLOBTRUST; SOLVE GRACE USING MCP; IF (((GRACE.modelstat <> 1) OR (GRACE.solvestat <> 1)), modstat(SIM) = 0; abort$(modstat(SIM)=0) "Couldn't solve!"; ELSE modstat(SIM) = 1; ); ); $INCLUDE time_define * Save calibrated parameters for BAU if ((calib_toggle = 1), execute_unload 'efftfp.gdx', f,r,t,EFFTFP_T = efftfpz_T, EFFTFP_S_T = efftfp_sz_T, eff_T,eff_f_T,eff_if_T=eff_if_T_,eghga_abz_T TS_Primen_T=TS_PrimenZ_T,CAPA_T = CAPAZ_T; ); * Save simulation results, updated yearly execute_unload '%ds%_res.gdx', y, r, f, j,jr, ghga, SIM,calib_toggle FD_T,FD_ABS_T,IFAF_T,IFANFr_T, IM_T,IO_ABS_T,IF_ABS_T,IF_ABSr_T, TRANS_T,X_T,XD_T, XDA_T P_C_T,P_IO_T,P_T,PCAP_T,PD_T,PDA_T,PF_T,PFF_T,PFNF_T,PFA_T,PFD_T,PI_T,PIM_T,PS_T,PT_T,PTRANS_T, PP_T GLOBANK_T,GLOBTRST_T,INC_T,REGINC_T INV_T,RORE_T,ROREZ_T,VKE_T,GDP_T,EMSTOT_T,PINDEX_T,PINDEXW_T,FOSS_T, PERMIT_T, tflnd_T,KHAT_T, FreeF_SH_T FDr_T,FD_ABSr_T,IFAr_T,IMr_T,IO_ABSr_T,TRANSr_T,Xr_T,XDr_T,XDAr_T,PERMITr_T,PERMITrN_T P_IOr_T,PFAr_T INVr_T,VKEr_T,GDPr_T,EMSTOTr_T,FOSSr_T,FTOT_T EXRr_T,VTWRr_T,XDDr_T,TRANRr_T, SAVr_T,IMc_T,EXc_T,EX_IM_BAL_T eRG,calib_capa,calib_primen,calib_GDP, calib_KHAT GLOBTRUSTSHARE_T,eff_xd_T,eff_if_T,eff_T,eff_f_T,NFreeF_SH_T,EFFTFP_T,EFFTFP_S_T,CAPA_T,TS_Primen_T eghga_hh2_T,eghga_io_T c_LAB_T,c_CAP_T,eKLE_T,eNEL_T,CO2_ffA_T,gene_g_t,gene_t,eff_ifg ; $INCLUDE intertemporal ); ); ** end of multiple period run