[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