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.
ticket/1692_SIMPLIF_2 – NEMO

Version 7 (modified by flavoni, 8 years ago) (diff)


Last edited Timestamp?

Author : Simona Flavoni

ticket : #1692

Branch : 2016/dev_r6409_SIMPLIF_2_usrdef

WP2016 Action : SIMPLIF-2


look at this old page (2014) : to see what is STILL missing (for example diafwb, closea, etc..)

Notes of development of simplification-2 strategy

Modification from revision 6593 to next one (revision 6595)

These changes doesn’t change de GYRE results (in both ln_read_cfg = T and F)

domwri.F90 and par_oce.F90
Add jpkglo in par_oce
Add jpiglo, jpjglo and jpkglo in mesh_mask file

domhgr.F90, usrdef.F90, and nemogcm.F90
create usr_def_nam to read the namusr_def which allows to specify the global domain sizes (jpiglo,jpjglo,jpkglo)
change nn_bench into ln_bench read in namusr_def. ln_bench is now a variable known only by usrdef.F90 module. Remove nbench and nn_bench everywhere else (namelist_ref, nemogcm.F90, sbcana, in_out_manager.F90)
nemo_init : add read of jpiglo, jpjglo and jpkglo or their setting in usr_def_nam

, and usrdef.F90
add all hgr arrays in argument of hgr_read and usr_def_hgr
remove kbench and k_cfg from usr_def_hgr arguments (same argueent in
both hgr_read and usr_def_hgr)
domhgr: - remove useless local variable declaration
- add control print for iff and ie1e2u_v cases

and namsbc_ana removed from the code
ln_ana replaced by ln_usr in namsbc
jp_ana replaced by jp_usr in sbcmod.F90
remove sbcana.F90 from the code

remove the use of ln_bench by constraining the use of key_mpp_rep
CAUTION : this changes the results of the reference GYRE which is without
this key ===>>> update the reference run used to compare the results, with
a new run with the key_mpp_rep

Namelist of all configuration + namelist_ref :
- namelist_ref /namsbc : ln_blk_core = .true. ===>>> = .false.
and thus add ln_blk_core = .true. in all ORCA configuration namelist_cfg
Change ln_ana into ln_usr and thus also change all GYRE configuration

Modification from revision 6595 to next one (revision 6596)

These changes doesn’t change de GYRE results (in both ln_read_cfg = T and F)

Revision 6596 includes step.I and II that follow.

Idea : simplification of the namelist resulting from modification in hgr

Step I :
remove from namelist : jphgr_msh ,
ppglam0, ppgphi0
ppe1_deg, ppe2_deg, ppe1_m, ppe2_m

This requires the following changes:

LIM2 and LIM3 needs the Coriolis parameter at T-points
==>> Introduce in dom_oce both Coriolis at T- and F-point : ff_t and ff_f, resp.
This implies changes in all routines of both OPA and LIM_(2/3) that were using
either ff or fcor.
NB: the change of name for Coriolis parameter is quite useful. Indeed, with the
old name (ff) it was impossible to find where coriolis was used as ‘ff’ appears in
too many comments (nearly all modules !)
NB: changes also include a small bug correction in ldftra.F90

