New URL for NEMO forge!

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.
2014WP/2014_SystemSimplification_v2 – NEMO

Last edited Timestamp?

Actions on System Simplication: towards NEMO 4.0

Motivations :

We need to simplify the code for maintenance, robustness and future evolution of the dynamical core. This means fewer options, and a consensus on the default (and thus well validated) set of numerics. The idea is to change the current most used choices from :

linear filtered free surface zps ocean with TVD, and standard iso-neutral diffusion ; levitating sea-ice with virtual salt fluxes

possibly to :

Non linear (vvl), split-explicit (ts) free surface, mixte zps/s-coordinate ocean with high order advection schemes, iso-neutral diffusion ; embedded multi-category sea-ice (exact fluxes).

And this with a removing of obsolescent features and a cleaning of the code.

Timing: achievement ~2016 (to be on time for the foreseen evolution of the dynamical core).


* core action (supported by all system team)
- subject to discussion
? feasible but all conditions required are not yet met

I. CHANGE in options used by default

* non-linear free surface: by default (WP 2015) ==>> see NOC3 2015 branch

* filtered free surface: remove it as well as all its associated solvers (WP 2015)

pre-requirement, AGRIF with time-splitting ( done in 2013) and deeply tested ( WP 2014 ), DONE (v3.6 stable)

* vertical coordinate : default option mixte zps/s-tilde coordinate (thus with variable volume level), with mixte zps*/s*, mixte z/s, zps, z and s coordinate system as sub-option (same code used) (2014-2015 ?)

!- tracer solved as thickness weighted tracer: D t (e 3t T) or possibly D t (e 1t e 2t e 3t T) ( WP 2015 ) ==>> see NOC3 2015 branch

!- thickness weighted quantities in the outputs ( WP2014 ) DONE (v3.6 stable)

!- no more substitute (domzgr_substitute.h90): all e3 always defined at before, now and after time steps (WP 2015) ==>> see NOC3 2015 branch

!- adapt OFFLINE for tracer to variable volume (WP 2015)

!- For OFFLINE, compute the grid in the same way than in ONLINE.

* linear ssh option set without optimization (i.e. starting from the non-linear case with minimal changes, not optimal changes). (2015) ==>> see NOC3 2015 branch

* sea-ice : embedded sea-ice as default

!- suppress levitating sea ice with virtual salt fluxes. (2015 or 2016 ?)

!- Suppress levitating sea ice with mass exchange (?) CICE issue…

!- need the management of grounded-ice & land-fast ice ( WP 2016 )

!- need BDY compatibility with embedded sea-ice …. (who when?)

* tracer advection scheme: ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

!- remove ORCA hard coded part !- remove unused schemes : traadv_muscl2.F90 !- introduce a much clean interface and better names (_muscl ==> _mus ; TVD ==> FCT ; _cen2 ==> _cen ; ...)

* vertical physics: simplification versus diversity

!- keep only one (GLS) ? or maintain some diversity? ==>> keep both TKE and GLS

!- KPP remove unless if-less KPP is implemented (Lemarié et al 2012). Keeping a validated KPP scheme in the system make sense for comparison purposes. ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

!- suppress or keep the explicit vertical diffusion? needed for numerical tests, we keep explicit option, but implicit is the default choice.

!- introduce a manager of vertical physics called by step.F90 with the following features: ==>> see 2015/dev_r5721_CNRS9_NOC3_ZDF
(1) minimization of lvc_lnk communication (remove ~10 lvc_lnk call) ; (2) remove avmu, and avmv ; (3) remove all key_zdf... CPP keys (replaced by namelist logicals) ; (4) remove zdfddm_subsitute.h90 : ave is always defined) ; (5) introduce a separate computation of the shear production term (shared by TKE and GLS)



* remove LIM2 : only LIM3 remains in the system ( WP 2016 )

* remove OBC : only BDY remains in the system ==>> DONE in v3.6 stable

* remove OASIS 3 and 4 : OASIS-MCT instead ==>> DONE in v3.6 stable

