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

Gus Correa gus at ldeo.columbia.edu
Fri Mar 24 16:11:01 EDT 2017


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
-------------- next part --------------
# ====================
# | 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',
 &
-------------- next part --------------
# *******************
# Calendar Parameters
# *******************
 &CAL_NML
 TheCalendar='gregorian',
 startDate_1=20000101,
 startDate_2=000000,
 calendarDumps=.TRUE.
 &
-------------- next part --------------
#--------------------
# 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
 &
-------------- next part --------------
#--------------------
# 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.,
 &
-------------- next part --------------
# -----------------------------
# 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,
 &

-------------- next part --------------
A non-text attachment was scrubbed...
Name: data.pkg
Type: application/vnd.apple.installer+xml
Size: 308 bytes
Desc: not available
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20170324/b87338b7/attachment-0001.pkg>
-------------- next part --------------
# ---------------------------
# data.sbo parameters
# ---------------------------
#
 &SBO_PARM01
 &
-------------- next part --------------
# ------------------------------
# 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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sync_end_emp_clim.pdf
Type: application/pdf
Size: 429451 bytes
Desc: not available
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20170324/b87338b7/attachment-0004.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sync_end_june_prec_map.pdf
Type: application/pdf
Size: 160180 bytes
Desc: not available
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20170324/b87338b7/attachment-0005.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sync_end_prec_map.pdf
Type: application/pdf
Size: 153771 bytes
Desc: not available
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20170324/b87338b7/attachment-0006.pdf>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: april_1000_sss.pdf
Type: application/pdf
Size: 131886 bytes
Desc: not available
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20170324/b87338b7/attachment-0007.pdf>


More information about the MITgcm-support mailing list