Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/context_nemo.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/context_nemo.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/context_nemo.xml (revision 10277)
@@ -0,0 +1,47 @@
+
+
+
+
+
+ 1800
+ 1026.0
+ 3991.86795711963
+ 0.99530670233846
+ 917.0
+ 330.0
+ 1.e20
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/domain_def_nemo.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/domain_def_nemo.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/domain_def_nemo.xml (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/domain_def_nemo.xml
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-ice.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-ice.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-ice.xml (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/field_def_nemo-ice.xml
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-oce.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-oce.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/field_def_nemo-oce.xml (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/field_def_nemo-oce.xml
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-ice.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-ice.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-ice.xml (revision 10277)
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-oce.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-oce.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/file_def_nemo-oce.xml (revision 10277)
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/grid_def_nemo.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/grid_def_nemo.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/grid_def_nemo.xml (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/grid_def_nemo.xml
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/iodef.xml
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/iodef.xml (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/iodef.xml (revision 10277)
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 10
+ false
+ false
+ oceanx
+
+
+
+
+
+
+
+
+
+
+
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/make_initice.py
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/make_initice.py (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/make_initice.py (revision 10277)
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+
+import os,sys
+from netCDF4 import Dataset as netcdf
+import numpy as np
+import matplotlib.pyplot as plt
+from math import exp
+from math import ceil
+
+resname=''
+
+# input file
+###fcoord='coordinates_'+str(resname)+'.nc'
+#fcoord='mesh_mask_'+str(resname)+'.nc'
+fcoord='mesh_mask.nc'
+
+# output file
+#fflx='initice_'+str(resname)+'.nc'
+fflx='initice_60pts.nc'
+
+print ' creating init ice file ' +fflx
+
+# Reading coordinates file
+nccoord=netcdf(fcoord,'r')
+nav_lon=nccoord.variables['nav_lon']
+nav_lat=nccoord.variables['nav_lat']
+time_counter=1
+LON1= nav_lon.shape[1]
+LAT1= nav_lon.shape[0]
+print 'nav_lon.shape[1]' ,nav_lon.shape[1]
+print 'LON1 ', LON1
+print 'LAT1 ', LAT1
+
+# Creating INITICE netcdf file
+nc=netcdf(fflx,'w')
+nc.createDimension('y',LAT1)
+nc.createDimension('x',LON1)
+nc.createDimension('time_counter',None) # Setting dimension size to 0 or None makes it unlimited.
+
+cdflon=nc.createVariable('nav_lon','f',('y','x'))
+cdflat=nc.createVariable('nav_lat','f',('y','x'))
+cdftimecounter=nc.createVariable('time_counter','f',('time_counter'))
+
+# ati : Fraction of open waters in sea ice - units %
+# hti : Sea ice thickness - units m
+# hts : Snow thickness - units m
+# smi :
+# tmi : Sea ice internal temperature - units K
+# tsu : Sea ice surface temperature - units K
+#
+# Take constant values from namelist &namiceini of NEMO
+rn_hti_ini=2.0
+rn_hts_ini=0.2 # initial real snow thickness (m)
+rn_ati_ini=0.9 # initial ice concentration (-)
+rn_smi_ini=6.3 # initial ice salinity (g/kg)
+rn_tmi_ini=270. # initial ice/snw temperature (K)
+rn_tsu_ini=270. # initial sea ice temperature (K)
+#
+cdfati=nc.createVariable('ati','f',('time_counter','y','x'))
+cdfati.units='Percentage'
+cdfati.long_name='Sea ice concentration'
+cdfhti=nc.createVariable('hti','f',('time_counter','y','x'))
+cdfhti.long_name='Sea ice thickness'
+cdfhti.units='m'
+cdfhts=nc.createVariable('hts','f',('time_counter','y','x'))
+cdfhts.long_name='Snow thickness'
+cdfhts.units='m'
+cdfsmi=nc.createVariable('smi','f',('time_counter','y','x'))
+cdfsmi.long_name='Sea ice salinity'
+cdfsmi.units='pss'
+cdftmi=nc.createVariable('tmi','f',('time_counter','y','x'))
+cdftmi.long_name='Sea ice internal temperature'
+cdftmi.units='Kelvin'
+cdftsu=nc.createVariable('tsu','f',('time_counter','y','x'))
+cdftsu.long_name='Sea ice surface temperature'
+cdftsu.units='Kelvin'
+
+cdflon[:,:]=nav_lon[:,:]
+cdflat[:,:]=nav_lat[:,:]
+cdftimecounter[0]=1
+
+# Fill fields
+#print 'cdfati[:,1]', cdfati[:,1] -> 32 values
+
+# Add a gaussian for sea ice thickness here
+cdfhti[:,:,:]=0.
+cdfhts[:,:,:]=0.
+cdfati[:,:,:]=0.
+cdfsmi[:,:,:]=0.
+cdftmi[:,:,:]=rn_tmi_ini
+cdftsu[:,:,:]=rn_tsu_ini
+
+# --------------------------------------
+# for basin=99x99km with dx=1km ; dy=1km
+
+# --- Lipscomb 2004 experiment ---
+cdfhti[:,:,:]=1.
+# thickness
+for y in np.arange(0,LAT1,1) :
+ for x in np.arange(0,LON1,1) :
+ if (x >= 15. and x <= 43.):
+ cdfhti[:,y,x] = 0.2
+# elif (x < 10. or x > 50.):
+# cdfhti[:,y,x] = 0.
+
+cdfati[:,:,:]=0.001
+# concentration
+for y in np.arange(0,LAT1,1) :
+ for x in np.arange(0,LON1,1) :
+ if (x >= 10. and x <= 29.):
+ cdfati[:,y,x] = 0.9 * (x - 9.) / 20.
+ elif (x > 29. and x <= 48.):
+ cdfati[:,y,x] = 0.9
+
+# ---------------------------------------
+
+nc.close()
+nccoord.close()
+
+#sys.exit()
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg (revision 10277)
@@ -0,0 +1,237 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO Configuration namelist : overwrite default values defined in SHARED/namelist_ref
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! ICEADV (LIPSCOMB test) configuration !!
+!!======================================================================
+!! *** Domain & Run management namelists *** !!
+!! !!
+!! namrun parameters of the run
+!! namdom space and time domain
+!! namcfg parameters of the configuration (default: user defined GYRE)
+!! namwad Wetting and drying (default: OFF)
+!! namtsd data: temperature & salinity (default: OFF)
+!! namcrs coarsened grid (for outputs and/or TOP) (ln_crs =T)
+!! namc1d 1D configuration options ("key_c1d")
+!! namc1d_dyndmp 1D newtonian damping applied on currents ("key_c1d")
+!! namc1d_uvd 1D data (currents) ("key_c1d")
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namusr_def ! ICEADV user defined namelist
+!-----------------------------------------------------------------------
+ rn_dx = 4. ! horizontal resolution in meters
+ rn_dy = 4. ! horizontal resolution in meters
+ ln_corio = .false. ! set coriolis=0 (false) or not (true)
+ rn_ppgphi0 = 70. ! Reference latitude [degrees]
+/
+!-----------------------------------------------------------------------
+&namrun ! parameters of the run
+!-----------------------------------------------------------------------
+ nn_no = 0 ! job number (no more used...)
+ cn_exp = "ICEADV" ! experience name
+ nn_it000 = 1 ! first time step
+ nn_itend = 40 ! last time step (std 5475)
+ nn_istate = 1 ! output the initial state (1) or not (0)
+/
+!-----------------------------------------------------------------------
+&namdom ! time and space domain
+!-----------------------------------------------------------------------
+ ln_linssh = .true. ! =T linear free surface ==>> model level are fixed in time
+ !
+ rn_rdt = 2. ! time step for the dynamics (and tracer if nn_acc=0)
+ !
+ 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
+ ! ! (=F) user defined configuration ==>>> see usrdef(_...) modules
+ cn_domcfg = "ICEADV_domcfg" ! domain configuration filename
+/
+!!======================================================================
+!! *** Surface Boundary Condition namelists *** !!
+!! !!
+!! namsbc surface boundary condition manager (default: NO selection)
+!! namsbc_flx flux formulation (ln_flx =T)
+!! namsbc_blk Bulk formulae formulation (ln_blk =T)
+!! namsbc_cpl CouPLed formulation ("key_oasis3" )
+!! namsbc_sas Stand-Alone Surface module (SAS_SRC only)
+!! namsbc_iif Ice-IF: use observed ice cover (nn_ice = 1 )
+!! namtra_qsr penetrative solar radiation (ln_traqsr =T)
+!! namsbc_ssr sea surface restoring term (for T and/or S) (ln_ssr =T)
+!! namsbc_rnf river runoffs (ln_rnf =T)
+!! namsbc_apr Atmospheric Pressure (ln_apr_dyn =T)
+!! namsbc_isf ice shelf melting/freezing (ln_isfcav =T : read (ln_read_cfg=T) or set or usr_def_zgr )
+!! namsbc_iscpl coupling option between land ice model and ocean (ln_isfcav =T)
+!! namsbc_wave external fields from wave model (ln_wave =T)
+!! namberg iceberg floats (ln_icebergs=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namsbc ! Surface Boundary Condition manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_usr = .true. ! user defined formulation (T => check usrdef_sbc)
+ ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk )
+ nn_fsbc = 1 ! frequency of surface boundary condition computation
+ nn_ice = 2 ! sea-ice model
+/
+!-----------------------------------------------------------------------
+&namsbc_sas ! Stand-Alone Surface module: ocean data (SAS_SRC only)
+!-----------------------------------------------------------------------
+ l_sasread = .false. ! =T Read in file ; =F set all to 0. (see sbcssm.F90)
+/
+!!======================================================================
+!! *** Lateral boundary condition *** !!
+!! !!
+!! namlbc lateral momentum boundary condition (default: NO selection)
+!! namagrif agrif nested grid (read by child model only) ("key_agrif")
+!! nam_tide Tidal forcing (default: OFF)
+!! nambdy Unstructured open boundaries (default: OFF)
+!! nambdy_dta Unstructured open boundaries - external data (see nambdy)
+!! nambdy_tide tidal forcing at open boundaries (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namlbc ! lateral momentum boundary condition (default: NO selection)
+!-----------------------------------------------------------------------
+ rn_shlat = 0. ! free slip
+/
+!-----------------------------------------------------------------------
+&namagrif ! AGRIF zoom ("key_agrif")
+!-----------------------------------------------------------------------
+/
+!!======================================================================
+!! *** Top/Bottom boundary condition *** !!
+!! !!
+!! namdrg top/bottom drag coefficient (default: NO selection)
+!! namdrg_top top friction (ln_OFF=F & ln_isfcav=T)
+!! namdrg_bot bottom friction (ln_OFF=F)
+!! nambbc bottom temperature boundary condition (default: OFF)
+!! nambbl bottom boundary layer scheme (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdrg ! top/bottom drag coefficient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_OFF = .true. ! free-slip : Cd = 0
+/
+!!======================================================================
+!! Tracer (T-S) namelists !!
+!! !!
+!! nameos equation of state (default: NO selection)
+!! namtra_adv advection scheme (default: NO selection)
+!! namtra_ldf lateral diffusion scheme (default: NO selection)
+!! namtra_mle mixed layer eddy param. (Fox-Kemper param.) (default: OFF)
+!! namtra_eiv eddy induced velocity param. (default: OFF)
+!! namtra_dmp T & S newtonian damping (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nameos ! ocean Equation Of Seawater (default: OFF)
+!-----------------------------------------------------------------------
+ ln_teos10 = .true. ! = Use TEOS-10 equation of state
+/
+!-----------------------------------------------------------------------
+&namtra_adv ! advection scheme for tracer (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_traadv_fct = .true. ! FCT scheme
+ nn_fct_h = 4 ! =2/4, horizontal 2nd / 4th order
+ nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
+/
+!----------------------------------------------------------------------------------
+&namtra_ldf ! lateral diffusion scheme for tracers (default: NO selection)
+!----------------------------------------------------------------------------------
+ ln_traldf_OFF = .true. ! laplacian operator
+/
+!!======================================================================
+!! *** Dynamics namelists *** !!
+!! !!
+!! nam_vvl vertical coordinate options (default: z-star)
+!! namdyn_adv formulation of the momentum advection (default: NO selection)
+!! namdyn_vor advection scheme (default: NO selection)
+!! namdyn_hpg hydrostatic pressure gradient (default: NO selection)
+!! namdyn_spg surface pressure gradient (default: NO selection)
+!! namdyn_ldf lateral diffusion scheme (default: NO selection)
+!! namdta_dyn offline TOP: dynamics read in files (OFF_SRC only)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdyn_adv ! formulation of the momentum advection (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynadv_OFF = .true. ! linear dynamics (no momentum advection)
+/
+!-----------------------------------------------------------------------
+&namdyn_hpg ! Hydrostatic pressure gradient option (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_hpg_zco = .true. ! z-coordinate - full steps
+/
+!-----------------------------------------------------------------------
+&namdyn_spg ! surface pressure gradient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynspg_ts = .true. ! split-explicit free surface
+/
+!-----------------------------------------------------------------------
+&namdyn_ldf ! lateral diffusion on momentum (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynldf_OFF = .true. ! No operator (i.e. no explicit diffusion)
+/
+!!======================================================================
+!! vertical physics namelists !!
+!! !!
+!! namzdf vertical physics manager (default: NO selection)
+!! namzdf_ric richardson number vertical mixing (ln_zdfric=T)
+!! namzdf_tke TKE vertical mixing (ln_zdftke=T)
+!! namzdf_gls GLS vertical mixing (ln_zdfgls=T)
+!! namzdf_osm OSM vertical diffusion (ln_zdfosm=T)
+!! namzdf_iwm tidal mixing parameterization (ln_zdfiwm=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namzdf ! vertical physics manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_zdfcst = .true. ! constant mixing
+/
+!!======================================================================
+!! *** Diagnostics namelists *** !!
+!! !!
+!! namtrd dynamics and/or tracer trends (default: OFF)
+!! namptr Poleward Transport Diagnostics (default: OFF)
+!! namhsb Heat and salt budgets (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namflo float parameters ("key_float")
+!! nam_diaharm Harmonic analysis of tidal constituents ("key_diaharm")
+!! namdct transports through some sections ("key_diadct")
+!! nam_diatmb Top Middle Bottom Output (default: OFF)
+!! nam_dia25h 25h Mean Output (default: OFF)
+!! namnc4 netcdf4 chunking and compression settings ("key_netcdf4")
+!!======================================================================
+!
+!!======================================================================
+!! *** Observation & Assimilation *** !!
+!! !!
+!! namobs observation and model comparison (default: OFF)
+!! nam_asminc assimilation increments ('key_asminc')
+!!======================================================================
+!
+!!======================================================================
+!! *** Miscellaneous namelists *** !!
+!! !!
+!! nammpp Massively Parallel Processing ("key_mpp_mpi")
+!! namctl Control prints (default: OFF)
+!! namsto Stochastic parametrization of EOS (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nammpp ! Massively Parallel Processing ("key_mpp_mpi")
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namctl ! Control prints (default: OFF)
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namsto ! Stochastic parametrization of EOS (default: OFF)
+!-----------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_120pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_120pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_120pts (revision 10277)
@@ -0,0 +1,237 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO Configuration namelist : overwrite default values defined in SHARED/namelist_ref
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! ICEADV (LIPSCOMB test) configuration !!
+!!======================================================================
+!! *** Domain & Run management namelists *** !!
+!! !!
+!! namrun parameters of the run
+!! namdom space and time domain
+!! namcfg parameters of the configuration (default: user defined GYRE)
+!! namwad Wetting and drying (default: OFF)
+!! namtsd data: temperature & salinity (default: OFF)
+!! namcrs coarsened grid (for outputs and/or TOP) (ln_crs =T)
+!! namc1d 1D configuration options ("key_c1d")
+!! namc1d_dyndmp 1D newtonian damping applied on currents ("key_c1d")
+!! namc1d_uvd 1D data (currents) ("key_c1d")
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namusr_def ! ICEADV user defined namelist
+!-----------------------------------------------------------------------
+ rn_dx = 4. ! horizontal resolution in meters
+ rn_dy = 4. ! horizontal resolution in meters
+ ln_corio = .false. ! set coriolis=0 (false) or not (true)
+ rn_ppgphi0 = 70. ! Reference latitude [degrees]
+/
+!-----------------------------------------------------------------------
+&namrun ! parameters of the run
+!-----------------------------------------------------------------------
+ nn_no = 0 ! job number (no more used...)
+ cn_exp = "ICEADV" ! experience name
+ nn_it000 = 1 ! first time step
+ nn_itend = 80 ! last time step (std 5475)
+ nn_istate = 1 ! output the initial state (1) or not (0)
+/
+!-----------------------------------------------------------------------
+&namdom ! time and space domain
+!-----------------------------------------------------------------------
+ ln_linssh = .true. ! =T linear free surface ==>> model level are fixed in time
+ !
+ rn_rdt = 2. ! time step for the dynamics (and tracer if nn_acc=0)
+ !
+ 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
+ ! ! (=F) user defined configuration ==>>> see usrdef(_...) modules
+ cn_domcfg = "ICEADV_domcfg" ! domain configuration filename
+/
+!!======================================================================
+!! *** Surface Boundary Condition namelists *** !!
+!! !!
+!! namsbc surface boundary condition manager (default: NO selection)
+!! namsbc_flx flux formulation (ln_flx =T)
+!! namsbc_blk Bulk formulae formulation (ln_blk =T)
+!! namsbc_cpl CouPLed formulation ("key_oasis3" )
+!! namsbc_sas Stand-Alone Surface module (SAS_SRC only)
+!! namsbc_iif Ice-IF: use observed ice cover (nn_ice = 1 )
+!! namtra_qsr penetrative solar radiation (ln_traqsr =T)
+!! namsbc_ssr sea surface restoring term (for T and/or S) (ln_ssr =T)
+!! namsbc_rnf river runoffs (ln_rnf =T)
+!! namsbc_apr Atmospheric Pressure (ln_apr_dyn =T)
+!! namsbc_isf ice shelf melting/freezing (ln_isfcav =T : read (ln_read_cfg=T) or set or usr_def_zgr )
+!! namsbc_iscpl coupling option between land ice model and ocean (ln_isfcav =T)
+!! namsbc_wave external fields from wave model (ln_wave =T)
+!! namberg iceberg floats (ln_icebergs=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namsbc ! Surface Boundary Condition manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_usr = .true. ! user defined formulation (T => check usrdef_sbc)
+ ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk )
+ nn_fsbc = 1 ! frequency of surface boundary condition computation
+ nn_ice = 2 ! sea-ice model
+/
+!-----------------------------------------------------------------------
+&namsbc_sas ! Stand-Alone Surface module: ocean data (SAS_SRC only)
+!-----------------------------------------------------------------------
+ l_sasread = .false. ! =T Read in file ; =F set all to 0. (see sbcssm.F90)
+/
+!!======================================================================
+!! *** Lateral boundary condition *** !!
+!! !!
+!! namlbc lateral momentum boundary condition (default: NO selection)
+!! namagrif agrif nested grid (read by child model only) ("key_agrif")
+!! nam_tide Tidal forcing (default: OFF)
+!! nambdy Unstructured open boundaries (default: OFF)
+!! nambdy_dta Unstructured open boundaries - external data (see nambdy)
+!! nambdy_tide tidal forcing at open boundaries (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namlbc ! lateral momentum boundary condition (default: NO selection)
+!-----------------------------------------------------------------------
+ rn_shlat = 0. ! free slip
+/
+!-----------------------------------------------------------------------
+&namagrif ! AGRIF zoom ("key_agrif")
+!-----------------------------------------------------------------------
+/
+!!======================================================================
+!! *** Top/Bottom boundary condition *** !!
+!! !!
+!! namdrg top/bottom drag coefficient (default: NO selection)
+!! namdrg_top top friction (ln_OFF=F & ln_isfcav=T)
+!! namdrg_bot bottom friction (ln_OFF=F)
+!! nambbc bottom temperature boundary condition (default: OFF)
+!! nambbl bottom boundary layer scheme (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdrg ! top/bottom drag coefficient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_OFF = .true. ! free-slip : Cd = 0
+/
+!!======================================================================
+!! Tracer (T-S) namelists !!
+!! !!
+!! nameos equation of state (default: NO selection)
+!! namtra_adv advection scheme (default: NO selection)
+!! namtra_ldf lateral diffusion scheme (default: NO selection)
+!! namtra_mle mixed layer eddy param. (Fox-Kemper param.) (default: OFF)
+!! namtra_eiv eddy induced velocity param. (default: OFF)
+!! namtra_dmp T & S newtonian damping (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nameos ! ocean Equation Of Seawater (default: OFF)
+!-----------------------------------------------------------------------
+ ln_teos10 = .true. ! = Use TEOS-10 equation of state
+/
+!-----------------------------------------------------------------------
+&namtra_adv ! advection scheme for tracer (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_traadv_fct = .true. ! FCT scheme
+ nn_fct_h = 4 ! =2/4, horizontal 2nd / 4th order
+ nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
+/
+!----------------------------------------------------------------------------------
+&namtra_ldf ! lateral diffusion scheme for tracers (default: NO selection)
+!----------------------------------------------------------------------------------
+ ln_traldf_OFF = .true. ! laplacian operator
+/
+!!======================================================================
+!! *** Dynamics namelists *** !!
+!! !!
+!! nam_vvl vertical coordinate options (default: z-star)
+!! namdyn_adv formulation of the momentum advection (default: NO selection)
+!! namdyn_vor advection scheme (default: NO selection)
+!! namdyn_hpg hydrostatic pressure gradient (default: NO selection)
+!! namdyn_spg surface pressure gradient (default: NO selection)
+!! namdyn_ldf lateral diffusion scheme (default: NO selection)
+!! namdta_dyn offline TOP: dynamics read in files (OFF_SRC only)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdyn_adv ! formulation of the momentum advection (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynadv_OFF = .true. ! linear dynamics (no momentum advection)
+/
+!-----------------------------------------------------------------------
+&namdyn_hpg ! Hydrostatic pressure gradient option (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_hpg_zco = .true. ! z-coordinate - full steps
+/
+!-----------------------------------------------------------------------
+&namdyn_spg ! surface pressure gradient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynspg_ts = .true. ! split-explicit free surface
+/
+!-----------------------------------------------------------------------
+&namdyn_ldf ! lateral diffusion on momentum (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynldf_OFF = .true. ! No operator (i.e. no explicit diffusion)
+/
+!!======================================================================
+!! vertical physics namelists !!
+!! !!
+!! namzdf vertical physics manager (default: NO selection)
+!! namzdf_ric richardson number vertical mixing (ln_zdfric=T)
+!! namzdf_tke TKE vertical mixing (ln_zdftke=T)
+!! namzdf_gls GLS vertical mixing (ln_zdfgls=T)
+!! namzdf_osm OSM vertical diffusion (ln_zdfosm=T)
+!! namzdf_iwm tidal mixing parameterization (ln_zdfiwm=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namzdf ! vertical physics manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_zdfcst = .true. ! constant mixing
+/
+!!======================================================================
+!! *** Diagnostics namelists *** !!
+!! !!
+!! namtrd dynamics and/or tracer trends (default: OFF)
+!! namptr Poleward Transport Diagnostics (default: OFF)
+!! namhsb Heat and salt budgets (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namflo float parameters ("key_float")
+!! nam_diaharm Harmonic analysis of tidal constituents ("key_diaharm")
+!! namdct transports through some sections ("key_diadct")
+!! nam_diatmb Top Middle Bottom Output (default: OFF)
+!! nam_dia25h 25h Mean Output (default: OFF)
+!! namnc4 netcdf4 chunking and compression settings ("key_netcdf4")
+!!======================================================================
+!
+!!======================================================================
+!! *** Observation & Assimilation *** !!
+!! !!
+!! namobs observation and model comparison (default: OFF)
+!! nam_asminc assimilation increments ('key_asminc')
+!!======================================================================
+!
+!!======================================================================
+!! *** Miscellaneous namelists *** !!
+!! !!
+!! nammpp Massively Parallel Processing ("key_mpp_mpi")
+!! namctl Control prints (default: OFF)
+!! namsto Stochastic parametrization of EOS (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nammpp ! Massively Parallel Processing ("key_mpp_mpi")
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namctl ! Control prints (default: OFF)
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namsto ! Stochastic parametrization of EOS (default: OFF)
+!-----------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_240pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_240pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_240pts (revision 10277)
@@ -0,0 +1,237 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO Configuration namelist : overwrite default values defined in SHARED/namelist_ref
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! ICEADV (LIPSCOMB test) configuration !!
+!!======================================================================
+!! *** Domain & Run management namelists *** !!
+!! !!
+!! namrun parameters of the run
+!! namdom space and time domain
+!! namcfg parameters of the configuration (default: user defined GYRE)
+!! namwad Wetting and drying (default: OFF)
+!! namtsd data: temperature & salinity (default: OFF)
+!! namcrs coarsened grid (for outputs and/or TOP) (ln_crs =T)
+!! namc1d 1D configuration options ("key_c1d")
+!! namc1d_dyndmp 1D newtonian damping applied on currents ("key_c1d")
+!! namc1d_uvd 1D data (currents) ("key_c1d")
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namusr_def ! ICEADV user defined namelist
+!-----------------------------------------------------------------------
+ rn_dx = 4. ! horizontal resolution in meters
+ rn_dy = 4. ! horizontal resolution in meters
+ ln_corio = .false. ! set coriolis=0 (false) or not (true)
+ rn_ppgphi0 = 70. ! Reference latitude [degrees]
+/
+!-----------------------------------------------------------------------
+&namrun ! parameters of the run
+!-----------------------------------------------------------------------
+ nn_no = 0 ! job number (no more used...)
+ cn_exp = "ICEADV" ! experience name
+ nn_it000 = 1 ! first time step
+ nn_itend = 160 ! last time step (std 5475)
+ nn_istate = 1 ! output the initial state (1) or not (0)
+/
+!-----------------------------------------------------------------------
+&namdom ! time and space domain
+!-----------------------------------------------------------------------
+ ln_linssh = .true. ! =T linear free surface ==>> model level are fixed in time
+ !
+ rn_rdt = 2. ! time step for the dynamics (and tracer if nn_acc=0)
+ !
+ 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
+ ! ! (=F) user defined configuration ==>>> see usrdef(_...) modules
+ cn_domcfg = "ICEADV_domcfg" ! domain configuration filename
+/
+!!======================================================================
+!! *** Surface Boundary Condition namelists *** !!
+!! !!
+!! namsbc surface boundary condition manager (default: NO selection)
+!! namsbc_flx flux formulation (ln_flx =T)
+!! namsbc_blk Bulk formulae formulation (ln_blk =T)
+!! namsbc_cpl CouPLed formulation ("key_oasis3" )
+!! namsbc_sas Stand-Alone Surface module (SAS_SRC only)
+!! namsbc_iif Ice-IF: use observed ice cover (nn_ice = 1 )
+!! namtra_qsr penetrative solar radiation (ln_traqsr =T)
+!! namsbc_ssr sea surface restoring term (for T and/or S) (ln_ssr =T)
+!! namsbc_rnf river runoffs (ln_rnf =T)
+!! namsbc_apr Atmospheric Pressure (ln_apr_dyn =T)
+!! namsbc_isf ice shelf melting/freezing (ln_isfcav =T : read (ln_read_cfg=T) or set or usr_def_zgr )
+!! namsbc_iscpl coupling option between land ice model and ocean (ln_isfcav =T)
+!! namsbc_wave external fields from wave model (ln_wave =T)
+!! namberg iceberg floats (ln_icebergs=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namsbc ! Surface Boundary Condition manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_usr = .true. ! user defined formulation (T => check usrdef_sbc)
+ ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk )
+ nn_fsbc = 1 ! frequency of surface boundary condition computation
+ nn_ice = 2 ! sea-ice model
+/
+!-----------------------------------------------------------------------
+&namsbc_sas ! Stand-Alone Surface module: ocean data (SAS_SRC only)
+!-----------------------------------------------------------------------
+ l_sasread = .false. ! =T Read in file ; =F set all to 0. (see sbcssm.F90)
+/
+!!======================================================================
+!! *** Lateral boundary condition *** !!
+!! !!
+!! namlbc lateral momentum boundary condition (default: NO selection)
+!! namagrif agrif nested grid (read by child model only) ("key_agrif")
+!! nam_tide Tidal forcing (default: OFF)
+!! nambdy Unstructured open boundaries (default: OFF)
+!! nambdy_dta Unstructured open boundaries - external data (see nambdy)
+!! nambdy_tide tidal forcing at open boundaries (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namlbc ! lateral momentum boundary condition (default: NO selection)
+!-----------------------------------------------------------------------
+ rn_shlat = 0. ! free slip
+/
+!-----------------------------------------------------------------------
+&namagrif ! AGRIF zoom ("key_agrif")
+!-----------------------------------------------------------------------
+/
+!!======================================================================
+!! *** Top/Bottom boundary condition *** !!
+!! !!
+!! namdrg top/bottom drag coefficient (default: NO selection)
+!! namdrg_top top friction (ln_OFF=F & ln_isfcav=T)
+!! namdrg_bot bottom friction (ln_OFF=F)
+!! nambbc bottom temperature boundary condition (default: OFF)
+!! nambbl bottom boundary layer scheme (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdrg ! top/bottom drag coefficient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_OFF = .true. ! free-slip : Cd = 0
+/
+!!======================================================================
+!! Tracer (T-S) namelists !!
+!! !!
+!! nameos equation of state (default: NO selection)
+!! namtra_adv advection scheme (default: NO selection)
+!! namtra_ldf lateral diffusion scheme (default: NO selection)
+!! namtra_mle mixed layer eddy param. (Fox-Kemper param.) (default: OFF)
+!! namtra_eiv eddy induced velocity param. (default: OFF)
+!! namtra_dmp T & S newtonian damping (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nameos ! ocean Equation Of Seawater (default: OFF)
+!-----------------------------------------------------------------------
+ ln_teos10 = .true. ! = Use TEOS-10 equation of state
+/
+!-----------------------------------------------------------------------
+&namtra_adv ! advection scheme for tracer (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_traadv_fct = .true. ! FCT scheme
+ nn_fct_h = 4 ! =2/4, horizontal 2nd / 4th order
+ nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
+/
+!----------------------------------------------------------------------------------
+&namtra_ldf ! lateral diffusion scheme for tracers (default: NO selection)
+!----------------------------------------------------------------------------------
+ ln_traldf_OFF = .true. ! laplacian operator
+/
+!!======================================================================
+!! *** Dynamics namelists *** !!
+!! !!
+!! nam_vvl vertical coordinate options (default: z-star)
+!! namdyn_adv formulation of the momentum advection (default: NO selection)
+!! namdyn_vor advection scheme (default: NO selection)
+!! namdyn_hpg hydrostatic pressure gradient (default: NO selection)
+!! namdyn_spg surface pressure gradient (default: NO selection)
+!! namdyn_ldf lateral diffusion scheme (default: NO selection)
+!! namdta_dyn offline TOP: dynamics read in files (OFF_SRC only)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdyn_adv ! formulation of the momentum advection (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynadv_OFF = .true. ! linear dynamics (no momentum advection)
+/
+!-----------------------------------------------------------------------
+&namdyn_hpg ! Hydrostatic pressure gradient option (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_hpg_zco = .true. ! z-coordinate - full steps
+/
+!-----------------------------------------------------------------------
+&namdyn_spg ! surface pressure gradient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynspg_ts = .true. ! split-explicit free surface
+/
+!-----------------------------------------------------------------------
+&namdyn_ldf ! lateral diffusion on momentum (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynldf_OFF = .true. ! No operator (i.e. no explicit diffusion)
+/
+!!======================================================================
+!! vertical physics namelists !!
+!! !!
+!! namzdf vertical physics manager (default: NO selection)
+!! namzdf_ric richardson number vertical mixing (ln_zdfric=T)
+!! namzdf_tke TKE vertical mixing (ln_zdftke=T)
+!! namzdf_gls GLS vertical mixing (ln_zdfgls=T)
+!! namzdf_osm OSM vertical diffusion (ln_zdfosm=T)
+!! namzdf_iwm tidal mixing parameterization (ln_zdfiwm=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namzdf ! vertical physics manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_zdfcst = .true. ! constant mixing
+/
+!!======================================================================
+!! *** Diagnostics namelists *** !!
+!! !!
+!! namtrd dynamics and/or tracer trends (default: OFF)
+!! namptr Poleward Transport Diagnostics (default: OFF)
+!! namhsb Heat and salt budgets (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namflo float parameters ("key_float")
+!! nam_diaharm Harmonic analysis of tidal constituents ("key_diaharm")
+!! namdct transports through some sections ("key_diadct")
+!! nam_diatmb Top Middle Bottom Output (default: OFF)
+!! nam_dia25h 25h Mean Output (default: OFF)
+!! namnc4 netcdf4 chunking and compression settings ("key_netcdf4")
+!!======================================================================
+!
+!!======================================================================
+!! *** Observation & Assimilation *** !!
+!! !!
+!! namobs observation and model comparison (default: OFF)
+!! nam_asminc assimilation increments ('key_asminc')
+!!======================================================================
+!
+!!======================================================================
+!! *** Miscellaneous namelists *** !!
+!! !!
+!! nammpp Massively Parallel Processing ("key_mpp_mpi")
+!! namctl Control prints (default: OFF)
+!! namsto Stochastic parametrization of EOS (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nammpp ! Massively Parallel Processing ("key_mpp_mpi")
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namctl ! Control prints (default: OFF)
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namsto ! Stochastic parametrization of EOS (default: OFF)
+!-----------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_60pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_60pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_cfg_60pts (revision 10277)
@@ -0,0 +1,237 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO Configuration namelist : overwrite default values defined in SHARED/namelist_ref
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! ICEADV (LIPSCOMB test) configuration !!
+!!======================================================================
+!! *** Domain & Run management namelists *** !!
+!! !!
+!! namrun parameters of the run
+!! namdom space and time domain
+!! namcfg parameters of the configuration (default: user defined GYRE)
+!! namwad Wetting and drying (default: OFF)
+!! namtsd data: temperature & salinity (default: OFF)
+!! namcrs coarsened grid (for outputs and/or TOP) (ln_crs =T)
+!! namc1d 1D configuration options ("key_c1d")
+!! namc1d_dyndmp 1D newtonian damping applied on currents ("key_c1d")
+!! namc1d_uvd 1D data (currents) ("key_c1d")
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namusr_def ! ICEADV user defined namelist
+!-----------------------------------------------------------------------
+ rn_dx = 4. ! horizontal resolution in meters
+ rn_dy = 4. ! horizontal resolution in meters
+ ln_corio = .false. ! set coriolis=0 (false) or not (true)
+ rn_ppgphi0 = 70. ! Reference latitude [degrees]
+/
+!-----------------------------------------------------------------------
+&namrun ! parameters of the run
+!-----------------------------------------------------------------------
+ nn_no = 0 ! job number (no more used...)
+ cn_exp = "ICEADV" ! experience name
+ nn_it000 = 1 ! first time step
+ nn_itend = 40 ! last time step (std 5475)
+ nn_istate = 1 ! output the initial state (1) or not (0)
+/
+!-----------------------------------------------------------------------
+&namdom ! time and space domain
+!-----------------------------------------------------------------------
+ ln_linssh = .true. ! =T linear free surface ==>> model level are fixed in time
+ !
+ rn_rdt = 2. ! time step for the dynamics (and tracer if nn_acc=0)
+ !
+ 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
+ ! ! (=F) user defined configuration ==>>> see usrdef(_...) modules
+ cn_domcfg = "ICEADV_domcfg" ! domain configuration filename
+/
+!!======================================================================
+!! *** Surface Boundary Condition namelists *** !!
+!! !!
+!! namsbc surface boundary condition manager (default: NO selection)
+!! namsbc_flx flux formulation (ln_flx =T)
+!! namsbc_blk Bulk formulae formulation (ln_blk =T)
+!! namsbc_cpl CouPLed formulation ("key_oasis3" )
+!! namsbc_sas Stand-Alone Surface module (SAS_SRC only)
+!! namsbc_iif Ice-IF: use observed ice cover (nn_ice = 1 )
+!! namtra_qsr penetrative solar radiation (ln_traqsr =T)
+!! namsbc_ssr sea surface restoring term (for T and/or S) (ln_ssr =T)
+!! namsbc_rnf river runoffs (ln_rnf =T)
+!! namsbc_apr Atmospheric Pressure (ln_apr_dyn =T)
+!! namsbc_isf ice shelf melting/freezing (ln_isfcav =T : read (ln_read_cfg=T) or set or usr_def_zgr )
+!! namsbc_iscpl coupling option between land ice model and ocean (ln_isfcav =T)
+!! namsbc_wave external fields from wave model (ln_wave =T)
+!! namberg iceberg floats (ln_icebergs=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namsbc ! Surface Boundary Condition manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_usr = .true. ! user defined formulation (T => check usrdef_sbc)
+ ln_blk = .false. ! Bulk formulation (T => fill namsbc_blk )
+ nn_fsbc = 1 ! frequency of surface boundary condition computation
+ nn_ice = 2 ! sea-ice model
+/
+!-----------------------------------------------------------------------
+&namsbc_sas ! Stand-Alone Surface module: ocean data (SAS_SRC only)
+!-----------------------------------------------------------------------
+ l_sasread = .false. ! =T Read in file ; =F set all to 0. (see sbcssm.F90)
+/
+!!======================================================================
+!! *** Lateral boundary condition *** !!
+!! !!
+!! namlbc lateral momentum boundary condition (default: NO selection)
+!! namagrif agrif nested grid (read by child model only) ("key_agrif")
+!! nam_tide Tidal forcing (default: OFF)
+!! nambdy Unstructured open boundaries (default: OFF)
+!! nambdy_dta Unstructured open boundaries - external data (see nambdy)
+!! nambdy_tide tidal forcing at open boundaries (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namlbc ! lateral momentum boundary condition (default: NO selection)
+!-----------------------------------------------------------------------
+ rn_shlat = 0. ! free slip
+/
+!-----------------------------------------------------------------------
+&namagrif ! AGRIF zoom ("key_agrif")
+!-----------------------------------------------------------------------
+/
+!!======================================================================
+!! *** Top/Bottom boundary condition *** !!
+!! !!
+!! namdrg top/bottom drag coefficient (default: NO selection)
+!! namdrg_top top friction (ln_OFF=F & ln_isfcav=T)
+!! namdrg_bot bottom friction (ln_OFF=F)
+!! nambbc bottom temperature boundary condition (default: OFF)
+!! nambbl bottom boundary layer scheme (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdrg ! top/bottom drag coefficient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_OFF = .true. ! free-slip : Cd = 0
+/
+!!======================================================================
+!! Tracer (T-S) namelists !!
+!! !!
+!! nameos equation of state (default: NO selection)
+!! namtra_adv advection scheme (default: NO selection)
+!! namtra_ldf lateral diffusion scheme (default: NO selection)
+!! namtra_mle mixed layer eddy param. (Fox-Kemper param.) (default: OFF)
+!! namtra_eiv eddy induced velocity param. (default: OFF)
+!! namtra_dmp T & S newtonian damping (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nameos ! ocean Equation Of Seawater (default: OFF)
+!-----------------------------------------------------------------------
+ ln_teos10 = .true. ! = Use TEOS-10 equation of state
+/
+!-----------------------------------------------------------------------
+&namtra_adv ! advection scheme for tracer (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_traadv_fct = .true. ! FCT scheme
+ nn_fct_h = 4 ! =2/4, horizontal 2nd / 4th order
+ nn_fct_v = 2 ! =2/4, vertical 2nd / COMPACT 4th order
+/
+!----------------------------------------------------------------------------------
+&namtra_ldf ! lateral diffusion scheme for tracers (default: NO selection)
+!----------------------------------------------------------------------------------
+ ln_traldf_OFF = .true. ! laplacian operator
+/
+!!======================================================================
+!! *** Dynamics namelists *** !!
+!! !!
+!! nam_vvl vertical coordinate options (default: z-star)
+!! namdyn_adv formulation of the momentum advection (default: NO selection)
+!! namdyn_vor advection scheme (default: NO selection)
+!! namdyn_hpg hydrostatic pressure gradient (default: NO selection)
+!! namdyn_spg surface pressure gradient (default: NO selection)
+!! namdyn_ldf lateral diffusion scheme (default: NO selection)
+!! namdta_dyn offline TOP: dynamics read in files (OFF_SRC only)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namdyn_adv ! formulation of the momentum advection (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynadv_OFF = .true. ! linear dynamics (no momentum advection)
+/
+!-----------------------------------------------------------------------
+&namdyn_hpg ! Hydrostatic pressure gradient option (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_hpg_zco = .true. ! z-coordinate - full steps
+/
+!-----------------------------------------------------------------------
+&namdyn_spg ! surface pressure gradient (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynspg_ts = .true. ! split-explicit free surface
+/
+!-----------------------------------------------------------------------
+&namdyn_ldf ! lateral diffusion on momentum (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_dynldf_OFF = .true. ! No operator (i.e. no explicit diffusion)
+/
+!!======================================================================
+!! vertical physics namelists !!
+!! !!
+!! namzdf vertical physics manager (default: NO selection)
+!! namzdf_ric richardson number vertical mixing (ln_zdfric=T)
+!! namzdf_tke TKE vertical mixing (ln_zdftke=T)
+!! namzdf_gls GLS vertical mixing (ln_zdfgls=T)
+!! namzdf_osm OSM vertical diffusion (ln_zdfosm=T)
+!! namzdf_iwm tidal mixing parameterization (ln_zdfiwm=T)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&namzdf ! vertical physics manager (default: NO selection)
+!-----------------------------------------------------------------------
+ ln_zdfcst = .true. ! constant mixing
+/
+!!======================================================================
+!! *** Diagnostics namelists *** !!
+!! !!
+!! namtrd dynamics and/or tracer trends (default: OFF)
+!! namptr Poleward Transport Diagnostics (default: OFF)
+!! namhsb Heat and salt budgets (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namdiu Cool skin and warm layer models (default: OFF)
+!! namflo float parameters ("key_float")
+!! nam_diaharm Harmonic analysis of tidal constituents ("key_diaharm")
+!! namdct transports through some sections ("key_diadct")
+!! nam_diatmb Top Middle Bottom Output (default: OFF)
+!! nam_dia25h 25h Mean Output (default: OFF)
+!! namnc4 netcdf4 chunking and compression settings ("key_netcdf4")
+!!======================================================================
+!
+!!======================================================================
+!! *** Observation & Assimilation *** !!
+!! !!
+!! namobs observation and model comparison (default: OFF)
+!! nam_asminc assimilation increments ('key_asminc')
+!!======================================================================
+!
+!!======================================================================
+!! *** Miscellaneous namelists *** !!
+!! !!
+!! nammpp Massively Parallel Processing ("key_mpp_mpi")
+!! namctl Control prints (default: OFF)
+!! namsto Stochastic parametrization of EOS (default: OFF)
+!!======================================================================
+!
+!-----------------------------------------------------------------------
+&nammpp ! Massively Parallel Processing ("key_mpp_mpi")
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namctl ! Control prints (default: OFF)
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namsto ! Stochastic parametrization of EOS (default: OFF)
+!-----------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg (revision 10277)
@@ -0,0 +1,106 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! SI3 configuration namelist: Overwrites SHARED/namelist_ice_ref
+!! 1 - Generic parameters (nampar)
+!! 2 - Ice thickness discretization (namitd)
+!! 3 - Ice dynamics (namdyn)
+!! 4 - Ice ridging/rafting (namdyn_rdgrft)
+!! 5 - Ice rheology (namdyn_rhg)
+!! 6 - Ice advection (namdyn_adv)
+!! 7 - Ice surface forcing (namforcing)
+!! 8 - Ice thermodynamics (namthd)
+!! 9 - Ice heat diffusion (namthd_zdf)
+!! 10 - Ice lateral melting (namthd_da)
+!! 11 - Ice growth in open water (namthd_do)
+!! 12 - Ice salinity (namthd_sal)
+!! 13 - Ice melt ponds (namthd_pnd)
+!! 14 - Ice initialization (namini)
+!! 15 - Ice/snow albedos (namalb)
+!! 16 - Ice diagnostics (namdia)
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!
+!------------------------------------------------------------------------------
+&nampar ! Generic parameters
+!------------------------------------------------------------------------------
+ jpl = 1 ! number of ice categories
+ nlay_i = 2 ! number of ice layers
+ ln_icedyn = .true. ! ice dynamics (T) or not (F)
+ ln_icethd = .false. ! ice thermo (T) or not (F)
+/
+!------------------------------------------------------------------------------
+&namitd ! Ice discretization
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn ! Ice dynamics
+!------------------------------------------------------------------------------
+ ln_dynFULL = .false. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
+ ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection)
+ ln_dynADV = .true. ! dyn.: only advection w prescribed vel.(rn_uvice + advection)
+ rn_uice = 1. ! prescribed ice u-velocity
+ rn_vice = 0. ! prescribed ice v-velocity
+/
+!------------------------------------------------------------------------------
+&namdyn_rdgrft ! Ice ridging/rafting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_rhg ! Ice rheology
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_adv ! Ice advection
+!------------------------------------------------------------------------------
+ ln_adv_Pra = .false. ! Advection scheme (Prather)
+ ln_adv_UMx = .true. ! Advection scheme (Ultimate-Macho)
+ nn_UMx = 5 ! order of the scheme for UMx (1-5 ; 20=centered 2nd order)
+/
+!------------------------------------------------------------------------------
+&namforcing ! Ice surface forcing
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd ! Ice thermodynamics
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_zdf ! Ice heat diffusion
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_da ! Ice lateral melting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_do ! Ice growth in open water
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_sal ! Ice salinity
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_pnd ! Melt ponds
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namini ! Ice initialization
+!------------------------------------------------------------------------------
+ ln_iceini = .true. ! activate ice initialization (T) or not (F)
+ ln_iceini_file = .true. ! netcdf file provided for initialization (T) or not (F)
+
+ sn_hti = 'initice_60pts' , -12 ,'hti' , .false. , .true., 'yearly' , '' , '', ''
+ sn_hts = 'initice_60pts' , -12 ,'hts' , .false. , .true., 'yearly' , '' , '', ''
+ sn_ati = 'initice_60pts' , -12 ,'ati' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tsu = 'initice_60pts' , -12 ,'tsu' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tmi = 'initice_60pts' , -12 ,'tmi' , .false. , .true., 'yearly' , '' , '', ''
+ sn_smi = 'initice_60pts' , -12 ,'smi' , .false. , .true., 'yearly' , '' , '', ''
+ cn_dir='./'
+/
+!------------------------------------------------------------------------------
+&namalb ! albedo parameters
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdia ! Diagnostics
+!------------------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_120pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_120pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_120pts (revision 10277)
@@ -0,0 +1,106 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! SI3 configuration namelist: Overwrites SHARED/namelist_ice_ref
+!! 1 - Generic parameters (nampar)
+!! 2 - Ice thickness discretization (namitd)
+!! 3 - Ice dynamics (namdyn)
+!! 4 - Ice ridging/rafting (namdyn_rdgrft)
+!! 5 - Ice rheology (namdyn_rhg)
+!! 6 - Ice advection (namdyn_adv)
+!! 7 - Ice surface forcing (namforcing)
+!! 8 - Ice thermodynamics (namthd)
+!! 9 - Ice heat diffusion (namthd_zdf)
+!! 10 - Ice lateral melting (namthd_da)
+!! 11 - Ice growth in open water (namthd_do)
+!! 12 - Ice salinity (namthd_sal)
+!! 13 - Ice melt ponds (namthd_pnd)
+!! 14 - Ice initialization (namini)
+!! 15 - Ice/snow albedos (namalb)
+!! 16 - Ice diagnostics (namdia)
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!
+!------------------------------------------------------------------------------
+&nampar ! Generic parameters
+!------------------------------------------------------------------------------
+ jpl = 1 ! number of ice categories
+ nlay_i = 2 ! number of ice layers
+ ln_icedyn = .true. ! ice dynamics (T) or not (F)
+ ln_icethd = .false. ! ice thermo (T) or not (F)
+/
+!------------------------------------------------------------------------------
+&namitd ! Ice discretization
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn ! Ice dynamics
+!------------------------------------------------------------------------------
+ ln_dynFULL = .false. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
+ ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection)
+ ln_dynADV = .true. ! dyn.: only advection w prescribed vel.(rn_uvice + advection)
+ rn_uice = 1. ! prescribed ice u-velocity
+ rn_vice = 0. ! prescribed ice v-velocity
+/
+!------------------------------------------------------------------------------
+&namdyn_rdgrft ! Ice ridging/rafting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_rhg ! Ice rheology
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_adv ! Ice advection
+!------------------------------------------------------------------------------
+ ln_adv_Pra = .false. ! Advection scheme (Prather)
+ ln_adv_UMx = .true. ! Advection scheme (Ultimate-Macho)
+ nn_UMx = 20 ! order of the scheme for UMx (1-5 ; 20=centered 2nd order)
+/
+!------------------------------------------------------------------------------
+&namforcing ! Ice surface forcing
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd ! Ice thermodynamics
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_zdf ! Ice heat diffusion
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_da ! Ice lateral melting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_do ! Ice growth in open water
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_sal ! Ice salinity
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_pnd ! Melt ponds
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namini ! Ice initialization
+!------------------------------------------------------------------------------
+ ln_iceini = .true. ! activate ice initialization (T) or not (F)
+ ln_iceini_file = .true. ! netcdf file provided for initialization (T) or not (F)
+
+ sn_hti = 'initice_120pts' , -12 ,'hti' , .false. , .true., 'yearly' , '' , '', ''
+ sn_hts = 'initice_120pts' , -12 ,'hts' , .false. , .true., 'yearly' , '' , '', ''
+ sn_ati = 'initice_120pts' , -12 ,'ati' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tsu = 'initice_120pts' , -12 ,'tsu' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tmi = 'initice_120pts' , -12 ,'tmi' , .false. , .true., 'yearly' , '' , '', ''
+ sn_smi = 'initice_120pts' , -12 ,'smi' , .false. , .true., 'yearly' , '' , '', ''
+ cn_dir='./'
+/
+!------------------------------------------------------------------------------
+&namalb ! albedo parameters
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdia ! Diagnostics
+!------------------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_240pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_240pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_240pts (revision 10277)
@@ -0,0 +1,106 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! SI3 configuration namelist: Overwrites SHARED/namelist_ice_ref
+!! 1 - Generic parameters (nampar)
+!! 2 - Ice thickness discretization (namitd)
+!! 3 - Ice dynamics (namdyn)
+!! 4 - Ice ridging/rafting (namdyn_rdgrft)
+!! 5 - Ice rheology (namdyn_rhg)
+!! 6 - Ice advection (namdyn_adv)
+!! 7 - Ice surface forcing (namforcing)
+!! 8 - Ice thermodynamics (namthd)
+!! 9 - Ice heat diffusion (namthd_zdf)
+!! 10 - Ice lateral melting (namthd_da)
+!! 11 - Ice growth in open water (namthd_do)
+!! 12 - Ice salinity (namthd_sal)
+!! 13 - Ice melt ponds (namthd_pnd)
+!! 14 - Ice initialization (namini)
+!! 15 - Ice/snow albedos (namalb)
+!! 16 - Ice diagnostics (namdia)
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!
+!------------------------------------------------------------------------------
+&nampar ! Generic parameters
+!------------------------------------------------------------------------------
+ jpl = 1 ! number of ice categories
+ nlay_i = 2 ! number of ice layers
+ ln_icedyn = .true. ! ice dynamics (T) or not (F)
+ ln_icethd = .false. ! ice thermo (T) or not (F)
+/
+!------------------------------------------------------------------------------
+&namitd ! Ice discretization
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn ! Ice dynamics
+!------------------------------------------------------------------------------
+ ln_dynFULL = .false. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
+ ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection)
+ ln_dynADV = .true. ! dyn.: only advection w prescribed vel.(rn_uvice + advection)
+ rn_uice = 1. ! prescribed ice u-velocity
+ rn_vice = 0. ! prescribed ice v-velocity
+/
+!------------------------------------------------------------------------------
+&namdyn_rdgrft ! Ice ridging/rafting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_rhg ! Ice rheology
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_adv ! Ice advection
+!------------------------------------------------------------------------------
+ ln_adv_Pra = .false. ! Advection scheme (Prather)
+ ln_adv_UMx = .true. ! Advection scheme (Ultimate-Macho)
+ nn_UMx = 20 ! order of the scheme for UMx (1-5 ; 20=centered 2nd order)
+/
+!------------------------------------------------------------------------------
+&namforcing ! Ice surface forcing
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd ! Ice thermodynamics
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_zdf ! Ice heat diffusion
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_da ! Ice lateral melting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_do ! Ice growth in open water
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_sal ! Ice salinity
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_pnd ! Melt ponds
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namini ! Ice initialization
+!------------------------------------------------------------------------------
+ ln_iceini = .true. ! activate ice initialization (T) or not (F)
+ ln_iceini_file = .true. ! netcdf file provided for initialization (T) or not (F)
+
+ sn_hti = 'initice_240pts' , -12 ,'hti' , .false. , .true., 'yearly' , '' , '', ''
+ sn_hts = 'initice_240pts' , -12 ,'hts' , .false. , .true., 'yearly' , '' , '', ''
+ sn_ati = 'initice_240pts' , -12 ,'ati' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tsu = 'initice_240pts' , -12 ,'tsu' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tmi = 'initice_240pts' , -12 ,'tmi' , .false. , .true., 'yearly' , '' , '', ''
+ sn_smi = 'initice_240pts' , -12 ,'smi' , .false. , .true., 'yearly' , '' , '', ''
+ cn_dir='./'
+/
+!------------------------------------------------------------------------------
+&namalb ! albedo parameters
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdia ! Diagnostics
+!------------------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_60pts
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_60pts (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_cfg_60pts (revision 10277)
@@ -0,0 +1,106 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! SI3 configuration namelist: Overwrites SHARED/namelist_ice_ref
+!! 1 - Generic parameters (nampar)
+!! 2 - Ice thickness discretization (namitd)
+!! 3 - Ice dynamics (namdyn)
+!! 4 - Ice ridging/rafting (namdyn_rdgrft)
+!! 5 - Ice rheology (namdyn_rhg)
+!! 6 - Ice advection (namdyn_adv)
+!! 7 - Ice surface forcing (namforcing)
+!! 8 - Ice thermodynamics (namthd)
+!! 9 - Ice heat diffusion (namthd_zdf)
+!! 10 - Ice lateral melting (namthd_da)
+!! 11 - Ice growth in open water (namthd_do)
+!! 12 - Ice salinity (namthd_sal)
+!! 13 - Ice melt ponds (namthd_pnd)
+!! 14 - Ice initialization (namini)
+!! 15 - Ice/snow albedos (namalb)
+!! 16 - Ice diagnostics (namdia)
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!
+!------------------------------------------------------------------------------
+&nampar ! Generic parameters
+!------------------------------------------------------------------------------
+ jpl = 1 ! number of ice categories
+ nlay_i = 2 ! number of ice layers
+ ln_icedyn = .true. ! ice dynamics (T) or not (F)
+ ln_icethd = .false. ! ice thermo (T) or not (F)
+/
+!------------------------------------------------------------------------------
+&namitd ! Ice discretization
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn ! Ice dynamics
+!------------------------------------------------------------------------------
+ ln_dynFULL = .false. ! dyn.: full ice dynamics (rheology + advection + ridging/rafting + correction)
+ ln_dynRHGADV = .false. ! dyn.: no ridge/raft & no corrections (rheology + advection)
+ ln_dynADV = .true. ! dyn.: only advection w prescribed vel.(rn_uvice + advection)
+ rn_uice = 1. ! prescribed ice u-velocity
+ rn_vice = 0. ! prescribed ice v-velocity
+/
+!------------------------------------------------------------------------------
+&namdyn_rdgrft ! Ice ridging/rafting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_rhg ! Ice rheology
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdyn_adv ! Ice advection
+!------------------------------------------------------------------------------
+ ln_adv_Pra = .false. ! Advection scheme (Prather)
+ ln_adv_UMx = .true. ! Advection scheme (Ultimate-Macho)
+ nn_UMx = 20 ! order of the scheme for UMx (1-5 ; 20=centered 2nd order)
+/
+!------------------------------------------------------------------------------
+&namforcing ! Ice surface forcing
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd ! Ice thermodynamics
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_zdf ! Ice heat diffusion
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_da ! Ice lateral melting
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_do ! Ice growth in open water
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_sal ! Ice salinity
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namthd_pnd ! Melt ponds
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namini ! Ice initialization
+!------------------------------------------------------------------------------
+ ln_iceini = .true. ! activate ice initialization (T) or not (F)
+ ln_iceini_file = .true. ! netcdf file provided for initialization (T) or not (F)
+
+ sn_hti = 'initice_60pts' , -12 ,'hti' , .false. , .true., 'yearly' , '' , '', ''
+ sn_hts = 'initice_60pts' , -12 ,'hts' , .false. , .true., 'yearly' , '' , '', ''
+ sn_ati = 'initice_60pts' , -12 ,'ati' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tsu = 'initice_60pts' , -12 ,'tsu' , .false. , .true., 'yearly' , '' , '', ''
+ sn_tmi = 'initice_60pts' , -12 ,'tmi' , .false. , .true., 'yearly' , '' , '', ''
+ sn_smi = 'initice_60pts' , -12 ,'smi' , .false. , .true., 'yearly' , '' , '', ''
+ cn_dir='./'
+/
+!------------------------------------------------------------------------------
+&namalb ! albedo parameters
+!------------------------------------------------------------------------------
+/
+!------------------------------------------------------------------------------
+&namdia ! Diagnostics
+!------------------------------------------------------------------------------
+/
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_ref
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_ref (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ice_ref (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/namelist_ice_ref
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ref
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ref (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/EXPREF/namelist_ref (revision 10277)
@@ -0,0 +1,1 @@
+link ../../../cfgs/SHARED/namelist_ref
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn.F90 (revision 10277)
@@ -0,0 +1,313 @@
+MODULE icedyn
+ !!======================================================================
+ !! *** MODULE icedyn ***
+ !! Sea-Ice dynamics : master routine for sea ice dynamics
+ !!======================================================================
+ !! history : 4.0 ! 2018 (C. Rousset) original code SI3 [aka Sea Ice cube]
+ !!----------------------------------------------------------------------
+#if defined key_si3
+ !!----------------------------------------------------------------------
+ !! 'key_si3' SI3 sea-ice model
+ !!----------------------------------------------------------------------
+ !! ice_dyn : dynamics of sea ice
+ !! ice_dyn_init : initialization and namelist read
+ !!----------------------------------------------------------------------
+ USE phycst ! physical constants
+ USE dom_oce ! ocean space and time domain
+ USE ice ! sea-ice: variables
+ USE icedyn_rhg ! sea-ice: rheology
+ USE icedyn_adv ! sea-ice: advection
+ USE icedyn_rdgrft ! sea-ice: ridging/rafting
+ USE icecor ! sea-ice: corrections
+ USE icevar ! sea-ice: operations
+ !
+ USE in_out_manager ! I/O manager
+ USE iom ! I/O manager library
+ USE lib_mpp ! MPP library
+ USE lib_fortran ! fortran utilities (glob_sum + no signed zero)
+ USE lbclnk ! lateral boundary conditions (or mpp links)
+ USE timing ! Timing
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC ice_dyn ! called by icestp.F90
+ PUBLIC ice_dyn_init ! called by icestp.F90
+
+ INTEGER :: nice_dyn ! choice of the type of dynamics
+ ! ! associated indices:
+ INTEGER, PARAMETER :: np_dynFULL = 1 ! full ice dynamics (rheology + advection + ridging/rafting + correction)
+ INTEGER, PARAMETER :: np_dynRHGADV = 2 ! pure dynamics (rheology + advection)
+ INTEGER, PARAMETER :: np_dynADV = 3 ! only advection w prescribed vel.(rn_uvice + advection)
+ !
+ ! ** namelist (namdyn) **
+ LOGICAL :: ln_dynFULL ! full ice dynamics (rheology + advection + ridging/rafting + correction)
+ LOGICAL :: ln_dynRHGADV ! no ridge/raft & no corrections (rheology + advection)
+ LOGICAL :: ln_dynADV ! only advection w prescribed vel.(rn_uvice + advection)
+ REAL(wp) :: rn_uice ! prescribed u-vel (case np_dynADV)
+ REAL(wp) :: rn_vice ! prescribed v-vel (case np_dynADV)
+
+ !! * Substitutions
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/ICE 4.0 , NEMO Consortium (2018)
+ !! $Id: icedyn.F90 8378 2017-07-26 13:55:59Z clem $
+ !! Software governed by the CeCILL licence (./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE ice_dyn( kt )
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE ice_dyn ***
+ !!
+ !! ** Purpose : this routine manages sea ice dynamics
+ !!
+ !! ** Action : - calculation of friction in case of landfast ice
+ !! - call ice_dyn_rhg = rheology
+ !! - call ice_dyn_adv = advection
+ !! - call ice_dyn_rdgrft = ridging/rafting
+ !! - call ice_cor = corrections if fields are out of bounds
+ !!--------------------------------------------------------------------
+ INTEGER, INTENT(in) :: kt ! ice time step
+ !!
+ INTEGER :: ji, jj, jl ! dummy loop indices
+ REAL(wp) :: zcoefu, zcoefv
+ REAL(wp), DIMENSION(jpi,jpj,jpl) :: zhmax
+ REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zdivu_i
+ !!--------------------------------------------------------------------
+ !
+ IF( ln_timing ) CALL timing_start('icedyn')
+ !
+ IF( kt == nit000 .AND. lwp ) THEN
+ WRITE(numout,*)
+ WRITE(numout,*)'ice_dyn: sea-ice dynamics'
+ WRITE(numout,*)'~~~~~~~'
+ ENDIF
+
+ !
+ IF( ln_landfast ) THEN !-- Landfast ice parameterization: define max bottom friction
+ tau_icebfr(:,:) = 0._wp
+ DO jl = 1, jpl
+ WHERE( h_i(:,:,jl) > ht_n(:,:) * rn_gamma ) tau_icebfr(:,:) = tau_icebfr(:,:) + a_i(:,:,jl) * rn_icebfr
+ END DO
+ IF( iom_use('tau_icebfr') ) CALL iom_put( 'tau_icebfr', tau_icebfr )
+ ENDIF
+
+ zhmax(:,:,:) = h_i_b(:,:,:) !-- Record max of the surrounding 9-pts ice thick. (for CALL Hbig)
+ DO jl = 1, jpl
+ DO jj = 2, jpjm1
+ DO ji = 2, jpim1
+!!gm use of MAXVAL here is very probably less efficient than expending the 9 values
+ zhmax(ji,jj,jl) = MAX( epsi20, MAXVAL( h_i_b(ji-1:ji+1,jj-1:jj+1,jl) ) )
+ END DO
+ END DO
+ END DO
+ CALL lbc_lnk( zhmax(:,:,:), 'T', 1. )
+ !
+ !
+ SELECT CASE( nice_dyn ) !-- Set which dynamics is running
+
+ CASE ( np_dynFULL ) !== all dynamical processes ==!
+ CALL ice_dyn_rhg ( kt ) ! -- rheology
+ CALL ice_dyn_adv ( kt ) ; CALL Hbig( zhmax ) ! -- advection of ice + correction on ice thickness
+ CALL ice_dyn_rdgrft( kt ) ! -- ridging/rafting
+ CALL ice_cor ( kt , 1 ) ! -- Corrections
+
+ CASE ( np_dynRHGADV ) !== no ridge/raft & no corrections ==!
+ CALL ice_dyn_rhg ( kt ) ! -- rheology
+ CALL ice_dyn_adv ( kt ) ! -- advection of ice
+ CALL Hpiling ! -- simple pile-up (replaces ridging/rafting)
+
+ CASE ( np_dynADV ) !== pure advection ==! (prescribed velocities)
+
+ ALLOCATE( zdivu_i(jpi,jpj) )
+
+ !u_ice(:,:) = rn_uice * umask(:,:,1)
+ !v_ice(:,:) = rn_vice * vmask(:,:,1)
+ !CALL RANDOM_NUMBER(u_ice(:,:)) ; u_ice(:,:) = u_ice(:,:) * 0.1 + rn_uice * umask(:,:,1)
+ !CALL RANDOM_NUMBER(v_ice(:,:)) ; v_ice(:,:) = v_ice(:,:) * 0.1 + rn_vice * vmask(:,:,1)
+ ! --- monotonicity test from Lipscomb et al 2004 --- !
+ ! CFL = 0.5 at a distance from the bound of 1/6 of the basin length
+ ! Then for dx = 2m and dt = 1s => rn_uice = u (1/6th) = 1m/s
+ DO jj = 1, jpj
+ DO ji = 1, jpi
+ ! IF( (ji+nimpp-1) < ((jpiglo+1)/6)-5 .OR. (ji+nimpp-1) > (5*(jpiglo+1)/6)+5 ) THEN
+ ! u_ice(ji,jj) = 0._wp
+ ! v_ice(ji,jj) = 0._wp
+ ! ELSE
+ zcoefu = ( REAL(jpiglo+1)*0.5 - REAL(ji+nimpp-1) ) / ( REAL(jpiglo+1)*0.5 - 1. )
+ zcoefv = ( REAL(jpjglo+1)*0.5 - REAL(jj+njmpp-1) ) / ( REAL(jpjglo+1)*0.5 - 1. )
+ u_ice(ji,jj) = rn_uice * 1.5 * SIGN( 1., zcoefu ) * ABS( zcoefu ) * umask(ji,jj,1)
+ v_ice(ji,jj) = rn_vice * 1.5 * SIGN( 1., zcoefv ) * ABS( zcoefv ) * vmask(ji,jj,1)
+ ! ENDIF
+ END DO
+ END DO
+ ! ---
+ CALL ice_dyn_adv ( kt ) ! -- advection of ice
+
+ ! diagnostics: divergence at T points
+ DO jj = 2, jpjm1
+ DO ji = 2, jpim1
+ zdivu_i(ji,jj) = ( e2u(ji,jj) * u_ice(ji,jj) - e2u(ji-1,jj) * u_ice(ji-1,jj) &
+ & + e1v(ji,jj) * v_ice(ji,jj) - e1v(ji,jj-1) * v_ice(ji,jj-1) ) * r1_e1e2t(ji,jj)
+ END DO
+ END DO
+ CALL lbc_lnk( zdivu_i, 'T', 1. )
+ IF( iom_use('icediv') ) CALL iom_put( "icediv" , zdivu_i(:,:) )
+
+ DEALLOCATE( zdivu_i )
+
+ END SELECT
+ !
+ IF( ln_timing ) CALL timing_stop('icedyn')
+ !
+ END SUBROUTINE ice_dyn
+
+
+ SUBROUTINE Hbig( phmax )
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE Hbig ***
+ !!
+ !! ** Purpose : Thickness correction in case advection scheme creates
+ !! abnormally tick ice
+ !!
+ !! ** Method : 1- check whether ice thickness resulting from advection is
+ !! larger than the surrounding 9-points before advection
+ !! and reduce it if a) divergence or b) convergence & at_i>0.8
+ !! 2- bound ice thickness with hi_max (99m)
+ !!
+ !! ** input : Max thickness of the surrounding 9-points
+ !!-------------------------------------------------------------------
+ REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phmax ! max ice thick from surrounding 9-pts
+ !
+ INTEGER :: ji, jj, jl ! dummy loop indices
+ REAL(wp) :: zh, zdv
+ !!-------------------------------------------------------------------
+ !
+ CALL ice_var_zapsmall !-- zap small areas
+ !
+ DO jl = 1, jpl
+ DO jj = 1, jpj
+ DO ji = 1, jpi
+ IF ( v_i(ji,jj,jl) > 0._wp ) THEN !-- bound to hmax
+ !
+ zh = v_i (ji,jj,jl) / a_i(ji,jj,jl)
+ zdv = v_i(ji,jj,jl) - v_i_b(ji,jj,jl)
+ !
+ IF ( ( zdv > 0.0 .AND. zh > phmax(ji,jj,jl) .AND. at_i_b(ji,jj) < 0.80 ) .OR. &
+ & ( zdv <= 0.0 .AND. zh > phmax(ji,jj,jl) ) ) THEN
+ a_i (ji,jj,jl) = v_i(ji,jj,jl) / MIN( phmax(ji,jj,jl), hi_max(jpl) ) !-- bound h_i to hi_max (99 m)
+ ENDIF
+ !
+ ENDIF
+ END DO
+ END DO
+ END DO
+ ! !-- correct pond fraction to avoid a_ip > a_i
+ WHERE( a_ip(:,:,:) > a_i(:,:,:) ) a_ip(:,:,:) = a_i(:,:,:)
+ !
+ END SUBROUTINE Hbig
+
+
+ SUBROUTINE Hpiling
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE Hpiling ***
+ !!
+ !! ** Purpose : Simple conservative piling comparable with 1-cat models
+ !!
+ !! ** Method : pile-up ice when no ridging/rafting
+ !!
+ !! ** input : a_i
+ !!-------------------------------------------------------------------
+ INTEGER :: jl ! dummy loop indices
+ !!-------------------------------------------------------------------
+ !
+ CALL ice_var_zapsmall !-- zap small areas
+ !
+ at_i(:,:) = SUM( a_i(:,:,:), dim=3 )
+ DO jl = 1, jpl
+ WHERE( at_i(:,:) > epsi20 )
+ a_i(:,:,jl) = a_i(:,:,jl) * ( 1._wp + MIN( rn_amax_2d(:,:) - at_i(:,:) , 0._wp ) / at_i(:,:) )
+ END WHERE
+ END DO
+ !
+ END SUBROUTINE Hpiling
+
+
+ SUBROUTINE ice_dyn_init
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE ice_dyn_init ***
+ !!
+ !! ** Purpose : Physical constants and parameters linked to the ice
+ !! dynamics
+ !!
+ !! ** Method : Read the namdyn namelist and check the ice-dynamic
+ !! parameter values called at the first timestep (nit000)
+ !!
+ !! ** input : Namelist namdyn
+ !!-------------------------------------------------------------------
+ INTEGER :: ios, ioptio ! Local integer output status for namelist read
+ !!
+ NAMELIST/namdyn/ ln_dynFULL, ln_dynRHGADV, ln_dynADV, rn_uice, rn_vice, &
+ & rn_ishlat , &
+ & ln_landfast, rn_gamma , rn_icebfr, rn_lfrelax
+ !!-------------------------------------------------------------------
+ !
+ REWIND( numnam_ice_ref ) ! Namelist namdyn in reference namelist : Ice dynamics
+ READ ( numnam_ice_ref, namdyn, IOSTAT = ios, ERR = 901)
+901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdyn in reference namelist', lwp )
+ REWIND( numnam_ice_cfg ) ! Namelist namdyn in configuration namelist : Ice dynamics
+ READ ( numnam_ice_cfg, namdyn, IOSTAT = ios, ERR = 902 )
+902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namdyn in configuration namelist', lwp )
+ IF(lwm) WRITE( numoni, namdyn )
+ !
+ IF(lwp) THEN ! control print
+ WRITE(numout,*)
+ WRITE(numout,*) 'ice_dyn_init: ice parameters for ice dynamics '
+ WRITE(numout,*) '~~~~~~~~~~~~'
+ WRITE(numout,*) ' Namelist namdyn:'
+ WRITE(numout,*) ' Full ice dynamics (rhg + adv + ridge/raft + corr) ln_dynFULL = ', ln_dynFULL
+ WRITE(numout,*) ' No ridge/raft & No cor (rhg + adv) ln_dynRHGADV = ', ln_dynRHGADV
+ WRITE(numout,*) ' Advection only (rn_uvice + adv) ln_dynADV = ', ln_dynADV
+ WRITE(numout,*) ' with prescribed velocity given by (u,v)_ice = (rn_uice,rn_vice) = (', rn_uice,',', rn_vice,')'
+ WRITE(numout,*) ' lateral boundary condition for sea ice dynamics rn_ishlat = ', rn_ishlat
+ WRITE(numout,*) ' Landfast: param (T or F) ln_landfast = ', ln_landfast
+ WRITE(numout,*) ' fraction of ocean depth that ice must reach rn_gamma = ', rn_gamma
+ WRITE(numout,*) ' maximum bottom stress per unit area of contact rn_icebfr = ', rn_icebfr
+ WRITE(numout,*) ' relax time scale (s-1) to reach static friction rn_lfrelax = ', rn_lfrelax
+ WRITE(numout,*)
+ ENDIF
+ ! !== set the choice of ice dynamics ==!
+ ioptio = 0
+ ! !--- full dynamics (rheology + advection + ridging/rafting + correction)
+ IF( ln_dynFULL ) THEN ; ioptio = ioptio + 1 ; nice_dyn = np_dynFULL ; ENDIF
+ ! !--- dynamics without ridging/rafting and corr (rheology + advection)
+ IF( ln_dynRHGADV ) THEN ; ioptio = ioptio + 1 ; nice_dyn = np_dynRHGADV ; ENDIF
+ ! !--- advection only with prescribed ice velocities (from namelist)
+ IF( ln_dynADV ) THEN ; ioptio = ioptio + 1 ; nice_dyn = np_dynADV ; ENDIF
+ !
+ IF( ioptio /= 1 ) CALL ctl_stop( 'ice_dyn_init: one and only one ice dynamics option has to be defined ' )
+ !
+ ! !--- Lateral boundary conditions
+ IF ( rn_ishlat == 0. ) THEN ; IF(lwp) WRITE(numout,*) ' ===>>> ice lateral free-slip'
+ ELSEIF ( rn_ishlat == 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ===>>> ice lateral no-slip'
+ ELSEIF ( 0. < rn_ishlat .AND. rn_ishlat < 2. ) THEN ; IF(lwp) WRITE(numout,*) ' ===>>> ice lateral partial-slip'
+ ELSEIF ( 2. < rn_ishlat ) THEN ; IF(lwp) WRITE(numout,*) ' ===>>> ice lateral strong-slip'
+ ENDIF
+ ! !--- NO Landfast ice : set to zero once for all
+ IF( .NOT.ln_landfast ) tau_icebfr(:,:) = 0._wp
+ !
+ CALL ice_dyn_rdgrft_init ! set ice ridging/rafting parameters
+ CALL ice_dyn_rhg_init ! set ice rheology parameters
+ CALL ice_dyn_adv_init ! set ice advection parameters
+ !
+ END SUBROUTINE ice_dyn_init
+
+#else
+ !!----------------------------------------------------------------------
+ !! Default option Empty module NO SI3 sea-ice model
+ !!----------------------------------------------------------------------
+#endif
+
+ !!======================================================================
+END MODULE icedyn
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv.F90 (revision 10277)
@@ -0,0 +1,198 @@
+MODULE icedyn_adv
+ !!======================================================================
+ !! *** MODULE icedyn_adv ***
+ !! sea-ice: advection
+ !!======================================================================
+ !! History : 4.0 ! 2018 (many people) SI3 [aka Sea Ice cube]
+ !!----------------------------------------------------------------------
+#if defined key_si3
+ !!----------------------------------------------------------------------
+ !! 'key_si3' SI3 sea-ice model
+ !!----------------------------------------------------------------------
+ !! ice_dyn_adv : advection of sea ice variables
+ !!----------------------------------------------------------------------
+ USE phycst ! physical constant
+ USE dom_oce ! ocean domain
+ USE sbc_oce , ONLY : nn_fsbc ! frequency of sea-ice call
+ USE ice ! sea-ice: variables
+ USE icevar ! sea-ice: operations
+ USE icedyn_adv_pra ! sea-ice: advection scheme (Prather)
+ USE icedyn_adv_umx ! sea-ice: advection scheme (ultimate-macho)
+ USE icectl ! sea-ice: control prints
+ !
+ USE in_out_manager ! I/O manager
+ USE iom ! I/O manager library
+ USE lib_mpp ! MPP library
+ USE lib_fortran ! fortran utilities (glob_sum + no signed zero)
+ USE timing ! Timing
+ USE prtctl ! Print control
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC ice_dyn_adv ! called by icestp
+ PUBLIC ice_dyn_adv_init ! called by icedyn
+
+ INTEGER :: nice_adv ! choice of the type of advection scheme
+ ! ! associated indices:
+ INTEGER, PARAMETER :: np_advPRA = 1 ! Prather scheme
+ INTEGER, PARAMETER :: np_advUMx = 2 ! Ultimate-Macho scheme
+ !
+ ! ** namelist (namdyn_adv) **
+ LOGICAL :: ln_adv_Pra ! Prather advection scheme
+ LOGICAL :: ln_adv_UMx ! Ultimate-Macho advection scheme
+ INTEGER :: nn_UMx ! order of the UMx advection scheme
+ !
+ !! * Substitution
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/ICE 4.0 , NEMO Consortium (2018)
+ !! $Id: icedyn_adv.F90 8373 2017-07-25 17:44:54Z clem $
+ !! Software governed by the CeCILL licence (./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE ice_dyn_adv( kt )
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE ice_dyn_adv ***
+ !!
+ !! ** purpose : advection of sea ice
+ !!
+ !! ** method : One can choose between
+ !! a) an Ultimate-Macho scheme (with order defined by nn_UMx) => ln_adv_UMx
+ !! b) and a second order Prather scheme => ln_adv_Pra
+ !!
+ !! ** action :
+ !!----------------------------------------------------------------------
+ INTEGER, INTENT(in) :: kt ! number of iteration
+ !
+ INTEGER :: jl ! dummy loop indice
+ REAL(wp), DIMENSION(jpi,jpj) :: zmask ! fraction of time step with v_i < 0
+ !!---------------------------------------------------------------------
+ !
+ IF( ln_timing ) CALL timing_start('icedyn_adv')
+ !
+ IF( kt == nit000 .AND. lwp ) THEN
+ WRITE(numout,*)
+ WRITE(numout,*) 'ice_dyn_adv: sea-ice advection'
+ WRITE(numout,*) '~~~~~~~~~~~'
+ ENDIF
+
+ ! conservation test
+ IF( ln_icediachk ) CALL ice_cons_hsm(0, 'icedyn_adv', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft)
+
+ !----------
+ ! Advection
+ !----------
+ SELECT CASE( nice_adv )
+ ! !-----------------------!
+ CASE( np_advUMx ) ! ULTIMATE-MACHO scheme !
+ ! !-----------------------!
+ CALL ice_dyn_adv_umx( nn_UMx, kt, u_ice, v_ice, &
+ & ato_i, v_i, v_s, sv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i )
+ ! !-----------------------!
+ CASE( np_advPRA ) ! PRATHER scheme !
+ ! !-----------------------!
+ CALL ice_dyn_adv_pra( kt, u_ice, v_ice, &
+ & ato_i, v_i, v_s, sv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i )
+ END SELECT
+
+ !----------------------------
+ ! Debug the advection schemes
+ !----------------------------
+ ! clem: At least one advection scheme above is not strictly positive => UM from 3d to 5th order
+ ! In Prather, I am not sure if the fields are bounded by 0 or not (it seems not)
+ ! In UM3-5 , advected fields are not bounded and negative values can appear.
+ ! These values are usually very small but in some occasions they can also be non-negligible
+ ! Therefore one needs to bound the advected fields by 0 (though this is not a clean fix)
+ !
+ ! record the negative values resulting from UMx
+ zmask(:,:) = 0._wp ! keep the init to 0 here
+ DO jl = 1, jpl
+ WHERE( v_i(:,:,jl) < 0._wp ) zmask(:,:) = 1._wp
+ END DO
+ IF( iom_use('iceneg_pres') ) CALL iom_put("iceneg_pres", zmask ) ! fraction of time step with v_i < 0
+ IF( iom_use('iceneg_volu') ) CALL iom_put("iceneg_volu", SUM(MIN( v_i, 0. ), dim=3 ) ) ! negative ice volume (only)
+ IF( iom_use('iceneg_hfx' ) ) CALL iom_put("iceneg_hfx" , ( SUM(SUM( MIN( e_i(:,:,1:nlay_i,:), 0. ) & ! negative ice heat content (only)
+ & , dim=4 ), dim=3 ) )* r1_rdtice ) ! -- eq. heat flux [W/m2]
+ !
+ ! ==> conservation is ensured by calling this routine below,
+ ! however the global ice volume is then changed by advection (but errors are very small)
+ !!! CALL ice_var_zapneg( ato_i, v_i, v_s, sv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i )
+
+ !------------
+ ! diagnostics
+ !------------
+ diag_trp_ei(:,:) = SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_rdtice
+ diag_trp_es(:,:) = SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_rdtice
+ diag_trp_sv(:,:) = SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_rdtice
+ diag_trp_vi(:,:) = SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_rdtice
+ diag_trp_vs(:,:) = SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_rdtice
+ IF( iom_use('icemtrp') ) CALL iom_put( "icemtrp" , diag_trp_vi * rhoi ) ! ice mass transport
+ IF( iom_use('snwmtrp') ) CALL iom_put( "snwmtrp" , diag_trp_vs * rhos ) ! snw mass transport
+ IF( iom_use('salmtrp') ) CALL iom_put( "salmtrp" , diag_trp_sv * rhoi * 1.e-03 ) ! salt mass transport (kg/m2/s)
+ IF( iom_use('dihctrp') ) CALL iom_put( "dihctrp" , -diag_trp_ei ) ! advected ice heat content (W/m2)
+ IF( iom_use('dshctrp') ) CALL iom_put( "dshctrp" , -diag_trp_es ) ! advected snw heat content (W/m2)
+
+ ! controls
+ IF( ln_icediachk ) CALL ice_cons_hsm(1, 'icedyn_adv', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft) ! conservation
+ IF( ln_icectl ) CALL ice_prt (kt, iiceprt, jiceprt,-1, ' - ice dyn & trp - ') ! prints
+ IF( ln_timing ) CALL timing_stop ('icedyn_adv') ! timing
+ !
+ END SUBROUTINE ice_dyn_adv
+
+
+ SUBROUTINE ice_dyn_adv_init
+ !!-------------------------------------------------------------------
+ !! *** ROUTINE ice_dyn_adv_init ***
+ !!
+ !! ** Purpose : Physical constants and parameters linked to the ice
+ !! dynamics
+ !!
+ !! ** Method : Read the namdyn_adv namelist and check the ice-dynamic
+ !! parameter values called at the first timestep (nit000)
+ !!
+ !! ** input : Namelist namdyn_adv
+ !!-------------------------------------------------------------------
+ INTEGER :: ios, ioptio ! Local integer output status for namelist read
+ !!
+ NAMELIST/namdyn_adv/ ln_adv_Pra, ln_adv_UMx, nn_UMx
+ !!-------------------------------------------------------------------
+ !
+ REWIND( numnam_ice_ref ) ! Namelist namdyn_adv in reference namelist : Ice dynamics
+ READ ( numnam_ice_ref, namdyn_adv, IOSTAT = ios, ERR = 901)
+901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namdyn_adv in reference namelist', lwp )
+ REWIND( numnam_ice_cfg ) ! Namelist namdyn_adv in configuration namelist : Ice dynamics
+ READ ( numnam_ice_cfg, namdyn_adv, IOSTAT = ios, ERR = 902 )
+902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namdyn_adv in configuration namelist', lwp )
+ IF(lwm) WRITE( numoni, namdyn_adv )
+ !
+ IF(lwp) THEN ! control print
+ WRITE(numout,*)
+ WRITE(numout,*) 'ice_dyn_adv_init: ice parameters for ice dynamics '
+ WRITE(numout,*) '~~~~~~~~~~~~~~~~'
+ WRITE(numout,*) ' Namelist namdyn_adv:'
+ WRITE(numout,*) ' type of advection scheme (Prather) ln_adv_Pra = ', ln_adv_Pra
+ WRITE(numout,*) ' type of advection scheme (Ulimate-Macho) ln_adv_UMx = ', ln_adv_UMx
+ WRITE(numout,*) ' order of the Ultimate-Macho scheme nn_UMx = ', nn_UMx
+ ENDIF
+ !
+ ! !== set the choice of ice advection ==!
+ ioptio = 0
+ IF( ln_adv_Pra ) THEN ; ioptio = ioptio + 1 ; nice_adv = np_advPRA ; ENDIF
+ IF( ln_adv_UMx ) THEN ; ioptio = ioptio + 1 ; nice_adv = np_advUMx ; ENDIF
+ IF( ioptio /= 1 ) CALL ctl_stop( 'ice_dyn_adv_init: choose one and only one ice adv. scheme (ln_adv_Pra or ln_adv_UMx)' )
+ !
+ IF( ln_adv_Pra ) CALL adv_pra_init !* read or initialize all required files
+ !
+ END SUBROUTINE ice_dyn_adv_init
+
+#else
+ !!----------------------------------------------------------------------
+ !! Default option Empty Module NO SI3 sea-ice model
+ !!----------------------------------------------------------------------
+#endif
+
+ !!======================================================================
+END MODULE icedyn_adv
+
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv_umx.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv_umx.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/icedyn_adv_umx.F90 (revision 10277)
@@ -0,0 +1,1046 @@
+MODULE icedyn_adv_umx
+ !!==============================================================================
+ !! *** MODULE icedyn_adv_umx ***
+ !! sea-ice : advection using the ULTIMATE-MACHO scheme
+ !!==============================================================================
+ !! History : 3.6 ! 2014-11 (C. Rousset, G. Madec) Original code
+ !! 4.0 ! 2018 (many people) SI3 [aka Sea Ice cube]
+ !!----------------------------------------------------------------------
+#if defined key_si3
+ !!----------------------------------------------------------------------
+ !! 'key_si3' SI3 sea-ice model
+ !!----------------------------------------------------------------------
+ !! ice_dyn_adv_umx : update the tracer trend with the 3D advection trends using a TVD scheme
+ !! ultimate_x(_y) : compute a tracer value at velocity points using ULTIMATE scheme at various orders
+ !! macho : ???
+ !! nonosc : compute monotonic tracer fluxes by a non-oscillatory algorithm
+ !!----------------------------------------------------------------------
+ USE phycst ! physical constant
+ USE dom_oce ! ocean domain
+ USE sbc_oce , ONLY : nn_fsbc ! update frequency of surface boundary condition
+ USE ice ! sea-ice variables
+ USE icevar ! sea-ice: operations
+ !
+ USE in_out_manager ! I/O manager
+ USE lib_mpp ! MPP library
+ USE lib_fortran ! fortran utilities (glob_sum + no signed zero)
+ USE lbclnk ! lateral boundary conditions (or mpp links)
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC ice_dyn_adv_umx ! called by icedyn_adv.F90
+
+ REAL(wp) :: z1_6 = 1._wp / 6._wp ! =1/6
+ REAL(wp) :: z1_120 = 1._wp / 120._wp ! =1/120
+
+ !! * Substitutions
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/ICE 4.0 , NEMO Consortium (2018)
+ !! $Id: icedyn_adv_umx.F90 4499 2014-02-18 15:14:31Z timgraham $
+ !! Software governed by the CeCILL licence (./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE ice_dyn_adv_umx( kn_umx, kt, pu_ice, pv_ice, &
+ & pato_i, pv_i, pv_s, psv_i, poa_i, pa_i, pa_ip, pv_ip, pe_s, pe_i )
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE ice_dyn_adv_umx ***
+ !!
+ !! ** Purpose : Compute the now trend due to total advection of
+ !! tracers and add it to the general trend of tracer equations
+ !! using an "Ultimate-Macho" scheme
+ !!
+ !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.
+ !!----------------------------------------------------------------------
+ INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2)
+ INTEGER , INTENT(in ) :: kt ! time step
+ REAL(wp), DIMENSION(:,:) , INTENT(in ) :: pu_ice ! ice i-velocity
+ REAL(wp), DIMENSION(:,:) , INTENT(in ) :: pv_ice ! ice j-velocity
+ REAL(wp), DIMENSION(:,:) , INTENT(inout) :: pato_i ! open water area
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: pv_i ! ice volume
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: pv_s ! snw volume
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: psv_i ! salt content
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: poa_i ! age content
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: pa_i ! ice concentration
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: pa_ip ! melt pond fraction
+ REAL(wp), DIMENSION(:,:,:) , INTENT(inout) :: pv_ip ! melt pond volume
+ REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) :: pe_s ! snw heat content
+ REAL(wp), DIMENSION(:,:,:,:), INTENT(inout) :: pe_i ! ice heat content
+ !
+ INTEGER :: ji, jj, jk, jl, jt ! dummy loop indices
+ INTEGER :: icycle ! number of sub-timestep for the advection
+ REAL(wp) :: zamsk ! 1 if advection of concentration, 0 if advection of other tracers
+ REAL(wp) :: zcfl , zdt
+ REAL(wp) :: zeps = 0.0_wp ! shift in concentration to avoid division by 0
+ ! ! must be >= 0.01 and the best seems to be 0.1
+ REAL(wp), DIMENSION(jpi,jpj) :: zudy, zvdx, zcu_box, zcv_box, zfu, zfv
+ REAL(wp), DIMENSION(jpi,jpj) :: z1_a, zh_i, zh_s, zs_i, zo_i, ze_i, ze_s, z1_ap, zh_ip
+ !!----------------------------------------------------------------------
+ !
+ IF( kt == nit000 .AND. lwp ) WRITE(numout,*) '-- ice_dyn_adv_umx: Ultimate-Macho advection scheme'
+ !
+ ! --- If ice drift field is too fast, use an appropriate time step for advection (CFL test for stability) --- !
+ zcfl = MAXVAL( ABS( pu_ice(:,:) ) * rdt_ice * r1_e1u(:,:) )
+ zcfl = MAX( zcfl, MAXVAL( ABS( pv_ice(:,:) ) * rdt_ice * r1_e2v(:,:) ) )
+ IF( lk_mpp ) CALL mpp_max( zcfl )
+
+ IF( zcfl > 0.5 ) THEN ; icycle = 2
+ ELSE ; icycle = 1
+ ENDIF
+
+ zdt = rdt_ice / REAL(icycle)
+
+ ! --- transport --- !
+ zudy(:,:) = pu_ice(:,:) * e2u(:,:)
+ zvdx(:,:) = pv_ice(:,:) * e1v(:,:)
+
+ ! --- define velocity for advection: u*grad(H) --- !
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1
+ IF ( pu_ice(ji,jj) * pu_ice(ji-1,jj) <= 0._wp ) THEN ; zcu_box(ji,jj) = 0._wp
+ ELSEIF( pu_ice(ji,jj) > 0._wp ) THEN ; zcu_box(ji,jj) = pu_ice(ji-1,jj)
+ ELSE ; zcu_box(ji,jj) = pu_ice(ji ,jj)
+ ENDIF
+
+ IF ( pv_ice(ji,jj) * pv_ice(ji,jj-1) <= 0._wp ) THEN ; zcv_box(ji,jj) = 0._wp
+ ELSEIF( pv_ice(ji,jj) > 0._wp ) THEN ; zcv_box(ji,jj) = pv_ice(ji,jj-1)
+ ELSE ; zcv_box(ji,jj) = pv_ice(ji,jj )
+ ENDIF
+ END DO
+ END DO
+
+ !---------------!
+ !== advection ==!
+ !---------------!
+ DO jt = 1, icycle
+
+ zamsk = 1._wp
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zudy, zvdx, zcu_box, zcv_box, pato_i(:,:), pato_i(:,:) ) ! Open water area
+
+ DO jl = 1, jpl
+ ! to avoid a problem with the limiter nonosc when A gets close to 0
+ pa_i(:,:,jl) = pa_i(:,:,jl) + zeps * tmask(:,:,1)
+ !
+ WHERE( pa_i(:,:,jl) > epsi20 ) ; z1_a(:,:) = 1._wp / pa_i(:,:,jl)
+ ELSEWHERE ; z1_a(:,:) = 0. !!; pa_i(:,:,jl) = 0. ; pv_i(:,:,jl) = 0.
+ END WHERE
+ !
+ zamsk = 1._wp
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zudy, zvdx, zcu_box, zcv_box, pa_i(:,:,jl), pa_i(:,:,jl), zfu, zfv ) ! Ice area
+ !!zfu = zudy ; zfv = zvdx
+ !!CALL adv_umx( kn_umx, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, pv_i(:,:,jl), pv_i(:,:,jl) )
+ zamsk = 0._wp ; zh_i(:,:) = pv_i (:,:,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, zh_i(:,:), pv_i (:,:,jl) ) ! Ice volume
+ zamsk = 0._wp ; zh_s(:,:) = pv_s (:,:,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, zh_s(:,:), pv_s (:,:,jl) ) ! Snw volume
+ zamsk = 0._wp ; zs_i(:,:) = psv_i(:,:,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, zs_i(:,:), psv_i(:,:,jl) ) ! Salt content
+ zamsk = 0._wp ; zo_i(:,:) = poa_i(:,:,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, zo_i(:,:), poa_i(:,:,jl) ) ! Age content
+ DO jk = 1, nlay_i
+ zamsk = 0._wp ; ze_i(:,:) = pe_i(:,:,jk,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu, zfv, zcu_box, zcv_box, ze_i(:,:), pe_i(:,:,jk,jl) ) ! Ice heat content
+ END DO
+ DO jk = 1, nlay_s
+ zamsk = 0._wp ; ze_s(:,:) = pe_s(:,:,jk,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu, zfv, zcu_box, zcv_box, ze_s(:,:), pe_s(:,:,jk,jl) ) ! Snw heat content
+ END DO
+ !
+ IF ( ln_pnd_H12 ) THEN ! melt ponds
+ ! to avoid a problem with the limiter nonosc when A gets close to 0
+ pa_ip(:,:,jl) = pa_ip(:,:,jl) + zeps * tmask(:,:,1)
+ !
+ WHERE( pa_ip(:,:,jl) > epsi20 ) ; z1_ap(:,:) = 1._wp / pa_ip(:,:,jl)
+ ELSEWHERE ; z1_ap(:,:) = 0.
+ END WHERE
+ !
+ zamsk = 1._wp
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zudy, zvdx, zcu_box, zcv_box, pa_ip(:,:,jl), pa_ip(:,:,jl), zfu, zfv ) ! mp fraction
+ zamsk = 0._wp ; zh_ip(:,:) = pv_ip(:,:,jl) * z1_a(:,:)
+ CALL adv_umx( zamsk, kn_umx, jt, kt, zdt, zudy, zvdx, zfu , zfv , zcu_box, zcv_box, zh_ip(:,:), pv_ip(:,:,jl) ) ! mp volume
+ ENDIF
+ !
+ ! to avoid a problem with the limiter nonosc when A gets close to 0
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1
+ !pa_i(ji,jj,jl) = ( pa_i(ji,jj,jl) - zeps ) * tmask(ji,jj,1)
+ pa_i(ji,jj,jl) = ( pa_i(ji,jj,jl) - zeps &
+ & + zeps * ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) )*r1_e1e2t(ji,jj)*zdt &
+ & ) * tmask(ji,jj,1)
+ IF ( ln_pnd_H12 ) THEN ! melt ponds
+ pa_ip(ji,jj,jl) = ( pa_ip(ji,jj,jl) - zeps &
+ & + zeps * ( zudy(ji,jj) - zudy(ji-1,jj) + zvdx(ji,jj) - zvdx(ji,jj-1) )*r1_e1e2t(ji,jj)*zdt &
+ & ) * tmask(ji,jj,1)
+ ENDIF
+ END DO
+ END DO
+ CALL lbc_lnk( pa_i(:,:,jl), 'T', 1. )
+ !
+ END DO
+
+ END DO
+ !
+ END SUBROUTINE ice_dyn_adv_umx
+
+
+ SUBROUTINE adv_umx( pamsk, kn_umx, jt, kt, pdt, pu, pv, puc, pvc, pubox, pvbox, pt, ptc, pfu, pfv )
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE adv_umx ***
+ !!
+ !! ** Purpose : Compute the now trend due to total advection of
+ !! tracers and add it to the general trend of tracer equations
+ !!
+ !! ** Method : TVD scheme, i.e. 2nd order centered scheme with
+ !! corrected flux (monotonic correction)
+ !! note: - this advection scheme needs a leap-frog time scheme
+ !!
+ !! ** Action : - pt the after advective tracer
+ !!----------------------------------------------------------------------
+ REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0)
+ INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2)
+ INTEGER , INTENT(in ) :: jt ! number of sub-iteration
+ INTEGER , INTENT(in ) :: kt ! number of iteration
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pu , pv ! 2 ice velocity components => u*e2
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: puc , pvc ! 2 ice velocity components => u*e2 or u*a*e2u
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pubox, pvbox ! upstream velocity
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt ! tracer field
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: ptc ! tracer content field
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out), OPTIONAL :: pfu, pfv ! high order fluxes
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp) :: ztra ! local scalar
+!!clem REAL(wp) :: zeps = 1.e-02 ! local scalar
+ INTEGER :: kn_limiter = 1 ! 1=nonosc ; 2=superbee ; 3=h3(rachid)
+ REAL(wp), DIMENSION(jpi,jpj) :: zfu_ho , zfv_ho , zt_u, zt_v, zpt
+ REAL(wp), DIMENSION(jpi,jpj) :: zfu_ups, zfv_ups, zt_ups ! only for nonosc
+ !!----------------------------------------------------------------------
+ !
+ ! add a constant value to avoid problems with zeros
+ DO jj = 1, jpj
+ DO ji = 1, jpi
+ zpt(ji,jj) = pt(ji,jj) !!clem + zeps * tmask(ji,jj,1)
+ END DO
+ END DO
+
+ ! upstream (_ups) advection with initial mass fluxes
+ ! ---------------------------------------------------
+ ! fluxes
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ zfu_ups(ji,jj) = MAX( puc(ji,jj), 0._wp ) * zpt(ji,jj) + MIN( puc(ji,jj), 0._wp ) * zpt(ji+1,jj)
+ zfv_ups(ji,jj) = MAX( pvc(ji,jj), 0._wp ) * zpt(ji,jj) + MIN( pvc(ji,jj), 0._wp ) * zpt(ji,jj+1)
+ END DO
+ END DO
+ ! guess after content field with upstream scheme
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1
+ ztra = - ( zfu_ups(ji,jj) - zfu_ups(ji-1,jj ) &
+ & + zfv_ups(ji,jj) - zfv_ups(ji ,jj-1) ) * r1_e1e2t(ji,jj)
+ zt_ups(ji,jj) = ( ptc(ji,jj) + pdt * ztra ) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zt_ups, 'T', 1. )
+
+ ! High order (_ho) fluxes
+ ! -----------------------
+ SELECT CASE( kn_umx )
+ !
+ CASE ( 20 ) !== centered second order ==!
+ !
+ CALL cen2( kn_limiter, jt, kt, pdt, zpt, pu, pv, puc, pvc, ptc, zfu_ho, zfv_ho, &
+ & zt_ups, zfu_ups, zfv_ups )
+ !
+ CASE ( 1:5 ) !== 1st to 5th order ULTIMATE-MACHO scheme ==!
+ !
+ CALL macho( pamsk, kn_limiter, kn_umx, jt, kt, pdt, zpt, pu, pv, puc, pvc, pubox, pvbox, ptc, zt_u, zt_v, zfu_ho, zfv_ho, &
+ & zt_ups, zfu_ups, zfv_ups )
+ !
+ END SELECT
+
+ ! output high order fluxes
+ ! ------------------------
+ IF( PRESENT(pfu) ) THEN
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfu(ji,jj) = zfu_ho(ji,jj) !!clem - zeps * puc(ji,jj)
+ pfv(ji,jj) = zfv_ho(ji,jj) !!clem - zeps * pvc(ji,jj)
+ END DO
+ END DO
+ !!CALL lbc_lnk( pfu, 'U', -1. ) ! clem: not needed I think
+ !!CALL lbc_lnk( pfv, 'V', -1. )
+ ENDIF
+
+ ! final trend with corrected fluxes
+ ! ------------------------------------
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1
+ ztra = ( - ( zfu_ho(ji,jj) - zfu_ho(ji-1,jj) + zfv_ho(ji,jj) - zfv_ho(ji,jj-1) ) & ! Div(uaH) or Div(ua)
+!!clem & + ( puc (ji,jj) - puc (ji-1,jj) + pvc (ji,jj) - pvc (ji,jj-1) ) * zeps & ! epsi * Div(ua) or epsi * Div(u)
+ & ) * r1_e1e2t(ji,jj)
+ ptc(ji,jj) = ( ptc(ji,jj) + pdt * ztra ) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( ptc, 'T', 1. )
+ !
+ END SUBROUTINE adv_umx
+
+ SUBROUTINE cen2( kn_limiter, jt, kt, pdt, pt, pu, pv, puc, pvc, ptc, pfu_ho, pfv_ho, &
+ & pt_ups, pfu_ups, pfv_ups )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE macho ***
+ !!
+ !! ** Purpose : compute
+ !!
+ !! ** Method : ... ???
+ !! TIM = transient interpolation Modeling
+ !!
+ !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.
+ !!----------------------------------------------------------------------
+ INTEGER , INTENT(in ) :: kn_limiter ! limiter
+ INTEGER , INTENT(in ) :: jt ! number of sub-iteration
+ INTEGER , INTENT(in ) :: kt ! number of iteration
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt ! tracer fields
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pu, pv ! 2 ice velocity components
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: puc, pvc ! 2 ice velocity * A components
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: ptc ! tracer content at before time step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt_ups ! upstream guess of tracer content
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ LOGICAL :: ll_xy = .TRUE.
+ REAL(wp), DIMENSION(jpi,jpj) :: zzt
+ !!----------------------------------------------------------------------
+ !
+ IF( .NOT.ll_xy ) THEN !-- no alternate directions --!
+ !
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfu_ho(ji,jj) = 0.5 * puc(ji,jj) * ( pt(ji,jj) + pt(ji+1,jj) )
+ pfv_ho(ji,jj) = 0.5 * pvc(ji,jj) * ( pt(ji,jj) + pt(ji,jj+1) )
+ END DO
+ END DO
+ IF ( kn_limiter == 1 ) THEN
+ CALL nonosc_2d( pdt, ptc, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho )
+ ELSEIF( kn_limiter == 2 ) THEN
+ CALL limiter_x( pdt, pu, puc, pt, pfu_ho )
+ CALL limiter_y( pdt, pv, pvc, pt, pfv_ho )
+ ELSEIF( kn_limiter == 3 ) THEN
+ CALL limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+ CALL limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+ ENDIF
+ !
+ ELSE !-- alternate directions --!
+ !
+ IF( MOD( (kt - 1) / nn_fsbc , 2 ) == MOD( (jt - 1) , 2 ) ) THEN !== odd ice time step: adv_x then adv_y ==!
+ !
+ ! flux in x-direction
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfu_ho(ji,jj) = 0.5 * puc(ji,jj) * ( pt(ji,jj) + pt(ji+1,jj) )
+ END DO
+ END DO
+ IF( kn_limiter == 2 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho )
+ IF( kn_limiter == 3 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+
+ ! first guess of tracer content from u-flux
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zzt(ji,jj) = ( ptc(ji,jj) - ( pfu_ho(ji,jj) - pfu_ho(ji-1,jj) ) * pdt * r1_e1e2t(ji,jj) ) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zzt, 'T', 1. )
+
+ ! flux in y-direction
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfv_ho(ji,jj) = 0.5 * pv(ji,jj) * ( zzt(ji,jj) + zzt(ji,jj+1) )
+ END DO
+ END DO
+ IF( kn_limiter == 2 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho )
+ IF( kn_limiter == 3 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+
+ ELSE !== even ice time step: adv_y then adv_x ==!
+ !
+ ! flux in y-direction
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfv_ho(ji,jj) = 0.5 * pvc(ji,jj) * ( pt(ji,jj) + pt(ji,jj+1) )
+ END DO
+ END DO
+ IF( kn_limiter == 2 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho )
+ IF( kn_limiter == 3 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+ !
+ ! first guess of tracer content from v-flux
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zzt(ji,jj) = ( ptc(ji,jj) - ( pfv_ho(ji,jj) - pfv_ho(ji,jj-1) ) * pdt * r1_e1e2t(ji,jj) ) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zzt, 'T', 1. )
+ !
+ ! flux in x-direction
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1
+ pfu_ho(ji,jj) = 0.5 * pu(ji,jj) * ( zzt(ji,jj) + zzt(ji+1,jj) )
+ END DO
+ END DO
+ IF( kn_limiter == 2 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho )
+ IF( kn_limiter == 3 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+
+ ENDIF
+ IF( kn_limiter == 1 ) CALL nonosc_2d( pdt, ptc, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho )
+
+ ENDIF
+
+ END SUBROUTINE cen2
+
+
+ SUBROUTINE macho( pamsk, kn_limiter, kn_umx, jt, kt, pdt, pt, pu, pv, puc, pvc, pubox, pvbox, ptc, pt_u, pt_v, pfu_ho, pfv_ho, &
+ & pt_ups, pfu_ups, pfv_ups )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE macho ***
+ !!
+ !! ** Purpose : compute
+ !!
+ !! ** Method : ... ???
+ !! TIM = transient interpolation Modeling
+ !!
+ !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.
+ !!----------------------------------------------------------------------
+ REAL(wp) , INTENT(in ) :: pamsk ! advection of concentration (1) or other tracers (0)
+ INTEGER , INTENT(in ) :: kn_limiter ! limiter
+ INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2)
+ INTEGER , INTENT(in ) :: jt ! number of sub-iteration
+ INTEGER , INTENT(in ) :: kt ! number of iteration
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt ! tracer fields
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pu, pv ! 2 ice velocity components
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: puc, pvc ! 2 ice velocity * A components
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pubox, pvbox ! upstream velocity
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: ptc ! tracer content at before time step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pt_u, pt_v ! tracer at u- and v-points
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pfu_ho, pfv_ho ! high order fluxes
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt_ups ! upstream guess of tracer content
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pfu_ups, pfv_ups ! upstream fluxes
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp), DIMENSION(jpi,jpj) :: zzt
+ !!----------------------------------------------------------------------
+ !
+ IF( MOD( (kt - 1) / nn_fsbc , 2 ) == MOD( (jt - 1) , 2 ) ) THEN !== odd ice time step: adv_x then adv_y ==!
+ !
+ ! !-- ultimate interpolation of pt at u-point --!
+ CALL ultimate_x( kn_umx, pdt, pt, pu, puc, pt_u, pfu_ho )
+ ! !-- limiter in x --!
+ IF( kn_limiter == 2 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho )
+ IF( kn_limiter == 3 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+ ! !-- advective form update in zzt --!
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zzt(ji,jj) = pt(ji,jj) - pubox(ji,jj) * pdt * ( pt_u(ji,jj) - pt_u(ji-1,jj) ) * r1_e1t(ji,jj) &
+ & - pt (ji,jj) * pdt * ( pu (ji,jj) - pu (ji-1,jj) ) * r1_e1e2t(ji,jj) * pamsk
+ zzt(ji,jj) = zzt(ji,jj) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zzt, 'T', 1. )
+ ! !-- ultimate interpolation of pt at v-point --!
+ CALL ultimate_y( kn_umx, pdt, zzt, pv, pvc, pt_v, pfv_ho )
+ ! !-- limiter in y --!
+ IF( kn_limiter == 2 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho )
+ IF( kn_limiter == 3 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+ !
+ ELSE !== even ice time step: adv_y then adv_x ==!
+ !
+ ! !-- ultimate interpolation of pt at v-point --!
+ CALL ultimate_y( kn_umx, pdt, pt, pv, pvc, pt_v, pfv_ho )
+ ! !-- limiter in y --!
+ IF( kn_limiter == 2 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho )
+ IF( kn_limiter == 3 ) CALL limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+ ! !-- advective form update in zzt --!
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1
+ zzt(ji,jj) = pt(ji,jj) - pvbox(ji,jj) * pdt * ( pt_v(ji,jj) - pt_v(ji,jj-1) ) * r1_e2t(ji,jj) &
+ & - pt (ji,jj) * pdt * ( pv (ji,jj) - pv (ji,jj-1) ) * r1_e1e2t(ji,jj) * pamsk
+ zzt(ji,jj) = zzt(ji,jj) * tmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zzt, 'T', 1. )
+ ! !-- ultimate interpolation of pt at u-point --!
+ CALL ultimate_x( kn_umx, pdt, zzt, pu, puc, pt_u, pfu_ho )
+ ! !-- limiter in x --!
+ IF( kn_limiter == 2 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho )
+ IF( kn_limiter == 3 ) CALL limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+ !
+ ENDIF
+ IF( kn_limiter == 1 ) CALL nonosc_2d ( pdt, ptc, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho )
+ !
+ END SUBROUTINE macho
+
+
+ SUBROUTINE ultimate_x( kn_umx, pdt, pt, pu, puc, pt_u, pfu_ho )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE ultimate_x ***
+ !!
+ !! ** Purpose : compute
+ !!
+ !! ** Method : ... ???
+ !! TIM = transient interpolation Modeling
+ !!
+ !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.
+ !!----------------------------------------------------------------------
+ INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2)
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pu ! ice i-velocity component
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: puc ! ice i-velocity * A component
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt ! tracer fields
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pt_u ! tracer at u-point
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pfu_ho ! high order flux
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp) :: zcu, zdx2, zdx4 ! - -
+ REAL(wp), DIMENSION(jpi,jpj) :: ztu1, ztu2, ztu3, ztu4
+ !!----------------------------------------------------------------------
+ !
+ ! !-- Laplacian in i-direction --!
+ DO jj = 2, jpjm1 ! First derivative (gradient)
+ DO ji = 1, fs_jpim1
+ ztu1(ji,jj) = ( pt(ji+1,jj) - pt(ji,jj) ) * r1_e1u(ji,jj) * umask(ji,jj,1)
+ END DO
+ ! ! Second derivative (Laplacian)
+ DO ji = fs_2, fs_jpim1
+ ztu2(ji,jj) = ( ztu1(ji,jj) - ztu1(ji-1,jj) ) * r1_e1t(ji,jj)
+ END DO
+ END DO
+ CALL lbc_lnk( ztu2, 'T', 1. )
+ !
+ ! !-- BiLaplacian in i-direction --!
+ DO jj = 2, jpjm1 ! Third derivative
+ DO ji = 1, fs_jpim1
+ ztu3(ji,jj) = ( ztu2(ji+1,jj) - ztu2(ji,jj) ) * r1_e1u(ji,jj) * umask(ji,jj,1)
+ END DO
+ ! ! Fourth derivative
+ DO ji = fs_2, fs_jpim1
+ ztu4(ji,jj) = ( ztu3(ji,jj) - ztu3(ji-1,jj) ) * r1_e1t(ji,jj)
+ END DO
+ END DO
+ CALL lbc_lnk( ztu4, 'T', 1. )
+ !
+ !
+ SELECT CASE (kn_umx )
+ !
+ CASE( 1 ) !== 1st order central TIM ==! (Eq. 21)
+ !
+ DO jj = 2, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ pt_u(ji,jj) = 0.5_wp * umask(ji,jj,1) * ( pt(ji+1,jj) + pt(ji,jj) &
+ & - SIGN( 1._wp, pu(ji,jj) ) * ( pt(ji+1,jj) - pt(ji,jj) ) )
+ END DO
+ END DO
+ !
+ CASE( 2 ) !== 2nd order central TIM ==! (Eq. 23)
+ !
+ DO jj = 2, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zcu = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
+ pt_u(ji,jj) = 0.5_wp * umask(ji,jj,1) * ( pt(ji+1,jj) + pt(ji,jj) &
+ & - zcu * ( pt(ji+1,jj) - pt(ji,jj) ) )
+ END DO
+ END DO
+ !
+ CASE( 3 ) !== 3rd order central TIM ==! (Eq. 24)
+ !
+ DO jj = 2, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zcu = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
+ zdx2 = e1u(ji,jj) * e1u(ji,jj)
+!!rachid zdx2 = e1u(ji,jj) * e1t(ji,jj)
+ pt_u(ji,jj) = 0.5_wp * umask(ji,jj,1) * ( ( pt (ji+1,jj) + pt (ji,jj) &
+ & - zcu * ( pt (ji+1,jj) - pt (ji,jj) ) ) &
+ & + z1_6 * zdx2 * ( zcu*zcu - 1._wp ) * ( ztu2(ji+1,jj) + ztu2(ji,jj) &
+ & - SIGN( 1._wp, zcu ) * ( ztu2(ji+1,jj) - ztu2(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ CASE( 4 ) !== 4th order central TIM ==! (Eq. 27)
+ !
+ DO jj = 2, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zcu = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
+ zdx2 = e1u(ji,jj) * e1u(ji,jj)
+!!rachid zdx2 = e1u(ji,jj) * e1t(ji,jj)
+ pt_u(ji,jj) = 0.5_wp * umask(ji,jj,1) * ( ( pt (ji+1,jj) + pt (ji,jj) &
+ & - zcu * ( pt (ji+1,jj) - pt (ji,jj) ) ) &
+ & + z1_6 * zdx2 * ( zcu*zcu - 1._wp ) * ( ztu2(ji+1,jj) + ztu2(ji,jj) &
+ & - 0.5_wp * zcu * ( ztu2(ji+1,jj) - ztu2(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ CASE( 5 ) !== 5th order central TIM ==! (Eq. 29)
+ !
+ DO jj = 2, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zcu = pu(ji,jj) * r1_e2u(ji,jj) * pdt * r1_e1u(ji,jj)
+ zdx2 = e1u(ji,jj) * e1u(ji,jj)
+!!rachid zdx2 = e1u(ji,jj) * e1t(ji,jj)
+ zdx4 = zdx2 * zdx2
+ pt_u(ji,jj) = 0.5_wp * umask(ji,jj,1) * ( ( pt (ji+1,jj) + pt (ji,jj) &
+ & - zcu * ( pt (ji+1,jj) - pt (ji,jj) ) ) &
+ & + z1_6 * zdx2 * ( zcu*zcu - 1._wp ) * ( ztu2(ji+1,jj) + ztu2(ji,jj) &
+ & - 0.5_wp * zcu * ( ztu2(ji+1,jj) - ztu2(ji,jj) ) ) &
+ & + z1_120 * zdx4 * ( zcu*zcu - 1._wp ) * ( zcu*zcu - 4._wp ) * ( ztu4(ji+1,jj) + ztu4(ji,jj) &
+ & - SIGN( 1._wp, zcu ) * ( ztu4(ji+1,jj) - ztu4(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ END SELECT
+ ! !-- High order flux in i-direction --!
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ pfu_ho(ji,jj) = puc(ji,jj) * pt_u(ji,jj)
+ END DO
+ END DO
+ !
+ END SUBROUTINE ultimate_x
+
+
+ SUBROUTINE ultimate_y( kn_umx, pdt, pt, pv, pvc, pt_v, pfv_ho )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE ultimate_y ***
+ !!
+ !! ** Purpose : compute
+ !!
+ !! ** Method : ... ???
+ !! TIM = transient interpolation Modeling
+ !!
+ !! Reference : Leonard, B.P., 1991, Comput. Methods Appl. Mech. Eng., 88, 17-74.
+ !!----------------------------------------------------------------------
+ INTEGER , INTENT(in ) :: kn_umx ! order of the scheme (1-5=UM or 20=CEN2)
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pv ! ice j-velocity component
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pvc ! ice j-velocity*A component
+ REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pt ! tracer fields
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pt_v ! tracer at v-point
+ REAL(wp), DIMENSION(jpi,jpj), INTENT( out) :: pfv_ho ! high order flux
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp) :: zcv, zdy2, zdy4 ! - -
+ REAL(wp), DIMENSION(jpi,jpj) :: ztv1, ztv2, ztv3, ztv4
+ !!----------------------------------------------------------------------
+ !
+ ! !-- Laplacian in j-direction --!
+ DO jj = 1, jpjm1 ! First derivative (gradient)
+ DO ji = fs_2, fs_jpim1
+ ztv1(ji,jj) = ( pt(ji,jj+1) - pt(ji,jj) ) * r1_e2v(ji,jj) * vmask(ji,jj,1)
+ END DO
+ END DO
+ DO jj = 2, jpjm1 ! Second derivative (Laplacian)
+ DO ji = fs_2, fs_jpim1
+ ztv2(ji,jj) = ( ztv1(ji,jj) - ztv1(ji,jj-1) ) * r1_e2t(ji,jj)
+ END DO
+ END DO
+ CALL lbc_lnk( ztv2, 'T', 1. )
+ !
+ ! !-- BiLaplacian in j-direction --!
+ DO jj = 1, jpjm1 ! First derivative
+ DO ji = fs_2, fs_jpim1
+ ztv3(ji,jj) = ( ztv2(ji,jj+1) - ztv2(ji,jj) ) * r1_e2v(ji,jj) * vmask(ji,jj,1)
+ END DO
+ END DO
+ DO jj = 2, jpjm1 ! Second derivative
+ DO ji = fs_2, fs_jpim1
+ ztv4(ji,jj) = ( ztv3(ji,jj) - ztv3(ji,jj-1) ) * r1_e2t(ji,jj)
+ END DO
+ END DO
+ CALL lbc_lnk( ztv4, 'T', 1. )
+ !
+ !
+ SELECT CASE (kn_umx )
+ !
+ CASE( 1 ) !== 1st order central TIM ==! (Eq. 21)
+ DO jj = 1, jpjm1
+ DO ji = fs_2, fs_jpim1
+ pt_v(ji,jj) = 0.5_wp * vmask(ji,jj,1) * ( ( pt(ji,jj+1) + pt(ji,jj) ) &
+ & - SIGN( 1._wp, pv(ji,jj) ) * ( pt(ji,jj+1) - pt(ji,jj) ) )
+ END DO
+ END DO
+ !
+ CASE( 2 ) !== 2nd order central TIM ==! (Eq. 23)
+ DO jj = 1, jpjm1
+ DO ji = fs_2, fs_jpim1
+ zcv = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
+ pt_v(ji,jj) = 0.5_wp * vmask(ji,jj,1) * ( ( pt(ji,jj+1) + pt(ji,jj) ) &
+ & - zcv * ( pt(ji,jj+1) - pt(ji,jj) ) )
+ END DO
+ END DO
+ CALL lbc_lnk( pt_v, 'V', 1. )
+ !
+ CASE( 3 ) !== 3rd order central TIM ==! (Eq. 24)
+ DO jj = 1, jpjm1
+ DO ji = fs_2, fs_jpim1
+ zcv = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
+ zdy2 = e2v(ji,jj) * e2v(ji,jj)
+!!rachid zdy2 = e2v(ji,jj) * e2t(ji,jj)
+ pt_v(ji,jj) = 0.5_wp * vmask(ji,jj,1) * ( ( pt (ji,jj+1) + pt (ji,jj) &
+ & - zcv * ( pt (ji,jj+1) - pt (ji,jj) ) ) &
+ & + z1_6 * zdy2 * ( zcv*zcv - 1._wp ) * ( ztv2(ji,jj+1) + ztv2(ji,jj) &
+ & - SIGN( 1._wp, zcv ) * ( ztv2(ji,jj+1) - ztv2(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ CASE( 4 ) !== 4th order central TIM ==! (Eq. 27)
+ DO jj = 1, jpjm1
+ DO ji = fs_2, fs_jpim1
+ zcv = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
+ zdy2 = e2v(ji,jj) * e2v(ji,jj)
+!!rachid zdy2 = e2v(ji,jj) * e2t(ji,jj)
+ pt_v(ji,jj) = 0.5_wp * vmask(ji,jj,1) * ( ( pt (ji,jj+1) + pt (ji,jj) &
+ & - zcv * ( pt (ji,jj+1) - pt (ji,jj) ) ) &
+ & + z1_6 * zdy2 * ( zcv*zcv - 1._wp ) * ( ztv2(ji,jj+1) + ztv2(ji,jj) &
+ & - 0.5_wp * zcv * ( ztv2(ji,jj+1) - ztv2(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ CASE( 5 ) !== 5th order central TIM ==! (Eq. 29)
+ DO jj = 1, jpjm1
+ DO ji = fs_2, fs_jpim1
+ zcv = pv(ji,jj) * r1_e1v(ji,jj) * pdt * r1_e2v(ji,jj)
+ zdy2 = e2v(ji,jj) * e2v(ji,jj)
+!!rachid zdy2 = e2v(ji,jj) * e2t(ji,jj)
+ zdy4 = zdy2 * zdy2
+ pt_v(ji,jj) = 0.5_wp * vmask(ji,jj,1) * ( ( pt (ji,jj+1) + pt (ji,jj) &
+ & - zcv * ( pt (ji,jj+1) - pt (ji,jj) ) ) &
+ & + z1_6 * zdy2 * ( zcv*zcv - 1._wp ) * ( ztv2(ji,jj+1) + ztv2(ji,jj) &
+ & - 0.5_wp * zcv * ( ztv2(ji,jj+1) - ztv2(ji,jj) ) ) &
+ & + z1_120 * zdy4 * ( zcv*zcv - 1._wp ) * ( zcv*zcv - 4._wp ) * ( ztv4(ji,jj+1) + ztv4(ji,jj) &
+ & - SIGN( 1._wp, zcv ) * ( ztv4(ji,jj+1) - ztv4(ji,jj) ) ) )
+ END DO
+ END DO
+ !
+ END SELECT
+ ! !-- High order flux in j-direction --!
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ pfv_ho(ji,jj) = pvc(ji,jj) * pt_v(ji,jj)
+ END DO
+ END DO
+ !
+ END SUBROUTINE ultimate_y
+
+
+ SUBROUTINE nonosc_2d( pdt, ptc, pt_ups, pfu_ups, pfv_ups, pfu_ho, pfv_ho )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE nonosc ***
+ !!
+ !! ** Purpose : compute monotonic tracer fluxes from the upstream
+ !! scheme and the before field by a nonoscillatory algorithm
+ !!
+ !! ** Method : ... ???
+ !! warning : ptc and pt_ups must be masked, but the boundaries
+ !! conditions on the fluxes are not necessary zalezak (1979)
+ !! drange (1995) multi-dimensional forward-in-time and upstream-
+ !! in-space based differencing for fluid
+ !!----------------------------------------------------------------------
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: ptc, pt_ups ! before field & upstream guess of after field
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pfv_ups, pfu_ups ! upstream flux
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(inout) :: pfv_ho, pfu_ho ! monotonic flux
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp) :: zpos, zneg, zbig, zsml, z1_dt ! local scalars
+ REAL(wp) :: zau, zbu, zcu, zav, zbv, zcv, zup, zdo ! - -
+ REAL(wp), DIMENSION(jpi,jpj) :: zbetup, zbetdo, zbup, zbdo, zdiv
+ !!----------------------------------------------------------------------
+ zbig = 1.e+40_wp
+ zsml = 1.e-15_wp
+
+ ! test on divergence
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zdiv(ji,jj) = - ( pfv_ho(ji,jj) - pfv_ho(ji,jj-1) + pfu_ho(ji,jj) - pfu_ho(ji-1,jj) )
+ END DO
+ END DO
+ CALL lbc_lnk( zdiv, 'T', 1. ) ! Lateral boundary conditions (unchanged sign)
+
+ ! antidiffusive flux : high order minus low order
+ ! --------------------------------------------------
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ pfu_ho(ji,jj) = pfu_ho(ji,jj) - pfu_ups(ji,jj)
+ pfv_ho(ji,jj) = pfv_ho(ji,jj) - pfv_ups(ji,jj)
+ END DO
+ END DO
+
+ ! Search local extrema
+ ! --------------------
+ ! max/min of ptc & pt_ups with large negative/positive value (-/+zbig) outside ice cover
+ DO jj = 1, jpj
+ DO ji = fs_2, fs_jpim1
+ IF( ptc(ji,jj) == 0._wp .AND. pt_ups(ji,jj) == 0._wp .AND. zdiv(ji,jj) == 0._wp ) THEN
+ zbup(ji,jj) = -zbig
+ zbdo(ji,jj) = zbig
+ ELSE
+ zbup(ji,jj) = MAX( ptc(ji,jj) , pt_ups(ji,jj) )
+ zbdo(ji,jj) = MIN( ptc(ji,jj) , pt_ups(ji,jj) )
+ ENDIF
+ END DO
+ END DO
+
+ z1_dt = 1._wp / pdt
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ !
+ zup = MAX( zbup(ji,jj), zbup(ji-1,jj), zbup(ji+1,jj), zbup(ji,jj-1), zbup(ji,jj+1) ) ! search max/min in neighbourhood
+ zdo = MIN( zbdo(ji,jj), zbdo(ji-1,jj), zbdo(ji+1,jj), zbdo(ji,jj-1), zbdo(ji,jj+1) )
+ !
+ zpos = MAX( 0., pfu_ho(ji-1,jj) ) - MIN( 0., pfu_ho(ji ,jj) ) &
+ & + MAX( 0., pfv_ho(ji,jj-1) ) - MIN( 0., pfv_ho(ji,jj ) ) ! positive/negative part of the flux
+ zneg = MAX( 0., pfu_ho(ji ,jj) ) - MIN( 0., pfu_ho(ji-1,jj) ) &
+ & + MAX( 0., pfv_ho(ji,jj ) ) - MIN( 0., pfv_ho(ji,jj-1) )
+ !
+ ! ! up & down beta terms
+!!clem zbetup(ji,jj) = ( zup - pt_ups(ji,jj) ) / ( zpos + zsml ) * e1e2t(ji,jj) * z1_dt
+!!clem zbetdo(ji,jj) = ( pt_ups(ji,jj) - zdo ) / ( zneg + zsml ) * e1e2t(ji,jj) * z1_dt
+ IF( zpos >= epsi20 ) THEN
+ zbetup(ji,jj) = ( zup - pt_ups(ji,jj) ) / zpos * e1e2t(ji,jj) * z1_dt
+ ELSE
+ zbetup(ji,jj) = zbig
+ ENDIF
+ !
+ IF( zneg >= epsi20 ) THEN
+ zbetdo(ji,jj) = ( pt_ups(ji,jj) - zdo ) / zneg * e1e2t(ji,jj) * z1_dt
+ ELSE
+ zbetdo(ji,jj) = zbig
+ ENDIF
+ !
+ END DO
+ END DO
+ CALL lbc_lnk_multi( zbetup, 'T', 1., zbetdo, 'T', 1. ) ! lateral boundary cond. (unchanged sign)
+
+ ! monotonic flux in the y direction
+ ! ---------------------------------
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zau = MIN( 1._wp , zbetdo(ji,jj) , zbetup(ji+1,jj) )
+ zbu = MIN( 1._wp , zbetup(ji,jj) , zbetdo(ji+1,jj) )
+ zcu = 0.5 + SIGN( 0.5 , pfu_ho(ji,jj) )
+ !
+ pfu_ho(ji,jj) = pfu_ho(ji,jj) * ( zcu * zau + ( 1._wp - zcu ) * zbu ) + pfu_ups(ji,jj)
+ END DO
+ END DO
+
+ DO jj = 1, jpjm1
+ DO ji = 1, fs_jpim1 ! vector opt.
+ zav = MIN( 1._wp , zbetdo(ji,jj) , zbetup(ji,jj+1) )
+ zbv = MIN( 1._wp , zbetup(ji,jj) , zbetdo(ji,jj+1) )
+ zcv = 0.5 + SIGN( 0.5 , pfv_ho(ji,jj) )
+ !
+ pfv_ho(ji,jj) = pfv_ho(ji,jj) * ( zcv * zav + ( 1._wp - zcv ) * zbv ) + pfv_ups(ji,jj)
+ END DO
+ END DO
+ !
+ END SUBROUTINE nonosc_2d
+
+ SUBROUTINE limiter_x( pdt, pu, puc, pt, pfu_ho, pfu_ups )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE limiter_x ***
+ !!
+ !! ** Purpose : compute flux limiter
+ !!----------------------------------------------------------------------
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pu ! ice i-velocity => u*e2
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: puc ! ice i-velocity *A => u*e2*a
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pt ! ice tracer
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(inout) :: pfu_ho ! high order flux
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ), OPTIONAL :: pfu_ups ! upstream flux
+ !
+ REAL(wp) :: Cr, Rjm, Rj, Rjp, uCFL, zpsi, zh3, zlimiter, Rr
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp), DIMENSION (jpi,jpj) :: zslpx ! tracer slopes
+ !!----------------------------------------------------------------------
+ !
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zslpx(ji,jj) = ( pt(ji+1,jj) - pt(ji,jj) ) * umask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zslpx, 'U', -1.) ! lateral boundary cond.
+
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ uCFL = pdt * ABS( pu(ji,jj) ) * r1_e1e2t(ji,jj)
+
+ Rjm = zslpx(ji-1,jj)
+ Rj = zslpx(ji ,jj)
+ Rjp = zslpx(ji+1,jj)
+
+ IF( PRESENT(pfu_ups) ) THEN
+
+ IF( pu(ji,jj) > 0. ) THEN ; Rr = Rjm
+ ELSE ; Rr = Rjp
+ ENDIF
+
+ zh3 = pfu_ho(ji,jj) - pfu_ups(ji,jj)
+ IF( Rj > 0. ) THEN
+ zlimiter = MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(puc(ji,jj)), &
+ & MIN( 2. * Rr * 0.5 * ABS(puc(ji,jj)), zh3, 1.5 * Rj * 0.5 * ABS(puc(ji,jj)) ) ) ) )
+ ELSE
+ zlimiter = -MAX( 0., MIN(-zh3, MAX( Rr * 0.5 * ABS(puc(ji,jj)), &
+ & MIN(-2. * Rr * 0.5 * ABS(puc(ji,jj)), -zh3, -1.5 * Rj * 0.5 * ABS(puc(ji,jj)) ) ) ) )
+ ENDIF
+ pfu_ho(ji,jj) = pfu_ups(ji,jj) + zlimiter
+
+ ELSE
+ IF( Rj /= 0. ) THEN
+ IF( pu(ji,jj) > 0. ) THEN ; Cr = Rjm / Rj
+ ELSE ; Cr = Rjp / Rj
+ ENDIF
+ ELSE
+ Cr = 0.
+ !IF( pu(ji,jj) > 0. ) THEN ; Cr = Rjm * 1.e20
+ !ELSE ; Cr = Rjp * 1.e20
+ !ENDIF
+ ENDIF
+
+ ! -- superbee --
+ zpsi = MAX( 0., MAX( MIN(1.,2.*Cr), MIN(2.,Cr) ) )
+ ! -- van albada 2 --
+ !!zpsi = 2.*Cr / (Cr*Cr+1.)
+
+ ! -- sweby (with beta=1) --
+ !!zpsi = MAX( 0., MAX( MIN(1.,1.*Cr), MIN(1.,Cr) ) )
+ ! -- van Leer --
+ !!zpsi = ( Cr + ABS(Cr) ) / ( 1. + ABS(Cr) )
+ ! -- ospre --
+ !!zpsi = 1.5 * ( Cr*Cr + Cr ) / ( Cr*Cr + Cr + 1. )
+ ! -- koren --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( (1.+2*Cr)/3., 2. ) ) )
+ ! -- charm --
+ !IF( Cr > 0. ) THEN ; zpsi = Cr * (3.*Cr + 1.) / ( (Cr + 1.) * (Cr + 1.) )
+ !ELSE ; zpsi = 0.
+ !ENDIF
+ ! -- van albada 1 --
+ !!zpsi = (Cr*Cr + Cr) / (Cr*Cr +1)
+ ! -- smart --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( 0.25+0.75*Cr, 4. ) ) )
+ ! -- umist --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( 0.25+0.75*Cr, MIN(0.75+0.25*Cr, 2. ) ) ) )
+
+ ! high order flux corrected by the limiter
+ pfu_ho(ji,jj) = pfu_ho(ji,jj) - ABS( puc(ji,jj) ) * ( (1.-zpsi) + uCFL*zpsi ) * Rj * 0.5
+
+ ENDIF
+ END DO
+ END DO
+ CALL lbc_lnk( pfu_ho, 'U', -1.) ! lateral boundary cond.
+ !
+ END SUBROUTINE limiter_x
+
+ SUBROUTINE limiter_y( pdt, pv, pvc, pt, pfv_ho, pfv_ups )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE limiter_y ***
+ !!
+ !! ** Purpose : compute flux limiter
+ !!----------------------------------------------------------------------
+ REAL(wp) , INTENT(in ) :: pdt ! tracer time-step
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pv ! ice i-velocity => u*e2
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pvc ! ice i-velocity *A => u*e2*a
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ) :: pt ! ice tracer
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(inout) :: pfv_ho ! high order flux
+ REAL(wp), DIMENSION (jpi,jpj), INTENT(in ), OPTIONAL :: pfv_ups ! upstream flux
+ !
+ REAL(wp) :: Cr, Rjm, Rj, Rjp, vCFL, zpsi, zh3, zlimiter, Rr
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp), DIMENSION (jpi,jpj) :: zslpy ! tracer slopes
+ !!----------------------------------------------------------------------
+ !
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ zslpy(ji,jj) = ( pt(ji,jj+1) - pt(ji,jj) ) * vmask(ji,jj,1)
+ END DO
+ END DO
+ CALL lbc_lnk( zslpy, 'V', -1.) ! lateral boundary cond.
+
+ DO jj = 2, jpjm1
+ DO ji = fs_2, fs_jpim1 ! vector opt.
+ vCFL = pdt * ABS( pv(ji,jj) ) * r1_e1e2t(ji,jj)
+
+ Rjm = zslpy(ji,jj-1)
+ Rj = zslpy(ji,jj )
+ Rjp = zslpy(ji,jj+1)
+
+ IF( PRESENT(pfv_ups) ) THEN
+
+ IF( pv(ji,jj) > 0. ) THEN ; Rr = Rjm
+ ELSE ; Rr = Rjp
+ ENDIF
+
+ zh3 = pfv_ho(ji,jj) - pfv_ups(ji,jj)
+ IF( Rj > 0. ) THEN
+ zlimiter = MAX( 0., MIN( zh3, MAX(-Rr * 0.5 * ABS(pvc(ji,jj)), &
+ & MIN( 2. * Rr * 0.5 * ABS(pvc(ji,jj)), zh3, 1.5 * Rj * 0.5 * ABS(pvc(ji,jj)) ) ) ) )
+ ELSE
+ zlimiter = -MAX( 0., MIN(-zh3, MAX( Rr * 0.5 * ABS(pvc(ji,jj)), &
+ & MIN(-2. * Rr * 0.5 * ABS(pvc(ji,jj)), -zh3, -1.5 * Rj * 0.5 * ABS(pvc(ji,jj)) ) ) ) )
+ ENDIF
+ pfv_ho(ji,jj) = pfv_ups(ji,jj) + zlimiter
+
+ ELSE
+
+ IF( Rj /= 0. ) THEN
+ IF( pv(ji,jj) > 0. ) THEN ; Cr = Rjm / Rj
+ ELSE ; Cr = Rjp / Rj
+ ENDIF
+ ELSE
+ Cr = 0.
+ !IF( pv(ji,jj) > 0. ) THEN ; Cr = Rjm * 1.e20
+ !ELSE ; Cr = Rjp * 1.e20
+ !ENDIF
+ ENDIF
+
+ ! -- superbee --
+ zpsi = MAX( 0., MAX( MIN(1.,2.*Cr), MIN(2.,Cr) ) )
+ ! -- van albada 2 --
+ !!zpsi = 2.*Cr / (Cr*Cr+1.)
+
+ ! -- sweby (with beta=1) --
+ !!zpsi = MAX( 0., MAX( MIN(1.,1.*Cr), MIN(1.,Cr) ) )
+ ! -- van Leer --
+ !!zpsi = ( Cr + ABS(Cr) ) / ( 1. + ABS(Cr) )
+ ! -- ospre --
+ !!zpsi = 1.5 * ( Cr*Cr + Cr ) / ( Cr*Cr + Cr + 1. )
+ ! -- koren --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( (1.+2*Cr)/3., 2. ) ) )
+ ! -- charm --
+ !IF( Cr > 0. ) THEN ; zpsi = Cr * (3.*Cr + 1.) / ( (Cr + 1.) * (Cr + 1.) )
+ !ELSE ; zpsi = 0.
+ !ENDIF
+ ! -- van albada 1 --
+ !!zpsi = (Cr*Cr + Cr) / (Cr*Cr +1)
+ ! -- smart --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( 0.25+0.75*Cr, 4. ) ) )
+ ! -- umist --
+ !!zpsi = MAX( 0., MIN( 2.*Cr, MIN( 0.25+0.75*Cr, MIN(0.75+0.25*Cr, 2. ) ) ) )
+
+ ! high order flux corrected by the limiter
+ pfv_ho(ji,jj) = pfv_ho(ji,jj) - ABS( pvc(ji,jj) ) * ( (1.-zpsi) + vCFL*zpsi ) * Rj * 0.5
+
+ ENDIF
+ END DO
+ END DO
+ CALL lbc_lnk( pfv_ho, 'V', -1.) ! lateral boundary cond.
+ !
+ END SUBROUTINE limiter_y
+
+#else
+ !!----------------------------------------------------------------------
+ !! Default option Dummy module NO SI3 sea-ice model
+ !!----------------------------------------------------------------------
+#endif
+
+ !!======================================================================
+END MODULE icedyn_adv_umx
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_hgr.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_hgr.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_hgr.F90 (revision 10277)
@@ -0,0 +1,125 @@
+MODULE usrdef_hgr
+ !!======================================================================
+ !! *** MODULE usrdef_hgr ***
+ !!
+ !! === ICEADV configuration ===
+ !!
+ !! User defined : mesh and Coriolis parameter of a user configuration
+ !!======================================================================
+ !! History : NEMO ! 2016-08 (S. Flavoni, G. Madec) Original code
+ !!----------------------------------------------------------------------
+
+ !!----------------------------------------------------------------------
+ !! usr_def_hgr : initialize the horizontal mesh for ICEADV configuration
+ !!----------------------------------------------------------------------
+ USE dom_oce ! ocean space and time domain
+ USE par_oce ! ocean space and time domain
+ USE phycst ! physical constants
+ USE usrdef_nam, ONLY: rn_dx, rn_dy, ln_corio, rn_ppgphi0 ! horizontal resolution in meters
+ ! coriolis and reference latitude
+ USE in_out_manager ! I/O manager
+ USE lib_mpp ! MPP library
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC usr_def_hgr ! called by domhgr.F90
+
+ !!----------------------------------------------------------------------
+ !! NEMO/OCE 4.0 , NEMO Consortium (2018)
+ !! $Id: usrdef_hgr.F90 10074 2018-08-28 16:15:49Z nicolasmartin $
+ !! Software governed by the CeCILL license (see ./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE usr_def_hgr( plamt , plamu , plamv , plamf , & ! geographic position (required)
+ & pphit , pphiu , pphiv , pphif , & !
+ & kff , pff_f , pff_t , & ! Coriolis parameter (if domain not on the sphere)
+ & pe1t , pe1u , pe1v , pe1f , & ! scale factors (required)
+ & pe2t , pe2u , pe2v , pe2f , & !
+ & ke1e2u_v , pe1e2u , pe1e2v ) ! u- & v-surfaces (if gridsize reduction is used in strait(s))
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE usr_def_hgr ***
+ !!
+ !! ** Purpose : user defined mesh and Coriolis parameter
+ !!
+ !! ** Method : set all intent(out) argument to a proper value
+ !! ICEADV configuration : uniform grid spacing (rn_dx)
+ !! without Coriolis force (f=0)
+ !!
+ !! ** Action : - define longitude & latitude of t-, u-, v- and f-points (in degrees)
+ !! - define coriolis parameter at f-point if the domain in not on the sphere (on beta-plane)
+ !! - define i- & j-scale factors at t-, u-, v- and f-points (in meters)
+ !! - define u- & v-surfaces (if gridsize reduction is used in some straits) (in m2)
+ !!----------------------------------------------------------------------
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: plamt, plamu, plamv, plamf ! longitude outputs [degrees]
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: pphit, pphiu, pphiv, pphif ! latitude outputs [degrees]
+ INTEGER , INTENT(out) :: kff ! =1 Coriolis parameter computed here, =0 otherwise
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: pff_f, pff_t ! Coriolis factor at f-point [1/s]
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1t, pe1u, pe1v, pe1f ! i-scale factors [m]
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: pe2t, pe2u, pe2v, pe2f ! j-scale factors [m]
+ INTEGER , INTENT(out) :: ke1e2u_v ! =1 u- & v-surfaces computed here, =0 otherwise
+ REAL(wp), DIMENSION(:,:), INTENT(out) :: pe1e2u, pe1e2v ! u- & v-surfaces (if reduction in strait) [m2]
+ !
+ INTEGER :: ji, jj ! dummy loop indices
+ REAL(wp) :: zphi0, zlam0, zbeta, zf0
+ REAL(wp) :: zti, zui, ztj, zvj ! local scalars
+ !!-------------------------------------------------------------------------------
+ !
+ IF(lwp) WRITE(numout,*)
+ IF(lwp) WRITE(numout,*) 'usr_def_hgr : ICEADV configuration bassin'
+ IF(lwp) WRITE(numout,*)
+ IF(lwp) WRITE(numout,*) ' f-plane with regular grid-spacing rn_dx, rn_dy'
+
+ ! ==========
+ zlam0 = -(jpiglo-1)/2 * 1.e-3 * rn_dx
+ zphi0 = -(jpjglo-1)/2 * 1.e-3 * rn_dy
+
+ DO jj = 1, jpj
+ DO ji = 1, jpi
+ zti = FLOAT( ji - 1 + nimpp - 1 ) ; ztj = FLOAT( jj - 1 + njmpp - 1 )
+ zui = FLOAT( ji - 1 + nimpp - 1 ) + 0.5_wp ; zvj = FLOAT( jj - 1 + njmpp - 1 ) + 0.5_wp
+
+ plamt(ji,jj) = zlam0 + rn_dx * 1.e-3 * zti
+ plamu(ji,jj) = zlam0 + rn_dx * 1.e-3 * zui
+ plamv(ji,jj) = plamt(ji,jj)
+ plamf(ji,jj) = plamu(ji,jj)
+
+ pphit(ji,jj) = zphi0 + rn_dy * 1.e-3 * ztj
+ pphiv(ji,jj) = zphi0 + rn_dy * 1.e-3 * zvj
+ pphiu(ji,jj) = pphit(ji,jj)
+ pphif(ji,jj) = pphiv(ji,jj)
+ END DO
+ END DO
+
+ ! constant scale factors
+ pe1t(:,:) = rn_dx
+ pe2t(:,:) = rn_dy
+
+ pe1u(:,:) = pe1t(:,:) ; pe2u(:,:) = pe2t(:,:)
+ pe1v(:,:) = pe1t(:,:) ; pe2v(:,:) = pe2t(:,:)
+ pe1f(:,:) = pe1t(:,:) ; pe2f(:,:) = pe2t(:,:)
+
+ ! ! NO reduction of grid size in some straits
+ ke1e2u_v = 0 ! ==>> u_ & v_surfaces will be computed in dom_ghr routine
+ pe1e2u(:,:) = 0._wp ! CAUTION: set to zero to avoid error with some compilers that
+ pe1e2v(:,:) = 0._wp ! require an initialization of INTENT(out) arguments
+ !
+ !
+ ! !== Coriolis parameter ==!
+ kff = 1 ! indicate not to compute Coriolis parameter afterward
+ !
+ IF( ln_corio ) THEN
+ zbeta = 2._wp * omega * COS( rad * rn_ppgphi0 ) / ra
+ zf0 = 2._wp * omega * SIN( rad * rn_ppgphi0 )
+ pff_f(:,:) = zf0 + zbeta * pphif(:,:) * 1.e+3
+ pff_t(:,:) = zf0 + zbeta * pphit(:,:) * 1.e+3
+ ELSE
+ pff_f(:,:) = 0.
+ pff_t(:,:) = 0.
+ ENDIF
+ !
+ END SUBROUTINE usr_def_hgr
+
+ !!======================================================================
+END MODULE usrdef_hgr
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_nam.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_nam.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_nam.F90 (revision 10277)
@@ -0,0 +1,109 @@
+MODULE usrdef_nam
+ !!======================================================================
+ !! *** MODULE usrdef_nam ***
+ !!
+ !! === ICEADV configuration ===
+ !!
+ !! User defined : set the domain characteristics of a user configuration
+ !!======================================================================
+ !! History : NEMO ! 2016-03 (S. Flavoni, G. Madec) Original code
+ !!----------------------------------------------------------------------
+
+ !!----------------------------------------------------------------------
+ !! usr_def_nam : read user defined namelist and set global domain size
+ !! usr_def_hgr : initialize the horizontal mesh
+ !!----------------------------------------------------------------------
+ USE dom_oce , ONLY: nimpp , njmpp ! i- & j-indices of the local domain
+ USE par_oce ! ocean space and time domain
+ USE phycst ! physical constants
+ !
+ USE in_out_manager ! I/O manager
+ USE lib_mpp ! MPP library
+ USE timing ! Timing
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC usr_def_nam ! called by nemogcm.F90
+
+ ! !!* namusr_def namelist *!!
+ REAL(wp), PUBLIC :: rn_dx ! resolution in meters defining the horizontal domain size
+ REAL(wp), PUBLIC :: rn_dy ! resolution in meters defining the horizontal domain size
+ REAL(wp), PUBLIC :: rn_ppgphi0 ! reference latitude for beta-plane
+ LOGICAL , PUBLIC :: ln_corio ! set coriolis at 0 (ln_corio=F) or not
+
+ !!----------------------------------------------------------------------
+ !! NEMO/OCE 4.0 , NEMO Consortium (2018)
+ !! $Id: usrdef_nam.F90 10074 2018-08-28 16:15:49Z nicolasmartin $
+ !! Software governed by the CeCILL license (see ./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE usr_def_nam( ldtxt, ldnam, cd_cfg, kk_cfg, kpi, kpj, kpk, kperio )
+ !!----------------------------------------------------------------------
+ !! *** ROUTINE dom_nam ***
+ !!
+ !! ** Purpose : read user defined namelist and define the domain size
+ !!
+ !! ** Method : read in namusr_def containing all the user specific namelist parameter
+ !!
+ !! Here ICEADV configuration
+ !!
+ !! ** input : - namusr_def namelist found in namelist_cfg
+ !!----------------------------------------------------------------------
+ CHARACTER(len=*), DIMENSION(:), INTENT(out) :: ldtxt, ldnam ! stored print information
+ CHARACTER(len=*) , INTENT(out) :: cd_cfg ! configuration name
+ INTEGER , INTENT(out) :: kk_cfg ! configuration resolution
+ INTEGER , INTENT(out) :: kpi, kpj, kpk ! global domain sizes
+ INTEGER , INTENT(out) :: kperio ! lateral global domain b.c.
+ !
+ INTEGER :: ios, ii ! Local integer
+ REAL(wp):: zlx, zly ! Local scalars
+ !!
+ NAMELIST/namusr_def/ rn_dx, rn_dy, ln_corio, rn_ppgphi0
+ !!----------------------------------------------------------------------
+ !
+ ii = 1
+ !
+ REWIND( numnam_cfg ) ! Namelist namusr_def (exist in namelist_cfg only)
+ READ ( numnam_cfg, namusr_def, IOSTAT = ios, ERR = 902 )
+902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namusr_def in configuration namelist', .TRUE. )
+ !
+ WRITE( ldnam(:), namusr_def )
+ !
+ cd_cfg = 'ICEADV' ! name & resolution (not used)
+ kk_cfg = INT( rn_dx )
+ !
+ ! Global Domain size: ICEADV domain is 480 m x 480 m x 10 m
+ kpi = INT( 480.*0.5 / rn_dx ) -1
+ kpj = INT( 480.*0.5 / rn_dy ) -1
+ kpk = 1
+ !
+ zlx = kpi*rn_dx*1.e-3
+ zly = kpj*rn_dy*1.e-3
+ ! ! control print
+ WRITE(ldtxt(ii),*) ' ' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) 'usr_def_nam : read the user defined namelist (namusr_def) in namelist_cfg' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) '~~~~~~~~~~~ ' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' Namelist namusr_def : ICEADV test case' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' horizontal resolution rn_dx = ', rn_dx, ' meters' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' horizontal resolution rn_dy = ', rn_dy, ' meters' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' ICEADV domain ' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' LX [km]: ', zlx ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' LY [km]: ', zly ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' resulting global domain size : jpiglo = ', kpi ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' jpjglo = ', kpj ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' jpkglo = ', kpk ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' Coriolis:', ln_corio ; ii = ii + 1
+ !
+ ! ! Set the lateral boundary condition of the global domain
+ kperio = 7 ! ICEADV configuration : bi-periodic basin
+ !
+ WRITE(ldtxt(ii),*) ' ' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' Lateral boundary condition of the global domain' ; ii = ii + 1
+ WRITE(ldtxt(ii),*) ' ICEADV : bi-periodic basin jperio = ', kperio ; ii = ii + 1
+ !
+ END SUBROUTINE usr_def_nam
+
+ !!======================================================================
+END MODULE usrdef_nam
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_sbc.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_sbc.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_sbc.F90 (revision 10277)
@@ -0,0 +1,159 @@
+MODULE usrdef_sbc
+ !!======================================================================
+ !! *** MODULE usrdef_sbc ***
+ !!
+ !! === ICEADV configuration ===
+ !!
+ !! User defined : surface forcing of a user configuration
+ !!======================================================================
+ !! History : 4.0 ! 2016-03 (S. Flavoni, G. Madec) user defined interface
+ !!----------------------------------------------------------------------
+
+ !!----------------------------------------------------------------------
+ !! usr_def_sbc : user defined surface bounday conditions in ICEADV case
+ !!----------------------------------------------------------------------
+ USE oce ! ocean dynamics and tracers
+ USE dom_oce ! ocean space and time domain
+ USE sbc_oce ! Surface boundary condition: ocean fields
+ USE sbc_ice ! Surface boundary condition: ice fields
+ USE phycst ! physical constants
+ USE ice, ONLY : at_i_b, a_i_b
+ USE icethd_dh ! for CALL ice_thd_snwblow
+ !
+ USE in_out_manager ! I/O manager
+ USE lib_mpp ! distribued memory computing library
+ USE lbclnk ! ocean lateral boundary conditions (or mpp link)
+ USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC usrdef_sbc_oce ! routine called by sbcmod.F90 for sbc ocean
+ PUBLIC usrdef_sbc_ice_tau ! routine called by icestp.F90 for ice dynamics
+ PUBLIC usrdef_sbc_ice_flx ! routine called by icestp.F90 for ice thermo
+
+ !! * Substitutions
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/OCE 4.0 , NEMO Consortium (2018)
+ !! $Id: usrdef_sbc.F90 10074 2018-08-28 16:15:49Z nicolasmartin $
+ !! Software governed by the CeCILL license (see ./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE usrdef_sbc_oce( kt )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE usr_def_sbc ***
+ !!
+ !! ** Purpose : provide at each time-step the surface boundary
+ !! condition, i.e. the momentum, heat and freshwater fluxes.
+ !!
+ !! ** Method : all 0 fields, for ICEADV case
+ !! CAUTION : never mask the surface stress field !
+ !!
+ !! ** Action : - set to ZERO all the ocean surface boundary condition, i.e.
+ !! utau, vtau, taum, wndm, qns, qsr, emp, sfx
+ !!
+ !!----------------------------------------------------------------------
+ INTEGER, INTENT(in) :: kt ! ocean time step
+ !!---------------------------------------------------------------------
+ !
+ IF( kt == nit000 ) THEN
+ !
+ IF(lwp) WRITE(numout,*)' usrdef_sbc_oce : ICEADV case: NO surface forcing'
+ ! --- oce variables --- !
+ utau(:,:) = 0._wp
+ vtau(:,:) = 0._wp
+ taum(:,:) = 0._wp
+ wndm(:,:) = 0._wp
+ !
+ emp (:,:) = 0._wp
+ sfx (:,:) = 0._wp
+ qns (:,:) = 0._wp
+ qsr (:,:) = 0._wp
+ !
+ utau_b(:,:) = 0._wp
+ vtau_b(:,:) = 0._wp
+ emp_b (:,:) = 0._wp
+ sfx_b (:,:) = 0._wp
+ qns_b (:,:) = 0._wp
+ !
+ ENDIF
+ !
+ END SUBROUTINE usrdef_sbc_oce
+
+ SUBROUTINE usrdef_sbc_ice_tau( kt )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE usrdef_sbc_ice_tau ***
+ !!
+ !! ** Purpose : provide the surface boundary (momentum) condition over sea-ice
+ !!---------------------------------------------------------------------
+ INTEGER, INTENT(in) :: kt ! ocean time step
+ !!---------------------------------------------------------------------
+ IF( kt==nit000 .AND. lwp) WRITE(numout,*)' usrdef_sbc_ice : ICEADV case: no stress forcing'
+ !
+ utau_ice(:,:) = 0._wp
+ vtau_ice(:,:) = 0._wp
+ !
+ END SUBROUTINE usrdef_sbc_ice_tau
+
+ SUBROUTINE usrdef_sbc_ice_flx( kt, phs, phi )
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE usrdef_sbc_ice_flx ***
+ !!
+ !! ** Purpose : provide the surface boundary (flux) condition over sea-ice
+ !!---------------------------------------------------------------------
+ INTEGER, INTENT(in) :: kt ! ocean time step
+ REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phs ! snow thickness
+ REAL(wp), DIMENSION(:,:,:), INTENT(in) :: phi ! ice thickness
+ !!
+ REAL(wp) :: zfr1, zfr2 ! local variables
+ REAL(wp), DIMENSION(jpi,jpj) :: zsnw ! snw distribution after wind blowing
+ !!---------------------------------------------------------------------
+ !
+ IF( kt==nit000 .AND. lwp) WRITE(numout,*)' usrdef_sbc_ice : ICEADV case: NO flux forcing'
+ !
+ ! ocean variables (renaming)
+ emp_oce (:,:) = 0._wp ! uniform value for freshwater budget (E-P)
+ qsr_oce (:,:) = 0._wp ! uniform value for solar radiation
+ qns_oce (:,:) = 0._wp ! uniform value for non-solar radiation
+
+ ! ice variables
+ alb_ice (:,:,:) = 0.7_wp ! useless
+ qsr_ice (:,:,:) = 0._wp ! uniform value for solar radiation
+ qns_ice (:,:,:) = 0._wp ! uniform value for non-solar radiation
+ sprecip (:,:) = 0._wp ! uniform value for snow precip
+ evap_ice(:,:,:) = 0._wp ! uniform value for sublimation
+
+ ! ice fields deduced from above
+ zsnw(:,:) = 1._wp
+ !!CALL lim_thd_snwblow( at_i_b, zsnw ) ! snow distribution over ice after wind blowing
+ emp_ice (:,:) = SUM( a_i_b(:,:,:) * evap_ice(:,:,:), dim=3 ) - sprecip(:,:) * zsnw(:,:)
+ emp_oce (:,:) = emp_oce(:,:) - sprecip(:,:) * (1._wp - zsnw(:,:) )
+ qevap_ice(:,:,:) = 0._wp
+ qprec_ice(:,:) = rhos * ( sst_m(:,:) * rcpi - rLfus ) * tmask(:,:,1) ! in J/m3
+ qemp_oce (:,:) = - emp_oce(:,:) * sst_m(:,:) * rcp
+ qemp_ice (:,:) = sprecip(:,:) * zsnw * ( sst_m(:,:) * rcpi - rLfus ) * tmask(:,:,1) ! solid precip (only)
+
+ ! total fluxes
+ emp_tot (:,:) = emp_ice + emp_oce
+ qns_tot (:,:) = at_i_b(:,:) * qns_oce(:,:) + SUM( a_i_b(:,:,:) * qns_ice(:,:,:), dim=3 ) + qemp_ice(:,:) + qemp_oce(:,:)
+ qsr_tot (:,:) = at_i_b(:,:) * qsr_oce(:,:) + SUM( a_i_b(:,:,:) * qsr_ice(:,:,:), dim=3 )
+
+ ! --- shortwave radiation transmitted below the surface (W/m2, see Grenfell Maykut 77) --- !
+ zfr1 = ( 0.18 * ( 1.0 - cldf_ice ) + 0.35 * cldf_ice ) ! transmission when hi>10cm
+ zfr2 = ( 0.82 * ( 1.0 - cldf_ice ) + 0.65 * cldf_ice ) ! zfr2 such that zfr1 + zfr2 to equal 1
+ !
+ WHERE ( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) < 0.1_wp ) ! linear decrease from hi=0 to 10cm
+ qtr_ice_top(:,:,:) = qsr_ice(:,:,:) * ( zfr1 + zfr2 * ( 1._wp - phi(:,:,:) * 10._wp ) )
+ ELSEWHERE( phs(:,:,:) <= 0._wp .AND. phi(:,:,:) >= 0.1_wp ) ! constant (zfr1) when hi>10cm
+ qtr_ice_top(:,:,:) = qsr_ice(:,:,:) * zfr1
+ ELSEWHERE ! zero when hs>0
+ qtr_ice_top(:,:,:) = 0._wp
+ END WHERE
+
+ END SUBROUTINE usrdef_sbc_ice_flx
+
+
+ !!======================================================================
+END MODULE usrdef_sbc
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_zgr.F90
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_zgr.F90 (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/MY_SRC/usrdef_zgr.F90 (revision 10277)
@@ -0,0 +1,111 @@
+MODULE usrdef_zgr
+ !!======================================================================
+ !! *** MODULE usrdef_zgr ***
+ !!
+ !! === ICEADV case ===
+ !!
+ !! Ocean domain : user defined vertical coordinate system
+ !!======================================================================
+ !! History : 4.0 ! 2016-08 (G. Madec, S. Flavoni) Original code
+ !!----------------------------------------------------------------------
+
+ !!----------------------------------------------------------------------
+ !! usr_def_zgr : user defined vertical coordinate system (required)
+ !!---------------------------------------------------------------------
+ USE oce ! ocean variables
+ USE usrdef_nam ! User defined : namelist variables
+ !
+ USE in_out_manager ! I/O manager
+ USE lbclnk ! ocean lateral boundary conditions (or mpp link)
+ USE lib_mpp ! distributed memory computing library
+
+ IMPLICIT NONE
+ PRIVATE
+
+ PUBLIC usr_def_zgr ! called by domzgr.F90
+
+ !! * Substitutions
+# include "vectopt_loop_substitute.h90"
+ !!----------------------------------------------------------------------
+ !! NEMO/OCE 4.0 , NEMO Consortium (2018)
+ !! $Id: usrdef_zgr.F90 10074 2018-08-28 16:15:49Z nicolasmartin $
+ !! Software governed by the CeCILL license (see ./LICENSE)
+ !!----------------------------------------------------------------------
+CONTAINS
+
+ SUBROUTINE usr_def_zgr( ld_zco , ld_zps , ld_sco , ld_isfcav, & ! type of vertical coordinate
+ & pdept_1d, pdepw_1d, pe3t_1d , pe3w_1d , & ! 1D reference vertical coordinate
+ & pdept , pdepw , & ! 3D t & w-points depth
+ & pe3t , pe3u , pe3v , pe3f , & ! vertical scale factors
+ & pe3w , pe3uw , pe3vw, & ! - - -
+ & k_top , k_bot ) ! top & bottom ocean level
+ !!---------------------------------------------------------------------
+ !! *** ROUTINE usr_def_zgr ***
+ !!
+ !! ** Purpose : User defined the vertical coordinates
+ !!
+ !!----------------------------------------------------------------------
+ LOGICAL , INTENT(out) :: ld_zco, ld_zps, ld_sco ! vertical coordinate flags
+ LOGICAL , INTENT(out) :: ld_isfcav ! under iceshelf cavity flag
+ REAL(wp), DIMENSION(:) , INTENT(out) :: pdept_1d, pdepw_1d ! 1D grid-point depth [m]
+ REAL(wp), DIMENSION(:) , INTENT(out) :: pe3t_1d , pe3w_1d ! 1D grid-point depth [m]
+ REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pdept, pdepw ! grid-point depth [m]
+ REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3t , pe3u , pe3v , pe3f ! vertical scale factors [m]
+ REAL(wp), DIMENSION(:,:,:), INTENT(out) :: pe3w , pe3uw, pe3vw ! i-scale factors
+ INTEGER , DIMENSION(:,:) , INTENT(out) :: k_top, k_bot ! first & last ocean level
+ !
+ INTEGER :: jk, k_dz ! dummy indices
+ !!----------------------------------------------------------------------
+ !
+ IF(lwp) WRITE(numout,*)
+ IF(lwp) WRITE(numout,*) 'usr_def_zgr : ICEADV configuration (slab ocean - advection of ice in one direction)'
+ IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
+ !
+ !
+ ! type of vertical coordinate ==>>> here ICEADV : slab ocean always
+ ! ---------------------------
+ ld_zco = .TRUE. ! z-full-step coordinate
+ ld_zps = .FALSE. ! z-partial-step coordinate
+ ld_sco = .FALSE. ! s-coordinate
+ ld_isfcav = .FALSE. ! ISF Ice Shelves Flag
+ !
+ !
+ ! Build the vertical coordinate system
+ ! ------------------------------------
+ !
+ ! !== UNmasked meter bathymetry ==!
+ !
+ !
+ k_dz = 1
+ DO jk = 1, jpk
+ pdepw_1d(jk) = k_dz
+ pdept_1d(jk) = k_dz
+ pe3w_1d (jk) = k_dz
+ pe3t_1d (jk) = k_dz
+ END DO
+ ! !== top masked level bathymetry ==! (all coordinates)
+ !
+ ! no ocean cavities : top ocean level is ONE, except over land
+ k_top(:,:) = 1
+ !
+ ! !== z-coordinate ==! (step-like topography)
+ ! !* bottom ocean compute from the depth of grid-points
+ jpkm1 = jpk
+ k_bot(:,:) = 1 ! here use k_top as a land mask
+ ! !* horizontally uniform coordinate (reference z-co everywhere)
+ DO jk = 1, jpk
+ pdept(:,:,jk) = pdept_1d(jk)
+ pdepw(:,:,jk) = pdepw_1d(jk)
+ pe3t (:,:,jk) = pe3t_1d (jk)
+ pe3u (:,:,jk) = pe3t_1d (jk)
+ pe3v (:,:,jk) = pe3t_1d (jk)
+ pe3f (:,:,jk) = pe3t_1d (jk)
+ pe3w (:,:,jk) = pe3w_1d (jk)
+ pe3uw(:,:,jk) = pe3w_1d (jk)
+ pe3vw(:,:,jk) = pe3w_1d (jk)
+ END DO
+ !
+ END SUBROUTINE usr_def_zgr
+
+ !!======================================================================
+END MODULE usrdef_zgr
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/cpp_ICEADV.fcm
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/cpp_ICEADV.fcm (revision 10277)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/ICEADV/cpp_ICEADV.fcm (revision 10277)
@@ -0,0 +1,1 @@
+bld::tool::fppkeys key_si3 key_mpp_mpi key_nosignedzero key_iomput
Index: /NEMO/branches/2018/dev_r9947_SI3_advection/tests/demo_cfgs.txt
===================================================================
--- /NEMO/branches/2018/dev_r9947_SI3_advection/tests/demo_cfgs.txt (revision 10276)
+++ /NEMO/branches/2018/dev_r9947_SI3_advection/tests/demo_cfgs.txt (revision 10277)
@@ -4,4 +4,5 @@
OVERFLOW OCE
ICEDYN OCE NST SAS ICE
+ICEADV OCE SAS ICE
VORTEX OCE NST
WAD OCE