Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
R
remind
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Jerome Hilaire
remind
Merge requests
!19
add documentation
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
add documentation
github/fork/LaviniaBaumstark/develop
into
develop
Overview
0
Commits
3
Pipelines
0
Changes
5
Merged
Jerome Hilaire
requested to merge
github/fork/LaviniaBaumstark/develop
into
develop
5 years ago
Overview
0
Commits
3
Pipelines
0
Changes
5
Expand
Created by: LaviniaBaumstark
0
0
Merge request reports
Viewing commit
6adabc3c
Prev
Next
Show latest version
5 files
+
227
−
135
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
5
Search (e.g. *.vue) (Ctrl+P)
6adabc3c
add documentation for the module 15_climate (done by Jessi)
· 6adabc3c
Lavinia Baumstark
authored
5 years ago
modules/15_climate/box/equations.gms
+
179
−
116
Options
@@ -8,129 +8,192 @@
ta2ttot10(ta10, ttot)$((ttot.val lt ta10.val) AND (pm_ttot_val(ttot+1) gt ta10.val)AND (ttot.val ge 2005)) = Yes;
display ttot2ta10, ta2ttot10;
*** taken from box-model.inc ---------------------------
*** carbon cycle
* AL changed towards an IRF Model with 2 or 3 time scales
***---------------------------------------------------------------------------
*' Carbon Cycle. CO2 concentration is calculated using and Impulse-Response-Function Model with 3 time scales
***---------------------------------------------------------------------------
q15_cc(ta10)$(ord(ta10) ge 1)..
v15_conc(ta10,'CO2') =e= s15_c0 + ((s15_c2000-s15_c0)/(s15_ca0*s15_cq0+s15_ca1*s15_cq1+s15_ca2*s15_cq2+s15_ca3*s15_cq3))*
(s15_ca0*s15_cq0 + s15_ca1*s15_cq1*exp(-(ord(ta10)-1)/s15_ctau1) + s15_ca2*s15_cq2*exp(-(ord(ta10)-1)/s15_ctau2) + s15_ca3*s15_cq3*exp(-(ord(ta10)-1)/s15_ctau3))+
s15_cconvi*sum((tx)$(ord(tx)lt ord(ta10)),v15_emi(tx,'CO2')*p15_epsilon(ta10-ord(tx)));
*** N20 concentration (from ACC2)
q15_concN2OQ(ta10) $(Ord(ta10) GT 1) .. (v15_conc(ta10,'N2O')-v15_conc(ta10-1,'N2O'))/s15_DELTAT =E= 0.5*
((1/s15_CNVN2O*(v15_emi(ta10,'N2O')+ s15_NATN2O)-(1/s15_TAUN2O*(v15_conc(ta10,'N2O')/s15_CONN2O2000R)**(-s15_SENTAUN2O)*v15_conc(ta10,'N2O')))+
(1/s15_CNVN2O*(v15_emi(ta10-1,'N2O')+ s15_NATN2O)-(1/s15_TAUN2O*(v15_conc(ta10-1,'N2O')/s15_CONN2O2000R)**(-s15_SENTAUN2O)*v15_conc(ta10-1,'N2O'))));
*** end of stuff taken from box-model.inc ---------------------------
*** taken from box-model.inc ---------------------------
q15_concCH4Q(ta10) $(Ord(ta10) GT 1) .. (v15_conc(ta10,'CH4')-v15_conc(ta10-1,'CH4'))/s15_DELTAT =E= 0.5*
((1/s15_CNVCH4*(v15_emi(ta10,'CH4')+ s15_NATCH4)-
(p15_conroh(ta10)/s15_TAUCH4OH+1/s15_TAUCH4SS)*v15_conc(ta10,'CH4'))+
(1/s15_CNVCH4*(v15_emi(ta10-1,'CH4')+ s15_NATCH4)-
(p15_conroh(ta10-1)/s15_TAUCH4OH+1/s15_TAUCH4SS)*v15_conc(ta10-1,'CH4')));
*** CH4 radiative forcing (from ACC2)
q15_forcCH4Q(ta10) .. v15_forcComp(ta10,'CH4') =E= s15_RHOCH4*(SQRT(v15_conc(ta10,'CH4'))-SQRT(s15_CONCH4PRE))
-s15_OVERLFAC1*LOG(1+s15_OVERLFAC2*(v15_conc(ta10,'CH4')*s15_CONN2OPRE)**s15_OVERLEXP1+
s15_OVERLFAC3*v15_conc(ta10,'CH4')*(v15_conc(ta10,'CH4')*s15_CONN2OPRE)**s15_OVERLEXP2)
+s15_OVERLFAC1*LOG(1+s15_OVERLFAC2*(s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP1+
s15_OVERLFAC3*s15_CONCH4PRE*(s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP2);
*** N2O radiative forcing (from ACC2)
q15_forcN2OQ(ta10) .. v15_forcComp(ta10,'N2O') =E= s15_RHON2O*(SQRT(v15_conc(ta10,'N2O'))-SQRT(s15_CONN2OPRE))
-s15_OVERLFAC1*LOG(1+s15_OVERLFAC2*(s15_CONCH4PRE*v15_conc(ta10,'N2O'))**s15_OVERLEXP1+
s15_OVERLFAC3*s15_CONCH4PRE*(s15_CONCH4PRE*v15_conc(ta10,'N2O'))**s15_OVERLEXP2)
+s15_OVERLFAC1*LOG(1+s15_OVERLFAC2*(s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP1+
s15_OVERLFAC3*s15_CONCH4PRE*(s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP2);
*AL* changed towards the ACC2 approach to use the foghg
*** so2 radiative forcing module
q15_forcso2(ta10)..
v15_forcComp(ta10,'SO2') =e= s15_dso1990 * v15_emi(ta10,'SO2') / s15_so1990 +
s15_iso1990 * log(1 + v15_emi(ta10,'SO2')/s15_enatso2) /
log(1 + s15_so1990/s15_enatso2) ;
v15_conc(ta10,'CO2')
=e=
s15_c0 + ((s15_c2000-s15_c0)/(s15_ca0*s15_cq0+s15_ca1*s15_cq1+s15_ca2*s15_cq2+s15_ca3*s15_cq3))
* (s15_ca0*s15_cq0 + s15_ca1*s15_cq1*exp(-(ord(ta10)-1)/s15_ctau1) + s15_ca2*s15_cq2*exp(-(ord(ta10)-1)/s15_ctau2) + s15_ca3*s15_cq3*exp(-(ord(ta10)-1)/s15_ctau3))
+ s15_cconvi * sum((tx)$(ord(tx)lt ord(ta10)),v15_emi(tx,'CO2')*p15_epsilon(ta10-ord(tx)));
***---------------------------------------------------------------------------
*' CH4 concentration
***---------------------------------------------------------------------------
q15_concCH4Q(ta10)$(Ord(ta10) GT 1)..
(v15_conc(ta10,'CH4')-v15_conc(ta10-1,'CH4'))/s15_DELTAT
=e=
0.5 * (
(1/s15_CNVCH4 * (v15_emi(ta10,'CH4')+ s15_NATCH4) - (p15_conroh(ta10) / s15_TAUCH4OH + 1 / s15_TAUCH4SS) * v15_conc(ta10,'CH4'))
+ (1/s15_CNVCH4*(v15_emi(ta10-1,'CH4') + s15_NATCH4) - (p15_conroh(ta10-1) / s15_TAUCH4OH + 1 / s15_TAUCH4SS) * v15_conc(ta10-1,'CH4'))
);
***---------------------------------------------------------------------------
*' N20 concentration (from ACC2)
***---------------------------------------------------------------------------
q15_concN2OQ(ta10)$(Ord(ta10) GT 1)..
(v15_conc(ta10,'N2O')-v15_conc(ta10-1,'N2O'))/s15_DELTAT
=e=
0.5 * (
(1/s15_CNVN2O * (v15_emi(ta10,'N2O')+ s15_NATN2O) - (1/s15_TAUN2O*(v15_conc(ta10,'N2O')/s15_CONN2O2000R)**(-s15_SENTAUN2O)*v15_conc(ta10,'N2O')))
+ (1/s15_CNVN2O * (v15_emi(ta10-1,'N2O') + s15_NATN2O) - (1/s15_TAUN2O*(v15_conc(ta10-1,'N2O')/s15_CONN2O2000R)**(-s15_SENTAUN2O)*v15_conc(ta10-1,'N2O')))
);
***---------------------------------------------------------------------------
*' CO2 radiative forcing
***---------------------------------------------------------------------------
q15_forcco2(ta10)..
v15_forcComp(ta10,'CO2')
=e=
s15_fcodb * log(v15_conc(ta10,'CO2')/s15_c0) / log(2) ;
***---------------------------------------------------------------------------
*' CH4 radiative forcing (from ACC2)
***---------------------------------------------------------------------------
q15_forcCH4Q(ta10)..
v15_forcComp(ta10,'CH4')
=e=
s15_RHOCH4 * (SQRT(v15_conc(ta10,'CH4')) - SQRT(s15_CONCH4PRE))
- s15_OVERLFAC1 * LOG(1 + s15_OVERLFAC2 *(v15_conc(ta10,'CH4') * s15_CONN2OPRE)**s15_OVERLEXP1
+ s15_OVERLFAC3 * v15_conc(ta10,'CH4') * (v15_conc(ta10,'CH4')*s15_CONN2OPRE)**s15_OVERLEXP2
)
+ s15_OVERLFAC1 * LOG(1 + s15_OVERLFAC2 * (s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP1
+ s15_OVERLFAC3 * s15_CONCH4PRE * (s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP2
);
***---------------------------------------------------------------------------
*' N2O radiative forcing (from ACC2)
***---------------------------------------------------------------------------
q15_forcN2OQ(ta10)..
v15_forcComp(ta10,'N2O')
=e=
s15_RHON2O * (SQRT(v15_conc(ta10,'N2O'))-SQRT(s15_CONN2OPRE))
- s15_OVERLFAC1 * LOG(1 + s15_OVERLFAC2 * (s15_CONCH4PRE*v15_conc(ta10,'N2O'))**s15_OVERLEXP1
+ s15_OVERLFAC3 * s15_CONCH4PRE * (s15_CONCH4PRE*v15_conc(ta10,'N2O'))**s15_OVERLEXP2
)
+ s15_OVERLFAC1 * LOG(1 + s15_OVERLFAC2 * (s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP1
+ s15_OVERLFAC3 * s15_CONCH4PRE * (s15_CONCH4PRE*s15_CONN2OPRE)**s15_OVERLEXP2
);
***---------------------------------------------------------------------------
*' SO2 radiative forcing
***---------------------------------------------------------------------------
q15_forcso2(ta10)..
v15_forcComp(ta10,'SO2')
=e=
s15_dso1990 * v15_emi(ta10,'SO2') / s15_so1990
+ s15_iso1990 * log(1 + v15_emi(ta10,'SO2')/s15_enatso2) / log(1 + s15_so1990/s15_enatso2) ;
*** BC and OC from fossil fuels forcing
q15_forcbc(ta10)..
v15_forcComp(ta10,'BC') =e= (v15_emi(ta10,'BC') / s15_bc2005) * p15_oghgf_ffbc('2005');
***---------------------------------------------------------------------------
*' BC and OC from fossil fuels radiative forcing; scales linear with emissions.
***---------------------------------------------------------------------------
q15_forcbc(ta10)..
v15_forcComp(ta10,'BC')
=e=
(v15_emi(ta10,'BC') / s15_bc2005) * p15_oghgf_ffbc('2005');
q15_forcoc(ta10)..
v15_forcComp(ta10,'OC') =e= (v15_emi(ta10,'OC') / s15_oc2005) * p15_oghgf_ffoc('2005');
*** co2 radiative forcing module
q15_forcco2(ta10)..
v15_forcComp(ta10,'CO2') =e= s15_fcodb * log(v15_conc(ta10,'CO2')/s15_c0) / log(2) ;
*** total radiative forcing (foghg given exogenously)
q15_forctotal(ta10)..
v15_forcComp(ta10,'TTL') =e= v15_forcComp(ta10,'CO2') +
v15_forcComp(ta10,'SO2') +
v15_forcComp(ta10,'CH4') +
v15_forcComp(ta10,'N2O') +
v15_forcComp(ta10,'BC') +
v15_forcComp(ta10,'OC') +
v15_forcComp(ta10,'oghg_nokyo') +
v15_forcComp(ta10,'oghg_kyo');
q15_forcoc(ta10)..
v15_forcComp(ta10,'OC')
=e=
(v15_emi(ta10,'OC') / s15_oc2005) * p15_oghgf_ffoc('2005');
***---------------------------------------------------------------------------
*' Total radiative forcing (foghg given exogenously)
***---------------------------------------------------------------------------
q15_forctotal(ta10)..
v15_forcComp(ta10,'TTL')
=e=
hv15_forcComp(ta10,'CO2')
+ v15_forcComp(ta10,'SO2')
+ v15_forcComp(ta10,'CH4')
+ v15_forcComp(ta10,'N2O')
+ v15_forcComp(ta10,'BC')
+ v15_forcComp(ta10,'OC')
+ v15_forcComp(ta10,'oghg_nokyo')
+ v15_forcComp(ta10,'oghg_kyo');
*GL: Total forcing of Kyoto gases - required for formulation of policy targets
q15_forc_kyo(ta10)..
v15_forcKyo(ta10) =e= v15_forcComp(ta10,'CO2') +
v15_forcComp(ta10,'CH4') +
v15_forcComp(ta10,'N2O') +
v15_forcComp(ta10,'oghg_kyo');
*JeS* rcp forcing
q15_forc_rcp(ta10)..
v15_forcRcp(ta10) =e= v15_forcComp(ta10,'CO2') +
v15_forcComp(ta10,'CH4') +
v15_forcComp(ta10,'N2O') +
v15_forcComp(ta10,'oghg_kyo') +
v15_forcComp(ta10,'SO2') +
v15_forcComp(ta10,'BC') +
v15_forcComp(ta10,'OC') +
v15_forcComp(ta10,'oghg_nokyo_rcp');
***---------------------------------------------------------------------------
*' Total radiative forcing of Kyoto gases
***---------------------------------------------------------------------------
q15_forc_kyo(ta10)..
v15_forcKyo(ta10)
=e=
v15_forcComp(ta10,'CO2')
+ v15_forcComp(ta10,'CH4')
+ v15_forcComp(ta10,'N2O')
+ v15_forcComp(ta10,'oghg_kyo');
***---------------------------------------------------------------------------
*' RCP forcing
***---------------------------------------------------------------------------
q15_forc_rcp(ta10)..
v15_forcRcp(ta10)
=e=
v15_forcComp(ta10,'CO2')
+ v15_forcComp(ta10,'CH4')
+ v15_forcComp(ta10,'N2O')
+ v15_forcComp(ta10,'oghg_kyo')
+ v15_forcComp(ta10,'SO2')
+ v15_forcComp(ta10,'BC')
+ v15_forcComp(ta10,'OC')
+ v15_forcComp(ta10,'oghg_nokyo_rcp');
*** new temperature equations
q15_clisys1(ta10) $(Ord(ta10) > 1) .. (v15_tempFast(ta10)-v15_tempFast(ta10-1))/s15_deltat_box =E= 0.5/s15_RPCTT1*
((s15_RPCTA1*v15_forcComp(ta10,'TTL')/3.7-v15_tempFast(ta10))+
(s15_RPCTA1*v15_forcComp(ta10-1,'TTL')/3.7-v15_tempFast(ta10-1)));
q15_clisys2(ta10) $(Ord(ta10) > 1) .. (v15_tempSlow(ta10)-v15_tempSlow(ta10-1))/s15_deltat_box =E= 0.5/s15_RPCTT2*
((s15_RPCTA2*v15_forcComp(ta10,'TTL')/3.7-v15_tempSlow(ta10))+
(s15_RPCTA2*v15_forcComp(ta10-1,'TTL')/3.7-v15_tempSlow(ta10-1)));
q15_clisys(ta10) .. v15_temp(ta10) =E= v15_tempFast(ta10) + v15_tempSlow(ta10);
q15_clisys01(ta10) $(ord(ta10)=1)..
v15_tempFast(ta10) =e= s15_RPCTA1 * s15_temp2000/s15_tsens;
q15_clisys02(ta10) $(ord(ta10)=1)..
v15_tempSlow(ta10) =e= s15_RPCTA2 * s15_temp2000/s15_tsens;
*JeS* forcing overshoot for damage function
***---------------------------------------------------------------------------
*' Temperature equations, consisting of a fast and a slow response function
***---------------------------------------------------------------------------
q15_clisys01(ta10)$(ord(ta10)=1)..
v15_tempFast(ta10)
=e=
s15_RPCTA1 * s15_temp2000 / s15_tsens;
q15_clisys02(ta10)$(ord(ta10)=1)..
v15_tempSlow(ta10)
=e=
s15_RPCTA2 * s15_temp2000 / s15_tsens;
q15_clisys1(ta10)$(Ord(ta10) > 1)..
(v15_tempFast(ta10) - v15_tempFast(ta10-1)) / s15_deltat_box
=e=
0.5 / s15_RPCTT1 * ( (s15_RPCTA1 * v15_forcComp(ta10,'TTL') / 3.7 - v15_tempFast(ta10))
+ (s15_RPCTA1 * v15_forcComp(ta10-1,'TTL') / 3.7 - v15_tempFast(ta10-1))
);
q15_clisys2(ta10)$(Ord(ta10) > 1)..
(v15_tempSlow(ta10) - v15_tempSlow(ta10-1)) / s15_deltat_box
=e=
0.5 / s15_RPCTT2 * ( (s15_RPCTA2 * v15_forcComp(ta10,'TTL') / 3.7 - v15_tempSlow(ta10))
+ (s15_RPCTA2 * v15_forcComp(ta10-1,'TTL') / 3.7 - v15_tempSlow(ta10-1))
);
q15_clisys(ta10)..
v15_temp(ta10)
=e=
v15_tempFast(ta10) + v15_tempSlow(ta10);
***---------------------------------------------------------------------------
*' Forcing overshoot for damage function
***---------------------------------------------------------------------------
q15_forc_os(t)..
vm_forcOs(t) =E= v15_forcKyo(t)-s15_gr_forc_kyo+v15_slackForc(t);
*** end of stuff taken from box-model.inc ---------------------------
*-----------------------------------------------------------------------------------------
*** ------------------------link to core--------------------------------------------------
*-----------------------------------------------------------------------------------------
q15_linkEMI(ttot2ta10(ttot, ta10),emis2climate10(enty,FOB10)).. vm_emiAllGlob(ttot,enty) =e= v15_emi(ta10,FOB10);
vm_forcOs(t)
=e=
v15_forcKyo(t) - s15_gr_forc_kyo + v15_slackForc(t);
***-----------------------------------------------------------------------------------------
*' link to core
***-----------------------------------------------------------------------------------------
q15_linkEMI(ttot2ta10(ttot, ta10),emis2climate10(enty,FOB10))..
vm_emiAllGlob(ttot,enty)
=e=
v15_emi(ta10,FOB10);
$IF %cm_so2_out_of_opt% == "on" q15_linkEMI_aer(ttot2ta10(ttot, ta10),emiaer2climate10(emiaer,FOB10)).. p15_so2emi(ttot,emiaer) =e= v15_emi(ta10,FOB10);
*---interpolation for linking (annual resolution of climate modules)
q15_interEMI(ta2ttot10(ta10, ttot),FOBEMI(FOB10)).. v15_emi(ta10,FOB10) =e= (1-p15_interpol(ta10)) * v15_emi(ttot,FOB10) + p15_interpol(ta10) * v15_emi(ttot+1,FOB10);
***-----------------------------------------------------------------------------------------
*' interpolation for linking (annual resolution of climate modules)
***-----------------------------------------------------------------------------------------
q15_interEMI(ta2ttot10(ta10, ttot),FOBEMI(FOB10))..
v15_emi(ta10,FOB10)
=e=
(1-p15_interpol(ta10)) * v15_emi(ttot,FOB10) + p15_interpol(ta10) * v15_emi(ttot+1,FOB10);
*** EOF ./modules/15_climate/box/equations.gms
Loading