- duplicate isoneutral operator : keep only the triad operator (Griffies' one) ? Tests needed before decision. Those tests should be planed in 2016 (NOCS+LOCEAN) ????

smaller ones

* remove acceleration of convergence (notably rdttra=F(k) ==> unique rdt)

* remove Neptune effect : ORCA1 runs shows its inefficiency. ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

* remove no-slip accurate option (key_noslip_accurate). Module divcur.F90 ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

* suppress cross-land advection : this option is hard coded for ORCA_R2_L31 and is nomore used. ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

* suppress key_traldf_ano and the associated possibility of computing lateral diffusion on tracer using only the departure from a given profile. (==>> done in branch 2014/dev_CNRS0_NOC1_LDF​

- Smagorinsky : to be removed. ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

- Non-penetrative convection : with its correction and improvement using alpha & beta (work done by L. Brodeau, Stockholm), it seems now better to keep it in the system. ==>> DONE in v3.6 stable

- runoffs : only introduced as lateral flow: remove the option of runoff as surface boundary condition as well as specific treatment in vicinity of river mouths.

- passive tracers : use trasbc routines for passive tracers to add the river inputs of nutrients


* remove Dimg format (agreement obtained from the DRAKKAR group) (2015) ==>> Italian branch

? remove IOIPSL : 2 issues, still use in some places, and XIOs portability… ( probably much too early to decide that )

* use of XIOS logical to control the computation of diagnostics (2014-2015), already done but only for LIM3, see dev_r4028_CNRS_LIM3_MV2014 )
generalize its use throughout the code !

IV. CODE cleaning

* LDF: remove 1D and 2D cases, keep only 3D ; laplacian and bilaplacian coefficients defined at the same points (T and F) ; time varying coefficients (function of growth rate of baroclinic instabilities, of the local velocity...): better integration rather than configuration dependent cases. This is also associated with the re-writing of bilaplacian operator on tracer and on dynamics as re-entrant laplacian operator. As a results, curl and div are no more required in the restart file. DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

* OBS operator : clean the stand-alone implementation ( WP 2015 )

* dynamical allocation: return back to standard allocation (?) (no more CALL wrk_alloc and CALL wrk_dealloc) Evaluation to decided what to do ( WP 2014 )

* no more potential density (zdfnpc and MLD computed from alpha & beta) ==>>> ?????

* remove the use of ua,va, ta and sa as workspace in tra.. & dyn... modules DONE in 2015/dev_r5721_CNRS9_NOC3_LDF

* remove all hard coded specific alterations associated with configurations (ORCA,…) while introducing associated input files (2014-2015 ?)
- strait width reduction in domhgr : ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF
- cross-land advection (ORCA2 only) removed ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF
- etc...

* same for the definition of coordinate system (s, mixed z-s): only a simple case hard coded. For more sophisticated cases, the required information should be read in an input file. (2015 ?)

* suppress most of the CPP keys, if not all of them (2015-2016):

  • LDF simplification ==>> the 9 related keys have been suppressed ( key_ldfslp ; ley_ldftra_eiv ; key_traldf_ano ; key_traldf_c1d , key_traldf_c2d , key_traldf_c3d ; key_dynldf_c1d , dynldf_c2d , dynldf_c3d ) ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF
  • remove the key_esopa option that allow to compile and test all code option that are controlled by a cpp key. ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF
  • remove key_vectopt_loop from all the code except in vectopt_loop_substitute.h90 (it is an obsolescent feature only adapted to vector computers) ==>> DONE in 2015/dev_r5721_CNRS9_NOC3_LDF
  • Keys that should remains: key_agrif ; key_top ; key_offline ; key_mpp_mpi ; key_lim ; ...

New ideas to be discussed :

  • remove key_mpp_rep : this option should become the default case ! Global sum without this option should be removed.
  • remove lib_print.F90 and all associated CALL. Easy to do. Involved modules: instate.F90 ; dtauvd.F90 ; domzgr.F90 ; dommsk.F90 and sbcflx.F90.
  • remove lib_cray.F90 : only contains wheneq routine used in diawri.F90 and trevor.F90. Easy to do.
  • diafwb.F90 : remove this diagnostics ? To be discussed.
Last modified 7 years ago Last modified on 2015-10-26T08:32:11+01:00