Add in hgr_read and usr_def_hgr the read / calculation of ff_t, coriolis at
T-point, and use it in LIM (nomore fcor calculation in limmsh(_2)
==>> modification in dom_oce.F90, domhgr, hgr_read, usr_def_hgr,
limmsh_2.F90 , and limmsh.F90 + others…
including dyncor_c1d.F90

simply remove jphgr_msh from this routine and from the associated namelist

remove jphgr_msh from this routine. A deeper check is needed, since I don’t
think we need a coriolis coarsened (perhaps yes to compute div coeff??)

remove the shorter calculation for jphgr_msh = 2 or 3

remove the definition of a bump of topography in EEL case
This should be implemented using usrdef.F90, therefore no more in the
reference code

run identical with both ln_read_cfg = T and F (with key_mpp_rep !)

Not done : case C1D ==>>>
the interface will have to be completely changed using the new user-defined interface…. (change to be done in domc1d.F90)

Step II :
remove from namelist: jpiglo, jpjglo, jpk,
jpidta, jpjdta, jpkdta
remove from the code jpizoom, jpjzoom

removed from the namelist, not from the code at this stage as :
jp.dta = jp.glo is set in nemo_init
==>> namcfg changed, as well as nemogcm.F90

replace jpizoom by 1 (idem for jpjzoom) everywhere.
==>> a lot of modules involved

, remove zgr_bat_zoom routine and its CALL

remove loom and lzoom_e,w,n,s everywhere

run identical with both ln_read_cfg = T and F (with key_mpp_rep !)

Not done : case C1D ==>>>
the interface will have to be completely changed using the new user-defined interface…. (change to be done in domc1d.F90)

Not done : DOC update… ===>>>
this should be started after the definition of zgr interface

Step III :
create file

Modification from revision 6596 to next one (revision 6624)
====>>>> run identical with both ln_read_cfg = T and F (with key_mpp_rep !)

- create cfg_wri (put in domain.F90) that will be used in old version to create the configuration input file (I name it
This file is created if nn_msh = -1. When ln_read_cfg=T we now read file (no more mesh_mask file)

  • add in this file all the information I think useful for a configuration
    in particular addition of jperio (read in dom_ or set usr_def )
    and also equivalent of ln_zco, lnzps, ln_sco, ln_isfcav
  • add in domzgr.F90 a routine zgr_read to read the information
    ===>>> CAUTION zgr_read has not been tested, and in not called
    - move jperio from par_oce to dom_oce (i.e. same place as nperio)

    - remove domstp.F90 together with atfp1 which is not used anymore
    - move “ocean domain parameters” print from phycst to domain.F90
    - remove jperio and cp_cfz from namelist (namcfg) (NB: cp_cfz remove from the whole code)

    Ideas for future ( NOT strictly linked to SIMPLIF-2) :


change nn_timing in ln_timing ==> it implies to change all :
IF( nn_timing == 1 ) …
IF( ln_timing ) …

remove key_netcdf4 key as this is done in xIOS ??? not sure (see Andrew: => Andrew says we keep it!!)

domvvl.F90 :
- first change the name, sshdom ??? or other thing
- second, separate (z/zps/s)* cases from z-tilde case
- third, revisite z-tilde case in the light of depth being the sum of scale factors
and vise versa ! this will notably change the interpolation of e3w from e3t

jperio :
- change the jperio into nperio_glo, move it from par_ to dom_oce (like nperio)
- define np_ parameters associated with jperio choice :
jperio= 0, closed np_closed
jperio= 1, cyclic east-west np_ew_cyclic or np_EWc
jperio= 2, equatorial symmetric np_eq_symmetric or np_Eqs
jperio= 3, north fold with T-point pivot np_Tnfd
jperio= 4, cyclic east-west and north fold with T-point pivot np_ewc_Tnfd or np_EWc_Tnfd
jperio= 5, north fold with F-point pivot np_Fnfd
jperio= 6, cyclic east-west and north fold with F-point pivot np_ewc_Fnfd or np_EWc_Fnfd

and replace all test of 0 to 6 by the corresponding np_….

(to be done before release): modification of dom_cfg

DOM ZGR analyses


CALL zgr_z ! Reference z-coordinate system (always called)
CALL zgr_bat ! Bathymetry fields (levels and meters)
IF( lk_c1d ) CALL lbc_lnk( bathy , 'T', 1._wp ) ! 1D config.: same bathy value over the 3x3 domain

IF( ln_zco ) CALL zgr_zco ! z-coordinate
IF( ln_zps ) CALL zgr_zps ! Partial step z-coordinate
IF( ln_sco ) CALL zgr_sco ! s-coordinate or hybrid z-s coordinate
! final adjustment of mbathy & check
! -----------------------------------

IF( lzoom ) CALL zgr_bat_zoom ! correct mbathy in case of zoom subdomain
IF( .NOT.lk_c1d ) CALL zgr_bat_ctl ! check bathymetry (mbathy) and suppress isolated ocean points
CALL zgr_bot_level ! deepest ocean level for t-, u- and v-points
CALL zgr_top_level ! shallowest ocean level for T-, U-, V- points


gdept_1d, gdepw_1d
e3t_1d , e3w_1d

>>>> : change nlb10 and nla10 from scalar field => to 2D field for s-coordinates
(if NOT the mixed layer is not really what we think to compute)
idea: is good to open a ticket (so all people can see and fix it)

bathy >>>> = gdepw_1d(jpk) (flat bottom)


zgr_zco >>>> from _1d values
gdept_0 gdepw_0 gde3w_0(:,:,jk)
e3t_0 (:,:,jk) e3u_0 (:,:,jk) e3v_0 (:,:,jk) e3f_0 (:,:,jk)
e3w_0 (:,:,jk) e3uw_0 (:,:,jk) e3vw_0 (:,:,jk)

zgr_zps >>>> Idem zgr_zco
gdept_0 gdepw_0 gde3w_0(:,:,jk)
e3t_0 (:,:,jk) e3u_0 (:,:,jk) e3v_0 (:,:,jk) e3f_0 (:,:,jk)
e3w_0 (:,:,jk) e3uw_0 (:,:,jk) e3vw_0 (:,:,jk)


zgr_sco >>>> Idem zgr_zco
gdept_0 gdepw_0 gde3w_0(:,:,jk)
e3t_0 (:,:,jk) e3u_0 (:,:,jk) e3v_0 (:,:,jk) e3f_0 (:,:,jk)
e3w_0 (:,:,jk) e3uw_0 (:,:,jk) e3vw_0 (:,:,jk)

URGENT: (urgent because dim_cfg changed)
REMOVE gde3w and compte all e3T, e3w, e3uW, e3vw like:
the sum of (delta) gdepT, gdepW, gdepUW, gdepVW

? but: are we sure that we want to remove all these ?
? they can be useful for graphic use?
? or we can output e3t,… optionally

=> simplification associated for dom_cfg because e3 output will be useless.

mbkt, mbku, mbkv >>>> vertical indices of the deeptest ocean level
mbku(ji,jj) = MIN( mbkt(ji+1,jj ) , mbkt(ji,jj) )
mbkv(ji,jj) = MIN( mbkt(ji ,jj+1) , mbkt(ji,jj) )

mikt, miku, mikv >>>> vertical indices of the shallowest ocean level