Tracer time evolution (tranxt.F90)


!-----------------------------------------------------------------------
&namdom        !   space and time domain (bathymetry, mesh, timestep)
!-----------------------------------------------------------------------
   nn_bathy    =    1      !  compute (=0) or read (=1) the bathymetry file
   rn_bathy    =    0.     !  value of the bathymetry. if (=0) bottom flat at jpkm1
   nn_closea   =    0      !  remove (=0) or keep (=1) closed seas and lakes (ORCA)
   nn_msh      =    1      !  create (=1) a mesh file or not (=0)
   rn_hmin     =   -3.     !  min depth of the ocean (>0) or min number of ocean level (<0)
   rn_e3zps_min=   20.     !  partial step thickness is set larger than the minimum of
   rn_e3zps_rat=    0.1    !  rn_e3zps_min and rn_e3zps_rat*e3t, with 0<rn_e3zps_rat<1
                           !
   rn_rdt      = 5760.     !  time step for the dynamics (and tracer if nn_acc=0)
   rn_atfp     =    0.1    !  asselin time filter parameter
   nn_acc      =    0      !  acceleration of convergence : =1      used, rdt < rdttra(k)
                                 !                          =0, not used, rdt = rdttra
   rn_rdtmin   = 28800.          !  minimum time step on tracers (used if nn_acc=1)
   rn_rdtmax   = 28800.          !  maximum time step on tracers (used if nn_acc=1)
   rn_rdth     =  800.           !  depth variation of tracer time step  (used if nn_acc=1)
   ln_crs      = .false.      !  Logical switch for coarsening module
   jphgr_msh   =       0               !  type of horizontal mesh
                                       !  = 0 curvilinear coordinate on the sphere read in coordinate.nc
                                       !  = 1 geographical mesh on the sphere with regular grid-spacing
                                       !  = 2 f-plane with regular grid-spacing
                                       !  = 3 beta-plane with regular grid-spacing
                                       !  = 4 Mercator grid with T/U point at the equator
   ppglam0     =       0.0             !  longitude of first raw and column T-point (jphgr_msh = 1)
   ppgphi0     =     -35.0             ! latitude  of first raw and column T-point (jphgr_msh = 1)
   ppe1_deg    =       1.0             !  zonal      grid-spacing (degrees)
   ppe2_deg    =       0.5             !  meridional grid-spacing (degrees)
   ppe1_m      =    5000.0             !  zonal      grid-spacing (degrees)
   ppe2_m      =    5000.0             !  meridional grid-spacing (degrees)
   ppsur       =    -4762.96143546300  !  ORCA r4, r2 and r05 coefficients
   ppa0        =      255.58049070440  ! (default coefficients)
   ppa1        =      245.58132232490  !
   ppkth       =       21.43336197938  !
   ppacr       =        3.0            !
   ppdzmin     =       10.             !  Minimum vertical spacing
   pphmax      =     5000.             !  Maximum depth
   ldbletanh   =    .TRUE.             !  Use/do not use double tanf function for vertical coordinates
   ppa2        =      100.760928500000 !  Double tanh function parameters
   ppkth2      =       48.029893720000 !
   ppacr2      =       13.000000000000 !
/

Options are defined through the namdom namelist variables. The general framework for tracer time stepping is a modified leap-frog scheme [Leclair and Madec, 2009], $ i.e.$ a three level centred time scheme associated with a Asselin time filter (cf. §3.5):

\begin{equation*}\begin{aligned}(e_{3t}T)^{t+\rdt} &= (e_{3t}T)_f^{t-\rdt} &+ 2 ...
...rdt   \left[ Q^{t+\rdt/2} - Q^{t-\rdt/2} \right] & \end{aligned}\end{equation*}

where RHS is the right hand side of the temperature equation, the subscript $ f$ denotes filtered values, $ \gamma$ is the Asselin coefficient, and $ S$ is the total forcing applied on $ T$ ($ i.e.$ fluxes plus content in mass exchanges). $ \gamma$ is initialized as rn_atfp (namelist parameter). Its default value is rn_atfp=$ 10^{-3}$. Note that the forcing correction term in the filter is not applied in linear free surface (lk_vvl=false) (see §5.4.1. Not also that in constant volume case, the time stepping is performed on $ T$, not on its content, $ e_{3t}T$.

When the vertical mixing is solved implicitly, the update of the next tracer fields is done in module trazdf.F90. In this case only the swapping of arrays and the Asselin filtering is done in the tranxt.F90 module.

In order to prepare for the computation of the next time step, a swap of tracer arrays is performed: $ T^{t-\rdt} = T^t$ and $ T^t = T_f$.

Gurvan Madec and the NEMO Team
NEMO European Consortium2017-02-17