diff --git a/cesm/mod_cesm.F90 b/cesm/mod_cesm.F90 index cc371c18..ac2955d7 100644 --- a/cesm/mod_cesm.F90 +++ b/cesm/mod_cesm.F90 @@ -29,10 +29,14 @@ module mod_cesm use mod_xc use mod_forcing, only: trxday, srxday, swa, nsf, lip, sop, eva, rnf, rfi, & fmltfz, sfl, ztx, mty, ustarw, slp, abswnd, & - lamult, lasl, ustokes, vstokes, atmco2, atmbrf + lamult, lasl, ustokes, vstokes, atmco2, atmbrf, & + flxdms, flxbrf use mod_ben02, only: initai, rdcsic, rdctsf, fnlzai use mod_seaice, only: ficem use mod_checksum, only: csdiag, chksummsk +#ifdef HAMOCC + use mo_control_bgc, only: do_bgc_aofluxes +#endif implicit none @@ -76,7 +80,9 @@ module mod_cesm ustokes_da, & ! u-component of surface Stokes drift [m s-1]. vstokes_da, & ! v-component of surface Stokes drift [m s-1]. atmco2_da, & ! Atmospheric CO2 concentration [ppm]. - atmbrf_da ! Atmospheric bromoform concentration [ppt]. + atmbrf_da, & ! Atmospheric bromoform concentration [ppt]. + flxdms_da, & ! dms surface flux computed by mediator [kg m-2 s-1] + flxbrf_da ! brf surface flux computed by mediator [kg m-2 s-1] logical :: & smtfrc ! If true, time smooth CESM forcing fields. @@ -84,13 +90,18 @@ module mod_cesm integer :: & l1ci, l2ci ! Time-level indices for time smoothing of CESM fields. +#ifdef BROMO + logical :: do_bromo = .true. +#else + logical :: do_bromo = .false. +#endif + public :: runid_cesm, runtyp_cesm, ocn_cpl_dt_cesm, nstep_in_cpl, hmlt, & frzpot, mltpot, swa_da, nsf_da, hmlt_da, lip_da, sop_da, eva_da, & rnf_da, rfi_da, fmltfz_da, sfl_da, ztx_da, mty_da, ustarw_da, & - slp_da, abswnd_da, ficem_da, lamult_da, lasl_da, & + slp_da, abswnd_da, ficem_da, lamult_da, lasl_da, flxdms_da, flxbrf_da, & ustokes_da, vstokes_da, atmco2_da, atmbrf_da, smtfrc, l1ci, l2ci, & inicon_cesm, inifrc_cesm, getfrc_cesm - contains subroutine inicon_cesm @@ -189,6 +200,16 @@ subroutine getfrc_cesm vstokes(i, j) = w1*vstokes_da(i, j, l1ci) + w2*vstokes_da(i, j, l2ci) atmco2(i, j) = w1*atmco2_da(i, j, l1ci) + w2*atmco2_da(i, j, l2ci) atmbrf(i, j) = w1*atmbrf_da(i, j, l1ci) + w2*atmbrf_da(i, j, l2ci) +#ifdef HAMOCC + if (.not. do_bgc_aofluxes) then + ! flxdms is obtained from the mediator + flxdms(i, j) = w1*flxdms_da(i, j, l1ci) + w2*flxdms_da(i, j, l2ci) + if (do_bromo) then + ! flxbrf is obtained from the mediator + flxbrf(i, j) = w1*flxbrf_da(i, j, l1ci) + w2*flxbrf_da(i, j, l2ci) + end if + end if +#endif enddo enddo do l = 1, isu(j) @@ -208,7 +229,7 @@ subroutine getfrc_cesm call ncfopn('getfrc_cesm.nc', 'w', 'c', 1, iotype) call ncdims('x', itdm) call ncdims('y', jtdm) - call ncdefvar('ustarw_da', 'x y', ndouble, 8) + call ncdefvar('ustarw_da', 'x y', ndouble, 8) call ncdefvar('lip_da', 'x y', ndouble, 8) call ncdefvar('sop_da', 'x y', ndouble, 8) call ncdefvar('eva_da', 'x y', ndouble, 8) diff --git a/cime_config/buildcpp b/cime_config/buildcpp index dc6cd8e8..8ea9436f 100644 --- a/cime_config/buildcpp +++ b/cime_config/buildcpp @@ -87,7 +87,6 @@ def buildcpp(case): hamocc_nattrc = case.get_value("HAMOCC_NATTRC") hamocc_sedbypass = case.get_value("HAMOCC_SEDBYPASS") hamocc_ciso = case.get_value("HAMOCC_CISO") - hamocc_vsls = case.get_value("HAMOCC_VSLS") blom_unit = case.get_value("BLOM_UNIT") pio_typename = case.get_value("PIO_TYPENAME", subgroup="OCN") @@ -143,7 +142,9 @@ def buildcpp(case): if hamocc_ciso: expect(hamocc_sedbypass, "HAMOCC C-isotopes currently not supported in the sediment module. Use HAMOCC_SEDBYPASS=TRUE") blom_cppdefs = blom_cppdefs + " -Dcisonew" - if hamocc_vsls: + if ocn_grid in ["tnx1v4"]: + # HAMOCC bromoform scheme currently only supported on the tnx1v4 grid + # (no swa-climatology has been created for other grid configurations)" blom_cppdefs = blom_cppdefs + " -DBROMO" if co2type == "prognostic": blom_cppdefs = blom_cppdefs + " -DPROGCO2" diff --git a/cime_config/buildnml b/cime_config/buildnml index caf1f533..d725d2b3 100755 --- a/cime_config/buildnml +++ b/cime_config/buildnml @@ -1,1674 +1,272 @@ -#! /bin/csh -f - -#------------------------------------------------------------------------------ -# Get variables from Case XML-files -#------------------------------------------------------------------------------ - -set CASEROOT = `./xmlquery CASEROOT --value` -set OCN_GRID = `./xmlquery OCN_GRID --value` -set BLOM_VCOORD = `./xmlquery BLOM_VCOORD --value` -set BLOM_UNIT = `./xmlquery BLOM_UNIT --value` -set DIN_LOC_ROOT = `./xmlquery DIN_LOC_ROOT --value` -set RUN_TYPE = `./xmlquery RUN_TYPE --value` -set CONTINUE_RUN = `./xmlquery CONTINUE_RUN --value` -set CASEBUILD = `./xmlquery CASEBUILD --value` -set CCSM_CO2_PPMV = `./xmlquery CCSM_CO2_PPMV --value` -set OCN_NCPL = `./xmlquery OCN_NCPL --value` -set BLOM_COUPLING = `./xmlquery BLOM_COUPLING --value` -set RUNDIR = `./xmlquery RUNDIR --value` -set BLOM_TRACER_MODULES = `./xmlquery BLOM_TRACER_MODULES --value` -set BLOM_RIVER_NUTRIENTS = `./xmlquery BLOM_RIVER_NUTRIENTS --value` -set BLOM_N_DEPOSITION = `./xmlquery BLOM_N_DEPOSITION --value` -set BLOM_NDEP_SCENARIO = `./xmlquery BLOM_NDEP_SCENARIO --value` -set HAMOCC_VSLS = `./xmlquery HAMOCC_VSLS --value` -set HAMOCC_CISO = `./xmlquery HAMOCC_CISO --value` -set HAMOCC_SEDSPINUP = `./xmlquery HAMOCC_SEDSPINUP --value` -set HAMOCC_SEDSPINUP_YR_START = `./xmlquery HAMOCC_SEDSPINUP_YR_START --value` -set HAMOCC_SEDSPINUP_YR_END = `./xmlquery HAMOCC_SEDSPINUP_YR_END --value` -set HAMOCC_SEDSPINUP_NCYCLE = `./xmlquery HAMOCC_SEDSPINUP_NCYCLE --value` -set RUN_STARTDATE = `./xmlquery RUN_STARTDATE --value` -set PIO_TYPENAME_OCN = `./xmlquery PIO_TYPENAME_OCN --value` -set PIO_NETCDF_FORMAT_OCN = `./xmlquery PIO_NETCDF_FORMAT_OCN --value` -set NINST_OCN = `./xmlquery NINST_OCN --value` -set TEST=`./xmlquery TEST --value` - -#------------------------------------------------------------------------------ -# Check if HAMOCC is requested -#------------------------------------------------------------------------------ - -set ecosys = FALSE -set tracers = (`echo $BLOM_TRACER_MODULES`) -if ($#tracers != 0) then - foreach module ($tracers) - if ($module == ecosys) then - set ecosys = TRUE - endif - end -endif - -#------------------------------------------------------------------------------ -# Set RUN_TYPE to 'continue' if CONTINUE_RUN equals TRUE -#------------------------------------------------------------------------------ - -if ("$CONTINUE_RUN" == TRUE) then - set RUN_TYPE = continue -endif - -#------------------------------------------------------------------------------ -# Get start date -#------------------------------------------------------------------------------ - -set YEAR0 = `echo $RUN_STARTDATE | cut -c1-4 ` -set MONTH0 = `echo $RUN_STARTDATE | cut -c6-7 ` -set DAY0 = `echo $RUN_STARTDATE | cut -c9-10` - -#------------------------------------------------------------------------------ -# Set namelist variables -#------------------------------------------------------------------------------ - -#------------------------------ -# set LIMITS defaults -#------------------------------ -set NDAY1 = 0 -set NDAY2 = 0 -set IDATE = $YEAR0$MONTH0$DAY0 -set IDATE0 = $YEAR0$MONTH0$DAY0 -set RUNID = "'unset'" -set EXPCNF = "'cesm'" -set RUNTYP = "'$RUN_TYPE'" -set GRFILE = "'unset'" -set ICFILE = "'unset'" -if ("$BLOM_UNIT" == cgs) then - set PREF = 2000.e5 -else - set PREF = 2000.e4 -endif -set BACLIN = 1800. -set BATROP = 36. -if ("$BLOM_UNIT" == cgs) then - set MDV2HI = 2. - set MDV2LO = .4 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 5000.e4 - set MDC2LO = 300.e4 -else - set MDV2HI = .02 - set MDV2LO = .004 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 5000. - set MDC2LO = 300. -endif -set VSC2HI = .5 -set VSC2LO = .5 -set VSC4HI = 0. -set VSC4LO = 0. -if ("$BLOM_UNIT" == cgs) then - set CBAR = 5. -else - set CBAR = .05 -endif -set CB = .002 -set CWBDTS = 5.e-5 -set CWBDLS = 25. -set MOMMTH = "'enscon'" -set BMCMTH = "'uc'" -set RMPMTH = "'eitvel'" -set MLRTTP = "'constant'" -set RM0 = 1.2 -set RM5 = 0. -set CE = .06 -set TDFILE = "'unset'" -set NIWGF = 0. -set NIWBF = .35 -set NIWLF = .5 -set SWAMTH = "'jerlov'" -set JWTYPE = 3 -set CHLOPT = "'climatology'" -set CCFILE = "'unset'" -set TRXDAY = 0. -set SRXDAY = 0. -set TRXDPT = 1. -set SRXDPT = 1. -set TRXLIM = 1.5 -set SRXLIM = .5 -set APTFLX = .false. -set APSFLX = .false. -set DITFLX = .false. -set DISFLX = .false. -set SRXBAL = .false. -set SCFILE = "'unset'" -set WAVSRC = "'none'" -set SMTFRC = .true. -set SPRFAC = .false. -set ATM_PATH = "'unset'" -set ITEST = 60 -set JTEST = 60 -set CNSVDI = .false. -set CSDIAG = .false. -set RSTFRQ = 1 -if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then - set RSTFMT = 1 -else - set RSTFMT = 0 -endif -set RSTCMP = 0 -if ("$PIO_TYPENAME_OCN" == pnetcdf) then - set IOTYPE = 1 -else - set IOTYPE = 0 -endif - -#------------------------------ -# set VCOORD defaults -#------------------------------ -set VCOORD_TYPE = "'$BLOM_VCOORD'" -set RECONSTRUCTION_METHOD = "'ppm'" -set DENSITY_LIMITING = "'monotonic'" -set TRACER_LIMITING = "'non_oscillatory'" -set VELOCITY_LIMITING = "'non_oscillatory'" -set DENSITY_PC_UPPER_BNDR = .false. -set DENSITY_PC_LOWER_BNDR = .false. -set TRACER_PC_UPPER_BNDR = .true. -set TRACER_PC_LOWER_BNDR = .false. -set VELOCITY_PC_UPPER_BNDR = .true. -set VELOCITY_PC_LOWER_BNDR = .false. -set DPMIN_SURFACE = 2.5 -set DPMIN_INFLATION_FACTOR = 1.08 -set DPMIN_INTERIOR = .1 -set DKTZU = 4 -set DKTZL = 1 - -#------------------------------ -# set DIFFUSION defaults -#------------------------------ -set EITMTH = "'gm'" -set EDRITP = "'large scale'" -set EDWMTH = "'smooth'" -set EDDF2D = .false. -set EDSPRS = .true. -set EGC = 0.85 -set EGGAM = 200. -if ("$BLOM_UNIT" == cgs) then - set EGLSMN = 4000.e2 - set EGMNDF = 100.e4 - set EGMXDF = 1500.e4 -else - set EGLSMN = 4000. - set EGMNDF = 100. - set EGMXDF = 1500. -endif -set EGIDFQ = 1. -set TBFILE = "'unset'" -set RHISCF = 0. -set EDANIS = .false. -set REDI3D = .false. -set RHSCTP = .false. -set RI0 = 1.2 -set BDMTYP = 2 -if ("$BLOM_UNIT" == cgs) then - set BDMC1 = 5.e-4 - set BDMC2 = .1 -else - set BDMC1 = 5.e-8 - set BDMC2 = 1.e-5 -endif -set TKEPF = .006 -set SMOBLD = .true. -set LNGMTP = "'none'" -if ("$BLOM_VCOORD" == isopyc_bulkml) then - set BDMLDP = .true. - set LTEDTP = "'layer'" -else - set BDMLDP = .false. - set LTEDTP = "'neutral'" -endif - -#------------------------------ -# set BGCNML defaults -#------------------------------ -set ATM_CO2 = "$CCSM_CO2_PPMV" -if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then - set DO_RIVINPT = .true. -else - set DO_RIVINPT = .false. -endif -if ("$BLOM_N_DEPOSITION" == TRUE) then - set DO_NDEP = .true. - if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx2v1) then - set NDEPFNAME = ndep_1850_CMIP6_tnx2v1_20180321.nc - else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx1v4) then - set NDEPFNAME = ndep_1850_CMIP6_tnx1v4_20171106.nc - else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx0.25v4) then - set NDEPFNAME = ndep_1850_CMIP6_tnx0.25v4_20190912.nc - else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx0.125v4) then - set NDEPFNAME = ndep_1850_CMIP6_tnx0.125v4_20221013.nc - else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx2v1) then - set NDEPFNAME = ndep_2000_CMIP6_tnx2v1_20200826.nc - else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx1v4) then - set NDEPFNAME = ndep_2000_CMIP6_tnx1v4_20200826.nc - else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx0.25v4) then - set NDEPFNAME = ndep_2000_CMIP6_tnx0.25v4_20200826.nc - else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx2v1) then - set NDEPFNAME = ndep_185001-201412_tnx2v1_20190702.nc - else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx1v4) then - set NDEPFNAME = ndep_185001-201412_tnx1v4_20180613.nc - else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx0.25v4) then - set NDEPFNAME = ndep_185001-201412_tnx0.25v4_20190705.nc - else if( `echo $BLOM_NDEP_SCENARIO | cut -c1-3` == ssp && "$OCN_GRID" == tnx1v4) then - set NDEPFNAME = ndep_201501-210012-${BLOM_NDEP_SCENARIO}_tnx1v4_20191112.nc - else if( "$BLOM_NDEP_SCENARIO" == UNSET ) then - set DO_NDEP = .false. - set NDEPFNAME = "''" - endif -else - set DO_NDEP = .false. - set NDEPFNAME = "''" -endif -if ("$HAMOCC_SEDSPINUP" == TRUE) then - set DO_SEDSPINUP = .true. - set SEDSPIN_YR_S = $HAMOCC_SEDSPINUP_YR_START - set SEDSPIN_YR_E = $HAMOCC_SEDSPINUP_YR_END - set SEDSPIN_NCYC = $HAMOCC_SEDSPINUP_NCYCLE -else - set DO_SEDSPINUP = .false. - set SEDSPIN_YR_S = -1 - set SEDSPIN_YR_E = -1 - set SEDSPIN_NCYC = -1 -endif -# VSLS is currently only available for the tnx1v4 grid, since a climatlogy file for -# short wave radiation is needed. -if ("$HAMOCC_VSLS" == TRUE && "$OCN_GRID" != tnx1v4) then - echo "$0 ERROR: HAMOCC_VSLS == TRUE not possible with this grid resolution (no swa-climatology available) " - exit -1 -endif -# For the following options, there are currently no switches in Case-XML files. -# These options can be activated by expert users via user namelist. -set DO_OALK = .false. -set BGCOAFX_OALKSCEN = "''" -set BGCOAFX_OALKFILE = "''" -set BGCOAFX_ADDALK = 0.135 -set BGCOAFX_CDRMIP_LATMAX = 70.0 -set BGCOAFX_CDRMIP_LATMIN = -60.0 -set BGCOAFX_RAMP_START = 2025 -set BGCOAFX_RAMP_END = 2035 -set WITH_DMSPH = .false. -set PI_PH_FILE = "''" -set L_3DVARSEDPOR = .false. -set SEDPORFILE = "''" - - -#------------------------------ -# set DIAPHY defaults -#------------------------------ -set GLB_FNAMETAG = "'hd','hm','hy'" -set GLB_AVEPERIO = '1, 30, 365' -if ("$TEST" == TRUE) then - set GLB_FILEFREQ = '1, 30, 365' -else - set GLB_FILEFREQ = '30, 30, 365' -endif -set GLB_COMPFLAG = '0, 0, 0' -if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then - set GLB_NCFORMAT = '1, 1, 1' -else - set GLB_NCFORMAT = '0, 0, 0' -endif -set H2D_ABSWND = '0, 4, 0' - -set H2D_ALB = '0, 0, 0' - -set H2D_BTMSTR = '0, 4, 0' -set H2D_BRNFLX = '0, 4, 0' -set H2D_BRNPD = '0, 4, 0' - -set H2D_DFL = '0, 0, 0' - -set H2D_EVA = '0, 4, 0' -set H2D_FICE = '0, 4, 0' -set H2D_FMLTFZ = '0, 4, 0' - -set H2D_HICE = '0, 0, 0' - -set H2D_HMLTFZ = '0, 4, 0' - -set H2D_HSNW = '0, 0, 0' -set H2D_IAGE = '0, 0, 0' - -set H2D_IDKEDT = '0, 4, 0' -set H2D_LAMULT = '0, 4, 0' -set H2D_LASL = '0, 4, 0' -set H2D_LIP = '0, 4, 0' - -set H2D_MAXMLD = '4, 4, 0' - -set H2D_MLD = '0, 4, 0' - -set H2D_MLTS = '4, 4, 0' - -set H2D_MLTSMN = '0, 4, 0' -set H2D_MLTSMX = '0, 4, 0' -set H2D_MLTSSQ = '0, 4, 0' -set H2D_MTKEUS = '0, 4, 0' -set H2D_MTKENI = '0, 4, 0' -set H2D_MTKEBF = '0, 4, 0' -set H2D_MTKERS = '0, 4, 0' -set H2D_MTKEPE = '0, 4, 0' -set H2D_MTKEKE = '0, 4, 0' -set H2D_MTY = '0, 4, 0' -set H2D_NSF = '0, 4, 0' -set H2D_PBOT = '0, 4, 0' -set H2D_PSRF = '0, 4, 0' -set H2D_RFIFLX = '0, 4, 0' -set H2D_RNFFLX = '0, 4, 0' -set H2D_SALFLX = '0, 4, 0' -set H2D_SALRLX = '0, 4, 0' -set H2D_SBOT = '0, 4, 0' - -set H2D_SEALV = '4, 4, 0' - -set H2D_SLVSQ = '0, 4, 0' -set H2D_SFL = '0, 4, 0' -set H2D_SOP = '0, 4, 0' -set H2D_SIGMX = '0, 4, 0' - -set H2D_SSS = '4, 4, 0' -set H2D_SSSSQ = '4, 4, 0' -set H2D_SST = '4, 4, 0' -set H2D_SSTSQ = '4, 4, 0' - -set H2D_SURFLX = '0, 4, 0' -set H2D_SURRLX = '0, 4, 0' -set H2D_SWA = '0, 4, 0' - -set H2D_T20D = '4, 4, 0' - -set H2D_TAUX = '0, 4, 0' -set H2D_TAUY = '0, 4, 0' -set H2D_TBOT = '0, 4, 0' - -set H2D_TICE = '0, 0, 0' -set H2D_TSRF = '0, 0, 0' - -set H2D_UB = '0, 4, 0' - -set H2D_UICE = '0, 0, 0' - -set H2D_USTAR = '0, 4, 0' -set H2D_USTAR3 = '0, 4, 0' - -set H2D_USTOKES = '0, 0, 0' - -set H2D_VB = '0, 4, 0' - -set H2D_VICE = '0, 0, 0' -set H2D_VSTOKES = '0, 0, 0' - -set H2D_ZTX = '0, 4, 0' -set LYR_BFSQ = '0, 4, 0' -set LYR_DIFDIA = '0, 4, 0' -set LYR_DIFVMO = '0, 4, 0' -set LYR_DIFVHO = '0, 4, 0' -set LYR_DIFVSO = '0, 4, 0' -set LYR_DIFINT = '0, 4, 0' -set LYR_DIFISO = '0, 4, 0' -set LYR_DP = '0, 4, 0' -set LYR_DZ = '0, 4, 0' -set LYR_SALN = '0, 4, 0' -set LYR_TEMP = '0, 4, 0' - -set LYR_TRC = '0, 0, 0' - -set LYR_UFLX = '0, 4, 0' -set LYR_UTFLX = '0, 4, 0' -set LYR_USFLX = '0, 4, 0' - -set LYR_UMFLTD = '0, 0, 4' -set LYR_UMFLSM = '0, 0, 4' -set LYR_UTFLTD = '0, 0, 4' -set LYR_UTFLSM = '0, 0, 4' -set LYR_UTFLLD = '0, 0, 4' -set LYR_USFLTD = '0, 0, 4' -set LYR_USFLSM = '0, 0, 4' -set LYR_USFLLD = '0, 0, 4' - -set LYR_UVEL = '0, 4, 0' -set LYR_VFLX = '0, 4, 0' -set LYR_VTFLX = '0, 4, 0' -set LYR_VSFLX = '0, 4, 0' - -set LYR_VMFLTD = '0, 0, 4' -set LYR_VMFLSM = '0, 0, 4' -set LYR_VTFLTD = '0, 0, 4' -set LYR_VTFLSM = '0, 0, 4' -set LYR_VTFLLD = '0, 0, 4' -set LYR_VSFLTD = '0, 0, 4' -set LYR_VSFLSM = '0, 0, 4' -set LYR_VSFLLD = '0, 0, 4' - -set LYR_VVEL = '0, 4, 0' -set LYR_WFLX = '0, 4, 0' -set LYR_WFLX2 = '0, 4, 0' -set LYR_PV = '0, 4, 0' -set LYR_TKE = '0, 4, 0' -set LYR_GLS_PSI = '0, 4, 0' -set LYR_IDLAGE = '0, 4, 0' -set LVL_BFSQ = '0, 4, 0' -set LVL_DIFDIA = '0, 4, 0' -set LVL_DIFVMO = '0, 4, 0' -set LVL_DIFVHO = '0, 4, 0' -set LVL_DIFVSO = '0, 4, 0' -set LVL_DIFINT = '0, 4, 0' -set LVL_DIFISO = '0, 4, 0' -set LVL_DZ = '0, 4, 0' -set LVL_SALN = '0, 4, 0' -set LVL_TEMP = '0, 4, 0' - -set LVL_TRC = '0, 0, 0' - -set LVL_UFLX = '0, 4, 0' -set LVL_UTFLX = '0, 4, 0' -set LVL_USFLX = '0, 4, 0' - -set LVL_UMFLTD = '0, 0, 4' -set LVL_UMFLSM = '0, 0, 4' -set LVL_UTFLTD = '0, 0, 4' -set LVL_UTFLSM = '0, 0, 4' -set LVL_UTFLLD = '0, 0, 4' -set LVL_USFLTD = '0, 0, 4' -set LVL_USFLSM = '0, 0, 4' -set LVL_USFLLD = '0, 0, 4' - -set LVL_UVEL = '0, 4, 0' -set LVL_VFLX = '0, 4, 0' -set LVL_VTFLX = '0, 4, 0' -set LVL_VSFLX = '0, 4, 0' - -set LVL_VMFLTD = '0, 0, 4' -set LVL_VMFLSM = '0, 0, 4' -set LVL_VTFLTD = '0, 0, 4' -set LVL_VTFLSM = '0, 0, 4' -set LVL_VTFLLD = '0, 0, 4' -set LVL_VSFLTD = '0, 0, 4' -set LVL_VSFLSM = '0, 0, 4' -set LVL_VSFLLD = '0, 0, 4' - -set LVL_VVEL = '0, 4, 0' -set LVL_WFLX = '0, 4, 0' -set LVL_WFLX2 = '0, 4, 0' -set LVL_PV = '0, 4, 0' -set LVL_TKE = '0, 4, 0' -set LVL_GLS_PSI = '0, 4, 0' -set LVL_IDLAGE = '0, 4, 0' -set MSC_MMFLXL = '0, 4, 0' -set MSC_MMFLXD = '0, 4, 0' -set MSC_MMFTDL = '0, 4, 0' -set MSC_MMFSML = '0, 4, 0' -set MSC_MMFTDD = '0, 4, 0' -set MSC_MMFSMD = '0, 4, 0' -set MSC_MHFLX = '0, 4, 0' -set MSC_MHFTD = '0, 4, 0' -set MSC_MHFSM = '0, 4, 0' -set MSC_MHFLD = '0, 4, 0' -set MSC_MSFLX = '0, 4, 0' -set MSC_MSFTD = '0, 4, 0' -set MSC_MSFSM = '0, 4, 0' -set MSC_MSFLD = '0, 4, 0' -set MSC_VOLTR = '0, 4, 0' -set MSC_MASSGS = '0, 4, 0' -set MSC_VOLGS = '0, 4, 0' -set MSC_SALNGA = '0, 4, 0' -set MSC_TEMPGA = '0, 4, 0' -set MSC_SSSGA = '0, 4, 0' -set MSC_SSTGA = '0, 4, 0' - -#------------------------------ -# set DIABGC defaults -#------------------------------ -set BGC_FNAMETAG = "'hbgcd','hbgcm','hbgcy'" -set BGC_AVEPERIO = '1,30,365' -set BGC_FILEFREQ = '30,30,365' -if ("$TEST" == TRUE) then - set BGC_FILEFREQ = ' 1,30,365' -else - set BGC_FILEFREQ = '30,30,365' -endif -set BGC_COMPFLAG = '0, 0, 0' -if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then - set BGC_NCFORMAT = '1, 1, 1' -else - set BGC_NCFORMAT = '0, 0, 0' -endif -set BGC_INVENTORY = '0, 1, 0' -set SRF_PHOSPH = '0, 2, 2' -set SRF_OXYGEN = '0, 2, 2' -set SRF_IRON = '0, 2, 2' -set SRF_ANO3 = '0, 2, 2' -set SRF_ALKALI = '4, 2, 2' -set SRF_SILICA = '0, 2, 2' -set SRF_DIC = '4, 2, 2' -set SRF_PHYTO = '4, 2, 2' -set SRF_PH = '0, 2, 2' -set SRF_EXPORT = '0, 2, 2' -set SRF_EXPOSI = '0, 2, 2' -set SRF_EXPOCA = '0, 2, 2' -set SRF_KWCO2 = '0, 2, 2' -set SRF_KWCO2KHM = '0, 2, 2' -set SRF_CO2KH = '0, 2, 2' -set SRF_CO2KHM = '0, 2, 2' -set SRF_PCO2 = '0, 2, 2' -set SRF_PCO2M = '0, 2, 2' -set SRF_CO2FXD = '4, 2, 2' -set SRF_CO2FXU = '4, 2, 2' -set SRF_OXFLUX = '0, 2, 2' -set SRF_NIFLUX = '0, 2, 2' -set SRF_N2OFX = '0, 0, 2' -set SRF_DMSFLUX = '0, 2, 2' -set SRF_DMS = '0, 2, 2' -set SRF_DMSPROD = '0, 2, 2' -set SRF_DMS_BAC = '0, 2, 2' -set SRF_DMS_UV = '0, 2, 2' -set SRF_ATMCO2 = '0, 2, 2' -set SRF_ATMO2 = '0, 2, 2' -set SRF_ATMN2 = '0, 2, 2' -set SRF_NATDIC = '0, 2, 2' -set SRF_NATALKALI = '0, 2, 2' -set SRF_NATPH = '0, 2, 2' -set SRF_NATPCO2 = '0, 2, 2' -set SRF_NATCO2FX = '0, 2, 2' -set SRF_CO213FXD = '0, 2, 2' -set SRF_CO213FXU = '0, 2, 2' -set SRF_CO214FXD = '0, 2, 2' -set SRF_CO214FXU = '0, 2, 2' -set SRF_CFC11 = '0, 2, 2' -set SRF_CFC12 = '0, 2, 2' -set SRF_SF6 = '0, 2, 2' -set SRF_BROMO = '0, 2, 2' -set SRF_BROMOFX = '0, 2, 2' -set INT_BROMOPRO = '0, 2, 2' -set INT_BROMOUV = '0, 2, 2' -set INT_PHOSY = '4, 2, 2' -set INT_NFIX = '0, 2, 2' -set INT_DNIT = '0, 2, 2' -if ("$BLOM_N_DEPOSITION" == TRUE) then -set FLX_NDEP = '0, 2, 2' -else -set FLX_NDEP = '0, 0, 0' -endif -set FLX_OALK = '0, 0, 0' -set FLX_CAR0100 = '0, 2, 2' -set FLX_CAR0500 = '0, 2, 2' -set FLX_CAR1000 = '0, 2, 2' -set FLX_CAR2000 = '0, 2, 2' -set FLX_CAR4000 = '0, 2, 2' -set FLX_CAR_BOT = '0, 2, 2' -set FLX_BSI0100 = '0, 2, 2' -set FLX_BSI0500 = '0, 2, 2' -set FLX_BSI1000 = '0, 2, 2' -set FLX_BSI2000 = '0, 2, 2' -set FLX_BSI4000 = '0, 2, 2' -set FLX_BSI_BOT = '0, 2, 2' -set FLX_CAL0100 = '0, 2, 2' -set FLX_CAL0500 = '0, 2, 2' -set FLX_CAL1000 = '0, 2, 2' -set FLX_CAL2000 = '0, 2, 2' -set FLX_CAL4000 = '0, 2, 2' -set FLX_CAL_BOT = '0, 2, 2' -set LYR_PHYTO = '0, 0, 2' -set LYR_GRAZER = '0, 0, 2' -set LYR_DOC = '0, 0, 2' -set LYR_PHOSY = '0, 0, 2' -set LYR_PHOSPH = '0, 0, 2' -set LYR_OXYGEN = '0, 0, 4' -set LYR_IRON = '0, 0, 2' -set LYR_ANO3 = '0, 0, 2' -set LYR_ALKALI = '0, 0, 2' -set LYR_SILICA = '0, 0, 2' -set LYR_DIC = '0, 0, 2' -set LYR_POC = '0, 0, 2' -set LYR_CALC = '0, 0, 2' -set LYR_OPAL = '0, 0, 2' -set LYR_CO3 = '0, 0, 2' -set LYR_N2O = '0, 0, 0' -set LYR_PH = '0, 0, 2' -set LYR_OMEGAC = '0, 0, 2' -set LYR_OMEGAA = '0, 0, 2' -set LYR_PREFO2 = '0, 0, 4' -set LYR_O2SAT = '0, 0, 4' -set LYR_PREFPO4 = '0, 0, 2' -set LYR_PREFALK = '0, 0, 2' -set LYR_PREFDIC = '0, 0, 2' -set LYR_DICSAT = '0, 0, 2' -set LYR_NATDIC = '0, 0, 2' -set LYR_NATALKALI = '0, 0, 2' -set LYR_NATCO3 = '0, 0, 2' -set LYR_NATCALC = '0, 0, 2' -set LYR_NATPH = '0, 0, 2' -set LYR_NATOMEGAC = '0, 0, 2' -set LYR_NATOMEGAA = '0, 0, 2' -set LYR_DIC13 = '0, 0, 2' -set LYR_DIC14 = '0, 0, 2' -set LYR_D13C = '0, 0, 2' -set LYR_D14C = '0, 0, 2' -set LYR_BIGD14C = '0, 0, 2' -set LYR_POC13 = '0, 0, 2' -set LYR_DOC13 = '0, 0, 2' -set LYR_CALC13 = '0, 0, 2' -set LYR_PHYTO13 = '0, 0, 2' -set LYR_GRAZER13 = '0, 0, 2' -set LYR_CFC11 = '0, 0, 2' -set LYR_CFC12 = '0, 0, 2' -set LYR_SF6 = '0, 0, 2' -set LYR_NOS = '0, 0, 2' -set LYR_WPHY = '0, 0, 2' -set LYR_WNOS = '0, 0, 2' -set LYR_EPS = '0, 0, 0' -set LYR_ASIZE = '0, 0, 0' -set LYR_BROMO = '0, 0, 2' -set BGC_DP = '0, 2, 2' -set LVL_PHYTO = '0, 2, 2' -set LVL_GRAZER = '0, 2, 2' -set LVL_DOC = '0, 2, 2' -set LVL_PHOSY = '0, 2, 2' -set LVL_PHOSPH = '0, 2, 2' -set LVL_OXYGEN = '0, 4, 4' -set LVL_IRON = '0, 2, 2' -set LVL_ANO3 = '0, 2, 2' -set LVL_ALKALI = '0, 2, 2' -set LVL_SILICA = '0, 2, 2' -set LVL_DIC = '0, 2, 2' -set LVL_POC = '0, 2, 2' -set LVL_CALC = '0, 2, 2' -set LVL_OPAL = '0, 2, 2' -set LVL_CO3 = '0, 2, 2' -set LVL_N2O = '0, 0, 2' -set LVL_PH = '0, 2, 2' -set LVL_OMEGAC = '0, 2, 2' -set LVL_OMEGAA = '0, 2, 2' -set LVL_PREFO2 = '0, 4, 4' -set LVL_O2SAT = '0, 4, 4' -set LVL_PREFPO4 = '0, 2, 2' -set LVL_PREFALK = '0, 2, 2' -set LVL_PREFDIC = '0, 2, 2' -set LVL_DICSAT = '0, 2, 2' -set LVL_NATDIC = '0, 2, 2' -set LVL_NATALKALI = '0, 2, 2' -set LVL_NATCO3 = '0, 2, 2' -set LVL_NATCALC = '0, 2, 2' -set LVL_NATPH = '0, 2, 2' -set LVL_NATOMEGAC = '0, 2, 2' -set LVL_NATOMEGAA = '0, 2, 2' -set LVL_DIC13 = '0, 2, 2' -set LVL_DIC14 = '0, 2, 2' -set LVL_D13C = '0, 2, 2' -set LVL_POC13 = '0, 2, 2' -set LVL_DOC13 = '0, 2, 2' -set LVL_CALC13 = '0, 2, 2' -set LVL_PHYTO13 = '0, 2, 2' -set LVL_GRAZER13 = '0, 2, 2' -set LVL_CFC11 = '0, 2, 2' -set LVL_CFC12 = '0, 2, 2' -set LVL_SF6 = '0, 2, 2' -set LVL_NOS = '0, 2, 2' -set LVL_WPHY = '0, 2, 2' -set LVL_WNOS = '0, 2, 2' -set LVL_EPS = '0, 0, 0' -set LVL_ASIZE = '0, 0, 0' -set LVL_BROMO = '0, 2, 2' -set FLX_SEDIFFIC = '0, 0, 2' -set FLX_SEDIFFAL = '0, 0, 2' -set FLX_SEDIFFPH = '0, 0, 2' -set FLX_SEDIFFOX = '0, 0, 2' -set FLX_SEDIFFN2 = '0, 0, 2' -set FLX_SEDIFFNO3 = '0, 0, 2' -set FLX_SEDIFFSI = '0, 0, 2' -set SDM_POWAIC = '0, 0, 2' -set SDM_POWAAL = '0, 0, 2' -set SDM_POWAPH = '0, 0, 2' -set SDM_POWAOX = '0, 0, 2' -set SDM_POWN2 = '0, 0, 2' -set SDM_POWNO3 = '0, 0, 2' -set SDM_POWASI = '0, 0, 2' -set SDM_SSSO12 = '0, 0, 2' -set SDM_SSSSIL = '0, 0, 2' -set SDM_SSSC12 = '0, 0, 2' -set SDM_SSSTER = '0, 0, 2' -set BUR_SSSO12 = '0, 0, 2' -set BUR_SSSSIL = '0, 0, 2' -set BUR_SSSC12 = '0, 0, 2' -set BUR_SSSTER = '0, 0, 2' - -# if partial coupling, enable SSS relaxation -if ("$BLOM_COUPLING" =~ *partial*) then - if ("$BLOM_VCOORD" == isopyc_bulkml) then - set SRXDAY = 6. - else - set SRXDAY = 60. - set SRXDPT = 10. - endif - set SPRFAC = .true. - set SRXBAL = .true. -endif - -# set grid dependent parameters -if ("$OCN_GRID" == gx1v5 || "$OCN_GRID" == gx1v6) then - set BACLIN = 1800. - set BATROP = 36. -else if ("$OCN_GRID" == gx3v7) then - set BACLIN = 3600. - set BATROP = 72. -else if ("$OCN_GRID" == tnx2v1 ) then - set BACLIN = 4800. - set BATROP = 96. - set EGC = 0.5 - if ("$BLOM_UNIT" == cgs) then - set EGMXDF = 1000.e4 - else - set EGMXDF = 1000. - endif - set CWMTAG = "'Gibraltar','Gibraltar'" - set CWMEDG = " 'u', 'u'" - set CWMI = " 53, 54" - set CWMJ = " 137, 137" - set CWMWTH = " 30.e3, 30.e3" -else if ("$OCN_GRID" == tnx1.5v1 ) then - set BACLIN = 4800. - set BATROP = 96. - set EGC = 0.5 - if ("$BLOM_UNIT" == cgs) then - set EGMXDF = 1000.e4 - else - set EGMXDF = 1000. - endif -else if ("$OCN_GRID" == tnx1v1 || "$OCN_GRID" == tnx1v3 || "$OCN_GRID" == tnx1v4) then - if ("$OCN_NCPL" == 24) then - set BACLIN = 3600. - set BATROP = 60. - set CWBDTS = .75e-4 - set NIWGF = .4 - set SMTFRC = .false. - if ("$BLOM_VCOORD" == isopyc_bulkml) then - set CE = .5 - endif - else - set BACLIN = 3200. - set BATROP = 64. - endif - set CWMTAG = "'Gibraltar','Gibraltar'" - set CWMEDG = " 'u', 'u'" - set CWMI = " 105, 106" - set CWMJ = " 273, 273" - set CWMWTH = " 30.e3, 30.e3" -else if ("$OCN_GRID" == tnx0.25v1 || "$OCN_GRID" == tnx0.25v3 || "$OCN_GRID" == tnx0.25v4) then - set BACLIN = 900. - set BATROP = 15. - if ("$BLOM_UNIT" == cgs) then - set MDV2HI = .15 - set MDV2LO = .15 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 300.e4 - set MDC2LO = 300.e4 - else - set MDV2HI = .0015 - set MDV2LO = .0015 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 300. - set MDC2LO = 300. - endif - set VSC2HI = .15 - set VSC2LO = .15 - set VSC4HI = 0.0625 - set VSC4LO = 0.0625 - set CWBDTS = 0.75e-4 - set CWBDLS = 25. - set EDWMTH = "'step'" - set EGC = 0.85 - if ("$BLOM_UNIT" == cgs) then - set EGMXDF = 1500.e4 - else - set EGMXDF = 1500. - endif - if ("$BLOM_VCOORD" == isopyc_bulkml) then - set CE = 1.0 - endif -else if ("$OCN_GRID" == tnx0.125v4) then - set BACLIN = 300. - set BATROP = 6. - set EGMNDF = 0. - set EGMXDF = 0. - set EDWMTH = "'step'" - set CWBDTS = .75e-4 - set CWBDLS = 25 - if ("$BLOM_UNIT" == cgs) then - set MDV2HI = .1 - set MDV2LO = .1 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 300.e4 - set MDC2LO = 100.e4 - else - set MDV2HI = .001 - set MDV2LO = .001 - set MDV4HI = 0. - set MDV4LO = 0. - set MDC2HI = 300. - set MDC2LO = 100. - endif - set VSC2HI = 0. - set VSC2LO = 0. - set VSC4HI = .06 - set VSC4LO = .06 - set LTEDTP = "'layer'" -else - echo "OCN_GRID is $OCN_GRID \n" - echo "$0 ERROR: Cannot deal with GRID equal to $OCN_GRID " - exit -1 -endif - -# set grid independent input files (iHAMOCC initial conditions) -set INIDIC = "'$DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_Ct_preind_OMIPinit_20171107.nc'" -set INIALK = "'$DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_At_OMIPinit_20171107.nc'" -set INIPO4 = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_phosphate_OMIPinit_20171107.nc'" -set INIOXY = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_oxygen_OMIPinit_20171107.nc'" -set ININO3 = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_nitrate_OMIPinit_20171107.nc'" -set INISIL = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_silicate_OMIPinit_20171107.nc'" -if ("$HAMOCC_CISO" == TRUE) then -set INID13C = "'$DIN_LOC_ROOT/ocn/blom/inicon/d13C_permil_20180609.nc'" -set INID14C = "'$DIN_LOC_ROOT/ocn/blom/inicon/d14C_permil_20180609.nc'" -else -set INID13C = "''" -set INID14C = "''" -endif - -# set grid dependent input files -if ("$OCN_GRID" == tnx2v1) then - set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx2v1_20130206.nc'" - set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx2v1_20130419.nc'" - set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx2v1_20130419.nc'" - set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx2v1_20190826.nc'" - set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx2v1_20190826.dat'" - set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx2v1_20190826.dat'" - set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx2v1_20130927.nc'" - set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx2v1_20130506.nc'" - set SWACLIMFILE = "''" - set SEDPORFILE = "''" - if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then - set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx2v1_20170915.nc'" - else - set RIVINFILE = "''" - endif - if ("$BLOM_N_DEPOSITION" == TRUE) then - set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" - else - set NDEPFILE = "''" - endif -else if ("$OCN_GRID" == tnx1v4) then - set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx1v4_20170622.nc'" - set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx1v4_20170622.nc'" - set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx1v4_20170605.nc'" - set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx1v4_20190729.nc'" - set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx1v4_20190615.dat'" - set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx1v4_20190611.dat'" - set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx1v4_20170608.nc'" - set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx1v4_20170604.nc'" - set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx1v4_20171107.nc'" - set SEDPORFILE = "''" - if ("$HAMOCC_VSLS" == TRUE) then - set SWACLIMFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/Annual_clim_swa_tnx1v4_20210415.nc'" - else - set SWACLIMFILE = "''" - endif - if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then - set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx1v4_20170820.nc'" - else - set RIVINFILE = "''" - endif - if ("$BLOM_N_DEPOSITION" == TRUE) then - set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" - else - set NDEPFILE = "''" - endif -else if ("$OCN_GRID" == tnx0.25v4) then - set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.25v4_20170622.nc'" - set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.25v4_20170623.nc'" - set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.25v4_20170626.nc'" - set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.25v4_20190612.nc'" - set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.25v4_20190701.dat'" - set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.25v4_20190612.dat'" - set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.25v4_20170623.nc'" - set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.25v4_20170623.nc'" - set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.25v4_20181004.nc'" - set SWACLIMFILE = "''" - set SEDPORFILE = "''" - if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then - set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.25v4_20170821.nc'" - else - set RIVINFILE = "''" - endif - if ("$BLOM_N_DEPOSITION" == TRUE) then - set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" - else - set NDEPFILE = "''" - endif -else if ("$OCN_GRID" == tnx0.125v4) then - set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.125v4_20221013.nc'" - set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.125v4_20230318.nc'" - set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.125v4_20221013.nc'" - set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.125v4_20221013.nc'" - set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.125v4_20221013.dat'" - set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.125v4_20221013.dat'" - set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.125v4_20221013.nc'" - set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.125v4_20221013.nc'" - set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.125v4_20221013.nc'" - set SWACLIMFILE = "''" - set SEDPORFILE = "''" - if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then - set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.125v4_20221013.nc'" - else - set RIVINFILE = "''" - endif - if ("$BLOM_N_DEPOSITION" == TRUE) then - set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" - else - set NDEPFILE = "''" - endif -else - echo "$0 ERROR: Cannot deal with GRID = $OCN_GRID " - exit -1 -endif - - -#------------------------------------------------------------------------------ -# Create resolved namelist -#------------------------------------------------------------------------------ -foreach mem ("`seq $NINST_OCN`") - if ( ${NINST_OCN} == '1' ) then - set inststr = '' - else - set inststr = ("`printf '_%4.4d' $mem`") - endif - - # modify namelist variables as specified in user_nl_blom - foreach line ("`grep = $CASEROOT/user_nl_blom$inststr`") - if (`echo "$line" | tr -d ' ' | cut -c -1` != '#') then - set var = `echo "$line" | sed 's/=.*//' | tr '[a-z]' '[A-Z]'` - set val = `echo "$line" | sed 's/.*=//'` - eval 'set $var = "$val"' - endif - end - -cp ocn_in.readme $RUNDIR/. - -cat >! $RUNDIR/ocn_in$inststr << EOF -&LIMITS - NDAY1 = $NDAY1 - NDAY2 = $NDAY2 - IDATE = $IDATE - IDATE0 = $IDATE0 - RUNID = $RUNID - EXPCNF = $EXPCNF - RUNTYP = $RUNTYP - GRFILE = $GRFILE - ICFILE = $ICFILE - PREF = $PREF - BACLIN = $BACLIN - BATROP = $BATROP - MDV2HI = $MDV2HI - MDV2LO = $MDV2LO - MDV4HI = $MDV4HI - MDV4LO = $MDV4LO - MDC2HI = $MDC2HI - MDC2LO = $MDC2LO - VSC2HI = $VSC2HI - VSC2LO = $VSC2LO - VSC4HI = $VSC4HI - VSC4LO = $VSC4LO - CBAR = $CBAR - CB = $CB - CWBDTS = $CWBDTS - CWBDLS = $CWBDLS - MOMMTH = $MOMMTH - BMCMTH = $BMCMTH - RMPMTH = $RMPMTH - MLRTTP = $MLRTTP - RM0 = $RM0 - RM5 = $RM5 - CE = $CE - TDFILE = $TDFILE - NIWGF = $NIWGF - NIWBF = $NIWBF - NIWLF = $NIWLF - SWAMTH = $SWAMTH - JWTYPE = $JWTYPE - CHLOPT = $CHLOPT - CCFILE = $CCFILE - TRXDAY = $TRXDAY - SRXDAY = $SRXDAY - TRXDPT = $TRXDPT - SRXDPT = $SRXDPT - TRXLIM = $TRXLIM - SRXLIM = $SRXLIM - APTFLX = $APTFLX - APSFLX = $APSFLX - DITFLX = $DITFLX - DISFLX = $DISFLX - SRXBAL = $SRXBAL - SCFILE = $SCFILE - WAVSRC = $WAVSRC - SMTFRC = $SMTFRC - SPRFAC = $SPRFAC - ATM_PATH = $ATM_PATH - ITEST = $ITEST - JTEST = $JTEST - CNSVDI = $CNSVDI - CSDIAG = $CSDIAG - RSTFRQ = $RSTFRQ - RSTFMT = $RSTFMT - RSTCMP = $RSTCMP - IOTYPE = $IOTYPE -/ -EOF - -if ("$BLOM_VCOORD" == cntiso_hybrid) then -cat >>! $RUNDIR/ocn_in$inststr << EOF - -&VCOORD - VCOORD_TYPE = $VCOORD_TYPE - RECONSTRUCTION_METHOD = $RECONSTRUCTION_METHOD - DENSITY_LIMITING = $DENSITY_LIMITING - TRACER_LIMITING = $TRACER_LIMITING - VELOCITY_LIMITING = $VELOCITY_LIMITING - DENSITY_PC_UPPER_BNDR = $DENSITY_PC_UPPER_BNDR - DENSITY_PC_LOWER_BNDR = $DENSITY_PC_LOWER_BNDR - TRACER_PC_UPPER_BNDR = $TRACER_PC_UPPER_BNDR - TRACER_PC_LOWER_BNDR = $TRACER_PC_LOWER_BNDR - VELOCITY_PC_UPPER_BNDR = $VELOCITY_PC_UPPER_BNDR - VELOCITY_PC_LOWER_BNDR = $VELOCITY_PC_LOWER_BNDR - DPMIN_SURFACE = $DPMIN_SURFACE - DPMIN_INFLATION_FACTOR = $DPMIN_INFLATION_FACTOR - DPMIN_INTERIOR = $DPMIN_INTERIOR - DKTZU = $DKTZU - DKTZL = $DKTZL -/ -EOF -endif - -cat >>! $RUNDIR/ocn_in$inststr << EOF - -&DIFFUSION - EITMTH = $EITMTH - EDRITP = $EDRITP - EDWMTH = $EDWMTH - EDDF2D = $EDDF2D - EDSPRS = $EDSPRS - EGC = $EGC - EGGAM = $EGGAM - EGLSMN = $EGLSMN - EGMNDF = $EGMNDF - EGMXDF = $EGMXDF - EGIDFQ = $EGIDFQ - TBFILE = $TBFILE - RHISCF = $RHISCF - EDANIS = $EDANIS - REDI3D = $REDI3D - RHSCTP = $RHSCTP - RI0 = $RI0 - BDMTYP = $BDMTYP - BDMC1 = $BDMC1 - BDMC2 = $BDMC2 - BDMLDP = $BDMLDP - TKEPF = $TKEPF - SMOBLD = $SMOBLD - LNGMTP = $LNGMTP - LTEDTP = $LTEDTP -/ -EOF - -if ($?CWMTAG) then -cat >>! $RUNDIR/ocn_in$inststr << EOF - -&CWMOD - CWMTAG = $CWMTAG - CWMEDG = $CWMEDG - CWMI = $CWMI - CWMJ = $CWMJ - CWMWTH = $CWMWTH -/ -EOF -endif - -cat >>! $RUNDIR/ocn_in$inststr << EOF - -&MERDIA - MER_ORFILE = $MER_ORFILE - MER_MIFILE = $MER_MIFILE - MER_REGNAM = 'atlantic_arctic_ocean', 'atlantic_arctic_extended_ocean', 'indian_pacific_ocean', 'global_ocean' - MER_REGFLG(1,:) = 2, 4 - MER_REGFLG(2,:) = 2, 4, 6, 7, 8, 9 - MER_REGFLG(3,:) = 3, 5 - MER_REGFLG(4,:) = 0 - MER_MINLAT = -34., -34., -34., -90. - MER_MAXLAT = 90., 90., 90., 90. -/ - -&SECDIA - SEC_SIFILE = $SEC_SIFILE -/ - -&DIAPHY - GLB_FNAMETAG = $GLB_FNAMETAG - GLB_AVEPERIO = $GLB_AVEPERIO - GLB_FILEFREQ = $GLB_FILEFREQ - GLB_COMPFLAG = $GLB_COMPFLAG - GLB_NCFORMAT = $GLB_NCFORMAT - H2D_ABSWND = $H2D_ABSWND - H2D_ALB = $H2D_ALB - H2D_BTMSTR = $H2D_BTMSTR - H2D_BRNFLX = $H2D_BRNFLX - H2D_BRNPD = $H2D_BRNPD - H2D_DFL = $H2D_DFL - H2D_EVA = $H2D_EVA - H2D_FICE = $H2D_FICE - H2D_FMLTFZ = $H2D_FMLTFZ - H2D_HICE = $H2D_HICE - H2D_HMLTFZ = $H2D_HMLTFZ - H2D_HSNW = $H2D_HSNW - H2D_IAGE = $H2D_IAGE - H2D_IDKEDT = $H2D_IDKEDT - H2D_LAMULT = $H2D_LAMULT - H2D_LASL = $H2D_LASL - H2D_LIP = $H2D_LIP - H2D_MAXMLD = $H2D_MAXMLD - H2D_MLD = $H2D_MLD - H2D_MLTS = $H2D_MLTS - H2D_MLTSMN = $H2D_MLTSMN - H2D_MLTSMX = $H2D_MLTSMX - H2D_MLTSSQ = $H2D_MLTSSQ - H2D_MTKEUS = $H2D_MTKEUS - H2D_MTKENI = $H2D_MTKENI - H2D_MTKEBF = $H2D_MTKEBF - H2D_MTKERS = $H2D_MTKERS - H2D_MTKEPE = $H2D_MTKEPE - H2D_MTKEKE = $H2D_MTKEKE - H2D_MTY = $H2D_MTY - H2D_NSF = $H2D_NSF - H2D_PBOT = $H2D_PBOT - H2D_PSRF = $H2D_PSRF - H2D_RFIFLX = $H2D_RFIFLX - H2D_RNFFLX = $H2D_RNFFLX - H2D_SALFLX = $H2D_SALFLX - H2D_SALRLX = $H2D_SALRLX - H2D_SBOT = $H2D_SBOT - H2D_SEALV = $H2D_SEALV - H2D_SLVSQ = $H2D_SLVSQ - H2D_SFL = $H2D_SFL - H2D_SOP = $H2D_SOP - H2D_SIGMX = $H2D_SIGMX - H2D_SSS = $H2D_SSS - H2D_SSSSQ = $H2D_SSSSQ - H2D_SST = $H2D_SST - H2D_SSTSQ = $H2D_SSTSQ - H2D_SURFLX = $H2D_SURFLX - H2D_SURRLX = $H2D_SURRLX - H2D_SWA = $H2D_SWA - H2D_T20D = $H2D_T20D - H2D_TAUX = $H2D_TAUX - H2D_TAUY = $H2D_TAUY - H2D_TBOT = $H2D_TBOT - H2D_TICE = $H2D_TICE - H2D_TSRF = $H2D_TSRF - H2D_UB = $H2D_UB - H2D_UICE = $H2D_UICE - H2D_USTAR = $H2D_USTAR - H2D_USTAR3 = $H2D_USTAR3 - H2D_USTOKES = $H2D_USTOKES - H2D_VB = $H2D_VB - H2D_VICE = $H2D_VICE - H2D_VSTOKES = $H2D_VSTOKES - H2D_ZTX = $H2D_ZTX - LYR_BFSQ = $LYR_BFSQ - LYR_DIFDIA = $LYR_DIFDIA - LYR_DIFVMO = $LYR_DIFVMO - LYR_DIFVHO = $LYR_DIFVHO - LYR_DIFVSO = $LYR_DIFVSO - LYR_DIFINT = $LYR_DIFINT - LYR_DIFISO = $LYR_DIFISO - LYR_DP = $LYR_DP - LYR_DZ = $LYR_DZ - LYR_SALN = $LYR_SALN - LYR_TEMP = $LYR_TEMP - LYR_TRC = $LYR_TRC - LYR_UFLX = $LYR_UFLX - LYR_UTFLX = $LYR_UTFLX - LYR_USFLX = $LYR_USFLX - LYR_UMFLTD = $LYR_UMFLTD - LYR_UMFLSM = $LYR_UMFLSM - LYR_UTFLTD = $LYR_UTFLTD - LYR_UTFLSM = $LYR_UTFLSM - LYR_UTFLLD = $LYR_UTFLLD - LYR_USFLTD = $LYR_USFLTD - LYR_USFLSM = $LYR_USFLSM - LYR_USFLLD = $LYR_USFLLD - LYR_UVEL = $LYR_UVEL - LYR_VFLX = $LYR_VFLX - LYR_VTFLX = $LYR_VTFLX - LYR_VSFLX = $LYR_VSFLX - LYR_VMFLTD = $LYR_VMFLTD - LYR_VMFLSM = $LYR_VMFLSM - LYR_VTFLTD = $LYR_VTFLTD - LYR_VTFLSM = $LYR_VTFLSM - LYR_VTFLLD = $LYR_VTFLLD - LYR_VSFLTD = $LYR_VSFLTD - LYR_VSFLSM = $LYR_VSFLSM - LYR_VSFLLD = $LYR_VSFLLD - LYR_VVEL = $LYR_VVEL - LYR_WFLX = $LYR_WFLX - LYR_WFLX2 = $LYR_WFLX2 - LYR_PV = $LYR_PV - LYR_TKE = $LYR_TKE - LYR_GLS_PSI = $LYR_GLS_PSI - LYR_IDLAGE = $LYR_IDLAGE - LVL_BFSQ = $LVL_BFSQ - LVL_DIFDIA = $LVL_DIFDIA - LVL_DIFVMO = $LVL_DIFVMO - LVL_DIFVHO = $LVL_DIFVHO - LVL_DIFVSO = $LVL_DIFVSO - LVL_DIFINT = $LVL_DIFINT - LVL_DIFISO = $LVL_DIFISO - LVL_DZ = $LVL_DZ - LVL_SALN = $LVL_SALN - LVL_TEMP = $LVL_TEMP - LVL_TRC = $LVL_TRC - LVL_UFLX = $LVL_UFLX - LVL_UTFLX = $LVL_UTFLX - LVL_USFLX = $LVL_USFLX - LVL_UMFLTD = $LVL_UMFLTD - LVL_UMFLSM = $LVL_UMFLSM - LVL_UTFLTD = $LVL_UTFLTD - LVL_UTFLSM = $LVL_UTFLSM - LVL_UTFLLD = $LVL_UTFLLD - LVL_USFLTD = $LVL_USFLTD - LVL_USFLSM = $LVL_USFLSM - LVL_USFLLD = $LVL_USFLLD - LVL_UVEL = $LVL_UVEL - LVL_VFLX = $LVL_VFLX - LVL_VTFLX = $LVL_VTFLX - LVL_VSFLX = $LVL_VSFLX - LVL_VMFLTD = $LVL_VMFLTD - LVL_VMFLSM = $LVL_VMFLSM - LVL_VTFLTD = $LVL_VTFLTD - LVL_VTFLSM = $LVL_VTFLSM - LVL_VTFLLD = $LVL_VTFLLD - LVL_VSFLTD = $LVL_VSFLTD - LVL_VSFLSM = $LVL_VSFLSM - LVL_VSFLLD = $LVL_VSFLLD - LVL_VVEL = $LVL_VVEL - LVL_WFLX = $LVL_WFLX - LVL_WFLX2 = $LVL_WFLX2 - LVL_PV = $LVL_PV - LVL_TKE = $LVL_TKE - LVL_GLS_PSI = $LVL_GLS_PSI - LVL_IDLAGE = $LVL_IDLAGE - MSC_MMFLXL = $MSC_MMFLXL - MSC_MMFLXD = $MSC_MMFLXD - MSC_MMFTDL = $MSC_MMFTDL - MSC_MMFSML = $MSC_MMFSML - MSC_MMFTDD = $MSC_MMFTDD - MSC_MMFSMD = $MSC_MMFSMD - MSC_MHFLX = $MSC_MHFLX - MSC_MHFTD = $MSC_MHFTD - MSC_MHFSM = $MSC_MHFSM - MSC_MHFLD = $MSC_MHFLD - MSC_MSFLX = $MSC_MSFLX - MSC_MSFTD = $MSC_MSFTD - MSC_MSFSM = $MSC_MSFSM - MSC_MSFLD = $MSC_MSFLD - MSC_VOLTR = $MSC_VOLTR - MSC_MASSGS = $MSC_MASSGS - MSC_VOLGS = $MSC_VOLGS - MSC_SALNGA = $MSC_SALNGA - MSC_TEMPGA = $MSC_TEMPGA - MSC_SSSGA = $MSC_SSSGA - MSC_SSTGA = $MSC_SSTGA -/ -EOF - -if ("$ecosys" == TRUE) then -cat >>! $RUNDIR/ocn_in$inststr << EOF - -&BGCNML - ATM_CO2 = $CCSM_CO2_PPMV - FEDEPFILE = $FEDEPFILE - SWACLIMFILE = $SWACLIMFILE - DO_RIVINPT = $DO_RIVINPT - RIVINFILE = $RIVINFILE - DO_NDEP = $DO_NDEP - NDEPFILE = $NDEPFILE - DO_OALK = $DO_OALK - DO_SEDSPINUP = $DO_SEDSPINUP - SEDSPIN_YR_S = $SEDSPIN_YR_S - SEDSPIN_YR_E = $SEDSPIN_YR_E - SEDSPIN_NCYC = $SEDSPIN_NCYC - INIDIC = $INIDIC - INIALK = $INIALK - INIPO4 = $INIPO4 - INIOXY = $INIOXY - ININO3 = $ININO3 - INISIL = $INISIL - INID13C = $INID13C - INID14C = $INID14C - WITH_DMSPH = $WITH_DMSPH - PI_PH_FILE = $PI_PH_FILE - L_3DVARSEDPOR = $L_3DVARSEDPOR - SEDPORFILE = $SEDPORFILE -/ - -&BGCOAFX - OALKSCEN = $BGCOAFX_OALKSCEN - OALKFILE = $BGCOAFX_OALKFILE - ADDALK = $BGCOAFX_ADDALK - CDRMIP_LATMAX = $BGCOAFX_CDRMIP_LATMAX - CDRMIP_LATMIN = $BGCOAFX_CDRMIP_LATMIN - RAMP_START = $BGCOAFX_RAMP_START - RAMP_END = $BGCOAFX_RAMP_END -/ - -&DIABGC - GLB_FNAMETAG = $BGC_FNAMETAG - GLB_AVEPERIO = $BGC_AVEPERIO - GLB_FILEFREQ = $BGC_FILEFREQ - GLB_COMPFLAG = $BGC_COMPFLAG - GLB_NCFORMAT = $BGC_NCFORMAT - GLB_INVENTORY = $BGC_INVENTORY - SRF_PHOSPH = $SRF_PHOSPH - SRF_OXYGEN = $SRF_OXYGEN - SRF_IRON = $SRF_IRON - SRF_ANO3 = $SRF_ANO3 - SRF_ALKALI = $SRF_ALKALI - SRF_SILICA = $SRF_SILICA - SRF_DIC = $SRF_DIC - SRF_PHYTO = $SRF_PHYTO - SRF_PH = $SRF_PH - SRF_EXPORT = $SRF_EXPORT - SRF_EXPOSI = $SRF_EXPOSI - SRF_EXPOCA = $SRF_EXPOCA - SRF_KWCO2 = $SRF_KWCO2 - SRF_KWCO2KHM = $SRF_KWCO2KHM - SRF_CO2KH = $SRF_CO2KH - SRF_CO2KHM = $SRF_CO2KHM - SRF_PCO2 = $SRF_PCO2 - SRF_PCO2M = $SRF_PCO2M - SRF_CO2FXD = $SRF_CO2FXD - SRF_CO2FXU = $SRF_CO2FXU - SRF_OXFLUX = $SRF_OXFLUX - SRF_NIFLUX = $SRF_NIFLUX - SRF_N2OFX = $SRF_N2OFX - SRF_DMSFLUX = $SRF_DMSFLUX - SRF_DMS = $SRF_DMS - SRF_DMSPROD = $SRF_DMSPROD - SRF_DMS_BAC = $SRF_DMS_BAC - SRF_DMS_UV = $SRF_DMS_UV - SRF_ATMCO2 = $SRF_ATMCO2 - SRF_ATMO2 = $SRF_ATMO2 - SRF_ATMN2 = $SRF_ATMN2 - SRF_NATDIC = $SRF_NATDIC - SRF_NATALKALI = $SRF_NATALKALI - SRF_NATPH = $SRF_NATPH - SRF_NATPCO2 = $SRF_NATPCO2 - SRF_NATCO2FX = $SRF_NATCO2FX - SRF_CO213FXD = $SRF_CO213FXD - SRF_CO213FXU = $SRF_CO213FXU - SRF_CO214FXD = $SRF_CO214FXD - SRF_CO214FXU = $SRF_CO214FXU - SRF_CFC11 = $SRF_CFC11 - SRF_CFC12 = $SRF_CFC12 - SRF_SF6 = $SRF_SF6 - SRF_BROMO = $SRF_BROMO - SRF_BROMOFX = $SRF_BROMOFX - INT_BROMOPRO = $INT_BROMOPRO - INT_BROMOUV = $INT_BROMOUV - INT_PHOSY = $INT_PHOSY - INT_NFIX = $INT_NFIX - INT_DNIT = $INT_DNIT - FLX_NDEP = $FLX_NDEP - FLX_OALK = $FLX_OALK - FLX_CAR0100 = $FLX_CAR0100 - FLX_CAR0500 = $FLX_CAR0500 - FLX_CAR1000 = $FLX_CAR1000 - FLX_CAR2000 = $FLX_CAR2000 - FLX_CAR4000 = $FLX_CAR4000 - FLX_CAR_BOT = $FLX_CAR_BOT - FLX_BSI0100 = $FLX_BSI0100 - FLX_BSI0500 = $FLX_BSI0500 - FLX_BSI1000 = $FLX_BSI1000 - FLX_BSI2000 = $FLX_BSI2000 - FLX_BSI4000 = $FLX_BSI4000 - FLX_BSI_BOT = $FLX_BSI_BOT - FLX_CAL0100 = $FLX_CAL0100 - FLX_CAL0500 = $FLX_CAL0500 - FLX_CAL1000 = $FLX_CAL1000 - FLX_CAL2000 = $FLX_CAL2000 - FLX_CAL4000 = $FLX_CAL4000 - FLX_CAL_BOT = $FLX_CAL_BOT - LYR_PHYTO = $LYR_PHYTO - LYR_GRAZER = $LYR_GRAZER - LYR_DOC = $LYR_DOC - LYR_PHOSY = $LYR_PHOSY - LYR_PHOSPH = $LYR_PHOSPH - LYR_OXYGEN = $LYR_OXYGEN - LYR_IRON = $LYR_IRON - LYR_ANO3 = $LYR_ANO3 - LYR_ALKALI = $LYR_ALKALI - LYR_SILICA = $LYR_SILICA - LYR_DIC = $LYR_DIC - LYR_POC = $LYR_POC - LYR_CALC = $LYR_CALC - LYR_OPAL = $LYR_OPAL - LYR_CO3 = $LYR_CO3 - LYR_N2O = $LYR_N2O - LYR_PH = $LYR_PH - LYR_OMEGAC = $LYR_OMEGAC - LYR_OMEGAA = $LYR_OMEGAA - LYR_PREFO2 = $LYR_PREFO2 - LYR_O2SAT = $LYR_O2SAT - LYR_PREFPO4 = $LYR_PREFPO4 - LYR_PREFALK = $LYR_PREFALK - LYR_PREFDIC = $LYR_PREFDIC - LYR_DICSAT = $LYR_DICSAT - LYR_NATDIC = $LYR_NATDIC - LYR_NATALKALI = $LYR_NATALKALI - LYR_NATCO3 = $LYR_NATCO3 - LYR_NATCALC = $LYR_NATCALC - LYR_NATPH = $LYR_NATPH - LYR_NATOMEGAC = $LYR_NATOMEGAC - LYR_NATOMEGAA = $LYR_NATOMEGAA - LYR_DIC13 = $LYR_DIC13 - LYR_DIC14 = $LYR_DIC14 - LYR_D13C = $LYR_D13C - LYR_D14C = $LYR_D14C - LYR_BIGD14C = $LYR_BIGD14C - LYR_POC13 = $LYR_POC13 - LYR_DOC13 = $LYR_DOC13 - LYR_CALC13 = $LYR_CALC13 - LYR_PHYTO13 = $LYR_PHYTO13 - LYR_GRAZER13 = $LYR_GRAZER13 - LYR_CFC11 = $LYR_CFC11 - LYR_CFC12 = $LYR_CFC12 - LYR_SF6 = $LYR_SF6 - LYR_NOS = $LYR_NOS - LYR_WPHY = $LYR_WPHY - LYR_WNOS = $LYR_WNOS - LYR_EPS = $LYR_EPS - LYR_ASIZE = $LYR_ASIZE - LYR_DP = $BGC_DP - LYR_BROMO = $LYR_BROMO - LVL_PHYTO = $LVL_PHYTO - LVL_GRAZER = $LVL_GRAZER - LVL_DOC = $LVL_DOC - LVL_PHOSY = $LVL_PHOSY - LVL_PHOSPH = $LVL_PHOSPH - LVL_OXYGEN = $LVL_OXYGEN - LVL_IRON = $LVL_IRON - LVL_ANO3 = $LVL_ANO3 - LVL_ALKALI = $LVL_ALKALI - LVL_SILICA = $LVL_SILICA - LVL_DIC = $LVL_DIC - LVL_POC = $LVL_POC - LVL_CALC = $LVL_CALC - LVL_OPAL = $LVL_OPAL - LVL_CO3 = $LVL_CO3 - LVL_N2O = $LVL_N2O - LVL_PH = $LVL_PH - LVL_OMEGAC = $LVL_OMEGAC - LVL_OMEGAA = $LVL_OMEGAA - LVL_PREFO2 = $LVL_PREFO2 - LVL_O2SAT = $LVL_O2SAT - LVL_PREFPO4 = $LVL_PREFPO4 - LVL_PREFALK = $LVL_PREFALK - LVL_PREFDIC = $LVL_PREFDIC - LVL_DICSAT = $LVL_DICSAT - LVL_NATDIC = $LVL_NATDIC - LVL_NATALKALI = $LVL_NATALKALI - LVL_NATCO3 = $LVL_NATCO3 - LVL_NATCALC = $LVL_NATCALC - LVL_NATPH = $LVL_NATPH - LVL_NATOMEGAC = $LVL_NATOMEGAC - LVL_NATOMEGAA = $LVL_NATOMEGAA - LVL_DIC13 = $LVL_DIC13 - LVL_DIC14 = $LVL_DIC14 - LVL_D13C = $LVL_D13C - LVL_POC13 = $LVL_POC13 - LVL_DOC13 = $LVL_DOC13 - LVL_CALC13 = $LVL_CALC13 - LVL_PHYTO13 = $LVL_PHYTO13 - LVL_GRAZER13 = $LVL_GRAZER13 - LVL_CFC11 = $LVL_CFC11 - LVL_CFC12 = $LVL_CFC12 - LVL_SF6 = $LVL_SF6 - LVL_NOS = $LVL_NOS - LVL_WPHY = $LVL_WPHY - LVL_WNOS = $LVL_WNOS - LVL_EPS = $LVL_EPS - LVL_ASIZE = $LVL_ASIZE - LVL_BROMO = $LVL_BROMO - FLX_SEDIFFIC = $FLX_SEDIFFIC - FLX_SEDIFFAL = $FLX_SEDIFFAL - FLX_SEDIFFPH = $FLX_SEDIFFPH - FLX_SEDIFFOX = $FLX_SEDIFFOX - FLX_SEDIFFN2 = $FLX_SEDIFFN2 - FLX_SEDIFFNO3 = $FLX_SEDIFFNO3 - FLX_SEDIFFSI = $FLX_SEDIFFSI - SDM_POWAIC = $SDM_POWAIC - SDM_POWAAL = $SDM_POWAAL - SDM_POWAPH = $SDM_POWAPH - SDM_POWAOX = $SDM_POWAOX - SDM_POWN2 = $SDM_POWN2 - SDM_POWNO3 = $SDM_POWNO3 - SDM_POWASI = $SDM_POWASI - SDM_SSSO12 = $SDM_SSSO12 - SDM_SSSSIL = $SDM_SSSSIL - SDM_SSSC12 = $SDM_SSSC12 - SDM_SSSTER = $SDM_SSSTER - BUR_SSSO12 = $BUR_SSSO12 - BUR_SSSSIL = $BUR_SSSSIL - BUR_SSSC12 = $BUR_SSSC12 - BUR_SSSTER = $BUR_SSSTER -/ -EOF -endif - -end ## foreach mem ("`seq $NINST_OCN`") - -#------------------------------------------------------------------------------ -# Generate blom.input_data_list -#------------------------------------------------------------------------------ - -cat > $CASEBUILD/blom.input_data_list << EOF -grid_file = `echo $GRFILE | tr -d '"' | tr -d "'"` -meridional_transport_index_file = `echo $MER_MIFILE | tr -d '"' | tr -d "'"` -meridional_transport_basin_file = `echo $MER_ORFILE | tr -d '"' | tr -d "'"` -section_index_file = `echo $SEC_SIFILE | tr -d '"' | tr -d "'"` -tidal_dissipation_file = `echo $TDFILE | tr -d '"' | tr -d "'"` -EOF -if ($SWAMTH == "'chlorophyll'") then -cat >> $CASEBUILD/blom.input_data_list << EOF -chlorophyll_concentration_file = `echo $CCFILE | tr -d '"' | tr -d "'"` -EOF -endif -if ($SRXDAY != "0.") then -cat >> $CASEBUILD/blom.input_data_list << EOF -sss_climatology_file = `echo $SCFILE | tr -d '"' | tr -d "'"` -EOF -endif - -# iHAMOCC boundary conditions -if ($ecosys == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -dust_file = `echo $FEDEPFILE | tr -d '"' | tr -d "'"` -EOF - if ($BLOM_RIVER_NUTRIENTS == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -river_file = `echo $RIVINFILE | tr -d '"' | tr -d "'"` -EOF - endif - if ($BLOM_N_DEPOSITION == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -n_deposition_file = `echo $NDEPFILE | tr -d '"' | tr -d "'"` -EOF - endif - if ($BGCOAFX_OALKFILE != "''") then -cat >> $CASEBUILD/blom.input_data_list << EOF -oafx_file = `echo $BGCOAFX_OALKFILE | tr -d '"' | tr -d "'"` -EOF - endif - if ($HAMOCC_VSLS == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -swa_clim_file = `echo $SWACLIMFILE | tr -d '"' | tr -d "'"` -EOF - endif - if ($L_3DVARSEDPOR == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -sed_porosity_file = `echo $SEDPORFILE | tr -d '"' | tr -d "'"` -EOF - endif -endif - -# BLOM initial conditions -cat >> $CASEBUILD/blom.input_data_list << EOF -inicon_file = `echo $ICFILE | tr -d '"' | tr -d "'"` -EOF - - -# iHAMOCC initial conditions -if ($ecosys == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -inidic_file = `echo $INIDIC | tr -d '"' | tr -d "'"` -inialk_file = `echo $INIALK | tr -d '"' | tr -d "'"` -inipo4_file = `echo $INIPO4 | tr -d '"' | tr -d "'"` -inioxy_file = `echo $INIOXY | tr -d '"' | tr -d "'"` -inino3_file = `echo $ININO3 | tr -d '"' | tr -d "'"` -inisil_file = `echo $INISIL | tr -d '"' | tr -d "'"` -EOF - if ($HAMOCC_CISO == TRUE) then -cat >> $CASEBUILD/blom.input_data_list << EOF -inic13_file = `echo $INID13C | tr -d '"' | tr -d "'"` -inic14_file = `echo $INID14C | tr -d '"' | tr -d "'"` -EOF - endif - if ($RUN_TYPE == startup) then - if ($ICFILE =~ *.blom.r.*) then -cat >> $CASEBUILD/blom.input_data_list << EOF -inicon_bgc_file = `echo $ICFILE | sed 's/.blom.r./.blom.rbgc./' | tr -d '"' | tr -d "'"` -EOF - else if ($ICFILE =~ *.micom.r.*) then -cat >> $CASEBUILD/blom.input_data_list << EOF -inicon_bgc_file = `echo $ICFILE | sed 's/.micom.r./.micom.rbgc./' | tr -d '"' | tr -d "'"` -EOF - endif - endif -endif - - +#!/usr/bin/env python3 + +"""BLOM namelist creator +""" + +# Typically ignore this. +# pylint: disable=invalid-name + +# Disable these because this is our standard setup +# pylint: disable=wildcard-import,unused-wildcard-import,wrong-import-position + +import os, shutil, sys, glob, filecmp, imp, re + +CIMEROOT = os.environ.get("CIMEROOT") +if CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +sys.path.append(os.path.join(CIMEROOT, "CIME", "Tools")) + +from standard_script_setup import * +from CIME.case import Case +from CIME.nmlgen import NamelistGenerator +from CIME.utils import expect +from CIME.utils import run_cmd_no_fail, expect +from CIME.utils import run_cmd +from CIME.buildnml import create_namelist_infile, parse_input + +import glob, shutil +logger = logging.getLogger(__name__) + +# pylint: disable=too-many-arguments,too-many-locals,too-many-branches,too-many-statements +#################################################################################### +def _create_namelists(case, confdir, infile, nmlgen): +#################################################################################### + + """Write out the namelist for this component. + + Most arguments are the same as those for `NamelistGenerator`. + The `confdir` argument is used to specify the directory in which output files will be placed. + """ + rundir = case.get_value("RUNDIR") + srcroot = case.get_value("SRCROOT") + din_loc_root = case.get_value("DIN_LOC_ROOT") + caseroot = case.get_value("CASEROOT") + continue_run = case.get_value("CONTINUE_RUN") + ocn_grid = case.get_value("OCN_GRID") + ocn_ncpl = case.get_value("OCN_NCPL") + blom_unit = case.get_value("BLOM_UNIT") + blom_vcoord = case.get_value("BLOM_VCOORD") + pio_typename_ocn = case.get_value("PIO_TYPENAME_OCN") + pio_netcdf_format_ocn = case.get_value("PIO_NETCDF_FORMAT_OCN") + is_test = case.get_value("TEST") + blom_river_nutrients = case.get_value("BLOM_RIVER_NUTRIENTS") + blom_n_deposition = case.get_value("BLOM_N_DEPOSITION") + blom_ndep_scenario = case.get_value("BLOM_NDEP_SCENARIO") + blom_coupling = case.get_value("BLOM_COUPLING") + blom_tracer_modules = case.get_value("BLOM_TRACER_MODULES") + hamocc_vsls = case.get_value("HAMOCC_VSLS") + hamocc_ciso = case.get_value("HAMOCC_CISO") + hamocc_sedspinup = case.get_value("HAMOCC_SEDSPINUP") + hamocc_sedspinup_yr_start = case.get_value("HAMOCC_SEDSPINUP_YR_START") + hamocc_sedspinup_yr_end = case.get_value("HAMOCC_SEDSPINUP_YR_END") + hamocc_sedspinup_ncycle = case.get_value("HAMOCC_SEDSPINUP_NCYCLE") + + # error checks + if hamocc_vsls and ocn_grid != "tnx1v4": + expect(False, + "HAMOCC_VSLS is not supported at this grid resolution (no swa-climatology available)") + + # create config dictionary - used in namelist_definition_blom.xml + config = {} + + config['ocn_grid'] = ocn_grid + config['ocn_ncpl'] = str(ocn_ncpl) + config['pio_typename_ocn'] = pio_typename_ocn + config['pio_netcdf_format_ocn'] = pio_netcdf_format_ocn + config["continue_run"] = "yes" if continue_run else "no" + config["is_test"] = "yes" if is_test else "no" + if is_test: + testcase = case.get_value("TESTCASE") + config["is_test_pfs"] = "yes" if testcase == "PFS" else "no" + config["empty_hist"] = "yes" if testcase == "PFS" else "no" + + config['blom_unit'] = blom_unit if blom_unit else "unset" + config['blom_vcoord'] = blom_vcoord + config["blom_river_nutrients"] = "yes" if blom_river_nutrients else "no" + config["blom_ndep_scenario"] = "ssp" if "ssp" in blom_ndep_scenario else blom_ndep_scenario + config["blom_n_deposition"] = "yes" if blom_n_deposition else "no" + config["blom_coupling"] = blom_coupling + config["blom_tracer_modules"] = blom_tracer_modules + + config["hamocc_vsls"] = "yes" if hamocc_vsls else "no" + config["hamocc_ciso"] = "yes" if hamocc_ciso else "no" + config["hamocc_sedspinup"] = "yes" if hamocc_sedspinup else "no" + config["hamocc_sedspinup_yr_start"] = hamocc_sedspinup_yr_start + config["hamocc_sedspinup_yr_end"] = hamocc_sedspinup_yr_end + config["hamocc_sedspinup_ncycle"] = hamocc_sedspinup_ncycle + + #---------------------------------------------------- + # initialize namelist defaults + #---------------------------------------------------- + nmlgen.init_defaults(infile, config) + + if nmlgen.get_value('swaclimfile') == 'UNSET': + nmlgen.set_value('swaclimfile', value="") + + if nmlgen.get_value('inid13c') == 'UNSET': + nmlgen.set_value('inid13c', value="") + + if nmlgen.get_value('inid14c') == 'UNSET': + nmlgen.set_value('inid14c', value="") + + run_startdate = case.get_value("RUN_STARTDATE") + idate = run_startdate.replace('-','') + nmlgen.set_value("idate", idate) + nmlgen.set_value("idate0", idate) + + #---------------------------------------------------- + # Write out namelist groups + #---------------------------------------------------- + groups=['limits','diffusion'] + + cwmtag = nmlgen.get_default('cwmtag', config=config) + if cwmtag[0] != 'unset': + groups.append('cwmod') + + groups.append('merdia') + groups.append('secdia') + groups.append('diaphy') + + if case.get_value("BLOM_VCOORD") == "cntiso_hybrid": + groups.append('vcoord') + + if "ecosys" in case.get_value("BLOM_TRACER_MODULES"): + groups.append("bgcnml") + groups.append("bgcoafx") + groups.append("diabgc") + + data_list_path = os.path.join(case.get_case_root(), "Buildconf", "blom.input_data_list") + if os.path.exists(data_list_path): + os.remove(data_list_path) + + # Create initial ocn_in + namelist_file = os.path.join(confdir, "ocn_in") + nmlgen.write_output_file(namelist_file, data_list_path, groups=groups, sorted_groups=False) + + # Replace MER_REGFLAG1 -> MER_REGFLAG4 with array syntax in ocn_in + from pathlib import Path + file = Path(namelist_file) + file.write_text(file.read_text().replace('mer_regflg1','mer_regflg(1,:)')) + file.write_text(file.read_text().replace('mer_regflg2','mer_regflg(2,:)')) + file.write_text(file.read_text().replace('mer_regflg3','mer_regflg(3,:)')) + file.write_text(file.read_text().replace('mer_regflg4','mer_regflg(4,:)')) + + # To compare with previous namelist generation, make namelist variable uppercase and + # use single quotes instead of back quotes and make sure that file variables set to UNSET + # get changed to blank quotes + namelist_file_temp = os.path.join(confdir, "ocn_in_temp") + with open(namelist_file, "r") as fread: + with open(namelist_file_temp, "w") as fwrite: + for line_read in fread: + # replace single quote with double quote to generate same namelist as using + # csh buildnml + line = line_read.replace('"',"'") + # make all namelists upper case to generate same namelist as using csh buildnml + tokens = line.split('=',maxsplit=1) + if len(tokens) == 2: + # Change UNSET values for files to lower case + if 'UNSET' in tokens[1]: + tokens[1] = "'unset'" + fwrite.write(f" {tokens[0].upper().strip()} = {tokens[1].strip()}\n") + else: + fwrite.write(line) + shutil.move(namelist_file_temp, namelist_file) + + # Copy ocn_in.readme to $RUNDIR + src_filename = os.path.join(srcroot,"components","blom","cime_config","ocn_in.readme") + dst_filename = os.path.join(rundir,"ocn_in.readme") + + if not os.path.exists(dst_filename): + shutil.copy(src_filename, dst_filename) + + logger.debug(f"blom: grid is {ocn_grid}") + +############################################################################### +def buildnml(case, caseroot, compname): +############################################################################### + """Build the blom namelist """ + + # Build the component namelist + if compname != "blom": + raise AttributeError + comp_root_dir_ocn = case.get_value("COMP_ROOT_DIR_OCN") + srcroot = case.get_value("SRCROOT") + rundir = case.get_value("RUNDIR") + ninst = case.get_value("NINST_OCN") + + # determine the confdir directory + confdir = os.path.join(caseroot,"Buildconf","blomconf") + if not os.path.isdir(confdir): + os.makedirs(confdir) + + #---------------------------------------------------- + # Construct the namelist generator + #---------------------------------------------------- + # determine directory for user modified namelist_definitions.xml and namelist_defaults.xml + user_xml_dir = os.path.join(caseroot, "SourceMods", "src.blom") + expect (os.path.isdir(user_xml_dir), + "user_xml_dir %s does not exist " %user_xml_dir) + + # user definition *replaces* existing definition. + namelist_xml_dir = os.path.join(comp_root_dir_ocn, "cime_config") + definition_file = [os.path.join(namelist_xml_dir, "namelist_definition_blom.xml")] + user_definition = os.path.join(user_xml_dir, "namelist_definition_blom.xml") + if os.path.isfile(user_definition): + definition_file = [user_definition] + for file_ in definition_file: + expect(os.path.isfile(file_), "Namelist XML file %s not found!" % file_) + + # Create the namelist generator object - independent of instance + nmlgen = NamelistGenerator(case, definition_file) + + #---------------------------------------------------- + # Loop over instances + #---------------------------------------------------- + for inst_counter in range(1, ninst+1): + + # determine instance string + inst_string = "" + if ninst > 1: + inst_string = '_' + '%04d' % inst_counter + + # If multi-instance case does not have restart file, use + # single-case restart for each instance + rpointer = "rpointer.ice" + if (os.path.isfile(os.path.join(rundir,rpointer)) and + (not os.path.isfile(os.path.join(rundir,rpointer + inst_string)))): + shutil.copy(os.path.join(rundir, rpointer), + os.path.join(rundir, rpointer + inst_string)) + + inst_string_label = inst_string + if not inst_string_label: + inst_string_label = "\"\"" + + # create namelist_infile using user_nl_file as input + user_nl_file = os.path.join(caseroot, "user_nl_blom" + inst_string) + expect(os.path.isfile(user_nl_file), + "Missing required user_nl_file %s " %(user_nl_file)) + infile = os.path.join(confdir, "namelist_infile") + create_namelist_infile(case, user_nl_file, infile) + namelist_infile = [infile] + + # create namelist + _create_namelists(case, confdir, namelist_infile, nmlgen) + + # copy namelist files to rundir + if os.path.isdir(rundir): + file1 = os.path.join(confdir, "ocn_in") + file2 = os.path.join(rundir, "ocn_in") + if inst_string: + file2 += inst_string + logger.debug("BLOM namelist copy: file1 %s file2 %s " %(file1, file2)) + shutil.copy2(file1, file2) + +############################################################################### +def _main_func(): + + caseroot = parse_input(sys.argv) + with Case(caseroot, read_only=False) as case: + buildnml(case, caseroot, "blom") + +if __name__ == "__main__": + _main_func() diff --git a/cime_config/buildnml.csh b/cime_config/buildnml.csh new file mode 100644 index 00000000..caf1f533 --- /dev/null +++ b/cime_config/buildnml.csh @@ -0,0 +1,1674 @@ +#! /bin/csh -f + +#------------------------------------------------------------------------------ +# Get variables from Case XML-files +#------------------------------------------------------------------------------ + +set CASEROOT = `./xmlquery CASEROOT --value` +set OCN_GRID = `./xmlquery OCN_GRID --value` +set BLOM_VCOORD = `./xmlquery BLOM_VCOORD --value` +set BLOM_UNIT = `./xmlquery BLOM_UNIT --value` +set DIN_LOC_ROOT = `./xmlquery DIN_LOC_ROOT --value` +set RUN_TYPE = `./xmlquery RUN_TYPE --value` +set CONTINUE_RUN = `./xmlquery CONTINUE_RUN --value` +set CASEBUILD = `./xmlquery CASEBUILD --value` +set CCSM_CO2_PPMV = `./xmlquery CCSM_CO2_PPMV --value` +set OCN_NCPL = `./xmlquery OCN_NCPL --value` +set BLOM_COUPLING = `./xmlquery BLOM_COUPLING --value` +set RUNDIR = `./xmlquery RUNDIR --value` +set BLOM_TRACER_MODULES = `./xmlquery BLOM_TRACER_MODULES --value` +set BLOM_RIVER_NUTRIENTS = `./xmlquery BLOM_RIVER_NUTRIENTS --value` +set BLOM_N_DEPOSITION = `./xmlquery BLOM_N_DEPOSITION --value` +set BLOM_NDEP_SCENARIO = `./xmlquery BLOM_NDEP_SCENARIO --value` +set HAMOCC_VSLS = `./xmlquery HAMOCC_VSLS --value` +set HAMOCC_CISO = `./xmlquery HAMOCC_CISO --value` +set HAMOCC_SEDSPINUP = `./xmlquery HAMOCC_SEDSPINUP --value` +set HAMOCC_SEDSPINUP_YR_START = `./xmlquery HAMOCC_SEDSPINUP_YR_START --value` +set HAMOCC_SEDSPINUP_YR_END = `./xmlquery HAMOCC_SEDSPINUP_YR_END --value` +set HAMOCC_SEDSPINUP_NCYCLE = `./xmlquery HAMOCC_SEDSPINUP_NCYCLE --value` +set RUN_STARTDATE = `./xmlquery RUN_STARTDATE --value` +set PIO_TYPENAME_OCN = `./xmlquery PIO_TYPENAME_OCN --value` +set PIO_NETCDF_FORMAT_OCN = `./xmlquery PIO_NETCDF_FORMAT_OCN --value` +set NINST_OCN = `./xmlquery NINST_OCN --value` +set TEST=`./xmlquery TEST --value` + +#------------------------------------------------------------------------------ +# Check if HAMOCC is requested +#------------------------------------------------------------------------------ + +set ecosys = FALSE +set tracers = (`echo $BLOM_TRACER_MODULES`) +if ($#tracers != 0) then + foreach module ($tracers) + if ($module == ecosys) then + set ecosys = TRUE + endif + end +endif + +#------------------------------------------------------------------------------ +# Set RUN_TYPE to 'continue' if CONTINUE_RUN equals TRUE +#------------------------------------------------------------------------------ + +if ("$CONTINUE_RUN" == TRUE) then + set RUN_TYPE = continue +endif + +#------------------------------------------------------------------------------ +# Get start date +#------------------------------------------------------------------------------ + +set YEAR0 = `echo $RUN_STARTDATE | cut -c1-4 ` +set MONTH0 = `echo $RUN_STARTDATE | cut -c6-7 ` +set DAY0 = `echo $RUN_STARTDATE | cut -c9-10` + +#------------------------------------------------------------------------------ +# Set namelist variables +#------------------------------------------------------------------------------ + +#------------------------------ +# set LIMITS defaults +#------------------------------ +set NDAY1 = 0 +set NDAY2 = 0 +set IDATE = $YEAR0$MONTH0$DAY0 +set IDATE0 = $YEAR0$MONTH0$DAY0 +set RUNID = "'unset'" +set EXPCNF = "'cesm'" +set RUNTYP = "'$RUN_TYPE'" +set GRFILE = "'unset'" +set ICFILE = "'unset'" +if ("$BLOM_UNIT" == cgs) then + set PREF = 2000.e5 +else + set PREF = 2000.e4 +endif +set BACLIN = 1800. +set BATROP = 36. +if ("$BLOM_UNIT" == cgs) then + set MDV2HI = 2. + set MDV2LO = .4 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 5000.e4 + set MDC2LO = 300.e4 +else + set MDV2HI = .02 + set MDV2LO = .004 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 5000. + set MDC2LO = 300. +endif +set VSC2HI = .5 +set VSC2LO = .5 +set VSC4HI = 0. +set VSC4LO = 0. +if ("$BLOM_UNIT" == cgs) then + set CBAR = 5. +else + set CBAR = .05 +endif +set CB = .002 +set CWBDTS = 5.e-5 +set CWBDLS = 25. +set MOMMTH = "'enscon'" +set BMCMTH = "'uc'" +set RMPMTH = "'eitvel'" +set MLRTTP = "'constant'" +set RM0 = 1.2 +set RM5 = 0. +set CE = .06 +set TDFILE = "'unset'" +set NIWGF = 0. +set NIWBF = .35 +set NIWLF = .5 +set SWAMTH = "'jerlov'" +set JWTYPE = 3 +set CHLOPT = "'climatology'" +set CCFILE = "'unset'" +set TRXDAY = 0. +set SRXDAY = 0. +set TRXDPT = 1. +set SRXDPT = 1. +set TRXLIM = 1.5 +set SRXLIM = .5 +set APTFLX = .false. +set APSFLX = .false. +set DITFLX = .false. +set DISFLX = .false. +set SRXBAL = .false. +set SCFILE = "'unset'" +set WAVSRC = "'none'" +set SMTFRC = .true. +set SPRFAC = .false. +set ATM_PATH = "'unset'" +set ITEST = 60 +set JTEST = 60 +set CNSVDI = .false. +set CSDIAG = .false. +set RSTFRQ = 1 +if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then + set RSTFMT = 1 +else + set RSTFMT = 0 +endif +set RSTCMP = 0 +if ("$PIO_TYPENAME_OCN" == pnetcdf) then + set IOTYPE = 1 +else + set IOTYPE = 0 +endif + +#------------------------------ +# set VCOORD defaults +#------------------------------ +set VCOORD_TYPE = "'$BLOM_VCOORD'" +set RECONSTRUCTION_METHOD = "'ppm'" +set DENSITY_LIMITING = "'monotonic'" +set TRACER_LIMITING = "'non_oscillatory'" +set VELOCITY_LIMITING = "'non_oscillatory'" +set DENSITY_PC_UPPER_BNDR = .false. +set DENSITY_PC_LOWER_BNDR = .false. +set TRACER_PC_UPPER_BNDR = .true. +set TRACER_PC_LOWER_BNDR = .false. +set VELOCITY_PC_UPPER_BNDR = .true. +set VELOCITY_PC_LOWER_BNDR = .false. +set DPMIN_SURFACE = 2.5 +set DPMIN_INFLATION_FACTOR = 1.08 +set DPMIN_INTERIOR = .1 +set DKTZU = 4 +set DKTZL = 1 + +#------------------------------ +# set DIFFUSION defaults +#------------------------------ +set EITMTH = "'gm'" +set EDRITP = "'large scale'" +set EDWMTH = "'smooth'" +set EDDF2D = .false. +set EDSPRS = .true. +set EGC = 0.85 +set EGGAM = 200. +if ("$BLOM_UNIT" == cgs) then + set EGLSMN = 4000.e2 + set EGMNDF = 100.e4 + set EGMXDF = 1500.e4 +else + set EGLSMN = 4000. + set EGMNDF = 100. + set EGMXDF = 1500. +endif +set EGIDFQ = 1. +set TBFILE = "'unset'" +set RHISCF = 0. +set EDANIS = .false. +set REDI3D = .false. +set RHSCTP = .false. +set RI0 = 1.2 +set BDMTYP = 2 +if ("$BLOM_UNIT" == cgs) then + set BDMC1 = 5.e-4 + set BDMC2 = .1 +else + set BDMC1 = 5.e-8 + set BDMC2 = 1.e-5 +endif +set TKEPF = .006 +set SMOBLD = .true. +set LNGMTP = "'none'" +if ("$BLOM_VCOORD" == isopyc_bulkml) then + set BDMLDP = .true. + set LTEDTP = "'layer'" +else + set BDMLDP = .false. + set LTEDTP = "'neutral'" +endif + +#------------------------------ +# set BGCNML defaults +#------------------------------ +set ATM_CO2 = "$CCSM_CO2_PPMV" +if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then + set DO_RIVINPT = .true. +else + set DO_RIVINPT = .false. +endif +if ("$BLOM_N_DEPOSITION" == TRUE) then + set DO_NDEP = .true. + if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx2v1) then + set NDEPFNAME = ndep_1850_CMIP6_tnx2v1_20180321.nc + else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx1v4) then + set NDEPFNAME = ndep_1850_CMIP6_tnx1v4_20171106.nc + else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx0.25v4) then + set NDEPFNAME = ndep_1850_CMIP6_tnx0.25v4_20190912.nc + else if( "$BLOM_NDEP_SCENARIO" == 1850 && "$OCN_GRID" == tnx0.125v4) then + set NDEPFNAME = ndep_1850_CMIP6_tnx0.125v4_20221013.nc + else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx2v1) then + set NDEPFNAME = ndep_2000_CMIP6_tnx2v1_20200826.nc + else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx1v4) then + set NDEPFNAME = ndep_2000_CMIP6_tnx1v4_20200826.nc + else if( "$BLOM_NDEP_SCENARIO" == 2000 && "$OCN_GRID" == tnx0.25v4) then + set NDEPFNAME = ndep_2000_CMIP6_tnx0.25v4_20200826.nc + else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx2v1) then + set NDEPFNAME = ndep_185001-201412_tnx2v1_20190702.nc + else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx1v4) then + set NDEPFNAME = ndep_185001-201412_tnx1v4_20180613.nc + else if( "$BLOM_NDEP_SCENARIO" == hist && "$OCN_GRID" == tnx0.25v4) then + set NDEPFNAME = ndep_185001-201412_tnx0.25v4_20190705.nc + else if( `echo $BLOM_NDEP_SCENARIO | cut -c1-3` == ssp && "$OCN_GRID" == tnx1v4) then + set NDEPFNAME = ndep_201501-210012-${BLOM_NDEP_SCENARIO}_tnx1v4_20191112.nc + else if( "$BLOM_NDEP_SCENARIO" == UNSET ) then + set DO_NDEP = .false. + set NDEPFNAME = "''" + endif +else + set DO_NDEP = .false. + set NDEPFNAME = "''" +endif +if ("$HAMOCC_SEDSPINUP" == TRUE) then + set DO_SEDSPINUP = .true. + set SEDSPIN_YR_S = $HAMOCC_SEDSPINUP_YR_START + set SEDSPIN_YR_E = $HAMOCC_SEDSPINUP_YR_END + set SEDSPIN_NCYC = $HAMOCC_SEDSPINUP_NCYCLE +else + set DO_SEDSPINUP = .false. + set SEDSPIN_YR_S = -1 + set SEDSPIN_YR_E = -1 + set SEDSPIN_NCYC = -1 +endif +# VSLS is currently only available for the tnx1v4 grid, since a climatlogy file for +# short wave radiation is needed. +if ("$HAMOCC_VSLS" == TRUE && "$OCN_GRID" != tnx1v4) then + echo "$0 ERROR: HAMOCC_VSLS == TRUE not possible with this grid resolution (no swa-climatology available) " + exit -1 +endif +# For the following options, there are currently no switches in Case-XML files. +# These options can be activated by expert users via user namelist. +set DO_OALK = .false. +set BGCOAFX_OALKSCEN = "''" +set BGCOAFX_OALKFILE = "''" +set BGCOAFX_ADDALK = 0.135 +set BGCOAFX_CDRMIP_LATMAX = 70.0 +set BGCOAFX_CDRMIP_LATMIN = -60.0 +set BGCOAFX_RAMP_START = 2025 +set BGCOAFX_RAMP_END = 2035 +set WITH_DMSPH = .false. +set PI_PH_FILE = "''" +set L_3DVARSEDPOR = .false. +set SEDPORFILE = "''" + + +#------------------------------ +# set DIAPHY defaults +#------------------------------ +set GLB_FNAMETAG = "'hd','hm','hy'" +set GLB_AVEPERIO = '1, 30, 365' +if ("$TEST" == TRUE) then + set GLB_FILEFREQ = '1, 30, 365' +else + set GLB_FILEFREQ = '30, 30, 365' +endif +set GLB_COMPFLAG = '0, 0, 0' +if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then + set GLB_NCFORMAT = '1, 1, 1' +else + set GLB_NCFORMAT = '0, 0, 0' +endif +set H2D_ABSWND = '0, 4, 0' + +set H2D_ALB = '0, 0, 0' + +set H2D_BTMSTR = '0, 4, 0' +set H2D_BRNFLX = '0, 4, 0' +set H2D_BRNPD = '0, 4, 0' + +set H2D_DFL = '0, 0, 0' + +set H2D_EVA = '0, 4, 0' +set H2D_FICE = '0, 4, 0' +set H2D_FMLTFZ = '0, 4, 0' + +set H2D_HICE = '0, 0, 0' + +set H2D_HMLTFZ = '0, 4, 0' + +set H2D_HSNW = '0, 0, 0' +set H2D_IAGE = '0, 0, 0' + +set H2D_IDKEDT = '0, 4, 0' +set H2D_LAMULT = '0, 4, 0' +set H2D_LASL = '0, 4, 0' +set H2D_LIP = '0, 4, 0' + +set H2D_MAXMLD = '4, 4, 0' + +set H2D_MLD = '0, 4, 0' + +set H2D_MLTS = '4, 4, 0' + +set H2D_MLTSMN = '0, 4, 0' +set H2D_MLTSMX = '0, 4, 0' +set H2D_MLTSSQ = '0, 4, 0' +set H2D_MTKEUS = '0, 4, 0' +set H2D_MTKENI = '0, 4, 0' +set H2D_MTKEBF = '0, 4, 0' +set H2D_MTKERS = '0, 4, 0' +set H2D_MTKEPE = '0, 4, 0' +set H2D_MTKEKE = '0, 4, 0' +set H2D_MTY = '0, 4, 0' +set H2D_NSF = '0, 4, 0' +set H2D_PBOT = '0, 4, 0' +set H2D_PSRF = '0, 4, 0' +set H2D_RFIFLX = '0, 4, 0' +set H2D_RNFFLX = '0, 4, 0' +set H2D_SALFLX = '0, 4, 0' +set H2D_SALRLX = '0, 4, 0' +set H2D_SBOT = '0, 4, 0' + +set H2D_SEALV = '4, 4, 0' + +set H2D_SLVSQ = '0, 4, 0' +set H2D_SFL = '0, 4, 0' +set H2D_SOP = '0, 4, 0' +set H2D_SIGMX = '0, 4, 0' + +set H2D_SSS = '4, 4, 0' +set H2D_SSSSQ = '4, 4, 0' +set H2D_SST = '4, 4, 0' +set H2D_SSTSQ = '4, 4, 0' + +set H2D_SURFLX = '0, 4, 0' +set H2D_SURRLX = '0, 4, 0' +set H2D_SWA = '0, 4, 0' + +set H2D_T20D = '4, 4, 0' + +set H2D_TAUX = '0, 4, 0' +set H2D_TAUY = '0, 4, 0' +set H2D_TBOT = '0, 4, 0' + +set H2D_TICE = '0, 0, 0' +set H2D_TSRF = '0, 0, 0' + +set H2D_UB = '0, 4, 0' + +set H2D_UICE = '0, 0, 0' + +set H2D_USTAR = '0, 4, 0' +set H2D_USTAR3 = '0, 4, 0' + +set H2D_USTOKES = '0, 0, 0' + +set H2D_VB = '0, 4, 0' + +set H2D_VICE = '0, 0, 0' +set H2D_VSTOKES = '0, 0, 0' + +set H2D_ZTX = '0, 4, 0' +set LYR_BFSQ = '0, 4, 0' +set LYR_DIFDIA = '0, 4, 0' +set LYR_DIFVMO = '0, 4, 0' +set LYR_DIFVHO = '0, 4, 0' +set LYR_DIFVSO = '0, 4, 0' +set LYR_DIFINT = '0, 4, 0' +set LYR_DIFISO = '0, 4, 0' +set LYR_DP = '0, 4, 0' +set LYR_DZ = '0, 4, 0' +set LYR_SALN = '0, 4, 0' +set LYR_TEMP = '0, 4, 0' + +set LYR_TRC = '0, 0, 0' + +set LYR_UFLX = '0, 4, 0' +set LYR_UTFLX = '0, 4, 0' +set LYR_USFLX = '0, 4, 0' + +set LYR_UMFLTD = '0, 0, 4' +set LYR_UMFLSM = '0, 0, 4' +set LYR_UTFLTD = '0, 0, 4' +set LYR_UTFLSM = '0, 0, 4' +set LYR_UTFLLD = '0, 0, 4' +set LYR_USFLTD = '0, 0, 4' +set LYR_USFLSM = '0, 0, 4' +set LYR_USFLLD = '0, 0, 4' + +set LYR_UVEL = '0, 4, 0' +set LYR_VFLX = '0, 4, 0' +set LYR_VTFLX = '0, 4, 0' +set LYR_VSFLX = '0, 4, 0' + +set LYR_VMFLTD = '0, 0, 4' +set LYR_VMFLSM = '0, 0, 4' +set LYR_VTFLTD = '0, 0, 4' +set LYR_VTFLSM = '0, 0, 4' +set LYR_VTFLLD = '0, 0, 4' +set LYR_VSFLTD = '0, 0, 4' +set LYR_VSFLSM = '0, 0, 4' +set LYR_VSFLLD = '0, 0, 4' + +set LYR_VVEL = '0, 4, 0' +set LYR_WFLX = '0, 4, 0' +set LYR_WFLX2 = '0, 4, 0' +set LYR_PV = '0, 4, 0' +set LYR_TKE = '0, 4, 0' +set LYR_GLS_PSI = '0, 4, 0' +set LYR_IDLAGE = '0, 4, 0' +set LVL_BFSQ = '0, 4, 0' +set LVL_DIFDIA = '0, 4, 0' +set LVL_DIFVMO = '0, 4, 0' +set LVL_DIFVHO = '0, 4, 0' +set LVL_DIFVSO = '0, 4, 0' +set LVL_DIFINT = '0, 4, 0' +set LVL_DIFISO = '0, 4, 0' +set LVL_DZ = '0, 4, 0' +set LVL_SALN = '0, 4, 0' +set LVL_TEMP = '0, 4, 0' + +set LVL_TRC = '0, 0, 0' + +set LVL_UFLX = '0, 4, 0' +set LVL_UTFLX = '0, 4, 0' +set LVL_USFLX = '0, 4, 0' + +set LVL_UMFLTD = '0, 0, 4' +set LVL_UMFLSM = '0, 0, 4' +set LVL_UTFLTD = '0, 0, 4' +set LVL_UTFLSM = '0, 0, 4' +set LVL_UTFLLD = '0, 0, 4' +set LVL_USFLTD = '0, 0, 4' +set LVL_USFLSM = '0, 0, 4' +set LVL_USFLLD = '0, 0, 4' + +set LVL_UVEL = '0, 4, 0' +set LVL_VFLX = '0, 4, 0' +set LVL_VTFLX = '0, 4, 0' +set LVL_VSFLX = '0, 4, 0' + +set LVL_VMFLTD = '0, 0, 4' +set LVL_VMFLSM = '0, 0, 4' +set LVL_VTFLTD = '0, 0, 4' +set LVL_VTFLSM = '0, 0, 4' +set LVL_VTFLLD = '0, 0, 4' +set LVL_VSFLTD = '0, 0, 4' +set LVL_VSFLSM = '0, 0, 4' +set LVL_VSFLLD = '0, 0, 4' + +set LVL_VVEL = '0, 4, 0' +set LVL_WFLX = '0, 4, 0' +set LVL_WFLX2 = '0, 4, 0' +set LVL_PV = '0, 4, 0' +set LVL_TKE = '0, 4, 0' +set LVL_GLS_PSI = '0, 4, 0' +set LVL_IDLAGE = '0, 4, 0' +set MSC_MMFLXL = '0, 4, 0' +set MSC_MMFLXD = '0, 4, 0' +set MSC_MMFTDL = '0, 4, 0' +set MSC_MMFSML = '0, 4, 0' +set MSC_MMFTDD = '0, 4, 0' +set MSC_MMFSMD = '0, 4, 0' +set MSC_MHFLX = '0, 4, 0' +set MSC_MHFTD = '0, 4, 0' +set MSC_MHFSM = '0, 4, 0' +set MSC_MHFLD = '0, 4, 0' +set MSC_MSFLX = '0, 4, 0' +set MSC_MSFTD = '0, 4, 0' +set MSC_MSFSM = '0, 4, 0' +set MSC_MSFLD = '0, 4, 0' +set MSC_VOLTR = '0, 4, 0' +set MSC_MASSGS = '0, 4, 0' +set MSC_VOLGS = '0, 4, 0' +set MSC_SALNGA = '0, 4, 0' +set MSC_TEMPGA = '0, 4, 0' +set MSC_SSSGA = '0, 4, 0' +set MSC_SSTGA = '0, 4, 0' + +#------------------------------ +# set DIABGC defaults +#------------------------------ +set BGC_FNAMETAG = "'hbgcd','hbgcm','hbgcy'" +set BGC_AVEPERIO = '1,30,365' +set BGC_FILEFREQ = '30,30,365' +if ("$TEST" == TRUE) then + set BGC_FILEFREQ = ' 1,30,365' +else + set BGC_FILEFREQ = '30,30,365' +endif +set BGC_COMPFLAG = '0, 0, 0' +if ("$PIO_NETCDF_FORMAT_OCN" == 64bit_offset) then + set BGC_NCFORMAT = '1, 1, 1' +else + set BGC_NCFORMAT = '0, 0, 0' +endif +set BGC_INVENTORY = '0, 1, 0' +set SRF_PHOSPH = '0, 2, 2' +set SRF_OXYGEN = '0, 2, 2' +set SRF_IRON = '0, 2, 2' +set SRF_ANO3 = '0, 2, 2' +set SRF_ALKALI = '4, 2, 2' +set SRF_SILICA = '0, 2, 2' +set SRF_DIC = '4, 2, 2' +set SRF_PHYTO = '4, 2, 2' +set SRF_PH = '0, 2, 2' +set SRF_EXPORT = '0, 2, 2' +set SRF_EXPOSI = '0, 2, 2' +set SRF_EXPOCA = '0, 2, 2' +set SRF_KWCO2 = '0, 2, 2' +set SRF_KWCO2KHM = '0, 2, 2' +set SRF_CO2KH = '0, 2, 2' +set SRF_CO2KHM = '0, 2, 2' +set SRF_PCO2 = '0, 2, 2' +set SRF_PCO2M = '0, 2, 2' +set SRF_CO2FXD = '4, 2, 2' +set SRF_CO2FXU = '4, 2, 2' +set SRF_OXFLUX = '0, 2, 2' +set SRF_NIFLUX = '0, 2, 2' +set SRF_N2OFX = '0, 0, 2' +set SRF_DMSFLUX = '0, 2, 2' +set SRF_DMS = '0, 2, 2' +set SRF_DMSPROD = '0, 2, 2' +set SRF_DMS_BAC = '0, 2, 2' +set SRF_DMS_UV = '0, 2, 2' +set SRF_ATMCO2 = '0, 2, 2' +set SRF_ATMO2 = '0, 2, 2' +set SRF_ATMN2 = '0, 2, 2' +set SRF_NATDIC = '0, 2, 2' +set SRF_NATALKALI = '0, 2, 2' +set SRF_NATPH = '0, 2, 2' +set SRF_NATPCO2 = '0, 2, 2' +set SRF_NATCO2FX = '0, 2, 2' +set SRF_CO213FXD = '0, 2, 2' +set SRF_CO213FXU = '0, 2, 2' +set SRF_CO214FXD = '0, 2, 2' +set SRF_CO214FXU = '0, 2, 2' +set SRF_CFC11 = '0, 2, 2' +set SRF_CFC12 = '0, 2, 2' +set SRF_SF6 = '0, 2, 2' +set SRF_BROMO = '0, 2, 2' +set SRF_BROMOFX = '0, 2, 2' +set INT_BROMOPRO = '0, 2, 2' +set INT_BROMOUV = '0, 2, 2' +set INT_PHOSY = '4, 2, 2' +set INT_NFIX = '0, 2, 2' +set INT_DNIT = '0, 2, 2' +if ("$BLOM_N_DEPOSITION" == TRUE) then +set FLX_NDEP = '0, 2, 2' +else +set FLX_NDEP = '0, 0, 0' +endif +set FLX_OALK = '0, 0, 0' +set FLX_CAR0100 = '0, 2, 2' +set FLX_CAR0500 = '0, 2, 2' +set FLX_CAR1000 = '0, 2, 2' +set FLX_CAR2000 = '0, 2, 2' +set FLX_CAR4000 = '0, 2, 2' +set FLX_CAR_BOT = '0, 2, 2' +set FLX_BSI0100 = '0, 2, 2' +set FLX_BSI0500 = '0, 2, 2' +set FLX_BSI1000 = '0, 2, 2' +set FLX_BSI2000 = '0, 2, 2' +set FLX_BSI4000 = '0, 2, 2' +set FLX_BSI_BOT = '0, 2, 2' +set FLX_CAL0100 = '0, 2, 2' +set FLX_CAL0500 = '0, 2, 2' +set FLX_CAL1000 = '0, 2, 2' +set FLX_CAL2000 = '0, 2, 2' +set FLX_CAL4000 = '0, 2, 2' +set FLX_CAL_BOT = '0, 2, 2' +set LYR_PHYTO = '0, 0, 2' +set LYR_GRAZER = '0, 0, 2' +set LYR_DOC = '0, 0, 2' +set LYR_PHOSY = '0, 0, 2' +set LYR_PHOSPH = '0, 0, 2' +set LYR_OXYGEN = '0, 0, 4' +set LYR_IRON = '0, 0, 2' +set LYR_ANO3 = '0, 0, 2' +set LYR_ALKALI = '0, 0, 2' +set LYR_SILICA = '0, 0, 2' +set LYR_DIC = '0, 0, 2' +set LYR_POC = '0, 0, 2' +set LYR_CALC = '0, 0, 2' +set LYR_OPAL = '0, 0, 2' +set LYR_CO3 = '0, 0, 2' +set LYR_N2O = '0, 0, 0' +set LYR_PH = '0, 0, 2' +set LYR_OMEGAC = '0, 0, 2' +set LYR_OMEGAA = '0, 0, 2' +set LYR_PREFO2 = '0, 0, 4' +set LYR_O2SAT = '0, 0, 4' +set LYR_PREFPO4 = '0, 0, 2' +set LYR_PREFALK = '0, 0, 2' +set LYR_PREFDIC = '0, 0, 2' +set LYR_DICSAT = '0, 0, 2' +set LYR_NATDIC = '0, 0, 2' +set LYR_NATALKALI = '0, 0, 2' +set LYR_NATCO3 = '0, 0, 2' +set LYR_NATCALC = '0, 0, 2' +set LYR_NATPH = '0, 0, 2' +set LYR_NATOMEGAC = '0, 0, 2' +set LYR_NATOMEGAA = '0, 0, 2' +set LYR_DIC13 = '0, 0, 2' +set LYR_DIC14 = '0, 0, 2' +set LYR_D13C = '0, 0, 2' +set LYR_D14C = '0, 0, 2' +set LYR_BIGD14C = '0, 0, 2' +set LYR_POC13 = '0, 0, 2' +set LYR_DOC13 = '0, 0, 2' +set LYR_CALC13 = '0, 0, 2' +set LYR_PHYTO13 = '0, 0, 2' +set LYR_GRAZER13 = '0, 0, 2' +set LYR_CFC11 = '0, 0, 2' +set LYR_CFC12 = '0, 0, 2' +set LYR_SF6 = '0, 0, 2' +set LYR_NOS = '0, 0, 2' +set LYR_WPHY = '0, 0, 2' +set LYR_WNOS = '0, 0, 2' +set LYR_EPS = '0, 0, 0' +set LYR_ASIZE = '0, 0, 0' +set LYR_BROMO = '0, 0, 2' +set BGC_DP = '0, 2, 2' +set LVL_PHYTO = '0, 2, 2' +set LVL_GRAZER = '0, 2, 2' +set LVL_DOC = '0, 2, 2' +set LVL_PHOSY = '0, 2, 2' +set LVL_PHOSPH = '0, 2, 2' +set LVL_OXYGEN = '0, 4, 4' +set LVL_IRON = '0, 2, 2' +set LVL_ANO3 = '0, 2, 2' +set LVL_ALKALI = '0, 2, 2' +set LVL_SILICA = '0, 2, 2' +set LVL_DIC = '0, 2, 2' +set LVL_POC = '0, 2, 2' +set LVL_CALC = '0, 2, 2' +set LVL_OPAL = '0, 2, 2' +set LVL_CO3 = '0, 2, 2' +set LVL_N2O = '0, 0, 2' +set LVL_PH = '0, 2, 2' +set LVL_OMEGAC = '0, 2, 2' +set LVL_OMEGAA = '0, 2, 2' +set LVL_PREFO2 = '0, 4, 4' +set LVL_O2SAT = '0, 4, 4' +set LVL_PREFPO4 = '0, 2, 2' +set LVL_PREFALK = '0, 2, 2' +set LVL_PREFDIC = '0, 2, 2' +set LVL_DICSAT = '0, 2, 2' +set LVL_NATDIC = '0, 2, 2' +set LVL_NATALKALI = '0, 2, 2' +set LVL_NATCO3 = '0, 2, 2' +set LVL_NATCALC = '0, 2, 2' +set LVL_NATPH = '0, 2, 2' +set LVL_NATOMEGAC = '0, 2, 2' +set LVL_NATOMEGAA = '0, 2, 2' +set LVL_DIC13 = '0, 2, 2' +set LVL_DIC14 = '0, 2, 2' +set LVL_D13C = '0, 2, 2' +set LVL_POC13 = '0, 2, 2' +set LVL_DOC13 = '0, 2, 2' +set LVL_CALC13 = '0, 2, 2' +set LVL_PHYTO13 = '0, 2, 2' +set LVL_GRAZER13 = '0, 2, 2' +set LVL_CFC11 = '0, 2, 2' +set LVL_CFC12 = '0, 2, 2' +set LVL_SF6 = '0, 2, 2' +set LVL_NOS = '0, 2, 2' +set LVL_WPHY = '0, 2, 2' +set LVL_WNOS = '0, 2, 2' +set LVL_EPS = '0, 0, 0' +set LVL_ASIZE = '0, 0, 0' +set LVL_BROMO = '0, 2, 2' +set FLX_SEDIFFIC = '0, 0, 2' +set FLX_SEDIFFAL = '0, 0, 2' +set FLX_SEDIFFPH = '0, 0, 2' +set FLX_SEDIFFOX = '0, 0, 2' +set FLX_SEDIFFN2 = '0, 0, 2' +set FLX_SEDIFFNO3 = '0, 0, 2' +set FLX_SEDIFFSI = '0, 0, 2' +set SDM_POWAIC = '0, 0, 2' +set SDM_POWAAL = '0, 0, 2' +set SDM_POWAPH = '0, 0, 2' +set SDM_POWAOX = '0, 0, 2' +set SDM_POWN2 = '0, 0, 2' +set SDM_POWNO3 = '0, 0, 2' +set SDM_POWASI = '0, 0, 2' +set SDM_SSSO12 = '0, 0, 2' +set SDM_SSSSIL = '0, 0, 2' +set SDM_SSSC12 = '0, 0, 2' +set SDM_SSSTER = '0, 0, 2' +set BUR_SSSO12 = '0, 0, 2' +set BUR_SSSSIL = '0, 0, 2' +set BUR_SSSC12 = '0, 0, 2' +set BUR_SSSTER = '0, 0, 2' + +# if partial coupling, enable SSS relaxation +if ("$BLOM_COUPLING" =~ *partial*) then + if ("$BLOM_VCOORD" == isopyc_bulkml) then + set SRXDAY = 6. + else + set SRXDAY = 60. + set SRXDPT = 10. + endif + set SPRFAC = .true. + set SRXBAL = .true. +endif + +# set grid dependent parameters +if ("$OCN_GRID" == gx1v5 || "$OCN_GRID" == gx1v6) then + set BACLIN = 1800. + set BATROP = 36. +else if ("$OCN_GRID" == gx3v7) then + set BACLIN = 3600. + set BATROP = 72. +else if ("$OCN_GRID" == tnx2v1 ) then + set BACLIN = 4800. + set BATROP = 96. + set EGC = 0.5 + if ("$BLOM_UNIT" == cgs) then + set EGMXDF = 1000.e4 + else + set EGMXDF = 1000. + endif + set CWMTAG = "'Gibraltar','Gibraltar'" + set CWMEDG = " 'u', 'u'" + set CWMI = " 53, 54" + set CWMJ = " 137, 137" + set CWMWTH = " 30.e3, 30.e3" +else if ("$OCN_GRID" == tnx1.5v1 ) then + set BACLIN = 4800. + set BATROP = 96. + set EGC = 0.5 + if ("$BLOM_UNIT" == cgs) then + set EGMXDF = 1000.e4 + else + set EGMXDF = 1000. + endif +else if ("$OCN_GRID" == tnx1v1 || "$OCN_GRID" == tnx1v3 || "$OCN_GRID" == tnx1v4) then + if ("$OCN_NCPL" == 24) then + set BACLIN = 3600. + set BATROP = 60. + set CWBDTS = .75e-4 + set NIWGF = .4 + set SMTFRC = .false. + if ("$BLOM_VCOORD" == isopyc_bulkml) then + set CE = .5 + endif + else + set BACLIN = 3200. + set BATROP = 64. + endif + set CWMTAG = "'Gibraltar','Gibraltar'" + set CWMEDG = " 'u', 'u'" + set CWMI = " 105, 106" + set CWMJ = " 273, 273" + set CWMWTH = " 30.e3, 30.e3" +else if ("$OCN_GRID" == tnx0.25v1 || "$OCN_GRID" == tnx0.25v3 || "$OCN_GRID" == tnx0.25v4) then + set BACLIN = 900. + set BATROP = 15. + if ("$BLOM_UNIT" == cgs) then + set MDV2HI = .15 + set MDV2LO = .15 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 300.e4 + set MDC2LO = 300.e4 + else + set MDV2HI = .0015 + set MDV2LO = .0015 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 300. + set MDC2LO = 300. + endif + set VSC2HI = .15 + set VSC2LO = .15 + set VSC4HI = 0.0625 + set VSC4LO = 0.0625 + set CWBDTS = 0.75e-4 + set CWBDLS = 25. + set EDWMTH = "'step'" + set EGC = 0.85 + if ("$BLOM_UNIT" == cgs) then + set EGMXDF = 1500.e4 + else + set EGMXDF = 1500. + endif + if ("$BLOM_VCOORD" == isopyc_bulkml) then + set CE = 1.0 + endif +else if ("$OCN_GRID" == tnx0.125v4) then + set BACLIN = 300. + set BATROP = 6. + set EGMNDF = 0. + set EGMXDF = 0. + set EDWMTH = "'step'" + set CWBDTS = .75e-4 + set CWBDLS = 25 + if ("$BLOM_UNIT" == cgs) then + set MDV2HI = .1 + set MDV2LO = .1 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 300.e4 + set MDC2LO = 100.e4 + else + set MDV2HI = .001 + set MDV2LO = .001 + set MDV4HI = 0. + set MDV4LO = 0. + set MDC2HI = 300. + set MDC2LO = 100. + endif + set VSC2HI = 0. + set VSC2LO = 0. + set VSC4HI = .06 + set VSC4LO = .06 + set LTEDTP = "'layer'" +else + echo "OCN_GRID is $OCN_GRID \n" + echo "$0 ERROR: Cannot deal with GRID equal to $OCN_GRID " + exit -1 +endif + +# set grid independent input files (iHAMOCC initial conditions) +set INIDIC = "'$DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_Ct_preind_OMIPinit_20171107.nc'" +set INIALK = "'$DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_At_OMIPinit_20171107.nc'" +set INIPO4 = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_phosphate_OMIPinit_20171107.nc'" +set INIOXY = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_oxygen_OMIPinit_20171107.nc'" +set ININO3 = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_nitrate_OMIPinit_20171107.nc'" +set INISIL = "'$DIN_LOC_ROOT/ocn/blom/inicon/woa13_silicate_OMIPinit_20171107.nc'" +if ("$HAMOCC_CISO" == TRUE) then +set INID13C = "'$DIN_LOC_ROOT/ocn/blom/inicon/d13C_permil_20180609.nc'" +set INID14C = "'$DIN_LOC_ROOT/ocn/blom/inicon/d14C_permil_20180609.nc'" +else +set INID13C = "''" +set INID14C = "''" +endif + +# set grid dependent input files +if ("$OCN_GRID" == tnx2v1) then + set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx2v1_20130206.nc'" + set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx2v1_20130419.nc'" + set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx2v1_20130419.nc'" + set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx2v1_20190826.nc'" + set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx2v1_20190826.dat'" + set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx2v1_20190826.dat'" + set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx2v1_20130927.nc'" + set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx2v1_20130506.nc'" + set SWACLIMFILE = "''" + set SEDPORFILE = "''" + if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then + set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx2v1_20170915.nc'" + else + set RIVINFILE = "''" + endif + if ("$BLOM_N_DEPOSITION" == TRUE) then + set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" + else + set NDEPFILE = "''" + endif +else if ("$OCN_GRID" == tnx1v4) then + set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx1v4_20170622.nc'" + set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx1v4_20170622.nc'" + set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx1v4_20170605.nc'" + set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx1v4_20190729.nc'" + set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx1v4_20190615.dat'" + set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx1v4_20190611.dat'" + set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx1v4_20170608.nc'" + set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx1v4_20170604.nc'" + set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx1v4_20171107.nc'" + set SEDPORFILE = "''" + if ("$HAMOCC_VSLS" == TRUE) then + set SWACLIMFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/Annual_clim_swa_tnx1v4_20210415.nc'" + else + set SWACLIMFILE = "''" + endif + if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then + set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx1v4_20170820.nc'" + else + set RIVINFILE = "''" + endif + if ("$BLOM_N_DEPOSITION" == TRUE) then + set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" + else + set NDEPFILE = "''" + endif +else if ("$OCN_GRID" == tnx0.25v4) then + set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.25v4_20170622.nc'" + set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.25v4_20170623.nc'" + set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.25v4_20170626.nc'" + set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.25v4_20190612.nc'" + set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.25v4_20190701.dat'" + set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.25v4_20190612.dat'" + set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.25v4_20170623.nc'" + set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.25v4_20170623.nc'" + set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.25v4_20181004.nc'" + set SWACLIMFILE = "''" + set SEDPORFILE = "''" + if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then + set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.25v4_20170821.nc'" + else + set RIVINFILE = "''" + endif + if ("$BLOM_N_DEPOSITION" == TRUE) then + set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" + else + set NDEPFILE = "''" + endif +else if ("$OCN_GRID" == tnx0.125v4) then + set GRFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.125v4_20221013.nc'" + set ICFILE = "'$DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.125v4_20230318.nc'" + set TDFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.125v4_20221013.nc'" + set MER_ORFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.125v4_20221013.nc'" + set MER_MIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.125v4_20221013.dat'" + set SEC_SIFILE = "'$DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.125v4_20221013.dat'" + set CCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.125v4_20221013.nc'" + set SCFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.125v4_20221013.nc'" + set FEDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.125v4_20221013.nc'" + set SWACLIMFILE = "''" + set SEDPORFILE = "''" + if ("$BLOM_RIVER_NUTRIENTS" == TRUE) then + set RIVINFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.125v4_20221013.nc'" + else + set RIVINFILE = "''" + endif + if ("$BLOM_N_DEPOSITION" == TRUE) then + set NDEPFILE = "'$DIN_LOC_ROOT/ocn/blom/bndcon/$NDEPFNAME'" + else + set NDEPFILE = "''" + endif +else + echo "$0 ERROR: Cannot deal with GRID = $OCN_GRID " + exit -1 +endif + + +#------------------------------------------------------------------------------ +# Create resolved namelist +#------------------------------------------------------------------------------ +foreach mem ("`seq $NINST_OCN`") + if ( ${NINST_OCN} == '1' ) then + set inststr = '' + else + set inststr = ("`printf '_%4.4d' $mem`") + endif + + # modify namelist variables as specified in user_nl_blom + foreach line ("`grep = $CASEROOT/user_nl_blom$inststr`") + if (`echo "$line" | tr -d ' ' | cut -c -1` != '#') then + set var = `echo "$line" | sed 's/=.*//' | tr '[a-z]' '[A-Z]'` + set val = `echo "$line" | sed 's/.*=//'` + eval 'set $var = "$val"' + endif + end + +cp ocn_in.readme $RUNDIR/. + +cat >! $RUNDIR/ocn_in$inststr << EOF +&LIMITS + NDAY1 = $NDAY1 + NDAY2 = $NDAY2 + IDATE = $IDATE + IDATE0 = $IDATE0 + RUNID = $RUNID + EXPCNF = $EXPCNF + RUNTYP = $RUNTYP + GRFILE = $GRFILE + ICFILE = $ICFILE + PREF = $PREF + BACLIN = $BACLIN + BATROP = $BATROP + MDV2HI = $MDV2HI + MDV2LO = $MDV2LO + MDV4HI = $MDV4HI + MDV4LO = $MDV4LO + MDC2HI = $MDC2HI + MDC2LO = $MDC2LO + VSC2HI = $VSC2HI + VSC2LO = $VSC2LO + VSC4HI = $VSC4HI + VSC4LO = $VSC4LO + CBAR = $CBAR + CB = $CB + CWBDTS = $CWBDTS + CWBDLS = $CWBDLS + MOMMTH = $MOMMTH + BMCMTH = $BMCMTH + RMPMTH = $RMPMTH + MLRTTP = $MLRTTP + RM0 = $RM0 + RM5 = $RM5 + CE = $CE + TDFILE = $TDFILE + NIWGF = $NIWGF + NIWBF = $NIWBF + NIWLF = $NIWLF + SWAMTH = $SWAMTH + JWTYPE = $JWTYPE + CHLOPT = $CHLOPT + CCFILE = $CCFILE + TRXDAY = $TRXDAY + SRXDAY = $SRXDAY + TRXDPT = $TRXDPT + SRXDPT = $SRXDPT + TRXLIM = $TRXLIM + SRXLIM = $SRXLIM + APTFLX = $APTFLX + APSFLX = $APSFLX + DITFLX = $DITFLX + DISFLX = $DISFLX + SRXBAL = $SRXBAL + SCFILE = $SCFILE + WAVSRC = $WAVSRC + SMTFRC = $SMTFRC + SPRFAC = $SPRFAC + ATM_PATH = $ATM_PATH + ITEST = $ITEST + JTEST = $JTEST + CNSVDI = $CNSVDI + CSDIAG = $CSDIAG + RSTFRQ = $RSTFRQ + RSTFMT = $RSTFMT + RSTCMP = $RSTCMP + IOTYPE = $IOTYPE +/ +EOF + +if ("$BLOM_VCOORD" == cntiso_hybrid) then +cat >>! $RUNDIR/ocn_in$inststr << EOF + +&VCOORD + VCOORD_TYPE = $VCOORD_TYPE + RECONSTRUCTION_METHOD = $RECONSTRUCTION_METHOD + DENSITY_LIMITING = $DENSITY_LIMITING + TRACER_LIMITING = $TRACER_LIMITING + VELOCITY_LIMITING = $VELOCITY_LIMITING + DENSITY_PC_UPPER_BNDR = $DENSITY_PC_UPPER_BNDR + DENSITY_PC_LOWER_BNDR = $DENSITY_PC_LOWER_BNDR + TRACER_PC_UPPER_BNDR = $TRACER_PC_UPPER_BNDR + TRACER_PC_LOWER_BNDR = $TRACER_PC_LOWER_BNDR + VELOCITY_PC_UPPER_BNDR = $VELOCITY_PC_UPPER_BNDR + VELOCITY_PC_LOWER_BNDR = $VELOCITY_PC_LOWER_BNDR + DPMIN_SURFACE = $DPMIN_SURFACE + DPMIN_INFLATION_FACTOR = $DPMIN_INFLATION_FACTOR + DPMIN_INTERIOR = $DPMIN_INTERIOR + DKTZU = $DKTZU + DKTZL = $DKTZL +/ +EOF +endif + +cat >>! $RUNDIR/ocn_in$inststr << EOF + +&DIFFUSION + EITMTH = $EITMTH + EDRITP = $EDRITP + EDWMTH = $EDWMTH + EDDF2D = $EDDF2D + EDSPRS = $EDSPRS + EGC = $EGC + EGGAM = $EGGAM + EGLSMN = $EGLSMN + EGMNDF = $EGMNDF + EGMXDF = $EGMXDF + EGIDFQ = $EGIDFQ + TBFILE = $TBFILE + RHISCF = $RHISCF + EDANIS = $EDANIS + REDI3D = $REDI3D + RHSCTP = $RHSCTP + RI0 = $RI0 + BDMTYP = $BDMTYP + BDMC1 = $BDMC1 + BDMC2 = $BDMC2 + BDMLDP = $BDMLDP + TKEPF = $TKEPF + SMOBLD = $SMOBLD + LNGMTP = $LNGMTP + LTEDTP = $LTEDTP +/ +EOF + +if ($?CWMTAG) then +cat >>! $RUNDIR/ocn_in$inststr << EOF + +&CWMOD + CWMTAG = $CWMTAG + CWMEDG = $CWMEDG + CWMI = $CWMI + CWMJ = $CWMJ + CWMWTH = $CWMWTH +/ +EOF +endif + +cat >>! $RUNDIR/ocn_in$inststr << EOF + +&MERDIA + MER_ORFILE = $MER_ORFILE + MER_MIFILE = $MER_MIFILE + MER_REGNAM = 'atlantic_arctic_ocean', 'atlantic_arctic_extended_ocean', 'indian_pacific_ocean', 'global_ocean' + MER_REGFLG(1,:) = 2, 4 + MER_REGFLG(2,:) = 2, 4, 6, 7, 8, 9 + MER_REGFLG(3,:) = 3, 5 + MER_REGFLG(4,:) = 0 + MER_MINLAT = -34., -34., -34., -90. + MER_MAXLAT = 90., 90., 90., 90. +/ + +&SECDIA + SEC_SIFILE = $SEC_SIFILE +/ + +&DIAPHY + GLB_FNAMETAG = $GLB_FNAMETAG + GLB_AVEPERIO = $GLB_AVEPERIO + GLB_FILEFREQ = $GLB_FILEFREQ + GLB_COMPFLAG = $GLB_COMPFLAG + GLB_NCFORMAT = $GLB_NCFORMAT + H2D_ABSWND = $H2D_ABSWND + H2D_ALB = $H2D_ALB + H2D_BTMSTR = $H2D_BTMSTR + H2D_BRNFLX = $H2D_BRNFLX + H2D_BRNPD = $H2D_BRNPD + H2D_DFL = $H2D_DFL + H2D_EVA = $H2D_EVA + H2D_FICE = $H2D_FICE + H2D_FMLTFZ = $H2D_FMLTFZ + H2D_HICE = $H2D_HICE + H2D_HMLTFZ = $H2D_HMLTFZ + H2D_HSNW = $H2D_HSNW + H2D_IAGE = $H2D_IAGE + H2D_IDKEDT = $H2D_IDKEDT + H2D_LAMULT = $H2D_LAMULT + H2D_LASL = $H2D_LASL + H2D_LIP = $H2D_LIP + H2D_MAXMLD = $H2D_MAXMLD + H2D_MLD = $H2D_MLD + H2D_MLTS = $H2D_MLTS + H2D_MLTSMN = $H2D_MLTSMN + H2D_MLTSMX = $H2D_MLTSMX + H2D_MLTSSQ = $H2D_MLTSSQ + H2D_MTKEUS = $H2D_MTKEUS + H2D_MTKENI = $H2D_MTKENI + H2D_MTKEBF = $H2D_MTKEBF + H2D_MTKERS = $H2D_MTKERS + H2D_MTKEPE = $H2D_MTKEPE + H2D_MTKEKE = $H2D_MTKEKE + H2D_MTY = $H2D_MTY + H2D_NSF = $H2D_NSF + H2D_PBOT = $H2D_PBOT + H2D_PSRF = $H2D_PSRF + H2D_RFIFLX = $H2D_RFIFLX + H2D_RNFFLX = $H2D_RNFFLX + H2D_SALFLX = $H2D_SALFLX + H2D_SALRLX = $H2D_SALRLX + H2D_SBOT = $H2D_SBOT + H2D_SEALV = $H2D_SEALV + H2D_SLVSQ = $H2D_SLVSQ + H2D_SFL = $H2D_SFL + H2D_SOP = $H2D_SOP + H2D_SIGMX = $H2D_SIGMX + H2D_SSS = $H2D_SSS + H2D_SSSSQ = $H2D_SSSSQ + H2D_SST = $H2D_SST + H2D_SSTSQ = $H2D_SSTSQ + H2D_SURFLX = $H2D_SURFLX + H2D_SURRLX = $H2D_SURRLX + H2D_SWA = $H2D_SWA + H2D_T20D = $H2D_T20D + H2D_TAUX = $H2D_TAUX + H2D_TAUY = $H2D_TAUY + H2D_TBOT = $H2D_TBOT + H2D_TICE = $H2D_TICE + H2D_TSRF = $H2D_TSRF + H2D_UB = $H2D_UB + H2D_UICE = $H2D_UICE + H2D_USTAR = $H2D_USTAR + H2D_USTAR3 = $H2D_USTAR3 + H2D_USTOKES = $H2D_USTOKES + H2D_VB = $H2D_VB + H2D_VICE = $H2D_VICE + H2D_VSTOKES = $H2D_VSTOKES + H2D_ZTX = $H2D_ZTX + LYR_BFSQ = $LYR_BFSQ + LYR_DIFDIA = $LYR_DIFDIA + LYR_DIFVMO = $LYR_DIFVMO + LYR_DIFVHO = $LYR_DIFVHO + LYR_DIFVSO = $LYR_DIFVSO + LYR_DIFINT = $LYR_DIFINT + LYR_DIFISO = $LYR_DIFISO + LYR_DP = $LYR_DP + LYR_DZ = $LYR_DZ + LYR_SALN = $LYR_SALN + LYR_TEMP = $LYR_TEMP + LYR_TRC = $LYR_TRC + LYR_UFLX = $LYR_UFLX + LYR_UTFLX = $LYR_UTFLX + LYR_USFLX = $LYR_USFLX + LYR_UMFLTD = $LYR_UMFLTD + LYR_UMFLSM = $LYR_UMFLSM + LYR_UTFLTD = $LYR_UTFLTD + LYR_UTFLSM = $LYR_UTFLSM + LYR_UTFLLD = $LYR_UTFLLD + LYR_USFLTD = $LYR_USFLTD + LYR_USFLSM = $LYR_USFLSM + LYR_USFLLD = $LYR_USFLLD + LYR_UVEL = $LYR_UVEL + LYR_VFLX = $LYR_VFLX + LYR_VTFLX = $LYR_VTFLX + LYR_VSFLX = $LYR_VSFLX + LYR_VMFLTD = $LYR_VMFLTD + LYR_VMFLSM = $LYR_VMFLSM + LYR_VTFLTD = $LYR_VTFLTD + LYR_VTFLSM = $LYR_VTFLSM + LYR_VTFLLD = $LYR_VTFLLD + LYR_VSFLTD = $LYR_VSFLTD + LYR_VSFLSM = $LYR_VSFLSM + LYR_VSFLLD = $LYR_VSFLLD + LYR_VVEL = $LYR_VVEL + LYR_WFLX = $LYR_WFLX + LYR_WFLX2 = $LYR_WFLX2 + LYR_PV = $LYR_PV + LYR_TKE = $LYR_TKE + LYR_GLS_PSI = $LYR_GLS_PSI + LYR_IDLAGE = $LYR_IDLAGE + LVL_BFSQ = $LVL_BFSQ + LVL_DIFDIA = $LVL_DIFDIA + LVL_DIFVMO = $LVL_DIFVMO + LVL_DIFVHO = $LVL_DIFVHO + LVL_DIFVSO = $LVL_DIFVSO + LVL_DIFINT = $LVL_DIFINT + LVL_DIFISO = $LVL_DIFISO + LVL_DZ = $LVL_DZ + LVL_SALN = $LVL_SALN + LVL_TEMP = $LVL_TEMP + LVL_TRC = $LVL_TRC + LVL_UFLX = $LVL_UFLX + LVL_UTFLX = $LVL_UTFLX + LVL_USFLX = $LVL_USFLX + LVL_UMFLTD = $LVL_UMFLTD + LVL_UMFLSM = $LVL_UMFLSM + LVL_UTFLTD = $LVL_UTFLTD + LVL_UTFLSM = $LVL_UTFLSM + LVL_UTFLLD = $LVL_UTFLLD + LVL_USFLTD = $LVL_USFLTD + LVL_USFLSM = $LVL_USFLSM + LVL_USFLLD = $LVL_USFLLD + LVL_UVEL = $LVL_UVEL + LVL_VFLX = $LVL_VFLX + LVL_VTFLX = $LVL_VTFLX + LVL_VSFLX = $LVL_VSFLX + LVL_VMFLTD = $LVL_VMFLTD + LVL_VMFLSM = $LVL_VMFLSM + LVL_VTFLTD = $LVL_VTFLTD + LVL_VTFLSM = $LVL_VTFLSM + LVL_VTFLLD = $LVL_VTFLLD + LVL_VSFLTD = $LVL_VSFLTD + LVL_VSFLSM = $LVL_VSFLSM + LVL_VSFLLD = $LVL_VSFLLD + LVL_VVEL = $LVL_VVEL + LVL_WFLX = $LVL_WFLX + LVL_WFLX2 = $LVL_WFLX2 + LVL_PV = $LVL_PV + LVL_TKE = $LVL_TKE + LVL_GLS_PSI = $LVL_GLS_PSI + LVL_IDLAGE = $LVL_IDLAGE + MSC_MMFLXL = $MSC_MMFLXL + MSC_MMFLXD = $MSC_MMFLXD + MSC_MMFTDL = $MSC_MMFTDL + MSC_MMFSML = $MSC_MMFSML + MSC_MMFTDD = $MSC_MMFTDD + MSC_MMFSMD = $MSC_MMFSMD + MSC_MHFLX = $MSC_MHFLX + MSC_MHFTD = $MSC_MHFTD + MSC_MHFSM = $MSC_MHFSM + MSC_MHFLD = $MSC_MHFLD + MSC_MSFLX = $MSC_MSFLX + MSC_MSFTD = $MSC_MSFTD + MSC_MSFSM = $MSC_MSFSM + MSC_MSFLD = $MSC_MSFLD + MSC_VOLTR = $MSC_VOLTR + MSC_MASSGS = $MSC_MASSGS + MSC_VOLGS = $MSC_VOLGS + MSC_SALNGA = $MSC_SALNGA + MSC_TEMPGA = $MSC_TEMPGA + MSC_SSSGA = $MSC_SSSGA + MSC_SSTGA = $MSC_SSTGA +/ +EOF + +if ("$ecosys" == TRUE) then +cat >>! $RUNDIR/ocn_in$inststr << EOF + +&BGCNML + ATM_CO2 = $CCSM_CO2_PPMV + FEDEPFILE = $FEDEPFILE + SWACLIMFILE = $SWACLIMFILE + DO_RIVINPT = $DO_RIVINPT + RIVINFILE = $RIVINFILE + DO_NDEP = $DO_NDEP + NDEPFILE = $NDEPFILE + DO_OALK = $DO_OALK + DO_SEDSPINUP = $DO_SEDSPINUP + SEDSPIN_YR_S = $SEDSPIN_YR_S + SEDSPIN_YR_E = $SEDSPIN_YR_E + SEDSPIN_NCYC = $SEDSPIN_NCYC + INIDIC = $INIDIC + INIALK = $INIALK + INIPO4 = $INIPO4 + INIOXY = $INIOXY + ININO3 = $ININO3 + INISIL = $INISIL + INID13C = $INID13C + INID14C = $INID14C + WITH_DMSPH = $WITH_DMSPH + PI_PH_FILE = $PI_PH_FILE + L_3DVARSEDPOR = $L_3DVARSEDPOR + SEDPORFILE = $SEDPORFILE +/ + +&BGCOAFX + OALKSCEN = $BGCOAFX_OALKSCEN + OALKFILE = $BGCOAFX_OALKFILE + ADDALK = $BGCOAFX_ADDALK + CDRMIP_LATMAX = $BGCOAFX_CDRMIP_LATMAX + CDRMIP_LATMIN = $BGCOAFX_CDRMIP_LATMIN + RAMP_START = $BGCOAFX_RAMP_START + RAMP_END = $BGCOAFX_RAMP_END +/ + +&DIABGC + GLB_FNAMETAG = $BGC_FNAMETAG + GLB_AVEPERIO = $BGC_AVEPERIO + GLB_FILEFREQ = $BGC_FILEFREQ + GLB_COMPFLAG = $BGC_COMPFLAG + GLB_NCFORMAT = $BGC_NCFORMAT + GLB_INVENTORY = $BGC_INVENTORY + SRF_PHOSPH = $SRF_PHOSPH + SRF_OXYGEN = $SRF_OXYGEN + SRF_IRON = $SRF_IRON + SRF_ANO3 = $SRF_ANO3 + SRF_ALKALI = $SRF_ALKALI + SRF_SILICA = $SRF_SILICA + SRF_DIC = $SRF_DIC + SRF_PHYTO = $SRF_PHYTO + SRF_PH = $SRF_PH + SRF_EXPORT = $SRF_EXPORT + SRF_EXPOSI = $SRF_EXPOSI + SRF_EXPOCA = $SRF_EXPOCA + SRF_KWCO2 = $SRF_KWCO2 + SRF_KWCO2KHM = $SRF_KWCO2KHM + SRF_CO2KH = $SRF_CO2KH + SRF_CO2KHM = $SRF_CO2KHM + SRF_PCO2 = $SRF_PCO2 + SRF_PCO2M = $SRF_PCO2M + SRF_CO2FXD = $SRF_CO2FXD + SRF_CO2FXU = $SRF_CO2FXU + SRF_OXFLUX = $SRF_OXFLUX + SRF_NIFLUX = $SRF_NIFLUX + SRF_N2OFX = $SRF_N2OFX + SRF_DMSFLUX = $SRF_DMSFLUX + SRF_DMS = $SRF_DMS + SRF_DMSPROD = $SRF_DMSPROD + SRF_DMS_BAC = $SRF_DMS_BAC + SRF_DMS_UV = $SRF_DMS_UV + SRF_ATMCO2 = $SRF_ATMCO2 + SRF_ATMO2 = $SRF_ATMO2 + SRF_ATMN2 = $SRF_ATMN2 + SRF_NATDIC = $SRF_NATDIC + SRF_NATALKALI = $SRF_NATALKALI + SRF_NATPH = $SRF_NATPH + SRF_NATPCO2 = $SRF_NATPCO2 + SRF_NATCO2FX = $SRF_NATCO2FX + SRF_CO213FXD = $SRF_CO213FXD + SRF_CO213FXU = $SRF_CO213FXU + SRF_CO214FXD = $SRF_CO214FXD + SRF_CO214FXU = $SRF_CO214FXU + SRF_CFC11 = $SRF_CFC11 + SRF_CFC12 = $SRF_CFC12 + SRF_SF6 = $SRF_SF6 + SRF_BROMO = $SRF_BROMO + SRF_BROMOFX = $SRF_BROMOFX + INT_BROMOPRO = $INT_BROMOPRO + INT_BROMOUV = $INT_BROMOUV + INT_PHOSY = $INT_PHOSY + INT_NFIX = $INT_NFIX + INT_DNIT = $INT_DNIT + FLX_NDEP = $FLX_NDEP + FLX_OALK = $FLX_OALK + FLX_CAR0100 = $FLX_CAR0100 + FLX_CAR0500 = $FLX_CAR0500 + FLX_CAR1000 = $FLX_CAR1000 + FLX_CAR2000 = $FLX_CAR2000 + FLX_CAR4000 = $FLX_CAR4000 + FLX_CAR_BOT = $FLX_CAR_BOT + FLX_BSI0100 = $FLX_BSI0100 + FLX_BSI0500 = $FLX_BSI0500 + FLX_BSI1000 = $FLX_BSI1000 + FLX_BSI2000 = $FLX_BSI2000 + FLX_BSI4000 = $FLX_BSI4000 + FLX_BSI_BOT = $FLX_BSI_BOT + FLX_CAL0100 = $FLX_CAL0100 + FLX_CAL0500 = $FLX_CAL0500 + FLX_CAL1000 = $FLX_CAL1000 + FLX_CAL2000 = $FLX_CAL2000 + FLX_CAL4000 = $FLX_CAL4000 + FLX_CAL_BOT = $FLX_CAL_BOT + LYR_PHYTO = $LYR_PHYTO + LYR_GRAZER = $LYR_GRAZER + LYR_DOC = $LYR_DOC + LYR_PHOSY = $LYR_PHOSY + LYR_PHOSPH = $LYR_PHOSPH + LYR_OXYGEN = $LYR_OXYGEN + LYR_IRON = $LYR_IRON + LYR_ANO3 = $LYR_ANO3 + LYR_ALKALI = $LYR_ALKALI + LYR_SILICA = $LYR_SILICA + LYR_DIC = $LYR_DIC + LYR_POC = $LYR_POC + LYR_CALC = $LYR_CALC + LYR_OPAL = $LYR_OPAL + LYR_CO3 = $LYR_CO3 + LYR_N2O = $LYR_N2O + LYR_PH = $LYR_PH + LYR_OMEGAC = $LYR_OMEGAC + LYR_OMEGAA = $LYR_OMEGAA + LYR_PREFO2 = $LYR_PREFO2 + LYR_O2SAT = $LYR_O2SAT + LYR_PREFPO4 = $LYR_PREFPO4 + LYR_PREFALK = $LYR_PREFALK + LYR_PREFDIC = $LYR_PREFDIC + LYR_DICSAT = $LYR_DICSAT + LYR_NATDIC = $LYR_NATDIC + LYR_NATALKALI = $LYR_NATALKALI + LYR_NATCO3 = $LYR_NATCO3 + LYR_NATCALC = $LYR_NATCALC + LYR_NATPH = $LYR_NATPH + LYR_NATOMEGAC = $LYR_NATOMEGAC + LYR_NATOMEGAA = $LYR_NATOMEGAA + LYR_DIC13 = $LYR_DIC13 + LYR_DIC14 = $LYR_DIC14 + LYR_D13C = $LYR_D13C + LYR_D14C = $LYR_D14C + LYR_BIGD14C = $LYR_BIGD14C + LYR_POC13 = $LYR_POC13 + LYR_DOC13 = $LYR_DOC13 + LYR_CALC13 = $LYR_CALC13 + LYR_PHYTO13 = $LYR_PHYTO13 + LYR_GRAZER13 = $LYR_GRAZER13 + LYR_CFC11 = $LYR_CFC11 + LYR_CFC12 = $LYR_CFC12 + LYR_SF6 = $LYR_SF6 + LYR_NOS = $LYR_NOS + LYR_WPHY = $LYR_WPHY + LYR_WNOS = $LYR_WNOS + LYR_EPS = $LYR_EPS + LYR_ASIZE = $LYR_ASIZE + LYR_DP = $BGC_DP + LYR_BROMO = $LYR_BROMO + LVL_PHYTO = $LVL_PHYTO + LVL_GRAZER = $LVL_GRAZER + LVL_DOC = $LVL_DOC + LVL_PHOSY = $LVL_PHOSY + LVL_PHOSPH = $LVL_PHOSPH + LVL_OXYGEN = $LVL_OXYGEN + LVL_IRON = $LVL_IRON + LVL_ANO3 = $LVL_ANO3 + LVL_ALKALI = $LVL_ALKALI + LVL_SILICA = $LVL_SILICA + LVL_DIC = $LVL_DIC + LVL_POC = $LVL_POC + LVL_CALC = $LVL_CALC + LVL_OPAL = $LVL_OPAL + LVL_CO3 = $LVL_CO3 + LVL_N2O = $LVL_N2O + LVL_PH = $LVL_PH + LVL_OMEGAC = $LVL_OMEGAC + LVL_OMEGAA = $LVL_OMEGAA + LVL_PREFO2 = $LVL_PREFO2 + LVL_O2SAT = $LVL_O2SAT + LVL_PREFPO4 = $LVL_PREFPO4 + LVL_PREFALK = $LVL_PREFALK + LVL_PREFDIC = $LVL_PREFDIC + LVL_DICSAT = $LVL_DICSAT + LVL_NATDIC = $LVL_NATDIC + LVL_NATALKALI = $LVL_NATALKALI + LVL_NATCO3 = $LVL_NATCO3 + LVL_NATCALC = $LVL_NATCALC + LVL_NATPH = $LVL_NATPH + LVL_NATOMEGAC = $LVL_NATOMEGAC + LVL_NATOMEGAA = $LVL_NATOMEGAA + LVL_DIC13 = $LVL_DIC13 + LVL_DIC14 = $LVL_DIC14 + LVL_D13C = $LVL_D13C + LVL_POC13 = $LVL_POC13 + LVL_DOC13 = $LVL_DOC13 + LVL_CALC13 = $LVL_CALC13 + LVL_PHYTO13 = $LVL_PHYTO13 + LVL_GRAZER13 = $LVL_GRAZER13 + LVL_CFC11 = $LVL_CFC11 + LVL_CFC12 = $LVL_CFC12 + LVL_SF6 = $LVL_SF6 + LVL_NOS = $LVL_NOS + LVL_WPHY = $LVL_WPHY + LVL_WNOS = $LVL_WNOS + LVL_EPS = $LVL_EPS + LVL_ASIZE = $LVL_ASIZE + LVL_BROMO = $LVL_BROMO + FLX_SEDIFFIC = $FLX_SEDIFFIC + FLX_SEDIFFAL = $FLX_SEDIFFAL + FLX_SEDIFFPH = $FLX_SEDIFFPH + FLX_SEDIFFOX = $FLX_SEDIFFOX + FLX_SEDIFFN2 = $FLX_SEDIFFN2 + FLX_SEDIFFNO3 = $FLX_SEDIFFNO3 + FLX_SEDIFFSI = $FLX_SEDIFFSI + SDM_POWAIC = $SDM_POWAIC + SDM_POWAAL = $SDM_POWAAL + SDM_POWAPH = $SDM_POWAPH + SDM_POWAOX = $SDM_POWAOX + SDM_POWN2 = $SDM_POWN2 + SDM_POWNO3 = $SDM_POWNO3 + SDM_POWASI = $SDM_POWASI + SDM_SSSO12 = $SDM_SSSO12 + SDM_SSSSIL = $SDM_SSSSIL + SDM_SSSC12 = $SDM_SSSC12 + SDM_SSSTER = $SDM_SSSTER + BUR_SSSO12 = $BUR_SSSO12 + BUR_SSSSIL = $BUR_SSSSIL + BUR_SSSC12 = $BUR_SSSC12 + BUR_SSSTER = $BUR_SSSTER +/ +EOF +endif + +end ## foreach mem ("`seq $NINST_OCN`") + +#------------------------------------------------------------------------------ +# Generate blom.input_data_list +#------------------------------------------------------------------------------ + +cat > $CASEBUILD/blom.input_data_list << EOF +grid_file = `echo $GRFILE | tr -d '"' | tr -d "'"` +meridional_transport_index_file = `echo $MER_MIFILE | tr -d '"' | tr -d "'"` +meridional_transport_basin_file = `echo $MER_ORFILE | tr -d '"' | tr -d "'"` +section_index_file = `echo $SEC_SIFILE | tr -d '"' | tr -d "'"` +tidal_dissipation_file = `echo $TDFILE | tr -d '"' | tr -d "'"` +EOF +if ($SWAMTH == "'chlorophyll'") then +cat >> $CASEBUILD/blom.input_data_list << EOF +chlorophyll_concentration_file = `echo $CCFILE | tr -d '"' | tr -d "'"` +EOF +endif +if ($SRXDAY != "0.") then +cat >> $CASEBUILD/blom.input_data_list << EOF +sss_climatology_file = `echo $SCFILE | tr -d '"' | tr -d "'"` +EOF +endif + +# iHAMOCC boundary conditions +if ($ecosys == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +dust_file = `echo $FEDEPFILE | tr -d '"' | tr -d "'"` +EOF + if ($BLOM_RIVER_NUTRIENTS == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +river_file = `echo $RIVINFILE | tr -d '"' | tr -d "'"` +EOF + endif + if ($BLOM_N_DEPOSITION == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +n_deposition_file = `echo $NDEPFILE | tr -d '"' | tr -d "'"` +EOF + endif + if ($BGCOAFX_OALKFILE != "''") then +cat >> $CASEBUILD/blom.input_data_list << EOF +oafx_file = `echo $BGCOAFX_OALKFILE | tr -d '"' | tr -d "'"` +EOF + endif + if ($HAMOCC_VSLS == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +swa_clim_file = `echo $SWACLIMFILE | tr -d '"' | tr -d "'"` +EOF + endif + if ($L_3DVARSEDPOR == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +sed_porosity_file = `echo $SEDPORFILE | tr -d '"' | tr -d "'"` +EOF + endif +endif + +# BLOM initial conditions +cat >> $CASEBUILD/blom.input_data_list << EOF +inicon_file = `echo $ICFILE | tr -d '"' | tr -d "'"` +EOF + + +# iHAMOCC initial conditions +if ($ecosys == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +inidic_file = `echo $INIDIC | tr -d '"' | tr -d "'"` +inialk_file = `echo $INIALK | tr -d '"' | tr -d "'"` +inipo4_file = `echo $INIPO4 | tr -d '"' | tr -d "'"` +inioxy_file = `echo $INIOXY | tr -d '"' | tr -d "'"` +inino3_file = `echo $ININO3 | tr -d '"' | tr -d "'"` +inisil_file = `echo $INISIL | tr -d '"' | tr -d "'"` +EOF + if ($HAMOCC_CISO == TRUE) then +cat >> $CASEBUILD/blom.input_data_list << EOF +inic13_file = `echo $INID13C | tr -d '"' | tr -d "'"` +inic14_file = `echo $INID14C | tr -d '"' | tr -d "'"` +EOF + endif + if ($RUN_TYPE == startup) then + if ($ICFILE =~ *.blom.r.*) then +cat >> $CASEBUILD/blom.input_data_list << EOF +inicon_bgc_file = `echo $ICFILE | sed 's/.blom.r./.blom.rbgc./' | tr -d '"' | tr -d "'"` +EOF + else if ($ICFILE =~ *.micom.r.*) then +cat >> $CASEBUILD/blom.input_data_list << EOF +inicon_bgc_file = `echo $ICFILE | sed 's/.micom.r./.micom.rbgc./' | tr -d '"' | tr -d "'"` +EOF + endif + endif +endif + + diff --git a/cime_config/config_component.xml b/cime_config/config_component.xml index a38225a8..d1743b17 100644 --- a/cime_config/config_component.xml +++ b/cime_config/config_component.xml @@ -206,18 +206,6 @@ Set preprocessor option to activate the debugging mode for iHAMOCC. Requires module ecosys - - logical - TRUE,FALSE - FALSE - - TRUE - - build_component_blom - env_build.xml - Set preprocessor option to activate the VSLS-Bromoform tracer code. Requires module ecosys - - char diff --git a/cime_config/namelist_definition_blom.xml b/cime_config/namelist_definition_blom.xml new file mode 100644 index 00000000..2c5720df --- /dev/null +++ b/cime_config/namelist_definition_blom.xml @@ -0,0 +1,6244 @@ + + + + + + + + + + + + + + integer + limits + limits + + 0 + + First day of integration (i) + + + + integer + limits + limits + + 0 + + Last day of integration (i) + + + + integer + limits + limits + + 9999999 + + Model date in YYYYMMDD (i) + + + + integer + limits + limits + + 9999999 + + Initial experiment date in YYYYMMDD (i) + + + + limits + limits + + unset + + Experiment name (a) + char + + + + char + limits + limits + + cesm + + Experiment configuration (a) + + + + char + limits + limits + + $RUN_TYPE + continue + + run type (a) + + + + char + limits + limits + + unset + $DIN_LOC_ROOT/ocn/blom/grid/grid_tnx2v1_20130206.nc + $DIN_LOC_ROOT/ocn/blom/grid/grid_tnx1v4_20170622.nc + $DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.25v4_20170622.nc + $DIN_LOC_ROOT/ocn/blom/grid/grid_tnx0.125v4_20221013.nc + + abs + Name of file containing grid specification (a)Name of file containing grid specification + + + + char + limits + limits + + unset + $DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx2v1_20130419.nc + $DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx1v4_20170622.nc + $DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.25v4_20170623.nc + $DIN_LOC_ROOT/ocn/blom/inicon/inicon_tnx0.125v4_20230318.nc + + abs + + Name of file containing initial conditions, that is either a + valid restart file or 'inicon.nc' if climatological based + initial conditions are desired. + + + + + real + limits + limits + + 2000.e4 + 2000.e5 + + Reference pressure for potential density (g/cm/s2) (f) + + + + real + limits + limits + + 1800. + 4800. + 4800. + 3200. + 3600. + 900. + 300. + + Baroclinic time step (sec) (f) + + + + real + limits + limits + + 36. + 96. + 96. + 64. + 60. + 15. + 6. + + Barotropic time step (sec) (f) + + + + real + limits + limits + + .02 + 2. + .15 + .0015 + .1 + .001 + + Laplacian diffusion velocity for momentum dissipation (cm/s) (f) + + + + real + limits + limits + + .004 + .4 + .15 + .0015 + .1 + .001 + + Laplacian diffusion velocity for momentum dissipation (cm/s) (f) + + + + real + limits + limits + + 0. + + Biharmonic diffusion velocity for momentum dissipation (cm/s) (f) + + + + real + limits + limits + + 0. + + Biharmonic diffusion velocity for momentum dissipation (cm/s) (f) + + + + real + limits + limits + + 5000. + 5000.e4 + 300.e4 + 300. + 300.e4 + 300. + + Laplacian diffusivity for momentum dissipation (cm**2/s) (f) + + + + real + limits + limits + + 300. + 300.e4 + 300.e4 + 300. + 100.e4 + 100. + + Laplacian diffusivity for momentum dissipation (cm**2/s) (f) + + + + real + limits + limits + + .5 + .15 + 0. + + Parameter in deformation-dependent Laplacian viscosity (f) + + + + real + limits + limits + + .5 + .15 + 0. + + Parameter in deformation-dependent Laplacian viscosity (f) + + + + real + limits + limits + + 0. + 0.0625 + 0.06 + + Parameter in deformation-dependent Biharmonic viscosity (f) + + + + real + limits + limits + + 0. + 0.0625 + 0.06 + + Parameter in deformation-dependent Biharmonic viscosity (f) + + + + real + limits + limits + + .05 + 5. + + rms flow speed for linear bottom friction law (cm/s) (f) + + + + real + limits + limits + + .002 + + Nondiemnsional coefficient of quadratic bottom friction (f) + + + + real + limits + limits + + 5.e-5 + .75e-4 + 0.75e-4 + .75e-4 + + Coastal wave breaking damping resiprocal time scale (1/s) (f) + + + + real + limits + limits + + 25. + + Coastal wave breaking damping length scale (m) (f) + + + + char + limits + limits + + enscon + + Momentum equation discretization method. Valid methods: + + + + char + limits + limits + + uc + + Baroclinic mass flux correction method. Valid methods: + + + + char + limits + limits + + eitvel + + Method of applying eddy-induced transport in the remap + + + + char + limits + limits + + constant + + Type of mixed layer restratification time scale. Valid + + + + real + limits + limits + + 1.2 + + Efficiency factor of wind TKE generation in the Oberhuber + + + + real + limits + limits + + 0. + + Efficiency factor of TKE generation by momentum + + + + real + limits + limits + + .06 + .5 + 1.0 + + Efficiency factor for the restratification by mixed layer + + + + char + limits + limits + + UNSET + $DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx2v1_20130419.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx1v4_20170605.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.25v4_20170626.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/tidal_dissipation_tnx0.125v4_20221013.nc + + abs + + Name of file containing tidal wave energy dissipation divided by + by bottom buoyancy frequency + + + + + real + limits + limits + + 0. + .4 + + Global factor applied to the energy input by near-intertial + + + + real + limits + limits + + .35 + + Fraction of near-inertial energy dissipated in the boundary + + + + real + limits + limits + + .5 + + Fraction of near-inertial energy dissipated locally beneath + + + + char + limits + limits + + jerlov + + Shortwave radiation absorption method. Valid methods: + + + + integer + limits + limits + + 3 + + Number indicating the Jerlov (1968) water type (i) + + + + char + limits + limits + + climatology + + Chlorophyll concentration option. Valid options: + + + + char + limits + limits + + unset + $DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx1v4_20170608.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.25v4_20170623.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/chlorophyll_concentration_tnx0.125v4_20221013.nc + + abs + + Name of file containing chlorophyll concentration climatology + + + + + real + limits + limits + + 0. + + e-folding time scale (days) for SST relax., if 0 no relax. (f) + + + + real + limits + limits + + 0. + 60. + 6. + + e-folding time scale (days) for SSS relax., if 0 no relax. (f) + + + + real + limits + limits + + 1. + + Maximum mixed layer depth for e-folding SST relaxation (m) (f) + + + + real + limits + limits + + 1. + 1. + 10. + + Maximum mixed layer depth for e-folding SSS relaxation (m) (f) + + + + real + limits + limits + + 1.5 + + Max. absolute value of SST difference in relaxation (degC) (f) + + + + real + limits + limits + + .5 + + Max. absolute value of SSS difference in relaxation (psu) (f) + + + + logical + limits + limits + + .false. + + Apply diagnosed heat flux flag (l) + + + + logical + limits + limits + + .false. + + Apply diagnosed freshwater flux flag (l) + + + + logical + limits + limits + + .false. + + Diagnose heat flux flag (l) + + + + logical + limits + limits + + .false. + + Diagnose freshwater flux flag (l) + + + + logical + limits + limits + + .false. + .true. + + Balance the SSS relaxation (l) + + + + char + limits + limits + + unset + $DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx2v1_20130927.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx1v4_20170604.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.25v4_20170623.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/sss_clim_core_tnx0.125v4_20221013.nc + + abs + Name of file containing SSS climatology used for relaxation (a) + Name of file containing SSS climatology used for relaxation + + + + + char + limits + limits + + none + + Source of wave fields. Valid source: 'none', 'param', 'extern' (a) + + + + logical + limits + limits + + .true. + .false. + + Smooth NorESM forcing (l) + + + + logical + limits + limits + + .false. + .true. + + Send precipitation/runoff factor to NorESM coupler (l) + + + + char + limits + limits + + unset + + Path to forcing fields in case of EXPCNF 'ben02clim' or + + + + integer + limits + limits + + 60 + + Global i-index of point diagnostics (i) + + + + integer + limits + limits + + 60 + + Global j-index of point diagnostics (i) + + + + logical + limits + limits + + .false. + + Conservation diagnostics flag (l) + + + + logical + limits + limits + + .false. + + Checksum diagnostics flag (l) + + + + integer + limits + limits + + 1 + + Restart frequency in days (30=1month,365=1year) (i) + + + + integer + limits + limits + + 0 + 1 + + Format of restart file (valid arguments are 0 for classic, + + + + integer + limits + limits + + 0 + + Compression flag for restart file (i) + + + + integer + limits + limits + + 0 + 1 + + 0 = netcdf, 1 = pnetcdf + + + + + + + + char + vcoord + vcoord + + $BLOM_VCOORD + + + + + + char + vcoord + vcoord + + ppm + + + + + + char + vcoord + vcoord + + monotonic + + + + + + char + vcoord + vcoord + + non_oscillatory + + + + + + char + vcoord + vcoord + + non_oscillatory + + + + + + logical + vcoord + vcoord + + .false. + + + + + + logical + vcoord + vcoord + + .false. + + + + + + logical + vcoord + vcoord + + .true. + + + + + + logical + vcoord + vcoord + + .false. + + + + + + logical + vcoord + vcoord + + .true. + + + + + + logical + vcoord + vcoord + + .false. + + + + + + real + vcoord + vcoord + + 2.5 + + + + + + real + vcoord + vcoord + + 1.08 + + + + + + real + vcoord + vcoord + + .1 + + + + + + integer + vcoord + vcoord + + 4 + + + + + + integer + vcoord + vcoord + + 1 + + + + + + + + + + char + diffusion + diffusion + + gm + + Eddy-induced transport parameterization method. Valid + + + + char + diffusion + diffusion + + "large scale" + + Type of Richardson number used in eddy diffusivity + + + + char + diffusion + diffusion + + smooth + step + step + + Method to estimate eddy diffusivity weight as a function of + + + + logical + diffusion + diffusion + + .false. + + If true, eddy diffusivity has a 2d structure (l) + + + + logical + diffusion + diffusion + + .true. + + Apply eddy mixing suppression away from steering level (l) + + + + real + diffusion + diffusion + + 0.85 + 0.5 + 0.5 + + Parameter c in Eden and Greatbatch (2008) parameterization (f) + + + + real + diffusion + diffusion + + 200. + + Parameter gamma in E. and G. (2008) param. (f) + + + + real + diffusion + diffusion + + 4000. + 4000.e2 + + Minimum eddy length scale in E. and G. (2008) param. (cm) (f) + + + + real + diffusion + diffusion + + 100. + 100.e4 + 0. + 0. + + Minimum diffusivity in E. and G. (2008) param. (cm**2/s) (f) + + + + real + diffusion + diffusion + + 1500. + 1500.e4 + 1000. + 1000.e4 + 1000. + 1000.e4 + 0. + 0. + + Maximum diffusivity in E. and G. (2008) param. (cm**2/s) (f) + + + + real + diffusion + diffusion + + 1. + + Factor relating the isopycnal diffusivity to the layer + + + + char + diffusion + diffusion + + UNSET + + abs + Name of file containing topographic beta parameter (a)Name of file containing topographic beta parameter + + + + real + diffusion + diffusion + + 0. + + Linear scaling parameter for topographic rhines scale () (f) + + + + logical + diffusion + diffusion + + .false. + + If true, apply anisotropy correction to eddy diffusivity (l) + + + + logical + diffusion + diffusion + + .false. + + If true, then isopycnal/neutral diffusion will have 3D + + + + logical + diffusion + diffusion + + .false. + + If true, use the minimum of planetary and topographic beta + + + + real + diffusion + diffusion + + 1.2 + + Critical gradient richardson number for shear driven + + + + integer + diffusion + diffusion + + 2 + + Type of background diapycnal mixing. If bdmtyp=1 the + + + + real + diffusion + diffusion + + 5.e-8 + 5.e-4 + + Background diapycnal diffusivity times buoyancy frequency + + + + real + diffusion + diffusion + + 1.e-5 + .1 + + Background diapycnal diffusivity (cm**2/s) (f) + + + + logical + diffusion + diffusion + + .false. + .true. + + Make the background mixing latitude dependent according to + + + + real + diffusion + diffusion + + .006 + + Fraction of surface TKE that penetrates beneath mixed layer + + + + logical + diffusion + diffusion + + .true. + + If true, apply lateral smoothing of CVMix estimated + + + + char + diffusion + diffusion + + none + + Type of CVMix Langmuir turbulence parameterization. Valid + + + + char + diffusion + diffusion + + neutral + layer + layer + layer + + Type of lateral tracer eddy diffusion: Valid methods: + + + + + + + + char(2) + cwmod + cwmod + + unset + 'Gibraltar','Gibraltar' + 'Gibraltar','Gibraltar' + + Array of geographical names of channels to be modified (a) + + + + char(2) + cwmod + cwmod + + 'unset','unset' + 'u','u' + 'u','u' + + + Array of C grid cell edges to be modified. Valid options: + + + + integer(2) + cwmod + cwmod + + -999,-999 + 53,54 + 105,106 + + Array of grid cell i-indices (i) + + + + integer(2) + cwmod + cwmod + + -999,-999 + 137,137 + 273,273 + + Array of grid cell j-indices (i) + + + + real(2) + cwmod + cwmod + + 1.e36,1.e36 + 30.e3,30.e3 + 30.e3,30.e3 + + + Array of modified grid cell widths (m) (f) + + + + + + + + char + secdia + secdia + + unset + $DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx2v1_20190826.dat + $DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx1v4_20190611.dat + $DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.25v4_20190612.dat + $DIN_LOC_ROOT/ocn/blom/grid/section_index_tnx0.125v4_20221013.dat + + abs + + Name of file containing section specification for section + transport computation + + + + + + + + + + char(3) + diaphy + diaphy + + 'hd','hm','hy' + + tag used in file name (c10) + + + + integer(3) + diaphy + diaphy + + 1,30,365 + + average period in days + + + + integer(3) + diaphy + diaphy + + 30,30,365 + 1,30,365 + 30,30,365 + + how often to start a new file in days + + + + integer(3) + diaphy + diaphy + + 0,0,0 + + switch for compressed/uncompressed output + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 1,1,1 + + + netcdf format (valid arguments are 0 for classic, 1 for 64-bit + offset and 2 for netcdf4/hdf5 format) + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + absolute wind speed [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + + surface albedo [] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + Barotropic mass streamfunction [kg s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + brine flux [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + brine plume depth [m] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + non-solar heat flux derivative [W m-2 K-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + evaporation [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + ice concentration [%] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + fresh water flux due to melting/freezing [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + ice thickness [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + heat flux due to melting/freezing [W m-2] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + snow depth [m] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + ice age [d] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer inertial kinetic energy tendency [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + Langmuir enhancement factor [] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + Surface layer averaged Langmuir number [] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + liquid precipitation [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + maximum mixed layer depth [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer depth [m] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + mixed layer thickness using "sigma-t" criterion [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + minimum mixed layer thickness using "sigma-t" criterion [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + maximum mixed layer thickness using "sigma-t" criterion [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer thickness squared using "sigma-t" criterion [m2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to friction velocity [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to near inertial mot. [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to buoyancy forcing [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to eddy restrat. [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to pot. energy change [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer TKE tendency related to kin. energy change [kg s-3] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + wind stress y-component [N m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + non-solar heat flux [W m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + bottom pressure [Pa] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + surface pressure [Pa] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + frozen runoff [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + liquid runoff [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + salt flux received by ocean [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + restoring salt flux received by ocean [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + bottom salinity [g kg-1] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + sea level [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + sea level squared [m2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + salt flux [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + solid precipitation [kg m-2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + mixed layer density [kg m-3] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + ocean surface salinity [g kg-1] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + ocean surface salinity squared [g2 kg-2] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + ocean surface temperature [degC] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + ocean surface temperature squared [degC2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + heat flux received by ocean [W m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + restoring heat flux received by ocean [W m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + short-wave heat flux [W m-2] + + + + integer(3) + diaphy + diaphy + + 4,4,0 + 4,4,0 + 0,0,0 + + 20C isoterm depth [m] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + momentum flux received by ocean x-component [N m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + momentum flux received by ocean y-component [N m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + bottom temperature [degC] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + ice temperature [degC] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + surface temperature [degC] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + barotropic velocity x-component [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + ice velocity x-component [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + friction velocity [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + friction velocity cubed [m3 s-3] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + surface Stokes drift x-componen [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + barotropic velocity y-component [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + ice velocity y-component [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + surface Stokes drift y-componen [m s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + wind stress x-component [N m-2] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + buoyancy frequency squared [s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + vertical diffusivity [log10(m2 s-1)|m2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + vertical momentum diffusivity [log10(m2 s-1)|m2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + vertical heat diffusivity [log10(m2 s-1)|m2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + vertical salt diffusivity [log10(m2 s-1)|m2 s-1] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + layer interface diffusivity [log10(m2 s-1)] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + isopycnal diffusivity [log10(m2 s-1)] + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,0 + 0,0,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,0,4 + 0,0,4 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + integer(3) + diaphy + diaphy + + 0,4,0 + 4,4,0 + 0,0,0 + + + + + + + + + + char + merdia + merdia + + UNSET + $DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx2v1_20190826.nc + $DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx1v4_20190729.nc + $DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.25v4_20190612.nc + $DIN_LOC_ROOT/ocn/blom/grid/ocean_regions_tnx0.125v4_20221013.nc + + abs + Name of file containing ocean region specification (a) + + + + char + merdia + merdia + + UNSET + $DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx2v1_20190826.dat + $DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx1v4_20190615.dat + $DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.25v4_20190701.dat + $DIN_LOC_ROOT/ocn/blom/grid/mertra_index_tnx0.125v4_20221013.dat + + abs + Name of file containing zonal section specification for + + + + char(4) + merdia + merdia + + 'atlantic_arctic_ocean','atlantic_arctic_extended_ocean','indian_pacific_ocean','global_ocean' + + Array of region names for meridional overturning and flux + + + + integer(20) + merdia + merdia + + 2,4 + + Array of mask flags in ocean regions file to be included for region (1) + + + integer(20) + merdia + merdia + + 2,4,6,7,8,9 + + Array of mask flags in ocean regions file to be included for region (2) + + + integer(20) + merdia + merdia + + 3,5 + + Array of mask flags in ocean regions file to be included for region (3) + + + integer(20) + merdia + merdia + + 0 + + Array of mask flags in ocean regions file to be included for region (4) + + + + real(4) + merdia + merdia + + -34.,-34.,-34.,-90. + + Minimum latitude to be considered for each region (f) + + + + real(4) + merdia + merdia + + 90.,90.,90.,90. + + Maximum latitude to be considered for each region (f) + + + + + + + + real + bgcnml + bgcnml + + $CCSM_CO2_PPMV + + Atmospheric CO2 concentration [ppmv] + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx2v1_20130506.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx1v4_20171107.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.25v4_20181004.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/dustdep_mhw2006_tnx0.125v4_20221013.nc + + abs + 'File name (incl. full path) for iron (dust) deposition data' + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/bndcon/Annual_clim_swa_tnx1v4_20210415.nc + + abs + File name (incl. full path) for swa climatology field (needed if bromoform scheme is activated) + + + + logical + bgcnml + bgcnml + + .false. + .true. + + Logical switch to activate riverine input + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx2v1_20170915.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx1v4_20170820.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.25v4_20170821.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/river_nutrients_GNEWS2000_tnx0.125v4_20221013.nc + + abs + File name (incl. full path) for riverine input data + + + + logical + bgcnml + bgcnml + + .false. + .true. + .false. + + Logical switch to activate N-deposition + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_1850_CMIP6_tnx2v1_20180321.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_2000_CMIP6_tnx2v1_20200826.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_185001-201412_tnx2v1_20190702.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_1850_CMIP6_tnx1v4_20171106.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_2000_CMIP6_tnx1v4_20200826.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_185001-201412_tnx1v4_20180613.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_201501-210012-${BLOM_NDEP_SCENARIO}_tnx1v4_20191112.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_1850_CMIP6_tnx0.25v4_20190912.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_2000_CMIP6_tnx0.25v4_20200826.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_185001-201412_tnx0.25v4_20190705.nc + $DIN_LOC_ROOT/ocn/blom/bndcon/ndep_1850_CMIP6_tnx0.125v4_20221013.nc + + abs + File name (incl. full path) for atmopheric N-deposition data + + + + logical + bgcnml + bgcnml + + .false. + + + + + + logical + bgcnml + bgcnml + + .false. + .true. + + Logical switch to activate sediment spin-upLogical switch to activate sediment spin-up + + + + integer + bgcnml + bgcnml + + -1 + $HAMOCC_SEDSPINUP_YR_START + + Start year for sediment spinup + + + + integer + bgcnml + bgcnml + + -1 + $HAMOCC_SEDSPINUP_YR_END + + End year for sediment spinup + + + + integer + bgcnml + bgcnml + + -1 + + Number of subcyles per time-step for sediment spinup + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_Ct_preind_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/glodapv2_At_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/woa13_phosphate_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/woa13_oxygen_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/woa13_nitrate_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + $DIN_LOC_ROOT/ocn/blom/inicon/woa13_silicate_OMIPinit_20171107.nc + + abs + + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/inicon/d13C_permil_20180609.nc + + abs + + + + + char + bgcnml + bgcnml + + UNSET + $DIN_LOC_ROOT/ocn/blom/inicon/d14C_permil_20180609.nc + + abs + + + + + logical + bgcnml + bgcnml + + .false. + + + + + + char + bgcnml + bgcnml + + UNSET + + abs + + File name (incl. full path) for surface PI pH input data. + + + + + logical + bgcnml + bgcnml + + .false. + + + + + + char + bgcnml + bgcnml + + UNSET + + abs + + File name (incl. full path) for sediment porosity + + + + + + + + + + char + bgcoafx + bgcoafx + + UNSET + + Name of alkalinization scenario ('const', 'ramp', or 'file') + + + + char + bgcoafx + bgcoafx + + UNSET + + abs + + Full path of the input file for the alkalinization scenario 'file' + + + + + real + bgcoafx + bgcoafx + + 0.135 + + Pmol alkalinity/yr added in 'const' or 'ramp' scenarios + + + + real + bgcoafx + bgcoafx + + 70.0 + + Max latitude where alkalinity is added in 'const' or 'ramp' scenarios + + + + real + bgcoafx + bgcoafx + + -60.0 + + Min latitude where alkalinity is added in 'const' or 'ramp' scenarios + + + + real + bgcoafx + bgcoafx + + 2025 + + Start year for ramp up in 'ramp' scenario + + + + real + bgcoafx + bgcoafx + + 2035 + + End year for ramp up in 'ramp' scenario + + + + + + + + char(3) + diabgc + diabgc + + 'hbgcd','hbgcm','hbgcy' + + + + + + integer(3) + diabgc + diabgc + + 1,30,365 + + + + + + integer(3) + diabgc + diabgc + + 30,30,365 + 1,30,365 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 1,1,1 + + + + + + integer(3) + diabgc + diabgc + + 0,1,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Phosphorus (po4) [mol P m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Oxygen (o2) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved iron (dfe) [mol Fe m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Nitrate (no3) [mol N m-3] + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Natural alkalinity (nattalk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Dissolved carbon (dissic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Phytoplankton (phyc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + pH (ph) [-log10([h+])] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Export production (epc100) [mol C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Si export production (epsi100) [mol Si m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Ca export production (epcalc100) [mol Ca m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Piston velocity (kwco2) [m s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Piston velocity times solubility (kwco2*kh; moist air) [m s-1 mol kg-1 uatm-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Piston velocity times solubility (kwco2*kh; moist air) [m s-1 mol kg-1 uatm-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CO2 solubility under moist air assumption (kh) [mol kg-1 atm-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural surface PCO2 (spco2) [uatm] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Surface PCO2 under moist air assumption [uatm] + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Downward CO2 flux (co2fxd) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Upward CO2 flux (co2fxu) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Oxygen flux (fgo2) [mol O2 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Nitrogen flux (fgn2) [mol N2 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + Nitrous oxide flux [mol N2O m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + DMS flux (dmsflux) [mol DMS m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + surface DMS concentration (dms) [mol DMS m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + DMS production (dmsprod) [mol DMS m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + DMS bacterial consuption (dms_bac) [mol DMS m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + DMS decomposition by UV (dms_uv) [mol DMS m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Atmospheric CO2 (atmco2) [ppm] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Atmospheric O2 (atmo2) [ppm] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Atmospheric N2 (atmn2) [ppm] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural dissolved carbon (natdissic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural alkalinity (nattalk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural pH (natph) [-log10([h+])] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural surface PCO2 (spco2) [uatm] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural net CO2 flux (natco2fx) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 0,2,2 + 0,0,0 + + Downward 13CO2 flux (co213fxd) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 0,2,2 + 0,0,0 + + Upward 13CO2 flux (co213fxu) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Downward 14CO2 flux (co214fxd) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Upward 14CO2 flux (co214fxu) [kg C m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CFC11 flux [mol CFC11 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CFC12 flux [mol CFC12 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + SF6 flux [mol SF6 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 4,2,2 + 4,2,2 + 0,0,0 + + Primary production (pp) [mol C m-3 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Vertically integrated nitrogen fixation + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Vertically integrated denitrification + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,2,2 + 4,2,2 + + Nitrogen deposition flux [mol N m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + AMELIST FOR DIAGNOSTIC iHAMOCC OUTPUT + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + Phosphorus (po4) [mol P m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,4 + 4,0,4 + 0,0,0 + + Oxygen (o2) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Dissolved iron (dfe) [mol Fe m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + CaCO3 shells (calc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Opal shells (opal) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Carbonate ions (co3) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + Nitrous oxide concentration [mol N2O m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Calcite saturation state (omegac) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural aragonite saturation state (natomegaa) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,4 + 4,0,4 + 0,0,0 + + preformed oxygen (p_o2) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,4 + 4,0,4 + 0,0,0 + + Saturated oxygen (satoxy) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + preformed alkalinity (p_talk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + preformed DIC (p_dic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + saturated DIC (dic_sat) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural dissolved carbon (natdissic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural alkalinity (nattalk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural carbonate ion concentration (natco3) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural CaCO3 shells (natcalc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural pH (natph) [-log10([h+])] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural calcite saturation state (natomegac) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Natural aragonite saturation state (natomegaa) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Dissolved C13 (dissic13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + Dissolved C14 (dissic14) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + at-depth variable sediment porosity (as opposed to default: only depth) + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + delta 14C of DIC [1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Delta 14C of DIC [1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Particulate organic carbon 13 (detoc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Dissolved organic carbon 13 (dissoc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Particulate inorganic carbon 13 (calc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + 13C of phytoplankton biomass (phyc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + 13C of zootoplankton biomass (zooc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + CFC11 concentration [mol CFC11 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + CFC12 concentration [mol CFC12 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + SF6 concentration [mol SF6 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + index of point diagnostics (i) + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Mass sinking velocity (aggregate scheme) [m d-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 0,0,2 + 0,0,0 + + Number sinking velocity (aggregate scheme) [m d-1] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + Epsilon exponent (aggregate scheme) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + Average particle size (aggregate scheme) + + + + integer(3) + diabgc + diabgc + + 0,0,2 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 0,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Phytoplankton (phyc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Zooplankton (zooc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved organic carbon (dissoc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Primary production (pp) [mol C m-3 s-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Phosphorus (po4) [mol P m-3] + + + + integer(3) + diabgc + diabgc + + 0,4,4 + 4,4,4 + 0,0,0 + + Oxygen (o2) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + eposition + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Nitrate (no3) [mol N m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Alkalinity (talk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Silicate (si) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved carbon (dissic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Detrius (detoc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CaCO3 shells (calc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Opal shells (opal) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + ] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 4,2,2 + 0,0,0 + + Nitrous oxide concentration [mol N2O m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Calcite saturation state (omegac) [1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Aragonite saturation state (omegaa) [1] + + + + integer(3) + diabgc + diabgc + + 0,4,4 + 4,4,4 + 0,0,0 + + preformed oxygen (p_o2) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,4,4 + + Saturated oxygen (satoxy) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + preformed phosphate (p_po4) [mol PO4 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + preformed alkalinity (p_talk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + preformed DIC (p_dic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + saturated DIC (dic_sat) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural dissolved carbon (natdissic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural alkalinity (nattalk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural carbonate ion concentration (natco3) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural CaCO3 shells (natcalc) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural pH (natph) [-log10([h+])] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural calcite saturation state (natomegac) [1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Natural aragonite saturation state (natomegaa) [1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved C13 (dissic13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved C14 (dissic14) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + delta 13C of DIC [1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Particulate organic carbon 13 (detoc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Dissolved organic carbon 13 (dissoc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Particulate inorganic carbon 13 (calc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + 13C of phytoplankton biomass (phyc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + 13C of zootoplankton biomass (zooc13) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CFC11 concentration [mol CFC11 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + CFC12 concentration [mol CFC12 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + SF6 concentration [mol SF6 m-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Number of sinking particles (aggregate scheme,nos) [cm-3] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Mass sinking velocity (aggregate scheme) [m d-1] + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + Number sinking velocity (aggregate scheme) [m d-1] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + Epsilon exponent (aggregate scheme) [1] + + + + integer(3) + diabgc + diabgc + + 0,0,0 + 0,0,0 + 0,0,0 + + Average particle size (aggregate scheme) + + + + integer(3) + diabgc + diabgc + + 0,2,2 + 4,2,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + sediment - water-column diffusive flux of oxygen [mol O2 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + sediment - water-column diffusive flux of N2 [mol N2 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + sediment - water-column diffusive flux of nitrate [mol NO3 m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + sediment - water-column diffusive flux of silica [mol Si m-2 s-1] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powdic) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powalk) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powpho) [eq m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powox) [mol O2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (pown2) [mol N2 m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powno3)[mol N m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (powsi) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssso12) [mol m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssssil) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (sssc12) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssster) [mol m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssso12) [mol m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssssil) [mol Si m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (sssc12) [mol C m-3] + + + + integer(3) + diabgc + diabgc + + 0,0,2 + 2,0,2 + 0,0,0 + + (ssster) [mol m-3] + + + diff --git a/cime_config/ocn_in.readme b/cime_config/ocn_in.readme index 8750f450..56d98527 100644 --- a/cime_config/ocn_in.readme +++ b/cime_config/ocn_in.readme @@ -75,8 +75,8 @@ ! SRXBAL : Balance the SSS relaxation (l) ! SCFILE : Name of file containing SSS climatology used for relaxation (a) ! WAVSRC : Source of wave fields. Valid source: 'none', 'param', 'extern' (a) -! SMTFRC : Smooth CESM forcing (l) -! SPRFAC : Send precipitation/runoff factor to CESM coupler (l) +! SMTFRC : Smooth NorESM forcing (l) +! SPRFAC : Send precipitation/runoff factor to NorESM coupler (l) ! ATM_PATH : Path to forcing fields in case of EXPCNF 'ben02clim' or ! 'ben02syn' (a) ! ITEST : Global i-index of point diagnostics (i) diff --git a/cime_config/testdefs/testlist_blom.xml b/cime_config/testdefs/testlist_blom.xml index f54c99eb..cdddf99a 100644 --- a/cime_config/testdefs/testlist_blom.xml +++ b/cime_config/testdefs/testlist_blom.xml @@ -5,22 +5,22 @@ - + - + - + - + diff --git a/cime_config/user_nl_blom b/cime_config/user_nl_blom index bdfa712d..00abb174 100644 --- a/cime_config/user_nl_blom +++ b/cime_config/user_nl_blom @@ -1,7 +1,34 @@ -#---------------------------------------------------------------------------------- -# Users should add all user specific namelist changes below in the form of -# namelist_var = new_namelist_value -# Note - that it does not matter what namelist group the namelist_var belongs to -#---------------------------------------------------------------------------------- +!---------------------------------------------------------------------------------- +! Users should add all user specific namelist changes below in the form of +! namelist_var = new_namelist_value +! +! NOTE: that it does not matter what namelist group the namelist_var belongs to +! EXCEPT for when a variable appears in more than one namelist +! There are a few history variables that have the same name in both diaphy and diabgc +! For those variables an @diaphy or @diabgc to be appendend for the namelist_var +! +! GLB_FNAMETAG@diaphy +! GLB_AVEPERIO@diaphy +! GLB_FILEFREQ@diaphy +! GLB_COMPFLAG@diaphy +! GLB_NCFORMAT@diaphy +! LYR_DP@diaphy"> +! GLB_FNAMETAG@diabgc +! GLB_AVEPERIO@diabgc +! GLB_FILEFREQ@diabgc +! GLB_COMPFLAG@diabgc +! GLB_NCFORMAT@diabgc +! LYR_DP@diabgc"> +! +! For example: +! GLB_FNAMETAG@diaphy = 'hd','hd','hd' +! +! NOTE: the array sections for MER_REGFLG must be entered as +! MER_REGFLG1 - sets MER_REGFLG(1,:) +! MER_REGFLG2 - sets MER_REGFLG(2,:) +! MER_REGFLG3 - sets MER_REGFLG(3,:) +! MER_REGFLG4 - sets MER_REGFLG(4,:) +! To see a full documentation of the namelist variables - see $RUNDIR/ocn_in.readme +!---------------------------------------------------------------------------------- diff --git a/drivers/nuopc/mod_nuopc_methods.F90 b/drivers/nuopc/mod_nuopc_methods.F90 index 53b52d1e..91c01a17 100644 --- a/drivers/nuopc/mod_nuopc_methods.F90 +++ b/drivers/nuopc/mod_nuopc_methods.F90 @@ -39,10 +39,15 @@ module mod_nuopc_methods rnf_da, rfi_da, fmltfz_da, sfl_da, ztx_da, mty_da, & ustarw_da, slp_da, abswnd_da, ficem_da, lamult_da, & lasl_da, ustokes_da, vstokes_da, atmco2_da, atmbrf_da, & - l1ci, l2ci + flxdms_da, flxbrf_da, l1ci, l2ci use mod_utility, only: util1, util2 use mod_checksum, only: csdiag, chksummsk use shr_const_mod, only: SHR_CONST_RHOSW, SHR_CONST_LATICE, SHR_CONST_TKFRZ +#ifdef HAMOCC + use mo_carbch, only: ocetra + use mo_param1_bgc, only: idms, ibromo + use mo_control_bgc, only: do_bgc_aofluxes +#endif implicit none @@ -57,6 +62,7 @@ module mod_nuopc_methods integer :: ungridded_ubound = 0 real(r8), dimension(:), pointer :: dataptr end type fldlist_type + integer, parameter :: fldsMax = 100 real(r8), dimension(:), allocatable :: mod2med_areacor, med2mod_areacor real(r8), dimension(1-nbdy:idm+nbdy,1-nbdy:jdm+nbdy) :: & @@ -64,53 +70,234 @@ module mod_nuopc_methods acc_fco2, acc_fdms, acc_fbrf real(r8) :: tlast_coupled integer :: jjcpl - logical :: fco2_requested, fdms_requested, fbrf_requested - public :: fldlist_type, tlast_coupled, & - fco2_requested, fdms_requested, fbrf_requested, & + public :: fldlist_type, fldsmax, tlast_coupled, & blom_logwrite, blom_getgindex, blom_checkmesh, blom_setareacor, & blom_getglobdim, blom_getprecipfact, blom_accflds, & + blom_advertise_imports, blom_advertise_exports, & blom_importflds, blom_exportflds + ! Indices for import fields + integer :: & + index_Si_ifrac = - 1, & + index_So_duu10n = - 1, & + index_Fioi_melth = - 1, & + index_Fioi_meltw = - 1, & + index_Fioi_salt = - 1, & + index_Fioi_bcpho = - 1, & + index_Fioi_bcphi = - 1, & + index_Fioi_flxdst = - 1, & + index_Foxx_rofl = - 1, & + index_Foxx_rofi = - 1, & + index_Faox_dms = - 1, & + index_Faox_brf = - 1, & + index_Foxx_tauy = - 1, & + index_Foxx_taux = - 1, & + index_Foxx_lat = - 1, & + index_Foxx_sen = - 1, & + index_Foxx_lwup = - 1, & + index_Foxx_evap = - 1, & + index_Foxx_swnet = - 1, & + index_Sw_lamult = - 1, & + index_Sw_ustokes = - 1, & + index_Sw_vstokes = - 1, & + index_Sw_hstokes = - 1, & + index_Faxa_lwdn = - 1, & + index_Faxa_snow = - 1, & + index_Faxa_rain = - 1, & + index_Sa_pslv = - 1, & + index_Sa_co2diag = - 1, & + index_Sa_co2prog = - 1 + + ! Indices for export fields + integer :: & + index_So_omask = - 1, & + index_So_u = - 1, & + index_So_v = - 1, & + index_So_dhdx = - 1, & + index_So_dhdy = - 1, & + index_So_t = - 1, & + index_So_s = - 1, & + index_So_bldepth = - 1, & + index_So_dms = - 1, & + index_So_brf = - 1, & + index_Fioo_q = - 1, & + index_Faoo_fco2_ocn = - 1 + + + ! Set logicals for CPP variables +#ifdef BROMO + logical :: use_bromo = .true. +#else + logical :: use_bromo = .false. +#endif +#ifdef PROGCO2 + logical :: progco2 = .true. +#else + logical :: progco2 = .false. +#endif +#ifdef DIAGCO2 + logical :: diagco2 = .true. +#else + logical :: diagco2 = .false. +#endif + contains ! --------------------------------------------------------------------------- ! Private procedures. ! --------------------------------------------------------------------------- - subroutine getfldindex(fldlist_num, fldlist, stdname, fldindex) + subroutine fldlist_add(num, fldlist, stdname, index, ungridded_lbound, ungridded_ubound) ! --------------------------------------------------------------------------- - ! Get index of field with given standard name. If no field has a matching - ! name or a field with matching name has an unassociated data pointer, set - ! index to zero. + ! Add to list of field information. ! --------------------------------------------------------------------------- ! Input/output arguments. - integer, intent(in) :: fldlist_num - type(fldlist_type), dimension(:), intent(in) :: fldlist - character(len=*), intent(in) :: stdname - integer, intent(inout) :: fldindex + integer , intent(inout) :: num + type(fldlist_type), intent(inout) :: fldlist(:) + character(len=*) , intent(in) :: stdname + integer , intent(out) :: index + integer, optional , intent(in) :: ungridded_lbound, ungridded_ubound - ! Local variables. - integer :: n + ! Local parameters. + character(len=*), parameter :: & + subname = modname//':(fldlist_add)' - if (fldindex >= 0) return + ! Local variables. + integer :: rc + +#ifdef HAMOCC + ! Setting the logical flag do_bgc_aofluxes will change the default value of + ! false in mo_control_bgc and will result in then + ! dms and bromo fluxes to be computed in the mediator and used in BLOM + ! For now this flag will be hard-wired to .true. to permit bit-for-bit + ! results. Moving forwards this flag will be moved into a namelist. + do_bgc_aofluxes = .true. +#endif + + num = num + 1 + if (num > fldsMax) then + write(lp,'(a,3i6,2(f21.13,3x),d21.5)') subname// & + ': BLOM ERROR: number of fields exceeds fldsMax for '//trim(stdname) + call xchalt(subname) + stop subname + endif + fldlist(num)%stdname = trim(stdname) - fldindex = 0 + index = num - do n = 1, fldlist_num - if (fldlist(n)%stdname == stdname) then - if (associated(fldlist(n)%dataptr)) fldindex = n - return - endif - enddo + if (present(ungridded_lbound) .and. present(ungridded_ubound)) then + fldlist(num)%ungridded_lbound = ungridded_lbound + fldlist(num)%ungridded_ubound = ungridded_ubound + endif - end subroutine getfldindex + end subroutine fldlist_add ! --------------------------------------------------------------------------- ! Public procedures. ! --------------------------------------------------------------------------- + subroutine blom_advertise_imports(flds_scalar_name, fldsToOcn_num, fldsToOcn, & + flds_co2a, flds_co2c) + + ! ------------------------------------------------------------------- + ! Determine fldsToOcn for import fields + ! ------------------------------------------------------------------- + + character(len=*) , intent(in) :: flds_scalar_name + integer , intent(inout) :: fldsToOcn_num + type(fldlist_type) , intent(inout), dimension(:) :: fldsToOcn + logical , intent(in) :: flds_co2a + logical , intent(in) :: flds_co2c + + integer :: index_scalar + + call fldlist_add(fldsToOcn_num, fldsToOcn, trim(flds_scalar_name), index_scalar) + + ! From ice: + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Si_ifrac' , index_Si_ifrac ) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_melth' , index_Fioi_melth) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_meltw' , index_Fioi_meltw) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_salt' , index_Fioi_salt) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_bcpho' , index_Fioi_bcpho) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_bcphi' , index_Fioi_bcphi) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_flxdst', index_Fioi_flxdst) + + ! From river: + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_rofl', index_Foxx_rofl) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_rofi', index_Foxx_rofi) + + ! From fields computed mediator: + call fldlist_add(fldsToOcn_num, fldsToOcn, 'So_duu10n' , index_So_duu10n) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_tauy' , index_Foxx_tauy) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_taux' , index_Foxx_taux) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_lat' , index_Foxx_lat) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_sen' , index_Foxx_sen) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_lwup' , index_Foxx_lwup) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_evap' , index_Foxx_evap) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_swnet' , index_Foxx_swnet) +#ifdef HAMOCC + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faox_dms', index_Faox_dms) + if (use_bromo) then + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faox_brf', index_Faox_brf) + end if +#endif + + ! From wave: + if (wavsrc_opt == wavsrc_extern) then + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_lamult' , index_Sw_lamult) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_ustokes' , index_Sw_ustokes) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_vstokes' , index_Sw_vstokes) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_hstokes' , index_Sw_hstokes) + end if + + ! From atmosphere: + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_pslv' , index_Sa_pslv ) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_lwdn' , index_Faxa_lwdn) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_snow' , index_Faxa_snow) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_rain' , index_Faxa_rain) + + ! From atm co2 fields: + if (flds_co2a .or. flds_co2c) then + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_co2diag' ,index_Sa_co2diag) + call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_co2prog', index_Sa_co2prog) + endif + + end subroutine blom_advertise_imports + + subroutine blom_advertise_exports(flds_scalar_name, fldsFrOcn_num, fldsFrOcn) + + ! ------------------------------------------------------------------- + ! Determine fldsToOcn for export fields + ! ------------------------------------------------------------------- + + character(len=*) , intent(in) :: flds_scalar_name + integer , intent(inout) :: fldsFrOcn_num + type(fldlist_type), dimension(:) , intent(inout) :: fldsFrOcn + + integer :: index_scalar + + call fldlist_add(fldsFrOcn_num, fldsFrOcn, trim(flds_scalar_name), index_scalar) + + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_omask' , index_So_omask) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_t' , index_So_t) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_u' , index_So_u) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_v' , index_So_v) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_s' , index_So_s) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_dhdx' , index_So_dhdx) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_dhdy' , index_So_dhdy) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_bldepth' , index_So_bldepth) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'Fioo_q' , index_Fioo_q) + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'Faoo_fco2_ocn' , index_Faoo_fco2_ocn) +#ifdef HAMOCC + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_dms', index_So_dms) + if (use_bromo) then + call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_brf', index_So_brf) + end if +#endif + end subroutine blom_advertise_exports + subroutine blom_logwrite(msg) ! --------------------------------------------------------------------------- ! Write message string to standard out from master PE. @@ -315,6 +502,7 @@ subroutine blom_accflds ! Local variables. real(r8) :: q integer m, n, mm, nn, k1m, k1n, i, j, l + logical :: first_call = .true. ! ------------------------------------------------------------------------ ! Set accumulation arrays to zero if this is the first call after a @@ -347,7 +535,7 @@ subroutine blom_accflds k1n = 1 + nn call xctilr(sealv, 1,1, 1,1, halo_ps) - + !$omp parallel do private(l, i) do j = 1, jj do l = 1, isu(j) @@ -403,13 +591,13 @@ subroutine blom_accflds enddo !$omp end parallel do case default - if (mnproc == 1) & + if (mnproc == 1.and. first_call) & write(lp,*) subname//': unsupported vertical coordinate!' call xcstop(subname) stop subname end select - if (fco2_requested) then + if (index_Faoo_fco2_ocn > 0) then !$omp parallel do private(l, i) do j = 1, jj do l = 1, isp(j) @@ -421,36 +609,16 @@ subroutine blom_accflds !$omp end parallel do endif - if (fdms_requested) then - !$omp parallel do private(l, i) - do j = 1, jj - do l = 1, isp(j) - do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) - acc_fdms(i,j) = acc_fdms(i,j) + flxdms(i,j)*baclin - enddo - enddo - enddo - !$omp end parallel do - endif - - if (fbrf_requested) then - !$omp parallel do private(l, i) - do j = 1, jj - do l = 1, isp(j) - do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) - acc_fbrf(i,j) = acc_fbrf(i,j) + flxbrf(i,j)*baclin - enddo - enddo - enddo - !$omp end parallel do - endif - ! ------------------------------------------------------------------------ ! Increment time since last coupling. ! ------------------------------------------------------------------------ tlast_coupled = tlast_coupled + baclin + if (first_call) then + first_call = .false. + end if + end subroutine blom_accflds subroutine blom_importflds(fldlist_num, fldlist) @@ -468,39 +636,12 @@ subroutine blom_importflds(fldlist_num, fldlist) real(r8), parameter :: & mval = - 1.e12_r8, & fval = - 1.e13_r8 + logical :: first_call = .true. ! Local variables. real(r8) :: afac, utmp, vtmp integer :: n, i, j, l - integer, save :: & - index_Si_ifrac = - 1, & - index_Fioi_melth = - 1, & - index_Fioi_meltw = - 1, & - index_Fioi_salt = - 1, & - index_Fioi_bcpho = - 1, & - index_Fioi_bcphi = - 1, & - index_Fioi_flxdst = - 1, & - index_Foxx_rofl = - 1, & - index_Foxx_rofi = - 1, & - index_So_duu10n = - 1, & - index_Foxx_tauy = - 1, & - index_Foxx_taux = - 1, & - index_Foxx_lat = - 1, & - index_Foxx_sen = - 1, & - index_Foxx_lwup = - 1, & - index_Foxx_evap = - 1, & - index_Foxx_swnet = - 1, & - index_Sw_lamult = - 1, & - index_Sw_ustokes = - 1, & - index_Sw_vstokes = - 1, & - index_Sw_hstokes = - 1, & - index_Faxa_lwdn = - 1, & - index_Faxa_snow = - 1, & - index_Faxa_rain = - 1, & - index_Sa_pslv = - 1, & - index_Sa_co2diag = - 1, & - index_Sa_co2prog = - 1, & - index_Sa_brfprog = - 1 + integer :: index_co2 ! Update time level indices. if (l1ci == 1 .and. l2ci == 1) then @@ -511,9 +652,6 @@ subroutine blom_importflds(fldlist_num, fldlist) l2ci = 3 - l2ci endif - call getfldindex(fldlist_num, fldlist, 'Foxx_taux', index_Foxx_taux) - call getfldindex(fldlist_num, fldlist, 'Foxx_tauy', index_Foxx_tauy) - !$omp parallel do private(i, n, afac, utmp, vtmp) do j = 1, jjcpl do i = 1, ii @@ -566,23 +704,6 @@ subroutine blom_importflds(fldlist_num, fldlist) enddo !$omp end parallel do - call getfldindex(fldlist_num, fldlist, 'Faxa_rain', index_Faxa_rain) - call getfldindex(fldlist_num, fldlist, 'Faxa_snow', index_Faxa_snow) - call getfldindex(fldlist_num, fldlist, 'Foxx_evap', index_Foxx_evap) - call getfldindex(fldlist_num, fldlist, 'Foxx_rofl', index_Foxx_rofl) - call getfldindex(fldlist_num, fldlist, 'Foxx_rofi', index_Foxx_rofi) - call getfldindex(fldlist_num, fldlist, 'Fioi_meltw', index_Fioi_meltw) - call getfldindex(fldlist_num, fldlist, 'Fioi_salt', index_Fioi_salt) - call getfldindex(fldlist_num, fldlist, 'Foxx_swnet', index_Foxx_swnet) - call getfldindex(fldlist_num, fldlist, 'Foxx_lat', index_Foxx_lat) - call getfldindex(fldlist_num, fldlist, 'Foxx_sen', index_Foxx_sen) - call getfldindex(fldlist_num, fldlist, 'Foxx_lwup', index_Foxx_lwup) - call getfldindex(fldlist_num, fldlist, 'Faxa_lwdn', index_Faxa_lwdn) - call getfldindex(fldlist_num, fldlist, 'Fioi_melth', index_Fioi_melth) - call getfldindex(fldlist_num, fldlist, 'Sa_pslv', index_Sa_pslv) - call getfldindex(fldlist_num, fldlist, 'So_duu10n', index_So_duu10n) - call getfldindex(fldlist_num, fldlist, 'Si_ifrac', index_Si_ifrac) - !$omp parallel do private(i, n, afac) do j = 1, jjcpl do i = 1, ii @@ -689,12 +810,6 @@ subroutine blom_importflds(fldlist_num, fldlist) call fill_global(mval, fval, halo_ps, ficem_da(1-nbdy,1-nbdy,l2ci)) if (wavsrc_opt == wavsrc_extern) then - - call getfldindex(fldlist_num, fldlist, 'Sw_lamult', index_Sw_lamult) - call getfldindex(fldlist_num, fldlist, 'Sw_ustokes', index_Sw_ustokes) - call getfldindex(fldlist_num, fldlist, 'Sw_vstokes', index_Sw_vstokes) - call getfldindex(fldlist_num, fldlist, 'Sw_hstokes', index_Sw_hstokes) - !$omp parallel do private(i, n, utmp, vtmp) do j = 1, jjcpl do i = 1, ii @@ -710,93 +825,62 @@ subroutine blom_importflds(fldlist_num, fldlist) lasl_da(i,j,l2ci) = fval else n = (j - 1)*ii + i - + utmp = fldlist(index_Sw_ustokes)%dataptr(n) vtmp = fldlist(index_Sw_vstokes)%dataptr(n) util1(i,j) = utmp*cosang(i,j) + vtmp*sinang(i,j) util2(i,j) = - utmp*sinang(i,j) + vtmp*cosang(i,j) - + ! Langmuir enhancement factor []. lamult_da(i,j,l2ci) = fldlist(index_Sw_lamult)%dataptr(n) - + ! Surface layer averaged Langmuir number []. lasl_da(i,j,l2ci) = fldlist(index_Sw_hstokes)%dataptr(n) - + endif enddo enddo - !$omp end parallel do + !$omp end parallel do call fill_global(mval, fval, halo_pv, util1) call fill_global(mval, fval, halo_pv, util2) call fill_global(mval, fval, halo_ps, lamult_da(1-nbdy,1-nbdy,l2ci)) call fill_global(mval, fval, halo_ps, lasl_da(1-nbdy,1-nbdy,l2ci)) - + call xctilr(util1, 1,1, 1,1, halo_pv) call xctilr(util2, 1,1, 1,1, halo_pv) - !$omp parallel do private(l, i) + !$omp parallel do private(l, i) do j = 1, jj do l = 1, isu(j) - do i = max(1,ifu(j,l)), min(ii,ilu(j,l)) - ! x-component of surface Stokes drift [m s-1]. - ustokes_da(i,j,l2ci) = .5_r8*(util1(i-1,j) + util1(i,j)) - enddo + do i = max(1,ifu(j,l)), min(ii,ilu(j,l)) + ! x-component of surface Stokes drift [m s-1]. + ustokes_da(i,j,l2ci) = .5_r8*(util1(i-1,j) + util1(i,j)) + enddo enddo do l = 1,isv(j) - do i = max(1,ifv(j,l)), min(ii,ilv(j,l)) - ! y-component of surface Stokes drift [m s-1]. - vstokes_da(i,j,l2ci) = .5_r8*(util2(i,j-1) + util2(i,j)) - enddo + do i = max(1,ifv(j,l)), min(ii,ilv(j,l)) + ! y-component of surface Stokes drift [m s-1]. + vstokes_da(i,j,l2ci) = .5_r8*(util2(i,j-1) + util2(i,j)) + enddo enddo enddo - !$omp end parallel do + !$omp end parallel do - endif + end if -#ifdef PROGCO2 - call getfldindex(fldlist_num, fldlist, 'Sa_co2prog', index_Sa_co2prog) + ! CO2 flux - if (index_Sa_co2prog > 0) then - !$omp parallel do private(i, n) - do j = 1, jjcpl - do i = 1, ii - if (ip(i,j) == 0) then - atmco2_da(i,j,l2ci) = mval - elseif (cplmsk(i,j) == 0) then - atmco2_da(i,j,l2ci) = fval - else - n = (j - 1)*ii + i - ! Atmospheric co2 concentration [ppmv?] - atmco2_da(i,j,l2ci) = fldlist(index_Sa_co2prog)%dataptr(n) - endif - enddo - enddo - !$omp end parallel do - call fill_global(mval, fval, halo_ps, atmco2_da(1-nbdy,1-nbdy,l2ci)) - if (mnproc == 1) & - write(lp,*) subname//': prog. atmospheric co2 read' + if (diagco2 .and. index_Sa_co2diag > 0) then + index_co2 = index_Sa_co2diag + else if (progco2 .and. index_Sa_co2prog > 0) then + index_co2 = index_Sa_co2prog else - !$omp parallel do private(i) - do j = 1, jj - do i = 1, ii - if (ip(i,j) == 0) then - atmco2_da(i,j,l2ci) = mval - else - atmco2_da(i,j,l2ci) = -1 - endif - enddo - enddo - !$omp end parallel do - if (mnproc == 1) & - write(lp,*) subname//': prog. atmospheric co2 not read' - endif - -#elif defined(DIAGCO2) - call getfldindex(fldlist_num, fldlist, 'Sa_co2diag', index_Sa_co2diag) + index_co2 = -1 + end if - if (index_Sa_co2diag > 0) then - !$omp parallel do private(i, n) + if (index_co2 > 0) then + !$omp parallel do private(i, n) do j = 1, jjcpl do i = 1, ii if (ip(i,j) == 0) then @@ -806,16 +890,17 @@ subroutine blom_importflds(fldlist_num, fldlist) else n = (j - 1)*ii + i ! Atmospheric co2 concentration [ppmv?] - atmco2_da(i,j,l2ci) = fldlist(index_Sa_co2diag)%dataptr(n) + atmco2_da(i,j,l2ci) = fldlist(index_co2)%dataptr(n) endif enddo enddo - !$omp end parallel do + !$omp end parallel do call fill_global(mval, fval, halo_ps, atmco2_da(1-nbdy,1-nbdy,l2ci)) - if (mnproc == 1) & - write(lp,*) subname//': diag. atmospheric co2 read' + if (mnproc == 1 .and. first_call) then + write(lp,*) subname//': atmospheric co2 obtained from mediator' + end if else - !$omp parallel do private(i) + !$omp parallel do private(i) do j = 1, jj do i = 1, ii if (ip(i,j) == 0) then @@ -825,65 +910,66 @@ subroutine blom_importflds(fldlist_num, fldlist) endif enddo enddo - !$omp end parallel do - if (mnproc == 1) & - write(lp,*) subname//': diag. atmospheric co2 not read' - endif -#else - !$omp parallel do private(i) - do j = 1, jj - do i = 1, ii - if (ip(i,j) == 0) then - atmco2_da(i,j,l2ci) = mval - else - atmco2_da(i,j,l2ci) = -1 - endif - enddo - enddo - !$omp end parallel do - if (mnproc == 1) & - write(lp,*) subname//': atmospheric co2 not read' -#endif + !$omp end parallel do + if (mnproc == 1 .and. first_call) then + write(lp,*) subname//': atmospheric co2 not obtained from mediator' + endif + end if - call getfldindex(fldlist_num, fldlist, 'Sa_brfprog', index_Sa_brfprog) + ! DMS flux - if (index_Sa_brfprog > 0) then - !$omp parallel do private(i, n) - do j = 1, jjcpl - do i = 1, ii - if (ip(i,j) == 0) then - atmbrf_da(i,j,l2ci) = mval - elseif (cplmsk(i,j) == 0) then - atmbrf_da(i,j,l2ci) = fval - else + if (index_Faox_dms > 0) then + if (associated(fldlist(index_Faox_dms)%dataptr)) then + !$omp parallel do private(i, n, afac) + do j = 1, jjcpl + do i = 1, ii n = (j - 1)*ii + i - ! Atmospheric bromoform concentration [ppt] - atmbrf_da(i,j,l2ci) = fldlist(index_Sa_brfprog)%dataptr(n) - endif - enddo - enddo - !$omp end parallel do - call fill_global(mval, fval, halo_ps, atmbrf_da(1-nbdy,1-nbdy,l2ci)) - if (mnproc == 1) & - write(lp,*) subname//': prog. atmospheric bromoform read' - else - !$omp parallel do private(i) - do j = 1, jj - do i = 1, ii - if (ip(i,j) == 0) then - atmbrf_da(i,j,l2ci) = mval - else - atmbrf_da(i,j,l2ci) = -1 - endif - enddo - enddo - !$omp end parallel do - if (mnproc == 1) & - write(lp,*) subname//': prog. atmospheric bromoform not read' - endif + afac = med2mod_areacor(n) + if (ip(i,j) == 0) then + flxdms_da(i,j,l2ci) = mval + elseif (cplmsk(i,j) == 0) then + flxdms_da(i,j,l2ci) = 0._r8 + else + flxdms_da(i,j,l2ci) = fldlist(index_Faox_dms)%dataptr(n)*afac/62.13 + end if + end do + end do + !$omp end parallel do + if (mnproc == 1 .and. first_call) & + write(lp,*) subname//': prog. dms flux obtained from mediator' + end if + if (nreg == 2) then + call xctilr(flxdms_da(1-nbdy,1-nbdy,l2ci), 1,1, 0,0, halo_ps) + end if + end if + + if (index_Faox_brf > 0) then + if (associated(fldlist(index_Faox_brf)%dataptr)) then + !$omp parallel do private(i, n, afac) + do j = 1, jjcpl + do i = 1, ii + n = (j - 1)*ii + i + afac = med2mod_areacor(n) + if (ip(i,j) == 0) then + flxbrf_da(i,j,l2ci) = mval + elseif (cplmsk(i,j) == 0) then + flxbrf_da(i,j,l2ci) = 0._r8 + else + flxbrf_da(i,j,l2ci) = fldlist(index_Faox_brf)%dataptr(n)*afac/252.7 + end if + end do + end do + !$omp end parallel do + if (mnproc == 1 .and. first_call) & + write(lp,*) subname//': prog. brf flux obtained from mediator' + end if + if (nreg == 2) then + call xctilr(flxbrf_da(1-nbdy,1-nbdy,l2ci), 1,1, 0,0, halo_ps) + end if + end if if (csdiag) then - if (mnproc == 1) then + if (mnproc == 1 .and. first_call) then write(lp,*) subname//':' endif call chksummsk(ustarw_da(1-nbdy,1-nbdy,l2ci),ip,1,'ustarw') @@ -904,8 +990,15 @@ subroutine blom_importflds(fldlist_num, fldlist) call chksummsk(ficem_da(1-nbdy,1-nbdy,l2ci),ip,1,'ficem') call chksummsk(atmco2_da(1-nbdy,1-nbdy,l2ci),ip,1,'atmco2') call chksummsk(atmbrf_da(1-nbdy,1-nbdy,l2ci),ip,1,'atmbrf') + if (index_Faox_dms > 0) then + call chksummsk(flxdms_da(1-nbdy,1-nbdy,l2ci),ip,1,'flxdms_da') + end if endif + if (first_call) then + first_call = .false. + end if + end subroutine blom_importflds subroutine blom_exportflds(fldlist_num, fldlist) @@ -924,19 +1017,7 @@ subroutine blom_exportflds(fldlist_num, fldlist) ! Local variables. real(r8) :: tfac, utmp, vtmp integer :: n, l, i, j - integer, save :: & - index_So_omask = - 1, & - index_So_u = - 1, & - index_So_v = - 1, & - index_So_dhdx = - 1, & - index_So_dhdy = - 1, & - index_So_t = - 1, & - index_So_s = - 1, & - index_So_bldepth = - 1, & - index_Fioo_q = - 1, & - index_Faoo_fdms_ocn = - 1, & - index_Faoo_fco2_ocn = - 1, & - index_Faoo_fbrf_ocn = - 1 + logical, save :: first_call = .true. tfac = 1._r8/tlast_coupled @@ -949,16 +1030,6 @@ subroutine blom_exportflds(fldlist_num, fldlist) call xctilr(acc_dhdx, 1,1, 1,1, halo_uv) call xctilr(acc_dhdy, 1,1, 1,1, halo_vv) - call getfldindex(fldlist_num, fldlist, 'So_omask', index_So_omask) - call getfldindex(fldlist_num, fldlist, 'So_u', index_So_u) - call getfldindex(fldlist_num, fldlist, 'So_v', index_So_v) - call getfldindex(fldlist_num, fldlist, 'So_dhdx', index_So_dhdx) - call getfldindex(fldlist_num, fldlist, 'So_dhdy', index_So_dhdy) - call getfldindex(fldlist_num, fldlist, 'So_t', index_So_t) - call getfldindex(fldlist_num, fldlist, 'So_s', index_So_s) - call getfldindex(fldlist_num, fldlist, 'So_bldepth', index_So_bldepth) - call getfldindex(fldlist_num, fldlist, 'Fioo_q', index_Fioo_q) - fldlist(index_So_omask)%dataptr(:) = 0._r8 fldlist(index_So_u)%dataptr(:) = 0._r8 fldlist(index_So_v)%dataptr(:) = 0._r8 @@ -1021,80 +1092,69 @@ subroutine blom_exportflds(fldlist_num, fldlist) enddo !$omp end parallel do - ! ------------------------------------------------------------------------ - ! Provide DMS flux [kmol DMS m-2 s-1], if requested. - ! ------------------------------------------------------------------------ - - call getfldindex(fldlist_num, fldlist, 'Faoo_fdms_ocn', & - index_Faoo_fdms_ocn) - - if (fbrf_requested .and. index_Faoo_fdms_ocn > 0) then - fldlist(index_Faoo_fdms_ocn)%dataptr(:) = 0._r8 - !$omp parallel do private(l, i, n) - do j = 1, jjcpl - do l = 1, isp(j) - do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) - n = (j - 1)*ii + i - fldlist(index_Faoo_fdms_ocn)%dataptr(n) = & - acc_fbrf(i,j)*tfac*mod2med_areacor(n) +#ifdef HAMOCC + if (index_So_dms > 0) then + if (associated(fldlist(index_So_dms)%dataptr)) then + fldlist(index_So_dms)%dataptr(:) = 0._r8 + !$omp parallel do private(l, i, n) + do j = 1, jjcpl + do l = 1, isp(j) + do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) + n = (j - 1)*ii + i + fldlist(index_So_dms)%dataptr(n) = ocetra(i,j,1,idms) + enddo + enddo enddo + !$omp end parallel do + end if + end if + + if (index_So_brf > 0) then + if (associated(fldlist(index_So_brf)%dataptr)) then + fldlist(index_So_brf)%dataptr(:) = 0._r8 + !$omp parallel do private(l, i, n) + do j = 1, jjcpl + do l = 1, isp(j) + do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) + n = (j - 1)*ii + i + fldlist(index_So_brf)%dataptr(n) = ocetra(i,j,1,ibromo) + enddo + enddo enddo - enddo - !$omp end parallel do - else - if (mnproc == 1) & - write(lp,*) subname//': dms flux not sent to coupler' - endif + !$omp end parallel do + end if + end if +#endif ! ------------------------------------------------------------------------ ! Provide CO2 flux [kg CO2 m-2 s-1], if requested. ! ------------------------------------------------------------------------ - call getfldindex(fldlist_num, fldlist, 'Faoo_fco2_ocn', & - index_Faoo_fco2_ocn) - - if (fco2_requested .and. index_Faoo_fco2_ocn > 0) then - fldlist(index_Faoo_fco2_ocn)%dataptr(:) = 0._r8 - !$omp parallel do private(l, i, n) - do j = 1, jjcpl - do l = 1, isp(j) - do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) - n = (j - 1)*ii + i - fldlist(index_Faoo_fco2_ocn)%dataptr(n) = & - acc_fco2(i,j)*tfac*mod2med_areacor(n) - enddo + if (index_Faoo_fco2_ocn > 0) then + if (associated(fldlist(index_Faoo_fco2_ocn)%dataptr)) then + fldlist(index_Faoo_fco2_ocn)%dataptr(:) = 0._r8 + !$omp parallel do private(l, i, n) + do j = 1, jjcpl + do l = 1, isp(j) + do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) + n = (j - 1)*ii + i + fldlist(index_Faoo_fco2_ocn)%dataptr(n) = & + acc_fco2(i,j)*tfac*mod2med_areacor(n) + enddo + enddo enddo - enddo - !$omp end parallel do - else - if (mnproc == 1) & - write(lp,*) subname//': co2 flux not sent to coupler' - endif - - ! ------------------------------------------------------------------------ - ! Provide bromoform flux [kg CHBr3 m-2 s-1], if requested. - ! ------------------------------------------------------------------------ - - call getfldindex(fldlist_num, fldlist, 'Faoo_fbrf_ocn', & - index_Faoo_fbrf_ocn) + !$omp end parallel do + else + if (first_call) then + if (mnproc == 1 .and. first_call) & + write(lp,*) subname//': co2 flux not sent to coupler' + end if + endif + end if - if (fbrf_requested .and. index_Faoo_fbrf_ocn > 0) then - fldlist(index_Faoo_fbrf_ocn)%dataptr(:) = 0._r8 - !$omp parallel do private(l, i, n) - do j = 1, jjcpl - do l = 1, isp(j) - do i = max(1, ifp(j,l)), min(ii, ilp(j,l)) - n = (j - 1)*ii + i - fldlist(index_Faoo_fbrf_ocn)%dataptr(n) = & - acc_fbrf(i,j)*tfac*mod2med_areacor(n) - enddo - enddo - enddo - !$omp end parallel do - else - if (mnproc == 1) & - write(lp,*) subname//': bromoform flux not sent to coupler' - endif + if (first_call) then + first_call = .false. + end if tlast_coupled = 0._r8 diff --git a/drivers/nuopc/ocn_comp_nuopc.F90 b/drivers/nuopc/ocn_comp_nuopc.F90 index 086501e5..d7b44e3b 100644 --- a/drivers/nuopc/ocn_comp_nuopc.F90 +++ b/drivers/nuopc/ocn_comp_nuopc.F90 @@ -41,12 +41,12 @@ module ocn_comp_nuopc use shr_file_mod, only: shr_file_getUnit, shr_file_getLogUnit, & shr_file_setLogUnit use shr_cal_mod, only : shr_cal_ymd2date - use mod_nuopc_methods, only: fldlist_type, tlast_coupled, fco2_requested, & - fdms_requested, fbrf_requested, & + use mod_nuopc_methods, only: fldlist_type, fldsMax, tlast_coupled, & blom_logwrite, blom_getgindex, blom_checkmesh, & blom_setareacor, blom_getglobdim, & blom_getprecipfact, blom_accflds, & - blom_importflds, blom_exportflds + blom_importflds, blom_exportflds, & + blom_advertise_imports, blom_advertise_exports use mod_xc, only: mpicom_external, lp, nfu use mod_cesm, only: runid_cesm, runtyp_cesm, ocn_cpl_dt_cesm use mod_config, only: inst_index, inst_name, inst_suffix @@ -62,7 +62,6 @@ module ocn_comp_nuopc character(len=*), parameter :: u_FILE_u = & __FILE__ - integer, parameter :: fldsMax = 100 integer :: fldsToOcn_num = 0 integer :: fldsFrOcn_num = 0 type(fldlist_type) :: fldsToOcn(fldsMax) @@ -74,8 +73,7 @@ module ocn_comp_nuopc integer :: flds_scalar_index_ny = 0 integer :: flds_scalar_index_precip_factor = 0 - logical :: ldriver_has_atm_co2_diag, ldriver_has_atm_co2_prog, & - ocn2glc_coupling + logical :: ocn2glc_coupling, flds_dms_med integer :: dbug = 0 logical :: profile_memory = .false. @@ -88,42 +86,6 @@ module ocn_comp_nuopc ! Private procedures. ! --------------------------------------------------------------------------- - subroutine fldlist_add(num, fldlist, stdname, & - ungridded_lbound, ungridded_ubound) - ! --------------------------------------------------------------------------- - ! Add to list of field information. - ! --------------------------------------------------------------------------- - - ! Input/output arguments. - integer , intent(inout) :: num - type(fldlist_type), intent(inout) :: fldlist(:) - character(len=*) , intent(in) :: stdname - integer, optional , intent(in) :: ungridded_lbound, ungridded_ubound - - ! Local parameters. - character(len=*), parameter :: & - subname = modname//':(fldlist_add)' - - ! Local variables. - integer :: rc - - num = num + 1 - if (num > fldsMax) then - call ESMF_LogSetError(ESMF_RC_VAL_OUTOFRANGE, & - msg=subname//": ERROR number of field exceeded fldsMax: "// & - trim(stdname), & - line=__LINE__, file=__FILE__, rcToReturn=rc) - return - endif - fldlist(num)%stdname = trim(stdname) - - if (present(ungridded_lbound) .and. present(ungridded_ubound)) then - fldlist(num)%ungridded_lbound = ungridded_lbound - fldlist(num)%ungridded_ubound = ungridded_ubound - endif - - end subroutine fldlist_add - subroutine fldlist_realize(state, fldlist_num, fldlist, tag, mesh, rc) ! --------------------------------------------------------------------------- ! Realize list of import or export fields. @@ -387,7 +349,8 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) integer :: localPet, nthrds, shrlogunit, n character(len=cslen) :: starttype, stdname, cvalue, cname character(len=cllen) :: msg - logical :: isPresent, isSet, flds_co2a, flds_co2b, flds_co2c + logical :: isPresent, isSet + logical :: flds_co2a, flds_co2c ! Get debug flag. call NUOPC_CompAttributeGet(gcomp, name='dbug_flag', value=cvalue, & @@ -521,94 +484,25 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) trim(cvalue), ESMF_LOGMSG_INFO) endif - ! ------------------------------------------------------------------------ - ! Advertise import fields. - ! ------------------------------------------------------------------------ - - call fldlist_add(fldsToOcn_num, fldsToOcn, trim(flds_scalar_name)) - - ! From ice: - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Si_ifrac') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_melth') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_meltw') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_salt') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_bcpho') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_bcphi') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Fioi_flxdst') - - ! From river: - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_rofl') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_rofi') - - ! From mediator: - call fldlist_add(fldsToOcn_num, fldsToOcn, 'So_duu10n') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_tauy') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_taux') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_lat') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_sen') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_lwup') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_evap') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Foxx_swnet') - - ! From wave: - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_lamult') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_ustokes') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_vstokes') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sw_hstokes') - - ! From atmosphere: - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_pslv') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_lwdn') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_snow') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Faxa_rain') - - ! From atm co2 fields: - + ! Determine if co2 will be imported from mediator call NUOPC_CompAttributeGet(gcomp, name='flds_co2a', value=cvalue, rc=rc) if (ChkErr(rc, __LINE__, u_FILE_u)) return read(cvalue,*) flds_co2a call blom_logwrite(subname//': flds_co2a = '//trim(cvalue)) - call NUOPC_CompAttributeGet(gcomp, name='flds_co2b', value=cvalue, rc=rc) - if (ChkErr(rc, __LINE__, u_FILE_u)) return - read(cvalue,*) flds_co2b - call blom_logwrite(subname//': flds_co2b = '//trim(cvalue)) - call NUOPC_CompAttributeGet(gcomp, name='flds_co2c', value=cvalue, rc=rc) if (ChkErr(rc, __LINE__, u_FILE_u)) return read(cvalue,*) flds_co2c call blom_logwrite(subname//': flds_co2c = '//trim(cvalue)) - if (flds_co2a .or. flds_co2c) then - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_co2diag') - call fldlist_add(fldsToOcn_num, fldsToOcn, 'Sa_co2prog') - ldriver_has_atm_co2_prog = .true. - ldriver_has_atm_co2_diag = .true. - else - ldriver_has_atm_co2_prog = .false. - ldriver_has_atm_co2_diag = .false. - endif - - !TODO Determine if will get nitrogen deposition from atm - - do n = 1,fldsToOcn_num - call NUOPC_Advertise(importState, standardName=fldsToOcn(n)%stdname, & - TransferOfferGeomObject='will provide', rc=rc) - if (ChkErr(rc, __LINE__, u_FILE_u)) return - enddo - - ! ------------------------------------------------------------------------ - ! Advertise export fields. - ! ------------------------------------------------------------------------ - ! Determine if ocn is sending temperature and salinity data to glc + ! If data is sent to glc will need to determine number of ocean + ! levels and ocean level indices call NUOPC_CompAttributeGet(gcomp, name="ocn2glc_coupling", value=cvalue, rc=rc) if (ChkErr(rc, __LINE__, u_FILE_u)) return read(cvalue,*) ocn2glc_coupling write(msg,'(a,l1)') subname//': ocn2glc coupling is ', ocn2glc_coupling call blom_logwrite(msg) - - ! Determine number of ocean levels and ocean level indices if (ocn2glc_coupling) then call ESMF_LogSetError(ESMF_RC_NOT_IMPL, & msg=subname//": ocn2glc coupling not implemented", & @@ -616,17 +510,26 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) return endif - call fldlist_add(fldsFrOcn_num, fldsFrOcn, trim(flds_scalar_name)) - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_omask') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_t') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_u') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_v') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_s') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_dhdx') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_dhdy') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'So_bldepth') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'Fioo_q') - call fldlist_add(fldsFrOcn_num, fldsFrOcn, 'Faoo_fco2_ocn') + !NOTE: Nitrogen deposition is always sent from atm now (either CAM or DATM) + + ! ------------------------------------------------------------------------ + ! Advertise import fields. + ! ------------------------------------------------------------------------ + + call blom_advertise_imports(flds_scalar_name, fldsToOcn_num, fldsToOcn, & + flds_co2a, flds_co2c) + + do n = 1,fldsToOcn_num + call NUOPC_Advertise(importState, standardName=fldsToOcn(n)%stdname, & + TransferOfferGeomObject='will provide', rc=rc) + if (ChkErr(rc, __LINE__, u_FILE_u)) return + enddo + + ! ------------------------------------------------------------------------ + ! Advertise export fields. + ! ------------------------------------------------------------------------ + + call blom_advertise_exports(flds_scalar_name, fldsFrOcn_num, fldsFrOcn) do n = 1,fldsFrOcn_num call NUOPC_Advertise(exportState, standardName=fldsFrOcn(n)%stdname, & @@ -786,19 +689,6 @@ subroutine DataInitialize(gcomp, rc) call ESMF_GridCompGet(gcomp, exportState=exportState, rc=rc) if (ChkErr(rc, __LINE__, u_FILE_u)) return - ! ------------------------------------------------------------------------ - ! Check whether non-standard export fields are present. - ! ------------------------------------------------------------------------ - - call ESMF_StateGet(exportState, 'Faoo_fco2_ocn', itemType) - fco2_requested = (itemType /= ESMF_STATEITEM_NOTFOUND) - - call ESMF_StateGet(exportState, 'Faoo_fdms_ocn', itemType) - fdms_requested = (itemType /= ESMF_STATEITEM_NOTFOUND) - - call ESMF_StateGet(exportState, 'Faoo_fbrf_ocn', itemType) - fbrf_requested = (itemType /= ESMF_STATEITEM_NOTFOUND) - ! ------------------------------------------------------------------------ ! TODO ! ------------------------------------------------------------------------ diff --git a/hamocc/carchm.F90 b/hamocc/carchm.F90 index f0563983..6fdcddd3 100644 --- a/hamocc/carchm.F90 +++ b/hamocc/carchm.F90 @@ -20,7 +20,8 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & pdlxp,pdlyp,pddpo,prho,pglat,omask, & - psicomo,ppao,pfu10,ptho,psao) + psicomo,ppao,pfu10,ptho,psao, & + pflxdms,pflxbromo) !****************************************************************************** ! !**** *CARCHM* - . @@ -88,6 +89,8 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & ! *REAL* *pfu10* - forcing field wind speed. ! *REAL* *ptho* - potential temperature. ! *REAL* *psao* - salinity [psu]. +! *REAL* *pflxdms* - input dms flux that is already computed +! *REAL* *pflxbromo* - input bromo flux that is already computed ! ! Externals ! --------- @@ -98,14 +101,12 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & pco2m,kwco2d,co2sold,co2solm use mo_chemcon, only: al1,al2,al3,al4,an0,an1,an2,an3,an4,an5,an6,atn2o,bl1,bl2,bl3,calcon,ox0,ox1,ox2,ox3,ox4,ox5,ox6, & & oxyco,tzero - use mo_control_bgc, only: dtbgc + use mo_control_bgc, only: dtbgc,do_bgc_aofluxes use mo_param1_bgc, only: ialkali,iatmo2,iatmco2,iatmdms,iatmn2,iatmn2o,ian2o,icalc,idicsat,idms,igasnit,ioxygen,iphosph, & & isco212,isilica use mo_vgrid, only: dp_min,kmle,kbo,ptiestu -#ifdef BROMO use mo_param1_bgc, only: iatmbromo,ibromo -#endif #ifdef CFC use mo_carbch, only: atm_cfc11_nh,atm_cfc11_sh,atm_cfc12_nh,atm_cfc12_sh,atm_sf6_nh,atm_sf6_sh use mo_param1_bgc, only: iatmf11,iatmf12,iatmsf6,icfc11,icfc12,isf6 @@ -118,7 +119,6 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & use mo_carbch, only: atm_co2_nat,nathi,natco3,natpco2d,natomegaa,natomegac use mo_param1_bgc, only: iatmnco2,inatalkali,inatcalc,inatsco212 #endif - implicit none INTEGER, intent(in) :: kpie,kpje,kpke,kbnd @@ -133,6 +133,8 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & REAL, intent(in) :: pfu10(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) REAL, intent(in) :: ptho(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd,kpke) REAL, intent(in) :: psao(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd,kpke) + REAL, intent(in) :: pflxdms(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) + REAL, intent(in) :: pflxbromo(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) ! Local variables INTEGER :: i,j,k,l,js @@ -167,9 +169,7 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & REAL :: atco213,atco214,pco213,pco214 REAL :: frac_k,frac_aqg,frac_dicg #endif -#ifdef BROMO REAL :: flx_bromo,sch_bromo,kw_bromo,a_bromo,atbrf,Kb1,lsub -#endif ! set variables for diagnostic output to zero atmflx (:,:,:)=0. @@ -216,9 +216,7 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & !$OMP ,atco213,atco214,rco213,rco214,pco213,pco214,frac_aqg & !$OMP ,frac_dicg,flux13d,flux13u,flux14d,flux14u,dissol13,dissol14 & #endif -#ifdef BROMO !$OMP ,flx_bromo,sch_bromo,kw_bromo,a_bromo,atbrf,Kb1,lsub & -#endif !$OMP ,j,i) DO k=1,kpke DO j=1,kpje @@ -362,7 +360,7 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & ! Stemmler et al. (2015; Biogeosciences) Eq. (8) ! 1.e-2/3600 = conversion from [cm hr-1]/[m s-1]^2 to [ms-1]/[m s-1]^2 kw_bromo=(1.-psicomo(i,j)) * 1.e-2/3600. * & - & (0.222*pfu10(i,j)**2+0.33*pfu10(i,j))*(660./sch_bromo)**0.5 + & (0.222*pfu10(i,j)**2+0.33*pfu10(i,j))*(660./sch_bromo)**0.5 #endif atco2 = atm(i,j,iatmco2) @@ -474,8 +472,15 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & #endif ! Surface flux of dms - dmsflux = kwdms*dtbgc*ocetra(i,j,1,idms) - ocetra(i,j,1,idms)=ocetra(i,j,1,idms)-dmsflux/pddpo(i,j,1) + if (do_bgc_aofluxes) then + ! Note that kwdms already has the open ocean fraction in the term + dmsflux = kwdms*dtbgc*ocetra(i,j,1,idms) + else + dmsflux = -dtbgc*pflxdms(i,j) + end if + ocetra(i,j,1,idms) = ocetra(i,j,1,idms) - dmsflux/pddpo(i,j,1) + atmflx(i,j,iatmdms) = dmsflux ! positive to atmosphere [kmol dms m-2 timestep-1] + #ifdef BROMO ! Quack and Wallace (2003) eq. 1 ! flux = kw*(Cw - Ca/H) ; kw[m s-1]; Cw[kmol m-3]; @@ -483,18 +488,26 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & ! [pptv] to [ppp] by multiplying with 1e-12 (ppp = parts per part, dimensionless) ! [ppp] to [mol L-1] by multiplying with pressure[bar]/(SST[K]*R[L bar K-1 mol-1]); R=0,083 ! [mol L-1] to [kmol m-3] by multiplying with 1 - flx_bromo=kw_bromo*dtbgc* & - & (atbrf/a_bromo*1e-12*ppao(i,j)*1e-5/(tk*0.083) - ocetra(i,j,1,ibromo)) - ocetra(i,j,1,ibromo)=ocetra(i,j,1,ibromo)+flx_bromo/pddpo(i,j,1) -#endif + if (do_bgc_aofluxes) then + flx_bromo = kw_bromo*dtbgc* & + (atbrf/a_bromo*1e-12*ppao(i,j)*1e-5/(tk*0.083) - ocetra(i,j,1,ibromo)) + else + ! Note that the external computation of fluxes is -flx_bromo/dtbgc + ! using above computation of flx_bromo + ! So need to divide by 252.7 and multiply by -dtbgc and in order to use this + ! for the tendency in the tracer update + flx_bromo = dtbgc*pflxbromo(i,j) + end if + ocetra(i,j,1,ibromo) = ocetra(i,j,1,ibromo) + flx_bromo/pddpo(i,j,1) + atmflx(i,j,iatmbromo) = -flx_bromo +#endif ! Save surface fluxes atmflx(i,j,iatmco2)=fluxu-fluxd atmflx(i,j,iatmo2)=oxflux atmflx(i,j,iatmn2)=niflux atmflx(i,j,iatmn2o)=n2oflux - atmflx(i,j,iatmdms)=dmsflux ! positive to atmosphere [kmol dms m-2 timestep-1] #ifdef cisonew atmflx(i,j,iatmc13)=flux13u-flux13d atmflx(i,j,iatmc14)=flux14u-flux14d @@ -507,9 +520,6 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & #ifdef natDIC atmflx(i,j,iatmnco2)=natfluxu-natfluxd #endif -#ifdef BROMO - atmflx(i,j,iatmbromo)=-flx_bromo -#endif ! Save up- and downward components of carbon fluxes for output co2fxd(i,j) = fluxd @@ -536,11 +546,12 @@ SUBROUTINE CARCHM(kpie,kpje,kpke,kbnd, & co2solm(i,j) = Kh ! mol/kg/atm endif ! k==1 + #ifdef BROMO ! Degradation to hydrolysis (Eq. 2-4 of Stemmler et al., 2015) ! A1=1.23e17 mol min-1 => 2.05e12 kmol sec-1 - Kb1=2.05e12*exp(-1.073e5/(8.314*tk))*dtbgc - ocetra(i,j,k,ibromo)=ocetra(i,j,k,ibromo)*(1.-(Kb1*Kw/ah1)) + Kb1=2.05e12*exp(-1.073e5/(8.314*tk))*dtbgc + ocetra(i,j,k,ibromo)=ocetra(i,j,k,ibromo)*(1.-(Kb1*Kw/ah1)) ! Degradation to halogen substitution (Eq. 5-6 of Stemmler et al., 2015) lsub=7.33e-10*exp(1.250713e4*(1/298.-1/tk))*dtbgc ocetra(i,j,k,ibromo)=ocetra(i,j,k,ibromo)*(1.-lsub) diff --git a/hamocc/hamocc4bcm.F90 b/hamocc/hamocc4bcm.F90 index f503b524..19d9fdbc 100644 --- a/hamocc/hamocc4bcm.F90 +++ b/hamocc/hamocc4bcm.F90 @@ -19,7 +19,7 @@ SUBROUTINE HAMOCC4BCM(kpie,kpje,kpke,kbnd,kplyear,kplmon,kplday,kldtday,& pdlxp,pdlyp,pddpo,prho,pglat,omask, & - dust,rivin,ndep,oafx,pi_ph, & + dust,rivin,ndep,oafx,pi_ph, & pfswr,psicomo,ppao,pfu10,ptho,psao, & patmco2,pflxco2,pflxdms,patmbromo,pflxbromo) !****************************************************************************** @@ -125,9 +125,13 @@ SUBROUTINE HAMOCC4BCM(kpie,kpje,kpke,kbnd,kplyear,kplmon,kplday,kldtday,& REAL, intent(in) :: psao (1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd,kpke) REAL, intent(in) :: patmco2(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) REAL, intent(out) :: pflxco2(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) - REAL, intent(out) :: pflxdms(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) - REAL, intent(in) :: patmbromo(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) - REAL, intent(out) :: pflxbromo(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) + REAL, intent(inout) :: pflxdms(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) + REAL, intent(in) :: patmbromo(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) + REAL, intent(inout) :: pflxbromo(1-kbnd:kpie+kbnd,1-kbnd:kpje+kbnd) + + ! NOTE - why are some arguments intent(inout)? + ! If compute_flxdms is .true. then pflxdms will be computed in carchm.F90 + ! If compute_flxdms is .false. then pflxdms is obtained external to blom INTEGER :: i,j,k,l INTEGER :: nspin,it @@ -266,9 +270,9 @@ SUBROUTINE HAMOCC4BCM(kpie,kpje,kpke,kbnd,kplyear,kplmon,kplday,kldtday,& CALL INVENTORY_BGC(kpie,kpje,kpke,pdlxp,pdlyp,pddpo,omask,0) #endif - CALL CARCHM(kpie,kpje,kpke,kbnd,pdlxp,pdlyp,pddpo,prho,pglat,omask, & - psicomo,ppao,pfu10,ptho,psao) + psicomo,ppao,pfu10,ptho,psao,& + pflxdms,pflxbromo) #ifdef PBGC_CK_TIMESTEP IF (mnproc.eq.1) THEN diff --git a/hamocc/mo_control_bgc.F90 b/hamocc/mo_control_bgc.F90 index c7058aa5..f15b6b45 100644 --- a/hamocc/mo_control_bgc.F90 +++ b/hamocc/mo_control_bgc.F90 @@ -66,6 +66,8 @@ MODULE mo_control_bgc LOGICAL, save :: do_oalk =.false. ! apply ocean alkalinization logical, save :: with_dmsph =.false. ! apply DMS with pH dependence + logical, save :: do_bgc_aofluxes = .true. ! If true, atm/ocn bgc fluxes are computed within HAMOCC + contains subroutine get_bgc_namelist