diff --git a/cime_config/buildnml b/cime_config/buildnml index 983cc188..844491cb 100755 --- a/cime_config/buildnml +++ b/cime_config/buildnml @@ -84,6 +84,7 @@ def buildnml(case, caseroot, compname): hamocc_ciso = case.get_value("HAMOCC_CISO") hamocc_extncycle = case.get_value("HAMOCC_EXTNCYCLE") hamocc_n2oc = case.get_value("HAMOCC_N2OC") + hamocc_n2o_hist = case.get_value("HAMOCC_N2O_HIST") hamocc_nh3c = case.get_value("HAMOCC_NH3C") hamocc_atmndepc = case.get_value("HAMOCC_ATMNDEPC") hamocc_sinking_scheme = case.get_value("HAMOCC_SINKING_SCHEME") @@ -195,6 +196,7 @@ def buildnml(case, caseroot, compname): config["hamocc_ciso"] = "yes" if hamocc_ciso else "no" config["hamocc_extncycle"] = "yes" if hamocc_extncycle else "no" config["hamocc_n2oc"] = "yes" if hamocc_n2oc else "no" + config["hamocc_n2o_hist"] = "yes" if hamocc_n2o_hist else "no" config["hamocc_nh3c"] = "yes" if hamocc_nh3c else "no" config["hamocc_atmndepc"] = "yes" if hamocc_atmndepc else "no" config["hamocc_sedbypass"] = "yes" if hamocc_sedbypass else "no" diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml index 8daf6bfb..35324c13 100644 --- a/cime_config/config_component.xml +++ b/cime_config/config_component.xml @@ -188,7 +188,16 @@ env_run.xml N2O fluxes coupled from atmosphere. Requires module ecosys and extncycle - + + + logical + TRUE,FALSE + FALSE + run_component_blom + env_run.xml + Provide historical N2O concentrations (uncoupled). Requires module ecosys and extncycle + + logical TRUE,FALSE diff --git a/cime_config/namelist_definition_blom.xml b/cime_config/namelist_definition_blom.xml index 0ebc1b03..76f5df3c 100644 --- a/cime_config/namelist_definition_blom.xml +++ b/cime_config/namelist_definition_blom.xml @@ -3649,6 +3649,17 @@ Switch to couple N2O fluxes to atmosphere + + logical + bgcnml + bgcnml + + .false. + .true. + + Switch provide atmospheric N2O in historical period (uncoupled) + + logical bgcnml diff --git a/hamocc/meson.build b/hamocc/meson.build index 40993a65..d99a2eb7 100644 --- a/hamocc/meson.build +++ b/hamocc/meson.build @@ -7,6 +7,7 @@ sources += files( 'mo_cyano.F90', 'mo_dipowa.F90', 'mo_get_cfc.F90', + 'mo_get_n2o_hist.F90', 'mo_hamocc4bcm.F90', 'mo_hamocc_init.F90', 'mo_hamocc_step.F90', diff --git a/hamocc/mo_carchm.F90 b/hamocc/mo_carchm.F90 index f2efb627..d21f80e3 100644 --- a/hamocc/mo_carchm.F90 +++ b/hamocc/mo_carchm.F90 @@ -104,7 +104,7 @@ subroutine carchm(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,prho,pglat,omask,psicomo iatmnco2,inatalkali,inatcalc,inatsco212, & ks,issso14,isssc14,ipowc14, & iatmbromo,ibromo,iatmnh3,ianh4 - use mo_param_bgc, only: dremcalc,srfdic_min,c14dec,atm_co2_nat,atm_n2o + use mo_param_bgc, only: dremcalc,srfdic_min,c14dec,atm_co2_nat use mo_vgrid, only: dp_min,kmle,kbo,ptiestu use mo_carbch, only: atm_cfc11_nh,atm_cfc11_sh,atm_cfc12_nh,atm_cfc12_sh, & atm_sf6_nh,atm_sf6_sh, & diff --git a/hamocc/mo_control_bgc.F90 b/hamocc/mo_control_bgc.F90 index 42cb732e..952cd203 100644 --- a/hamocc/mo_control_bgc.F90 +++ b/hamocc/mo_control_bgc.F90 @@ -58,6 +58,7 @@ module mo_control_bgc logical :: l_3Dvarsedpor = .false. ! apply spatially variable sediment porosity logical :: do_ndep = .true. ! apply n-deposition logical :: do_n2o_coupled = .false. ! for coupled simulations, use field provided by atmosphere + logical :: do_n2o_hist = .false. ! provide historical N2O concentration in non-N2O-interactive historical sim logical :: do_nh3_coupled = .false. ! for coupled simulations, use field provided by atmosphere logical :: do_rivinpt = .true. ! apply riverine input logical :: do_sedspinup = .false. ! apply sediment spin-up diff --git a/hamocc/mo_get_n2o_hist.F90 b/hamocc/mo_get_n2o_hist.F90 new file mode 100644 index 00000000..f3d76b1a --- /dev/null +++ b/hamocc/mo_get_n2o_hist.F90 @@ -0,0 +1,123 @@ +! Copyright (C) 2020 J. Tjiputra, J. Schwinger, j maerz +! +! This file is part of BLOM/iHAMOCC. +! +! BLOM is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! BLOM is distributed in the hope that it will be useful, but WITHOUT ANY +! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +! FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with BLOM. If not, see https://www.gnu.org/licenses/. + +module mo_get_n2o_hist + + implicit none + private + + public get_n2o_hist + +contains + + subroutine get_n2o_hist(kplyear) + use mod_xc, only: mnproc + use mo_kind, only: rp + use mo_control_bgc, only: io_stdo_bgc + use mo_param1_bgc, only: iatmn2o + use mo_carbch, only: atm + use mo_control_bgc, only: do_n2o_hist + + ! Arguments + integer, intent(in) :: kplyear + + ! Local variables + integer, parameter :: start_yr = 1750 ! first year of data + integer, parameter :: nyears = 266 ! nb of years in data + real(rp) :: atm_n2o_conc(nyears) + integer, save :: kplyear_old = 0 + + ! N2O atmospheric concentration + ! Meinhausen et al. 2017: Historical greenhouse gas concentrations for climate modelling (CMIP6) + ! generated from shared LBC_1750-2015_CMIP6_GlobAnnAvg_c180926.nc file. + ! First (last) data represents year 1750.5 (2015.5), units are [ppt] + + data atm_n2o_conc / & + 273864.96875_rp, 273894.06250_rp, 273927.09375_rp, 273972.81250_rp, 274016.18750_rp, & + 274051.12500_rp, 274079.00000_rp, 274096.03125_rp, 274129.00000_rp, 274165.09375_rp, & + 274193.09375_rp, 274222.00000_rp, 274249.90625_rp, 274301.96875_rp, 274339.93750_rp, & + 274371.96875_rp, 274391.90625_rp, 274426.00000_rp, 274446.81250_rp, 274468.03125_rp, & + 274495.06250_rp, 274513.03125_rp, 274530.93750_rp, 274547.09375_rp, 274565.03125_rp, & + 274578.96875_rp, 274593.93750_rp, 274606.06250_rp, 274617.87500_rp, 274629.00000_rp, & + 274639.21875_rp, 274646.93750_rp, 274654.00000_rp, 274657.93750_rp, 274663.93750_rp, & + 274669.18750_rp, 274676.03125_rp, 274678.06250_rp, 274677.00000_rp, 274678.06250_rp, & + 274677.00000_rp, 274673.96875_rp, 274673.96875_rp, 274659.00000_rp, 274648.03125_rp, & + 274631.03125_rp, 274615.15625_rp, 274601.00000_rp, 274584.18750_rp, 274570.03125_rp, & + 274547.09375_rp, 274531.96875_rp, 274523.00000_rp, 274505.06250_rp, 274485.96875_rp, & + 274465.96875_rp, 274446.81250_rp, 274428.12500_rp, 274411.12500_rp, 274383.18750_rp, & + 274360.06250_rp, 274334.00000_rp, 274304.06250_rp, 274267.12500_rp, 274230.81250_rp, & + 274181.00000_rp, 274143.06250_rp, 274107.12500_rp, 274070.96875_rp, 274050.09375_rp, & + 274007.09375_rp, 273970.00000_rp, 273933.18750_rp, 273894.96875_rp, 273846.96875_rp, & + 273786.06250_rp, 273728.06250_rp, 273677.03125_rp, 273640.87500_rp, 273602.15625_rp, & + 273564.00000_rp, 273520.09375_rp, 273444.03125_rp, 273372.09375_rp, 273214.09375_rp, & + 273078.96875_rp, 272953.96875_rp, 272873.18750_rp, 272866.09375_rp, 272857.96875_rp, & + 272799.03125_rp, 272689.18750_rp, 272582.00000_rp, 272606.96875_rp, 272647.93750_rp, & + 272640.09375_rp, 272730.00000_rp, 272812.96875_rp, 272884.96875_rp, 272953.93750_rp, & + 273021.18750_rp, 273093.96875_rp, 273167.90625_rp, 273264.06250_rp, 273363.00000_rp, & + 273470.00000_rp, 273578.09375_rp, 273675.06250_rp, 273756.03125_rp, 273894.96875_rp, & + 274055.96875_rp, 274240.00000_rp, 274416.12500_rp, 274570.96875_rp, 274719.93750_rp, & + 274880.15625_rp, 275048.21875_rp, 275212.90625_rp, 275390.96875_rp, 275561.18750_rp, & + 275719.93750_rp, 275902.93750_rp, 276078.09375_rp, 276249.93750_rp, 276416.09375_rp, & + 276584.87500_rp, 276734.93750_rp, 276864.09375_rp, 277002.00000_rp, 277133.00000_rp, & + 277265.09375_rp, 277373.87500_rp, 277485.96875_rp, 277590.96875_rp, 277695.06250_rp, & + 277794.93750_rp, 277885.00000_rp, 277994.96875_rp, 278079.84375_rp, 278190.87500_rp, & + 278273.09375_rp, 278346.75000_rp, 278442.09375_rp, 278554.09375_rp, 278689.00000_rp, & + 278831.00000_rp, 278938.90625_rp, 279050.96875_rp, 279163.06250_rp, 279308.12500_rp, & + 279454.06250_rp, 279613.15625_rp, 279860.68750_rp, 280155.96875_rp, 280431.81250_rp, & + 280704.87500_rp, 280980.00000_rp, 281276.03125_rp, 281611.12500_rp, 281949.90625_rp, & + 282314.18750_rp, 282720.96875_rp, 283019.12500_rp, 283361.96875_rp, 283715.87500_rp, & + 284047.00000_rp, 284311.93750_rp, 284614.96875_rp, 284805.00000_rp, 284850.93750_rp, & + 284928.84375_rp, 285038.78125_rp, 285170.00000_rp, 285467.00000_rp, 285605.06250_rp, & + 285652.03125_rp, 285692.09375_rp, 285740.03125_rp, 285832.84375_rp, 285891.03125_rp, & + 285938.12500_rp, 286124.03125_rp, 286221.87500_rp, 286371.18750_rp, 286466.93750_rp, & + 286587.03125_rp, 286747.06250_rp, 286951.00000_rp, 287190.96875_rp, 287387.12500_rp, & + 287619.06250_rp, 287864.12500_rp, 288137.96875_rp, 288781.03125_rp, 289000.09375_rp, & + 289227.06250_rp, 289427.12500_rp, 289510.96875_rp, 289556.21875_rp, 289598.06250_rp, & + 289738.90625_rp, 289860.09375_rp, 290024.93750_rp, 290334.15625_rp, 290547.81250_rp, & + 290844.03125_rp, 291186.96875_rp, 291511.90625_rp, 291772.03125_rp, 291987.00000_rp, & + 292282.96875_rp, 292601.96875_rp, 292945.06250_rp, 293327.03125_rp, 293685.18750_rp, & + 294045.09375_rp, 294453.18750_rp, 294859.93750_rp, 295269.03125_rp, 295681.00000_rp, & + 296098.25000_rp, 296521.90625_rp, 296954.96875_rp, 297399.06250_rp, 297854.93750_rp, & + 298326.12500_rp, 298813.96875_rp, 299318.84375_rp, 299844.93750_rp, 300392.90625_rp, & + 300965.15625_rp, 301562.03125_rp, 302186.96875_rp, 302841.96875_rp, 303528.12500_rp, & + 304247.15625_rp, 305001.96875_rp, 305792.87500_rp, 306623.90625_rp, 307831.12500_rp, & + 308683.00000_rp, 309233.15625_rp, 309725.03125_rp, 310099.09375_rp, 310807.96875_rp, & + 311278.90625_rp, 312298.12500_rp, 313182.93750_rp, 313906.93750_rp, 314708.84375_rp, & + 315759.18750_rp, 316493.00000_rp, 317100.81250_rp, 317729.90625_rp, 318357.00000_rp, & + 319130.03125_rp, 319933.15625_rp, 320645.96875_rp, 321574.84375_rp, 322274.96875_rp, & + 323141.00000_rp, 324159.12500_rp, 325004.78125_rp, 325918.87500_rp, 326987.93750_rp, & + 326987.93750_rp / + + if (do_n2o_hist) then + if ((kplyear >= start_yr) .and. (kplyear < (start_yr + nyears))) then + atm(:,:,iatmn2o) = atm_n2o_conc(kplyear - start_yr + 1) + + if (mnproc==1 .and. kplyear > kplyear_old) then + write(io_stdo_bgc,*) 'ATM N2O CONC=',kplyear,atm_n2o_conc(kplyear - start_yr + 1) + kplyear_old = kplyear + endif + endif + else + ! Remain with atm(:,:,iatmn2o) = atm_n2o as initialized in mo_ini_fields + return + endif + + + end subroutine get_n2o_hist + +end module mo_get_n2o_hist + diff --git a/hamocc/mo_hamocc4bcm.F90 b/hamocc/mo_hamocc4bcm.F90 index 2f461b90..f5501dd5 100644 --- a/hamocc/mo_hamocc4bcm.F90 +++ b/hamocc/mo_hamocc4bcm.F90 @@ -68,6 +68,7 @@ subroutine hamocc4bcm(kpie,kpje,kpke,kbnd,kplyear,kplmon,kplday,kldtday,pdlxp,pd use mo_inventory_bgc, only: inventory_bgc use mo_sedshi, only: sedshi use mo_get_cfc, only: get_cfc + use mo_get_n2o_hist, only: get_n2o_hist use mo_powach, only: powach use mo_preftrc, only: preftrc use mo_cyano, only: cyano @@ -187,6 +188,9 @@ subroutine hamocc4bcm(kpie,kpje,kpke,kbnd,kplyear,kplmon,kplday,kldtday,pdlxp,pd enddo !$OMP END PARALLEL DO if (mnproc.eq.1) write (io_stdo_bgc,*) 'iHAMOCC: getting N2O conc. from atm' + else + ! Get historical atmospheric N2O concentration, if requested via do_n2o_hist + call get_n2o_hist(kplyear) endif if (do_nh3_coupled) then !$OMP PARALLEL DO PRIVATE(i) diff --git a/hamocc/mo_hamocc_init.F90 b/hamocc/mo_hamocc_init.F90 index 0e5316c6..0d507e1e 100644 --- a/hamocc/mo_hamocc_init.F90 +++ b/hamocc/mo_hamocc_init.F90 @@ -48,7 +48,7 @@ subroutine hamocc_init(read_rest,rstfnm_hamocc) lkwrbioz_off,do_n2o_coupled,do_nh3_coupled, & ocn_co2_type, use_sedbypass, use_BOXATM, use_BROMO,use_extNcycle, & use_coupler_ndep,lTO2depremin,use_sediment_quality,ldyn_sed_age, & - linit_DOMclasses_sim + linit_DOMclasses_sim,do_n2o_hist use mo_param1_bgc, only: ks,init_por2octra_mapping use mo_param_bgc, only: ini_parambgc,claydens,calcdens,calcwei,opaldens,opalwei,ropal, & & ini_bgctimes,sec_per_day @@ -92,7 +92,7 @@ subroutine hamocc_init(read_rest,rstfnm_hamocc) & inidic,inialk,inipo4,inioxy,inino3,inisil,inid13c,inid14c,inidom,swaclimfile,& & with_dmsph,pi_ph_file,l_3Dvarsedpor,sedporfile,ocn_co2_type,use_M4AGO, & & do_n2o_coupled,do_nh3_coupled,lkwrbioz_off,lTO2depremin,shelfsea_maskfile, & - & sedqualfile,ldyn_sed_age,linit_DOMclasses_sim + & sedqualfile,ldyn_sed_age,linit_DOMclasses_sim,do_n2o_hist ! ! --- Set io units and some control parameters ! diff --git a/hamocc/mo_param_bgc.F90 b/hamocc/mo_param_bgc.F90 index cd878744..7a58b306 100644 --- a/hamocc/mo_param_bgc.F90 +++ b/hamocc/mo_param_bgc.F90 @@ -44,7 +44,7 @@ module mo_param_bgc lkwrbioz_off,lTO2depremin,use_shelfsea_res_time,use_sediment_quality, & use_pref_tracers,use_coupler_ndep,use_river2omip,use_DOMclasses, & linit_DOMclasses_sim,ldyn_sed_age,sedspin_yr_s,sedspin_yr_e, & - sedspin_ncyc,ldtbgc + sedspin_ncyc,ldtbgc,do_n2o_hist use mod_xc, only: mnproc,xchalt implicit none @@ -980,6 +980,7 @@ subroutine write_parambgc() call pinfo_add_entry('ldtbgc', real(ldtbgc)) if (use_extNcycle) then call cinfo_add_entry('do_n2o_coupled', do_n2o_coupled) + call cinfo_add_entry('do_n2o_hist', do_n2o_hist) call cinfo_add_entry('do_nh3_coupled', do_nh3_coupled) endif write(io_stdo_bgc,*) '* '