Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Showing
with 1023 additions and 535 deletions
......@@ -418,5 +418,43 @@
<duplicate_scalar />
</axis>
</grid>
<grid id="grid_EqT" >
<domain id="EqT" />
</grid>
<!-- -->
<grid id="gznl_T_2D">
<domain id="ptr" />
</grid>
<!-- -->
<grid id="gznl_T_3D">
<domain id="ptr" />
<axis axis_ref="deptht" />
</grid>
<!-- -->
<grid id="gznl_W_2D">
<domain id="ptr" />
</grid>
<!-- -->
<grid id="gznl_W_3D">
<domain id="ptr" />
<axis axis_ref="depthw" />
</grid>
<grid id="vert_sum">
<domain id="grid_T"/>
<scalar>
<reduce_axis operation="sum" />
</scalar>
</grid>
<grid id="zoom_300">
<domain id="grid_T" />
<axis axis_ref="deptht300"/>
</grid>
<grid id="zoom_300_sum">
<domain id="grid_T" />
<scalar>
<reduce_axis operation="sum" />
</scalar>
</grid>
</grid_definition>
......@@ -24,10 +24,10 @@
jpl = 5 ! number of ice categories
nlay_i = 2 ! number of ice layers
nlay_s = 2 ! number of snow layers
ln_virtual_itd = .false. ! virtual ITD mono-category parameterization (jpl=1 only)
! i.e. enhanced thermal conductivity & virtual thin ice melting
ln_icedyn = .true. ! ice dynamics (T) or not (F)
ln_icethd = .true. ! ice thermo (T) or not (F)
ln_virtual_itd = .false., ! virtual ITD mono-category parameterization (jpl=1 only)
! i.e. enhan.false.ced thermal conductivity & virtual thin ice melting
ln_icedyn = .true., ! ice dynamics (T) or not (F)
ln_icethd = .true., ! ice thermo (T) or not (F)
rn_amax_n = 0.997 ! maximum tolerated ice concentration NH
rn_amax_s = 0.997 ! maximum tolerated ice concentration SH
cn_icerst_in = "restart_ice" ! suffix of ice restart name (input)
......@@ -38,9 +38,9 @@
!------------------------------------------------------------------------------
&namitd ! Ice discretization
!------------------------------------------------------------------------------
ln_cat_hfn = .true. ! ice categories are defined by a function following rn_himean**(-0.05)
ln_cat_hfn = .true., ! ice categories are defined by a function following rn_himean**(-0.05)
rn_himean = 2.0 ! expected domain-average ice thickness (m)
ln_cat_usr = .false. ! ice categories are defined by rn_catbnd below (m)
ln_cat_usr = .false., ! ice categories are defined by rn_catbnd below (m)
rn_catbnd = 0.,0.45,1.1,2.1,3.7,6.0
rn_himin = 0.1 ! minimum ice thickness (m) allowed
rn_himax = 99.0 ! maximum ice thickness (m) allowed
......@@ -48,14 +48,14 @@
!------------------------------------------------------------------------------
&namdyn ! Ice dynamics
!------------------------------------------------------------------------------
ln_dynALL = .true. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection)
ln_dynADV1D = .false. ! dyn.: only advection 1D (Schar & Smolarkiewicz 1996 test case)
ln_dynADV2D = .false. ! dyn.: only advection 2D w prescribed vel.(rn_uvice + advection)
ln_dynALL = .true., ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
ln_dynRHGADV = .false., ! dyn.: no ridge/raft & no corrections (rheology + advection)
ln_dynADV1D = .false., ! dyn.: only advection 1D (Schar & Smolarkiewicz 1996 test case)
ln_dynADV2D = .false., ! dyn.: only advection 2D w prescribed vel.(rn_uvice + advection)
rn_uice = 0.5 ! prescribed ice u-velocity
rn_vice = 0.5 ! prescribed ice v-velocity
rn_ishlat = 2. ! lbc : free slip (0) ; partial slip (0-2) ; no slip (2) ; strong slip (>2)
ln_landfast_L16 = .false. ! landfast: parameterization from Lemieux 2016
ln_landfast_L16 = .false., ! landfast: parameterization from Lemieux 2016
rn_lf_depfra = 0.125 ! fraction of ocean depth that ice must reach to initiate landfast
! recommended range: [0.1 ; 0.25]
rn_lf_bfr = 15. ! maximum bottom stress per unit volume [N/m3]
......@@ -72,30 +72,30 @@
&namdyn_rdgrft ! Ice ridging/rafting
!------------------------------------------------------------------------------
! -- ice_rdgrft_strength -- !
ln_str_H79 = .true. ! ice strength param.: Hibler_79 => P = pstar*<h>*exp(-c_rhg*A)
ln_str_H79 = .true., ! ice strength param.: Hibler_79 => P = pstar*<h>*exp(-c_rhg*A)
rn_pstar = 2.0e+04 ! ice strength thickness parameter [N/m2]
rn_crhg = 20.0 ! ice strength conc. parameter (-)
ln_str_R75 = .false. ! ice strength param.: Rothrock_75 => P = fn of potential energy
ln_str_R75 = .false., ! ice strength param.: Rothrock_75 => P = fn of potential energy
rn_pe_rdg = 17.0 ! coef accouting for frictional dissipation
ln_str_CST = .false. ! ice strength param.: Constant
ln_str_CST = .false., ! ice strength param.: Constant
rn_str = 0.0 ! ice strength value
ln_str_smooth = .true. ! spatial smoothing of the ice strength
ln_str_smooth = .true., ! spatial smoothing of the ice strength
! -- ice_rdgrft -- !
ln_distf_lin = .true. ! redistribution function of ridged ice: linear (Hibler 1980)
ln_distf_exp = .false. ! redistribution function of ridged ice: exponential => not coded yet
ln_distf_lin = .true., ! redistribution function of ridged ice: linear (Hibler, 1980)
ln_distf_exp = .false., ! redistribution function of ridged ice: exponential (Lipscomb et al., 2007)
rn_murdg = 3.0 ! e-folding scale of ridged ice (m**.5)
rn_csrdg = 0.5 ! fraction of shearing energy contributing to ridging
! -- ice_rdgrft_prep -- !
ln_partf_lin = .false. ! Linear ridging participation function (Thorndike et al, 1975)
ln_partf_lin = .false., ! Linear ridging participation function (Thorndike et al., 1975)
rn_gstar = 0.15 ! fractional area of thin ice being ridged
ln_partf_exp = .true. ! Exponential ridging participation function (Lipscomb, 2007)
ln_partf_exp = .true., ! Exponential ridging participation function (Lipscomb et al., 2007)
rn_astar = 0.03 ! exponential measure of ridging ice fraction [set to 0.05 if hstar=100]
ln_ridging = .true. ! ridging activated (T) or not (F)
ln_ridging = .true., ! ridging activated (T) or not (F)
rn_hstar = 25.0 ! determines the maximum thickness of ridged ice [m] (Hibler, 1980)
rn_porordg = 0.3 ! porosity of newly ridged ice (Lepparanta et al., 1995)
rn_fsnwrdg = 0.5 ! snow volume fraction that survives in ridging
rn_fpndrdg = 1.0 ! pond fraction that survives in ridging (small a priori)
ln_rafting = .true. ! rafting activated (T) or not (F)
ln_rafting = .true., ! rafting activated (T) or not (F)
rn_hraft = 0.75 ! threshold thickness for rafting [m]
rn_craft = 5.0 ! squeezing coefficient used in the rafting function
rn_fsnwrft = 0.5 ! snow volume fraction that survives in rafting
......@@ -104,9 +104,9 @@
!------------------------------------------------------------------------------
&namdyn_rhg ! Ice rheology
!------------------------------------------------------------------------------
ln_rhg_EVP = .true. ! EVP rheology
ln_rhg_EAP = .false. ! EAP rheology
ln_aEVP = .true. ! adaptive rheology (Kimmritz et al. 2016 & 2017)
ln_rhg_EVP = .true., ! EVP rheology
ln_rhg_EAP = .false., ! EAP rheology
ln_aEVP = .true., ! adaptive rheology (Kimmritz et al. 2016 & 2017)
rn_creepl = 2.0e-9 ! creep limit [1/s]
rn_ecc = 2.0 ! eccentricity of the elliptical yield curve
nn_nevp = 100 ! number of EVP subcycles
......@@ -117,7 +117,7 @@
! = 1 check at the main time step (output xml: uice_cvg)
! = 2 check at both main and rheology time steps (additional output: ice_cvg.nc)
! this option 2 asks a lot of communications between cpu
ln_rhg_VP = .false. ! VP rheology
ln_rhg_VP = .false., ! VP rheology
nn_vp_nout = 10 ! number of outer iterations
nn_vp_ninn = 1500 ! number of inner iterations
nn_vp_chkcvg = 5 ! iteration step for convergence check
......@@ -125,8 +125,8 @@
!------------------------------------------------------------------------------
&namdyn_adv ! Ice advection
!------------------------------------------------------------------------------
ln_adv_Pra = .true. ! Advection scheme (Prather)
ln_adv_UMx = .false. ! Advection scheme (Ultimate-Macho)
ln_adv_Pra = .true., ! Advection scheme (Prather)
ln_adv_UMx = .false., ! Advection scheme (Ultimate-Macho)
nn_UMx = 5 ! order of the scheme for UMx (1-5 ; 20=centered 2nd order)
/
!------------------------------------------------------------------------------
......@@ -144,8 +144,8 @@
! = 0 Average N(cat) fluxes then apply the average over the N(cat) ice
! = 1 Average N(cat) fluxes then redistribute over the N(cat) ice using T-ice and albedo sensitivity
! = 2 Redistribute a single flux over categories
ln_cndflx = .false. ! Use conduction flux as surface boundary conditions (i.e. for Jules coupling)
ln_cndemulate = .false. ! emulate conduction flux (if not provided in the inputs)
ln_cndflx = .false., ! Use conduction flux as surface boundary conditions (i.e. for Jules coupling)
ln_cndemulate = .false., ! emulate conduction flux (if not provided in the inputs)
nn_qtrice = 0 ! Solar flux transmitted thru the surface scattering layer:
! = 0 Grenfell and Maykut 1977 (depends on cloudiness and is 0 when there is snow)
! = 1 Lebrun 2019 (equals 0.3 anytime with different melting/dry snw conductivities)
......@@ -153,26 +153,26 @@
!------------------------------------------------------------------------------
&namthd ! Ice thermodynamics
!------------------------------------------------------------------------------
ln_icedH = .true. ! activate ice thickness change from growing/melting (T) or not (F)
ln_icedA = .true. ! activate lateral melting param. (T) or not (F)
ln_icedO = .true. ! activate ice growth in open-water (T) or not (F)
ln_icedS = .true. ! activate brine drainage (T) or not (F)
ln_icedH = .true., ! activate ice thickness change from growing/melting (T) or not (F)
ln_icedA = .true., ! activate lateral melting param. (T) or not (F)
ln_icedO = .true., ! activate ice growth in open-water (T) or not (F)
ln_icedS = .true., ! activate brine drainage (T) or not (F)
!
ln_leadhfx = .true. ! heat in the leads is used to melt sea-ice before warming the ocean
ln_leadhfx = .true., ! heat in the leads is used to melt sea-ice before warming the ocean
/
!------------------------------------------------------------------------------
&namthd_zdf ! Ice heat diffusion
!------------------------------------------------------------------------------
ln_zdf_BL99 = .true. ! Heat diffusion follows Bitz and Lipscomb 1999
ln_cndi_U64 = .false. ! sea ice thermal conductivity: k = k0 + beta.S/T (Untersteiner, 1964)
ln_cndi_P07 = .true. ! sea ice thermal conductivity: k = k0 + beta1.S/T - beta2.T (Pringle et al., 2007)
ln_zdf_BL99 = .true., ! Heat diffusion follows Bitz and Lipscomb 1999
ln_cndi_U64 = .false., ! sea ice thermal conductivity: k = k0 + beta.S/T (Untersteiner, 1964)
ln_cndi_P07 = .true., ! sea ice thermal conductivity: k = k0 + beta1.S/T - beta2.T (Pringle et al., 2007)
rn_cnd_s = 0.31 ! thermal conductivity of the snow (0.31 W/m/K, Maykut and Untersteiner, 1971)
! Obs: 0.1-0.5 (Lecomte et al, JAMES 2013)
rn_kappa_i = 1.0 ! radiation attenuation coefficient in sea ice [1/m]
rn_kappa_s = 10.0 ! nn_qtrice = 0: radiation attenuation coefficient in snow [1/m]
rn_kappa_smlt = 7.0 ! nn_qtrice = 1: radiation attenuation coefficient in melting snow [1/m]
rn_kappa_sdry = 10.0 ! radiation attenuation coefficient in dry snow [1/m]
ln_zdf_chkcvg = .false. ! check convergence of heat diffusion scheme (outputs: tice_cvgerr, tice_cvgstp)
ln_zdf_chkcvg = .false., ! check convergence of heat diffusion scheme (outputs: tice_cvgerr, tice_cvgstp)
/
!------------------------------------------------------------------------------
&namthd_da ! Ice lateral melting
......@@ -189,7 +189,7 @@
&namthd_do ! Ice growth in open water
!------------------------------------------------------------------------------
rn_hinew = 0.1 ! thickness for new ice formation in open water (m), must be larger than rn_himin
ln_frazil = .false. ! Frazil ice parameterization (ice collection as a function of wind)
ln_frazil = .false., ! Frazil ice parameterization (ice collection as a function of wind)
rn_maxfraz = 1.0 ! maximum fraction of frazil ice collecting at the ice base
rn_vfraz = 0.417 ! thresold drift speed for frazil ice collecting at the ice bottom (m/s)
rn_Cfraz = 5.0 ! squeezing coefficient for frazil ice collecting at the ice bottom
......@@ -212,22 +212,25 @@
!------------------------------------------------------------------------------
&namthd_pnd ! Melt ponds
!------------------------------------------------------------------------------
ln_pnd = .true. ! activate melt ponds or not
ln_pnd_TOPO = .false. ! topographic melt ponds
ln_pnd_LEV = .true. ! level ice melt ponds
ln_pnd = .true., ! activate melt ponds or not
ln_pnd_TOPO = .false., ! topographic melt ponds
ln_pnd_LEV = .true., ! level ice melt ponds
rn_apnd_min = 0.15 ! minimum meltwater fraction contributing to pond growth (TOPO and LEV)
rn_apnd_max = 0.85 ! maximum meltwater fraction contributing to pond growth (TOPO and LEV)
rn_pnd_flush= 0.1 ! pond flushing efficiency (tuning parameter) (LEV)
ln_pnd_CST = .false. ! constant melt ponds
ln_pnd_CST = .false., ! constant melt ponds
rn_apnd = 0.2 ! prescribed pond fraction, at Tsu=0 degC
rn_hpnd = 0.05 ! prescribed pond depth, at Tsu=0 degC
ln_pnd_lids = .true. ! frozen lids on top of the ponds (only for ln_pnd_LEV)
ln_pnd_alb = .true. ! effect of melt ponds on ice albedo
ln_pnd_lids = .true., ! frozen lids on top of the ponds (only for ln_pnd_LEV)
ln_pnd_alb = .true., ! effect of melt ponds on ice albedo
nn_pnd_brsal = 0 ! brine salinity formulation 0 = Consistent expression with SI3
! (linear liquidus)
! 1 = used in GOSI9
/
!------------------------------------------------------------------------------
&namini ! Ice initialization
!------------------------------------------------------------------------------
ln_iceini = .true. ! activate ice initialization (T) or not (F)
ln_iceini = .true., ! activate ice initialization (T) or not (F)
nn_iceini_file = 0 ! 0 = Initialise sea ice based on SSTs
! 1 = Initialise sea ice from single category netcdf file
! 2 = Initialise sea ice from multi category restart file
......@@ -280,12 +283,12 @@
!------------------------------------------------------------------------------
&namdia ! Diagnostics
!------------------------------------------------------------------------------
ln_icediachk = .false. ! check online heat, mass & salt budgets
ln_icediachk = .false., ! check online heat, mass & salt budgets
! ! rate of ice spuriously gained/lost at each time step => rn_icechk=1 <=> 1.e-6 m/hour
rn_icechk_cel = 1. ! check at each gridcell (1.e-06m/h)=> stops the code if violated (and writes a file)
rn_icechk_glo = 1.e-04 ! check over the entire ice cover (1.e-10m/h)=> only prints warnings
ln_icediahsb = .false. ! output the heat, mass & salt budgets (T) or not (F)
ln_icectl = .false. ! ice points output for debug (T or F)
ln_icediahsb = .false., ! output the heat, mass & salt budgets (T) or not (F)
ln_icectl = .false., ! ice points output for debug (T or F)
iiceprt = 10 ! i-index for debug
jiceprt = 10 ! j-index for debug
/
......@@ -40,8 +40,9 @@
nn_date0 = 010101 ! date at nit_0000 (format yyyymmdd) used if ln_rstart=F or (ln_rstart=T and nn_rstctl=0 or 1)
nn_time0 = 0 ! initial time of day in hhmm
nn_leapy = 0 ! Leap year calendar (1) or not (0)
ln_rstart = .false. ! start from rest (F) or from a restart file (T)
ln_1st_euler = .false. ! =T force a start with forward time step (ln_rstart=T)
ln_rstart = .false., ! start from rest (F) or from a restart file (T)
ln_rstdate = .false., ! restart file name contains timestep number (F) or date (T)
ln_1st_euler = .false., ! =T force a start with forward time step (ln_rstart=T)
nn_rstctl = 0 ! restart control ==> activated only if ln_rstart=T
! ! = 0 nn_date0 read in namelist ; nn_it000 : read in namelist
! ! = 1 nn_date0 read in namelist ; nn_it000 : check consistancy between namelist and restart
......@@ -51,7 +52,7 @@
cn_ocerst_out = "restart" ! suffix of ocean restart name (output)
cn_ocerst_outdir = "." ! directory in which to write output ocean restarts
nn_istate = 0 ! output the initial state (1) or not (0)
ln_rst_list = .false. ! output restarts at list of times using nn_stocklist (T) or at set frequency with nn_stock (F)
ln_rst_list = .false., ! output restarts at list of times using nn_stocklist (T) or at set frequency with nn_stock (F)
nn_stock = 0 ! used only if ln_rst_list = F: output restart freqeuncy (modulo referenced to 1)
! ! = 0 force to write restart files only at the end of the run
! ! = -1 do not do any restart
......@@ -59,69 +60,70 @@
nn_write = 0 ! used only if key_xios is not defined: output frequency (modulo referenced to nn_it000)
! ! = 0 force to write output files only at the end of the run
! ! = -1 do not do any output file
ln_mskland = .false. ! mask land points in NetCDF outputs
ln_cfmeta = .false. ! output additional data to netCDF files required for compliance with the CF metadata standard
ln_clobber = .true. ! clobber (overwrite) an existing file
ln_mskland = .false., ! mask land points in NetCDF outputs
ln_cfmeta = .false., ! output additional data to netCDF files required for compliance with the CF metadata standard
ln_clobber = .true., ! clobber (overwrite) an existing file
nn_chunksz = 0 ! chunksize (bytes) for NetCDF file (works only with iom_nf90 routines)
ln_xios_read = .false. ! use XIOS to read restart file (only for a single file restart)
ln_xios_read = .false., ! use XIOS to read restart file (only for a single file restart)
nn_wxios = 0 ! use XIOS to write restart file 0 - no, 1 - single file output, 2 - multiple file output
ln_rst_eos = .false., ! check if the equation of state used to produce the restart is consistent with model
/
!-----------------------------------------------------------------------
&namdom ! time and space domain
!-----------------------------------------------------------------------
ln_linssh = .false. ! =T linear free surface ==>> model level are fixed in time
ln_linssh = .false., ! =T linear free surface ==>> model level are fixed in time
!
rn_Dt = 5400. ! time step for the dynamics and tracer
rn_atfp = 0.1 ! asselin time filter parameter
!
ln_crs = .false. ! Logical switch for coarsening module (T => fill namcrs)
ln_c1d = .false. ! Single column domain (1x1pt) (T => fill namc1d)
ln_crs = .false., ! Logical switch for coarsening module (T => fill namcrs)
ln_c1d = .false., ! Single column domain (1x1pt) (T => fill namc1d)
!
ln_meshmask = .true. ! =T create a mesh file
ln_meshmask = .true., ! =T create a mesh file
/
!-----------------------------------------------------------------------
&namcfg ! parameters of the configuration (default: use namusr_def in namelist_cfg)
!-----------------------------------------------------------------------
ln_read_cfg = .false. ! (=T) read the domain configuration file
ln_read_cfg = .false., ! (=T) read the domain configuration file
! ! (=F) user defined configuration (F => create/check namusr_def)
cn_domcfg = "domain_cfg" ! domain configuration filename
!
ln_closea = .false. ! (=T => fill namclo)
ln_closea = .false., ! (=T => fill namclo)
! ! (=F) no control of net precip/evap over closed sea
!
ln_write_cfg = .false. ! (=T) create the domain configuration file
ln_write_cfg = .false., ! (=T) create the domain configuration file
cn_domcfg_out = "domain_cfg_out" ! newly created domain configuration filename
!
ln_use_jattr = .false. ! use (T) the file attribute: open_ocean_jstart, if present
ln_use_jattr = .false., ! use (T) the file attribute: open_ocean_jstart, if present
! ! in netcdf input files, as the start j-row for reading
/
!-----------------------------------------------------------------------
&namtile ! parameters of the tiling
!-----------------------------------------------------------------------
ln_tile = .false. ! Use tiling (T) or not (F)
ln_tile = .false., ! Use tiling (T) or not (F)
nn_ltile_i = 99999 ! Length of tiles in i
nn_ltile_j = 10 ! Length of tiles in j
/
!-----------------------------------------------------------------------
&namclo ! parameters of the closed sea (cs) behavior (default: OFF)
!-----------------------------------------------------------------------
ln_maskcs = .false. ! (=T) cs are masked ; So, in this case ln_mask_csundef and ln_clo_rnf have no effect.
ln_maskcs = .false., ! (=T) cs are masked ; So, in this case ln_mask_csundef and ln_clo_rnf have no effect.
! ! (=F => set ln_mask_csundef and ln_clo_rnf)
! ! cs masks are read and net evap/precip over closed sea spread out depending on domain_cfg.nc masks.
! ! See ln_mask_csundef and ln_clo_rnf for specific option related to this case
!
ln_mask_csundef = .true. ! (=T) undefined closed seas are masked ;
ln_mask_csundef = .true., ! (=T) undefined closed seas are masked ;
! ! (=F) undefined closed seas are kept and no specific treatment is done for these closed seas
!
ln_clo_rnf = .true. ! (=T) river mouth specified in domain_cfg.nc masks (rnf and emp case) are added to the runoff mask.
ln_clo_rnf = .true., ! (=T) river mouth specified in domain_cfg.nc masks (rnf and emp case) are added to the runoff mask.
! ! allow the treatment of closed sea outflow grid-points to be the same as river mouth grid-points
/
!-----------------------------------------------------------------------
&namtsd ! Temperature & Salinity Data (init/dmp) (default: OFF)
!-----------------------------------------------------------------------
! ! =T read T-S fields for:
ln_tsd_init = .false. ! ocean initialisation
ln_tsd_dmp = .false. ! T-S restoring (see namtra_dmp)
ln_tsd_init = .false., ! ocean initialisation
ln_tsd_dmp = .false., ! T-S restoring (see namtra_dmp)
cn_dir = './' ! root directory for the T-S data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -133,9 +135,9 @@
!-----------------------------------------------------------------------
&namwad ! Wetting and Drying (WaD) (default: OFF)
!-----------------------------------------------------------------------
ln_wd_dl = .false. ! T/F activation of directional limiter
ln_wd_dl_bc = .false. ! T/F Directional limiter Baroclinic option
ln_wd_dl_rmp = .false. ! T/F Turn on directional limiter ramp
ln_wd_dl = .false., ! T/F activation of directional limiter
ln_wd_dl_bc = .false., ! T/F Directional limiter Baroclinic option
ln_wd_dl_rmp = .false., ! T/F Turn on directional limiter ramp
rn_wdmin0 = 0.30 ! depth at which WaD starts
rn_wdmin1 = 0.2 ! Minimum wet depth on dried cells
rn_wdmin2 = 0.0001 ! Tolerance of min wet depth on dried cells
......@@ -152,11 +154,11 @@
! ! 0, coarse grid is binned with preferential treatment of the north fold
! ! 1, coarse grid is binned with centering at the equator
! ! Symmetry with nn_facty being odd-numbered. Asymmetry with even-numbered nn_facty.
ln_msh_crs = .false. ! =T create a mesh & mask file
ln_msh_crs = .false., ! =T create a mesh & mask file
nn_crs_kz = 0 ! 0, MEAN of volume boxes
! ! 1, MAX of boxes
! ! 2, MIN of boxes
ln_crs_wn = .true. ! wn coarsened (T) or computed using horizontal divergence ( F )
ln_crs_wn = .true., ! wn coarsened (T) or computed using horizontal divergence ( F )
/
!-----------------------------------------------------------------------
&namc1d ! 1D configuration options (ln_c1d =T default: PAPA station)
......@@ -167,14 +169,14 @@
!-----------------------------------------------------------------------
&namc1d_dyndmp ! U & V newtonian damping (ln_c1d =T default: OFF)
!-----------------------------------------------------------------------
ln_dyndmp = .false. ! add a damping term (T) or not (F)
ln_dyndmp = .false., ! add a damping term (T) or not (F)
/
!-----------------------------------------------------------------------
&namc1d_uvd ! data: U & V currents (ln_c1d =T default: OFF)
!-----------------------------------------------------------------------
! ! =T read U-V fields for:
ln_uvd_init = .false. ! ocean initialisation
ln_uvd_dyndmp = .false. ! U-V restoring
ln_uvd_init = .false., ! ocean initialisation
ln_uvd_dyndmp = .false., ! U-V restoring
cn_dir = './' ! root directory for the U-V data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -208,13 +210,13 @@
nn_fsbc = 2 ! frequency of SBC module call
! ! (control sea-ice & iceberg model call)
! Type of air-sea fluxes
ln_usr = .false. ! user defined formulation (T => check usrdef_sbc)
ln_flx = .false. ! flux formulation (T => fill namsbc_flx )
ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk )
ln_abl = .false. ! ABL formulation (T => fill namsbc_abl )
ln_usr = .false., ! user defined formulation (T => check usrdef_sbc)
ln_flx = .false., ! flux formulation (T => fill namsbc_flx )
ln_blk = .false., ! Bulk formulation (T => fill namsbc_blk )
ln_abl = .false., ! ABL formulation (T => fill namsbc_abl )
! ! Type of coupling (Ocean/Ice/Atmosphere) :
ln_cpl = .false. ! atmosphere coupled formulation ( requires key_oasis3 )
ln_mixcpl = .false. ! forced-coupled mixed formulation ( requires key_oasis3 )
ln_cpl = .false., ! atmosphere coupled formulation ( requires key_oasis3 )
ln_mixcpl = .false., ! forced-coupled mixed formulation ( requires key_oasis3 )
nn_components = 0 ! configuration of the opa-sas OASIS coupling
! ! =0 no opa-sas OASIS coupling: default single executable config.
! ! =1 opa-sas OASIS coupling: multi executable config., OCE component
......@@ -223,18 +225,18 @@
nn_ice = 0 ! =0 no ice boundary condition
! ! =1 use observed ice-cover ( => fill namsbc_iif )
! ! =2 or 3 for SI3 and CICE, respectively
ln_ice_embd = .false. ! =T embedded sea-ice (pressure + mass and salt exchanges)
ln_ice_embd = .false., ! =T embedded sea-ice (pressure + mass and salt exchanges)
! ! =F levitating ice (no pressure, mass and salt exchanges)
! Misc. options of sbc :
ln_traqsr = .false. ! Light penetration in the ocean (T => fill namtra_qsr)
ln_dm2dc = .false. ! daily mean to diurnal cycle on short wave
ln_ssr = .false. ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr)
ln_traqsr = .false., ! Light penetration in the ocean (T => fill namtra_qsr)
ln_dm2dc = .false., ! daily mean to diurnal cycle on short wave
ln_ssr = .false., ! Sea Surface Restoring on T and/or S (T => fill namsbc_ssr)
nn_fwb = 0 ! FreshWater Budget: =0 unchecked
! ! =1 global mean of e-p-r set to zero at each time step
! ! =2 annual global mean of e-p-r set to zero
ln_rnf = .false. ! runoffs (T => fill namsbc_rnf)
ln_apr_dyn = .false. ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr )
ln_wave = .false. ! Activate coupling with wave (T => fill namsbc_wave)
ln_rnf = .false., ! runoffs (T => fill namsbc_rnf)
ln_apr_dyn = .false., ! Patm gradient added in ocean & ice Eqs. (T => fill namsbc_apr )
ln_wave = .false., ! Activate coupling with wave (T => fill namsbc_wave)
nn_lsm = 0 ! =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) ,
! =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field)
/
......@@ -255,37 +257,38 @@
&namsbc_blk ! namsbc_blk generic Bulk formula (ln_blk =T)
!-----------------------------------------------------------------------
! ! bulk algorithm :
ln_NCAR = .true. ! "NCAR" algorithm (Large and Yeager 2008)
ln_COARE_3p0 = .false. ! "COARE 3.0" algorithm (Fairall et al. 2003)
ln_COARE_3p6 = .false. ! "COARE 3.6" algorithm (Edson et al. 2013)
ln_ECMWF = .false. ! "ECMWF" algorithm (IFS cycle 45r1)
ln_ANDREAS = .false. ! "ANDREAS" algorithm (Andreas et al. 2015)
ln_NCAR = .true., ! "NCAR" algorithm (Large and Yeager 2008)
ln_COARE_3p0 = .false., ! "COARE 3.0" algorithm (Fairall et al. 2003)
ln_COARE_3p6 = .false., ! "COARE 3.6" algorithm (Edson et al. 2013)
ln_ECMWF = .false., ! "ECMWF" algorithm (IFS cycle 45r1)
ln_ANDREAS = .false., ! "ANDREAS" algorithm (Andreas et al. 2015)
rn_zqt = 10. ! Air temperature & humidity reference height (m)
rn_zu = 10. ! Wind vector reference height (m)
nn_iter_algo = 5 ! Number of iterations in bulk param. algo ("stable ABL + weak wind" requires more)
ln_skin_cs = .false. ! use the cool-skin parameterization => use at least nn_iter_algo > 10
ln_skin_wl = .false. ! use the warm-layer parameterization => use at least nn_iter_algo > 10
ln_skin_cs = .false., ! use the cool-skin parameterization => use at least nn_iter_algo > 10
ln_skin_wl = .false., ! use the warm-layer parameterization => use at least nn_iter_algo > 10
!
rn_pfac = 1. ! multipl. factor for precipitation (total & snow)
rn_efac = 1. ! multipl. factor for evaporation (0. or 1.)
rn_vfac = 0. !
!
ln_crt_fbk = .false. ! Add surface current feedback to the wind stress (Renault et al. 2020, doi: 10.1029/2019MS001715)
ln_crt_fbk = .false., ! Add surface current feedback to the wind stress (Renault et al. 2020, doi: 10.1029/2019MS001715)
rn_stau_a = -2.9e-3 ! Alpha from eq. 10: Stau = Alpha * Wnd + Beta
rn_stau_b = 8.0e-3 ! Beta
!
ln_humi_sph = .true. ! humidity "sn_humi" is specific humidity [kg/kg]
ln_humi_dpt = .false. ! humidity "sn_humi" is dew-point temperature [K]
ln_humi_rlh = .false. ! humidity "sn_humi" is relative humidity [%]
ln_tair_pot = .false. ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.)
ln_humi_sph = .true., ! humidity "sn_humi" is specific humidity [kg/kg]
ln_humi_dpt = .false., ! humidity "sn_humi" is dew-point temperature [K]
ln_humi_rlh = .false., ! humidity "sn_humi" is relative humidity [%]
ln_tair_pot = .false., ! air temperature read in "sn_tair" is already POTENTIAL TEMPERATURE, NOT ABSOLUTE (ECMWF => ln_tair_pot=.false.)
!!
!! Bulk transfer coefficients over sea-ice: (relevant IF: nn_ice >=1 )
ln_Cx_ice_cst = .true. ! use constant ice-air bulk transfer coefficients (value given below)
ln_Cx_ice_cst = .true., ! use constant ice-air bulk transfer coefficients (value given below)
rn_Cd_i = 1.4e-3 ! sea-ice drag coefficient
rn_Ce_i = 1.4e-3 ! " sublimation coefficient
rn_Ch_i = 1.4e-3 ! " sensible heat flux coefficient
ln_Cx_ice_AN05 = .false. ! (Andreas et al. 2005)
ln_Cx_ice_LU12 = .false. ! (Lupkes et al. 2012)
ln_Cx_ice_LG15 = .false. ! (Lupkes & Gryanik 2015)
ln_Cx_ice_AN05 = .false., ! (Andreas et al. 2005)
ln_Cx_ice_LU12 = .false., ! (Lupkes et al. 2012)
ln_Cx_ice_LG15 = .false., ! (Lupkes & Gryanik 2015)
!
cn_dir = './' ! root directory for the bulk data location
!___________!_________________________!___________________!___________!_____________!________!___________!______________________________________!__________!_______________!
......@@ -317,13 +320,14 @@
cn_ablrst_indir = "." ! directory to read input abl restarts
cn_ablrst_outdir = "." ! directory to write output abl restarts
ln_rstart_abl = .false.
ln_hpgls_frc = .false.
ln_geos_winds = .false.
ln_smth_pblh = .false.
ln_rstart_abl = .false.,
ln_hpgls_frc = .false.,
ln_geos_winds = .false.,
ln_smth_pblh = .false.,
nn_dyn_restore = 0 ! restoring option for dynamical ABL variables: = 0 no restoring
! = 1 equatorial restoring
! = 2 global restoring
rn_vfac = 0.
rn_ldyn_min = 4.5 ! dynamics nudging magnitude inside the ABL [hour] (~3 rn_Dt)
rn_ldyn_max = 1.5 ! dynamics nudging magnitude above the ABL [hour] (~1 rn_Dt)
rn_ltra_min = 4.5 ! tracers nudging magnitude inside the ABL [hour] (~3 rn_Dt)
......@@ -343,9 +347,9 @@
&namsbc_cpl ! coupled ocean/atmosphere model ("key_oasis3")
!-----------------------------------------------------------------------
nn_cplmodel = 1 ! Maximum number of models to/from which NEMO is potentially sending/receiving data
ln_usecplmask = .false. ! use a coupling mask file to merge data received from several models
ln_usecplmask = .false., ! use a coupling mask file to merge data received from several models
! ! -> file cplmask.nc with the float variable called cplmask (jpi,jpj,nn_cplmodel)
ln_scale_ice_flux = .false. ! use ice fluxes that are already "ice weighted" ( i.e. multiplied ice concentration)
ln_scale_ice_flux = .false., ! use ice fluxes that are already "ice weighted" ( i.e. multiplied ice concentration)
nn_cats_cpl = 5 ! Number of sea ice categories over which coupling is to be carried out (if not 1)
!_____________!__________________________!____________!_____________!______________________!________!
! ! description ! multiple ! vector ! vector ! vector !
......@@ -397,9 +401,9 @@
!-----------------------------------------------------------------------
&namsbc_sas ! Stand-Alone Surface module: ocean data (SAS_SRC only)
!-----------------------------------------------------------------------
l_sasread = .true. ! =T Read in file ; =F set all to 0. (see sbcssm)
ln_3d_uve = .false. ! specify whether we are supplying a 3D u,v and e3 field
ln_read_frq = .false. ! specify whether we must read frq or not
l_sasread = .true., ! =T Read in file ; =F set all to 0. (see sbcssm)
ln_3d_uve = .false., ! specify whether we are supplying a 3D u,v and e3 field
ln_read_frq = .false., ! specify whether we must read frq or not
cn_dir = './' ! root directory for the ocean data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -431,13 +435,14 @@
&namtra_qsr ! penetrative solar radiation (ln_traqsr =T)
!-----------------------------------------------------------------------
! ! type of penetration (default: NO selection)
ln_qsr_rgb = .false. ! RGB light penetration (Red-Green-Blue)
ln_qsr_2bd = .false. ! 2BD light penetration (two bands)
ln_qsr_bio = .false. ! bio-model light penetration
ln_qsr_rgb = .false., ! RGB light penetration (Red-Green-Blue)
ln_qsr_2bd = .false., ! 2BD light penetration (two bands)
ln_qsr_bio = .false., ! bio-model light penetration
! ! RGB & 2BD choices:
rn_abs = 0.58 ! RGB & 2BD: fraction absorbed in the very near surface
rn_si0 = 0.35 ! RGB & 2BD: shortess depth of extinction
nn_chldta = 0 ! RGB : Chl data (=1) or cst value (=0)
rn_chl_conc = 0.05 ! Chlorophyll concentration (for nn_chldta=0)
rn_si1 = 23.0 ! 2BD : longest depth of extinction
cn_dir = './' ! root directory for the chlorophyl data location
......@@ -454,7 +459,7 @@
nn_sssr = 0 ! add a damping term to the surface freshwater flux (=2)
! ! or to SSS only (=1) or no damping term (=0)
rn_deds = -166.67 ! magnitude of the damping on salinity [mm/day]
ln_sssr_bnd = .true. ! flag to bound erp term (associated with nn_sssr=2)
ln_sssr_bnd = .true., ! flag to bound erp term (associated with nn_sssr=2)
rn_sssr_bnd = 4.e0 ! ABS(Max/Min) value of the damping erp term [mm/day]
nn_sssr_ice = 1 ! control of sea surface restoring under sea-ice
! 0 = no restoration under ice : * (1-icefrac)
......@@ -471,15 +476,15 @@
!-----------------------------------------------------------------------
&namsbc_rnf ! runoffs (ln_rnf =T)
!-----------------------------------------------------------------------
ln_rnf_mouth = .false. ! specific treatment at rivers mouths
ln_rnf_mouth = .false., ! specific treatment at rivers mouths
rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used (ln_rnf_mouth=T)
rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] (ln_rnf_mouth=T)
rn_rfact = 1.e0 ! multiplicative factor for runoff
ln_rnf_depth = .false. ! read in depth information for runoff
ln_rnf_tem = .false. ! read in temperature information for runoff
ln_rnf_sal = .false. ! read in salinity information for runoff
ln_rnf_icb = .false. ! read iceberg flux
ln_rnf_depth_ini = .false. ! compute depth at initialisation from runoff file
ln_rnf_depth = .false., ! read in depth information for runoff
ln_rnf_tem = .false., ! read in temperature information for runoff
ln_rnf_sal = .false., ! read in salinity information for runoff
ln_rnf_icb = .false., ! read iceberg flux
ln_rnf_depth_ini = .false., ! compute depth at initialisation from runoff file
rn_rnf_max = 5.735e-4 ! max value of the runoff climatologie over global domain ( ln_rnf_depth_ini = .true )
rn_dep_max = 150. ! depth over which runoffs is spread ( ln_rnf_depth_ini = .true )
nn_rnf_depth_file = 0 ! create (=1) a runoff depth file or not (=0)
......@@ -499,8 +504,8 @@
&namsbc_apr ! Atmospheric pressure used as ocean forcing (ln_apr_dyn =T)
!-----------------------------------------------------------------------
rn_pref = 101000. ! reference atmospheric pressure [N/m2]/
ln_ref_apr = .false. ! ref. pressure: global mean Patm (T) or a constant (F)
ln_apr_obc = .false. ! inverse barometer added to OBC ssh data
ln_ref_apr = .false., ! ref. pressure: global mean Patm (T) or a constant (F)
ln_apr_obc = .false., ! inverse barometer added to OBC ssh data
cn_dir = './' ! root directory for the Patm data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -520,13 +525,13 @@
!
! ---------------- ice shelf melt formulation -------------------------------
!
ln_isf = .false. ! activate ice shelf module
ln_isfdebug = .false. ! add debug print in ISF code (global min/max/sum of specific variable)
ln_isf = .false., ! activate ice shelf module
ln_isfdebug = .false., ! add debug print in ISF code (global min/max/sum of specific variable)
cn_isfdir = './' ! directory for all ice shelf input file
!
! ---------------- cavities opened -------------------------------
!
ln_isfcav_mlt = .false. ! ice shelf melting into the cavity (need ln_isfcav = .true. in domain_cfg.nc)
ln_isfcav_mlt = .false., ! ice shelf melting into the cavity (need ln_isfcav = .true. in domain_cfg.nc)
cn_isfcav_mlt = '3eq' ! ice shelf melting formulation (spe/2eq/3eq/oasis)
! ! spe = fwfisf is read from a forcing field ( melt > 0; freezing < 0 )
! ! 2eq = ISOMIP like: 2 equations formulation (Hunter et al., 2006 for a short description)
......@@ -551,7 +556,7 @@
!
! ---------------- cavities parametrised -------------------------------
!
ln_isfpar_mlt = .false. ! ice shelf melting parametrised
ln_isfpar_mlt = .false., ! ice shelf melting parametrised
cn_isfpar_mlt = 'spe' ! ice shelf melting parametrisation (spe/bg03/oasis)
! ! spe = fwfisf is read from a forcing field ( melt > 0; freezing < 0 )
! ! bg03 = melt computed using Beckmann and Goosse parametrisation
......@@ -578,26 +583,26 @@
!
! ---------------- ice sheet coupling -------------------------------
!
ln_isfcpl = .false.
ln_isfcpl = .false.,
nn_drown = 10 ! number of iteration of the extrapolation loop (fill the new wet cells)
ln_isfcpl_cons = .false.
ln_isfcpl_cons = .false.,
/
!-----------------------------------------------------------------------
&namsbc_wave ! External fields from wave model (ln_wave=T)
!-----------------------------------------------------------------------
ln_sdw = .false. ! get the 2D Surf Stokes Drift & Compute the 3D stokes drift
ln_stcor = .false. ! add Stokes Coriolis and tracer advection terms
ln_cdgw = .false. ! Neutral drag coefficient read from wave model
ln_tauoc = .false. ! ocean stress is modified by wave induced stress
ln_wave_test= .false. ! Test case with constant wave fields
ln_sdw = .false., ! get the 2D Surf Stokes Drift & Compute the 3D stokes drift
ln_stcor = .false., ! add Stokes Coriolis and tracer advection terms
ln_cdgw = .false., ! Neutral drag coefficient read from wave model
ln_tauoc = .false., ! ocean stress is modified by wave induced stress
ln_wave_test= .false., ! Test case with constant wave fields
!
ln_charn = .false. ! Charnock coefficient read from wave model (IFS only)
ln_taw = .false. ! ocean stress is modified by wave induced stress (coupled mode)
ln_phioc = .false. ! TKE flux from wave model
ln_bern_srfc= .false. ! wave induced pressure. Bernoulli head J term
ln_breivikFV_2016 = .false. ! breivik 2016 vertical stokes profile
ln_vortex_force = .false. ! Vortex Force term
ln_stshear = .false. ! include stokes shear in EKE computation
ln_charn = .false., ! Charnock coefficient read from wave model (IFS only)
ln_taw = .false., ! ocean stress is modified by wave induced stress (coupled mode)
ln_phioc = .false., ! TKE flux from wave model
ln_bern_srfc= .false., ! wave induced pressure. Bernoulli head J term
ln_breivikFV_2016 = .false., ! breivik 2016 vertical stokes profile
ln_vortex_force = .false., ! Vortex Force term
ln_stshear = .false., ! include stokes shear in EKE computation
!
cn_dir = './' ! root directory for the waves data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -614,7 +619,7 @@
!-----------------------------------------------------------------------
&namberg ! iceberg parameters (default: OFF)
!-----------------------------------------------------------------------
ln_icebergs = .false. ! activate iceberg floats (force =F with "key_agrif")
ln_icebergs = .false., ! activate iceberg floats (force =F with "key_agrif")
!
! ! restart
cn_icbrst_in = "restart_icb" ! suffix of iceberg restart name (input)
......@@ -623,7 +628,7 @@
cn_icbrst_outdir = "./" ! directory from which to read output ocean restarts
!
! ! diagnostics:
ln_bergdia = .true. ! Calculate budgets
ln_bergdia = .true., ! Calculate budgets
nn_verbose_level = 0 ! Turn on more verbose output if level > 0
!
! nn_verbose_write and nn_sample_rate need to be a multiple of nn_fsbc
......@@ -643,18 +648,18 @@
!
rn_rho_bergs = 850. ! Density of icebergs
rn_LoW_ratio = 1.5 ! Initial ratio L/W for newly calved icebergs
ln_operator_splitting = .true. ! Use first order operator splitting for thermodynamics
ln_operator_splitting = .true., ! Use first order operator splitting for thermodynamics
rn_bits_erosion_fraction = 0. ! Fraction of erosion melt flux to divert to bergy bits
rn_sicn_shift = 0. ! Shift of sea-ice concn in erosion flux (0<sicn_shift<1)
ln_passive_mode = .false. ! iceberg - ocean decoupling
ln_passive_mode = .false., ! iceberg - ocean decoupling
nn_test_icebergs = 10 ! Create test icebergs of this class (-1 = no)
! ! Put a test iceberg at each gridpoint in box (lon1,lon2,lat1,lat2)
rn_test_box = 108.0, 116.0, -66.0, -58.0
ln_use_calving = .false. ! Use calving data even when nn_test_icebergs > 0
ln_use_calving = .false., ! Use calving data even when nn_test_icebergs > 0
rn_speed_limit = 0. ! CFL speed limit for a berg (safe value is 0.4, see #2581)
!
ln_M2016 = .false. ! use Merino et al. (2016) modification (use of 3d ocean data instead of only sea surface data)
ln_icb_grd = .false. ! ground icb when icb bottom level hit oce bottom level (need ln_M2016 to be activated)
ln_M2016 = .false., ! use Merino et al. (2016) modification (use of 3d ocean data instead of only sea surface data)
ln_icb_grd = .false., ! ground icb when icb bottom level hit oce bottom level (need ln_M2016 to be activated)
!
cn_dir = './' ! root directory for the calving data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -684,16 +689,17 @@
!-----------------------------------------------------------------------
! ! free slip ! partial slip ! no slip ! strong slip
rn_shlat = -9999. ! shlat = 0 ! 0 < shlat < 2 ! shlat = 2 ! 2 < shlat
ln_vorlat = .false. ! consistency of vorticity boundary condition with analytical Eqs.
ln_vorlat = .false., ! consistency of vorticity boundary condition with analytical Eqs.
ln_shlat2d = .false., !
/
!-----------------------------------------------------------------------
&namagrif ! AGRIF zoom ("key_agrif")
!-----------------------------------------------------------------------
ln_agrif_2way = .true. ! activate two way nesting
ln_init_chfrpar = .false. ! initialize child grids from parent
ln_vert_remap = .false. ! use vertical remapping
ln_spc_dyn = .false. ! use 0 as special value for dynamics
ln_chk_bathy = .true. ! =T check the parent bathymetry
ln_agrif_2way = .true., ! activate two way nesting
ln_init_chfrpar = .false., ! initialize child grids from parent
ln_vert_remap = .false., ! use vertical remapping
ln_spc_dyn = .false., ! use 0 as special value for dynamics
ln_chk_bathy = .true., ! =T check the parent bathymetry
rn_sponge_tra = 0.002 ! coefficient for tracer sponge layer []
rn_sponge_dyn = 0.002 ! coefficient for dynamics sponge layer []
rn_trelax_tra = 0.01 ! inverse of relaxation time (in steps) for tracers []
......@@ -702,29 +708,29 @@
!-----------------------------------------------------------------------
&nam_tide ! tide parameters (default: OFF)
!-----------------------------------------------------------------------
ln_tide = .false. ! Activate tides
ln_tide = .false., ! Activate tides
nn_tide_var = 1 ! Variant of tidal parameter set and tide-potential computation
! ! (1: default; 0: compatibility with previous versions)
ln_tide_dia = .false. ! Enable tidal diagnostic output
ln_tide_pot = .false. ! use tidal potential forcing
ln_tide_dia = .false., ! Enable tidal diagnostic output
ln_tide_pot = .false., ! use tidal potential forcing
rn_tide_gamma = 0.7 ! Tidal tilt factor
ln_scal_load = .false. ! Use scalar approximation for
ln_scal_load = .false., ! Use scalar approximation for
rn_scal_load = 0.094 ! load potential
ln_read_load = .false. ! Or read load potential from file
ln_read_load = .false., ! Or read load potential from file
cn_tide_load = 'tide_LOAD_grid_T.nc' ! filename for load potential
!
ln_tide_ramp = .false. ! Use linear ramp for tides at startup
ln_tide_ramp = .false., ! Use linear ramp for tides at startup
rn_tide_ramp_dt = 0. ! ramp duration in days
sn_tide_cnames(1) = 'DUMMY' ! name of constituent - all tidal components must be set in namelist_cfg
/
!-----------------------------------------------------------------------
&nambdy ! unstructured open boundaries (default: OFF)
!-----------------------------------------------------------------------
ln_bdy = .false. ! Use unstructured open boundaries
ln_bdy = .false., ! Use unstructured open boundaries
nb_bdy = 0 ! number of open boundary sets
ln_coords_file = .true. ! =T : read bdy coordinates from file
ln_coords_file = .true., ! =T : read bdy coordinates from file
cn_coords_file = 'coordinates.bdy.nc' ! bdy coordinates files
ln_mask_file = .false. ! =T : read mask from file
ln_mask_file = .false., ! =T : read mask from file
cn_mask_file = '' ! name of mask file (if ln_mask_file=.TRUE.)
cn_dyn2d = 'none' !
nn_dyn2d_dta = 0 ! = 0, bdy data are equal to the initial state
......@@ -741,20 +747,20 @@
nn_ice_dta = 0 ! = 0, bdy data are equal to the initial state
! ! = 1, bdy data are read in 'bdydata .nc' files
!
ln_tra_dmp =.false. ! open boudaries conditions for tracers
ln_dyn3d_dmp =.false. ! open boundary condition for baroclinic velocities
ln_tra_dmp =.false., ! open boudaries conditions for tracers
ln_dyn3d_dmp =.false., ! open boundary condition for baroclinic velocities
rn_time_dmp = 1. ! Damping time scale in days
rn_time_dmp_out = 1. ! Outflow damping time scale
nn_rimwidth = 10 ! width of the relaxation zone
ln_vol = .false. ! total volume correction (see nn_volctl parameter)
ln_vol = .false., ! total volume correction (see nn_volctl parameter)
nn_volctl = 1 ! = 0, the total water flux across open boundaries is zero
/
!-----------------------------------------------------------------------
&nambdy_dta ! open boundaries - external data (see nam_bdy)
!-----------------------------------------------------------------------
ln_zinterp = .false. ! T if a vertical interpolation is required. Variables gdep[tuv] and e3[tuv] must exist in the file
ln_zinterp = .false., ! T if a vertical interpolation is required. Variables gdep[tuv] and e3[tuv] must exist in the file
! ! automatically defined to T if the number of vertical levels in bdy dta /= jpk
ln_full_vel = .false. ! T if [uv]3d are "full" velocities and not only its baroclinic components
ln_full_vel = .false., ! T if [uv]3d are "full" velocities and not only its baroclinic components
! ! in this case, baroclinic and barotropic velocities will be recomputed -> [uv]2d not needed
!
cn_dir = 'bdydta/' ! root directory for the BDY data location
......@@ -792,7 +798,7 @@
&nambdy_tide ! tidal forcing at open boundaries (default: OFF)
!-----------------------------------------------------------------------
filtide = 'bdydta/amm12_bdytide_' ! file name root of tidal forcing files
ln_bdytide_2ddta = .false. !
ln_bdytide_2ddta = .false., !
/
!!======================================================================
......@@ -808,13 +814,13 @@
!-----------------------------------------------------------------------
&namdrg ! top/bottom drag coefficient (default: NO selection)
!-----------------------------------------------------------------------
ln_drg_OFF = .false. ! free-slip : Cd = 0 (F => fill namdrg_bot
ln_lin = .false. ! linear drag: Cd = Cd0 Uc0 & namdrg_top)
ln_non_lin = .false. ! non-linear drag: Cd = Cd0 |U|
ln_loglayer = .false. ! logarithmic drag: Cd = vkarmn/log(z/z0) |U|
ln_drg_OFF = .false., ! free-slip : Cd = 0 (F => fill namdrg_bot
ln_lin = .false., ! linear drag: Cd = Cd0 Uc0 & namdrg_top)
ln_non_lin = .false., ! non-linear drag: Cd = Cd0 |U|
ln_loglayer = .false., ! logarithmic drag: Cd = vkarmn/log(z/z0) |U|
!
ln_drgimp = .true. ! implicit top/bottom friction flag
ln_drgice_imp = .true. ! implicit ice-ocean drag
ln_drgimp = .true., ! implicit top/bottom friction flag
ln_drgice_imp = .true., ! implicit ice-ocean drag
/
!-----------------------------------------------------------------------
&namdrg_top ! TOP friction (ln_drg_OFF =F & ln_isfcav=T)
......@@ -824,7 +830,7 @@
rn_Cdmax = 0.1 ! drag value maximum [-] (logarithmic drag)
rn_ke0 = 2.5e-3 ! background kinetic energy [m2/s2] (non-linear cases)
rn_z0 = 3.0e-3 ! roughness [m] (ln_loglayer=T)
ln_boost = .false. ! =T regional boost of Cd0 ; =F constant
ln_boost = .false., ! =T regional boost of Cd0 ; =F constant
rn_boost = 50. ! local boost factor [-]
/
!-----------------------------------------------------------------------
......@@ -835,13 +841,13 @@
rn_Cdmax = 0.1 ! drag value maximum [-] (logarithmic drag)
rn_ke0 = 2.5e-3 ! background kinetic energy [m2/s2] (non-linear cases)
rn_z0 = 3.e-3 ! roughness [m] (ln_loglayer=T)
ln_boost = .false. ! =T regional boost of Cd0 ; =F constant
ln_boost = .false., ! =T regional boost of Cd0 ; =F constant
rn_boost = 50. ! local boost factor [-]
/
!-----------------------------------------------------------------------
&nambbc ! bottom temperature boundary condition (default: OFF)
!-----------------------------------------------------------------------
ln_trabbc = .false. ! Apply a geothermal heating at the ocean bottom
ln_trabbc = .false., ! Apply a geothermal heating at the ocean bottom
nn_geoflx = 2 ! geothermal heat flux: = 1 constant flux
! ! = 2 read variable flux [mW/m2]
rn_geoflx_cst = 86.4e-3 ! Constant value of geothermal heat flux [mW/m2]
......@@ -855,7 +861,7 @@
!-----------------------------------------------------------------------
&nambbl ! bottom boundary layer scheme (default: OFF)
!-----------------------------------------------------------------------
ln_trabbl = .false. ! Bottom Boundary Layer parameterisation flag
ln_trabbl = .false., ! Bottom Boundary Layer parameterisation flag
nn_bbl_ldf = 1 ! diffusive bbl (=1) or not (=0)
nn_bbl_adv = 0 ! advective bbl (=1/2) or not (=0)
rn_ahtbbl = 1000. ! lateral mixing coefficient in the bbl [m2/s]
......@@ -876,9 +882,9 @@
!-----------------------------------------------------------------------
&nameos ! ocean Equation Of Seawater (default: NO selection)
!-----------------------------------------------------------------------
ln_teos10 = .false. ! = Use TEOS-10
ln_eos80 = .false. ! = Use EOS80
ln_seos = .false. ! = Use S-EOS (simplified Eq.)
ln_teos10 = .false., ! = Use TEOS-10
ln_eos80 = .false., ! = Use EOS80
ln_seos = .false., ! = Use S-EOS (simplified Eq.)
!
! ! S-EOS coefficients (ln_seos=T):
! ! rd(T,S,Z)*rho0 = -a0*(1+.5*lambda*dT+mu*Z+nu*dS)*dT+b0*dS
......@@ -893,39 +899,39 @@
!-----------------------------------------------------------------------
&namtra_adv ! advection scheme for tracer (default: NO selection)
!-----------------------------------------------------------------------
ln_traadv_OFF = .false. ! No tracer advection
ln_traadv_cen = .false. ! 2nd order centered scheme
ln_traadv_OFF = .false., ! No tracer advection
ln_traadv_cen = .false., ! 2nd order centered scheme
nn_cen_h = 4 ! =2/4, horizontal 2nd order CEN / 4th order CEN
nn_cen_v = 4 ! =2/4, vertical 2nd order CEN / 4th order COMPACT
ln_traadv_fct = .false. ! FCT scheme
ln_traadv_fct = .false., ! FCT scheme
nn_fct_h = 2 ! =2/4, horizontal 2nd / 4th order
nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
ln_traadv_mus = .false. ! MUSCL scheme
ln_mus_ups = .false. ! use upstream scheme near river mouths
ln_traadv_ubs = .false. ! UBS scheme
ln_traadv_mus = .false., ! MUSCL scheme
ln_mus_ups = .false., ! use upstream scheme near river mouths
ln_traadv_ubs = .false., ! UBS scheme
nn_ubs_v = 2 ! =2 , vertical 2nd order FCT / COMPACT 4th order
ln_traadv_qck = .false. ! QUICKEST scheme
ln_traadv_qck = .false., ! QUICKEST scheme
/
!-----------------------------------------------------------------------
&namtra_ldf ! lateral diffusion scheme for tracers (default: NO selection)
!-----------------------------------------------------------------------
! ! Operator type:
ln_traldf_OFF = .false. ! No explicit diffusion
ln_traldf_lap = .false. ! laplacian operator
ln_traldf_blp = .false. ! bilaplacian operator
ln_traldf_OFF = .false., ! No explicit diffusion
ln_traldf_lap = .false., ! laplacian operator
ln_traldf_blp = .false., ! bilaplacian operator
!
! ! Direction of action:
ln_traldf_lev = .false. ! iso-level
ln_traldf_hor = .false. ! horizontal (geopotential)
ln_traldf_iso = .false. ! iso-neutral (standard operator)
ln_traldf_triad = .false. ! iso-neutral (triad operator)
ln_traldf_lev = .false., ! iso-level
ln_traldf_hor = .false., ! horizontal (geopotential)
ln_traldf_iso = .false., ! iso-neutral (standard operator)
ln_traldf_triad = .false., ! iso-neutral (triad operator)
!
! ! iso-neutral options:
ln_traldf_msc = .false. ! Method of Stabilizing Correction (both operators)
ln_traldf_msc = .false., ! Method of Stabilizing Correction (both operators)
rn_slpmax = 0.01 ! slope limit (both operators)
ln_triad_iso = .false. ! pure horizontal mixing in ML (triad only)
ln_triad_iso = .false., ! pure horizontal mixing in ML (triad only)
rn_sw_triad = 1 ! =1 switching triad ; =0 all 4 triads used (triad only)
ln_botmix_triad = .false. ! lateral mixing on bottom (triad only)
ln_botmix_triad = .false., ! lateral mixing on bottom (triad only)
!
! ! Coefficients:
nn_aht_ijk_t = 0 ! space/time variation of eddy coefficient:
......@@ -944,7 +950,7 @@
!-----------------------------------------------------------------------
&namtra_mle ! mixed layer eddy parametrisation (Fox-Kemper) (default: OFF)
!-----------------------------------------------------------------------
ln_mle = .false. ! (T) use the Mixed Layer Eddy (MLE) parameterisation
ln_mle = .false., ! (T) use the Mixed Layer Eddy (MLE) parameterisation
rn_ce = 0.06 ! magnitude of the MLE (typical value: 0.06 to 0.08)
nn_mle = 1 ! MLE type: =0 standard Fox-Kemper ; =1 new formulation
rn_lf = 5.e+3 ! typical scale of mixed layer front (meters) (case rn_mle=0)
......@@ -957,7 +963,7 @@
!-----------------------------------------------------------------------
&namtra_eiv ! eddy induced velocity param. (default: OFF)
!-----------------------------------------------------------------------
ln_ldfeiv = .false. ! use eddy induced velocity parameterization
ln_ldfeiv = .false., ! use eddy induced velocity parameterization
!
! ! Coefficients:
nn_aei_ijk_t = 0 ! space/time variation of eddy coefficient:
......@@ -971,12 +977,13 @@
rn_Ue = 0.02 ! lateral diffusive velocity [m/s] (nn_aht_ijk_t= 0, 10, 20, 30)
rn_Le = 200.e+3 ! lateral diffusive length [m] (nn_aht_ijk_t= 0, 10)
!
ln_ldfeiv_dia =.false. ! diagnose eiv stream function and velocities
nn_ldfeiv_shape = 0 !
ln_ldfeiv_dia =.false., ! diagnose eiv stream function and velocities
/
!-----------------------------------------------------------------------
&namtra_dmp ! tracer: T & S newtonian damping (default: OFF)
!-----------------------------------------------------------------------
ln_tradmp = .false. ! add a damping term (using resto.nc coef.)
ln_tradmp = .false., ! add a damping term (using resto.nc coef.)
nn_zdmp = 0 ! vertical shape =0 damping throughout the water column
! ! =1 no damping in the mixing layer (kz criteria)
! ! =2 no damping in the mixed layer (rho crieria)
......@@ -998,16 +1005,16 @@
!-----------------------------------------------------------------------
&nam_vvl ! vertical coordinate options (default: z-star)
!-----------------------------------------------------------------------
ln_vvl_zstar = .true. ! z-star vertical coordinate
ln_vvl_ztilde = .false. ! z-tilde vertical coordinate: only high frequency variations
ln_vvl_layer = .false. ! full layer vertical coordinate
ln_vvl_ztilde_as_zstar = .false. ! ztilde vertical coordinate emulating zstar
ln_vvl_zstar_at_eqtor = .false. ! ztilde near the equator
ln_vvl_zstar = .true., ! z-star vertical coordinate
ln_vvl_ztilde = .false., ! z-tilde vertical coordinate: only high frequency variations
ln_vvl_layer = .false., ! full layer vertical coordinate
ln_vvl_ztilde_as_zstar = .false., ! ztilde vertical coordinate emulating zstar
ln_vvl_zstar_at_eqtor = .false., ! ztilde near the equator
rn_ahe3 = 0.0 ! thickness diffusion coefficient
rn_rst_e3t = 30.0 ! ztilde to zstar restoration timescale [days]
rn_lf_cutoff = 5.0 ! cutoff frequency for low-pass filter [days]
rn_zdef_max = 0.9 ! maximum fractional e3t deformation
ln_vvl_dbg = .false. ! debug prints (T/F)
ln_vvl_dbg = .false., ! debug prints (T/F)
nn_vvl_interp = 2 ! interpolation method of scale factor anomalies at U/V/F points
! =0 linear even at the bottom (old)
! =1 linear with bottom correction
......@@ -1016,24 +1023,24 @@
!-----------------------------------------------------------------------
&namdyn_adv ! formulation of the momentum advection (default: NO selection)
!-----------------------------------------------------------------------
ln_dynadv_OFF = .false. ! linear dynamics (no momentum advection)
ln_dynadv_vec = .false. ! vector form - 2nd centered scheme
ln_dynadv_OFF = .false., ! linear dynamics (no momentum advection)
ln_dynadv_vec = .false., ! vector form - 2nd centered scheme
nn_dynkeg = 0 ! grad(KE) scheme: =0 C2 ; =1 Hollingsworth correction
ln_dynadv_cen2 = .false. ! flux form - 2nd order centered scheme
ln_dynadv_ubs = .false. ! flux form - 3rd order UBS OLD scheme
ln_dynadv_up3 = .false. ! flux form - 3rd order UBS NEW scheme
ln_dynadv_cen2 = .false., ! flux form - 2nd order centered scheme
ln_dynadv_ubs = .false., ! flux form - 3rd order UBS OLD scheme
ln_dynadv_up3 = .false., ! flux form - 3rd order UBS NEW scheme
/
!-----------------------------------------------------------------------
&namdyn_vor ! Vorticity / Coriolis scheme (default: NO selection)
!-----------------------------------------------------------------------
ln_dynvor_ene = .false. ! energy conserving scheme
ln_dynvor_ens = .false. ! enstrophy conserving scheme
ln_dynvor_mix = .false. ! mixed scheme
ln_dynvor_enT = .false. ! energy conserving scheme (T-point)
ln_dynvor_eeT = .false. ! energy conserving scheme (een using e3t)
ln_dynvor_een = .false. ! energy & enstrophy scheme
ln_dynvor_ene = .false., ! energy conserving scheme
ln_dynvor_ens = .false., ! enstrophy conserving scheme
ln_dynvor_mix = .false., ! mixed scheme
ln_dynvor_enT = .false., ! energy conserving scheme (T-point)
ln_dynvor_eeT = .false., ! energy conserving scheme (een using e3t)
ln_dynvor_een = .false., ! energy & enstrophy scheme
!
ln_dynvor_msk = .false. ! vorticity multiplied by fmask (=T) ==>>> PLEASE DO NOT ACTIVATE
ln_dynvor_msk = .false., ! vorticity multiplied by fmask (=T) ==>>> PLEASE DO NOT ACTIVATE
! ! (f-point vorticity schemes only)
!
nn_e3f_typ = 0 ! type of e3f (EEN, ENE, ENS, MIX only) =0 e3f = mi(mj(e3t))/4
......@@ -1042,26 +1049,26 @@
!-----------------------------------------------------------------------
&namdyn_hpg ! Hydrostatic pressure gradient option (default: NO selection)
!-----------------------------------------------------------------------
ln_hpg_zco = .false. ! z-coordinate - full steps
ln_hpg_zps = .false. ! z-coordinate - partial steps (interpolation)
ln_hpg_sco = .false. ! s-coordinate (standard jacobian formulation)
ln_hpg_isf = .false. ! s-coordinate (sco ) adapted to isf
ln_hpg_djc = .false. ! s-coordinate (Density Jacobian with Cubic polynomial)
ln_hpg_djc_vnh = .true. ! hor. bc type for djc scheme (T=von Neumann, F=linear extrapolation)
ln_hpg_djc_vnv = .true. ! vert. bc type for djc scheme (T=von Neumann, F=linear extrapolation)
ln_hpg_prj = .false. ! s-coordinate (Pressure Jacobian scheme)
ln_hpg_zco = .false., ! z-coordinate - full steps
ln_hpg_zps = .false., ! z-coordinate - partial steps (interpolation)
ln_hpg_sco = .false., ! s-coordinate (standard jacobian formulation)
ln_hpg_isf = .false., ! s-coordinate (sco ) adapted to isf
ln_hpg_djc = .false., ! s-coordinate (Density Jacobian with Cubic polynomial)
ln_hpg_djc_vnh = .true., ! hor. bc type for djc scheme (T=von Neumann, F=linear extrapolation)
ln_hpg_djc_vnv = .true., ! vert. bc type for djc scheme (T=von Neumann, F=linear extrapolation)
ln_hpg_prj = .false., ! s-coordinate (Pressure Jacobian scheme)
/
!-----------------------------------------------------------------------
&namdyn_spg ! surface pressure gradient (default: NO selection)
!-----------------------------------------------------------------------
ln_dynspg_exp = .false. ! explicit free surface
ln_dynspg_ts = .false. ! split-explicit free surface
ln_bt_fw = .true. ! Forward integration of barotropic Eqs.
ln_bt_av = .true. ! Time filtering of barotropic variables
ln_dynspg_exp = .false., ! explicit free surface
ln_dynspg_ts = .false., ! split-explicit free surface
ln_bt_fw = .true., ! Forward integration of barotropic Eqs.
ln_bt_av = .true., ! Time filtering of barotropic variables
nn_bt_flt = 1 ! Time filter choice = 0 None
! ! = 1 Boxcar over nn_e sub-steps
! ! = 2 Boxcar over 2*nn_e " "
ln_bt_auto = .true. ! Number of sub-step defined from:
ln_bt_auto = .true., ! Number of sub-step defined from:
rn_bt_cmax = 0.8 ! =T : the Maximum Courant Number allowed
nn_e = 30 ! =F : the number of sub-step in rn_Dt seconds
rn_bt_alpha = 0. ! Temporal diffusion parameter (if ln_bt_av=F)
......@@ -1070,14 +1077,14 @@
&namdyn_ldf ! lateral diffusion on momentum (default: NO selection)
!-----------------------------------------------------------------------
! ! Type of the operator :
ln_dynldf_OFF = .false. ! No operator (i.e. no explicit diffusion)
ln_dynldf_OFF = .false., ! No operator (i.e. no explicit diffusion)
nn_dynldf_typ = 0 ! =0 div-rot (default) ; =1 symmetric
ln_dynldf_lap = .false. ! laplacian operator
ln_dynldf_blp = .false. ! bilaplacian operator
ln_dynldf_lap = .false., ! laplacian operator
ln_dynldf_blp = .false., ! bilaplacian operator
! ! Direction of action :
ln_dynldf_lev = .false. ! iso-level
ln_dynldf_hor = .false. ! horizontal (geopotential)
ln_dynldf_iso = .false. ! iso-neutral (lap only)
ln_dynldf_lev = .false., ! iso-level
ln_dynldf_hor = .false., ! horizontal (geopotential)
ln_dynldf_iso = .false., ! iso-neutral (lap only)
! ! Coefficient
nn_ahm_ijk_t = 0 ! space/time variation of eddy coefficient :
! ! =-30 read in eddy_viscosity_3D.nc file
......@@ -1102,8 +1109,8 @@
!-----------------------------------------------------------------------
&namdta_dyn ! offline ocean input files (OFF_SRC only)
!-----------------------------------------------------------------------
ln_dynrnf = .false. ! runoffs option enabled (T) or not (F)
ln_dynrnf_depth = .false. ! runoffs is spread in vertical (T) or not (F)
ln_dynrnf = .false., ! runoffs option enabled (T) or not (F)
ln_dynrnf_depth = .false., ! runoffs is spread in vertical (T) or not (F)
!
cn_dir = './' ! root directory for the ocean data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -1140,31 +1147,32 @@
&namzdf ! vertical physics manager (default: NO selection)
!-----------------------------------------------------------------------
! ! adaptive-implicit vertical advection
ln_zad_Aimp = .false. ! Courant number dependent scheme (Shchepetkin 2015)
ln_zad_Aimp = .false., ! Courant number dependent scheme (Shchepetkin 2015)
!
! ! type of vertical closure (required)
ln_zdfcst = .false. ! constant mixing
ln_zdfric = .false. ! local Richardson dependent formulation (T => fill namzdf_ric)
ln_zdftke = .false. ! Turbulent Kinetic Energy closure (T => fill namzdf_tke)
ln_zdfgls = .false. ! Generic Length Scale closure (T => fill namzdf_gls)
ln_zdfosm = .false. ! OSMOSIS BL closure (T => fill namzdf_osm)
ln_zdfcst = .false., ! constant mixing
ln_zdfric = .false., ! local Richardson dependent formulation (T => fill namzdf_ric)
ln_zdftke = .false., ! Turbulent Kinetic Energy closure (T => fill namzdf_tke)
ln_zdfgls = .false., ! Generic Length Scale closure (T => fill namzdf_gls)
ln_zdfosm = .false., ! OSMOSIS BL closure (T => fill namzdf_osm)
!
! ! convection
ln_zdfevd = .false. ! enhanced vertical diffusion
ln_zdfevd = .false., ! enhanced vertical diffusion
nn_evdm = 0 ! apply on tracer (=0) or on tracer and momentum (=1)
rn_evd = 100. ! mixing coefficient [m2/s]
ln_zdfnpc = .false. ! Non-Penetrative Convective algorithm
ln_zdfnpc = .false., ! Non-Penetrative Convective algorithm
nn_npc = 1 ! frequency of application of npc
nn_npcp = 365 ! npc control print frequency
ln_zdfmfc = .false. ! Mass Flux Convection
ln_zdfmfc = .false., ! Mass Flux Convection
!
ln_zdfddm = .false. ! double diffusive mixing
ln_zdfddm = .false., ! double diffusive mixing
rn_avts = 1.e-4 ! maximum avs (vertical mixing on salinity)
rn_hsbfr = 1.6 ! heat/salt buoyancy flux ratio
!
! ! gravity wave-driven vertical mixing
ln_zdfiwm = .false. ! internal wave-induced mixing (T => fill namzdf_iwm)
ln_zdfswm = .false. ! surface wave-induced mixing (T => ln_wave=ln_sdw=T )
ln_zdfiwm = .false., ! internal wave-induced mixing (T => fill namzdf_iwm)
ln_zdfswm = .false., ! surface wave-induced mixing (T => ln_wave=ln_sdw=T )
ln_zdftmx = .false., !
!
! ! coefficients
rn_avm0 = 1.2e-4 ! vertical eddy viscosity [m2/s] (background Kz if ln_zdfcst=F)
......@@ -1178,7 +1186,7 @@
rn_avmri = 100.e-4 ! maximum value of the vertical viscosity
rn_alp = 5. ! coefficient of the parameterization
nn_ric = 2 ! coefficient of the parameterization
ln_mldw = .false. ! enhanced mixing in the Ekman layer
ln_mldw = .false., ! enhanced mixing in the Ekman layer
rn_ekmfc = 0.7 ! Factor in the Ekman depth Equation
rn_mldmin = 1.0 ! minimum allowable mixed-layer depth estimate (m)
rn_mldmax = 1000.0 ! maximum allowable mixed-layer depth estimate (m)
......@@ -1199,7 +1207,7 @@
! ! = 1 bounded by the local vertical scale factor
! ! = 2 first vertical derivative of mixing length bounded by 1
! ! = 3 as =2 with distinct dissipative an mixing length scale
ln_mxl0 = .true. ! surface mixing length scale = F(wind stress) (T) or not (F)
ln_mxl0 = .true., ! surface mixing length scale = F(wind stress) (T) or not (F)
nn_mxlice = 0 ! type of scaling under sea-ice
! ! = 0 no scaling under sea-ice
! ! = 1 scaling with constant sea-ice thickness
......@@ -1207,8 +1215,8 @@
! ! = 3 scaling with maximum sea-ice thickness
rn_mxlice = 10. ! max constant ice thickness value when scaling under sea-ice ( nn_mxlice=1)
rn_mxl0 = 0.04 ! surface buoyancy lenght scale minimum value
ln_mxhsw = .false. ! surface mixing length scale = F(wave height)
ln_lc = .true. ! Langmuir cell parameterisation (Axell 2002)
ln_mxhsw = .false., ! surface mixing length scale = F(wave height)
ln_lc = .true., ! Langmuir cell parameterisation (Axell 2002)
rn_lc = 0.15 ! coef. associated to Langmuir cells
nn_etau = 1 ! penetration of tke below the mixed layer (ML) due to NIWs
! ! = 0 none ; = 1 add a tke source below the ML
......@@ -1218,6 +1226,7 @@
nn_htau = 1 ! type of exponential decrease of tke penetration below the ML
! ! = 0 constant 10 m length scale
! ! = 1 0.5m at the equator to 30m poleward of 40 degrees
rn_htau_scaling = 1.0 ! scaling factor to apply to depth of TKE penetration
nn_eice = 1 ! attenutaion of langmuir & surface wave breaking under ice
! ! = 0 no impact of ice cover on langmuir & surface wave breaking
! ! = 1 weigthed by 1-TANH(10*fr_i)
......@@ -1231,9 +1240,9 @@
!-----------------------------------------------------------------------
rn_emin = 1.e-7 ! minimum value of e [m2/s2]
rn_epsmin = 1.e-12 ! minimum value of eps [m2/s3]
ln_length_lim = .true. ! limit on the dissipation rate under stable stratification (Galperin et al., 1988)
ln_length_lim = .true., ! limit on the dissipation rate under stable stratification (Galperin et al., 1988)
rn_clim_galp = 0.267 ! galperin limit
ln_sigpsi = .true. ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case
ln_sigpsi = .true., ! Activate or not Burchard 2001 mods on psi schmidt number in the wb case
rn_crban = 100. ! Craig and Banner 1994 constant for wb tke flux
rn_charn = 70000. ! Charnock constant for wb induced roughness length
rn_hsro = 0.02 ! Minimum surface roughness
......@@ -1259,18 +1268,18 @@
!-----------------------------------------------------------------------
&namzdf_osm ! OSM vertical diffusion (ln_zdfosm =T)
!-----------------------------------------------------------------------
ln_use_osm_la = .false. ! Use rn_osm_la
ln_use_osm_la = .false., ! Use rn_osm_la
rn_osm_la = 0.3 ! Turbulent Langmuir number
rn_zdfosm_adjust_sd = 1.0 ! Stokes drift reduction factor
rn_osm_hblfrac = 0.1 ! specify top part of hbl for nn_osm_wave = 3 or 4
rn_osm_bl_thresh = 5.e-5 !Threshold buoyancy for deepening of OSBL base
nn_ave = 0 ! choice of horizontal averaging on avt, avmu, avmv
ln_dia_osm = .true. ! output OSMOSIS-OBL variables
ln_dia_osm = .true., ! output OSMOSIS-OBL variables
rn_osm_hbl0 = 10. ! initial hbl value
ln_kpprimix = .true. ! Use KPP-style Ri# mixing below BL
ln_kpprimix = .true., ! Use KPP-style Ri# mixing below BL
rn_riinfty = 0.7 ! Highest local Ri_g permitting shear instability
rn_difri = 0.005 ! max Ri# diffusivity at Ri_g = 0 (m^2/s)
ln_convmix = .true. ! Use convective instability mixing below BL
ln_convmix = .true., ! Use convective instability mixing below BL
rn_difconv = 1. !0.01 !1. ! diffusivity when unstable below BL (m2/s)
rn_osm_dstokes = 5. ! Depth scale of Stokes drift (m)
nn_osm_wave = 0 ! Method used to calculate Stokes drift
......@@ -1281,8 +1290,8 @@
! ! = 0: No reduction
! = 1: use SD avged over top 10% hbl
! = 2:use surface value of SD fit to slope at rn_osm_hblfrac*hbl below surface
ln_zdfosm_ice_shelter = .true. ! reduce surface SD and depth scale under ice
ln_osm_mle = .true. ! Use integrated FK-OSM model
ln_zdfosm_ice_shelter = .true., ! reduce surface SD and depth scale under ice
ln_osm_mle = .true., ! Use integrated FK-OSM model
/
!-----------------------------------------------------------------------
&namosm_mle ! mixed layer eddy parametrisation (Fox-Kemper) (default: OFF)
......@@ -1295,13 +1304,13 @@
rn_osm_mle_rho_c = 0.03 ! delta rho criterion used to calculate MLD for FK
rn_osm_mle_thresh = 0.0001 ! delta b criterion used for FK MLE criterion
rn_osm_mle_tau = 172800. ! time scale for FK-OSM (seconds) (case rn_osm_mle=0)
ln_osm_hmle_limit = .true. ! If true, limit hmle to rn_osm_hmle_limit*hbl
ln_osm_hmle_limit = .true., ! If true, limit hmle to rn_osm_hmle_limit*hbl
rn_osm_hmle_limit = 1.5
/
!-----------------------------------------------------------------------
&namzdf_mfc ! Mass Flux Convection
!-----------------------------------------------------------------------
ln_edmfuv = .false. ! Activate on velocity fields (Not available yet)
ln_edmfuv = .false., ! Activate on velocity fields (Not available yet)
rn_cemf = 1. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz
rn_cwmf = -0. ! entrain/detrain coef. (<0 => cte; >0 % depending on dW/dz
rn_cent = 2.e-5 ! entrain of convective area
......@@ -1312,8 +1321,8 @@
!-----------------------------------------------------------------------
&namzdf_iwm ! internal wave-driven mixing parameterization (ln_zdfiwm =T)
!-----------------------------------------------------------------------
ln_mevar = .false. ! variable (T) or constant (F) mixing efficiency
ln_tsdiff = .true. ! account for differential T/S mixing (T) or not (F)
ln_mevar = .false., ! variable (T) or constant (F) mixing efficiency
ln_tsdiff = .true., ! account for differential T/S mixing (T) or not (F)
cn_dir = './' ! root directory for the iwm data location
!___________!_________________________!___________________!___________!_____________!________!___________!__________________!__________!_______________!
......@@ -1342,53 +1351,53 @@
!-----------------------------------------------------------------------
&namtrd ! trend diagnostics (default: OFF)
!-----------------------------------------------------------------------
ln_glo_trd = .false. ! (T) global domain averaged diag for T, T^2, KE, and PE
ln_dyn_trd = .false. ! (T) 3D momentum trend output
ln_dyn_mxl = .false. ! (T) 2D momentum trends averaged over the mixed layer (not coded yet)
ln_vor_trd = .false. ! (T) 2D barotropic vorticity trends (not coded yet)
ln_KE_trd = .false. ! (T) 3D Kinetic Energy trends
ln_PE_trd = .false. ! (T) 3D Potential Energy trends
ln_tra_trd = .false. ! (T) 3D tracer trend output
ln_tra_mxl = .false. ! (T) 2D tracer trends averaged over the mixed layer (not coded yet)
ln_glo_trd = .false., ! (T) global domain averaged diag for T, T^2, KE, and PE
ln_dyn_trd = .false., ! (T) 3D momentum trend output
ln_dyn_mxl = .false., ! (T) 2D momentum trends averaged over the mixed layer (not coded yet)
ln_vor_trd = .false., ! (T) 2D barotropic vorticity trends (not coded yet)
ln_KE_trd = .false., ! (T) 3D Kinetic Energy trends
ln_PE_trd = .false., ! (T) 3D Potential Energy trends
ln_tra_trd = .false., ! (T) 3D tracer trend output
ln_tra_mxl = .false., ! (T) 2D tracer trends averaged over the mixed layer (not coded yet)
nn_trd = 365 ! print frequency (ln_glo_trd=T) (unit=time step)
/
!!gm nn_ctls = 0 ! control surface type in mixed-layer trends (0,1 or n<jpk)
!!gm rn_ucf = 1. ! unit conversion factor (=1 -> /seconds ; =86400. -> /day)
!!gm cn_trdrst_in = "restart_mld" ! suffix of ocean restart name (input)
!!gm cn_trdrst_out = "restart_mld" ! suffix of ocean restart name (output)
!!gm ln_trdmld_restart = .false. ! restart for ML diagnostics
!!gm ln_trdmld_instant = .false. ! flag to diagnose trends of instantantaneous or mean ML T/S
!!gm ln_trdmld_restart = .false., ! restart for ML diagnostics
!!gm ln_trdmld_instant = .false., ! flag to diagnose trends of instantantaneous or mean ML T/S
!!gm
!-----------------------------------------------------------------------
&namhsb ! Heat and salt budgets (default: OFF)
!-----------------------------------------------------------------------
ln_diahsb = .false. ! output the heat and salt budgets (T) or not (F)
ln_diahsb = .false., ! output the heat and salt budgets (T) or not (F)
/
!-----------------------------------------------------------------------
&namdiu ! Cool skin and warm layer models (default: OFF)
!-----------------------------------------------------------------------
ln_diurnal = .false. !
ln_diurnal_only = .false. !
ln_diurnal = .false., !
ln_diurnal_only = .false., !
/
!-----------------------------------------------------------------------
&namflo ! float parameters (default: OFF)
!-----------------------------------------------------------------------
ln_floats = .false. ! activate floats or not
ln_floats = .false., ! activate floats or not
jpnfl = 1 ! total number of floats during the run
jpnnewflo = 0 ! number of floats for the restart
ln_rstflo = .false. ! float restart (T) or not (F)
ln_rstflo = .false., ! float restart (T) or not (F)
nn_writefl = 75 ! frequency of writing in float output file
nn_stockfl = 5475 ! frequency of creation of the float restart file
ln_argo = .false. ! Argo type floats (stay at the surface each 10 days)
ln_flork4 = .false. ! trajectories computed with a 4th order Runge-Kutta (T)
ln_argo = .false., ! Argo type floats (stay at the surface each 10 days)
ln_flork4 = .false., ! trajectories computed with a 4th order Runge-Kutta (T)
! ! or computed with Blanke' scheme (F)
ln_ariane = .true. ! Input with Ariane tool convention(T)
ln_flo_ascii= .true. ! Output with Ariane tool netcdf convention(F) or ascii file (T)
ln_ariane = .true., ! Input with Ariane tool convention(T)
ln_flo_ascii= .true., ! Output with Ariane tool netcdf convention(F) or ascii file (T)
/
!-----------------------------------------------------------------------
&nam_diadct ! transports through some sections (default: OFF)
!-----------------------------------------------------------------------
ln_diadct = .false. ! Calculate transport thru sections or not
ln_diadct = .false., ! Calculate transport thru sections or not
nn_dct = 15 ! time step frequency for transports computing
nn_dctwri = 15 ! time step frequency for transports writing
nn_secdebug = 112 ! 0 : no section to debug
......@@ -1398,7 +1407,7 @@
!-----------------------------------------------------------------------
&nam_dia25h ! 25h Mean Output (default: OFF)
!-----------------------------------------------------------------------
ln_dia25h = .false. ! Choose 25h mean output or not
ln_dia25h = .false., ! Choose 25h mean output or not
/
!-----------------------------------------------------------------------
&namnc4 ! netcdf4 chunking and compression settings ("key_netcdf4")
......@@ -1408,7 +1417,7 @@
nn_nchunks_k = 31 ! number of chunks in k-dimension
! ! setting nn_nchunks_k = jpk will give a chunk size of 1 in the vertical which
! ! is optimal for postprocessing which works exclusively with horizontal slabs
ln_nc4zip = .true. ! (T) use netcdf4 chunking and compression
ln_nc4zip = .true., ! (T) use netcdf4 chunking and compression
! ! (F) ignore chunking information and produce netcdf3-compatible files
/
......@@ -1422,29 +1431,29 @@
!-----------------------------------------------------------------------
&namobs ! observation usage switch (default: OFF)
!-----------------------------------------------------------------------
ln_diaobs = .false. ! Logical switch for the observation operator
ln_diaobs = .false., ! Logical switch for the observation operator
!
ln_t3d = .false. ! Logical switch for T profile observations
ln_s3d = .false. ! Logical switch for S profile observations
ln_sla = .false. ! Logical switch for SLA observations
ln_sst = .false. ! Logical switch for SST observations
ln_sss = .false. ! Logical swithc for SSS observations
ln_sic = .false. ! Logical switch for Sea Ice observations
ln_vel3d = .false. ! Logical switch for velocity observations
ln_altbias = .false. ! Logical switch for altimeter bias correction
ln_sstbias = .false. ! Logical switch for SST bias correction
ln_nea = .false. ! Logical switch for rejection of observations near land
ln_grid_global = .true. ! Logical switch for global distribution of observations
ln_grid_search_lookup = .false. ! Logical switch for obs grid search w/lookup table
ln_ignmis = .true. ! Logical switch for ignoring missing files
ln_s_at_t = .false. ! Logical switch for computing model S at T obs if not there
ln_sstnight = .false. ! Logical switch for calculating night-time average for SST obs
ln_bound_reject = .false. ! Logical to remove obs near boundaries in LAMs.
ln_default_fp_indegs = .true. ! Logical: T=> averaging footprint is in degrees, F=> in metres
ln_sla_fp_indegs = .true. ! Logical for SLA: T=> averaging footprint is in degrees, F=> in metres
ln_sst_fp_indegs = .true. ! Logical for SST: T=> averaging footprint is in degrees, F=> in metres
ln_sss_fp_indegs = .true. ! Logical for SSS: T=> averaging footprint is in degrees, F=> in metres
ln_sic_fp_indegs = .true. ! Logical for SIC: T=> averaging footprint is in degrees, F=> in metres
ln_t3d = .false., ! Logical switch for T profile observations
ln_s3d = .false., ! Logical switch for S profile observations
ln_sla = .false., ! Logical switch for SLA observations
ln_sst = .false., ! Logical switch for SST observations
ln_sss = .false., ! Logical swithc for SSS observations
ln_sic = .false., ! Logical switch for Sea Ice observations
ln_vel3d = .false., ! Logical switch for velocity observations
ln_altbias = .false., ! Logical switch for altimeter bias correction
ln_sstbias = .false., ! Logical switch for SST bias correction
ln_nea = .false., ! Logical switch for rejection of observations near land
ln_grid_global = .true., ! Logical switch for global distribution of observations
ln_grid_search_lookup = .false., ! Logical switch for obs grid search w/lookup table
ln_ignmis = .true., ! Logical switch for ignoring missing files
ln_s_at_t = .false., ! Logical switch for computing model S at T obs if not there
ln_sstnight = .false., ! Logical switch for calculating night-time average for SST obs
ln_bound_reject = .false., ! Logical to remove obs near boundaries in LAMs.
ln_default_fp_indegs = .true., ! Logical: T=> averaging footprint is in degrees, F=> in metres
ln_sla_fp_indegs = .true., ! Logical for SLA: T=> averaging footprint is in degrees, F=> in metres
ln_sst_fp_indegs = .true., ! Logical for SST: T=> averaging footprint is in degrees, F=> in metres
ln_sss_fp_indegs = .true., ! Logical for SSS: T=> averaging footprint is in degrees, F=> in metres
ln_sic_fp_indegs = .true., ! Logical for SIC: T=> averaging footprint is in degrees, F=> in metres
! All of the *files* variables below are arrays. Use namelist_cfg to add more files
cn_profbfiles = 'profiles_01.nc' ! Profile feedback input observation file names
cn_slafbfiles = 'sla_01.nc' ! SLA feedback input observation file names
......@@ -1482,21 +1491,21 @@
!-----------------------------------------------------------------------
&nam_asminc ! assimilation increments ('key_asminc')
!-----------------------------------------------------------------------
ln_bkgwri = .false. ! Logical switch for writing out background state
ln_trainc = .false. ! Logical switch for applying tracer increments
ln_dyninc = .false. ! Logical switch for applying velocity increments
ln_sshinc = .false. ! Logical switch for applying SSH increments
ln_seaiceinc = .false. ! Logical switch for applying Sea ice concentration increments
ln_asmdin = .false. ! Logical switch for Direct Initialization (DI)
ln_asmiau = .false. ! Logical switch for Incremental Analysis Updating (IAU)
ln_bkgwri = .false., ! Logical switch for writing out background state
ln_trainc = .false., ! Logical switch for applying tracer increments
ln_dyninc = .false., ! Logical switch for applying velocity increments
ln_sshinc = .false., ! Logical switch for applying SSH increments
ln_seaiceinc = .false., ! Logical switch for applying Sea ice concentration increments
ln_asmdin = .false., ! Logical switch for Direct Initialization (DI)
ln_asmiau = .false., ! Logical switch for Incremental Analysis Updating (IAU)
nitbkg = 0 ! Timestep of background in [0,nitend-nit000-1]
nitdin = 0 ! Timestep of background for DI in [0,nitend-nit000-1]
nitiaustr = 1 ! Timestep of start of IAU interval in [0,nitend-nit000-1]
nitiaufin = 15 ! Timestep of end of IAU interval in [0,nitend-nit000-1]
niaufn = 0 ! Type of IAU weighting function
ln_salfix = .false. ! Logical switch for ensuring that the sa > salfixmin
ln_salfix = .false., ! Logical switch for ensuring that the sa > salfixmin
salfixmin = -9999 ! Minimum salinity after applying the increments
ln_temnofreeze=.false. ! Don't allow the temperature to drop below freezing
ln_temnofreeze=.false., ! Don't allow the temperature to drop below freezing
nn_divdmp = 0 ! Number of iterations of divergence damping operator
/
......@@ -1511,9 +1520,9 @@
!-----------------------------------------------------------------------
&nammpp ! Massively Parallel Processing
!-----------------------------------------------------------------------
ln_listonly = .false. ! do nothing else than listing the best domain decompositions (with land domains suppression)
ln_listonly = .false., ! do nothing else than listing the best domain decompositions (with land domains suppression)
! ! if T: the largest number of cores tested is defined by max(mppsize, jpni*jpnj)
ln_nnogather = .true. ! activate code to avoid mpi_allgather use at the northfold
ln_nnogather = .true., ! activate code to avoid mpi_allgather use at the northfold
jpni = 0 ! number of processors following i (set automatically if < 1), see also ln_listonly = T
jpnj = 0 ! number of processors following j (set automatically if < 1), see also ln_listonly = T
nn_hls = 1 ! halo width (applies to both rows and columns)
......@@ -1522,13 +1531,13 @@
!-----------------------------------------------------------------------
&namctl ! Control prints (default: OFF)
!-----------------------------------------------------------------------
sn_cfctl%l_runstat = .TRUE. ! switches and which areas produce reports with the proc integer settings.
sn_cfctl%l_trcstat = .FALSE. ! The default settings for the proc integers should ensure
sn_cfctl%l_oceout = .FALSE. ! that all areas report.
sn_cfctl%l_layout = .FALSE. !
sn_cfctl%l_prtctl = .FALSE. !
sn_cfctl%l_prttrc = .FALSE. !
sn_cfctl%l_oasout = .FALSE. !
sn_cfctl%l_runstat = .TRUE., ! switches and which areas produce reports with the proc integer settings.
sn_cfctl%l_trcstat = .false., ! The default settings for the proc integers should ensure
sn_cfctl%l_oceout = .false., ! that all areas report.
sn_cfctl%l_layout = .false., !
sn_cfctl%l_prtctl = .false., !
sn_cfctl%l_prttrc = .false., !
sn_cfctl%l_oasout = .false., !
sn_cfctl%procmin = 0 ! Minimum area number for reporting [default:0]
sn_cfctl%procmax = 1000000 ! Maximum area number for reporting [default:1000000]
sn_cfctl%procincr = 1 ! Increment for optional subsetting of areas [default:1]
......@@ -1539,27 +1548,27 @@
nn_jctle = 0 ! end j indice of control
nn_isplt = 1 ! number of processors in i-direction
nn_jsplt = 1 ! number of processors in j-direction
ln_timing = .false. ! timing by routine write out in timing.output file
ln_diacfl = .false. ! CFL diagnostics write out in cfl_diagnostics.ascii
ln_timing = .false., ! timing by routine write out in timing.output file
ln_diacfl = .false., ! CFL diagnostics write out in cfl_diagnostics.ascii
/
!-----------------------------------------------------------------------
&namsto ! Stochastic parametrization of EOS (default: OFF)
!-----------------------------------------------------------------------
ln_sto_ldf = .false. ! stochastic lateral diffusion
ln_sto_ldf = .false., ! stochastic lateral diffusion
rn_ldf_std = 0.1 ! lateral diffusion standard deviation (in percent)
rn_ldf_tcor = 1440. ! lateral diffusion correlation timescale (in timesteps)
ln_sto_hpg = .false. ! stochastic pressure gradient
ln_sto_hpg = .false., ! stochastic pressure gradient
rn_hpg_std = 0.1 ! density gradient standard deviation (in percent)
rn_hpg_tcor = 1440. ! density gradient correlation timescale (in timesteps)
ln_sto_pstar = .false. ! stochastic ice strength
ln_sto_pstar = .false., ! stochastic ice strength
rn_pstar_std = 0.1 ! ice strength standard deviation (in percent)
rn_pstar_tcor = 1440. ! ice strength correlation timescale (in timesteps)
nn_pstar_ord = 1 ! order of autoregressive processes
nn_pstar_flt = 0 ! passes of Laplacian filter
ln_sto_trd = .false. ! stochastic model trend
ln_sto_trd = .false., ! stochastic model trend
rn_trd_std = 0.1 ! trend standard deviation (in percent)
rn_trd_tcor = 1440. ! trend correlation timescale (in timesteps)
ln_sto_eos = .false. ! stochastic equation of state
ln_sto_eos = .false., ! stochastic equation of state
nn_sto_eos = 1 ! number of independent random walks
rn_eos_stdxy = 1.4 ! random walk horz. standard deviation (in grid points)
rn_eos_stdz = 0.7 ! random walk vert. standard deviation (in grid points)
......@@ -1567,7 +1576,7 @@
nn_eos_ord = 1 ! order of autoregressive processes
nn_eos_flt = 0 ! passes of Laplacian filter
rn_eos_lim = 2.0 ! limitation factor (default = 3.0)
ln_sto_trc = .false. ! stochastic tracer dynamics
ln_sto_trc = .false., ! stochastic tracer dynamics
nn_sto_trc = 1 ! number of independent random walks
rn_trc_stdxy = 1.4 ! random walk horz. standard deviation (in grid points)
rn_trc_stdz = 0.7 ! random walk vert. standard deviation (in grid points)
......@@ -1575,8 +1584,10 @@
nn_trc_ord = 1 ! order of autoregressive processes
nn_trc_flt = 0 ! passes of Laplacian filter
rn_trc_lim = 3.0 ! limitation factor (default = 3.0)
ln_rststo = .false. ! start from mean parameter (F) or from restart file (T)
ln_rstseed = .true. ! read seed of RNG from restart file
ln_rststo = .false., ! start from mean parameter (F) or from restart file (T)
ln_rstseed = .true., ! read seed of RNG from restart file
cn_storst_in = "restart_sto" ! suffix of stochastic parameter restart file (input)
cn_storst_out = "restart_sto" ! suffix of stochastic parameter restart file (output)
/
&namzdf_mldzint
/
......@@ -13,8 +13,8 @@
!-----------------------------------------------------------------------
&namtrc_run ! run information
!-----------------------------------------------------------------------
ln_top_euler = .false. ! use Euler time-stepping for TOP
ln_rsttr = .false. ! start from a restart file (T) or not (F)
ln_top_euler = .false., ! use Euler time-stepping for TOP
ln_rsttr = .false., ! start from a restart file (T) or not (F)
nn_rsttr = 0 ! restart control = 0 initial time step is not compared to the restart file value
! = 1 do not use the value in the restart file
! = 2 calendar parameters read in the restart file
......@@ -28,19 +28,19 @@
!-----------------------------------------------------------------------
jp_bgc = 0 ! Number of passive tracers of the BGC model
!
ln_pisces = .false. ! Run PISCES BGC model
ln_my_trc = .false. ! Run MY_TRC BGC model
ln_age = .false. ! Run the sea water age tracer
ln_cfc11 = .false. ! Run the CFC11 passive tracer
ln_cfc12 = .false. ! Run the CFC12 passive tracer
ln_sf6 = .false. ! Run the SF6 passive tracer
ln_c14 = .false. ! Run the Radiocarbon passive tracer
ln_pisces = .false., ! Run PISCES BGC model
ln_my_trc = .false., ! Run MY_TRC BGC model
ln_age = .false., ! Run the sea water age tracer
ln_cfc11 = .false., ! Run the CFC11 passive tracer
ln_cfc12 = .false., ! Run the CFC12 passive tracer
ln_sf6 = .false., ! Run the SF6 passive tracer
ln_c14 = .false., ! Run the Radiocarbon passive tracer
!
ln_trcdta = .false. ! Initialisation from data input file (T) or not (F)
ln_trcdmp = .false. ! add a damping termn (T) or not (F)
ln_trcdmp_clo = .false. ! damping term (T) or not (F) on closed seas
ln_trcbc = .false. ! Surface, Lateral or Open Boundaries conditions
ln_trcais = .false. ! Antarctic Ice Sheet nutrient supply
ln_trcdta = .false., ! Initialisation from data input file (T) or not (F)
ln_trcdmp = .false., ! add a damping termn (T) or not (F)
ln_trcdmp_clo = .false., ! damping term (T) or not (F) on closed seas
ln_trcbc = .false., ! Surface, Lateral or Open Boundaries conditions
ln_trcais = .false., ! Antarctic Ice Sheet nutrient supply
!
jp_dia3d = 0 ! Number of 3D diagnostic variables
jp_dia2d = 0 ! Number of 2D diagnostic variables
......@@ -66,25 +66,25 @@
!-----------------------------------------------------------------------
&namtrc_adv ! advection scheme for passive tracer (default: NO selection)
!-----------------------------------------------------------------------
ln_trcadv_OFF = .false. ! No passive tracer advection
ln_trcadv_cen = .false. ! 2nd order centered scheme
ln_trcadv_OFF = .false., ! No passive tracer advection
ln_trcadv_cen = .false., ! 2nd order centered scheme
nn_cen_h = 4 ! =2/4, horizontal 2nd order CEN / 4th order CEN
nn_cen_v = 4 ! =2/4, vertical 2nd order CEN / 4th order COMPACT
ln_trcadv_fct = .false. ! FCT scheme
ln_trcadv_fct = .false., ! FCT scheme
nn_fct_h = 2 ! =2/4, horizontal 2nd / 4th order
nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
ln_trcadv_mus = .false. ! MUSCL scheme
ln_mus_ups = .false. ! use upstream scheme near river mouths
ln_trcadv_ubs = .false. ! UBS scheme
ln_trcadv_mus = .false., ! MUSCL scheme
ln_mus_ups = .false., ! use upstream scheme near river mouths
ln_trcadv_ubs = .false., ! UBS scheme
nn_ubs_v = 2 ! =2 , vertical 2nd order FCT
ln_trcadv_qck = .false. ! QUICKEST scheme
ln_trcadv_qck = .false., ! QUICKEST scheme
/
!-----------------------------------------------------------------------
&namtrc_ldf ! lateral diffusion scheme for passive tracer (default: NO selection)
!-----------------------------------------------------------------------
! ! Type of the operator:
ln_trcldf_OFF = .false. ! No explicit diffusion
ln_trcldf_tra = .false. ! use active tracer setting
ln_trcldf_OFF = .false., ! No explicit diffusion
ln_trcldf_tra = .false., ! use active tracer setting
! ! Coefficient (defined with namtra_ldf coefficient)
rn_ldf_multi = 1. ! multiplier of aht for TRC mixing coefficient
rn_fact_lap = 1. ! Equatorial enhanced zonal eddy diffusivity (lap only)
......@@ -92,7 +92,7 @@
!-----------------------------------------------------------------------
&namtrc_rad ! treatment of negative concentrations
!-----------------------------------------------------------------------
ln_trcrad = .true. ! artificially correct negative concentrations (T) or not (F)
ln_trcrad = .true., ! artificially correct negative concentrations (T) or not (F)
/
!-----------------------------------------------------------------------
&namtrc_snk ! Sedimentation of particles
......@@ -102,7 +102,7 @@
!-----------------------------------------------------------------------
&namtrc_dcy ! Diurnal cycle
!-----------------------------------------------------------------------
ln_trcdc2dm = .false. ! Diurnal cycle for TOP
ln_trcdc2dm = .false., ! Diurnal cycle for TOP
/
!-----------------------------------------------------------------------
&namtrc_opt ! light availability in the water column
......@@ -111,7 +111,7 @@
! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename !
sn_par = 'par.orca' , 24 , 'fr_par' , .true. , .true. , 'yearly' , '' , '' , ''
cn_dir = './' ! root directory for the location of the dynamical files
ln_varpar = .true. ! Read PAR from file
ln_varpar = .true., ! Read PAR from file
parlux = 0.43 ! Fraction of shortwave as PAR
light_loc = 'center' ! Light location in the water cell ('center', 'integral')
/
......@@ -138,8 +138,8 @@
nn_trd_trc = 5475 ! time step frequency and tracers trends
nn_ctls_trc = 0 ! control surface type in mixed-layer trends (0,1 or n<jpk)
rn_ucf_trc = 1 ! unit conversion factor (=1 -> /seconds ; =86400. -> /day)
ln_trdmld_trc_restart = .false. ! restart for ML diagnostics
ln_trdmld_trc_instant = .true. ! flag to diagnose trends of instantantaneous or mean ML T/S
ln_trdmld_trc_restart = .false.,! restart for ML diagnostics
ln_trdmld_trc_instant = .true., ! flag to diagnose trends of instantantaneous or mean ML T/S
ln_trdtrc( 1) = .true.
ln_trdtrc( 2) = .true.
ln_trdtrc(23) = .true.
......@@ -158,7 +158,7 @@
cn_dir_sbc = './' ! root directory for the location of SURFACE data files
cn_dir_cbc = './' ! root directory for the location of COASTAL data files
cn_dir_obc = './' ! root directory for the location of OPEN data files
ln_rnf_ctl = .false. ! Remove runoff dilution on tracers with absent river load
ln_rnf_ctl = .false., ! Remove runoff dilution on tracers with absent river load
rn_sbc_time = 86400. ! Time scaling factor for SBC data (seconds in a day)
rn_cbc_time = 86400. ! Time scaling factor for CBC data (seconds in a day)
! cn_tronam(1) = 'var1' ! Tracer-name to variable-name translation
......@@ -173,7 +173,7 @@
! = 0 NO damping of tracers at open boudaries
! = 1 Only for tracers forced with external data
! = 2 Damping applied to all tracers
ln_zintobc = .false. ! T if a vertical interpolation is required. Variables gdep[t] and e3[t] must exist in the file
ln_zintobc = .false., ! T if a vertical interpolation is required. Variables gdep[t] and e3[t] must exist in the file
! automatically defined to T if the number of vertical levels in bdy dta /= jpk
/
!-----------------------------------------------------------------------
......
......@@ -241,6 +241,7 @@ MODULE ice
REAL(wp), PUBLIC :: rn_hpnd !: prescribed pond depth (0<rn_hpnd<1)
LOGICAL, PUBLIC :: ln_pnd_lids !: Allow ponds to have frozen lids
LOGICAL , PUBLIC :: ln_pnd_alb !: melt ponds affect albedo
INTEGER , PUBLIC :: nn_pnd_brsal !: brine salinity formulation 0 = Consistent expression with SI3 (linear liquidus) ; 1 = used in GOSI9
! !!** ice-diagnostics namelist (namdia) **
LOGICAL , PUBLIC :: ln_icediachk !: flag for ice diag (T) or not (F)
......@@ -452,6 +453,11 @@ MODULE ice
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qcn_ice_top !: Surface conduction flux (W/m2)
!
!!----------------------------------------------------------------------
!! * Only for atmospheric coupling
!!----------------------------------------------------------------------
REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i_last_couple !: Ice fractional area at last coupling time
!
!!----------------------------------------------------------------------
!! NEMO/ICE 4.0 , NEMO Consortium (2018)
!! $Id: ice.F90 15388 2021-10-17 11:33:47Z clem $
!! Software governed by the CeCILL license (see ./LICENSE)
......@@ -550,6 +556,10 @@ CONTAINS
ii = ii + 1
ALLOCATE( t_si(jpi,jpj,jpl) , tm_si(jpi,jpj) , qcn_ice_bot(jpi,jpj,jpl) , qcn_ice_top(jpi,jpj,jpl) , STAT = ierr(ii) )
! * For atmospheric coupling
ii = ii + 1
ALLOCATE( a_i_last_couple(jpi,jpj,jpl) , STAT=ierr(ii) )
ice_alloc = MAXVAL( ierr(:) )
IF( ice_alloc /= 0 ) CALL ctl_stop( 'STOP', 'ice_alloc: failed to allocate arrays.' )
!
......
......@@ -51,6 +51,7 @@ MODULE icedyn_rdgrft
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: apartf ! participation function; fraction of ridging/closing associated w/ category n
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hrmin ! minimum ridge thickness
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hrmax ! maximum ridge thickness
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hrexp ! e-folding ridge thickness
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hraft ! thickness of rafted ice
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: hi_hrdg ! thickness of ridging ice / mean ridge thickness
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: aridge ! participating ice ridging
......@@ -59,7 +60,7 @@ MODULE icedyn_rdgrft
REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ze_s_2d
!
REAL(wp), PARAMETER :: hrdg_hi_min = 1.1_wp ! min ridge thickness multiplier: min(hrdg/hi)
REAL(wp), PARAMETER :: hi_hrft = 0.5_wp ! rafting multipliyer: (hi/hraft)
REAL(wp), PARAMETER :: hi_hrft = 0.5_wp ! rafting multiplier: (hi/hraft)
!
! ** namelist (namdyn_rdgrft) **
LOGICAL :: ln_str_R75 ! ice strength parameterization: Rothrock 75
......@@ -67,13 +68,13 @@ MODULE icedyn_rdgrft
LOGICAL :: ln_str_CST ! ice strength parameterization: Constant
REAL(wp) :: rn_str ! constant value of ice strength
LOGICAL :: ln_str_smooth ! ice strength spatial smoothing
LOGICAL :: ln_distf_lin ! redistribution of ridged ice: linear (Hibler 1980)
LOGICAL :: ln_distf_exp ! redistribution of ridged ice: exponential
LOGICAL :: ln_distf_lin ! redistribution of ridged ice: linear (Hibler, 1980)
LOGICAL :: ln_distf_exp ! redistribution of ridged ice: exponential (Lipscomb et al., 2007)
REAL(wp) :: rn_murdg ! gives e-folding scale of ridged ice (m^.5)
REAL(wp) :: rn_csrdg ! fraction of shearing energy contributing to ridging
LOGICAL :: ln_partf_lin ! participation function linear (Thorndike et al. (1975))
LOGICAL :: ln_partf_lin ! participation function: linear (Thorndike et al., 1975)
REAL(wp) :: rn_gstar ! fractional area of young ice contributing to ridging
LOGICAL :: ln_partf_exp ! participation function exponential (Lipscomb et al. (2007))
LOGICAL :: ln_partf_exp ! participation function: exponential (Lipscomb et al., 2007)
REAL(wp) :: rn_astar ! equivalent of G* for an exponential participation function
LOGICAL :: ln_ridging ! ridging of ice or not
REAL(wp) :: rn_hstar ! thickness that determines the maximal thickness of ridged ice
......@@ -99,9 +100,9 @@ CONTAINS
!!-------------------------------------------------------------------
!! *** ROUTINE ice_dyn_rdgrft_alloc ***
!!-------------------------------------------------------------------
ALLOCATE( closing_net(jpij) , opning(jpij) , closing_gross(jpij) , &
& apartf(jpij,0:jpl) , hrmin (jpij,jpl) , hraft(jpij,jpl) , aridge(jpij,jpl), &
& hrmax (jpij,jpl) , hi_hrdg(jpij,jpl) , araft(jpij,jpl) , &
ALLOCATE( closing_net(jpij) , opning(jpij) , closing_gross(jpij), &
& apartf(jpij,0:jpl), hrmin (jpij,jpl), hraft(jpij,jpl) , aridge(jpij,jpl), &
& hrmax (jpij,jpl) , hrexp (jpij,jpl), hi_hrdg(jpij,jpl) , araft(jpij,jpl) , &
& ze_i_2d(jpij,nlay_i,jpl), ze_s_2d(jpij,nlay_s,jpl), STAT=ice_dyn_rdgrft_alloc )
CALL mpp_sum ( 'icedyn_rdgrft', ice_dyn_rdgrft_alloc )
......@@ -301,8 +302,8 @@ CONTAINS
!! ** Method : Compute the thickness distribution of the ice and open water
!! participating in ridging and of the resulting ridges.
!!-------------------------------------------------------------------
REAL(wp), DIMENSION(:,:), INTENT(in) :: pa_i, pv_i
REAL(wp), DIMENSION(:) , INTENT(in) :: pato_i
REAL(wp), DIMENSION(:,:), INTENT(in) :: pa_i, pv_i
REAL(wp), DIMENSION(:) , INTENT(in) :: pato_i
REAL(wp), DIMENSION(:) , INTENT(in), OPTIONAL :: pclosing_net
!!
INTEGER :: ji, jl ! dummy loop indices
......@@ -354,7 +355,7 @@ CONTAINS
zGsum(1:npti,-1) = 0._wp
zGsum(1:npti,0 ) = pato_i(1:npti) * z1_asum(1:npti)
DO jl = 1, jpl
zGsum(1:npti,jl) = ( pato_i(1:npti) + SUM( pa_i(1:npti,1:jl), dim=2 ) ) * z1_asum(1:npti) ! sum(1:jl) is ok (and not jpl)
zGsum(1:npti,jl) = ( pato_i(1:npti) + SUM( pa_i(1:npti,1:jl), dim=2 ) ) * z1_asum(1:npti) ! sum(1:jl) is correct (and not jpl)
END DO
!
IF( ln_partf_lin ) THEN !--- Linear formulation (Thorndike et al., 1975)
......@@ -372,7 +373,7 @@ CONTAINS
END DO
END DO
!
ELSEIF( ln_partf_exp ) THEN !--- Exponential, more stable formulation (Lipscomb et al, 2007)
ELSEIF( ln_partf_exp ) THEN !--- Exponential, more stable formulation (Lipscomb et al., 2007)
!
zfac = 1._wp / ( 1._wp - EXP(-z1_astar) )
DO jl = -1, jpl
......@@ -421,8 +422,10 @@ CONTAINS
! 2) Transfer function
!-----------------------------------------------------------------
! If assuming ridged ice is uniformly distributed between hrmin and
! hrmax (ln_distf_lin):
!
! Compute max and min ridged ice thickness for each ridging category.
! Assume ridged ice is uniformly distributed between hrmin and hrmax.
!
! This parameterization is a modified version of Hibler (1980).
! The mean ridging thickness, zhmean, is proportional to hi^(0.5)
......@@ -437,9 +440,37 @@ CONTAINS
! These modifications have the effect of reducing the ice strength
! (relative to the Hibler formulation) when very thick ice is ridging.
!
! zaksum = net area removed/ total area removed
! where total area removed = area of ice that ridges
! net area removed = total area removed - area of new ridges
!-----------------------------------------------------------------
! If assuming ridged ice ITD is a negative exponential
! (ln_distf_exp) and following CICE implementation:
!
! g(h) ~ exp[-(h-hrmin)/hrexp], h >= hrmin
!
! where hrmin is the minimum thickness of ridging ice and
! hrexp is the e-folding thickness.
!
! Here, assume as above that hrmin = min(2*hi, hi+maxraft).
! That is, the minimum ridge thickness results from rafting,
! unless the ice is thicker than maxraft.
!
! Also, assume that hrexp = mu_rdg*sqrt(hi).
! The parameter mu_rdg is tuned to give e-folding scales mostly
! in the range 2-4 m as observed by upward-looking sonar.
!
! Values of mu_rdg in the right column give ice strengths
! roughly equal to values of Hstar in the left column
! (within ~10 kN/m for typical ITDs):
!
! Hstar mu_rdg
!
! 25 3.0
! 50 4.0
! 75 5.0
! 100 6.0
!
! zaksum = net area removed/ total area participating
! where total area participating = area of ice that ridges
! net area removed = total area participating - area of new ridges
!-----------------------------------------------------------------
zfac = 1._wp / hi_hrft
zaksum(1:npti) = apartf(1:npti,0)
......@@ -449,9 +480,16 @@ CONTAINS
IF ( apartf(ji,jl) > 0._wp ) THEN
zhmean = MAX( SQRT( rn_hstar * zhi(ji,jl) ), zhi(ji,jl) * hrdg_hi_min )
hrmin (ji,jl) = MIN( 2._wp * zhi(ji,jl), 0.5_wp * ( zhmean + zhi(ji,jl) ) )
hrmax (ji,jl) = 2._wp * zhmean - hrmin(ji,jl)
hraft (ji,jl) = zhi(ji,jl) * zfac
hi_hrdg(ji,jl) = zhi(ji,jl) / MAX( zhmean, epsi20 )
!
IF( ln_distf_lin ) THEN
hrmax (ji,jl) = 2._wp * zhmean - hrmin(ji,jl)
hi_hrdg(ji,jl) = zhi(ji,jl) / MAX( zhmean, epsi20 )
ELSEIF( ln_distf_exp ) THEN
hrexp (ji,jl) = rn_murdg * SQRT( zhi(ji,jl) )
hi_hrdg(ji,jl) = zhi(ji,jl) / ( hrmin(ji,jl) + hrexp(ji,jl) )
!!clem: set a mini for zhi??
ENDIF
!
! Normalization factor : zaksum, ensures mass conservation
zaksum(ji) = zaksum(ji) + aridge(ji,jl) * ( 1._wp - hi_hrdg(ji,jl) ) &
......@@ -459,8 +497,10 @@ CONTAINS
ELSE
hrmin (ji,jl) = 0._wp
hrmax (ji,jl) = 0._wp
hrexp (ji,jl) = 0._wp
hraft (ji,jl) = 0._wp
hi_hrdg(ji,jl) = 1._wp
!!clem zaksum(ji,jl) = 0._wp
ENDIF
END DO
END DO
......@@ -474,7 +514,7 @@ CONTAINS
WHERE( zaksum(1:npti) > epsi10 ) ; closing_gross(1:npti) = pclosing_net(1:npti) / zaksum(1:npti)
ELSEWHERE ; closing_gross(1:npti) = 0._wp
END WHERE
! correction to closing rate if excessive ice removal
!----------------------------------------------------
! Reduce the closing rate if more than 100% of any ice category would be removed
......@@ -487,7 +527,7 @@ CONTAINS
ENDIF
END DO
END DO
! 4) correction to opening if excessive open water removal
!---------------------------------------------------------
! Reduce the closing rate if more than 100% of the open water would be removed
......@@ -518,6 +558,7 @@ CONTAINS
!
INTEGER :: ji, jj, jl, jl1, jl2, jk ! dummy loop indices
REAL(wp) :: hL, hR, farea ! left and right limits of integration and new area going to jl2
REAL(wp) :: expL, expR ! exponentials involving hL, hR
REAL(wp) :: vsw ! vol of water trapped into ridges
REAL(wp) :: afrdg, afrft ! fraction of category area ridged/rafted
REAL(wp) :: airdg1, oirdg1, aprdg1, virdg1, sirdg1
......@@ -699,18 +740,50 @@ CONTAINS
IF( ll_shift(ji) ) THEN
! Compute the fraction of ridged ice area and volume going to thickness category jl2
IF( hrmin(ji,jl1) <= hi_max(jl2) .AND. hrmax(ji,jl1) > hi_max(jl2-1) ) THEN
hL = MAX( hrmin(ji,jl1), hi_max(jl2-1) )
hR = MIN( hrmax(ji,jl1), hi_max(jl2) )
farea = ( hR - hL ) / ( hrmax(ji,jl1) - hrmin(ji,jl1) )
fvol(ji) = ( hR * hR - hL * hL ) / ( hrmax(ji,jl1) * hrmax(ji,jl1) - hrmin(ji,jl1) * hrmin(ji,jl1) )
IF( ln_distf_lin ) THEN ! Hibler (1980) linear formulation
!
itest_rdg(ji) = 1 ! test for conservation
ELSE
farea = 0._wp
fvol(ji) = 0._wp
ENDIF
IF( hrmin(ji,jl1) <= hi_max(jl2) .AND. hrmax(ji,jl1) > hi_max(jl2-1) ) THEN
hL = MAX( hrmin(ji,jl1), hi_max(jl2-1) )
hR = MIN( hrmax(ji,jl1), hi_max(jl2) )
farea = ( hR - hL ) / ( hrmax(ji,jl1) - hrmin(ji,jl1) )
fvol(ji) = ( hR * hR - hL * hL ) / ( hrmax(ji,jl1) * hrmax(ji,jl1) - hrmin(ji,jl1) * hrmin(ji,jl1) )
!
itest_rdg(ji) = 1 ! test for conservation
ELSE
farea = 0._wp
fvol(ji) = 0._wp
ENDIF
!
ELSEIF( ln_distf_exp ) THEN ! Lipscomb et al. (2007) exponential formulation
!
IF( jl2 < jpl ) THEN
!
IF( hrmin(ji,jl1) <= hi_max(jl2) ) THEN
hL = MAX( hrmin(ji,jl1), hi_max(jl2-1) )
hR = hi_max(jl2)
expL = EXP( -( hL - hrmin(ji,jl1) ) / hrexp(ji,jl1) )
expR = EXP( -( hR - hrmin(ji,jl1) ) / hrexp(ji,jl1) )
farea = expL - expR
fvol(ji) = ( ( hL + hrexp(ji,jl1) ) * expL &
- ( hR + hrexp(ji,jl1) ) * expR ) / ( hrmin(ji,jl1) + hrexp(ji,jl1) )
ELSE
farea = 0._wp
fvol(ji) = 0._wp
END IF
!
ELSE ! jl2 = jpl
!
hL = MAX( hrmin(ji,jl1), hi_max(jl2-1) )
expL = EXP(-( hL - hrmin(ji,jl1) ) / hrexp(ji,jl1) )
farea = expL
fvol(ji) = ( hL + hrexp(ji,jl1) ) * expL / ( hrmin(ji,jl1) + hrexp(ji,jl1) )
!
END IF ! jl2 < jpl
!
itest_rdg(ji) = 1 ! test for conservation => clem: I am not sure about that
!
END IF ! ridge redistribution
! Compute the fraction of rafted ice area and volume going to thickness category jl2
IF( hraft(ji,jl1) <= hi_max(jl2) .AND. hraft(ji,jl1) > hi_max(jl2-1) ) THEN
zswitch(ji) = 1._wp
......@@ -785,18 +858,20 @@ CONTAINS
!!
!! ** Purpose : computes ice strength used in dynamics routines of ice thickness
!!
!! ** Method : Compute the strength of the ice pack, defined as the energy (J m-2)
!! ** Method : Compute the strength of the ice pack, defined as the energy (J m-2)
!! dissipated per unit area removed from the ice pack under compression,
!! and assumed proportional to the change in potential energy caused
!! by ridging. Note that only Hibler's formulation is stable and that
!! ice strength has to be smoothed
!! by ridging. Note that ice strength using Hibler's formulation must be
!! smoothed.
!!----------------------------------------------------------------------
INTEGER :: ji, jj, jl ! dummy loop indices
REAL(wp) :: z1_3 ! local scalars
REAL(wp), DIMENSION(jpi,jpj) :: zmsk, zworka ! temporary array used here
!!clem
LOGICAL :: ln_str_R75
REAL(wp) :: zhi, zcp, rn_pe_rdg
!!
LOGICAL :: ln_str_R75
REAL(wp) :: zhi, zcp
REAL(wp) :: h2rdg ! mean value of h^2 for new ridge
REAL(wp), PARAMETER :: zmax_strength = 200.e3_wp ! Richter-Menge and Elder (1998) estimate maximum in Beaufort Sea in wintertime of the order 150 kN/m
REAL(wp), DIMENSION(jpij) :: zstrength, zaksum ! strength in 1D
!!----------------------------------------------------------------------
! prepare the mask
......@@ -809,7 +884,7 @@ CONTAINS
CASE ( np_strr75 ) !== Rothrock(1975)'s method ==!
! these 2 param should be defined once for all at the 1st time step
! this should be defined once for all at the 1st time step
zcp = 0.5_wp * grav * (rho0-rhoi) * rhoi * r1_rho0 ! proport const for PE
!
strength(:,:) = 0._wp
......@@ -846,16 +921,31 @@ CONTAINS
DO ji = 1, npti
!
IF( apartf(ji,jl) > 0._wp ) THEN
!
IF( ln_distf_lin ) THEN ! Uniform redistribution of ridged ice
h2rdg = z1_3 * ( hrmax(ji,jl) * hrmax(ji,jl) + & ! (a**3-b**3)/(a-b) = a*a+ab+b*b
& hrmin(ji,jl) * hrmin(ji,jl) + &
& hrmax(ji,jl) * hrmin(ji,jl) )
!
ELSEIF( ln_distf_exp ) THEN ! Exponential redistribution of ridged ice
h2rdg = hrmin(ji,jl) * hrmin(ji,jl) &
& + 2._wp * hrmin(ji,jl) * hrexp(ji,jl) &
& + 2._wp * hrexp(ji,jl) * hrexp(ji,jl)
END IF
!
IF( a_i_2d(ji,jl) > epsi10 ) THEN ; zhi = v_i_2d(ji,jl) / a_i_2d(ji,jl)
ELSE ; zhi = 0._wp
ENDIF
zstrength(ji) = zstrength(ji) - apartf(ji,jl) * zhi * zhi ! PE loss from deforming ice
zstrength(ji) = zstrength(ji) + 2._wp * araft (ji,jl) * zhi * zhi ! PE gain from rafting ice
zstrength(ji) = zstrength(ji) + aridge(ji,jl) * hi_hrdg(ji,jl) * z1_3 * & ! PE gain from ridging ice
& ( hrmax(ji,jl) * hrmax(ji,jl) + & ! (a**3-b**3)/(a-b) = a*a+ab+b*b
& hrmin(ji,jl) * hrmin(ji,jl) + &
& hrmax(ji,jl) * hrmin(ji,jl) )
!!$ zstrength(ji) = zstrength(ji) - apartf(ji,jl) * zhi * zhi ! PE loss from deforming ice
!!$ zstrength(ji) = zstrength(ji) + 2._wp * araft (ji,jl) * zhi * zhi ! PE gain from rafting ice
!!$ zstrength(ji) = zstrength(ji) + aridge(ji,jl) * hi_hrdg(ji,jl) * z1_3 * & ! PE gain from ridging ice
!!$ & ( hrmax(ji,jl) * hrmax(ji,jl) + & ! (a**3-b**3)/(a-b) = a*a+ab+b*b
!!$ & hrmin(ji,jl) * hrmin(ji,jl) + &
!!$ & hrmax(ji,jl) * hrmin(ji,jl) )
zstrength(ji) = zstrength(ji) - apartf(ji,jl) * zhi * zhi ! PE loss
zstrength(ji) = zstrength(ji) + 2._wp * araft(ji,jl) * zhi * zhi ! PE gain (rafting)
zstrength(ji) = zstrength(ji) + aridge(ji,jl) * h2rdg * hi_hrdg(ji,jl) ! PE gain (ridging)
ENDIF
!
END DO
......@@ -863,6 +953,11 @@ CONTAINS
!
zstrength(1:npti) = rn_pe_rdg * zcp * zstrength(1:npti) / zaksum(1:npti)
!
! Enforce a maximum for strength
! Richter-Menge and Elder (1998) estimate maximum in Beaufort Sea in wintertime of the order 150 kN/m
WHERE( zstrength(1:npti) > zmax_strength ) ; zstrength(1:npti) = zmax_strength
ENDWHERE
!
CALL tab_1d_2d( npti, nptidx(1:npti), zstrength(1:npti), strength )
!
ENDIF
......@@ -901,24 +996,22 @@ CONTAINS
!!-----------------------------------------------------------------------
!! *** ROUTINE ice_dyn_1d2d ***
!!
!! ** Purpose : move arrays from 1d to 2d and the reverse
!! ** Purpose : move arrays between 1d <=> 2d forms and
!! between 2d <=> 3d forms
!!-----------------------------------------------------------------------
INTEGER, INTENT(in) :: kn ! 1= from 2D to 1D ; 2= from 1D to 2D
INTEGER, INTENT(in) :: kn ! 1= from 2D/3D to 1D/2D
! 2= from 1D/2D to 2D/3D
!
INTEGER :: jl, jk ! dummy loop indices
!!-----------------------------------------------------------------------
!
SELECT CASE( kn )
! !---------------------!
CASE( 1 ) !== from 2D to 1D ==!
! !---------------------!
! !---------------------------!
CASE( 1 ) !== from 2D/3D to 1D/2D ==!
! !---------------------------!
! fields used but not modified
CALL tab_2d_1d( npti, nptidx(1:npti), sss_1d(1:npti), sss_m(:,:) )
CALL tab_2d_1d( npti, nptidx(1:npti), sst_1d(1:npti), sst_m(:,:) )
! the following fields are modified in this routine
!!CALL tab_2d_1d( npti, nptidx(1:npti), ato_i_1d(1:npti), ato_i(:,:) )
!!CALL tab_3d_2d( npti, nptidx(1:npti), a_i_2d(1:npti,1:jpl), a_i(:,:,:) )
!!CALL tab_3d_2d( npti, nptidx(1:npti), v_i_2d (1:npti,1:jpl), v_i (:,:,:) )
CALL tab_3d_2d( npti, nptidx(1:npti), v_s_2d (1:npti,1:jpl), v_s (:,:,:) )
CALL tab_3d_2d( npti, nptidx(1:npti), sv_i_2d(1:npti,1:jpl), sv_i(:,:,:) )
CALL tab_3d_2d( npti, nptidx(1:npti), oa_i_2d(1:npti,1:jpl), oa_i(:,:,:) )
......@@ -940,9 +1033,9 @@ CONTAINS
CALL tab_2d_1d( npti, nptidx(1:npti), wfx_snw_dyn_1d(1:npti), wfx_snw_dyn(:,:) )
CALL tab_2d_1d( npti, nptidx(1:npti), wfx_pnd_1d (1:npti), wfx_pnd (:,:) )
!
! !---------------------!
CASE( 2 ) !== from 1D to 2D ==!
! !---------------------!
! !---------------------------!
CASE( 2 ) !== from 1D/2D to 2D/3D ==!
! !---------------------------!
CALL tab_1d_2d( npti, nptidx(1:npti), ato_i_1d(1:npti), ato_i(:,:) )
CALL tab_2d_3d( npti, nptidx(1:npti), a_i_2d (1:npti,1:jpl), a_i (:,:,:) )
CALL tab_2d_3d( npti, nptidx(1:npti), v_i_2d (1:npti,1:jpl), v_i (:,:,:) )
......@@ -1014,7 +1107,7 @@ CONTAINS
WRITE(numout,*) ' ice strength value rn_str = ', rn_str
WRITE(numout,*) ' spatial smoothing of the strength ln_str_smooth= ', ln_str_smooth
WRITE(numout,*) ' redistribution of ridged ice: linear (Hibler 1980) ln_distf_lin = ', ln_distf_lin
WRITE(numout,*) ' redistribution of ridged ice: exponential ln_distf_exp = ', ln_distf_exp
WRITE(numout,*) ' redistribution of ridged ice: exponential(Lipscomb 2007) ln_distf_exp = ', ln_distf_exp
WRITE(numout,*) ' e-folding scale of ridged ice rn_murdg = ', rn_murdg
WRITE(numout,*) ' Fraction of shear energy contributing to ridging rn_csrdg = ', rn_csrdg
WRITE(numout,*) ' linear ridging participation function ln_partf_lin = ', ln_partf_lin
......@@ -1039,11 +1132,13 @@ CONTAINS
IF( ln_str_CST ) THEN ; ioptio = ioptio + 1 ; nice_str = np_strcst ; ENDIF
IF( ioptio /= 1 ) CALL ctl_stop( 'ice_dyn_rdgrft_init: one and only one ice strength option has to be defined ' )
!
IF ( ( ln_str_H79 .AND. ln_str_R75 ) .OR. ( .NOT.ln_str_H79 .AND. .NOT.ln_str_R75 ) ) THEN
CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one ice strength formulation (ln_str_H79 or ln_str_R75)' )
ENDIF
!
IF ( ( ln_distf_lin .AND. ln_distf_exp ) .OR. ( .NOT.ln_distf_lin .AND. .NOT.ln_distf_exp ) ) THEN
CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one redistribution function (ln_distf_lin or ln_distf_exp)' )
ENDIF
!!clem
IF( ln_distf_exp ) CALL ctl_stop( 'ice_dyn_rdgrft_init: exponential redistribution function not coded yet (ln_distf_exp)' )
!
IF ( ( ln_partf_lin .AND. ln_partf_exp ) .OR. ( .NOT.ln_partf_lin .AND. .NOT.ln_partf_exp ) ) THEN
CALL ctl_stop( 'ice_dyn_rdgrft_init: choose one and only one participation function (ln_partf_lin or ln_partf_exp)' )
......
......@@ -26,6 +26,7 @@ MODULE icerst
!
USE in_out_manager ! I/O manager
USE iom ! I/O manager library
USE ioipsl , ONLY : ju2ymds ! for calendar
USE lib_mpp ! MPP library
USE lib_fortran ! fortran utilities (glob_sum + no signed zero)
......@@ -51,6 +52,9 @@ CONTAINS
!!----------------------------------------------------------------------
INTEGER, INTENT(in) :: kt ! number of iteration
!
INTEGER :: iyear, imonth, iday
REAL (wp) :: zsec
REAL (wp) :: zfjulday
CHARACTER(len=20) :: clkt ! ocean time-step define as a character
CHARACTER(len=50) :: clname ! ice output restart file name
CHARACTER(len=256) :: clpath ! full path to ice output restart file
......@@ -67,8 +71,15 @@ CONTAINS
& .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN
IF( nitrst <= nitend .AND. nitrst > 0 ) THEN
! beware of the format used to write kt (default is i8.8, that should be large enough...)
IF( nitrst > 99999999 ) THEN ; WRITE(clkt, * ) nitrst
ELSE ; WRITE(clkt, '(i8.8)') nitrst
IF ( ln_rstdate ) THEN
zfjulday = fjulday + (2*nn_fsbc+1)*rdt / rday
IF( ABS(zfjulday - REAL(NINT(zfjulday),wp)) < 0.1 / rday ) zfjulday = REAL(NINT(zfjulday),wp) ! avoid truncation error
CALL ju2ymds( zfjulday, iyear, imonth, iday, zsec )
WRITE(clkt, '(i4.4,2i2.2)') iyear, imonth, iday
ELSE
IF( nitrst > 99999999 ) THEN ; WRITE(clkt, * ) nitrst
ELSE ; WRITE(clkt, '(i8.8)') nitrst
ENDIF
ENDIF
! create the file
clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_icerst_out)
......@@ -313,6 +324,11 @@ CONTAINS
ENDIF
ENDIF
! If this is a coupled model we need to pick up a_i for use as a_i_last_couple
IF (ln_cpl) then
a_i_last_couple = a_i
ENDIF
IF(.NOT.lrxios) CALL iom_delay_rst( 'READ', 'ICE', numrir ) ! read only ice delayed global communication variables
! ! ---------------------------------- !
ELSE ! == case of a simplified restart == !
......
......@@ -275,7 +275,7 @@ CONTAINS
CALL ice_istate( nit000, Kbb, Kmm, Kaa ) ! start from rest or read a file
ENDIF
CALL ice_var_glo2eqv
CALL ice_var_agg(1)
CALL ice_var_agg(2)
!
CALL ice_dyn_init ! set ice dynamics parameters
!
......
......@@ -32,14 +32,15 @@ MODULE icetab
!!----------------------------------------------------------------------
CONTAINS
SUBROUTINE tab_3d_2d( ndim1d, tab_ind, tab1d, tab2d )
SUBROUTINE tab_3d_2d( ndim1d, tab_ind, tab2d, tab3d )
!!----------------------------------------------------------------------
!! *** ROUTINE tab_2d_1d ***
!! *** ROUTINE tab_3d_2d ***
!!----------------------------------------------------------------------
INTEGER , INTENT(in ) :: ndim1d ! 1d size
INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index
REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(in ) :: tab2d ! input 2D field
REAL(wp), DIMENSION(ndim1d,jpl) , INTENT(inout) :: tab1d ! output 1D field
REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(in ) :: tab3d ! input 3D field
REAL(wp), DIMENSION(ndim1d,jpl) , INTENT(inout) :: tab2d ! output 2D field
!
INTEGER :: jl, jn, jid, jjd
!!----------------------------------------------------------------------
......@@ -47,7 +48,7 @@ CONTAINS
DO jn = 1, ndim1d
jid = MOD( tab_ind(jn) - 1 , jpi ) + 1
jjd = ( tab_ind(jn) - 1 ) / jpi + 1
tab1d(jn,jl) = tab2d(jid,jjd,jl)
tab2d(jn,jl) = tab3d(jid,jjd,jl)
END DO
END DO
END SUBROUTINE tab_3d_2d
......@@ -72,14 +73,14 @@ CONTAINS
END SUBROUTINE tab_2d_1d
SUBROUTINE tab_2d_3d( ndim1d, tab_ind, tab1d, tab2d )
SUBROUTINE tab_2d_3d( ndim1d, tab_ind, tab2d, tab3d )
!!----------------------------------------------------------------------
!! *** ROUTINE tab_2d_1d ***
!! *** ROUTINE tab_2d_3d ***
!!----------------------------------------------------------------------
INTEGER , INTENT(in ) :: ndim1d ! 1D size
INTEGER , DIMENSION(ndim1d) , INTENT(in ) :: tab_ind ! input index
REAL(wp), DIMENSION(ndim1d,jpl) , INTENT(in ) :: tab1d ! input 1D field
REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(inout) :: tab2d ! output 2D field
REAL(wp), DIMENSION(ndim1d,jpl) , INTENT(in ) :: tab2d ! input 2D field
REAL(wp), DIMENSION(jpi,jpj,jpl), INTENT(inout) :: tab3d ! output 3D field
!
INTEGER :: jl, jn, jid, jjd
!!----------------------------------------------------------------------
......@@ -87,7 +88,7 @@ CONTAINS
DO jn = 1, ndim1d
jid = MOD( tab_ind(jn) - 1 , jpi ) + 1
jjd = ( tab_ind(jn) - 1 ) / jpi + 1
tab2d(jid,jjd,jl) = tab1d(jn,jl)
tab3d(jid,jjd,jl) = tab2d(jn,jl)
END DO
END DO
END SUBROUTINE tab_2d_3d
......
......@@ -192,8 +192,8 @@ CONTAINS
! Snow melting
! ------------
! If heat still available (zq_top > 0)
! then all snw precip has been melted and we need to melt more snow
! Melt snow layers, starting with newly fallen snow layer 0
! and moving downward, until zq_top=0
DO jk = 0, nlay_s
DO ji = 1, npti
IF( zh_s(ji,jk) > 0._wp .AND. zq_top(ji) > 0._wp ) THEN
......@@ -216,10 +216,10 @@ CONTAINS
END DO
END DO
! Snow sublimation
!-----------------
! qla_ice is always >=0 (upwards), heat goes to the atmosphere, therefore snow sublimates
! comment: not counted in mass/heat exchange in iceupdate.F90 since this is an exchange with atm. (not ocean)
! Snow sublimation and deposition
!--------------------------------
! when evap_ice_1d > 0 (upwards) snow sublimates and snow thickness decreases
! when evap_ice_1d < 0 (downwards) deposition occurs and snow thickness increases
zdeltah (1:npti) = 0._wp ! total snow thickness that sublimates, < 0
zevap_rema(1:npti) = 0._wp
DO ji = 1, npti
......
......@@ -140,10 +140,10 @@ CONTAINS
!------------------------------------
! Diagnostics
!------------------------------------
CALL iom_put( 'dvpn_mlt', diag_dvpn_mlt ) ! input from melting
CALL iom_put( 'dvpn_lid', diag_dvpn_lid ) ! exchanges with lid
CALL iom_put( 'dvpn_drn', diag_dvpn_drn ) ! vertical drainage
CALL iom_put( 'dvpn_rnf', diag_dvpn_rnf ) ! runoff + overflow
IF( iom_use('dvpn_mlt' ) ) CALL iom_put( 'dvpn_mlt', diag_dvpn_mlt ) ! input from melting
IF( iom_use('dvpn_lid' ) ) CALL iom_put( 'dvpn_lid', diag_dvpn_lid ) ! exchanges with lid
IF( iom_use('dvpn_drn' ) ) CALL iom_put( 'dvpn_drn', diag_dvpn_drn ) ! vertical drainage
IF( iom_use('dvpn_rnf' ) ) CALL iom_put( 'dvpn_rnf', diag_dvpn_rnf ) ! runoff + overflow
!
DEALLOCATE( diag_dvpn_mlt , diag_dvpn_lid , diag_dvpn_drn , diag_dvpn_rnf )
DEALLOCATE( diag_dvpn_mlt_1d, diag_dvpn_lid_1d, diag_dvpn_drn_1d, diag_dvpn_rnf_1d )
......@@ -544,7 +544,7 @@ CONTAINS
! a_ip -> apond
! a_ip_frac -> apnd
CALL ctl_stop( 'STOP', 'icethd_pnd : topographic melt ponds are still an ongoing work' )
!CALL ctl_stop( 'STOP', 'icethd_pnd : topographic melt ponds are still an ongoing work' )
!---------------------------------------------------------------
! Initialise
......@@ -644,12 +644,6 @@ CONTAINS
!--------------------------
! Pond lid growth and melt
!--------------------------
! Mean surface temperature
zTavg = 0._wp
DO jl = 1, jpl
zTavg = zTavg + t_su(ji,jj,jl)*a_i(ji,jj,jl)
END DO
zTavg = zTavg / a_i(ji,jj,jl) !!! could get a division by zero here
DO jl = 1, jpl-1
......@@ -692,8 +686,8 @@ CONTAINS
! differential growth of base of surface floating ice layer
zdTice = MAX( - ( t_su(ji,jj,jl) - zTd ) , 0._wp ) ! > 0
zomega = rcnd_i * zdTice / zrhoi_L
zdHui = SQRT( 2._wp * zomega * rDt_ice + ( v_il(ji,jj,jl) / a_i(ji,jj,jl) )**2 ) &
- v_il(ji,jj,jl) / a_i(ji,jj,jl)
zdHui = SQRT( 2._wp * zomega * rDt_ice + ( v_il(ji,jj,jl) / a_ip(ji,jj,jl) )**2 ) &
- v_il(ji,jj,jl) / a_ip(ji,jj,jl)
zdvice = min( zdHui*a_ip(ji,jj,jl) , v_ip(ji,jj,jl) )
IF ( zdvice > epsi10 ) THEN
......@@ -1319,7 +1313,9 @@ CONTAINS
!-----------------------------------------------------------------
! brine salinity and liquid fraction
!-----------------------------------------------------------------
SELECT CASE( nn_pnd_brsal )
CASE( 0 )
DO k = 1, nlay_i
Sbr = - Tin(k) / rTmlt ! Consistent expression with SI3 (linear liquidus)
......@@ -1328,6 +1324,16 @@ CONTAINS
phi(k) = salin(k) / Sbr
END DO
CASE( 1 )
DO k = 1, nlay_i
Sbr = - 18.7 * Tin(k) - 0.519 * Tin(k)**2 - 0.00535 * Tin(k) **3
phi(k) = salin(k) / Sbr
END DO
END SELECT
!-----------------------------------------------------------------
! permeability
......@@ -1354,7 +1360,7 @@ CONTAINS
NAMELIST/namthd_pnd/ ln_pnd, ln_pnd_LEV , rn_apnd_min, rn_apnd_max, rn_pnd_flush, &
& ln_pnd_CST , rn_apnd, rn_hpnd, &
& ln_pnd_TOPO, &
& ln_pnd_lids, ln_pnd_alb
& ln_pnd_lids, ln_pnd_alb, nn_pnd_brsal
!!-------------------------------------------------------------------
!
READ ( numnam_ice_ref, namthd_pnd, IOSTAT = ios, ERR = 901)
......@@ -1379,6 +1385,7 @@ CONTAINS
WRITE(numout,*) ' Prescribed pond depth rn_hpnd = ', rn_hpnd
WRITE(numout,*) ' Frozen lids on top of melt ponds ln_pnd_lids = ', ln_pnd_lids
WRITE(numout,*) ' Melt ponds affect albedo or not ln_pnd_alb = ', ln_pnd_alb
WRITE(numout,*) ' Brine salinity formulation nn_pnd_brsal = ', nn_pnd_brsal
ENDIF
!
! !== set the choice of ice pond scheme ==!
......
......@@ -939,7 +939,7 @@ CONTAINS
ELSE
cnd_ice_1d(ji) = 2._wp * ztcond_i(ji,0) / zhi_ssl ! cnd_ice is capped by: cond_i/zhi_ssl
ENDIF
t1_ice_1d(ji) = isnow(ji) * t_s_1d(ji,1) + ( 1._wp - isnow(ji) ) * t_i_1d(ji,1)
t1_ice_1d(ji) = isnow_comb(ji) * t_s_1d(ji,1) + ( 1._wp - isnow_comb(ji) ) * t_i_1d(ji,1)
END DO
!
IF( k_cnd == np_cnd_EMU ) THEN
......
......@@ -103,7 +103,7 @@ CONTAINS
IF( iom_use('icethic' ) ) CALL iom_put( 'icethic', hm_i * zmsk00 ) ! ice thickness
IF( iom_use('snwthic' ) ) CALL iom_put( 'snwthic', hm_s * zmsk00 ) ! snw thickness
IF( iom_use('icebrv' ) ) CALL iom_put( 'icebrv' , bvm_i* 100. * zmsk00 ) ! brine volume
IF( iom_use('iceage' ) ) CALL iom_put( 'iceage' , om_i / rday * zmsk15 + zmiss_val * ( 1._wp - zmsk15 ) ) ! ice age
IF( iom_use('iceage' ) ) CALL iom_put( 'iceage' , om_i / rday * zmsk15 ) ! ice age
IF( iom_use('icehnew' ) ) CALL iom_put( 'icehnew', ht_i_new ) ! new ice thickness formed in the leads
IF( iom_use('snwvolu' ) ) CALL iom_put( 'snwvolu', vt_s * zmsksn ) ! snow volume
IF( iom_use('icefrb' ) ) THEN ! Ice freeboard
......@@ -118,14 +118,15 @@ CONTAINS
IF( iom_use('icehlid' ) ) CALL iom_put( 'icehlid', hm_il * zmsk00 ) ! melt pond lid depth
IF( iom_use('icevlid' ) ) CALL iom_put( 'icevlid', vt_il * zmsk00 ) ! melt pond lid total volume per unit area
! salt
IF( iom_use('icesalt' ) ) CALL iom_put( 'icesalt', sm_i * zmsk00 + zmiss_val * ( 1._wp - zmsk00 ) ) ! mean ice salinity
IF( iom_use('icesalt' ) ) CALL iom_put( 'icesalt', sm_i * zmsk00 ) ! mean ice salinity
IF( iom_use('icesalm' ) ) CALL iom_put( 'icesalm', st_i * rhoi * 1.0e-3 * zmsk00 ) ! Mass of salt in sea ice per cell area
IF( iom_use('iceepnd' ) ) CALL iom_put( 'iceepnd', SUM( a_ip_eff * a_i, dim=3 ) * zmsk00 ) ! melt pond total effective fraction per cell area
! heat
IF( iom_use('icetemp' ) ) CALL iom_put( 'icetemp', ( tm_i - rt0 ) * zmsk00 + zmiss_val * ( 1._wp - zmsk00 ) ) ! ice mean temperature
IF( iom_use('snwtemp' ) ) CALL iom_put( 'snwtemp', ( tm_s - rt0 ) * zmsksn + zmiss_val * ( 1._wp - zmsksn ) ) ! snw mean temperature
IF( iom_use('icettop' ) ) CALL iom_put( 'icettop', ( tm_su - rt0 ) * zmsk00 + zmiss_val * ( 1._wp - zmsk00 ) ) ! temperature at the ice surface
IF( iom_use('icetbot' ) ) CALL iom_put( 'icetbot', ( t_bo - rt0 ) * zmsk00 + zmiss_val * ( 1._wp - zmsk00 ) ) ! temperature at the ice bottom
IF( iom_use('icetsni' ) ) CALL iom_put( 'icetsni', ( tm_si - rt0 ) * zmsk00 + zmiss_val * ( 1._wp - zmsk00 ) ) ! temperature at the snow-ice interface
IF( iom_use('icetemp' ) ) CALL iom_put( 'icetemp', ( tm_i - rt0 ) * zmsk00 ) ! ice mean temperature
IF( iom_use('snwtemp' ) ) CALL iom_put( 'snwtemp', ( tm_s - rt0 ) * zmsksn ) ! snw mean temperature
IF( iom_use('icettop' ) ) CALL iom_put( 'icettop', ( tm_su - rt0 ) * zmsk00 ) ! temperature at the ice surface
IF( iom_use('icetbot' ) ) CALL iom_put( 'icetbot', ( t_bo - rt0 ) * zmsk00 ) ! temperature at the ice bottom
IF( iom_use('icetsni' ) ) CALL iom_put( 'icetsni', ( tm_si - rt0 ) * zmsk00 ) ! temperature at the snow-ice interface
IF( iom_use('icehc' ) ) CALL iom_put( 'icehc' , -et_i * zmsk00 ) ! ice heat content
IF( iom_use('snwhc' ) ) CALL iom_put( 'snwhc' , -et_s * zmsksn ) ! snow heat content
! momentum
......@@ -169,16 +170,16 @@ CONTAINS
! --- category-dependent fields --- !
IF( iom_use('icemask_cat' ) ) CALL iom_put( 'icemask_cat' , zmsk00l ) ! ice mask 0%
IF( iom_use('iceconc_cat' ) ) CALL iom_put( 'iceconc_cat' , a_i * zmsk00l ) ! area for categories
IF( iom_use('icethic_cat' ) ) CALL iom_put( 'icethic_cat' , h_i * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! thickness for categories
IF( iom_use('snwthic_cat' ) ) CALL iom_put( 'snwthic_cat' , h_s * zmsksnl + zmiss_val * ( 1._wp - zmsksnl ) ) ! snow depth for categories
IF( iom_use('icesalt_cat' ) ) CALL iom_put( 'icesalt_cat' , s_i * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! salinity for categories
IF( iom_use('iceage_cat' ) ) CALL iom_put( 'iceage_cat' , o_i / rday * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! ice age
IF( iom_use('icethic_cat' ) ) CALL iom_put( 'icethic_cat' , h_i * zmsk00l ) ! thickness for categories
IF( iom_use('snwthic_cat' ) ) CALL iom_put( 'snwthic_cat' , h_s * zmsksnl ) ! snow depth for categories
IF( iom_use('icesalt_cat' ) ) CALL iom_put( 'icesalt_cat' , s_i * zmsk00l ) ! salinity for categories
IF( iom_use('iceage_cat' ) ) CALL iom_put( 'iceage_cat' , o_i / rday * zmsk00l ) ! ice age
IF( iom_use('icetemp_cat' ) ) CALL iom_put( 'icetemp_cat' , ( SUM( t_i, dim=3 ) * r1_nlay_i - rt0 ) &
& * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! ice temperature
& * zmsk00l ) ! ice temperature
IF( iom_use('snwtemp_cat' ) ) CALL iom_put( 'snwtemp_cat' , ( SUM( t_s, dim=3 ) * r1_nlay_s - rt0 ) &
& * zmsksnl + zmiss_val * ( 1._wp - zmsksnl ) ) ! snow temperature
IF( iom_use('icettop_cat' ) ) CALL iom_put( 'icettop_cat' , ( t_su - rt0 ) * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! surface temperature
IF( iom_use('icebrv_cat' ) ) CALL iom_put( 'icebrv_cat' , bv_i * 100. * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! brine volume
& * zmsksnl ) ! snow temperature
IF( iom_use('icettop_cat' ) ) CALL iom_put( 'icettop_cat' , ( t_su - rt0 ) * zmsk00l ) ! surface temperature
IF( iom_use('icebrv_cat' ) ) CALL iom_put( 'icebrv_cat' , bv_i * 100. * zmsk00l ) ! brine volume
IF( iom_use('iceapnd_cat' ) ) CALL iom_put( 'iceapnd_cat' , a_ip * zmsk00l ) ! melt pond frac for categories
IF( iom_use('icevpnd_cat' ) ) CALL iom_put( 'icevpnd_cat' , v_ip * zmsk00l ) ! melt pond volume for categories
IF( iom_use('icehpnd_cat' ) ) CALL iom_put( 'icehpnd_cat' , h_ip * zmsk00l + zmiss_val * ( 1._wp - zmsk00l ) ) ! melt pond thickness for categories
......
......@@ -15,6 +15,7 @@ MODULE diahth
USE oce ! ocean dynamics and tracers
USE dom_oce ! ocean space and time domain
USE phycst ! physical constants
USE zdfmxl, ONLY: zdf_mxl_zint
!
USE in_out_manager ! I/O manager
USE lib_mpp ! MPP library
......@@ -292,6 +293,9 @@ CONTAINS
!
ENDIF
! Vertically-interpolated mixed-layer depth diagnostic
CALL zdf_mxl_zint( kt, Kmm )
!
IF( ln_timing ) CALL timing_stop('dia_hth')
!
......
MODULE diaprod
! Requires key_iom_put
# if defined key_xios
!!======================================================================
!! *** MODULE diaprod ***
!! Ocean diagnostics : write ocean product diagnostics
!!=====================================================================
!! History : 3.4 ! 2012 (D. Storkey) Original code
!! 4.0 ! 2019 (D. Storkey)
!!----------------------------------------------------------------------
!!----------------------------------------------------------------------
!! dia_prod : calculate and write out product diagnostics
!!----------------------------------------------------------------------
USE oce ! ocean dynamics and tracers
USE dom_oce ! ocean space and time domain
USE domvvl ! for thickness weighted diagnostics if key_vvl
USE eosbn2 ! equation of state (eos call)
USE phycst ! physical constants
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
USE in_out_manager ! I/O manager
USE iom
USE ioipsl
USE lib_mpp ! MPP library
USE timing ! preformance summary
IMPLICIT NONE
PRIVATE
PUBLIC dia_prod ! routines called by step.F90
!! * Substitutions
# include "do_loop_substitute.h90"
!!----------------------------------------------------------------------
!! NEMO/OPA 3.4 , NEMO Consortium (2012)
!! $Id$
!! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
!!----------------------------------------------------------------------
CONTAINS
SUBROUTINE dia_prod( kt, Kmm )
!!---------------------------------------------------------------------
!! *** ROUTINE dia_prod ***
!!
!! ** Purpose : Write out product diagnostics (uT, vS etc.)
!!
!! ** Method : use iom_put
!! Product diagnostics are not thickness-weighted in this routine.
!! They should be thickness-weighted using XIOS if key_vvl is set.
!!----------------------------------------------------------------------
!!
INTEGER, INTENT( in ) :: kt ! ocean time-step index
INTEGER, INTENT( in ) :: Kmm ! ocean time level index
!!
INTEGER :: ji, jj, jk ! dummy loop indices
REAL(wp) :: zztmp, zztmpx, zztmpy !
!!
REAL(wp), POINTER, DIMENSION(:,:) :: z2d ! 2D workspace
REAL(wp), POINTER, DIMENSION(:,:,:) :: z3d ! 3D workspace
REAL(wp), POINTER, DIMENSION(:,:,:) :: zrhop ! potential density
!!----------------------------------------------------------------------
!
IF( ln_timing ) CALL timing_start('dia_prod')
!
ALLOCATE( z2d(jpi,jpj), z3d(jpi,jpj,jpk), zrhop(jpi,jpj,jpk) )
!
IF( iom_use("urhop") .OR. iom_use("vrhop") .OR. iom_use("wrhop") &
#if ! defined key_diaar5
& .OR. iom_use("rhop") &
#endif
& ) THEN
CALL eos( ts(:,:,:,:,Kmm), z3d, zrhop ) ! now in situ and potential density
zrhop(:,:,:) = zrhop(:,:,:)-1000.e0 ! reference potential density to 1000 to avoid precision issues in rhop2 calculation
zrhop(:,:,jpk) = 0._wp
#if ! defined key_diaar5
CALL iom_put( 'rhop', zrhop )
#else
! If key_diaar5 set then there is already an iom_put call to output rhop.
! Really should be a standard diagnostics option?
#endif
ENDIF
IF( iom_use("ut") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = uu(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji+1,jj,jk,jp_tem,Kmm) )
END_3D
CALL iom_put( "ut", z3d ) ! product of temperature and zonal velocity at U points
ENDIF
IF( iom_use("vt") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = vv(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_tem,Kmm) + ts(ji,jj+1,jk,jp_tem,Kmm) )
END_3D
CALL iom_put( "vt", z3d ) ! product of temperature and meridional velocity at V points
ENDIF
IF( iom_use("wt") ) THEN
z3d(:,:,:) = 0.e0
DO_2D( 0, 0, 0, 0 )
z3d(ji,jj,1) = ww(ji,jj,1) * ts(ji,jj,1,jp_tem,Kmm)
END_2D
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = ww(ji,jj,jk) * 0.5 * ( ts(ji,jj,jk-1,jp_tem,Kmm) + ts(ji,jj,jk,jp_tem,Kmm) )
END_3D
CALL iom_put( "wt", z3d ) ! product of temperature and vertical velocity at W points
ENDIF
IF( iom_use("us") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = uu(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji+1,jj,jk,jp_sal,Kmm) )
END_3D
CALL iom_put( "us", z3d ) ! product of salinity and zonal velocity at U points
ENDIF
IF( iom_use("vs") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = vv(ji,jj,jk,Kmm) * 0.5 * ( ts(ji,jj,jk,jp_sal,Kmm) + ts(ji,jj+1,jk,jp_sal,Kmm) )
END_3D
CALL iom_put( "vs", z3d ) ! product of salinity and meridional velocity at V points
ENDIF
IF( iom_use("ws") ) THEN
z3d(:,:,:) = 0.e0
DO_2D( 0, 0, 0, 0 )
z3d(ji,jj,1) = ww(ji,jj,1) * ts(ji,jj,1,jp_sal,Kmm)
END_2D
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = ww(ji,jj,jk) * 0.5 * ( ts(ji,jj,jk-1,jp_sal,Kmm) + ts(ji,jj,jk,jp_sal,Kmm) )
END_3D
CALL iom_put( "ws", z3d ) ! product of salinity and vertical velocity at W points
ENDIF
IF( iom_use("uv") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = 0.25 * ( uu(ji-1,jj,jk,Kmm) + uu(ji,jj,jk,Kmm) ) * ( vv(ji,jj-1,jk,Kmm) + vv(ji,jj,jk,Kmm) )
END_3D
CALL iom_put( "uv", z3d ) ! product of zonal velocity and meridional velocity at T points
ENDIF
IF( iom_use("uw") ) THEN
z3d(:,:,:) = 0.e0
DO_2D( 0, 0, 0, 0 )
z3d(ji,jj,1) = 0.5 * ( ww(ji,jj,1) + ww(ji+1,jj,1) ) * uu(ji,jj,1,Kmm)
END_2D
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = 0.25 * ( ww(ji,jj,jk) + ww(ji+1,jj,jk) ) * ( uu(ji,jj,jk-1,Kmm) + uu(ji,jj,jk,Kmm) )
END_3D
CALL iom_put( "uw", z3d ) ! product of zonal velocity and vertical velocity at UW points
ENDIF
IF( iom_use("vw") ) THEN
z3d(:,:,:) = 0.e0
DO_2D( 0, 0, 0, 0 )
z3d(ji,jj,1) = 0.5 * ( ww(ji,jj,1) + ww(ji,jj+1,1) ) * vv(ji,jj,1,Kmm)
END_2D
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = 0.25 * ( ww(ji,jj,jk) + ww(ji,jj+1,jk) ) * ( vv(ji,jj,jk-1,Kmm) + vv(ji,jj,jk,Kmm) )
END_3D
CALL iom_put( "vw", z3d ) ! product of meriodional velocity and vertical velocity at VW points
ENDIF
IF( iom_use("urhop") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = uu(ji,jj,jk,Kmm) * 0.5 * ( zrhop(ji,jj,jk) + zrhop(ji+1,jj,jk) )
END_3D
CALL iom_put( "urhop", z3d ) ! product of density and zonal velocity at U points
ENDIF
IF( iom_use("vrhop") ) THEN
z3d(:,:,:) = 0.e0
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = vv(ji,jj,jk,Kmm) * 0.5 * ( zrhop(ji,jj,jk) + zrhop(ji,jj+1,jk) )
END_3D
CALL iom_put( "vrhop", z3d ) ! product of density and meridional velocity at V points
ENDIF
IF( iom_use("wrhop") ) THEN
z3d(:,:,:) = 0.e0
DO_2D( 0, 0, 0, 0 )
z3d(ji,jj,1) = ww(ji,jj,1) * zrhop(ji,jj,1)
END_2D
DO_3D( 0, 0, 0, 0, 1, jpk )
z3d(ji,jj,jk) = ww(ji,jj,jk) * 0.5 * ( zrhop(ji,jj,jk-1) + zrhop(ji,jj,jk) )
END_3D
CALL iom_put( "wrhop", z3d ) ! product of density and vertical velocity at W points
ENDIF
!
DEALLOCATE( z2d, z3d, zrhop )
!
IF( ln_timing ) CALL timing_stop('dia_prod')
!
END SUBROUTINE dia_prod
#else
!!----------------------------------------------------------------------
!! Default option : NO diaprod
!!----------------------------------------------------------------------
LOGICAL, PUBLIC, PARAMETER :: lk_diaprod = .FALSE. ! coupled flag
CONTAINS
SUBROUTINE dia_prod( kt , Kmm) ! Empty routine
INTEGER :: kt, Kmm
!WRITE(*,*) 'dia_prod: You should not have seen this print! error?', kt
END SUBROUTINE dia_prod
#endif
!!======================================================================
END MODULE diaprod
......@@ -46,6 +46,7 @@ MODULE diawri
USE zdf_oce ! ocean vertical physics
USE zdfdrg ! ocean vertical physics: top/bottom friction
USE zdfmxl ! mixed layer
USE zdftke , ONLY: htau
USE zdfosm ! mixed layer
!
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
......@@ -53,6 +54,7 @@ MODULE diawri
USE dia25h ! 25h Mean output
USE iom !
USE ioipsl !
USE eosbn2
#if defined key_si3
USE ice
......@@ -124,9 +126,33 @@ CONTAINS
REAL(wp):: ze3
REAL(wp), DIMENSION(A2D( 0)) :: z2d ! 2D workspace
REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: z3d ! 3D workspace
CHARACTER(len=4),SAVE :: ttype , stype ! temperature and salinity type
!!----------------------------------------------------------------------
!
IF( ln_timing ) CALL timing_start('dia_wri')
!
IF( kt == nit000 ) THEN
IF( ln_TEOS10 ) THEN
IF ( iom_use("toce_pot") .OR. iom_use("soce_pra") .OR. iom_use("sst_pot") .OR. iom_use("sss_pra") &
& .OR. iom_use("sbt_pot") .OR. iom_use("sbs_pra") .OR. iom_use("sstgrad_pot") .OR. iom_use("sstgrad2_pot") &
& .OR. iom_use("tosmint_pot") .OR. iom_use("somint_pra")) THEN
CALL ctl_stop( 'diawri: potential temperature and practical salinity not available with ln_TEOS10' )
ELSE
ttype='con' ; stype='abs' ! teos-10 using conservative temperature and absolute salinity
ENDIF
ELSE IF ( ln_SEOS) THEN
ttype='seos' ; stype='seos' ! seos using Simplified Equation of state
ELSE
IF ( iom_use("toce_con") .OR. iom_use("soce_abs") .OR. iom_use("sst_con") .OR. iom_use("sss_abs") &
& .OR. iom_use("sbt_con") .OR. iom_use("sbs_abs") .OR. iom_use("sstgrad_con") .OR. iom_use("sstgrad2_con") &
& .OR. iom_use("tosmint_con") .OR. iom_use("somint_abs")) THEN
CALL ctl_stop( 'diawri: conservative temperature and absolute salinity not available with ln_EOS80' )
ELSE
ttype='pot' ; stype='pra' ! eos-80 using potential temperature and practical salinity
ENDIF
ENDIF
ENDIF
!
! Output the initial state and forcings
IF( ninist == 1 ) THEN
......@@ -207,25 +233,25 @@ CONTAINS
#endif
! --- tracers T&S --- !
CALL iom_put( "toce", ts(:,:,:,jp_tem,Kmm) ) ! 3D temperature
CALL iom_put( "sst", ts(:,:,1,jp_tem,Kmm) ) ! surface temperature
CALL iom_put( "toce_"//ttype, ts(:,:,:,jp_tem,Kmm) ) ! 3D temperature
CALL iom_put( "sst_"//ttype, ts(:,:,1,jp_tem,Kmm) ) ! surface temperature
IF ( iom_use("sbt") ) THEN
IF ( iom_use("sbt_"//ttype) ) THEN
DO_2D( 0, 0, 0, 0 )
ikbot = mbkt(ji,jj)
z2d(ji,jj) = ts(ji,jj,ikbot,jp_tem,Kmm)
END_2D
CALL iom_put( "sbt", z2d ) ! bottom temperature
CALL iom_put( "sbt_"//ttype, z2d ) ! bottom temperature
ENDIF
CALL iom_put( "soce", ts(:,:,:,jp_sal,Kmm) ) ! 3D salinity
CALL iom_put( "sss", ts(:,:,1,jp_sal,Kmm) ) ! surface salinity
IF ( iom_use("sbs") ) THEN
CALL iom_put( "soce_"//stype, ts(:,:,:,jp_sal,Kmm) ) ! 3D salinity
CALL iom_put( "sss_"//stype, ts(:,:,1,jp_sal,Kmm) ) ! surface salinity
IF ( iom_use("sbs_"//stype) ) THEN
DO_2D( 0, 0, 0, 0 )
ikbot = mbkt(ji,jj)
z2d(ji,jj) = ts(ji,jj,ikbot,jp_sal,Kmm)
END_2D
CALL iom_put( "sbs", z2d ) ! bottom salinity
CALL iom_put( "sbs_"//stype, z2d ) ! bottom salinity
ENDIF
IF( .NOT.lk_SWE ) CALL iom_put( "rhop", rhop(:,:,:) ) ! 3D potential density (sigma0)
......@@ -295,6 +321,7 @@ CONTAINS
CALL iom_put( "avt" , avt ) ! T vert. eddy diff. coef.
CALL iom_put( "avs" , avs ) ! S vert. eddy diff. coef.
CALL iom_put( "avm" , avm ) ! T vert. eddy visc. coef.
CALL iom_put( "htau" , htau ) ! htau scaling
IF( iom_use('logavt') ) CALL iom_put( "logavt", LOG( MAX( 1.e-20_wp, avt(:,:,:) ) ) )
IF( iom_use('logavs') ) CALL iom_put( "logavs", LOG( MAX( 1.e-20_wp, avs(:,:,:) ) ) )
......@@ -316,7 +343,7 @@ CONTAINS
ENDIF
ENDIF
IF ( iom_use("sstgrad") .OR. iom_use("sstgrad2") ) THEN
IF ( iom_use("sstgrad_"//ttype) .OR. iom_use("sstgrad2_"//ttype) ) THEN
DO_2D( 0, 0, 0, 0 ) ! sst gradient
zztmp = ts(ji,jj,1,jp_tem,Kmm)
zztmpx = ( ts(ji+1,jj,1,jp_tem,Kmm) - zztmp ) * r1_e1u(ji,jj) + ( zztmp - ts(ji-1,jj ,1,jp_tem,Kmm) ) * r1_e1u(ji-1,jj)
......@@ -324,12 +351,12 @@ CONTAINS
z2d(ji,jj) = 0.25_wp * ( zztmpx * zztmpx + zztmpy * zztmpy ) &
& * umask(ji,jj,1) * umask(ji-1,jj,1) * vmask(ji,jj,1) * vmask(ji,jj-1,1)
END_2D
CALL iom_put( "sstgrad2", z2d ) ! square of module of sst gradient
IF ( iom_use("sstgrad") ) THEN
CALL iom_put( "sstgrad2_"//ttype, z2d ) ! square of module of sst gradient
IF ( iom_use("sstgrad_"//ttype) ) THEN
DO_2D( 0, 0, 0, 0 )
z2d(ji,jj) = SQRT( z2d(ji,jj) )
END_2D
CALL iom_put( "sstgrad", z2d ) ! module of sst gradient
CALL iom_put( "sstgrad_"//ttype, z2d ) ! module of sst gradient
ENDIF
ENDIF
......@@ -456,19 +483,28 @@ CONTAINS
ENDIF
IF( iom_use("tosmint") ) THEN
IF( (.NOT.l_ldfeiv_time) .AND. ( iom_use('RossRad') .OR. iom_use('RossRadlim') &
& .OR. iom_use('Tclinic_recip') .OR. iom_use('RR_GS') &
& .OR. iom_use('aeiu_2d') .OR. iom_use('aeiv_2d') ) ) THEN
CALL ldf_eiv(kt, 75.0, z2d, z3d(:,:,1), Kmm)
CALL iom_put('aeiu_2d', z2d)
CALL iom_put('aeiv_2d', z3d(:,:,1))
ENDIF
IF( iom_use("tosmint_"//ttype) ) THEN
z2d(:,:) = 0._wp
DO_3D( 0, 0, 0, 0, 1, jpkm1 )
z2d(ji,jj) = z2d(ji,jj) + rho0 * e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_tem,Kmm)
END_3D
CALL iom_put( "tosmint", z2d ) ! Vertical integral of temperature
CALL iom_put( "tosmint_"//ttype, z2d ) ! Vertical integral of temperature
ENDIF
IF( iom_use("somint") ) THEN
IF( iom_use("somint_"//stype) ) THEN
z2d(:,:) = 0._wp
DO_3D( 0, 0, 0, 0, 1, jpkm1 )
z2d(ji,jj) = z2d(ji,jj) + rho0 * e3t(ji,jj,jk,Kmm) * ts(ji,jj,jk,jp_sal,Kmm)
END_3D
CALL iom_put( "somint", z2d ) ! Vertical integral of salinity
CALL iom_put( "somint_"//stype, z2d ) ! Vertical integral of salinity
ENDIF
CALL iom_put( "bn2", rn2 ) ! Brunt-Vaisala buoyancy frequency (N^2)
......
......@@ -270,10 +270,10 @@ CONTAINS
!!----------------------------------------------------------------------
!
NAMELIST/namrun/ cn_ocerst_indir, cn_ocerst_outdir, nn_stocklist, ln_rst_list, &
& nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , nn_rstctl , &
& nn_no , cn_exp , cn_ocerst_in, cn_ocerst_out, ln_rstart , ln_rstdate, nn_rstctl , &
& nn_it000, nn_itend , nn_date0 , nn_time0 , nn_leapy , nn_istate , &
& nn_stock, nn_write , ln_mskland , ln_clobber , nn_chunksz, ln_1st_euler , &
& ln_cfmeta, ln_xios_read, nn_wxios
& ln_cfmeta, ln_xios_read, nn_wxios, ln_rst_eos
NAMELIST/namdom/ ln_linssh, rn_Dt, rn_atfp, ln_crs, ln_c1d, ln_meshmask
NAMELIST/namtile/ ln_tile, nn_ltile_i, nn_ltile_j
#if defined key_netcdf4
......@@ -377,9 +377,11 @@ CONTAINS
WRITE(numout,*) ' frequency of output file nn_write = ', nn_write
#endif
WRITE(numout,*) ' mask land points ln_mskland = ', ln_mskland
WRITE(numout,*) ' date-stamp restart files ln_rstdate = ', ln_rstdate
WRITE(numout,*) ' additional CF standard metadata ln_cfmeta = ', ln_cfmeta
WRITE(numout,*) ' overwrite an existing file ln_clobber = ', ln_clobber
WRITE(numout,*) ' NetCDF chunksize (bytes) nn_chunksz = ', nn_chunksz
WRITE(numout,*) ' check restart equation of state ln_rst_eos = ', ln_rst_eos
IF( TRIM(Agrif_CFixed()) == '0' ) THEN
WRITE(numout,*) ' READ restart for a single file using XIOS ln_xios_read =', ln_xios_read
WRITE(numout,*) ' Write restart using XIOS nn_wxios = ', nn_wxios
......
......@@ -33,6 +33,9 @@ MODULE dommsk
USE iom ! IOM library
USE lbclnk ! ocean lateral boundary conditions (or mpp link)
USE lib_mpp ! Massively Parallel Processing library
USE iom ! For shlat2d
USE fldread ! for sn_shlat2d
IMPLICIT NONE
PRIVATE
......@@ -85,7 +88,11 @@ CONTAINS
INTEGER :: iktop, ikbot ! - -
INTEGER :: ios, inum
!!
NAMELIST/namlbc/ rn_shlat, ln_vorlat
REAL(wp) :: zshlat !: locally modified shlat for some strait
REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zshlat2d
LOGICAL :: ln_shlat2d
CHARACTER(len = 256) :: cn_shlat2d_file, cn_shlat2d_var
NAMELIST/namlbc/ rn_shlat, ln_vorlat, ln_shlat2d, cn_shlat2d_file, cn_shlat2d_var
NAMELIST/nambdy/ ln_bdy ,nb_bdy, ln_coords_file, cn_coords_file, &
& ln_mask_file, cn_mask_file, cn_dyn2d, nn_dyn2d_dta, &
& cn_dyn3d, nn_dyn3d_dta, cn_tra, nn_tra_dta, &
......@@ -110,12 +117,20 @@ CONTAINS
ENDIF
!
IF(lwp) WRITE(numout,*)
IF ( rn_shlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral free-slip'
ELSEIF ( rn_shlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral no-slip'
ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral partial-slip'
ELSEIF ( 2. < rn_shlat ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral strong-slip'
ELSE
CALL ctl_stop( 'dom_msk: wrong value for rn_shlat (i.e. a negalive value). We stop.' )
IF ( ln_shlat2d ) THEN
IF(lwp) WRITE(numout,*) ' READ shlat as a 2D coefficient in a file '
ALLOCATE( zshlat2d(jpi,jpj) )
CALL iom_open(TRIM(cn_shlat2d_file), inum)
CALL iom_get (inum, jpdom_global, TRIM(cn_shlat2d_var), zshlat2d, 1) !
CALL iom_close(inum)
ELSE
IF ( rn_shlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral free-slip'
ELSEIF ( rn_shlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral no-slip'
ELSEIF ( 0. < rn_shlat .AND. rn_shlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral partial-slip'
ELSEIF ( 2. < rn_shlat ) THEN ; IF(lwp) WRITE(numout,*) ' ==>>> ocean lateral strong-slip'
ELSE
CALL ctl_stop( 'dom_msk: wrong value for rn_shlat (i.e. a negalive value). We stop.' )
ENDIF
ENDIF
! Ocean/land mask at t-point (computed from ko_top and ko_bot)
......@@ -207,14 +222,26 @@ CONTAINS
! Lateral boundary conditions on velocity (modify fmask)
! ---------------------------------------
IF( rn_shlat /= 0._wp ) THEN ! Not free-slip lateral boundary condition
IF( rn_shlat /= 0._wp .or. ln_shlat2d ) THEN ! Not free-slip lateral boundary condition
!
IF ( ln_shlat2d ) THEN
DO_3D( 0, 0, 0, 0, 1, jpk )
IF( fmask(ji,jj,jk) == 0._wp ) THEN
fmask(ji,jj,jk) = zshlat2d(ji,jj) * MIN( 1._wp , MAX( umask(ji,jj,jk), umask(ji,jj+1,jk), &
& vmask(ji,jj,jk), vmask(ji+1,jj,jk) ) )
ENDIF
END_3D
ELSE
DO_3D( 0, 0, 0, 0, 1, jpk )
IF( fmask(ji,jj,jk) == 0._wp ) THEN
fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( umask(ji,jj,jk), umask(ji,jj+1,jk), &
& vmask(ji,jj,jk), vmask(ji+1,jj,jk) ) )
ENDIF
END_3D
END IF
!
IF( ln_shlat2d ) DEALLOCATE( zshlat2d )
!
DO_3D( 0, 0, 0, 0, 1, jpk )
IF( fmask(ji,jj,jk) == 0._wp ) THEN
fmask(ji,jj,jk) = rn_shlat * MIN( 1._wp , MAX( umask(ji,jj,jk), umask(ji,jj+1,jk), &
& vmask(ji,jj,jk), vmask(ji+1,jj,jk) ) )
ENDIF
END_3D
CALL lbc_lnk( 'dommsk', fmask, 'F', 1._wp ) ! Lateral boundary conditions on fmask
!
! CAUTION : The fmask may be further modified in dyn_vor_init ( dynvor.F90 ) depending on ln_vorlat
......@@ -224,7 +251,9 @@ CONTAINS
! User defined alteration of fmask (use to reduce ocean transport in specified straits)
! --------------------------------
!
CALL usr_def_fmask( cn_cfg, nn_cfg, fmask )
IF ( .not. ln_shlat2d ) THEN
CALL usr_def_fmask( cn_cfg, nn_cfg, fmask )
ENDIF
!
#if defined key_agrif
! Reset masks defining updated points over parent grids
......
......@@ -692,7 +692,7 @@ CONTAINS
!! - vertical interpolation: simple averaging
!!----------------------------------------------------------------------
REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in ) :: pe3_in ! input e3 to be interpolated
REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe3_out ! output interpolated e3
REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(out) :: pe3_out ! output interpolated e3
CHARACTER(LEN=*) , INTENT(in ) :: pout ! grid point of out scale factors
! ! = 'U', 'V', 'W, 'F', 'UW' or 'VW'
!
......
......@@ -167,7 +167,7 @@ CONTAINS
REAL(wp), DIMENSION(jpi,jpj) :: zsshv_a, zhvp2_e, zsshp2_e
REAL(wp), DIMENSION(jpi,jpj) :: zCdU_u, zCdU_v ! top/bottom stress at u- & v-points
REAL(wp), DIMENSION(jpi,jpj) :: zhV! fluxes
REAL(dp), DIMENSION(jpi,jpj) :: zhU! fluxes
REAL(wp), DIMENSION(jpi,jpj) :: zhU! fluxes
!!st#if defined key_qco
!!st REAL(wp), DIMENSION(jpi, jpj, jpk) :: ze3u, ze3v
!!st#endif
......@@ -270,6 +270,11 @@ CONTAINS
zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * ssumask(ji,jj)
zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * ssvmask(ji,jj)
END_2D
ELSE
! Ensure zhU and zhV are initialised to SOMETHING at all points to avoid referencing
! uninitialsed values in halos later on!
zhU(:,:) = 0._wp
zhV(:,:) = 0._wp
ENDIF
!
! != Add bottom stress contribution from baroclinic velocities =!
......@@ -502,13 +507,13 @@ CONTAINS
IF( ln_bdy .AND. ln_vol ) CALL bdy_vol2d( kt, jn, ua_e, va_e, zhup2_e, zhvp2_e )
!
! ! resulting flux at mid-step (not over the full domain)
DO_2D( 1, 0, 1, 1 ) ! not jpi-column
zhU(ji,jj) = e2u(ji,jj) * ua_e(ji,jj) * zhup2_e(ji,jj)
END_2D
DO_2D( 1, 1, 1, 0 ) ! not jpj-row
zhV(ji,jj) = e1v(ji,jj) * va_e(ji,jj) * zhvp2_e(ji,jj)
END_2D
!
#if defined key_agrif
! Set fluxes during predictor step to ensure volume conservation
IF( ln_bt_fw ) CALL agrif_dyn_ts_flux( jn, zhU, zhV )
......@@ -519,6 +524,12 @@ CONTAINS
CALL wad_Umsk( ztwdmask, zhU, zhV, un_e, vn_e, zuwdmask, zvwdmask ) ! not jpi colomn for U, not jpj row for V
!
ENDIF
! It seems safest to do this here since zhU and zhV are not initially calculated in halos
! by this code or by wad_Umsk, but halo values (ji-1 and jj-1) ARE required in the zhdiv
! sea level calculation. The current trunk (Feb 2024) has resolved all these issues by rewriting.
CALL lbc_lnk( 'dynspg_ts', zhU, 'U', -1._wp)
CALL lbc_lnk( 'dynspg_ts', zhV, 'V', -1._wp)
!
!
! Compute Sea Level at step jit+1
......@@ -529,15 +540,16 @@ CONTAINS
zhdiv = ( zhU(ji,jj) - zhU(ji-1,jj) + zhV(ji,jj) - zhV(ji,jj-1) ) * r1_e1e2t(ji,jj)
ssha_e(ji,jj) = ( sshn_e(ji,jj) - rDt_e * ( ssh_frc(ji,jj) + zhdiv ) ) * ssmask(ji,jj)
END_2D
!
CALL lbc_lnk( 'dynspg_ts', ssha_e, 'T', 1._dp, zhU, 'U', -1._dp)
CALL lbc_lnk( 'dynspg_ts', zhV, 'V', -1._wp )
CALL lbc_lnk( 'dynspg_ts', ssha_e, 'T', 1._dp)
!
! Duplicate sea level across open boundaries (this is only cosmetic if linssh=T)
IF( ln_bdy ) CALL bdy_ssh( ssha_e )
#if defined key_agrif
CALL agrif_ssh_ts( jn )
#endif
!
! ! Sum over sub-time-steps to compute advective velocities
za2 = wgtbtp2(jn) ! zhU, zhV hold fluxes extrapolated at jn+0.5
......@@ -556,6 +568,7 @@ CONTAINS
!
! Sea Surface Height at u-,v-points (vvl case only)
IF( .NOT.ln_linssh ) THEN
#if defined key_qcoTest_FluxForm
! ! 'key_qcoTest_FluxForm' : simple ssh average
DO_2D( 1, 0, 1, 1 )
......@@ -623,6 +636,7 @@ CONTAINS
!-- u = m+1 | h * u + delta_t' * \ h * (1-r)*g * grad_x( ssh') - h * f * k vect u + h * frc / | --!
!-- h \ / --!
!------------------------------------------------------------------------------------------------------------------------!
IF( ln_dynadv_vec .OR. ln_linssh ) THEN !* Vector form
DO_2D( 0, 0, 0, 0 )
ua_e(ji,jj) = ( un_e(ji,jj) &
......@@ -676,7 +690,7 @@ CONTAINS
ENDIF
IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only)
DO_2D( 0, 0, 0, 0 )
DO_2D( 0, 0, 0, 0 )
hu_e (ji,jj) = hu_0(ji,jj) + zsshu_a(ji,jj)
hur_e(ji,jj) = ssumask(ji,jj) / ( hu_e(ji,jj) + 1._wp - ssumask(ji,jj) )
hv_e (ji,jj) = hv_0(ji,jj) + zsshv_a(ji,jj)
......@@ -686,10 +700,10 @@ CONTAINS
!
IF( .NOT.ln_linssh ) THEN !* Update ocean depth (variable volume case only)
CALL lbc_lnk( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp &
& , hu_e , 'U', 1._wp, hv_e , 'V', 1._wp &
& , hur_e, 'U', 1._wp, hvr_e, 'V', 1._wp )
, hu_e , 'U', 1._wp, hv_e , 'V', 1._wp &
, hur_e, 'U', 1._wp, hvr_e, 'V', 1._wp )
ELSE
CALL lbc_lnk( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp )
CALL lbc_lnk( 'dynspg_ts', ua_e , 'U', -1._wp, va_e , 'V', -1._wp )
ENDIF
! ! open boundaries
IF( ln_bdy ) CALL bdy_dyn2d( jn, ua_e, va_e, un_e, vn_e, hur_e, hvr_e, ssha_e )
......@@ -728,7 +742,6 @@ CONTAINS
! ! Sum sea level
pssh(:,:,Kaa) = pssh(:,:,Kaa) + za1 * ssha_e(:,:)
! ! ==================== !
END DO ! end loop !
! ! ==================== !
! -----------------------------------------------------------------------------
......@@ -1085,7 +1098,13 @@ CONTAINS
! ! Allocate time-splitting arrays
IF( dyn_spg_ts_alloc() /= 0 ) CALL ctl_stop('STOP', 'dyn_spg_init: failed to allocate dynspg_ts arrays' )
!
! ! read restart when needed
! RSRH. I've just copied the following from the current NEMO main. It shouldnt affect evolution (!) but
! does help with debugging and testing!
! init some arrays for debug sette
ssha_e(:,:) = 0._wp
!
! !: restart/initialise
CALL ts_rst( nit000, 'READ' )
!
END SUBROUTINE dyn_spg_ts_init
......@@ -1165,8 +1184,7 @@ CONTAINS
!!----------------------------------------------------------------------
INTEGER :: ji ,jj ! dummy loop indices
REAL(wp) :: zx1, zx2, zy1, zy2, z1_hu, z1_hv ! - -
REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pht, phu, phv, punb, pvnb, zhV
REAL(dp), DIMENSION(jpi,jpj), INTENT(in ) :: zhU
REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pht, phu, phv, punb, pvnb, zhU, zhV
REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: zu_trd, zv_trd
!!----------------------------------------------------------------------
SELECT CASE( nvor_scheme )
......@@ -1272,8 +1290,7 @@ CONTAINS
!! ** Action : ptmsk : wetting & drying t-mask
!!----------------------------------------------------------------------
REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pTmsk ! W & D t-mask
REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: phV, pu, pv! ocean velocities and transports
REAL(dp), DIMENSION(jpi,jpj), INTENT(inout) :: phU! ocean velocities and transports
REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: phU, phV, pu, pv ! ocean velocities and transports
REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pUmsk, pVmsk ! W & D u- and v-mask
!
INTEGER :: ji, jj ! dummy loop indices
......