New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
ticket/1620_MERCATOR_SOLVER_SIMPLIFICATION – NEMO
wiki:ticket/1620_MERCATOR_SOLVER_SIMPLIFICATION

Version 13 (modified by gm, 8 years ago) (diff)

--

Author: Jérôme Chanut, Mercator Océan

Page related to ticket: #1620 and associated to the following development branch: [​https://forge.ipsl.jussieu.fr/nemo/browser/branches/2015/dev_r5847_MERCATOR9_solveur_simplification]

This development is part of the shared simplication process, task: SIMPLIF-2: Removal of filtered free surface. Split explicit and explicit free surface only.

Step 1: Remove filtered free surface option and associated key_dynspg_flt key

1) Remove parts of the code specific to "key_dynspg_flt" or lk_dynspg_flt=T and the need for solver modules in the code.
2) Suppress SOL directory and dynspg_flt module

3) Clean momentum trend routines related to filtered free surface (trddyn, trdken, trd_oce).
4) Update reference configurations:

  • Replace key_dynspg_flt by key_dynspg_ts if needed in CONFIG/* directories.
  • Remove namsol block in namelist_* and references to flt variables (trends) in field_def.xml
  • SETTE: update sette.sh, to remove modifications of namelist variables related to solver.

NB: one should change "solver.stat" file and numsol names in stp_ctl and in_out_manager... keep it as is for the time being

==> Commit changes to revision 5868 https://forge.ipsl.jussieu.fr/nemo/changeset?old_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&old=5867&new_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&new=5868

==> Passes Sette [tests:YES tests: YES]

Step 2: Suppress implicit pressure gradient option, ln_hpg_imp=T

Since this option is not supported with the now default split explicit free surface: remove it ( => simpler step routine). ln_hpg_imp namelist variable suppressed in reference namelist.

==> Commit changes to revision 5869[ https://forge.ipsl.jussieu.fr/nemo/changeset?old_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&old=5868&new_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&new=5869]

==> Passes Sette tests: YES

Step 3: Time Stepping readibility / cleaning

1) dynzdf
Make time stepping identical in explicit or split-explicit cases => assume that "after" velocities not tendencies are available after vertical diffusion of momentum (as for tracers) => modify dynzdf/dynnxt routines

2) step

  • Group all dynamical trends at the same place (at the beginning of the time stepping). Still keep dynnxt after tracer time stepping at the end.
  • Assuming ua/va are not used anymore during tracer computation as working arrays, remove temporary 3d arrays ua_sv, va_sv

3) Suppress obsolete dynspg_oce module, remove key_dynspg_ts / key_dynspg_exp (add namelist variables instead)

!-----------------------------------------------------------------------
&namdyn_spg    !   surface pressure gradient
!-----------------------------------------------------------------------
   ln_dynspg_exp  = .false.   !  explicit free surface
   ln_dynspg_ts   = .true.    !  split-explicit free surface
/

4) Reviewed AGRIF code in the case of explicit free surface: slight changes in agrif_opa_interp module, but otherwise ok (quickly tested in ORCA2 Agulhas configuration)

==> Commit changes to revision: 5902 https://forge.ipsl.jussieu.fr/nemo/changeset?old_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&old=5869&new_path=%2Fbranches%2F2015%2Fdev_r5847_MERCATOR9_solveur_simplification&new=5902
==> Passes Sette tests[tests:? : YES]

Step 4: Additional things to do:

  • Answering Gurvan' review :

change in namelist :

regroup namdyn_spg and namsplit namelists + change in some names (ln_bt_nn_auto becomes ln_bt_auto) :

!-----------------------------------------------------------------------
&namdyn_spg      !  surface pressure gradient computation
!-----------------------------------------------------------------------
   ln_dynspg_exp = .FALSE.   !  explicit free surface
   ln_dynspg_ts  = .FALSE.   !  split-explicit free surface
      ln_bt_fw   = .TRUE.    !  Forward integration of barotropic Eqs.
      ln_bt_av   = .TRUE.    !  Time filtering of barotropic variables
         nn_bt_flt =    1       !  Time filter choice  = 0 None
         !                      !                      = 1 Boxcar over   nn_baro sub-steps
         !                      !                      = 2 Boxcar over 2*nn_baro  "    "
      ln_bt_auto  = .TRUE.   !  number of sub-step defined from:
         rn_bt_cmax =  0.8      ! =T : the Maximum Courant Number allowed
         nn_baro    = 30        ! =F : the number of sub-step in rn_rdt seconds
/

Note that ln_dynspg_exp = ln_dynspg_ts = .FALSE. in the ref namelist so that this namelist should be systematical fill up in cfg namelist.

I don't understand the difference between nn_bt_flt=0 and ln_bt_av=F ....???

Note that array of time-splitting part should only be allocated if ln_dynspg_ts=TRUE

dynspg_exp should be modified so that it return the after velocity as dynspg_ts ===>>> simplify dynnxt.F90

dynspg_oce should be suppressed : all variables should be declared either in dynspg.F90 (ln_dynspg_exp and ln_dynspg_ts) or in dynspg_ts for the others


Step.F90 further simplification are needed here :

with removal of solver the DYNAMICS should always be called first ! even in case of explicit free surface !!!!!

The only 2 differences is that in explicit free surface un,vn are not updated after the dynamics, and domvvl is called before the dynamics instead of after the dynamics (or in-between if you don’t follow the remark just below)

Q? why splitting the Dynamics in two parts? make the approximation dz(Ua) computed with e3uw_n ? to be tested …

Furthermore, you can notice that ua,va are no more used as workspace in the tracers, ua_sv and va_sn are no more needed , no?

  • Correct momentum trend computation with time splitting (Gurvan, your input here ?)
  • Remove filtered free surface from documentation

==> Commit changes to revision: ???
==> Passes Sette [tests:? tests: ?]??