diff --git a/CITATION.cff b/CITATION.cff index c49677641..bed40a559 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,4 +1,4 @@ -cff-version: 3.5.0 +cff-version: 3.5.6 message: "If you use this software in your work, please cite it as below." authors: - family-names: "Dorheim" @@ -34,7 +34,7 @@ authors: given-names: "Dawn" orcid: "https://orcid.org/0000-0002-0468-4660" title: "Hector a simple carbon-climate model" -version: 3.5.0 +version: 3.5.6 doi: 10.5281/zenodo.821645 date-released: 2025-10-24 url: "https://github.com/jgcri/hector" diff --git a/DESCRIPTION b/DESCRIPTION index 4e713b06d..96c3be874 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: hector Title: The Hector Simple Climate Model -Version: 3.5.0 +Version: 3.5.6 Authors@R: c(person("Kalyn", "Dorheim", email = "kalyn.dorheim@pnnl.gov", role = c("aut", "cre"), diff --git a/NAMESPACE b/NAMESPACE index 2f703ceb9..21ee4913b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -18,6 +18,7 @@ export(CH3BR_CONSTRAIN) export(CH3CCL3_CONSTRAIN) export(CH3CL_CONSTRAIN) export(CH4_CONSTRAIN) +export(CH4_LIFETIME_OH) export(CO2_CONSTRAIN) export(CO3) export(CO3_HL) @@ -76,6 +77,7 @@ export(EMISSIONS_CH3CCL3) export(EMISSIONS_CH3CL) export(EMISSIONS_CH4) export(EMISSIONS_CO) +export(EMISSIONS_H2) export(EMISSIONS_HALON1211) export(EMISSIONS_HALON1301) export(EMISSIONS_HALON2402) diff --git a/NEWS.md b/NEWS.md index 1a849db01..dea3cc62f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,8 @@ +# hector 3.5.6 + +under development, adding H2 + + # hector 3.5.0 * Minor documentation changes @@ -10,9 +15,6 @@ * New default parameter values for ocean heat diffusivity, CO2 fertilization, and heterotrophic respiration temperature sensitivity - - - # hector 3.2.0 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10698028.svg)](https://doi.org/10.5281/zenodo.10698028) diff --git a/R/RcppExports.R b/R/RcppExports.R index bb3f4eb56..0e7f51184 100644 --- a/R/RcppExports.R +++ b/R/RcppExports.R @@ -1082,6 +1082,18 @@ EMISSIONS_NMVOC <- function() { .Call('_hector_EMISSIONS_NMVOC', PACKAGE = 'hector') } +#' @describeIn emissions Emissions hydrogen gas (\code{"Tg H2"}) +#' @export +EMISSIONS_H2 <- function() { + .Call('_hector_EMISSIONS_H2', PACKAGE = 'hector') +} + +#' @describeIn methane CH4 lifetime with respect to the OH sink (\code{"Yr"}) +#' @export +CH4_LIFETIME_OH <- function() { + .Call('_hector_CH4_LIFETIME_OH', PACKAGE = 'hector') +} + #' @describeIn emissions Emissions for organic carbon (\code{"Tg"}) #' @export EMISSIONS_OC <- function() { diff --git a/data-raw/input_params.csv b/data-raw/input_params.csv index 26bfd6354..e75acc96b 100644 --- a/data-raw/input_params.csv +++ b/data-raw/input_params.csv @@ -1,244 +1,249 @@ -section,parameter,biome-specific,time-variant,required,default,units,description -core,run_name,n,n,y,,(unitless),Name of model run -core,startDate,n,n,y,1745,year,Start date of model run -core,endDate,n,n,y,2300,year,End date of model run -core,trackingDate,n,n,y,9999,year,Year to start tracking carbon -core,do_spinup,n,n,y,1,(unitless),"If 1, spin up model before running (default=1)" -core,max_spinup,n,n,y,2000,(unitless),Maximum steps allowed for spinup (default=2000) -ocean,enabled,n,n,y,1,(unitless),Putting 'enabled=0' will disable any component -ocean,spinup_chem,n,n,y,0,(unitless),Run ocean surface chemistry during spinup phase? -ocean,tt,n,n,y,7.20E+07,m3 s-1,Ocean thermohaline circulation -ocean,tu,n,n,y,4.90E+07,m3 s-1,Ocean high latitude overturning -ocean,twi,n,n,y,1.25E+07,m3 s-1,Ocean warm-intermediate exchange -ocean,tid,n,n,y,2.00E+08,m3 s-1,Ocean intermediate-deep exchange -ocean,preind_surface_c,n,n,n,900,Pg C,Initial surface ocean carbon -ocean,preind_interdeep_c,n,n,n,37100,Pg C,Initial intermediate + deep ocean carbon -simpleNbox,atmos_co2,n,n,y,588.071,Pg C,Initial atmospheric CO2 -simpleNbox,C0,n,n,y,277.15,Pg C,Initial atmospheric C pool -simpleNbox,pf.veg_c,y,n,n,55,Pg C,Initial vegetation C pool -simpleNbox,nonpf.veg_c,y,n,n,495,Pg C,Initial vegetation C pool -simpleNbox,veg_c,n,n,y,550,Pg C,Initial vegetation C pool -simpleNbox,pf.detritus_c,y,n,n,5,Pg C,Initial detritus C pool -simpleNbox,nonpf.detritus_c,y,n,n,50,Pg C,Initial detritus C pool -simpleNbox,detritus_c,n,n,y,55,Pg C,Initial detritus C pool -simpleNbox,pf.soil_c,y,n,n,308,Pg C,Initial soil C pool -simpleNbox,nonpf.soil_c,y,n,n,609,Pg C,Initial soil C pool -simpleNbox,soil_c,n,n,y,917,Pg C,Initial soil C pool -simpleNbox,pf.permafrost_c,y,n,n,865,Pg C,Initial permafrost C pool -simpleNbox,nonpf.permafrost_c,y,n,n,0,Pg C,Initial permafrost C pool -simpleNbox,permafrost_c,n,n,y,865,Pg C,Initial permafrost C pool -simpleNbox,pf.npp_flux0,y,n,n,5.6,Pg C yr-1,Preindustrial net primary production -simpleNbox,nonpf.npp_flux0,y,n,n,50.6,Pg C yr-1,Preindustrial net primary production -simpleNbox,npp_flux0,n,n,y,56.2,Pg C yr-1,Preindustrial net primary production -simpleNbox,pf.f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,nonpf.f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,pf.f_nppd,n,n,y,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,nonpf.f_nppd,n,n,y,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,f_nppd,n,n,y,0.6,(unitless),Fraction of NPP to detritus (balance to soil) -simpleNbox,pf.f_litterd,n,n,n,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,nonpf.f_litterd,n,n,n,0.35,(unitless),Fraction of NPP to vegetation -simpleNbox,f_litterd,n,n,y,0.98,(unitless),Fraction of litter flux to detritus (balance to soil) -simpleNbox,ffi_emissions,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: emissions -simpleNbox,daccs_uptake,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: direct air carbon capture and storage -simpleNbox,luc_emissions,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: land use change -simpleNbox,luc_uptake,n,y,y,"""(csv)""",Pg C yr-2,Anthropogenic contributions: land use change -simpleNbox,CO2_constrain,n,y,n,"""(csv)""",ppmv,Atmospheric CO2 constraint -simpleNbox,NBP_constrain,n,y,n,"""(csv)""",Pg C yr-1,Net biome production (land-atmosphere C flux) constaint -simpleNbox,pf.beta,n,n,n,0.36,(unitless),CO2 fertilization factor -simpleNbox,nonpf.beta,n,n,n,0.36,(unitless),CO2 fertilization factor -simpleNbox,beta,n,n,y,0.36,(unitless),CO2 fertilization factor -simpleNbox,pf.q10_rh,n,n,n,2,(unitless),Respiration temperature response (Q10) -simpleNbox,nonpf.q10_rh,n,n,n,2,(unitless),Respiration temperature response (Q10) -simpleNbox,q10_rh,n,n,y,2,(unitless),Respiration temperature response (Q10) -simpleNbox,pf.warmingfactor,y,n,n,2,(unitless),biome-specific warming factors -simpleNbox,RF_albedo,n,n,y,"""(csv)""",W m-2,Albedo radiative forcing effect -simpleNbox,permafrost_c,y,n,y,0,Pg C,Preindustrial permafrost carbon pool -simpleNbox,fpf_static,y,n,n,0.74,(unitless),Fraction of permafrost that is static (non-labile) -simpleNbox,rh_ch4_frac,y,n,n,0.023,(unitless),Fraction of thawed permafrost decomposed as CH4 -simpleNbox,pf_mu,y,n,n,1.67,(unitless),Permafrost thaw parameter; see Woodard et al. 2021 -simpleNbox,pf_sigma,y,n,n,0.986,(unitless),Permafrost thaw parameter; see Woodard et al. 2021 -carbon-cycle-solver,eps_abs,n,n,y,1.00E-06,(unitless),Solver solution tolerance -carbon-cycle-solver,eps_rel,n,n,y,1.00E-06,(unitless),Solver solution tolerance -carbon-cycle-solver,dt,n,n,y,0.25,(unitless),Solver default time step -carbon-cycle-solver,eps_spinup,n,n,y,0.001,Pg C,"Model spinup tolerance (drift), Pg C" -so2,SO2_emissions,n,y,y,"""(csv)""",,emissions time series -so2,SV,n,y,y,"""(csv)""",,volcanic radiative forcing time series -CH4,M0,n,n,y,731.41,ppb,"preindustrial methane IPCC AR6 Table 7.SM.1, the CH4 forcing equations is calibrated to a M0 of 731.41 ppb" -CH4,Tsoil,n,n,y,160,years,CH4 loss to soil -CH4,Tstrat,n,n,y,120,years,CH4 loss to stratosphere -CH4,UC_CH4,n,n,y,2.78,Tg CH4 ppb-1,unit conversion between emissions and concentrations -CH4,CH4N,n,n,y,341,,best fit -CH4,CH4_emissions,n,y,y,"""(csv)""",,emissions time series -CH5,CH4_constrain,n,y,n,"""(csv)""",,CH4 concentration constraint -OH,NOX_emissions,n,y,y,"""(csv)""",,emissions time series -OH,CO_emissions,n,y,y,"""(csv)""",,emissions time series -OH,NMVOC_emissions,n,y,y,"""(csv)""",,emissions time series -OH,TOH0,n,n,y,6.6,years,initial OH lifetime -OH,CNOX,n,n,y,0.0042,,coefficient for NOX -OH,CCO,n,n,y,-1.05E-04,,coefficient for CO -OH,CNMVOC,n,n,y,-3.15E-04,,coefficient for NMVOC (non methane VOC) -OH,CCH4,n,n,y,-0.32,,coefficient for CH4 -ozone,PO3,n,n,y,30,,preindustrial O3 concentration -ozone,NOX_emissions,n,y,y,"""(csv)""",,emissions time series -ozone,CO_emissions,n,y,y,"""(csv)""",,emissions time series -ozone,NMVOC_emissions,n,y,y,"""(csv)""",,emissions time series -N2O,N0,n,n,y,273.87,ppb,preindustrial nitrous oxide from IPCC AR6 table 7.SM.1 -N2O,UC_N2O,n,n,y,4.8,TgN ppbv-1,unit conversion between emissions and concentrations -N2O,TN2O0,n,n,y,132,years,initial lifetime of N2O -N2O,N2O_natural_emissions,n,y,y,9.5,,default natural emissions based on a best fit to IPCC AR6 N2O RF -N2O,N2O_emissions,n,y,y,"""(csv)""",,emissions time series -N2O,N2O_constrain,n,y,n,"""(csv)""",,N2O concentration constraint -forcing,baseyear,n,n,y,1750,,"when to start reporting; by definition, all F=0 in this year" -forcing,RF_tot_constrain,n,y,n,"""(csv)""",,"If supplied, the model will use these data, ignoring what it calculates" -forcing,delta_co2,n,n,y,0.05,(unitless),forcing tropospheric adjustments for CO2 (7.3.2.1 of IPCC AR6) -forcing,delta_ch4,n,n,y,-0.14,(unitless),forcing tropospheric adjustments for CH4 (7.3.2.2 of IPCC AR6) -forcing,delta_n2o,n,n,y,0.07,(unitless),forcing tropospheric adjustments for N2O (7.3.2.3 of IPCC AR6) -forcing,rho_bc,n,n,y,0.0508,W yr m-2 C Tg-1,IPCC AR6 radiative efficiency BC (7.SM.1.3 of IPCC AR6) -forcing,rho_oc,n,n,y,-0.00621,W yr m-2 C Tg-1,IPCC AR6 radiative efficiency OC (7.SM.1.3.1 of IPCC AR6) -forcing,rho_so2,n,n,y,-7.24E-06,W yr m-2 S Gg-1,IPCC AR6 radiative efficiency SO2 (7.SM.1.3.1 of IPCC AR6) -forcing,rho_nh3,n,n,y,-0.00208,W yr m-2 NH3 Tg-1,IPCC AR6 radiative efficiency NH3 (7.SM.1.3.1 of IPCC AR6) -forcing,RF_misc,n,n,n,"""(csv)""",,Miscellaneous radiative forcings default set to 0 -forcing,RF_misc,n,n,y,0,,"Miscellaneous radiative forcings default set to 0, or read in from a input table, may be used to read in additional forcings not modeled by Hector (i.e. solar, bc on snow , contrails from)" -forcing,aero_scalar,n,n,y,1,(unitless),scaling factor for aerosol forcing -forcing,vol_scalar,n,n,y,1,(unitless),scaling factor for volcanic forcing -temperature,S,n,n,y,3,degC,equilibrium climate sensitivity for 2xCO2 -temperature,diff,n,n,y,2.3,cm2 s-1,ocean heat diffusivity -temperature,qco2,n,n,y,3.75,,CO2 RF (7.3.2 of IPCC AR6) -temperature,tas_constrain,n,y,n,"""(csv)""",,"Optional global temperature constraint; If supplied, the model will use these data, ignoring what it calculates" -bc,BC_emissions,n,y,y,"""(csv)""",, -oc,OC_emissions,n,y,y,"""(csv)""",, -nh3,NH3_emissions,n,y,y,"""(csv)""",, -CF4_halocarbon,tau,n,n,y,50000,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CF4_halocarbon,rho_CF4,n,n,y,9.90E-05,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CF4_halocarbon,delta_CF4,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CF4_halocarbon,H0,n,n,y,35,pptv,preindustrial concentration -CF4_halocarbon,molarMass,n,n,y,88.0043,g,molar mass -CF4_halocarbon,CF4_emissions,n,y,y,"""(csv)""",, -C2F6_halocarbon,tau,n,n,y,10000,years,lifetime in years (Table 7.SM.7 IPPC AR6) -C2F6_halocarbon,rho_C2F6,n,n,y,2.61E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -C2F6_halocarbon,delta_C2F6,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -C2F6_halocarbon,molarMass,n,n,y,138.01,g,molar mass -C2F6_halocarbon,C2F6_emissions,n,y,y,"""(csv)""",, -HFC23_halocarbon,tau,n,n,y,228,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC23_halocarbon,rho_HFC23,n,n,y,1.91E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC23_halocarbon,delta_HFC23,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC23_halocarbon,molarMass,n,n,y,70,g,molar mass -HFC23_halocarbon,HFC23_emissions,n,y,y,"""(csv)""",, -HFC32_halocarbon,tau,n,n,y,5.4,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC32_halocarbon,rho_HFC32,n,n,y,1.11E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC32_halocarbon,delta_HFC32,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC32_halocarbon,molarMass,n,n,y,52,g,molar mass -HFC32_halocarbon,HFC32_emissions,n,y,y,"""(csv)""",, -HFC4310_halocarbon,tau,n,n,y,17,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC4310_halocarbon,rho_HFC4310,n,n,y,3.57E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC4310_halocarbon,delta_HFC4310,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC4310_halocarbon,molarMass,n,n,y,252,g,molar mass -HFC4310_halocarbon,HFC4310_emissions,n,y,y,"""(csv)""",, -HFC125_halocarbon,tau,n,n,y,30,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC125_halocarbon,rho_HFC125,n,n,y,2.34E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC125_halocarbon,delta_HFC125,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC125_halocarbon,molarMass,n,n,y,120.02,g,molar mass -HFC125_halocarbon,HFC125_emissions,n,y,y,"""(csv)""",, -HFC134a_halocarbon,tau,n,n,y,14,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC134a_halocarbon,rho_HFC134a,n,n,y,1.67E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC134a_halocarbon,delta_HFC134a,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC134a_halocarbon,molarMass,n,n,y,102.02,g,molar mass -HFC134a_halocarbon,HFC134a_emissions,n,y,y,"""(csv)""",, -HFC143a_halocarbon,tau,n,n,y,51,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC143a_halocarbon,rho_HFC143a,n,n,y,1.68E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC143a_halocarbon,delta_HFC143a,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC143a_halocarbon,molarMass,n,n,y,84.04,g,molar mass -HFC143a_halocarbon,HFC143a_emissions,n,y,y,"""(csv)""",, -HFC227ea_halocarbon,tau,n,n,y,36,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC227ea_halocarbon,rho_HFC227ea,n,n,y,2.73E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC227ea_halocarbon,delta_HFC227ea,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC227ea_halocarbon,molarMass,n,n,y,170.03,g,molar mass -HFC227ea_halocarbon,HFC227ea_emissions,n,y,y,"""(csv)""",, -HFC245fa_halocarbon,tau,n,n,y,7.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HFC245fa_halocarbon,rho_HFC245fa,n,n,y,2.45E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HFC245fa_halocarbon,delta_HFC245fa,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HFC245fa_halocarbon,molarMass,n,n,y,134,g,molar mass -HFC245fa_halocarbon,HFC245fa_emissions,n,y,y,"""(csv)""",, -SF6_halocarbon,tau,n,n,y,3200,years,lifetime in years (Table 7.SM.7 IPPC AR6) -SF6_halocarbon,rho_SF6,n,n,y,5.67E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -SF6_halocarbon,delta_SF6,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -SF6_halocarbon,molarMass,n,n,y,146.06,g,molar mass -SF6_halocarbon,SF6_emissions,n,y,y,"""(csv)""",, -CFC11_halocarbon,tau,n,n,y,52,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CFC11_halocarbon,rho_CFC11,n,n,y,2.59E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CFC11_halocarbon,delta_CFC11,n,n,y,0.13,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CFC11_halocarbon,molarMass,n,n,y,137.35,g,molar mass -CFC11_halocarbon,CFC11_emissions,n,y,y,"""(csv)""",, -CFC12_halocarbon,tau,n,n,y,102,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CFC12_halocarbon,rho_CFC12,n,n,y,3.20E-03,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CFC12_halocarbon,delta_CFC12,n,n,y,0.13,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CFC12_halocarbon,molarMass,n,n,y,120.9,g,molar mass -CFC12_halocarbon,CFC12_emissions,n,y,y,"""(csv)""",, -CFC113_halocarbon,tau,n,n,y,93,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CFC113_halocarbon,rho_CFC113,n,n,y,3.01E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CFC113_halocarbon,delta_CFC113,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CFC113_halocarbon,molarMass,n,n,y,187.35,g,molar mass -CFC113_halocarbon,CFC113_emissions,n,y,y,"""(csv)""",, -CFC114_halocarbon,tau,n,n,y,189,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CFC114_halocarbon,rho_CFC114,n,n,y,3.14E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CFC114_halocarbon,delta_CFC114,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CFC114_halocarbon,molarMass,n,n,y,170.9,g,molar mass -CFC114_halocarbon,CFC114_emissions,n,y,y,"""(csv)""",, -CFC115_halocarbon,tau,n,n,y,540,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CFC115_halocarbon,rho_CFC115,n,n,y,2.46E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CFC115_halocarbon,delta_CFC115,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CFC115_halocarbon,molarMass,n,n,y,154.45,g,molar mass -CFC115_halocarbon,CCl4_emissions,n,y,y,"""(csv)""",, -CCl4_halocarbon,tau,n,n,y,32,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CCl4_halocarbon,rho_CCl4,n,n,y,1.66E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CCl4_halocarbon,delta_CCl4,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CCl4_halocarbon,molarMass,n,n,y,153.8,g,molar mass -CCl4_halocarbon,CFC115_emissions,n,y,y,"""(csv)""",, -CH3CC13_halocarbon,tau,n,n,y,5,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CH3CC13_halocarbon,rho_CH3CCl3,n,n,y,6.50E-05,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CH3CC13_halocarbon,delta_CH3CCl3,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CH3CC13_halocarbon,molarMass,n,n,y,133.35,g,molar mass -CH3CC13_halocarbon,CH3CCl3_emissions,n,y,y,"""(csv)""",, -halon1211_halocarbon,tau,n,n,y,16,years,lifetime in years (Table 7.SM.7 IPPC AR6) -halon1211_halocarbon,rho_halon1211,n,n,y,3.00E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -halon1211_halocarbon,delta_halon1211,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -halon1211_halocarbon,molarMass,n,n,y,165.35,g,molar mass -halon1211_halocarbon,halon1211_emissions,n,y,y,"""(csv)""",, -halon1301_halocarbon,tau,n,n,y,72,years,lifetime in years (Table 7.SM.7 IPPC AR6) -halon1301_halocarbon,rho_halon1301,n,n,y,2.99E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -halon1301_halocarbon,delta_halon1301,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -halon1301_halocarbon,molarMass,n,n,y,148.9,g,molar mass -halon1301_halocarbon,halon1301_emissions,n,y,y,"""(csv)""",, -halon2402_halocarbon,tau,n,n,y,28,years,lifetime in years (Table 7.SM.7 IPPC AR6) -halon2402_halocarbon,rho_halon2402,n,n,y,3.12E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -halon2402_halocarbon,delta_halon2402,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -halon2402_halocarbon,molarMass,n,n,y,259.8,g,molar mass -halon2402_halocarbon,halon2402_emissions,n,y,y,"""(csv)""",, -HCF22_halocarbon,tau,n,n,y,11.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HCF22_halocarbon,rho_HCFC22,n,n,y,2.14E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HCF22_halocarbon,delta_HCFC22,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HCF22_halocarbon,molarMass,n,n,y,86.45,g,molar mass -HCF22_halocarbon,HCFC22_emissions,n,y,y,"""(csv)""",, -HCFC141b_halocarbon,tau,n,n,y,9.4,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HCFC141b_halocarbon,rho_HCFC141b,n,n,y,1.61E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HCFC141b_halocarbon,delta_HCFC141b,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HCFC141b_halocarbon,molarMass,n,n,y,116.9,g,molar mass -HCFC141b_halocarbon,HCFC141b_emissions,n,y,y,"""(csv)""",, -HCFC142b_halocarbon,tau,n,n,y,18,years,lifetime in years (Table 7.SM.7 IPPC AR6) -HCFC142b_halocarbon,rho_HCFC142b,n,n,y,1.93E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -HCFC142b_halocarbon,delta_HCFC142b,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -HCFC142b_halocarbon,molarMass,n,n,y,100.45,g,molar mass -HCFC142b_halocarbon,HCFC142b_emissions,n,y,y,"""(csv)""",, -CH3Cl_halocarbon,tau,n,n,y,0.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CH3Cl_halocarbon,rho_CH3Cl,n,n,y,5.00E-06,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CH3Cl_halocarbon,delta_CH3Cl,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CH3Cl_halocarbon,H0,n,n,y,504,pptv,"preindustrial concentration, from Saito et al 2007 GRL" -CH3Cl_halocarbon,molarMass,n,n,y,50.45,g,molar mass -CH3Cl_halocarbon,CH3Cl_emissions,n,y,y,"""(csv)""",, -CH3Br_halocarbon,tau,n,n,y,0.8,years,lifetime in years (Table 7.SM.7 IPPC AR6) -CH3Br_halocarbon,rho_CH3Br,n,n,y,4.00E-06,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) -CH3Br_halocarbon,delta_CH3Br,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) -CH3Br_halocarbon,H0,n,n,y,5.8,pptv,"preindustrial concentration, from Saltzman et al 2004 JGR" -CH3Br_halocarbon,molarMass,n,n,y,50.45,g,molar mass -CH3Br_halocarbon,CH3Br_emissions,n,y,y,"""(csv)""",, +section,parameter,biome-specific,time-variant,required,default,units,description +core,run_name,n,n,y,,(unitless),Name of model run +core,startDate,n,n,y,1745,year,Start date of model run +core,endDate,n,n,y,2300,year,End date of model run +core,trackingDate,n,n,y,9999,year,Year to start tracking carbon +core,do_spinup,n,n,y,1,(unitless),"If 1, spin up model before running (default=1)" +core,max_spinup,n,n,y,2000,(unitless),Maximum steps allowed for spinup (default=2000) +ocean,enabled,n,n,y,1,(unitless),Putting 'enabled=0' will disable any component +ocean,spinup_chem,n,n,y,0,(unitless),Run ocean surface chemistry during spinup phase? +ocean,tt,n,n,y,7.20E+07,m3 s-1,Ocean thermohaline circulation +ocean,tu,n,n,y,4.90E+07,m3 s-1,Ocean high latitude overturning +ocean,twi,n,n,y,1.25E+07,m3 s-1,Ocean warm-intermediate exchange +ocean,tid,n,n,y,2.00E+08,m3 s-1,Ocean intermediate-deep exchange +ocean,preind_surface_c,n,n,n,900,Pg C,Initial surface ocean carbon +ocean,preind_interdeep_c,n,n,n,37100,Pg C,Initial intermediate + deep ocean carbon +simpleNbox,atmos_co2,n,n,y,588.071,Pg C,Initial atmospheric CO2 +simpleNbox,C0,n,n,y,277.15,Pg C,Initial atmospheric C pool +simpleNbox,pf.veg_c,y,n,n,55,Pg C,Initial vegetation C pool +simpleNbox,nonpf.veg_c,y,n,n,495,Pg C,Initial vegetation C pool +simpleNbox,veg_c,n,n,y,550,Pg C,Initial vegetation C pool +simpleNbox,pf.detritus_c,y,n,n,5,Pg C,Initial detritus C pool +simpleNbox,nonpf.detritus_c,y,n,n,50,Pg C,Initial detritus C pool +simpleNbox,detritus_c,n,n,y,55,Pg C,Initial detritus C pool +simpleNbox,pf.soil_c,y,n,n,308,Pg C,Initial soil C pool +simpleNbox,nonpf.soil_c,y,n,n,609,Pg C,Initial soil C pool +simpleNbox,soil_c,n,n,y,917,Pg C,Initial soil C pool +simpleNbox,pf.permafrost_c,y,n,n,865,Pg C,Initial permafrost C pool +simpleNbox,nonpf.permafrost_c,y,n,n,0,Pg C,Initial permafrost C pool +simpleNbox,permafrost_c,n,n,y,865,Pg C,Initial permafrost C pool +simpleNbox,pf.npp_flux0,y,n,n,5.6,Pg C yr-1,Preindustrial net primary production +simpleNbox,nonpf.npp_flux0,y,n,n,50.6,Pg C yr-1,Preindustrial net primary production +simpleNbox,npp_flux0,n,n,y,56.2,Pg C yr-1,Preindustrial net primary production +simpleNbox,pf.f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,nonpf.f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,f_nppv,n,n,y,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,pf.f_nppd,n,n,y,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,nonpf.f_nppd,n,n,y,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,f_nppd,n,n,y,0.6,(unitless),Fraction of NPP to detritus (balance to soil) +simpleNbox,pf.f_litterd,n,n,n,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,nonpf.f_litterd,n,n,n,0.35,(unitless),Fraction of NPP to vegetation +simpleNbox,f_litterd,n,n,y,0.98,(unitless),Fraction of litter flux to detritus (balance to soil) +simpleNbox,ffi_emissions,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: emissions +simpleNbox,daccs_uptake,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: direct air carbon capture and storage +simpleNbox,luc_emissions,n,y,y,"""(csv)""",Pg C yr-1,Anthropogenic contributions: land use change +simpleNbox,luc_uptake,n,y,y,"""(csv)""",Pg C yr-2,Anthropogenic contributions: land use change +simpleNbox,CO2_constrain,n,y,n,"""(csv)""",ppmv,Atmospheric CO2 constraint +simpleNbox,NBP_constrain,n,y,n,"""(csv)""",Pg C yr-1,Net biome production (land-atmosphere C flux) constaint +simpleNbox,pf.beta,n,n,n,0.36,(unitless),CO2 fertilization factor +simpleNbox,nonpf.beta,n,n,n,0.36,(unitless),CO2 fertilization factor +simpleNbox,beta,n,n,y,0.36,(unitless),CO2 fertilization factor +simpleNbox,pf.q10_rh,n,n,n,2,(unitless),Respiration temperature response (Q10) +simpleNbox,nonpf.q10_rh,n,n,n,2,(unitless),Respiration temperature response (Q10) +simpleNbox,q10_rh,n,n,y,2,(unitless),Respiration temperature response (Q10) +simpleNbox,pf.warmingfactor,y,n,n,2,(unitless),biome-specific warming factors +simpleNbox,RF_albedo,n,n,y,"""(csv)""",W m-2,Albedo radiative forcing effect +simpleNbox,permafrost_c,y,n,y,0,Pg C,Preindustrial permafrost carbon pool +simpleNbox,fpf_static,y,n,n,0.74,(unitless),Fraction of permafrost that is static (non-labile) +simpleNbox,rh_ch4_frac,y,n,n,0.023,(unitless),Fraction of thawed permafrost decomposed as CH4 +simpleNbox,pf_mu,y,n,n,1.67,(unitless),Permafrost thaw parameter; see Woodard et al. 2021 +simpleNbox,pf_sigma,y,n,n,0.986,(unitless),Permafrost thaw parameter; see Woodard et al. 2021 +carbon-cycle-solver,eps_abs,n,n,y,1.00E-06,(unitless),Solver solution tolerance +carbon-cycle-solver,eps_rel,n,n,y,1.00E-06,(unitless),Solver solution tolerance +carbon-cycle-solver,dt,n,n,y,0.25,(unitless),Solver default time step +carbon-cycle-solver,eps_spinup,n,n,y,0.001,Pg C,"Model spinup tolerance (drift), Pg C" +so2,SO2_emissions,n,y,y,"""(csv)""",,emissions time series +so2,SV,n,y,y,"""(csv)""",,volcanic radiative forcing time series +CH4,M0,n,n,y,731.41,ppb,"preindustrial methane IPCC AR6 Table 7.SM.1, the CH4 forcing equations is calibrated to a M0 of 731.41 ppb" +CH4,Tsoil,n,n,y,160,years,CH4 loss to soil +CH4,Tstrat,n,n,y,120,years,CH4 loss to stratosphere +CH4,UC_CH4,n,n,y,2.78,Tg CH4 ppb-1,unit conversion between emissions and concentrations +CH4,CH4N,n,n,y,341,,best fit +CH4,CH4_emissions,n,y,y,"""(csv)""",,emissions time series +CH5,CH4_constrain,n,y,n,"""(csv)""",,CH4 concentration constraint +OH,NOX_emissions,n,y,y,"""(csv)""",,emissions time series +OH,CO_emissions,n,y,y,"""(csv)""",,emissions time series +OH,NMVOC_emissions,n,y,y,"""(csv)""",,emissions time series +OH,TOH0,n,n,y,6.6,years,initial OH lifetime +OH,CNOX,n,n,y,0.0042,,coefficient for NOX +OH,CCO,n,n,y,-1.05E-04,,coefficient for CO +OH,CNMVOC,n,n,y,-3.15E-04,,coefficient for NMVOC (non methane VOC) +OH,CCH4,n,n,y,-0.32,,coefficient for CH4 +OH,H2_CCO,n,n,y,4.25,, H2 adjustment for CO coefficient +OH,H2_emissions[1745],n,y,y,0,,emissions time series +ozone,PO3,n,n,y,30,,preindustrial O3 concentration +ozone,CO3_H2,n,n,y,4.09E-03,DU O3 Tg H2-1,"coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8" +ozone,NOX_emissions,n,y,y,"""(csv)""",,emissions time series +ozone,CO_emissions,n,y,y,"""(csv)""",,emissions time series +ozone,H2_emissions[1745],n,y,y,0,,emissions time series +ozone,NMVOC_emissions,n,y,y,"""(csv)""",,emissions time series +N2O,N0,n,n,y,273.87,ppb,preindustrial nitrous oxide from IPCC AR6 table 7.SM.1 +N2O,UC_N2O,n,n,y,4.8,TgN ppbv-1,unit conversion between emissions and concentrations +N2O,TN2O0,n,n,y,132,years,initial lifetime of N2O +N2O,N2O_natural_emissions,n,y,y,9.5,,default natural emissions based on a best fit to IPCC AR6 N2O RF +N2O,N2O_emissions,n,y,y,"""(csv)""",,emissions time series +N2O,N2O_constrain,n,y,n,"""(csv)""",,N2O concentration constraint +forcing,baseyear,n,n,y,1750,,"when to start reporting; by definition, all F=0 in this year" +forcing,RF_tot_constrain,n,y,n,"""(csv)""",,"If supplied, the model will use these data, ignoring what it calculates" +forcing,delta_co2,n,n,y,0.05,(unitless),forcing tropospheric adjustments for CO2 (7.3.2.1 of IPCC AR6) +forcing,delta_ch4,n,n,y,-0.14,(unitless),forcing tropospheric adjustments for CH4 (7.3.2.2 of IPCC AR6) +forcing,delta_n2o,n,n,y,0.07,(unitless),forcing tropospheric adjustments for N2O (7.3.2.3 of IPCC AR6) +forcing,rho_bc,n,n,y,0.0508,W yr m-2 C Tg-1,IPCC AR6 radiative efficiency BC (7.SM.1.3 of IPCC AR6) +forcing,rho_oc,n,n,y,-0.00621,W yr m-2 C Tg-1,IPCC AR6 radiative efficiency OC (7.SM.1.3.1 of IPCC AR6) +forcing,rho_so2,n,n,y,-7.24E-06,W yr m-2 S Gg-1,IPCC AR6 radiative efficiency SO2 (7.SM.1.3.1 of IPCC AR6) +forcing,rho_nh3,n,n,y,-0.00208,W yr m-2 NH3 Tg-1,IPCC AR6 radiative efficiency NH3 (7.SM.1.3.1 of IPCC AR6) +forcing,rho_h2o_h2,n,n,y,1.30E-04,W m _2 H2 Tg_1,"strat. H2O vapor forcing from H2 emissions without CH4 effects Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8" +forcing,RF_misc,n,n,n,"""(csv)""",,Miscellaneous radiative forcings default set to 0 +forcing,aero_scalar,n,n,y,1,(unitless),Uncerainty scalar +forcing,vol_scalar,n,n,y,1,(unitless),Uncerainty scalar +forcing,RF_misc,n,n,y,0,,"Miscellaneous radiative forcings default set to 0, or read in from a input table, may be used to read in additional forcings not modeled by Hector (i.e. solar, bc on snow , contrails from)" +temperature,S,n,n,y,3,degC,equilibrium climate sensitivity for 2xCO2 +temperature,diff,n,n,y,2.3,cm2 s-1,ocean heat diffusivity +temperature,qco2,n,n,y,3.75,,CO2 RF (7.3.2 of IPCC AR6) +temperature,tas_constrain,n,y,n,"""(csv)""",,"Optional global temperature constraint; If supplied, the model will use these data, ignoring what it calculates" +bc,BC_emissions,n,y,y,"""(csv)""",, +oc,OC_emissions,n,y,y,"""(csv)""",, +nh3,NH3_emissions,n,y,y,"""(csv)""",, +CF4_halocarbon,tau,n,n,y,50000,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CF4_halocarbon,rho_CF4,n,n,y,9.90E-05,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CF4_halocarbon,delta_CF4,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CF4_halocarbon,H0,n,n,y,35,pptv,preindustrial concentration +CF4_halocarbon,molarMass,n,n,y,88.0043,g,molar mass +CF4_halocarbon,CF4_emissions,n,y,y,"""(csv)""",, +C2F6_halocarbon,tau,n,n,y,10000,years,lifetime in years (Table 7.SM.7 IPPC AR6) +C2F6_halocarbon,rho_C2F6,n,n,y,2.61E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +C2F6_halocarbon,delta_C2F6,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +C2F6_halocarbon,molarMass,n,n,y,138.01,g,molar mass +C2F6_halocarbon,C2F6_emissions,n,y,y,"""(csv)""",, +HFC23_halocarbon,tau,n,n,y,228,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC23_halocarbon,rho_HFC23,n,n,y,1.91E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC23_halocarbon,delta_HFC23,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC23_halocarbon,molarMass,n,n,y,70,g,molar mass +HFC23_halocarbon,HFC23_emissions,n,y,y,"""(csv)""",, +HFC32_halocarbon,tau,n,n,y,5.4,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC32_halocarbon,rho_HFC32,n,n,y,1.11E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC32_halocarbon,delta_HFC32,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC32_halocarbon,molarMass,n,n,y,52,g,molar mass +HFC32_halocarbon,HFC32_emissions,n,y,y,"""(csv)""",, +HFC4310_halocarbon,tau,n,n,y,17,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC4310_halocarbon,rho_HFC4310,n,n,y,3.57E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC4310_halocarbon,delta_HFC4310,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC4310_halocarbon,molarMass,n,n,y,252,g,molar mass +HFC4310_halocarbon,HFC4310_emissions,n,y,y,"""(csv)""",, +HFC125_halocarbon,tau,n,n,y,30,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC125_halocarbon,rho_HFC125,n,n,y,2.34E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC125_halocarbon,delta_HFC125,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC125_halocarbon,molarMass,n,n,y,120.02,g,molar mass +HFC125_halocarbon,HFC125_emissions,n,y,y,"""(csv)""",, +HFC134a_halocarbon,tau,n,n,y,14,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC134a_halocarbon,rho_HFC134a,n,n,y,1.67E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC134a_halocarbon,delta_HFC134a,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC134a_halocarbon,molarMass,n,n,y,102.02,g,molar mass +HFC134a_halocarbon,HFC134a_emissions,n,y,y,"""(csv)""",, +HFC143a_halocarbon,tau,n,n,y,51,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC143a_halocarbon,rho_HFC143a,n,n,y,1.68E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC143a_halocarbon,delta_HFC143a,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC143a_halocarbon,molarMass,n,n,y,84.04,g,molar mass +HFC143a_halocarbon,HFC143a_emissions,n,y,y,"""(csv)""",, +HFC227ea_halocarbon,tau,n,n,y,36,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC227ea_halocarbon,rho_HFC227ea,n,n,y,2.73E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC227ea_halocarbon,delta_HFC227ea,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC227ea_halocarbon,molarMass,n,n,y,170.03,g,molar mass +HFC227ea_halocarbon,HFC227ea_emissions,n,y,y,"""(csv)""",, +HFC245fa_halocarbon,tau,n,n,y,7.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HFC245fa_halocarbon,rho_HFC245fa,n,n,y,2.45E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HFC245fa_halocarbon,delta_HFC245fa,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HFC245fa_halocarbon,molarMass,n,n,y,134,g,molar mass +HFC245fa_halocarbon,HFC245fa_emissions,n,y,y,"""(csv)""",, +SF6_halocarbon,tau,n,n,y,3200,years,lifetime in years (Table 7.SM.7 IPPC AR6) +SF6_halocarbon,rho_SF6,n,n,y,5.67E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +SF6_halocarbon,delta_SF6,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +SF6_halocarbon,molarMass,n,n,y,146.06,g,molar mass +SF6_halocarbon,SF6_emissions,n,y,y,"""(csv)""",, +CFC11_halocarbon,tau,n,n,y,52,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CFC11_halocarbon,rho_CFC11,n,n,y,2.59E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CFC11_halocarbon,delta_CFC11,n,n,y,0.13,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CFC11_halocarbon,molarMass,n,n,y,137.35,g,molar mass +CFC11_halocarbon,CFC11_emissions,n,y,y,"""(csv)""",, +CFC12_halocarbon,tau,n,n,y,102,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CFC12_halocarbon,rho_CFC12,n,n,y,3.20E-03,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CFC12_halocarbon,delta_CFC12,n,n,y,0.13,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CFC12_halocarbon,molarMass,n,n,y,120.9,g,molar mass +CFC12_halocarbon,CFC12_emissions,n,y,y,"""(csv)""",, +CFC113_halocarbon,tau,n,n,y,93,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CFC113_halocarbon,rho_CFC113,n,n,y,3.01E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CFC113_halocarbon,delta_CFC113,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CFC113_halocarbon,molarMass,n,n,y,187.35,g,molar mass +CFC113_halocarbon,CFC113_emissions,n,y,y,"""(csv)""",, +CFC114_halocarbon,tau,n,n,y,189,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CFC114_halocarbon,rho_CFC114,n,n,y,3.14E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CFC114_halocarbon,delta_CFC114,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CFC114_halocarbon,molarMass,n,n,y,170.9,g,molar mass +CFC114_halocarbon,CFC114_emissions,n,y,y,"""(csv)""",, +CFC115_halocarbon,tau,n,n,y,540,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CFC115_halocarbon,rho_CFC115,n,n,y,2.46E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CFC115_halocarbon,delta_CFC115,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CFC115_halocarbon,molarMass,n,n,y,154.45,g,molar mass +CFC115_halocarbon,CCl4_emissions,n,y,y,"""(csv)""",, +CCl4_halocarbon,tau,n,n,y,32,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CCl4_halocarbon,rho_CCl4,n,n,y,1.66E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CCl4_halocarbon,delta_CCl4,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CCl4_halocarbon,molarMass,n,n,y,153.8,g,molar mass +CCl4_halocarbon,CFC115_emissions,n,y,y,"""(csv)""",, +CH3CC13_halocarbon,tau,n,n,y,5,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CH3CC13_halocarbon,rho_CH3CCl3,n,n,y,6.50E-05,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CH3CC13_halocarbon,delta_CH3CCl3,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CH3CC13_halocarbon,molarMass,n,n,y,133.35,g,molar mass +CH3CC13_halocarbon,CH3CCl3_emissions,n,y,y,"""(csv)""",, +halon1211_halocarbon,tau,n,n,y,16,years,lifetime in years (Table 7.SM.7 IPPC AR6) +halon1211_halocarbon,rho_halon1211,n,n,y,3.00E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +halon1211_halocarbon,delta_halon1211,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +halon1211_halocarbon,molarMass,n,n,y,165.35,g,molar mass +halon1211_halocarbon,halon1211_emissions,n,y,y,"""(csv)""",, +halon1301_halocarbon,tau,n,n,y,72,years,lifetime in years (Table 7.SM.7 IPPC AR6) +halon1301_halocarbon,rho_halon1301,n,n,y,2.99E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +halon1301_halocarbon,delta_halon1301,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +halon1301_halocarbon,molarMass,n,n,y,148.9,g,molar mass +halon1301_halocarbon,halon1301_emissions,n,y,y,"""(csv)""",, +halon2402_halocarbon,tau,n,n,y,28,years,lifetime in years (Table 7.SM.7 IPPC AR6) +halon2402_halocarbon,rho_halon2402,n,n,y,3.12E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +halon2402_halocarbon,delta_halon2402,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +halon2402_halocarbon,molarMass,n,n,y,259.8,g,molar mass +halon2402_halocarbon,halon2402_emissions,n,y,y,"""(csv)""",, +HCF22_halocarbon,tau,n,n,y,11.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HCF22_halocarbon,rho_HCFC22,n,n,y,2.14E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HCF22_halocarbon,delta_HCFC22,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HCF22_halocarbon,molarMass,n,n,y,86.45,g,molar mass +HCF22_halocarbon,HCFC22_emissions,n,y,y,"""(csv)""",, +HCFC141b_halocarbon,tau,n,n,y,9.4,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HCFC141b_halocarbon,rho_HCFC141b,n,n,y,1.61E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HCFC141b_halocarbon,delta_HCFC141b,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HCFC141b_halocarbon,molarMass,n,n,y,116.9,g,molar mass +HCFC141b_halocarbon,HCFC141b_emissions,n,y,y,"""(csv)""",, +HCFC142b_halocarbon,tau,n,n,y,18,years,lifetime in years (Table 7.SM.7 IPPC AR6) +HCFC142b_halocarbon,rho_HCFC142b,n,n,y,1.93E-04,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +HCFC142b_halocarbon,delta_HCFC142b,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +HCFC142b_halocarbon,molarMass,n,n,y,100.45,g,molar mass +HCFC142b_halocarbon,HCFC142b_emissions,n,y,y,"""(csv)""",, +CH3Cl_halocarbon,tau,n,n,y,0.9,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CH3Cl_halocarbon,rho_CH3Cl,n,n,y,5.00E-06,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CH3Cl_halocarbon,delta_CH3Cl,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CH3Cl_halocarbon,H0,n,n,y,504,pptv,"preindustrial concentration, from Saito et al 2007 GRL" +CH3Cl_halocarbon,molarMass,n,n,y,50.45,g,molar mass +CH3Cl_halocarbon,CH3Cl_emissions,n,y,y,"""(csv)""",, +CH3Br_halocarbon,tau,n,n,y,0.8,years,lifetime in years (Table 7.SM.7 IPPC AR6) +CH3Br_halocarbon,rho_CH3Br,n,n,y,4.00E-06,W m-2 ppt-1,radiative efficiencies (Table 7.SM.7 IPPC AR6) +CH3Br_halocarbon,delta_CH3Br,n,n,y,0,(unitless),tropospheric adjustments scalar (7.3.2.4 IPCC AR6) +CH3Br_halocarbon,H0,n,n,y,5.8,pptv,"preindustrial concentration, from Saltzman et al 2004 JGR" +CH3Br_halocarbon,molarMass,n,n,y,50.45,g,molar mass +CH3Br_halocarbon,CH3Br_emissions,n,y,y,"""(csv)""",, \ No newline at end of file diff --git a/data-raw/units-data.R b/data-raw/units-data.R index 3dae49371..471ece063 100644 --- a/data-raw/units-data.R +++ b/data-raw/units-data.R @@ -26,8 +26,8 @@ ch4_vars <- c( ) ch4_uni <- c("ppbv CH4", "Tg CH4", "Tg CH4", "ppbv CH4", "Years", "Years") -oh_vars <- c(EMISSIONS_NOX(), EMISSIONS_CO(), EMISSIONS_NMVOC()) -oh_uni <- c("Tg N", "Tg CO", "Tg NMVOC") +oh_vars <- c(EMISSIONS_NOX(), EMISSIONS_CO(), EMISSIONS_NMVOC(), EMISSIONS_H2()) +oh_uni <- c("Tg N", "Tg CO", "Tg NMVOC", "Tg H2") n2o_vars <- c(EMISSIONS_N2O(), N2O_CONSTRAIN(), NAT_EMISSIONS_N2O(), PREINDUSTRIAL_N2O()) n2o_uni <- c("Tg N", "ppbv N2O", "Tg N", "ppbv N2O") diff --git a/data/inputstable.rda b/data/inputstable.rda index c7df81fca..bce134edb 100644 Binary files a/data/inputstable.rda and b/data/inputstable.rda differ diff --git a/data/unitstable.rda b/data/unitstable.rda index 7a2558a83..706e74e96 100644 Binary files a/data/unitstable.rda and b/data/unitstable.rda differ diff --git a/inst/include/component_data.hpp b/inst/include/component_data.hpp index de2a9efc4..c6b89dc35 100644 --- a/inst/include/component_data.hpp +++ b/inst/include/component_data.hpp @@ -65,9 +65,11 @@ #define D_RHO_OC "rho_oc" // BC radiative efficiency #define D_RHO_SO2 "rho_so2" // SO2 radiative efficiency #define D_RHO_NH3 "rho_nh3" // NH3 radiative efficiency +#define D_RHO_H2O_H2 "rho_h2o_h2" // radiative efficiency of H2 emissions on strat. H2O vapor #define D_AERO_SCALE "aero_scalar" #define D_VOLCANIC_SCALE "vol_scalar" + // halocarbon components #define D_RF_CF4 D_RF_PREFIX CF4_COMPONENT_BASE #define D_RF_C2F6 D_RF_PREFIX C2F6_COMPONENT_BASE @@ -279,13 +281,17 @@ // oh component #define D_LIFETIME_OH "TAU_OH" #define D_INITIAL_LIFETIME_OH "TOH0" -#define D_COEFFICENT_NOX "CNOX" -#define D_COEFFICENT_CH4 "CCH4" -#define D_COEFFICENT_NMVOC "CNMVOC" -#define D_COEFFICENT_CO "CCO" +#define D_COEFFICIENT_NOX "CNOX" +#define D_COEFFICIENT_CH4 "CCH4" +#define D_COEFFICIENT_NMVOC "CNMVOC" +#define D_COEFFICIENT_CO "CCO" +#define D_COEFFICIENT_H2 "H2_CCO" +#define D_EMISSIONS_H2 "H2_emissions" + // o3 component #define D_PREINDUSTRIAL_O3 "PO3" +#define D_COEFF_O3_H2 "CO3_H2" #define D_ATMOSPHERIC_O3 "O3" CONCENTRATION_EXTENSION #define D_ATMOSPHERIC_EM_CH4 "CH4" #define D_EMISSIONS_NOX "NOX_emissions" diff --git a/inst/include/forcing_component.hpp b/inst/include/forcing_component.hpp index ea21395c9..f61528fdb 100644 --- a/inst/include/forcing_component.hpp +++ b/inst/include/forcing_component.hpp @@ -109,6 +109,9 @@ class ForcingComponent : public IModelComponent { unitval delta_ch4; // forcing tropospheric adjustment for CH4 see 7.3.2.2 of // IPCC AR6 + // Stratospheric water vapor (strat. H2O) parameters + unitval rho_h2o_h2; // W m −2 per Tg yr− 1 from Sand et al. 2023 + // Aerosol parameters for aerosol-radiation interactions (RFari) see // equation 7.SM.1.1 of IPCC AR6 unitval rho_bc; // (W yr m–2 Tg–1) IPCC AR6 radiative efficiency BC 7.SM.1.3 diff --git a/inst/include/h_util.hpp b/inst/include/h_util.hpp index c34af5dde..253777b80 100644 --- a/inst/include/h_util.hpp +++ b/inst/include/h_util.hpp @@ -26,7 +26,9 @@ * \brief The model version number to be included in logs and outputs. * \note Manually update the git tag to match this. */ -#define MODEL_VERSION "3.5.0" + +#define MODEL_VERSION "3.5.6" + #define OUTPUT_DIRECTORY "output/" diff --git a/inst/include/o3_component.hpp b/inst/include/o3_component.hpp index c047a28e7..f1f9bdb32 100644 --- a/inst/include/o3_component.hpp +++ b/inst/include/o3_component.hpp @@ -58,10 +58,12 @@ class OzoneComponent : public IModelComponent { //! Current ozone concentration, relative to preindustrial, Dobson units unitval PO3; + unitval CO3_H2; tseries O3; tseries CO_emissions; tseries NMVOC_emissions; tseries NOX_emissions; + tseries H2_emissions; //! logger Logger logger; diff --git a/inst/include/oh_component.hpp b/inst/include/oh_component.hpp index 59812d848..dad65df06 100644 --- a/inst/include/oh_component.hpp +++ b/inst/include/oh_component.hpp @@ -61,15 +61,18 @@ class OHComponent : public IModelComponent { tseries CO_emissions; tseries NOX_emissions; tseries NMVOC_emissions; + tseries H2_emissions; tseries TAU_OH; unitval M0; // initial CH4 concentration unitval TOH0; // preindustrial OH lifetime - double CCO; // coefficent for CO - double CNMVOC; // coefficent for NMVOC - double CNOX; // coefficent for NOX - double CCH4; // coefficent for CH4 + double CCO; // coefficient for CO + double CNMVOC; // coefficient for NMVOC + double CNOX; // coefficient for NOX + double CCH4; // coefficient for CH4 + unitval H2_CCO; // adjust CO coefficient for H2 + // logger Logger logger; diff --git a/inst/include/unitval.hpp b/inst/include/unitval.hpp index 97bd88337..41563746f 100644 --- a/inst/include/unitval.hpp +++ b/inst/include/unitval.hpp @@ -80,7 +80,9 @@ enum unit_types { U_TG_CH4, U_TG_N, U_TG_NMVOC, + U_TG_H2, U_DU_O3, + U_DU_O3_TG, U_GG_S, // SO2 emissions in Gg-S/yr U_TG_PPBV, // Conversion for CH4 and N2O emission to concentrations diff --git a/inst/input/hector_picontrol.ini b/inst/input/hector_picontrol.ini index f43df54d6..6a4e41432 100644 --- a/inst/input/hector_picontrol.ini +++ b/inst/input/hector_picontrol.ini @@ -114,9 +114,11 @@ CH4_emissions[1745]=0 ; ;------------------------------------------------------------------------ [OH] -NOX_emissions[1745]=3.877282 ; emissions time series -CO_emissions[1745]=348.5273588 ; emissions time series + +NOX_emissions[1745]=3.877282 ; emissions time series +CO_emissions[1745]=348.5273588 ; emissions time series NMVOC_emissions[1745]= 60.02182622 ; emissions time series +H2_emissions[1745]=0 ; emissions time series TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 @@ -128,6 +130,7 @@ CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions[1745]=3.877282 ; emissions time series CO_emissions[1745]=348.5273588 ; emissions time series NMVOC_emissions[1745]= 60.02182622 ; emissions time series @@ -160,6 +163,7 @@ rho_bc=0.0508 ; (W yr m–2 C Tg–1) IPCC AR6 radiative efficiency BC rho_oc=-.00621 ; (W yr m–2 C Tg–1) IPCC AR6 radiative efficiency OC (7.SM.1.3.1 of IPCC AR6) rho_so2=-.00000724 ; (W yr m–2 S Gg-1) IPCC AR6 radiative efficiency SO2 (7.SM.1.3.1 of IPCC AR6) rho_nh3=-.00208 ; (W yr m–2 NH3Tg–1) IPCC AR6 radiative efficiency NH3 (7.SM.1.3.1 of IPCC AR6) +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 ; Miscellaneous radiative forcings default set to 0, or read in from a input table, may be used to read in ; additional forcings not modeled by Hector (i.e. solar, bc on snow , contrails from) diff --git a/inst/input/hector_ssp119.ini b/inst/input/hector_ssp119.ini index 38124d6c5..9dffe4ac0 100644 --- a/inst/input/hector_ssp119.ini +++ b/inst/input/hector_ssp119.ini @@ -130,19 +130,24 @@ CH4_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp119_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs + ;------------------------------------------------------------------------ [N2O] @@ -171,6 +176,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp126.ini b/inst/input/hector_ssp126.ini index 417a3a6d2..99b8da104 100644 --- a/inst/input/hector_ssp126.ini +++ b/inst/input/hector_ssp126.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp126_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp245.ini b/inst/input/hector_ssp245.ini index 2bd7259af..a59102561 100644 --- a/inst/input/hector_ssp245.ini +++ b/inst/input/hector_ssp245.ini @@ -130,19 +130,25 @@ CH4_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs + TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] -PO3=30.0 ; preindustrial O3 concentration +PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp245_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs + ;------------------------------------------------------------------------ [N2O] @@ -171,6 +177,9 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp370.ini b/inst/input/hector_ssp370.ini index 2a0782ba3..f0c106f48 100644 --- a/inst/input/hector_ssp370.ini +++ b/inst/input/hector_ssp370.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp370_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp434.ini b/inst/input/hector_ssp434.ini index f4fecdf68..a84906f33 100644 --- a/inst/input/hector_ssp434.ini +++ b/inst/input/hector_ssp434.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp434_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp460.ini b/inst/input/hector_ssp460.ini index ff0e1ff53..2b74932ae 100644 --- a/inst/input/hector_ssp460.ini +++ b/inst/input/hector_ssp460.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp460_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp534-over.ini b/inst/input/hector_ssp534-over.ini index a969ad43e..d67066c2d 100644 --- a/inst/input/hector_ssp534-over.ini +++ b/inst/input/hector_ssp534-over.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions ti NOX_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp534-over_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/inst/input/hector_ssp585.ini b/inst/input/hector_ssp585.ini index 75a27fc14..77e81137b 100644 --- a/inst/input/hector_ssp585.ini +++ b/inst/input/hector_ssp585.ini @@ -130,19 +130,23 @@ CH4_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time se NOX_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX, see PR #786 CCO=-1.575e-4 ; coefficient for CO, see PR #786 CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC), see PR #786 CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series CO_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series NMVOC_emissions=csv:tables/ssp585_emiss-constraints_rf.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -171,6 +175,8 @@ rho_bc=0.06386286 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_oc=-0.006407143 ; (W yr m–2 C Tg–1) Dorheim et al. 2024 rho_so2=-7.469841e-06 ; (W yr m–2 S Gg-1) Dorheim et al. 2024 rho_nh3=-0.002146032 ; (W yr m–2 NH3Tg–1) Dorheim et al. 2024 +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 + ; Miscellaneous radiative forcings are by default zero, but can read in from a input table to ; represent additional forcings not modeled by Hector (e.g. solar, bc on snow, jet contrails) diff --git a/man/emissions.Rd b/man/emissions.Rd index 553da1a16..68febfbcb 100644 --- a/man/emissions.Rd +++ b/man/emissions.Rd @@ -7,6 +7,7 @@ \alias{EMISSIONS_NOX} \alias{EMISSIONS_CO} \alias{EMISSIONS_NMVOC} +\alias{EMISSIONS_H2} \alias{EMISSIONS_OC} \alias{EMISSIONS_NH3} \alias{emissions} @@ -24,6 +25,8 @@ EMISSIONS_CO() EMISSIONS_NMVOC() +EMISSIONS_H2() + EMISSIONS_OC() EMISSIONS_NH3() @@ -46,6 +49,8 @@ type. \item \code{EMISSIONS_NMVOC()}: Emissions for non-methane volatile organic compounds (NMVOC) (\code{"Tg NMVOC"}) +\item \code{EMISSIONS_H2()}: Emissions hydrogen gas (\code{"Tg H2"}) + \item \code{EMISSIONS_OC()}: Emissions for organic carbon (\code{"Tg"}) \item \code{EMISSIONS_NH3()}: Emissions for NH3 (\code{"Tg"}) diff --git a/man/methane.Rd b/man/methane.Rd index e1f65bc76..0f6de0bce 100644 --- a/man/methane.Rd +++ b/man/methane.Rd @@ -7,6 +7,7 @@ \alias{NATURAL_CH4} \alias{LIFETIME_SOIL} \alias{LIFETIME_STRAT} +\alias{CH4_LIFETIME_OH} \alias{methane} \title{Identifiers for quantities in the methane component} \usage{ @@ -21,11 +22,18 @@ NATURAL_CH4() LIFETIME_SOIL() LIFETIME_STRAT() + +CH4_LIFETIME_OH() } \description{ These identifiers correspond to variables that can be read and/or set in the methane component. } +\section{Functions}{ +\itemize{ +\item \code{CH4_LIFETIME_OH()}: CH4 lifetime with respect to the OH sink (\code{"Yr"}) + +}} \section{Output variables}{ These variables can be read from the methane component. diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp index 6cdb8cdf0..758268c73 100644 --- a/src/RcppExports.cpp +++ b/src/RcppExports.cpp @@ -1820,6 +1820,26 @@ BEGIN_RCPP return rcpp_result_gen; END_RCPP } +// EMISSIONS_H2 +String EMISSIONS_H2(); +RcppExport SEXP _hector_EMISSIONS_H2() { +BEGIN_RCPP + Rcpp::RObject rcpp_result_gen; + Rcpp::RNGScope rcpp_rngScope_gen; + rcpp_result_gen = Rcpp::wrap(EMISSIONS_H2()); + return rcpp_result_gen; +END_RCPP +} +// CH4_LIFETIME_OH +String CH4_LIFETIME_OH(); +RcppExport SEXP _hector_CH4_LIFETIME_OH() { +BEGIN_RCPP + Rcpp::RObject rcpp_result_gen; + Rcpp::RNGScope rcpp_rngScope_gen; + rcpp_result_gen = Rcpp::wrap(CH4_LIFETIME_OH()); + return rcpp_result_gen; +END_RCPP +} // EMISSIONS_OC String EMISSIONS_OC(); RcppExport SEXP _hector_EMISSIONS_OC() { @@ -2956,6 +2976,8 @@ static const R_CallMethodDef CallEntries[] = { {"_hector_EMISSIONS_NOX", (DL_FUNC) &_hector_EMISSIONS_NOX, 0}, {"_hector_EMISSIONS_CO", (DL_FUNC) &_hector_EMISSIONS_CO, 0}, {"_hector_EMISSIONS_NMVOC", (DL_FUNC) &_hector_EMISSIONS_NMVOC, 0}, + {"_hector_EMISSIONS_H2", (DL_FUNC) &_hector_EMISSIONS_H2, 0}, + {"_hector_CH4_LIFETIME_OH", (DL_FUNC) &_hector_CH4_LIFETIME_OH, 0}, {"_hector_EMISSIONS_OC", (DL_FUNC) &_hector_EMISSIONS_OC, 0}, {"_hector_EMISSIONS_NH3", (DL_FUNC) &_hector_EMISSIONS_NH3, 0}, {"_hector_OCEAN_UPTAKE", (DL_FUNC) &_hector_OCEAN_UPTAKE, 0}, diff --git a/src/ch4_component.cpp b/src/ch4_component.cpp index 8d89bcfa9..dd91e17aa 100644 --- a/src/ch4_component.cpp +++ b/src/ch4_component.cpp @@ -167,7 +167,7 @@ void CH4Component::run(const double runToDate) { << std::endl; // Permafrost thaw produces CH4 emissions -#define PG_C_TO_TG_CH4 (1000.0 * 16.04 / 12.01) + #define PG_C_TO_TG_CH4 (1000.0 * 16.04 / 12.01); const double rh_ch4 = core->sendMessage(M_GETDATA, D_RH_CH4).value(U_PGC_YR) * PG_C_TO_TG_CH4; diff --git a/src/csv_outputstream_visitor.cpp b/src/csv_outputstream_visitor.cpp index 25d05afdd..66149e7b3 100644 --- a/src/csv_outputstream_visitor.cpp +++ b/src/csv_outputstream_visitor.cpp @@ -74,6 +74,7 @@ CSVOutputStreamVisitor::CSVOutputStreamVisitor(ostream &outputStream, current_date = 0; datestring = ""; spinupstring = ""; + csvFile.precision(15); } //------------------------------------------------------------------------------ @@ -146,7 +147,6 @@ void CSVOutputStreamVisitor::visit(Core *c) { void CSVOutputStreamVisitor::visit(ForcingComponent *c) { if (!core->outputEnabled(c->getComponentName())) return; - streamsize oldPrecision = csvFile.precision(4); if (c->currentYear < c->baseyear) return; @@ -158,7 +158,6 @@ void CSVOutputStreamVisitor::visit(ForcingComponent *c) { STREAM_UNITVAL(csvFile, c, f.first, f.second); } - csvFile.precision(oldPrecision); } //------------------------------------------------------------------------------ diff --git a/src/forcing_component.cpp b/src/forcing_component.cpp index d90334729..f06f515e6 100644 --- a/src/forcing_component.cpp +++ b/src/forcing_component.cpp @@ -130,6 +130,7 @@ void ForcingComponent::init(Core *coreptr) { core->registerCapability(D_RHO_BC, getComponentName()); core->registerCapability(D_RHO_OC, getComponentName()); core->registerCapability(D_RHO_SO2, getComponentName()); + core->registerCapability(D_RHO_H2O_H2, getComponentName()); core->registerCapability(D_RF_SO2, getComponentName()); core->registerCapability(D_RF_ACI, getComponentName()); core->registerCapability(D_AERO_SCALE, getComponentName()); @@ -184,6 +185,7 @@ void ForcingComponent::init(Core *coreptr) { core->registerInput(D_RHO_OC, getComponentName()); core->registerInput(D_RHO_SO2, getComponentName()); core->registerInput(D_RHO_NH3, getComponentName()); + core->registerInput(D_RHO_H2O_H2, getComponentName()); core->registerInput(D_RF_MISC, getComponentName()); core->registerInput(D_FTOT_CONSTRAIN, getComponentName()); core->registerInput(D_AERO_SCALE, getComponentName()); @@ -243,6 +245,9 @@ void ForcingComponent::setData(const string &varName, } else if (varName == D_RHO_SO2) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); rho_so2 = data.getUnitval(U_W_M2_GG); + } else if (varName == D_RHO_H2O_H2) { + H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); + rho_h2o_h2 = data.getUnitval(U_W_M2_TG); } else if (varName == D_AERO_SCALE) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); alpha = data.getUnitval(U_UNITLESS); @@ -378,13 +383,15 @@ void ForcingComponent::run(const double runToDate) { forcings[D_RF_CH4].set(fch4, U_W_M2); // ---------- Stratospheric H2O based on CH4 oxidation ---------- - // The stratospheric water vapour RF based on changes in CH4 + // The stratospheric water vapor RF based on changes in CH4 // concentrations. const double Ma_base = 1831; // 2014 CH4 concentration ppb from the cmip6 historical scenario const double stratH2O_base = 0.0485; // W m-2 Strat H2O RF (1850 to 2014) from 7.3.2.6 IPCC AR6 - const double fh2o_strat = stratH2O_base * ((Ma - M0) / (Ma_base - M0)); // + double inital_h2 = core->sendMessage(M_GETDATA, D_EMISSIONS_H2, baseyear).value(U_TG_H2); + double current_h2 = core->sendMessage(M_GETDATA, D_EMISSIONS_H2, message_data(runToDate)).value(U_TG_H2); + const double fh2o_strat = stratH2O_base * ((Ma - M0) / (Ma_base - M0)) + rho_h2o_h2 * (current_h2 - inital_h2); // forcings[D_RF_H2O_STRAT].set(fh2o_strat, U_W_M2); } @@ -555,6 +562,8 @@ unitval ForcingComponent::getData(const std::string &varName, returnval = rho_so2; } else if (varName == D_RHO_NH3) { returnval = rho_nh3; + } else if (varName == D_RHO_H2O_H2) { + returnval = rho_h2o_h2; } else if (varName == D_AERO_SCALE) { returnval = alpha; } else if (varName == D_VOLCANIC_SCALE) { diff --git a/src/o3_component.cpp b/src/o3_component.cpp index 587bae918..f9676f43c 100644 --- a/src/o3_component.cpp +++ b/src/o3_component.cpp @@ -54,6 +54,8 @@ void OzoneComponent::init(Core *coreptr) { NMVOC_emissions.allowInterp(true); NOX_emissions.allowInterp(true); // Inputs like CO and NMVOC and NOX, O3.allowInterp(true); + H2_emissions.allowInterp(true); + // Inform core what data we can provide core->registerCapability(D_ATMOSPHERIC_O3, getComponentName()); @@ -62,6 +64,11 @@ void OzoneComponent::init(Core *coreptr) { core->registerInput(D_EMISSIONS_CO, getComponentName()); core->registerInput(D_EMISSIONS_NMVOC, getComponentName()); core->registerInput(D_EMISSIONS_NOX, getComponentName()); + core->registerInput(D_EMISSIONS_H2, getComponentName()); + // Parameters read in from the ini + core->registerInput(D_COEFF_O3_H2, getComponentName()); + core->registerInput(D_PREINDUSTRIAL_O3, getComponentName()); + } //------------------------------------------------------------------------------ @@ -94,6 +101,9 @@ void OzoneComponent::setData(const string &varName, const message_data &data) { if (varName == D_PREINDUSTRIAL_O3) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); PO3 = data.getUnitval(U_DU_O3); + } else if (varName == D_COEFF_O3_H2) { + H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); + CO3_H2 = data.getUnitval(U_DU_O3_TG); } else if (varName == D_EMISSIONS_NOX) { H_ASSERT(data.date != Core::undefinedIndex(), "date required"); NOX_emissions.set(data.date, data.getUnitval(U_TG_N)); @@ -103,6 +113,9 @@ void OzoneComponent::setData(const string &varName, const message_data &data) { } else if (varName == D_EMISSIONS_NMVOC) { H_ASSERT(data.date != Core::undefinedIndex(), "date required"); NMVOC_emissions.set(data.date, data.getUnitval(U_TG_NMVOC)); + } else if (varName == D_EMISSIONS_H2) { + H_ASSERT(data.date != Core::undefinedIndex(), "date required"); + H2_emissions.set(data.date, data.getUnitval(U_TG_H2)); } else { H_THROW("Unknown variable name while parsing " + getComponentName() + ": " + varName); @@ -131,12 +144,13 @@ void OzoneComponent::run(const double runToDate) { unitval current_nox = NOX_emissions.get(runToDate); unitval current_co = CO_emissions.get(runToDate); unitval current_nmvoc = NMVOC_emissions.get(runToDate); + unitval current_h2 = H2_emissions.get(runToDate); unitval current_ch4 = core->sendMessage(M_GETDATA, D_CH4_CONC, runToDate); O3.set(runToDate, unitval((5 * log(current_ch4)) + (0.125 * current_nox) + - (0.0011 * current_co) + (0.0033 * current_nmvoc), - U_DU_O3)); + (0.0011 * current_co) + (0.0033 * current_nmvoc) + + (CO3_H2.value(U_DU_O3_TG) * current_h2), U_DU_O3)); oldDate = runToDate; diff --git a/src/oh_component.cpp b/src/oh_component.cpp index 37de72875..ef32ef504 100644 --- a/src/oh_component.cpp +++ b/src/oh_component.cpp @@ -29,8 +29,7 @@ OHComponent::OHComponent() { NOX_emissions.allowInterp(true); NMVOC_emissions.allowInterp(true); CO_emissions.allowInterp(true); - TAU_OH.allowInterp(true); - // TOH0.set( 0.0, U_YRS ); + H2_emissions.allowInterp(true); } //------------------------------------------------------------------------------ @@ -57,11 +56,16 @@ void OHComponent::init(Core *coreptr) { // Inform core what data we can provide core->registerCapability(D_LIFETIME_OH, getComponentName()); + core->registerCapability(D_COEFFICIENT_H2, getComponentName()); // Register inputs accepted. Note that more than one component // can accept an input core->registerInput(D_EMISSIONS_CO, getComponentName()); core->registerInput(D_EMISSIONS_NMVOC, getComponentName()); core->registerInput(D_EMISSIONS_NOX, getComponentName()); + core->registerInput(D_EMISSIONS_H2, getComponentName()); + core->registerInput(D_COEFFICIENT_H2, getComponentName()); + + } //------------------------------------------------------------------------------ @@ -97,21 +101,27 @@ void OHComponent::setData(const string &varName, const message_data &data) { } else if (varName == D_EMISSIONS_NMVOC) { H_ASSERT(data.date != Core::undefinedIndex(), "date required"); NMVOC_emissions.set(data.date, data.getUnitval(U_TG_NMVOC)); + } else if (varName == D_EMISSIONS_H2) { + H_ASSERT(data.date != Core::undefinedIndex(), "date required"); + H2_emissions.set(data.date, data.getUnitval(U_TG_H2)); } else if (varName == D_INITIAL_LIFETIME_OH) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); TOH0 = data.getUnitval(U_YRS); - } else if (varName == D_COEFFICENT_CH4) { + } else if (varName == D_COEFFICIENT_CH4) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); CCH4 = data.getUnitval(U_UNDEFINED); - } else if (varName == D_COEFFICENT_CO) { + } else if (varName == D_COEFFICIENT_CO) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); CCO = data.getUnitval(U_UNDEFINED); - } else if (varName == D_COEFFICENT_NMVOC) { + } else if (varName == D_COEFFICIENT_NMVOC) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); CNMVOC = data.getUnitval(U_UNDEFINED); - } else if (varName == D_COEFFICENT_NOX) { + } else if (varName == D_COEFFICIENT_NOX) { H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); CNOX = data.getUnitval(U_UNDEFINED); + } else if (varName == D_COEFFICIENT_H2) { + H_ASSERT(data.date == Core::undefinedIndex(), "date not allowed"); + H2_CCO = data.getUnitval(U_UNDEFINED); } else { H_THROW("Unknown variable name while parsing " + getComponentName() + ": " + varName); @@ -144,27 +154,35 @@ void OHComponent::run(const double runToDate) { unitval current_nox = NOX_emissions.get(runToDate); unitval current_co = CO_emissions.get(runToDate); unitval current_nmvoc = NMVOC_emissions.get(runToDate); + unitval current_h2 = H2_emissions.get(runToDate); + // get this from CH4 component, this is last year's value const double previous_ch4 = core->sendMessage(M_GETDATA, D_CH4_CONC, oldDate).value(U_PPBV_CH4); + // toh is a sum of coefficients in an exponential representation of OH lifetime double toh = 0.0; if (previous_ch4 != M0) // if we are not at the first time { - const double a = + const double toh_ch4 = CCH4 * ((1.0 * log(previous_ch4)) - log(M0.value(U_PPBV_CH4))); - const double b = + const double toh_nox = CNOX * ((1.0 * current_nox) - NOX_emissions.get(NOX_emissions.firstdate()).value(U_TG_N)); - const double c = + const double toh_co = CCO * ((1.0 * +current_co) - CO_emissions.get(CO_emissions.firstdate()).value(U_TG_CO)); - const double d = + const double toh_nmvoc = CNMVOC * ((1.0 * +current_nmvoc) - NMVOC_emissions.get(NMVOC_emissions.firstdate()).value(U_TG_NMVOC)); - toh = a + b + c + d; + const double toh_h2 = + H2_CCO * CCO * + ((1.0 * +current_h2) - + H2_emissions.get(H2_emissions.firstdate()).value(U_TG_H2)); + + toh = toh_ch4 + toh_nox + toh_co + toh_nmvoc + toh_h2; H_LOG(logger, Logger::DEBUG) << "Year " << runToDate << " toh = " << toh << std::endl; } @@ -196,6 +214,12 @@ unitval OHComponent::getData(const std::string &varName, const double date) { H_ASSERT(date != Core::undefinedIndex(), "Date required for NMVOC emissions"); returnval = NMVOC_emissions.get(date); + } else if (varName == D_COEFFICIENT_H2) { + H_ASSERT(date == Core::undefinedIndex(), "Date not allowed for H2 coefficent"); + returnval = H2_CCO ; + } else if (varName == D_EMISSIONS_H2) { + H_ASSERT(date != Core::undefinedIndex(), "Date required for H2 emissions"); + returnval = H2_emissions.get(date); } else { H_THROW("Caller is requesting unknown variable: " + varName); } diff --git a/src/rcpp_constants.cpp b/src/rcpp_constants.cpp index 467437d1d..8de385a8b 100644 --- a/src/rcpp_constants.cpp +++ b/src/rcpp_constants.cpp @@ -949,6 +949,16 @@ String EMISSIONS_CO() { return D_EMISSIONS_CO; } // [[Rcpp::export]] String EMISSIONS_NMVOC() { return D_EMISSIONS_NMVOC; } +//' @describeIn emissions Emissions hydrogen gas (\code{"Tg H2"}) +//' @export +// [[Rcpp::export]] +String EMISSIONS_H2() { return D_EMISSIONS_H2; } + +//' @describeIn methane CH4 lifetime with respect to the OH sink (\code{"Yr"}) +//' @export +// [[Rcpp::export]] +String CH4_LIFETIME_OH() { return D_LIFETIME_OH; } + /* OC component */ //' @describeIn emissions Emissions for organic carbon (\code{"Tg"}) //' @export @@ -1503,3 +1513,4 @@ String FLUX_INTERIOR() { return D_FLUX_INTERIOR; } //' @export // [[Rcpp::export]] String HEAT_FLUX() { return D_HEAT_FLUX; } + diff --git a/src/unitval.cpp b/src/unitval.cpp index b38e8fa12..6f624e696 100644 --- a/src/unitval.cpp +++ b/src/unitval.cpp @@ -62,6 +62,9 @@ string unitval::unitsName(const unit_types u) { case U_DU_O3: return "DU O3"; break; + case U_DU_O3_TG: + return "DU O3/Tg"; + break; case U_TG_N: return "Tg N"; break; @@ -77,6 +80,9 @@ string unitval::unitsName(const unit_types u) { case U_TG_NMVOC: return "Tg NMVOC"; break; + case U_TG_H2: + return "Tg H2"; + break; case U_TG_PPBV: return "Tg/ppbv"; break; diff --git a/tests/testthat/input/luc_pulse.ini b/tests/testthat/input/luc_pulse.ini index 901ef82d0..f0c86391d 100644 --- a/tests/testthat/input/luc_pulse.ini +++ b/tests/testthat/input/luc_pulse.ini @@ -110,19 +110,23 @@ CH4_emissions=csv:luc_pulse_tables.csv ; emissions time series NOX_emissions=csv:luc_pulse_tables.csv ; emissions time series CO_emissions=csv:luc_pulse_tables.csv ; emissions time series NMVOC_emissions=csv:luc_pulse_tables.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs TOH0=9.6 ; initial OH lifetime (years) Wigley et al. 2002 CNOX=8.4e-3 ; coefficient for NOX CITATION TODO CCO=-1.575e-4 ; coefficient for CO CITATION TODO CNMVOC=-4.725e-4 ; coefficient for NMVOC (non methane VOC) CITATION TODO CCH4=-0.32 ; coefficient for CH4 (unitless) Wigley et al. 2002 +H2_CCO=4.25 ; scaling factor for the CO coefficient that affects OH lifetime; see PR787 ;------------------------------------------------------------------------ [ozone] PO3=30.0 ; preindustrial O3 concentration +CO3_H2=4.09e-3 ; coefficient for H2 contribution to trop. O3 RF (DU O3 Tg H2-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 NOX_emissions=csv:luc_pulse_tables.csv ; emissions time series CO_emissions=csv:luc_pulse_tables.csv ; emissions time series NMVOC_emissions=csv:luc_pulse_tables.csv ; emissions time series +H2_emissions[1745]=0 ; assumed 0 emissions for the RCMIP era SSPs ;------------------------------------------------------------------------ [N2O] @@ -152,6 +156,7 @@ rho_bc=0.0508 ; (W yr m–2 C Tg–1) IPCC AR6 radiative efficiency BC rho_oc=-.00621 ; (W yr m–2 C Tg–1) IPCC AR6 radiative efficiency OC (7.SM.1.3.1 of IPCC AR6) rho_so2=-.00000724 ; (W yr m–2 S Gg-1) IPCC AR6 radiative efficiency SO2 (7.SM.1.3.1 of IPCC AR6) rho_nh3=-.00208 ; (W yr m–2 NH3Tg–1) IPCC AR6 radiative efficiency NH3 (7.SM.1.3.1 of IPCC AR6) +rho_h2o_h2=1.3e-4 ; (W m −2 H2 Tg-1) Sand et al. 2023 ST4, 10.1038/s43247-023-00857-8 ; Miscellaneous radiative forcings default set to 0, or read in from a input table, may be used to read in ; additional forcings not modeled by Hector (i.e. solar, bc on snow , contrails from) diff --git a/tests/testthat/test-h2.R b/tests/testthat/test-h2.R new file mode 100644 index 000000000..e8331c6ed --- /dev/null +++ b/tests/testthat/test-h2.R @@ -0,0 +1,59 @@ +# Probably temporary testing or may be moved to other unit tests. + + +ini <- system.file("input/hector_ssp245.ini", package = "hector") +dates <- 1750:2100 + +test_that("tau ", { + + # Limited testing for now check to see tau oh can be read out... + # in the future might want to test the actual values but for now + # we are happy if the values range from 6.6 to 8 + hc <- newcore(ini) + run(hc) + out <- fetchvars(hc, dates = 1750:2100, vars = CH4_LIFETIME_OH()) + + head(out) + + + expect_equal(CH4_LIFETIME_OH(), "TAU_OH") + expect_lte(mean(out$value), 8) + expect_gte(mean(out$value), 6.6) + +}) + + +test_that("H2 emissions ", { + + # Check to make sure that can fetch and set the H2 emissions and + # that the effects of adding some H2 emissions change things + # now that we have the CH4 indirect effects implement. + + hc <- newcore(ini) + run(hc) + d <- 1750:2100 + out <- fetchvars(hc, dates = d, + vars = c(EMISSIONS_H2(), CONCENTRATIONS_CH4(), CH4_LIFETIME_OH())) + + new_val <- 10 + setvar(core = hc, dates = d, var = c(EMISSIONS_H2()), values = rep(new_val, length(d)), + unit = getunits(EMISSIONS_H2())) + reset(hc) + run(hc) + out2 <- fetchvars(hc, dates = d, + vars = c(EMISSIONS_H2(), CONCENTRATIONS_CH4(), CH4_LIFETIME_OH())) + + diff <- abs(out$value - out2$value) + + # Now we do expect to see changes in CH4 concentrations in response + # to H2 emissions + expect_gt(mean(diff[out$variable == CONCENTRATIONS_CH4()]), 0) + expect_gt(mean(diff[out$variable == CH4_LIFETIME_OH()]), 0) + + # Since we are working off of some default H2 emissions = 0, then + # changing the H2 emissions we should see a difference. + expect_equal(mean(diff[out$variable == EMISSIONS_H2()]), new_val) + + }) + +