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

**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]

**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

**Step 4: Gurvan's Review:**

GM: 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.

**JC ⇒ DONE**

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

**JC ⇒ Small difference: with nn_bt_flt=0 there is still a specific startup of the barotropic loop, previous bt arrays being not saved.**

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

**JC ⇒ DONE. **

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

**JC ⇒ No. dynzdf returns velocities and dynspg_ts still returns tendencies: compliant with tracers, and dynzdf must be called at the end (all tendencies must be known because of possible implicit bottom friction) **

GM: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

**JC ⇒ DONE. But time splitting arrays are defined in oce.F90 to avoid cyclic dependencies (this is linked to agrif bcs).**

GM: 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 !!!!!

**JC ⇒ DONE**

GM: 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)

**JC ⇒ ??**

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

**JC ⇒ dynamics is not splitted anymore. Yes, one could use "now" vertical scale factors. This approximation has 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?

**JC ⇒ ua_sv, va_sv have been suppressed**

=⇒ Commit changes to revision: 5917

**=⇒ Passes Sette: Yes**

**GYRE restartability passedORCA2LIMPIS restartability passedORCA2OFFPIS restartability passedAMM12 restartability passedORCA2LIM3 restartability passedSAS restartability inconclusive ( solver.stat not found )GYRE reproducibility passedORCA2LIMPIS reproducibility passedORCA2OFFPIS reproducibility passedAMM12 reproducibility passedORCA2LIM3 reproducibility passedORCA2_LIM_OBS reproducibility passedSAS reproducibility inconclusive ( solver.stat not found )ORCA2_LIM_AGRIF runability passedORCA2_LIM_AGRIF code corruption test passed**

Overall changes here:

**Step 5: Remaining things to do:**

- Correct momentum trend computation with time splitting (Gurvan 2016 dvpt)
- Remove filtered free surface from documentation