[MITgcm-support] cheapAML+global_ocean.90x40x15 - salty ocean

Bruno Deremble bruno.deremble at ens.fr
Wed Mar 29 10:58:59 EDT 2017


Dear Gus,

You are right, the precip field is really an issue with cheapaml: it is
simply impossible to get a decent parameterization for this field with a
1 layer model.

I think the solution you propose (add an input file for precip) is
probably the best solution if you need a realistic precip field. I'll
come up with a fix as soon as possible. Another option is to relax the
SSS field.

I am surprised that  CH_Prec diagnostic is only non-zero over land; I'll
have to double check that.


bruno



On Friday, Mar 24 2017, 20:11:01, Gus Correa <gus at ldeo.columbia.edu> wrote:
> Hi MITgcm Pros
> (and Prof. Deremble)
>
> This is a follow up of a previous thread on the MITgcm list:
> http://mitgcm.org/pipermail/mitgcm-support/2016-November/010682.html
>
> 1) Progress so far:
>
> I solved ocean instability (NaNs) problem.
> The trick was to use a standard linear free surface,
> by commenting out/removing these parameters in data &PARM01:
> select_rStar=2, nonlinFreeSurf=4, hFacInf=0.2, hFacSup=2.0 
> quasiHydrostatic=.TRUE., useNHMTerms=.TRUE..
> We also fixed the glitches in the cheapAML forcing files
> (several negative q points).
>
> This allowed us to run in spinup mode,
> both in slow synchronous (deltaTtracer==deltaTmom)
> and fast asynchronous (deltaTtracer >> deltaTmom) mode.
> I attach the current "data*" setup files.
>
> **
>
> 2) Current problem: salty ocean surface
>
> HOWEVER, we continue to have trouble with the ocean surface
> salinity, which becomes too high/salty (figure).
> We need to fix this, but so far haven't found a solution,
> and would appreciate any suggestions and help.
>
> **
>
> 3) Attempts to solve the problem (unsuccessfully):
>
> We thought the cheapAML might be producing too little precipitation
> (or too much evaporation).
>
> We considered using the specified precipitation file (cheap_precFile),
> to increase the precipitation that cheapAML passes to the ocean.
> However, that part of the cheapAML code (in cheapAML.F) is
> commented out (with the "BD" initials, probably Prof. Deremble's),
> so the cheap_precFile is not even read, and the variable that
> would store the data not used elsewhere in the code.
>
> We also considered feeding the ocean directly with an E-P file
> (via data &PARM05 EmPmRFile parameter).
> However, this would defeat the whole purpose of the cheapAML
> as the single source of mass (water), energy, and momentum
> passed to the ocean surface.
> Moreover, it would introduce a confusing competition between
> two sources of mass (water) flux.
> So, we didn't do this.
> [But we may, if any of you have had success with that in
> a cheapAML+global_ocean experiment.]
>
> We are also quite confused that (please see the attached PDF figures):
>
> A) The CH_Prec diagnostic (which turns out to be cheapPrecip).
> shows precipitation only over land, but zero over the ocean (figures).
>
> Is this a bug, or perhaps my setup is wrong?
> Would this explain why the ocean gets too salty?
>
> B) The CH_EmP diagnostic (which turns out to be EmPmR inside cheapAML),
> is zero over land and predominantly *positive* over the ocean,
> i.e., the ocean is losing water by evaporation (figure).
>
> Again:
> Is this a bug, or perhaps my setup is wrong?
> Would this explain why the ocean gets too salty,
> or is there another source that freshens the ocean water that
> we're not aware of?
>
> Any suggestions and help is appreciated.
>
> Thank you,
> Gus Correa
> # ====================
> # | Model parameters |
> # ====================
> #
> # Continuous equation parameters
>  &PARM01
>  tRef = 15*20.,
>  sRef = 15*35.,
>  viscAr=1.E-3,
>  viscAh=5.E5,
>  viscA4=1.E14,
>  diffKhT=0.,
>  diffKrT=3.E-5,
>  diffKhS=0.,
>  diffKrS=3.E-5,
>  rhoConst=1035.,
>  rhoConstFresh=1000.,
>  gravity=9.81,
>  eosType='JMD95P',
>  ivdc_kappa=10.,
>  implicitDiffusion=.TRUE.,
>  allowFreezing=.TRUE.,
>  exactConserv=.TRUE.,
> # GC: Trying to make a default free surface
> # select_rStar=2,
> # nonlinFreeSurf=4,
> # hFacInf=0.2,
> # hFacSup=2.0,
> # useRealFreshWaterFlux=.TRUE.,
>  useCDscheme=.TRUE.,
> # GC: Trying to make a default free surface
> # quasiHydrostatic=.TRUE.,
> # useNHMTerms=.TRUE.,
> # turn on looped cells
>  hFacMin=.05,
>  hFacMindr=50.,
> #- to check that it has no impact:
>  doResetHFactors=.TRUE.,
> # set precision of data files
>  readBinaryPrec=32,
> #writeBinaryPrec=64,
> # Single CPU IO (actually "O" only)
> useSingleCpuIO=.TRUE.
>  &
>
> # Elliptic solver parameters
>  &PARM02
>  cg2dMaxIters=500,
>  cg2dTargetResidual=1.E-13,
>  &
>
> # Time stepping parameters
>  &PARM03
> # This is a cheapAML spinup run. 
> # Hence for the startup job nIter0=0
> # After the startup job runs, 
> # switch to nIter0 to the final Iter was in the previous job,
> # to use the appropriate pickup files.
>  nIter0=0
> # Run in 10-year jobs, using the cal package to get years and months,
> # hence trying startTime endTime instead of nTimeSteps
>  startTime =          0.,
> # endTime   = 31622400.,
>  endTime   = 316224000.,
>  deltaTmom = 1200.,
>  tauCD =     321428.,
>  deltaTtracer= 43200.,
>  deltaTClock = 43200.,
>  deltaTfreesurf= 43200.,
>  abEps = 0.1,
> # No running checkpoint files
>  chkPtFreq=0.0
> # Permanent checkpoint files every 10 years = one at the end of the job.
> # Years of 365 days = 86400 x 365 seconds. Should I add leap years somehow, maybe 2.5 per decade?
>   pChkPtFreq= 316224000.,
> # dumpFreq once per 10 years, to save disk space (using diagnostic package for what matters)
>  dumpFreq= 316224000.,
> # monitorFreq once per year
>  monitorFreq=31622400.,
> # 2 months restoring timescale for SST
>  tauThetaClimRelax = 5270400.0,
> # 6 months restoring timescale for SSS
>  tauSaltClimRelax  = 15811200.0,
> # Turn on external forcing (for SST and SSS restore)
>   periodicExternalForcing=.TRUE.,
> # The SST and SSS relaxation (forcing) files are monthly climatologies, 
> # so the externForcingPeriod must be one month (30.5 days for a 366-day year = externForcingCycle) 
> # Note: cheapAML has its own controls: cheap_externForcingPeriod (=1day) and cheap_externForcingCycle (=1year).
>   externForcingPeriod = 2635200.0,
>   externForcingCycle  = 31622400.0,
>  &
>
> # Gridding parameters
>  &PARM04
>  usingSphericalPolarGrid=.TRUE.,
>  delR= 50.,  70., 100., 140., 190.,
>       240., 290., 340., 390., 440.,
>       490., 540., 590., 640., 690.,
>  ygOrigin=-80.,
>  dySpacing=4.,
>  dxSpacing=4.,
>  &
>
> # Input datasets
>  &PARM05
> # the bathyFile is constant, same for the whole run
>  bathyFile=      'bathymetry.bin',
> # The hydrography files serve as temperature and sailinity 
> # initial conditions in the startup job. 
> # The ocean will start from zero velocity
>  hydrogThetaFile='lev_t.bin',
>  hydrogSaltFile= 'lev_s.bin',
> # Windstress files (12 month climatologies)
> # BUT commented out, because the cheapAML provides windstress 
> # calculated from wind speed data
> # zonalWindFile=  'trenberth_taux.bin',
> # meridWindFile=  'trenberth_tauy.bin',
> # SST and SSS relaxation files (12 month climatologies)
>  thetaClimFile=  'lev_sst.bin',
>  saltClimFile=   'lev_sss.bin',
> # Qnet and EmPmR files (12 month climatologies0
> # BUT commented out, because the cheapAML provides Qnet and EmPmR 
> # calculated from surface shortwave, specific humidity, and temperature  
> # surfQFile=      'ncep_qnet.bin',
> # EmPmRFile=      'ncep_emp.bin',
>  the_run_name=   'spinup_cheapAML_global_ocean.90x40x15',
>  &
> # *******************
> # Calendar Parameters
> # *******************
>  &CAL_NML
>  TheCalendar='gregorian',
>  startDate_1=20000101,
>  startDate_2=000000,
>  calendarDumps=.TRUE.
>  &
> #--------------------
> # Package CheapAML parameters
> #--------------------
>  &CHEAPAML_CONST
> # 
> # cheapAML constants
> # DEFAULT cheapaml_ntim = 5 
> # Units of cheapaml_ntim not specified; 
> # cheapaml_ntim is the loop max in cheapaml.F; 
> # I AM NOT 100% SURE ABOUT THIS!!
> # It seems to be a multiplier of the number of ocean time steps,
> # i.e. one ocean time step for every cheapaml_ntim cheapaml time steps.
>   cheapaml_ntim = 100,
> # DEFAULT cheapaml_mask_width = 0
>   cheapaml_mask_width=5,
> # DEFAULT cheapaml_h=1000.d0
>   cheapaml_h = 1000.,
> # DEFAULT cheapaml_kdiff=1.d4
> # DEFAULT cheapaml_taurelax = .1d0  (days) 
> # DEFAULT cheapaml_taurelaxocean = .0d0 (days) 
> # DEFAULT cheapaml_mask_width = 0
> # DEFAULT rhoa   = 1.3d0
> # DEFAULT cpair  = 1004.d0
> # DEFAULT stefan = 5.67d-8
> # DEFAULT dsolms = 50.d0
> # DEFAULT dsolmn = 25.d0
> # DEFAULT xphaseinit = 0.d0
> # DEFAULT cdrag_1=0.0027d0
> # DEFAULT cdrag_2=0.000142d0
> # DEFAULT cdrag_3=0.0000764d0
> # DEFAULT gasR=287.04d0 # gas constant
> # DEFAULT gamma_blk=0.0098d0 # atmospheric adiabatic lapse rate
> # DEFAULT humid_fac=0.606d0 # humidity factor for computing virtual potential temperature
> # DEFAULT p0=1000.d0 # surface pressure in mb
> # DEFAULT lath=2.5d6 # latent heat (J/kg)
> # DEFAULT xkar=0.4d0 # von Karman Constant
> # DEFAULT cheap_pr1 = 2*3600.0d0 # precipitation time constant
> # DEFAULT cheap_pr2 = 36*3600.0d0 # precipitation time constant
> # DEFAULT zu=10.d0 # heights of variables
>   zu=10.d0 
> # DEFAULT zt=10.d0 # heights of variables
>   zt=2.d0 
> # DEFAULT zq=10.d0 # heights of variables
>   zq=2.d0 
>  &
>
>  &CHEAPAML_PARM01
> #
> # periodic forcing - Not Fortran syntax below!
> # Check the 'data' namelist file, and override if needed.
> # DEFAULT periodicExternalForcing_cheap = periodicExternalForcing
>   periodicExternalForcing_cheap = .TRUE.
> # DEFAULT externForcingPeriod_cheap = externForcingPeriod
> # Using daily data
>   externForcingPeriod_cheap = 86400., 
> # DEFAULT externForcingCycle_cheap = externForcingCycle
> # Using one-year long file and cycling on it
>   externForcingCycle_cheap = 31622400.,
> #
> # Input data files names. Override if needed.
> # DEFAULT AirTempFile=' ' # initial condition file
> # Using the same as the TrFile
>   AirTempFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_temp2m.interp2.fliplat.bin'
> # DEFAULT AirQFile=' ' # initial condition file
> # Using the same as the QrFile
>   AirQFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_shum2m.interp2.fliplat.bin'
> # DEFAULT SolarFile=' '
>   SolarFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_dswrf.interp2.fliplat.bin'
> # DEFAULT UWindFile=' '
>   UWindFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_uwnd.interp2.fliplat.bin'
> # DEFAULT VWindFile=' '
>   VWindFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_vwnd.interp2.fliplat.bin'
> # DEFAULT TrFile=' '
>   TrFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_temp2m.interp2.fliplat.bin'
> # DEFAULT QrFile=' '
>   QrFile='/scratch3/gus/MITgcm/scripts/matlab/gus/output/ncepR2d2k_shum2m.interp2.fliplat.bin'
> # DEFAULT WaveHFile=' '
> # DEFAULT WavePFile=' '
> # DEFAULT TracerFile=' ' # initial condition file
> # DEFAULT TracerRFile=' '
> # DEFAULT cheapMaskFile=' '
> # DEFAULT cheap_hFile =' '
> # DEFAULT cheap_prFile =' '
> # NOTE: The code that reads cheap_prFile is commented out!
> # cheap_prFile ='/scratch3/gus/MITgcm/scripts/matlab/gus/output/GPCPd2k_precip.interp2.bin'
> # DEFAULT cheap_clFile =' '
> # DEFAULT cheap_dlwFile =' '
> # DEFAULT MISSING  UStressFile = ' ' # requires non-default useStressOption=.TRUE.
> # DEFAULT MISSING  VStressFile = ' ' # requires non-default useStressOption=.TRUE.
> # 
>  &
>
>  &CHEAPAML_PARM02
>
> # Comments on the code about periodic vs. non-periodic domain:
> #
> # C-    Assumes domain (with land) is periodic in both direction
> # C      (consitent with default EXCH setting)
> # c     cheapamlXperiodic = .TRUE.
> # c     cheapamlYperiodic = .TRUE.
> # C note: for backward compatibility, switch to non periodic domain:
> #
> # DEFAULT cheapamlXperiodic = .FALSE.
> # DEFAULT cheapamlYperiodic = .FALSE.
>   cheapamlXperiodic = .TRUE.
>   cheapamlYperiodic = .FALSE.
> # DEFAULT useFreshWaterFlux=.TRUE. # e-p option turned off by default
>   useFreshWaterFlux=.TRUE.,
> # DEFAULT useFluxLimit=.FALSE. # turn off flux limiting advection by default
>   useFluxLimit=.TRUE.,
> # Flux calculation scheme.
> # DEFAULT FluxFormula='COARE3'
>   FluxFormula='COARE3'
> #  FluxFormula='LANL'
> # DEFAULT WaveModel='Smith'
> # DEFAULT useStressOption=.FALSE. # turn off stress option by default
> # DEFAULT useCheapTracer=.FALSE. # turn off passive tracer option by default
> # DEFAULT useTimeVarBLH=.FALSE. # turn off time varying BL height option by default
> # DEFAULT useClouds=.FALSE. # turn off clouds option by default
> # DEFAULT useDLongWave=.FALSE. # use imported downward longwave
>  &
> #--------------------
> # Diagnostic Package Choices
> #--------------------
> #  dumpAtLast (logical): always write output at the end of simulation (default=F)
> #  diag_mnc   (logical): write to NetCDF files (default=useMNC)
> #--for each output-stream:
> #  fileName(n) : prefix of the output file name (max 80c long) for outp.stream n
> #  frequency(n):< 0 : write snap-shot output every |frequency| seconds
> #               > 0 : write time-average output every frequency seconds
> #  timePhase(n)     : write at time = timePhase + multiple of |frequency|
> #    averagingFreq  : frequency (in s) for periodic averaging interval
> #    averagingPhase : phase     (in s) for periodic averaging interval
> #    repeatCycle    : number of averaging intervals in 1 cycle
> #  levels(:,n) : list of levels to write to file (Notes: declared as REAL)
> #                when this entry is missing, select all common levels of this list
> #  fields(:,n) : list of selected diagnostics fields (8.c) in outp.stream n
> #                (see "available_diagnostics.log" file for the full list of diags)
> #  missing_value(n) : missing value for real-type fields in output file "n"
> #  fileFlags(n)     : specific code (8c string) for output file "n"
> #--------------------
>  &DIAGNOSTICS_LIST
> #
> # control parameters
>  dumpAtLast    = .TRUE.
> #
> # Ocean 3D prognostic variables file
>  fileName(1)    = 'ocnDiag3D',
>  fields(1:5,1)  = 'THETA   ','SALT    '
>                   'UVEL    ','VVEL    ','WVEL    ',
> # frequency(1)   = 2635200.,
>  frequency(1)       = 316224000.,
>  timePhase(1)       = 0.,
>  averagingFreq(1)   = 2635200.,
>  averagingPhase(1)  = 0.,
>  repeatCycle(1)     = 120,
> #
> # Ocean 2D prognostic variables file
>  fileName(2)    = 'ocnDiag2D',
>  fields(1:1,2)  = 'ETAN    ', 
> # frequency(2)   = 2635200.,
>  frequency(2)       = 316224000.,
>  timePhase(2)       = 0.,
>  averagingFreq(2)   = 2635200.,
>  averagingPhase(2)  = 0.,
>  repeatCycle(2)     = 120,
> #
> # Ocean mixed layer variables file
>  fileName(3)    = 'omlDiag',
>  fields(1:1,3)  = 'MXLDEPTH', 
> # frequency(3)   = 2635200.,
>  frequency(3)       = 316224000.,
>  timePhase(3)       = 0.,
>  averagingFreq(3)   = 2635200.,
>  averagingPhase(3)  = 0.,
>  repeatCycle(3)     = 120,
> #
> # Atmosphere mixed layer (cheapAML) variables file
>  fileName(4)    = 'amlDiag',
>  fields(1:11,4) = 'CH_TAIR ','CH_QAIR ',
>                   'CH_Uwind','CH_Vwind',
>                   'CH_QNET ','CH_EmP  ',
>                   'CH_LH   ','CH_SH   ',
>                   'CH_q100 ','CH_ssqt '
>                   'CH_Prec ',
> # frequency(4)  = 2635200.,
>  frequency(4)       = 316224000.,
>  timePhase(4)       = 0.,
>  averagingFreq(4)   = 2635200.,
>  averagingPhase(4)  = 0.,
>  repeatCycle(4)     = 120,
>  &
> #--------------------
> # Parameter for Diagnostics of per level statistics:
> #--------------------
> #  diagSt_mnc (logical): write stat-diags to NetCDF files (default=diag_mnc)
> #  diagSt_regMaskFile : file containing the region-mask to read-in
> #  nSetRegMskFile   : number of region-mask sets within the region-mask file
> #  set_regMask(i)   : region-mask set-index that identifies the region "i"
> #  val_regMask(i)   : region "i" identifier value in the region mask
> #--for each output-stream:
> #  stat_fName(n) : prefix of the output file name (max 80c long) for outp.stream n
> #  stat_freq(n):< 0 : write snap-shot output every |stat_freq| seconds
> #               > 0 : write time-average output every stat_freq seconds
> #  stat_phase(n)    : write at time = stat_phase + multiple of |stat_freq|
> #  stat_region(:,n) : list of "regions" (default: 1 region only=global)
> #  stat_fields(:,n) : list of selected diagnostics fields (8.c) in outp.stream n
> #                (see "available_diagnostics.log" file for the full list of diags)
> #--------------------
>  &DIAG_STATIS_PARMS
> #
> # control parameters
> #
> # Ocean 3D prognostic variables statistics file
>  stat_fName(1)    = 'ocnStDiag3D',
>  stat_fields(1:5,1)  = 'THETA   ','SALT    '
>                        'UVEL    ','VVEL    ','WVEL    ',
> # stat_freq(1)        = 2635200.,
>  stat_freq(1)         = 316224000.,
>  stat_phase(1)        = 0.,
> #
> # Ocean prognostic variables statistics file
>  stat_fName(2)    = 'ocnStDiag2D',
>  stat_fields(1:1,2)  = 'ETAN    ', 
> # stat_freq(2)        = 2635200.,
>  stat_freq(2)         = 316224000.,
>  stat_phase(2)        = 0.,
> #
> # Ocean mixed layer variables statistics file
>  stat_fName(3)       = 'omlStDiag',
>  stat_fields(1:1,3)  = 'MXLDEPTH', 
> # stat_freq(3)        = 2635200.,
>  stat_freq(3)         = 316224000.,
>  stat_phase(3)        = 0.,
> #
> # Atmosphere mixed layer (cheapAML) variables statistics file
>  stat_fName(4)       = 'amlStDiag',
>  stat_fields(1:11,4) = 'CH_TAIR ','CH_QAIR ',
>                        'CH_Uwind','CH_Vwind',
>                        'CH_QNET ','CH_EmP  ',
>                        'CH_LH   ','CH_SH   ',
>                        'CH_q100 ','CH_ssqt '
>                        'CH_Prec ',
> # stat_freq(4)        = 2635200.,
>  stat_freq(4)         = 316224000.,
>  stat_phase(4)        = 0.,
>  &
> # -----------------------------
> # GM+Redi package parameters:
> # -----------------------------
>
> #-from MOM :
> # GM_background_K: 	G & Mc.W  diffusion coefficient
> # GM_maxSlope    :	max slope of isopycnals
> # GM_Scrit       :	transition for scaling diffusion coefficient
> # GM_Sd          :	half width scaling for diffusion coefficient
> # GM_taper_scheme:	slope clipping or one of the tapering schemes
> # GM_Kmin_horiz  :	horizontal diffusion minimum value 
>
> #-Option parameters (needs to "define" options in GMREDI_OPTIONS.h")
> # GM_isopycK     :	isopycnal diffusion coefficient (default=GM_background_K)
> # GM_AdvForm     :	turn on GM Advective form       (default=Skew flux form)
>
>  &GM_PARM01 
>   GM_background_K    = 1.e+3,
>   GM_taper_scheme    = 'gkw91',
>   GM_maxSlope        = 1.e-2,
>   GM_Kmin_horiz      = 50.,
>   GM_Scrit           = 4.e-3,
>   GM_Sd              = 1.e-3,
> # GM_Visbeck_alpha   = 0.,
> # GM_Visbeck_length  = 2.e+5,
> # GM_Visbeck_depth   = 1.e+3,
> # GM_Visbeck_maxval_K= 2.5e+3,
>  &
>
>
> # ---------------------------
> # data.sbo parameters
> # ---------------------------
> #
>  &SBO_PARM01
>  &
> # ------------------------------
> # eedata parameters
> # ------------------------------
> # Lines beginning "#" are comments
> #  nTx      :: No. threads per process in X
> #  nTy      :: No. threads per process in Y
> # debugMode :: print debug msg (sequence of S/R calls)
>  &EEPARMS
>  nTx=1,
>  nTy=1,
> #useSETRLSTK=.TRUE.,
> #debugMode=.TRUE.,
>  &
> # Note: Some systems use & as the namelist terminator (as shown here).
> #       Other systems use a / character.
> _______________________________________________
> MITgcm-support mailing list
> MITgcm-support at mitgcm.org
> http://mitgcm.org/mailman/listinfo/mitgcm-support




More information about the MITgcm-support mailing list