From 6e67c02e8e923f9d8ca6c2541baae56180603fea Mon Sep 17 00:00:00 2001
From: Christian Ethe <christian.ethe@ipsl.fr>
Date: Tue, 14 Mar 2023 15:40:10 +0000
Subject: [PATCH] Resolve "Simplified version of PISCES"

---
 cfgs/GYRE_PISCES/EXPREF/file_def_nemo.xml     |  52 +-
 cfgs/GYRE_PISCES/EXPREF/namelist_pisces_cfg   |  76 +--
 cfgs/GYRE_PISCES/EXPREF/namelist_top_cfg      |  52 +-
 .../EXPREF/namelist_pisces_cfg                |  35 +-
 .../EXPREF/namelist_pisces_cfg                |  35 +-
 .../EXPREF/namelist_top_cfg_p2z               | 118 +++++
 .../EXPREF/namelist_top_cfg_p5z               | 169 +++++++
 cfgs/SHARED/field_def_nemo-pisces.xml         |  32 +-
 cfgs/SHARED/namelist_pisces_ref               | 246 ++++-----
 src/TOP/PISCES/P2Z/p2zbio.F90                 | 474 ------------------
 src/TOP/PISCES/P2Z/p2zexp.F90                 | 239 ---------
 src/TOP/PISCES/P2Z/p2zopt.F90                 | 195 -------
 src/TOP/PISCES/P2Z/p2zsed.F90                 | 157 ------
 src/TOP/PISCES/P2Z/p2zsms.F90                 |  71 ---
 src/TOP/PISCES/P4Z/p2zlim.F90                 | 257 ++++++++++
 src/TOP/PISCES/P4Z/p2zmicro.F90               | 306 +++++++++++
 src/TOP/PISCES/P4Z/p2zmort.F90                | 140 ++++++
 src/TOP/PISCES/P4Z/p2zprod.F90                | 320 ++++++++++++
 src/TOP/PISCES/P4Z/p4zagg.F90                 |  19 +-
 src/TOP/PISCES/P4Z/p4zbc.F90                  |  64 +--
 src/TOP/PISCES/P4Z/p4zbio.F90                 |  27 +-
 src/TOP/PISCES/P4Z/p4zche.F90                 |  50 +-
 src/TOP/PISCES/P4Z/p4zfechem.F90              |  80 +--
 src/TOP/PISCES/P4Z/p4zint.F90                 |  39 +-
 src/TOP/PISCES/P4Z/p4zlim.F90                 |  42 +-
 src/TOP/PISCES/P4Z/p4zlys.F90                 | 178 ++++++-
 src/TOP/PISCES/P4Z/p4zmeso.F90                |  86 ++--
 src/TOP/PISCES/P4Z/p4zmicro.F90               |  57 ++-
 src/TOP/PISCES/P4Z/p4zmort.F90                |   1 +
 src/TOP/PISCES/P4Z/p4zopt.F90                 |  86 ++--
 src/TOP/PISCES/P4Z/p4zpoc.F90                 | 428 ++++++++--------
 src/TOP/PISCES/P4Z/p4zprod.F90                | 116 ++---
 src/TOP/PISCES/P4Z/p4zrem.F90                 | 164 +++++-
 src/TOP/PISCES/P4Z/p4zsed.F90                 | 170 ++++---
 src/TOP/PISCES/P4Z/p4zsink.F90                | 117 +++--
 src/TOP/PISCES/P4Z/p4zsms.F90                 | 370 ++++++++------
 src/TOP/PISCES/P4Z/p5zlim.F90                 | 117 ++---
 src/TOP/PISCES/P4Z/p5zmeso.F90                |  74 +--
 src/TOP/PISCES/P4Z/p5zmicro.F90               |  56 ++-
 src/TOP/PISCES/P4Z/p5zmort.F90                |  45 +-
 src/TOP/PISCES/P4Z/p5zprod.F90                | 396 ++++++++-------
 src/TOP/PISCES/SED/sedadv.F90                 |   4 +-
 src/TOP/PISCES/sms_pisces.F90                 |  76 +--
 src/TOP/PISCES/trcice_pisces.F90              |  13 +-
 src/TOP/PISCES/trcini_pisces.F90              | 163 +++---
 src/TOP/PISCES/trcnam_pisces.F90              |   6 +-
 src/TOP/PISCES/trcsms_pisces.F90              |   6 +-
 src/TOP/PISCES/trcwri_pisces.F90              |  71 ++-
 tests/BENCH/EXPREF/namelist_pisces_cfg        |  32 --
 tests/CPL_OASIS/EXPREF/namelist_pisces_cfg    |  32 --
 tests/DIA_GPU/EXPREF/namelist_pisces_cfg      |  32 --
 51 files changed, 3280 insertions(+), 2911 deletions(-)
 create mode 100644 cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p2z
 create mode 100644 cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p5z
 delete mode 100644 src/TOP/PISCES/P2Z/p2zbio.F90
 delete mode 100644 src/TOP/PISCES/P2Z/p2zexp.F90
 delete mode 100644 src/TOP/PISCES/P2Z/p2zopt.F90
 delete mode 100644 src/TOP/PISCES/P2Z/p2zsed.F90
 delete mode 100644 src/TOP/PISCES/P2Z/p2zsms.F90
 create mode 100644 src/TOP/PISCES/P4Z/p2zlim.F90
 create mode 100644 src/TOP/PISCES/P4Z/p2zmicro.F90
 create mode 100644 src/TOP/PISCES/P4Z/p2zmort.F90
 create mode 100644 src/TOP/PISCES/P4Z/p2zprod.F90

diff --git a/cfgs/GYRE_PISCES/EXPREF/file_def_nemo.xml b/cfgs/GYRE_PISCES/EXPREF/file_def_nemo.xml
index 57144055..d78a5f79 100644
--- a/cfgs/GYRE_PISCES/EXPREF/file_def_nemo.xml
+++ b/cfgs/GYRE_PISCES/EXPREF/file_def_nemo.xml
@@ -50,12 +50,16 @@
         </file>
 
 	<file id="file5" name_suffix="_ptrc_T" description="lobster sms variables" >
-          <field field_ref="DET"      />
-          <field field_ref="ZOO"      />
+	  <field field_ref="DIC"      />
+          <field field_ref="Alkalini" />
+          <field field_ref="O2"       />
+          <field field_ref="POC"      />
           <field field_ref="PHY"      />
+          <field field_ref="ZOO"      />
+          <field field_ref="DOC"      />
+          <field field_ref="THETANANO"/>
           <field field_ref="NO3"      />
-          <field field_ref="NH4"      />
-          <field field_ref="DOM"      />
+          <field field_ref="Fer"      />
 	</file>
 	
       </file_group>
@@ -69,27 +73,25 @@
       <file_group id="1y"  output_freq="1y" output_level="10" enabled=".TRUE."> <!-- real yearly files -->
 
 	<file id="file6" name_suffix="_diad_T" description="additional lobster diagnostics" >  
-          <field field_ref="FNO3PHY"   /> 
-          <field field_ref="FNH4PHY"   /> 
-          <field field_ref="FNH4NO3"   /> 
-          <field field_ref="TNO3PHY"   /> 
-          <field field_ref="TNH4PHY"   /> 
-          <field field_ref="TPHYDOM"   /> 
-          <field field_ref="TPHYNH4"   /> 
-          <field field_ref="TPHYZOO"   /> 
-          <field field_ref="TPHYDET"   /> 
-          <field field_ref="TDETZOO"   /> 
-          <field field_ref="TDETSED"   /> 
-          <field field_ref="TZOODET"   /> 
-          <field field_ref="TZOOBOD"   /> 
-          <field field_ref="TZOONH4"   /> 
-          <field field_ref="TZOODOM"   /> 
-          <field field_ref="TNH4NO3"   /> 
-          <field field_ref="TDOMNH4"   /> 
-          <field field_ref="TDETNH4"   /> 
-          <field field_ref="TPHYTOT"   /> 
-          <field field_ref="TZOOTOT"   /> 
-          <field field_ref="SEDPOC"    /> 
+	  <field field_ref="PH"       />
+          <field field_ref="CO3"      />
+          <field field_ref="CO3sat"   />
+          <field field_ref="PAR"      />
+          <field field_ref="PPPHYN"    />
+          <field field_ref="xfracal"  />
+          <field field_ref="GRAZ1"    />
+          <field field_ref="EPC100"   />
+          <field field_ref="Cflx"     />
+          <field field_ref="Oflx"     />
+          <field field_ref="Kg"       />
+          <field field_ref="Dpco2"    />
+          <field field_ref="Dpo2"     />
+          <field field_ref="Heup"     />
+          <field field_ref="Nfix"     />
+          <field field_ref="MuN"      />
+          <field field_ref="LNnut"    />
+          <field field_ref="LNlight"  />
+	  <field field_ref="Sdenit"   />
 	</file>
 
       </file_group>
diff --git a/cfgs/GYRE_PISCES/EXPREF/namelist_pisces_cfg b/cfgs/GYRE_PISCES/EXPREF/namelist_pisces_cfg
index fcd95392..ab1538f1 100644
--- a/cfgs/GYRE_PISCES/EXPREF/namelist_pisces_cfg
+++ b/cfgs/GYRE_PISCES/EXPREF/namelist_pisces_cfg
@@ -1,20 +1,9 @@
-!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced)
-!!              1  - air-sea exchange                         (nampisext)
-!!              2  - biological parameters                    (nampisbio)
-!!              3  - parameters for nutrient limitations      (nampislim)    
-!!              4  - parameters for phytoplankton             (nampisprod,nampismort)
-!!              5  - parameters for zooplankton               (nampismes,nampiszoo)
-!!              6  - parameters for remineralization          (nampisrem)
-!!              7  - parameters for calcite chemistry         (nampiscal)
-!!              8  - parameters for inputs deposition         (nampissed)
-!!              11 - Damping                                  (nampisdmp)
-!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 !-----------------------------------------------------------------------
 &nampismod     !  Model used 
 !-----------------------------------------------------------------------
-    ln_p4z = .false.
-    ln_p2z = .true.
+  ln_p2z    = .true.        !  PISCES SIMPLIFIED model used
+  ln_p4z    = .false.       !  PISCES model used
+  ln_p5z    = .false.       !  PISCES QUOTA model used
 /
 !-----------------------------------------------------------------------
 &nampisext     !   air-sea exchange
@@ -29,11 +18,11 @@
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&namp4zice     !   parameters for nutrient limitations for PISCES std  - ln_p4z
+&namp4zlim     !   parameters for nutrient limitations for PISCES std  - ln_p4z
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&namp5zice     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z
+&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
@@ -87,71 +76,30 @@
 !-----------------------------------------------------------------------
 &nampispoc     !   parameters for organic particles
 !-----------------------------------------------------------------------
+   jcpoc     =  5        ! Number of lability classes
 /
 !-----------------------------------------------------------------------
 &nampiscal     !   parameters for Calcite chemistry
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&nampissbc     !   parameters for inputs deposition
+&nampisbc      !   parameters for inputs deposition
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&nampislig     !   Namelist parameters for ligands, nampislig
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&nampisice     !   Prescribed sea ice tracers
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&nampisdmp     !   Damping 
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&nampismass    !   Mass conservation
-!-----------------------------------------------------------------------
-/
-!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!! PISCES reduced (key_pisces_reduced, ex LOBSTER) : namelists
-!!              1  - biological parameters for phytoplankton    (namlobphy)
-!!              2  - biological parameters for nutrients        (namlobnut)
-!!              3  - biological parameters for zooplankton      (namlobzoo)    
-!!              4  - biological parameters for detritus         (namlobdet)
-!!              5  - biological parameters for DOM              (namlobdom)
-!!              6  - parameters from aphotic layers to sediment (namlobsed)
-!!              7  - general coefficients                       (namlobrat)
-!!              8  - optical parameters                         (namlobopt)
-!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
+&nampissed     !   parameters for sediments mobilization
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
+&nampislig     !   Namelist parameters for ligands, nampislig
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
+&nampisice     !   Prescribed sea ice tracers
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
+&nampisdmp     !   Damping 
 !-----------------------------------------------------------------------
+   nn_pisdmp    =  4320       !  Frequency of Relaxation
 /
diff --git a/cfgs/GYRE_PISCES/EXPREF/namelist_top_cfg b/cfgs/GYRE_PISCES/EXPREF/namelist_top_cfg
index ac338b5a..8edacc35 100644
--- a/cfgs/GYRE_PISCES/EXPREF/namelist_top_cfg
+++ b/cfgs/GYRE_PISCES/EXPREF/namelist_top_cfg
@@ -1,29 +1,36 @@
 !!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!! NEMO/TOP :   Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref
+!! NEMO/TOP1 :  Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref
 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 !-----------------------------------------------------------------------
 &namtrc_run      !   run information
 !-----------------------------------------------------------------------
+   ln_top_euler  = .true.
 /
 !-----------------------------------------------------------------------
 &namtrc          !   tracers definition
 !-----------------------------------------------------------------------
-   jp_bgc        =  6
-   !
+   jp_bgc        =  9 
+!
    ln_pisces     =  .true.
+   ln_my_trc     =  .false.
    ln_age        =  .false.
    ln_cfc11      =  .false.
    ln_cfc12      =  .false.
    ln_c14        =  .false.
-   ln_my_trc     =  .false.
-   !_____________!__________!________________________________!______________!________________!
-   !             !   name   !           title of the field   !   units      ! init from file ! 
-   sn_tracer(1)   = 'DET'   , 'Detritus                   '  , 'mmole-N/m3' ,  .false.    
-   sn_tracer(2)   = 'ZOO'   , 'Zooplankton concentration  '  , 'mmole-N/m3' ,  .false.   
-   sn_tracer(3)   = 'PHY'   , 'Phytoplankton concentration'  , 'mmole-N/m3' ,  .false.  
-   sn_tracer(4)   = 'NO3'   , 'Nitrate concentration      '  , 'mmole-N/m3' ,  .false. 
-   sn_tracer(5)   = 'NH4'   , 'Ammonium concentration     '  , 'mmole-N/m3' ,  .false.   
-   sn_tracer(6)   = 'DOM'   , 'Dissolved organic matter   '  , 'mmole-N/m3' ,  .false.  
+!
+   ln_trcdta     =  .false.  !  Initialisation from data input file (T) or not (F)
+   ln_trcbc      =  .false.  !  Enables Boundary conditions
+!                !           !                                           !             !         !
+!                !    name   !           title of the field              !   units     ! init    ! sbc    ! cbc    !  obc    !  ais
+   sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' , .true.  , .false., .false., .false. , .false.
+   sn_tracer(4)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(5)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(6)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(7)   = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(8)   = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .false.
+   sn_tracer(9)   = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .true.
 /
 !-----------------------------------------------------------------------
 &namage          !   AGE 
@@ -32,13 +39,15 @@
 !-----------------------------------------------------------------------
 &namtrc_dta      !    Initialisation from data input file
 !-----------------------------------------------------------------------
+!          !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!          !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
 /
 !-----------------------------------------------------------------------
 &namtrc_adv      !   advection scheme for passive tracer                (default: NO selection)
 !-----------------------------------------------------------------------
-   ln_trcadv_fct =  .true.   !  FCT scheme
-      nn_fct_h   =  2               !  =2/4, horizontal 2nd / 4th order
-      nn_fct_v   =  2               !  =2/4, vertical   2nd / COMPACT 4th order
+   ln_trcadv_fct =  .true.  !  FCT scheme
+      nn_fct_h   =  2               !  =2/4, horizontal 2nd / 4th order 
+      nn_fct_v   =  2               !  =2/4, vertical   2nd / COMPACT 4th order 
 /
 !-----------------------------------------------------------------------
 &namtrc_ldf      !   lateral diffusion scheme for passive tracer        (default: NO selection)
@@ -48,10 +57,13 @@
 !-----------------------------------------------------------------------
 &namtrc_rad      !  treatment of negative concentrations 
 !-----------------------------------------------------------------------
-   ln_trcrad   =  .false.  !  artificially correct negative concentrations (T) or not (F)
 /
 !-----------------------------------------------------------------------
-&namtrc_dmp      !   passive tracer newtonian damping                   (ln_trcdmp=T)
+&namtrc_snk      !  sedimentation of particles
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_dmp      !   passive tracer newtonian damping   
 !-----------------------------------------------------------------------
 /
 !-----------------------------------------------------------------------
@@ -65,8 +77,14 @@
 !----------------------------------------------------------------------
 &namtrc_bc       !   data for boundary conditions
 !-----------------------------------------------------------------------
+!                !  file name        ! frequency (hours) ! variable      ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!                !                   !  (if <0  months)  !   name        !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
 /
 !----------------------------------------------------------------------
 &namtrc_bdy      !   Setup of tracer boundary conditions
 !-----------------------------------------------------------------------
 /
+!-----------------------------------------------------------------------
+&namtrc_ais      !  Representation of Antarctic Ice Sheet tracers supply
+!-----------------------------------------------------------------------
+/
diff --git a/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_pisces_cfg b/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_pisces_cfg
index f67b07c4..fc9c8ab4 100644
--- a/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_pisces_cfg
+++ b/cfgs/ORCA2_ICE_PISCES/EXPREF/namelist_pisces_cfg
@@ -1,6 +1,9 @@
 !-----------------------------------------------------------------------
 &nampismod     !  Model used 
 !-----------------------------------------------------------------------
+  ln_p2z    = .false.      !  PISCES SIMPLIFIED model used
+  ln_p4z    = .true.       !  PISCES model used
+  ln_p5z    = .false.      !  PISCES QUOTA model used
 /
 !-----------------------------------------------------------------------
 &nampisext     !   air-sea exchange
@@ -107,35 +110,3 @@
 &nampismass    !   Mass conservation
 !-----------------------------------------------------------------------
 /
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-/
diff --git a/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_pisces_cfg b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_pisces_cfg
index c888c786..439aa4cc 100644
--- a/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_pisces_cfg
+++ b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_pisces_cfg
@@ -1,6 +1,9 @@
 !-----------------------------------------------------------------------
 &nampismod     !  Model used 
 !-----------------------------------------------------------------------
+  ln_p2z    = .false.      !  PISCES SIMPLIFIED model used
+  ln_p4z    = .true.       !  PISCES model used
+  ln_p5z    = .false.      !  PISCES QUOTA model used
 /
 !-----------------------------------------------------------------------
 &nampisext     !   air-sea exchange
@@ -108,35 +111,3 @@
 &nampismass    !   Mass conservation
 !-----------------------------------------------------------------------
 /
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-/
diff --git a/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p2z b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p2z
new file mode 100644
index 00000000..e11a6d2f
--- /dev/null
+++ b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p2z
@@ -0,0 +1,118 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO/TOP1 :  Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref
+!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!-----------------------------------------------------------------------
+&namtrc_run      !   run information
+!-----------------------------------------------------------------------
+   ln_top_euler  = .true.
+/
+!-----------------------------------------------------------------------
+&namtrc          !   tracers definition
+!-----------------------------------------------------------------------
+   jp_bgc        =  9
+!
+   ln_pisces     =  .true.
+   ln_my_trc     =  .false.
+   ln_age        =  .false.
+   ln_cfc11      =  .false.
+   ln_cfc12      =  .false.
+   ln_c14        =  .false.
+!
+   ln_trcdta     =  .true.  !  Initialisation from data input file (T) or not (F)
+   ln_trcbc      =  .true.  !  Enables Boundary conditions
+!                !           !                                           !             !         !
+!                !    name   !           title of the field              !   units     ! init    ! sbc    ! cbc    !  obc    !  ais
+   sn_tracer(1)  = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(2)  = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(3)  = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' , .true.  , .false., .false., .false. , .false.
+   sn_tracer(4)  = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(5)  = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(6)  = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(7)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(8)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .false.
+   sn_tracer(9)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .true.
+/
+!-----------------------------------------------------------------------
+&namage          !   AGE 
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_dta      !    Initialisation from data input file
+!-----------------------------------------------------------------------
+!          !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!          !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
+   sn_trcdta(1)  = 'data_DIC_nomask.nc',        -12        ,  'PiDIC'  ,    .false.   , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(2)  = 'data_ALK_nomask.nc',        -12        ,  'TALK'   ,    .false.   , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(3)  = 'data_OXY_nomask.nc',        -1         ,  'O2'     ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(7)  = 'data_DOC_nomask.nc',        -1         ,  'DOC'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(8)  = 'data_FER_nomask.nc',        -1         ,  'Fer'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(9)  = 'data_NO3_nomask.nc',        -1         ,  'NO3'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   rn_trfac(1)   =   1.028e-06   !  multiplicative factor
+   rn_trfac(2)   =   1.028e-06   !  -      -      -     -
+   rn_trfac(3)   =  44.6e-06     !  -      -      -     -
+   rn_trfac(7)   =   1.0e-06     !  -      -      -     -
+   rn_trfac(8)  =   7.3125e-06  !  -      -      -     -
+   rn_trfac(9)  =   1.0e-06     !  -      -      -     -
+/
+!-----------------------------------------------------------------------
+&namtrc_adv      !   advection scheme for passive tracer                (default: NO selection)
+!-----------------------------------------------------------------------
+   ln_trcadv_mus =  .true.   !  MUSCL scheme
+      ln_mus_ups =  .false.         !  use upstream scheme near river mouths
+/
+!-----------------------------------------------------------------------
+&namtrc_ldf      !   lateral diffusion scheme for passive tracer        (default: NO selection)
+!-----------------------------------------------------------------------
+   ln_trcldf_tra   =  .true.     !  use active tracer setting
+/
+!-----------------------------------------------------------------------
+&namtrc_rad      !  treatment of negative concentrations 
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_snk      !  sedimentation of particles
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_dmp      !   passive tracer newtonian damping   
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_ice      !    Representation of sea ice growth & melt effects
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_trd      !   diagnostics on tracer trends                       ('key_trdtrc')
+!----------------------------------------------------------------------
+/
+!----------------------------------------------------------------------
+&namtrc_bc       !   data for boundary conditions
+!-----------------------------------------------------------------------
+!                !  file name        ! frequency (hours) ! variable      ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!                !                   !  (if <0  months)  !   name        !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
+   sn_trcsbc(8)  = 'ndeposition.orca',      -12          , 'ndep'        ,  .false.     , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trcsbc(9)  = 'dust.orca.new'   ,       -1          , 'dustfer'     ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   rn_trsfac(8)  = 5.2232143e-01    !  ( From kgN m-2 s-1 to molC l-1 ====> zfact = 7.3125/14 )
+   rn_trsfac(9)  = 6.2667860e-04    !  (  0.035 / 55.85 )
+   rn_sbc_time   = 1.               !  Time scaling factor for SBC and CBC data (seconds in a day)
+   !
+   sn_trccbc(1)  = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(2)  = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(7)  = 'river.orca'      ,    120            , 'riverdoc'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(8)  = 'river.orca'      ,    120            , 'riverdin'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(9)  = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   rn_trcfac(1)  = 8.333333e+01      !  ( data in Mg/m2/yr : 1e3/12/ryyss)
+   rn_trcfac(2)  = 8.333333e+01      !  ( 1e3 /12 )
+   rn_trcfac(7)  = 8.333333e+01   !  ( 1e3 / 12
+   rn_trcfac(8)  = 5.223214e+02   !  (  1e3 / 14 * 7.3125 )
+   rn_trcfac(9)  = 4.166667e-03   !  ( 1e3 / 12 * 5e-5 )
+   rn_cbc_time   = 3.1536e+7      !  Time scaling factor for CBC data (seconds in a year)
+/
+!----------------------------------------------------------------------
+&namtrc_bdy      !   Setup of tracer boundary conditions
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_ais      !  Representation of Antarctic Ice Sheet tracers supply
+!-----------------------------------------------------------------------
+/
diff --git a/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p5z b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p5z
new file mode 100644
index 00000000..848e98cf
--- /dev/null
+++ b/cfgs/ORCA2_OFF_PISCES/EXPREF/namelist_top_cfg_p5z
@@ -0,0 +1,169 @@
+!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!! NEMO/TOP1 :  Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref
+!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+!-----------------------------------------------------------------------
+&namtrc_run      !   run information
+!-----------------------------------------------------------------------
+   ln_top_euler  = .true.
+/
+!-----------------------------------------------------------------------
+&namtrc          !   tracers definition
+!-----------------------------------------------------------------------
+   jp_bgc        =  40
+!
+   ln_pisces     =  .true.
+   ln_my_trc     =  .false.
+   ln_age        =  .false.
+   ln_cfc11      =  .false.
+   ln_cfc12      =  .false.
+   ln_c14        =  .false.
+!
+   ln_trcdta     =  .true.  !  Initialisation from data input file (T) or not (F)
+   ln_trcbc      =  .true.  !  Enables Boundary conditions
+!                !           !                                           !             !         !
+!                !    name   !           title of the field              !   units     ! init    ! sbc    ! cbc    !  obc    !  ais
+   sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' , .true.  , .false., .false., .false. , .false.
+   sn_tracer(4)   = 'CaCO3   ' , 'Calcite Concentration                  ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(5)   = 'PO4     ' , 'Phosphate Concentration                ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .false.
+   sn_tracer(6)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(7)   = 'Si      ' , 'Silicate Concentration                 ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .false.
+   sn_tracer(8)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(9)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(10)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(11)  = 'PHY2    ' , 'Diatoms Concentration                  ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(12)  = 'ZOO2    ' , 'Mesozooplankton Concentration          ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(13)  = 'DSi     ' , 'Diatoms Silicate Concentration         ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(14)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .true.
+   sn_tracer(15)  = 'BFe     ' , 'Big iron particles Concentration       ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(16)  = 'GOC     ' , 'Big organic carbon Concentration       ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(17)  = 'SFe     ' , 'Small iron particles Concentration     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(18)  = 'DFe     ' , 'Diatoms iron  Concentration            ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(19)  = 'GSi     ' , 'Sinking biogenic Silicate Concentration',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(20)  = 'NFe     ' , 'Nano iron Concentration                ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(21)  = 'NCHL    ' , 'Nano chlorophyl Concentration          ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(22)  = 'DCHL    ' , 'Diatoms chlorophyl Concentration       ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(23)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' , .true.  , .true. , .true. , .false. , .false.
+   sn_tracer(24)  = 'NH4     ' , 'Ammonium Concentration                 ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(25)  = 'DON     ' , 'Dissolved Organic N Concentration      ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(26)  = 'DOP     ' , 'Dissolved organic P Concentration      ',  'mol-C/L' , .true.  , .false., .true. , .false. , .false.
+   sn_tracer(27)  = 'PON     ' , 'Small PON Concentration                ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(28)  = 'POP     ' , 'Small POP Concentration                ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(29)  = 'PHYN    ' , 'PHYN Concentration                     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(30)  = 'PHYP    ' , 'PHYP Concentration                     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(31)  = 'DIAN    ' , 'DIAN Concentration                     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(32)  = 'DIAP    ' , 'DIAP Concentration                     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(33)  = 'PIC     ' , 'PICO Concentration                     ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(34)  = 'PICN    ' , 'PICO N Concentration                   ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(35)  = 'PICP    ' , 'PICO P Concentration                   ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(36)  = 'PFe     ' , 'PICO Fe Concentration                  ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(37)  = 'PCHL    ' , 'PICO Chl Concentration                 ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(38)  = 'GON     ' , 'Big PON Concentration                  ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(39)  = 'GOP     ' , 'Big POP Concentration                  ',  'mol-C/L' , .false. , .false., .false., .false. , .false.
+   sn_tracer(40)  = 'LGW     ' , 'Weak ligands Concentration             ',  'mol-C/L' , .false. , .false., .false., .false. , .false
+/
+!-----------------------------------------------------------------------
+&namage          !   AGE 
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_dta      !    Initialisation from data input file
+!-----------------------------------------------------------------------
+!          !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!          !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
+   sn_trcdta(1)  = 'data_DIC_nomask.nc',        -12        ,  'PiDIC'  ,    .false.   , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(2)  = 'data_ALK_nomask.nc',        -12        ,  'TALK'   ,    .false.   , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(3)  = 'data_OXY_nomask.nc',        -1         ,  'O2'     ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(5)  = 'data_PO4_nomask.nc',        -1         ,  'PO4'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(7)  = 'data_SIL_nomask.nc',        -1         ,  'Si'     ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(10) = 'data_DOC_nomask.nc',        -1         ,  'DOC'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(14) = 'data_FER_nomask.nc',        -1         ,  'Fer'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(23) = 'data_NO3_nomask.nc',        -1         ,  'NO3'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(25) = 'data_DOC_nomask.nc',        -1         ,  'DOC'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   sn_trcdta(26) = 'data_DOC_nomask.nc',        -1         ,  'DOC'    ,    .true.    , .true. , 'yearly'  , 'weights_3D_r360x180_bilin.nc'       , ''   , ''
+   rn_trfac(1)   =   1.028e-06   !  multiplicative factor
+   rn_trfac(2)   =   1.028e-06   !  -      -      -     -
+   rn_trfac(3)   =  44.6e-06     !  -      -      -     -
+   rn_trfac(5)   = 117.0e-06     !  -      -      -     -
+   rn_trfac(7)   =   1.0e-06     !  -      -      -     -
+   rn_trfac(10)  =   1.0e-06     !  -      -      -     -
+   rn_trfac(14)  =   1.0e-06     !  -      -      -     -
+   rn_trfac(23)  =   7.3125e-06  !  -      -      -     -
+   rn_trfac(25)  =   1.0e-06     !  -      -      -     -
+   rn_trfac(26)  =   1.0e-06     !  -      -      -     -
+/
+!-----------------------------------------------------------------------
+&namtrc_adv      !   advection scheme for passive tracer                (default: NO selection)
+!-----------------------------------------------------------------------
+   ln_trcadv_mus =  .true.   !  MUSCL scheme
+      ln_mus_ups =  .false.         !  use upstream scheme near river mouths
+/
+!-----------------------------------------------------------------------
+&namtrc_ldf      !   lateral diffusion scheme for passive tracer        (default: NO selection)
+!-----------------------------------------------------------------------
+   ln_trcldf_tra   =  .true.     !  use active tracer setting
+/
+!-----------------------------------------------------------------------
+&namtrc_rad      !  treatment of negative concentrations 
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_snk      !  sedimentation of particles
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_dmp      !   passive tracer newtonian damping   
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_ice      !    Representation of sea ice growth & melt effects
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_trd      !   diagnostics on tracer trends                       ('key_trdtrc')
+!----------------------------------------------------------------------
+/
+!----------------------------------------------------------------------
+&namtrc_bc       !   data for boundary conditions
+!-----------------------------------------------------------------------
+!                !  file name        ! frequency (hours) ! variable      ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask !
+!                !                   !  (if <0  months)  !   name        !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      !
+   sn_trcsbc(5)  = 'dust.orca.new'   ,       -1          , 'dustpo4'     ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trcsbc(7)  = 'dust.orca.new'   ,       -1          , 'dustsi'      ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trcsbc(14) = 'dust.orca.new'   ,       -1          , 'dustfer'     ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trcsbc(23) = 'ndeposition.orca',      -12          , 'ndep'        ,  .false.     , .true. , 'yearly'  , ''       , ''    , ''
+   rn_trsfac(5)  = 3.774194e-02     !  (  1E-3 / 31. * 117 )
+   rn_trsfac(7)  = 9.572954e-03     !  ( 8.8   / 28.1 )
+   rn_trsfac(14) = 6.2667860e-04    !  (  0.035 / 55.85 )
+   rn_trsfac(23) = 5.2232143e-01    !  ( From kgN m-2 s-1 to molC l-1 ====> zfact = 7.3125/14 )
+   rn_sbc_time   = 1.               !  Time scaling factor for SBC and CBC data (seconds in a day)
+   !
+   sn_trccbc(1)  = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(2)  = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(5)  = 'river.orca'      ,    120            , 'riverdip'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(7)  = 'river.orca'      ,    120            , 'riverdsi'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(10) = 'river.orca'      ,    120            , 'riverdoc'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(14) = 'river.orca'      ,    120            , 'riverdic'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(23) = 'river.orca'      ,    120            , 'riverdin'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(25) = 'river.orca'      ,    120            , 'riverdon'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   sn_trccbc(26) = 'river.orca'      ,    120            , 'riverdop'    ,  .true.      , .true. , 'yearly'  , ''       , ''    , ''
+   rn_trcfac(1)  = 8.333333e+01      !  ( data in Mg/m2/yr : 1e3/12/ryyss)
+   rn_trcfac(2)  = 8.333333e+01      !  ( 1e3 /12 )
+   rn_trcfac(5)  = 3.774193e+03   !  ( 1e3 / 31. * 117 )
+   rn_trcfac(7)  = 3.558719e+01   !  ( 1e3 / 28.1 )
+   rn_trcfac(10) = 8.333333e+01   !  ( 1e3 / 12
+   rn_trcfac(14) = 4.166667e-03   !  ( 1e3 / 12 * 5e-5 )
+   rn_trcfac(23) = 5.223214e+02   !  (  1e3 / 14 * 7.3125 )
+   rn_trcfac(25) = 8.333333e+01   !  ( 1e3 / 12 )
+   rn_trcfac(26) = 8.333333e+01   !  ( 1e3 / 12 )
+   rn_cbc_time   = 3.1536e+7      !  Time scaling factor for CBC data (seconds in a year)
+/
+!----------------------------------------------------------------------
+&namtrc_bdy      !   Setup of tracer boundary conditions
+!-----------------------------------------------------------------------
+/
+!-----------------------------------------------------------------------
+&namtrc_ais      !  Representation of Antarctic Ice Sheet tracers supply
+!-----------------------------------------------------------------------
+/
diff --git a/cfgs/SHARED/field_def_nemo-pisces.xml b/cfgs/SHARED/field_def_nemo-pisces.xml
index a2490377..193e986b 100644
--- a/cfgs/SHARED/field_def_nemo-pisces.xml
+++ b/cfgs/SHARED/field_def_nemo-pisces.xml
@@ -105,12 +105,6 @@
     <field id="LGW"         long_name="Weak ligands concentration"                unit="mmol/m3" />
     <field id="LGW_e3t"     long_name="LGW * e3t"                                 unit="mmol/m2"  > LGW * e3t </field >
 
-    <!-- PISCES light : variables available with ln_p2z  -->
-    <field id="DET"         long_name="Detritus"                                 unit="mmol-N/m3" />
-    <field id="DET_e3t"     long_name="DET * e3t"                                unit="mmol-N/m2"  > DET * e3t </field >
-    <field id="DOM"         long_name="Dissolved Organic Matter"                 unit="mmol-N/m3" />
-    <field id="DOM_e3t"     long_name="DOM * e3t"                                unit="mmol-N/m2"  > DOM * e3t </field >
-
   </field_group>
 
   <!-- SEDIMENT variables on T sediment grid  -->
@@ -184,6 +178,9 @@
     <field id="PPNEWN"      long_name="New Primary production of nanophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
     <field id="PPNEWP"      long_name="New Primary production of picophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
     <field id="PPNEWD"      long_name="New Primary production of diatoms"       unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
+    <field id="GPPHYN"      long_name="Gross Primary production of nanophyto"   unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
+    <field id="GPPHYP"      long_name="Gross Primary production of picophyto"   unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
+    <field id="GPPHYD"      long_name="Gross Primary production of diatoms"     unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
     <field id="PBSi"        long_name="Primary production of Si diatoms"        unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
     <field id="PFeN"        long_name="Primary production of nano iron"         unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
     <field id="PFeP"        long_name="Primary production of pico iron"         unit="molC/m3/s"  grid_ref="grid_T_3D_inner" />
@@ -216,6 +213,7 @@
     <field id="SIZEN"       long_name="Mean relative size of nanophyto."        unit="-"          grid_ref="grid_T_3D_inner" />
     <field id="SIZEP"       long_name="Mean relative size of picophyto."        unit="-"          grid_ref="grid_T_3D_inner" />
     <field id="SIZED"       long_name="Mean relative size of diatoms"           unit="-"          grid_ref="grid_T_3D_inner" />
+    <field id="THETANANO"   long_name="Diagnostic Chl:C ratio"                  unit="mgChl/mgC"  grid_ref="grid_T_3D_inner" />
     <field id="RASSD"       long_name="Size of the protein machinery (Diat.)"   unit="-"          grid_ref="grid_T_3D_inner" />
     <field id="RASSN"       long_name="Size of the protein machinery (Nano.)"   unit="-"          grid_ref="grid_T_3D_inner" />
     <field id="RASSP"       long_name="Size of the protein machinery (Pico.)"   unit="-"          grid_ref="grid_T_3D_inner" />
@@ -299,28 +297,6 @@
     <field id="INTPBFE"     long_name="Vertically integrated of biogenic iron production"   field_ref="TPBFE_e3t"    unit="mol/m2/s"  grid_ref="grid_T_vsum"  detect_missing_value="true" />
     <field id="INTPBSI"     long_name="Vertically integrated of biogenic Si production"     field_ref="PBSi_e3t"     unit="mol/m2/s"  grid_ref="grid_T_vsum"  detect_missing_value="true" />
 
-    <!-- PISCES light : variables available with key_pisces_reduced -->
-    <field id="FNO3PHY"     long_name="FNO3PHY"                                 unit=""     grid_ref="grid_T_3D_inner" />
-    <field id="FNH4PHY"     long_name="FNH4PHY"                                 unit=""     grid_ref="grid_T_3D_inner" />
-    <field id="FNH4NO3"     long_name="FNH4NO3"                                 unit=""     grid_ref="grid_T_3D_inner" />
-    <field id="TNO3PHY"     long_name="TNO3PHY"                                 unit=""  />
-    <field id="TNH4PHY"     long_name="TNH4PHY"                                 unit=""  />
-    <field id="TPHYDOM"     long_name="TPHYDOM"                                 unit=""  />
-    <field id="TPHYNH4"     long_name="TPHYNH4"                                 unit=""  />
-    <field id="TPHYZOO"     long_name="TPHYZOO"                                 unit=""  />
-    <field id="TPHYDET"     long_name="TPHYDET"                                 unit=""  />
-    <field id="TDETZOO"     long_name="TDETZOO"                                 unit=""  />
-    <field id="TZOODET"     long_name="TZOODET"                                 unit=""  />
-    <field id="TZOOBOD"     long_name="TZOOBOD"                                 unit=""  />
-    <field id="TZOONH4"     long_name="TZOONH4"                                 unit=""  />
-    <field id="TZOODOM"     long_name="TZOODOM"                                 unit=""  />
-    <field id="TNH4NO3"     long_name="TNH4NO3"                                 unit=""  />
-    <field id="TDOMNH4"     long_name="TDOMNH4"                                 unit=""  />
-    <field id="TDETNH4"     long_name="TDETNH4"                                 unit=""  />
-    <field id="TPHYTOT"     long_name="TPHYTOT"                                 unit=""  />
-    <field id="TZOOTOT"     long_name="TZOOTOT"                                 unit=""  />
-    <field id="SEDPOC"      long_name="SEDPOC"                                  unit=""  />
-    <field id="TDETSED"     long_name="TDETSED"                                 unit=""  />
   </field_group>
 
   <field_group id="tracer_scalar"  grid_ref="grid_scalar"  >
diff --git a/cfgs/SHARED/namelist_pisces_ref b/cfgs/SHARED/namelist_pisces_ref
index 10aff870..f2f0a229 100644
--- a/cfgs/SHARED/namelist_pisces_ref
+++ b/cfgs/SHARED/namelist_pisces_ref
@@ -13,8 +13,8 @@
 &nampismod     !  Model used 
 !-----------------------------------------------------------------------
   ln_p2z    = .false.        !  LOBSTER model used
-  ln_p4z    = .true.        !  PISCES model used
-  ln_p5z    = .false.         !  PISCES QUOTA model used
+  ln_p4z    = .true.         !  PISCES model used
+  ln_p5z    = .false.        !  PISCES QUOTA model used
   ln_ligand = .false.        !  Enable  organic ligands
   ln_sediment = .false.      !  Enable sediment module
 /
@@ -44,7 +44,7 @@
 &nampisbio     !   biological parameters
 !-----------------------------------------------------------------------
    nrdttrc     =  1       ! time step frequency for biology
-   wsbio       =  2.      ! POC sinking speed
+   wsbio       =  2.     ! POC sinking speed
    xkmort      =  1.E-7   ! half saturation constant for mortality
    feratz      =  10.E-6  ! Fe/C in zooplankton 
    feratm      =  15.E-6  ! Fe/C in mesozooplankton
@@ -56,8 +56,21 @@
    ldocz       =  1.E-4   ! Zoo ligand production per unit doc 
    lthet       =  1.0     ! Proportional loss of ligands due to Fe uptake 
 !                         !  ln_p5z enabled
-   no3rat3     =  0.151   ! N/C ratio in zooplankton
-   po4rat3     =  0.00943 ! P/C ratio in zooplankton
+   no3rat3     =  0.1367  ! N/C ratio in zooplankton
+   po4rat3     =  0.00855 ! P/C ratio in zooplankton
+/
+!-----------------------------------------------------------------------
+&namp2zlim     !   parameters for nutrient limitations for PISCES reduced  - ln_p2z
+!-----------------------------------------------------------------------
+   concnno3   =  1.e-6    ! Nitrate half saturation of nanophytoplankton
+   concnfer   =  1E-10    ! Iron half saturation for phyto
+   concbno3   =  3.E-7    ! Nitrate half saturation for DOC remin.
+   concbfe    =  3.E-11   ! Iron half-saturation for DOC remin.
+   xsizephy   =  2.E-6    ! Minimum size criteria for phyto
+   xsizern    =  10.0     ! Size ratio for nanophytoplankton
+   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization
+   caco3r     =  0.07     ! mean rain ratio
+   oxymin     =  1.E-6    ! Half-saturation constant for anoxia
 /
 !-----------------------------------------------------------------------
 &namp4zlim     !   parameters for nutrient limitations for PISCES std  - ln_p4z
@@ -66,8 +79,8 @@
    concdno3   =  3.E-6    ! Nitrate half saturation for diatoms
    concnnh4   =  1.E-6    ! NH4 half saturation for phyto
    concdnh4   =  3.E-6    ! NH4 half saturation for diatoms
-   concnfer   =  1.7E-9   ! Iron half saturation for phyto
-   concdfer   =  5.E-9    ! Iron half saturation for diatoms
+   concnfer   =  1.5E-9   ! Iron half saturation for phyto
+   concdfer   =  4.5E-9   ! Iron half saturation for diatoms
    concbfe    =  3.E-11   ! Iron half-saturation for DOC remin.
    concbnh4   =  3.E-7    ! NH4 half saturation for DOC remin.
    concbno3   =  3.E-7    ! Nitrate half saturation for DOC remin.
@@ -82,6 +95,7 @@
    qdfelim    =  10.E-6   ! Optimal quota of diatoms
    caco3r     =  0.2      ! mean rain ratio
    oxymin     =  1.E-6    ! Half-saturation constant for anoxia
+   ratchl     =  10.0     ! C associated with Chlorophyll
 /
 !-----------------------------------------------------------------------
 &namp5zlim     !   parameters for nutrient limitations PISCES QUOTA    - ln_p5z
@@ -92,16 +106,16 @@
    concnnh4   =  2E-6     ! NH4 half saturation for phyto
    concpnh4   =  7E-7     ! NH4 half saturation for picophytoplankton
    concdnh4   =  3E-6     ! NH4 half saturation for diatoms
-   concnpo4   =  2E-6     ! PO4 half saturation for phyto
-   concppo4   =  7E-7     ! PO4 half saturation for picophytoplankton
-   concdpo4   =  3E-6     ! PO4 half saturation for diatoms
+   concnpo4   =  6E-6     ! PO4 half saturation for phyto
+   concppo4   =  2E-6     ! PO4 half saturation for picophytoplankton
+   concdpo4   =  9E-6     ! PO4 half saturation for diatoms
    concnfer   =  3E-9     ! Iron half saturation for phyto
    concpfer   =  1E-9     ! Iron half saturation for picophytoplankton
    concdfer   =  4.5E-9   ! Iron half saturation for diatoms
    concbfe    =  3E-11    ! Half-saturation for Fe limitation of Bacteria
-   concbnh4   =  4.E-7    ! NH4 half saturation for phyto
-   concbno3   =  4.E-7    ! Phosphate half saturation for diatoms
-   concbpo4   =  4.E-7    ! Phosphate half saturation for bacteria
+   concbnh4   =  3.E-7    ! NH4 half saturation for phyto
+   concbno3   =  3.E-7    ! Phosphate half saturation for diatoms
+   concbpo4   =  3.E-7    ! Phosphate half saturation for bacteria
    xsizedia   =  1.E-6    ! Minimum size criteria for diatoms
    xsizephy   =  1.E-6    ! Minimum size criteria for phyto
    xsizepic   =  5.E-7    ! Minimum size criteria for picophyto
@@ -111,27 +125,28 @@
    xksi1      =  8.E-6    ! half saturation constant for Si uptake
    xksi2      =  20E-6    ! half saturation constant for Si/C
    xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization
-   caco3r     =  0.3      ! mean rain ratio
+   caco3r     =  0.4      ! mean rain ratio
    oxymin     =  1.E-6    ! Half-saturation constant for anoxia
+   ratchl     =  10.0     ! C associated with Chlorophyll
 /
 !-----------------------------------------------------------------------
 &namp5zquota   !   parameters for nutrient limitations PISCES quota    - ln_p5z
 !-----------------------------------------------------------------------
-   qfnopt     =  12.E-6   ! Optimal Fe quota of nanophyto
-   qfpopt     =  12.E-6   ! Optimal Fe quota of picophyto
-   qfdopt     =  12.E-6   ! Optimal quota of diatoms
-   qnnmin     =  0.61     ! Minimal N quota for nano
-   qnnmax     =  1.25     ! Maximal N quota for nano
+   qfnopt     =  10.E-6   ! Optimal Fe quota of nanophyto
+   qfpopt     =  10.E-6   ! Optimal Fe quota of picophyto
+   qfdopt     =  10.E-6   ! Optimal quota of diatoms
+   qnnmin     =  0.69     ! Minimal N quota for nano
+   qnnmax     =  1.35     ! Maximal N quota for nano
    qpnmin     =  0.24     ! Minimal P quota for nano
-   qpnmax     =  1.35     ! Maximal P quota for nano
-   qnpmin     =  1.02     ! Minimal N quota for pico
-   qnpmax     =  1.39     ! Maximal N quota for pico
-   qppmin     =  0.19     ! Minimal P quota for pico
-   qppmax     =  1.15     ! Maximal P quota for pico
-   qndmin     =  0.51     ! Minimal N quota for diatoms
-   qndmax     =  1.25     ! Maximal N quota for diatoms
+   qpnmax     =  1.3      ! Maximal P quota for nano
+   qnpmin     =  0.9      ! Minimal N quota for pico
+   qnpmax     =  1.35     ! Maximal N quota for pico
+   qppmin     =  0.2      ! Minimal P quota for pico
+   qppmax     =  1.1      ! Maximal P quota for pico
+   qndmin     =  0.63     ! Minimal N quota for diatoms
+   qndmax     =  1.35     ! Maximal N quota for diatoms
    qpdmin     =  0.24     ! Minimal P quota for diatoms
-   qpdmax     =  1.525    ! Maximal P quota for diatoms
+   qpdmax     =  1.67     ! Maximal P quota for diatoms
    qfnmax     =  60E-6    ! Maximal Fe quota for nano
    qfpmax     =  60E-6    ! Maximal Fe quota for pico
    qfdmax     =  60E-6    ! Maximal Fe quota for diatoms
@@ -148,17 +163,23 @@
    ln_p4z_dcyc =  .false.  ! Diurnal cycle in PISCES
 / 
 !-----------------------------------------------------------------------
+&namp2zprod    !   parameters for phytoplankton growth for PISCES reduced  - ln_p2z
+!-----------------------------------------------------------------------
+   pislopen   =  4.       ! P-I slope
+   excretn    =  0.05     ! excretion ratio of phytoplankton
+   bresp      =  0.03     ! Basal respiration rate
+   chlcnm     =  0.033    ! Maximum Chl/C in nanophytoplankton
+   chlcmin    =  0.0025   ! Minimum Chl/c in phytoplankton
+/
+!-----------------------------------------------------------------------
 &namp4zprod    !   parameters for phytoplankton growth for PISCES std  - ln_p4z
 !-----------------------------------------------------------------------
-   pislopen   =  2.       ! P-I slope
-   pisloped   =  2.       ! P-I slope  for diatoms
-   xadap      =  0.       ! Adaptation factor to low light
+   pislopen   =  3.       ! P-I slope
+   pisloped   =  3.       ! P-I slope  for diatoms
    excretn    =  0.05     ! excretion ratio of phytoplankton
    excretd    =  0.05     ! excretion ratio of diatoms
-   bresp      =  0.033    ! Basal respiration rate
-   chlcnm     =  0.033    ! Maximum Chl/C in nanophytoplankton
-   chlcdm     =  0.05     ! Maximum Chl/C in diatoms
-   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton
+   bresp      =  0.03     ! Basal respiration rate
+   chlcmin    =  0.0025   ! Minimum Chl/c in phytoplankton
    fecnm      =  60E-6    ! Maximum Fe/C in nanophytoplankton
    fecdm      =  60E-6    ! Maximum Fe/C in diatoms
    grosip     =  0.13     ! mean Si/C ratio
@@ -172,13 +193,15 @@
    excretn    =  0.05     ! excretion ratio of phytoplankton
    excretp    =  0.05     ! excretion ratio of picophytoplankton
    excretd    =  0.05     ! excretion ratio of diatoms
-   xadap      =  0.       ! Adaptation factor to low light
-   bresp      =  0.02     ! Basal respiration rate
-   thetannm   =  0.3      ! Maximum Chl/N in nanophytoplankton
-   thetanpm   =  0.3      ! Maximum Chl/N in picophytoplankton
-   thetandm   =  0.4      ! Maximum Chl/N in diatoms
-   chlcmin    =  0.003    ! Minimum Chl/c in phytoplankton
-   grosip     =  0.12     ! mean Si/C ratio
+   bresp      =  0.03     ! Basal respiration rate
+   chlcmin    =  0.0025   ! Minimum Chl/c in phytoplankton
+   grosip     =  0.11     ! mean Si/C ratio
+/
+!-----------------------------------------------------------------------
+&namp2zmort    !   parameters for phytoplankton sinks for PISCES std   - ln_p2z
+!-----------------------------------------------------------------------
+   wchln      =  0.02     ! quadratic mortality of phytoplankton
+   mpratn     =  0.01     ! phytoplankton mortality rate
 /
 !-----------------------------------------------------------------------
 &namp4zmort    !   parameters for phytoplankton sinks for PISCES std   - ln_p4z
@@ -209,15 +232,17 @@
    xpref2n     =  0.3      ! mesozoo preference for nanophyto.
    xpref2z     =  1.       ! mesozoo preference for microzoo.
    xpref2c     =  0.3      ! mesozoo preference for poc
+   xpref2m     =  0.0      ! mesozoo preference for meso
    xthresh2zoo =  1E-8     ! zoo feeding threshold for mesozooplankton 
    xthresh2dia =  1E-8     ! diatoms feeding threshold for mesozooplankton 
    xthresh2phy =  1E-8     ! nanophyto feeding threshold for mesozooplankton 
    xthresh2poc =  1E-8     ! poc feeding threshold for mesozooplankton 
+   xthresh2mes =  1E-8     ! meso feeding threshold for mesozooplankton
    xthresh2    =  3E-7     ! Food threshold for grazing
    xkgraz2     =  20.E-6   ! half saturation constant for meso grazing
    epsher2     =  0.4      ! Efficicency of Mesozoo growth
    epsher2min  =  0.4      ! Minimum efficiency of mesozoo growth
-   sigma2      =  0.6      ! Fraction of mesozoo excretion as DOM
+   sigma2      =  0.5      ! Fraction of mesozoo excretion as DOM
    unass2      =  0.3      ! non assimilated fraction of P by mesozoo
    grazflux    =  3.e3     ! flux-feeding rate
    xsigma2     =  0.5      ! Predation window size
@@ -232,7 +257,8 @@
    grazrat2    =  0.5      ! maximal mesozoo grazing rate
    bmetexc2    =  .true.   ! Metabolic use of excess carbon 
    resrat2     =  0.005    ! exsudation rate of mesozooplankton
-   mzrat2      =  0.01     ! mesozooplankton mortality rate
+   lmzrat2     =  0.005    ! Linear mortality rate of mesozooplankton
+   mzrat2      =  0.015    ! mesozooplankton mortality rate
    xpref2d     =  1.       ! meso preference for diatoms
    xpref2n     =  0.3      ! meso preference for nano
    xpref2z     =  1.       ! meso preference for zoo
@@ -248,7 +274,7 @@
    epsher2     =  0.5      ! Efficicency of Mesozoo growth
    epsher2min  =  0.5      ! Minimum efficiency of mesozoo growth
    ssigma2     =  0.5      ! Fraction excreted as semi-labile DOM
-   srespir2    =  0.2      ! Active respiration
+   srespir2    =  0.15     ! Active respiration
    unass2c     =  0.3      ! non assimilated fraction of C by mesozoo
    unass2n     =  0.3      ! non assimilated fraction of N by mesozoo
    unass2p     =  0.3      ! non assimilated fraction of P by mesozoo
@@ -259,23 +285,45 @@
    xfracmig    =  0.25     ! Fraction of mesozooplankton performing DVM
 /
 !-----------------------------------------------------------------------
+&namp2zzoo     !   parameters for microzooplankton for PISCES reduced  - ln_p2z
+!-----------------------------------------------------------------------
+   part       =  0.75     ! part of calcite not dissolved in microzoo guts
+   grazrat    =  2.0      ! maximal zoo grazing rate
+   resrat     =  0.02     ! Linear mortality rate of zooplankton
+   mzrat      =  0.02     ! zooplankton mortality rate
+   xprefc     =  0.15     ! Microzoo preference for POM
+   xprefn     =  1.       ! Microzoo preference for Nanophyto
+   xprefz     =  0.0      ! Microzoo preference for Microzoo
+   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton
+   xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton
+   xthreshzoo =  1.E-8    ! Microzoo feeding threshold for microzooplankton
+   xthresh    =  3.E-7    ! Food threshold for feeding
+   xkgraz     =  20.E-6   ! half sturation constant for grazing
+   epsher     =  0.4     ! Efficiency of microzoo growth
+   epshermin  =  0.4     ! Minimum efficiency of microzoo growth
+   sigma1     =  0.6      ! Fraction of microzoo excretion as DOM
+   unass      =  0.3      ! non assimilated fraction of phyto by zoo
+/
+!-----------------------------------------------------------------------
 &namp4zzoo     !   parameters for microzooplankton for PISCES std      - ln_p4z
 !-----------------------------------------------------------------------
    part       =  0.75     ! part of calcite not dissolved in microzoo guts
    grazrat    =  2.0      ! maximal zoo grazing rate
    resrat     =  0.02     ! Linear mortality rate of zooplankton
    mzrat      =  0.005    ! zooplankton mortality rate
-   xprefc     =  0.15      ! Microzoo preference for POM
-   xprefn     =  1.       ! Microzoo preference for Nanophyto
-   xprefd     =  0.8      ! Microzoo preference for Diatoms
+   xprefc     =  0.15     ! Microzoo preference for POM
+   xprefn     =  1.0      ! Microzoo preference for Nanophyto
+   xprefd     =  1.0      ! Microzoo preference for Diatoms
+   xprefz     =  0.0      ! Microzoo preference for Microzoo
    xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton 
    xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
    xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton 
+   xthreshzoo =  1.E-8    ! Microzoo feeding threshold for microzooplankton
    xthresh    =  3.E-7    ! Food threshold for feeding
    xkgraz     =  20.E-6   ! half sturation constant for grazing
-   epsher     =  0.4     ! Efficiency of microzoo growth
-   epshermin  =  0.4     ! Minimum efficiency of microzoo growth
-   sigma1     =  0.6      ! Fraction of microzoo excretion as DOM
+   epsher     =  0.4      ! Efficiency of microzoo growth
+   epshermin  =  0.4      ! Minimum efficiency of microzoo growth
+   sigma1     =  0.5      ! Fraction of microzoo excretion as DOM
    unass      =  0.3      ! non assimilated fraction of phyto by zoo
    xsigma     =  0.5      ! Predation window size
    xsigmadel  =  1.0      ! Predation window size scaling
@@ -287,11 +335,12 @@
    grazrat    =  2.0      ! maximal zoo grazing rate
    bmetexc    =  .true.   ! Metabolic use of excess carbon
    resrat     =  0.02     ! exsudation rate of zooplankton
+   lmzrat     =  0.02     ! Linear mortality rate of zooplankton
    mzrat      =  0.005    ! zooplankton mortality rate
    xprefc     =  0.15     ! Microzoo preference for POM
    xprefn     =  1.0      ! Microzoo preference for Nanophyto
    xprefp     =  1.0      ! Microzoo preference for picophyto
-   xprefd     =  1.0      ! Microzoo preference for Diatoms
+   xprefd     =  0.9      ! Microzoo preference for Diatoms
    xprefz     =  0.       ! Microzoo preference for microzooplankton
    xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton
    xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton
@@ -303,7 +352,7 @@
    epsher     =  0.5      ! Efficiency of microzoo growth
    epshermin  =  0.5      ! Minimum efficiency of microzoo growth
    ssigma     =  0.5      ! Fraction excreted as semi-labile DOM
-   srespir    =  0.2      ! Active respiration
+   srespir    =  0.15     ! Active respiration
    unassc     =  0.3      ! non assimilated fraction of C by zoo
    unassn     =  0.3      ! non assimilated fraction of N by zoo
    unassp     =  0.3      ! non assimilated fraction of P by zoo
@@ -327,23 +376,22 @@
    xsirem    =  0.003     ! remineralization rate of Si
    xsiremlab =  0.03      ! fast remineralization rate of Si
    xsilab    =  0.5       ! Fraction of labile biogenic silica
-   feratb    =  60.E-6    ! Fe/C quota in bacteria
-   xkferb    =  4E-10     ! Half-saturation constant for bacteria Fe/C
+   feratb    =  40.E-6    ! Fe/C quota in bacteria
+   xkferb    =  3E-10     ! Half-saturation constant for bacteria Fe/C
 !                         ! ln_p5z
    xremikc   =  0.4       ! remineralization rate of DOC
    xremikn   =  0.4       ! remineralization rate of DON
-   xremikp   =  0.5       ! remineralization rate of DOP
+   xremikp   =  0.4       ! remineralization rate of DOP
 /
 !-----------------------------------------------------------------------
 &nampispoc     !   parameters for organic particles
 !-----------------------------------------------------------------------
-   xremip    =  0.035     ! remineralisation rate of POC
    jcpoc     =  15        ! Number of lability classes
    rshape    =  1.0       ! Shape of the gamma function
 !                         ! ln_p5z
-   xremipc   =  0.028     ! remineralisation rate of POC
-   xremipn   =  0.03      ! remineralisation rate of PON
-   xremipp   =  0.035     ! remineralisation rate of POP
+   xremipc   =  0.035     ! remineralisation rate of POC
+   xremipn   =  0.032     ! remineralisation rate of PON
+   xremipp   =  0.032     ! remineralisation rate of POP
 /
 !-----------------------------------------------------------------------
 &nampiscal     !   parameters for Calcite chemistry
@@ -444,83 +492,3 @@
 !-----------------------------------------------------------------------
    ln_check_mass =  .false.    !  Check mass conservation
 /
-!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!! PISCES reduced (key_pisces_reduced, ex LOBSTER) : namelists
-!!              1  - biological parameters for phytoplankton    (namlobphy)
-!!              2  - biological parameters for nutrients        (namlobnut)
-!!              3  - biological parameters for zooplankton      (namlobzoo)    
-!!              4  - biological parameters for detritus         (namlobdet)
-!!              5  - biological parameters for DOM              (namlobdom)
-!!              6  - parameters from aphotic layers to sediment (namlobsed)
-!!              7  - general coefficients                       (namlobrat)
-!!              8  - optical parameters                         (namlobopt)
-!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-   tmumax  =  1.21e-5   ! maximal phytoplankton growth rate            [s-1] 
-   rgamma  =  0.05      ! phytoplankton exudation fraction             [%]
-   fphylab =  0.75      ! NH4 fraction of phytoplankton exsudation     
-   tmminp  =  5.8e-7    ! minimal phytoplancton mortality rate         [0.05/86400 s-1=20 days] 
-   aki     =  33.       ! light photosynthesis half saturation constant[W/m2]
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-   akno3   =  0.7       ! nitrate limitation half-saturation value     [mmol/m3]
-   aknh4   =  0.001     ! ammonium limitation half-saturation value    [mmol/m3]
-   taunn   =  5.80e-7   ! nitrification rate                           [s-1]  
-   psinut  =  3.        ! inhibition of nitrate uptake by ammonium
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-   rppz    = 0.8        ! zooplankton nominal preference for phytoplancton food  [%]
-   taus    = 9.26E-6    ! specific zooplankton maximal grazing rate              [s-1] 
-!                       ! 0.75/86400 s-1=8.680555E-6    1/86400 = 1.15e-5
-   aks     = 1.         ! half-saturation constant for total zooplankton grazing [mmolN.m-3]
-   rpnaz   = 0.3        ! non-assimilated phytoplankton by zooplancton           [%]
-   rdnaz   = 0.3        ! non-assimilated detritus by zooplankton                [%] 
-   tauzn   = 8.1e-7     ! zooplancton specific excretion rate                    [0.1/86400 s-1=10 days] 
-   fzoolab = 0.5        ! NH4 fraction of zooplankton excretion
-   fdbod   = 0.5        ! zooplankton mortality fraction that goes to detritus
-   tmminz  = 2.31e-6    ! minimal zooplankton mortality rate                     [(mmolN/m3)-1 d-1]
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-   taudn   = 5.80e-7    ! detritus breakdown rate                        [0.1/86400 s-1=10 days]
-   fdetlab = 0.         ! NH4 fraction of detritus dissolution           
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-   taudomn = 6.43e-8    ! DOM breakdown rate                             [s-1] 
-!                       ! slow remineralization rate of semi-labile dom to nh4 (1 month)
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-   sedlam     = 3.86e-7    ! time coefficient of POC remineralization in sediments [s-1]
-   sedlostpoc = 0.         ! mass of POC lost in sediments
-   vsed       = 3.47e-5    ! detritus sedimentation speed                   [m/s]
-   xhr        = -0.858     ! coeff for martin''s remineralisation profile
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-   rcchl   = 60.       ! Carbone/Chlorophyl ratio                     [mgC.mgChla-1]
-   redf    = 6.56       ! redfield ratio (C:N) for phyto
-   reddom  = 6.56       ! redfield ratio (C:N) for DOM
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-   xkg0   = 0.0232     ! green absorption coefficient of water
-   xkr0   = 0.225      ! red absorption coefficent of water
-   xkgp   = 0.074      ! green absorption coefficient of chl
-   xkrp   = 0.037      ! red absorption coefficient of chl
-   xlg    = 0.674      ! green chl exposant for absorption
-   xlr    = 0.629      ! red chl exposant for absorption
-   rpig   = 0.7        ! chla/chla+pheo ratio
-/
diff --git a/src/TOP/PISCES/P2Z/p2zbio.F90 b/src/TOP/PISCES/P2Z/p2zbio.F90
deleted file mode 100644
index 4100534f..00000000
--- a/src/TOP/PISCES/P2Z/p2zbio.F90
+++ /dev/null
@@ -1,474 +0,0 @@
-MODULE p2zbio
-   !!======================================================================
-   !!                         ***  MODULE p2zbio  ***
-   !! TOP :   LOBSTER
-   !!======================================================================
-   !! History :    -   !  1999-07  (M. Levy) Original code
-   !!              -   !  2000-12  (E. Kestenare) assign a parameter to name individual tracers
-   !!              -   !  2001-03  (M. Levy)  LNO3 + dia2d 
-   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90
-   !!----------------------------------------------------------------------
-   !!   p2z_bio        :  
-   !!----------------------------------------------------------------------
-   USE oce_trc         !
-   USE trc             ! 
-   USE sms_pisces      !
-   USE p2zopt          !
-   USE trd_oce         !
-   USE trdtrc          !
-   !
-   USE lbclnk          ! 
-   USE prtctl          ! Print control for debbuging
-   USE iom             !
-   
-   IMPLICIT NONE
-   PRIVATE
-
-   PUBLIC   p2z_bio         ! called in ???
-   PUBLIC   p2z_bio_init    ! called in ???
-
-   REAL(wp) ::   tmumax     ! maximal phytoplankton growth rate            [s-1]
-   REAL(wp) ::   rgamma     ! phytoplankton exudation fraction             [%]
-   REAL(wp) ::   fphylab    ! NH4 fraction of phytoplankton exsudation
-   REAL(wp) ::   tmminp     ! minimal phytoplancton mortality rate         [0.05/86400 s-1=20 days]
-   REAL(wp) ::   aki        ! light photosynthesis half saturation constant[W/m2]
-   !
-   REAL(wp) ::   akno3      ! nitrate limitation half-saturation value     [mmol/m3]
-   REAL(wp) ::   aknh4      ! ammonium limitation half-saturation value    [mmol/m3]
-   REAL(wp) ::   taunn      ! nitrification rate                           [s-1]
-   REAL(wp) ::   psinut     ! inhibition of nitrate uptake by ammonium
-   !
-   REAL(wp) ::   taudn      ! detritus breakdown rate                        [0.1/86400 s-1=10 days]
-   REAL(wp) ::   fdetlab    ! NH4 fraction of detritus dissolution
-   !
-   REAL(wp) ::   taudomn    ! DOM breakdown rate                             [s-1]
-   !                        ! slow remineralization rate of semi-labile dom to nh4 (1 month)
-   !
-   REAL(wp) ::   rppz       ! ivlev coeff for zoo mortality
-   REAL(wp) ::   taus       ! specific zooplankton maximal grazing rate              [s-1]
-   !                                     ! 0.75/86400 s-1=8.680555E-6    1/86400 = 1.15e-5
-   REAL(wp) ::   aks        ! half-saturation constant for total zooplankton grazing [mmolN.m-3]
-   REAL(wp) ::   rpnaz      ! non-assimilated phytoplankton by zooplancton           [%]
-   REAL(wp) ::   rdnaz      ! non-assimilated detritus by zooplankton                [%]
-   REAL(wp) ::   tauzn      ! zooplancton specific excretion rate                    [0.1/86400 s-1=10 days]
-   REAL(wp) ::   tmminz     ! minimal zooplankton mortality rate                     [(mmolN/m3)-1 d-1]
-   REAL(wp) ::   fzoolab    ! NH4 fraction of zooplankton excretion
-   REAL(wp) ::   fdbod      ! zooplankton mortality fraction that goes to detritus
-
-   !! * Substitutions
-#  include "do_loop_substitute.h90"
-#  include "domzgr_substitute.h90"
-   !!----------------------------------------------------------------------
-   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
-   !! $Id: p2zbio.F90 14433 2021-02-11 08:06:49Z smasson $ 
-   !! Software governed by the CeCILL license (see ./LICENSE)
-   !!----------------------------------------------------------------------
-CONTAINS
-
-   SUBROUTINE p2z_bio( kt, Kmm, Krhs )
-      !!---------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_bio  ***
-      !!
-      !! ** Purpose :   compute the now trend due to biogeochemical processes
-      !!              and add it to the general trend of passive tracers equations
-      !!
-      !! ** Method  :   each now biological flux is calculated in function of now
-      !!              concentrations of tracers.
-      !!              depending on the tracer, these fluxes are sources or sinks.
-      !!              the total of the sources and sinks for each tracer
-      !!              is added to the general trend.
-      !!        
-      !!                      tr(Krhs) = tr(Krhs) + zf...tr(Krhs) - zftra...
-      !!                                     |         |
-      !!                                     |         |
-      !!                                  source      sink
-      !!        
-      !!---------------------------------------------------------------------
-      INTEGER, INTENT( in ) ::   kt             ! ocean time-step index      
-      INTEGER, INTENT( in ) ::   Kmm, Krhs      ! time level indices
-      !
-      INTEGER  ::   ji, jj, jk, jl
-      REAL(wp) ::   zdet, zzoo, zphy, zno3, znh4, zdom      ! now concentrations
-      REAL(wp) ::   zlno3, zlnh4, zle, zlt                  ! limitation terms for phyto
-      REAL(wp) ::   zno3phy, znh4phy, zphynh4, zphydom
-      REAL(wp) ::   zphydet, zphyzoo, zdetzoo
-      REAL(wp) ::   zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom
-      REAL(wp) ::   znh4no3, zdomnh4, zppz, zpdz, zpppz, zppdz, zfood
-      REAL(wp) ::   zfilpz, zfildz, zphya, zzooa, zno3a
-      REAL(wp) ::   znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju
-      REAL(wp) ::   ze3t
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   zw2d
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zw3d
-      CHARACTER (len=25) :: charout
-      !!---------------------------------------------------------------------
-      !
-      IF( ln_timing )   CALL timing_start('p2z_bio')
-      !
-
-      IF( kt == nittrc000 ) THEN
-         IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) ' p2z_bio: LOBSTER bio-model'
-         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
-      ENDIF
-
-      IF( lk_iomput ) THEN
-         ALLOCATE( zw3d(A2D(0),jpk,3) )   ;   zw3d(:,:,jpk,:) = 0._wp
-         ALLOCATE( zw2d(A2D(0),17) )      ;   zw2d(:,:,:) = 0._wp
-      ENDIF
-      !
-      xksi(:,:) = 0.e0        ! zooplakton closure ( fbod)
-
-      !                                      ! -------------------------- !
-      DO_3D( 0, 0, 0, 0, 1, jpkbm1 )         !  Upper ocean (bio-layers)  !
-         !                                   ! -------------------------- !
-         ! trophic variables( det, zoo, phy, no3, nh4, dom)
-         ! ------------------------------------------------
-
-            ! negative trophic variables DO not contribute to the fluxes
-            zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) )
-            zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) )
-            zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) )
-            zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) )
-            znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) )
-            zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) )
-
-            ! Limitations
-            zlt   = 1.
-            zle   = 1. - EXP( -etot(ji,jj,jk) / aki / zlt )
-            ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03
-            zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 )
-            zlnh4 = znh4 / (znh4+aknh4)  
-
-            ! sinks and sources
-            !    phytoplankton production and exsudation
-            zno3phy = tmumax * zle * zlt * zlno3 * zphy
-            znh4phy = tmumax * zle * zlt * zlnh4 * zphy
-
-            !    fphylab added by asklod AS Kremeur 2005-03
-            zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy)
-            zphynh4 = rgamma * fphylab * (zno3phy + znh4phy)
-            ! zooplankton production
-            !    preferences
-            zppz = rppz
-            zpdz = 1. - rppz
-            zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
-            zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
-            zfood = zpppz * zphy + zppdz * zdet
-            !    filtration 
-            zfilpz = taus * zpppz / (aks + zfood)
-            zfildz = taus * zppdz / (aks + zfood)
-            !    grazing
-            zphyzoo = zfilpz * zphy * zzoo
-            zdetzoo = zfildz * zdet * zzoo
-
-            ! fecal pellets production
-            zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
-
-            ! zooplankton liquide excretion
-            zzoonh4 = tauzn * fzoolab * zzoo  
-            zzoodom = tauzn * (1 - fzoolab) * zzoo
-
-            ! mortality
-            !    phytoplankton mortality
-            zphydet = tmminp * zphy
-
-            !    zooplankton mortality
-            !    closure : flux grazing is redistributed below level jpkbio
-            zzoobod = tmminz * zzoo * zzoo
-            xksi(ji,jj) = xksi(ji,jj) + (1-fdbod) * zzoobod * e3t(ji,jj,jk,Kmm)
-            zboddet = fdbod * zzoobod
-
-            ! detritus and dom breakdown
-            zdetnh4 = taudn * fdetlab * zdet
-            zdetdom = taudn * (1 - fdetlab) * zdet
-
-            zdomnh4 = taudomn * zdom
-
-            ! flux added to express how the excess of nitrogen from 
-            ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment)
-            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
-
-            ! Nitrification 
-            znh4no3 = taunn * znh4
-
-            ! determination of trends
-            !    total trend for each biological tracer
-            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
-            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
-            zno3a = - zno3phy + znh4no3
-            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
-            zdeta =   zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet
-            zdoma =   zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
-
-            ! tracer flux at totox-point added to the general trend
-            tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta
-            tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa
-            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya
-            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a
-            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a
-            tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma
-
-             IF( lk_iomput ) THEN
-               ! convert fluxes in per day
-               ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp
-               zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t
-               zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
-               zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
-               zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
-               zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
-               zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
-               zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
-               zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
-               zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
-               zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
-               zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
-               zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
-               zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
-               zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t
-               zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
-               zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
-               zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
-               !   
-               zw3d(ji,jj,jk,1) = zno3phy * 86400
-               zw3d(ji,jj,jk,2) = znh4phy * 86400     
-               zw3d(ji,jj,jk,3) = znh4no3 * 86400   
-                ! 
-             ENDIF
-      END_3D
-
-      !                                      ! -------------------------- !
-      DO_3D( 0, 0, 0, 0, jpkb, jpkm1 )       !  Upper ocean (bio-layers)  !
-         !                                   ! -------------------------- !
-            ! remineralisation of all quantities towards nitrate 
-
-            !    trophic variables( det, zoo, phy, no3, nh4, dom)
-            !       negative trophic variables DO not contribute to the fluxes
-            zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) )
-            zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) )
-            zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) )
-            zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) )
-            znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) )
-            zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) )
-
-            !    Limitations
-            zlt   = 0.e0
-            zle   = 0.e0
-            zlno3 = 0.e0
-            zlnh4 = 0.e0
-
-            !    sinks and sources
-            !       phytoplankton production and exsudation
-            zno3phy = 0.e0
-            znh4phy = 0.e0
-            zphydom = 0.e0
-            zphynh4 = 0.e0
-
-            !    zooplankton production
-            zphyzoo = 0.e0      ! grazing
-            zdetzoo = 0.e0
-
-            zzoodet = 0.e0      ! fecal pellets production
-
-            zzoonh4 = tauzn * fzoolab * zzoo         ! zooplankton liquide excretion
-            zzoodom = tauzn * (1 - fzoolab) * zzoo
-
-            !    mortality
-            zphydet = tmminp * zphy      ! phytoplankton mortality
-
-            zzoobod = 0.e0               ! zooplankton mortality
-            zboddet = 0.e0               ! closure : flux fbod is redistributed below level jpkbio
-
-            !    detritus and dom breakdown
-            zdetnh4 = taudn * fdetlab * zdet
-            zdetdom = taudn * (1 - fdetlab) * zdet
-
-            zdomnh4 = taudomn * zdom
-            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
-
-            !    Nitrification
-            znh4no3 = taunn * znh4
-
-
-            ! determination of trends
-            !     total trend for each biological tracer
-            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
-            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
-            zno3a = - zno3phy + znh4no3 
-            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
-            zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom + zboddet
-            zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
-
-            ! tracer flux at totox-point added to the general trend
-            tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta
-            tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa
-            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya
-            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a
-            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a
-            tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma
-            !
-             IF( lk_iomput ) THEN                  ! convert fluxes in per day
-               ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp
-               zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t
-               zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
-               zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
-               zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
-               zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
-               zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
-               zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
-               zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
-               zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
-               zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
-               zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
-               zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
-               zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
-               zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t
-               zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
-               zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
-               zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
-               !   
-               zw3d(ji,jj,jk,1) = zno3phy * 86400._wp
-               zw3d(ji,jj,jk,2) = znh4phy * 86400._wp
-               zw3d(ji,jj,jk,3) = znh4no3 * 86400._wp
-               !
-            ENDIF
-      END_3D
-      !
-      IF( lk_iomput ) THEN
-         ! Save diagnostics
-         CALL iom_put( "TNO3PHY", zw2d(:,:,1) )
-         CALL iom_put( "TNH4PHY", zw2d(:,:,2) )
-         CALL iom_put( "TPHYDOM", zw2d(:,:,3) )
-         CALL iom_put( "TPHYNH4", zw2d(:,:,4) )
-         CALL iom_put( "TPHYZOO", zw2d(:,:,5) )
-         CALL iom_put( "TPHYDET", zw2d(:,:,6) )
-         CALL iom_put( "TDETZOO", zw2d(:,:,7) )
-         CALL iom_put( "TZOODET", zw2d(:,:,8) )
-         CALL iom_put( "TZOOBOD", zw2d(:,:,9) )
-         CALL iom_put( "TZOONH4", zw2d(:,:,10) )
-         CALL iom_put( "TZOODOM", zw2d(:,:,11) )
-         CALL iom_put( "TNH4NO3", zw2d(:,:,12) )
-         CALL iom_put( "TDOMNH4", zw2d(:,:,13) )
-         CALL iom_put( "TDETNH4", zw2d(:,:,14) )
-         CALL iom_put( "TPHYTOT", zw2d(:,:,15) )
-         CALL iom_put( "TZOOTOT", zw2d(:,:,16) )
-         ! 
-         CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )
-         CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )
-         CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )
-         !
-         DEALLOCATE( zw2d, zw3d )
-         !
-      ENDIF
-
-      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
-         WRITE(charout, FMT="('bio')")
-         CALL prt_ctl_info( charout, cdcomp = 'top' )
-         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
-      ENDIF
-      !
-      IF( ln_timing )  CALL timing_stop('p2z_bio')
-      !
-   END SUBROUTINE p2z_bio
-
-
-   SUBROUTINE p2z_bio_init
-      !!----------------------------------------------------------------------
-      !!                  ***  ROUTINE p2z_bio_init  ***
-      !!
-      !! ** Purpose :  biological parameters 
-      !!
-      !! ** Method  :   Read namelist and check the parameters
-      !!
-      !!----------------------------------------------------------------------
-      INTEGER ::   ios   ! Local integer
-      !!
-      NAMELIST/namlobphy/ tmumax, rgamma, fphylab, tmminp, aki
-      NAMELIST/namlobnut/ akno3, aknh4, taunn, psinut
-      NAMELIST/namlobzoo/ rppz, taus, aks, rpnaz, rdnaz, tauzn, fzoolab, fdbod, tmminz
-      NAMELIST/namlobdet/ taudn, fdetlab
-      NAMELIST/namlobdom/ taudomn
-      !!----------------------------------------------------------------------
-      !
-      IF(lwp) WRITE(numout,*)
-      IF(lwp) WRITE(numout,*) ' p2z_bio_init : LOBSTER bio-model initialization'
-      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~'
-      !
-      READ  ( numnatp_ref, namlobphy, IOSTAT = ios, ERR = 901)
-901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobphy in reference namelist' )
-      READ  ( numnatp_cfg, namlobphy, IOSTAT = ios, ERR = 902 )
-902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobphy in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobphy )
-      !
-      IF(lwp) THEN
-         WRITE(numout,*) '   Namelist namlobphy'
-         WRITE(numout,*) '      phyto max growth rate                                tmumax    =', 86400 * tmumax, ' d'
-         WRITE(numout,*) '      phytoplankton exudation fraction                     rgamma    =', rgamma
-         WRITE(numout,*) '      NH4 fraction of phytoplankton exsudation             fphylab   =', fphylab
-         WRITE(numout,*) '      minimal phyto mortality rate                         tmminp    =', 86400 * tmminp
-         WRITE(numout,*) '      light hlaf saturation constant                       aki       =', aki
-      ENDIF
-
-      READ  ( numnatp_ref, namlobnut, IOSTAT = ios, ERR = 903)
-903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobnut in reference namelist' )
-      READ  ( numnatp_cfg, namlobnut, IOSTAT = ios, ERR = 904 )
-904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobnut in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobnut )
-
-      IF(lwp) THEN
-         WRITE(numout,*) 
-         WRITE(numout,*) '   Namelist namlobnut'
-         WRITE(numout,*) '      half-saturation nutrient for no3 uptake              akno3     =', akno3
-         WRITE(numout,*) '      half-saturation nutrient for nh4 uptake              aknh4     =', aknh4
-         WRITE(numout,*) '      nitrification rate                                   taunn     =', taunn
-         WRITE(numout,*) '      inhibition of no3 uptake by nh4                      psinut    =', psinut
-      ENDIF
-
-      READ  ( numnatp_ref, namlobzoo, IOSTAT = ios, ERR = 905)
-905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobzoo in reference namelist' )
-      READ  ( numnatp_cfg, namlobzoo, IOSTAT = ios, ERR = 906 )
-906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobzoo in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobzoo )
-
-      IF(lwp) THEN
-         WRITE(numout,*) 
-         WRITE(numout,*) '   Namelist namlobzoo'
-         WRITE(numout,*) '      zoo preference for phyto                             rppz      =', rppz
-         WRITE(numout,*) '      maximal zoo grazing rate                             taus      =', 86400 * taus, ' d'
-         WRITE(numout,*) '      half saturation constant for zoo food                aks       =', aks
-         WRITE(numout,*) '      non-assimilated phyto by zoo                         rpnaz     =', rpnaz
-         WRITE(numout,*) '      non-assimilated detritus by zoo                      rdnaz     =', rdnaz
-         WRITE(numout,*) '      zoo specific excretion rate                          tauzn     =', 86400 * tauzn
-         WRITE(numout,*) '      minimal zoo mortality rate                           tmminz    =', 86400 * tmminz
-         WRITE(numout,*) '      NH4 fraction of zooplankton excretion                fzoolab   =', fzoolab
-         WRITE(numout,*) '      Zooplankton mortality fraction that goes to detritus fdbod     =', fdbod
-      ENDIF
-
-      READ  ( numnatp_ref, namlobdet, IOSTAT = ios, ERR = 907)
-907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdet in reference namelist' )
-      READ  ( numnatp_cfg, namlobdet, IOSTAT = ios, ERR = 908 )
-908   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdet in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobdet )
-
-      IF(lwp) THEN
-          WRITE(numout,*) 
-          WRITE(numout,*) '   Namelist namlobdet'
-          WRITE(numout,*) '      detrital breakdown rate                              taudn     =', 86400 * taudn , ' d'
-          WRITE(numout,*) '      NH4 fraction of detritus dissolution                 fdetlab   =', fdetlab
-      ENDIF
-
-      READ  ( numnatp_ref, namlobdom, IOSTAT = ios, ERR = 909)
-909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdom in reference namelist' )
-      READ  ( numnatp_cfg, namlobdom, IOSTAT = ios, ERR = 910 )
-910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdom in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobdom )
-
-      IF(lwp) THEN
-          WRITE(numout,*) 
-          WRITE(numout,*) '   Namelist namlobdom'
-          WRITE(numout,*) '      DOM breakdown rate                                 taudomn     =', 86400 * taudn , ' d'
-      ENDIF
-      !
-   END SUBROUTINE p2z_bio_init
-
-   !!======================================================================
-END MODULE p2zbio
diff --git a/src/TOP/PISCES/P2Z/p2zexp.F90 b/src/TOP/PISCES/P2Z/p2zexp.F90
deleted file mode 100644
index 71ed7709..00000000
--- a/src/TOP/PISCES/P2Z/p2zexp.F90
+++ /dev/null
@@ -1,239 +0,0 @@
-MODULE p2zexp
-   !!======================================================================
-   !!                         ***  MODULE p2zsed  ***
-   !! TOP :   LOBSTER Compute loss of organic matter in the sediments
-   !!======================================================================
-   !! History :    -   !  1999    (O. Aumont, C. Le Quere)  original code
-   !!              -   !  2001-05 (O. Aumont, E. Kestenare) add sediment computations
-   !!             1.0  !  2005-06 (A.-S. Kremeur) new temporal integration for sedpoc
-   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90
-   !!             3.5  !  2012-03  (C. Ethe)  Merge PISCES-LOBSTER
-   !!----------------------------------------------------------------------
-   !!   p2z_exp        :  Compute loss of organic matter in the sediments
-   !!----------------------------------------------------------------------
-   USE oce_trc         !
-   USE trc
-   USE sms_pisces
-   USE p2zsed
-   USE lbclnk
-   USE prtctl          ! Print control for debbuging
-   USE trd_oce
-   USE trdtrc
-   USE iom
-
-   IMPLICIT NONE
-   PRIVATE
-
-   PUBLIC   p2z_exp    
-   PUBLIC   p2z_exp_init 
-   PUBLIC   p2z_exp_alloc
-
-   !
-   REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   dminl     !: fraction of sinking POC released in sediments
-   REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   dmin3     !: fraction of sinking POC released at each level
-   REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   sedpocb   !: mass of POC in sediments
-   REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   sedpocn   !: mass of POC in sediments
-   REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   cmask     !: Coastal mask area
-   REAL(wp)                                ::   areacot   !: surface coastal area
-
-   !! * Substitutions
-#  include "do_loop_substitute.h90"
-#  include "domzgr_substitute.h90"
-   !!----------------------------------------------------------------------
-   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
-   !! $Id: p2zexp.F90 15090 2021-07-06 14:25:18Z cetlod $ 
-   !! Software governed by the CeCILL license (see ./LICENSE)
-   !!----------------------------------------------------------------------
-CONTAINS
-
-   SUBROUTINE p2z_exp( kt, Kmm, Krhs )
-      !!---------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_exp  ***
-      !!
-      !! ** Purpose :   MODELS EXPORT OF BIOGENIC MATTER (POC ''SOFT
-      !!              TISSUE'') AND ITS DISTRIBUTION IN WATER COLUMN
-      !!
-      !! ** Method  : - IN THE SURFACE LAYER POC IS PRODUCED ACCORDING TO
-      !!              NURTRIENTS AVAILABLE AND GROWTH CONDITIONS. NUTRIENT UPTAKE
-      !!              KINETICS FOLLOW MICHAELIS-MENTON FORMULATION. 
-      !!              THE TOTAL PARTICLE AMOUNT PRODUCED, IS DISTRIBUTED IN THE WATER
-      !!              COLUMN BELOW THE SURFACE LAYER.
-      !!---------------------------------------------------------------------
-      !!
-      INTEGER, INTENT( in ) ::   kt             ! ocean time-step index      
-      INTEGER, INTENT( in ) ::   Kmm, Krhs      ! time level indices
-      !!
-      INTEGER  ::   ji, jj, jk, jl, ikt
-      REAL(wp) ::   zgeolpoc, zfact, zwork, ze3t, zsedpocd, zmaskt
-      REAL(wp), DIMENSION(A2D(0))   ::  zsedpoca
-      CHARACTER (len=25) :: charout
-      !!---------------------------------------------------------------------
-      !
-      IF( ln_timing )   CALL timing_start('p2z_exp')
-      !
-      IF( kt == nittrc000 )   CALL p2z_exp_init( Kmm )
-
-      zsedpoca(:,:) = 0.
-
-
-      ! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC
-      ! POC IN THE WATER COLUMN
-      ! (PARTS OF NEWLY FORMED MATTER REMAINING IN THE DIFFERENT
-      ! LAYERS IS DETERMINED BY DMIN3 DEFINED IN sms_p2z.F90
-      ! ----------------------------------------------------------------------
-      DO_3D( 0, 0, 0, 0, 1, jpkm1 )
-         ze3t = 1. / e3t(ji,jj,jk,Kmm)
-         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + ze3t * dmin3(ji,jj,jk) * xksi(ji,jj)
-      END_3D
-
-      ! Find the last level of the water column
-      ! Compute fluxes due to sinking particles (slow)
-   
-
-      zgeolpoc = 0.e0         !     Initialization
-      ! Release of nutrients from the "simple" sediment
-      DO_2D( 0, 0, 0, 0 )
-         ikt = mbkt(ji,jj) 
-         tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) + sedlam * sedpocn(ji,jj) / e3t(ji,jj,ikt,Kmm) 
-         ! Deposition of organic matter in the sediment
-         zwork = vsed * tr(ji,jj,ikt,jpdet,Kmm)
-         zsedpoca(ji,jj) = ( zwork + dminl(ji,jj) * xksi(ji,jj)   &
-            &           - sedlam * sedpocn(ji,jj) - sedlostpoc * sedpocn(ji,jj) ) * rn_Dt
-         zgeolpoc = zgeolpoc + sedlostpoc * sedpocn(ji,jj) * e1e2t(ji,jj)
-      END_2D
-
-      DO_2D( 0, 0, 0, 0 )
-         tr(ji,jj,1,jpno3,Krhs) = tr(ji,jj,1,jpno3,Krhs) + zgeolpoc * cmask(ji,jj) / areacot / e3t(ji,jj,1,Kmm)
-      END_2D
-
-!      CALL lbc_lnk( 'p2zexp', sedpocn, 'T', 1.0_wp )
- 
-      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example
-      IF( lk_iomput )  CALL iom_put( "SEDPOC" , sedpocn )
-
-      
-      ! Time filter and swap of arrays
-      ! ------------------------------
-      IF( l_1st_euler ) THEN        ! Euler time-stepping at first time-step
-        !                           ! (only swap)
-        sedpocn(:,:) = zsedpoca(:,:)
-        !                                              
-      ELSE
-        !
-        DO_2D( 0, 0, 0, 0 )
-           zsedpocd = zsedpoca(ji,jj) - 2. * sedpocn(ji,jj) + sedpocb(ji,jj)      ! time laplacian on tracers
-           sedpocb(ji,jj) = sedpocn(ji,jj) + rn_atfp * zsedpocd                     ! sedpocb <-- filtered sedpocn
-           sedpocn(ji,jj) = zsedpoca(ji,jj)                                       ! sedpocn <-- sedpoca
-        END_2D
-        ! 
-      ENDIF
-      !
-      IF( lrst_trc ) THEN
-         IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) 'p2z_exp : POC in sediment fields written in ocean restart file ',   &
-            &                    'at it= ', kt,' date= ', ndastp
-         IF(lwp) WRITE(numout,*) '~~~~'
-         CALL iom_rstput( kt, nitrst, numrtw, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) )
-         CALL iom_rstput( kt, nitrst, numrtw, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) )
-      ENDIF
-      !
-      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
-         WRITE(charout, FMT="('exp')")
-         CALL prt_ctl_info( charout, cdcomp = 'top' )
-         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
-      ENDIF
-      !
-      IF( ln_timing )  CALL timing_stop('p2z_exp')
-      !
-   END SUBROUTINE p2z_exp
-
-
-   SUBROUTINE p2z_exp_init( Kmm )
-      !!----------------------------------------------------------------------
-      !!                    ***  ROUTINE p4z_exp_init  ***
-      !! ** purpose :   specific initialisation for export
-      !!----------------------------------------------------------------------
-      INTEGER, INTENT(in)  ::  Kmm      ! time level index
-      INTEGER  ::   ji, jj, jk
-      REAL(wp) ::   zmaskt, zfluo, zfluu
-      REAL(wp), DIMENSION(A2D(0)    ) :: zrro, zarea
-      REAL(wp), DIMENSION(A2D(0),jpk) :: zdm0
-      !!---------------------------------------------------------------------
-      !
-      IF(lwp) THEN
-         WRITE(numout,*)
-         WRITE(numout,*) ' p2z_exp: LOBSTER export'
-         WRITE(numout,*) ' ~~~~~~~'
-         WRITE(numout,*) '  compute remineralisation-damping arrays for tracers'
-      ENDIF
-      !
-
-      ! Calculate vertical distribution of newly formed biogenic poc
-      ! in the water column in the case of max. possible bottom depth
-      ! ------------------------------------------------------------
-      zdm0(:,:,:) = 0._wp
-      zrro(:,:) = 1._wp
-      DO_3D( 0, 0, 0, 0, jpkb, jpkm1 )
-         zfluo = ( gdepw(ji,jj,jk  ,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr
-         zfluu = ( gdepw(ji,jj,jk+1,Kmm) / gdepw(ji,jj,jpkb,Kmm) )**xhr
-         IF( zfluo.GT.1. )   zfluo = 1._wp
-         zdm0(ji,jj,jk) = zfluo - zfluu
-         IF( jk <= jpkb-1 )   zdm0(ji,jj,jk) = 0._wp
-         zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk)
-      END_3D
-      !
-      zdm0(:,:,jpk) = zrro(:,:)
-
-      ! Calculate vertical distribution of newly formed biogenic poc
-      ! in the water column with realistic topography (first "dry" layer
-      ! contains total fraction, which has passed to the upper layers)
-      ! ----------------------------------------------------------------------
-      dminl(:,:)   = 0._wp
-      dmin3(:,:,:) = zdm0
-      DO_3D( 0, 0, 0, 0, 1, jpk )
-         IF( tmask(ji,jj,jk) == 0._wp ) THEN
-            dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk)
-            dmin3(ji,jj,jk) = 0._wp
-         ENDIF
-      END_3D
-
-      DO_2D( 0, 0, 0, 0 )
-         IF( tmask(ji,jj,1) == 0 )   dmin3(ji,jj,1) = 0._wp
-      END_2D
-
-      ! Coastal mask 
-      cmask(:,:) = 0._wp
-      DO_2D( 0, 0, 0, 0 )
-         IF( tmask(ji,jj,1) /= 0. ) THEN
-            zmaskt = tmask(ji+1,jj,1) * tmask(ji-1,jj,1) * tmask(ji,jj+1,1) * tmask(ji,jj-1,1) 
-            IF( zmaskt == 0. )   cmask(ji,jj) = 1._wp
-         END IF
-      END_2D
-!      CALL lbc_lnk( 'p2zexp', cmask , 'T', 1.0_wp )      ! lateral boundary conditions on cmask   (sign unchanged)
-      DO_2D( 0, 0, 0, 0 )
-         zarea(ji,jj) = e1e2t(ji,jj) * cmask(ji,jj)  
-      END_2D
-      areacot = glob_sum( 'p2zexp', zarea(:,:) )
-      !
-      IF( ln_rsttr ) THEN
-         CALL iom_get( numrtr, jpdom_auto, 'SEDB'//ctrcnm(jpdet), sedpocb(:,:) )
-         CALL iom_get( numrtr, jpdom_auto, 'SEDN'//ctrcnm(jpdet), sedpocn(:,:) )
-      ELSE
-         sedpocb(:,:) = 0._wp
-         sedpocn(:,:) = 0._wp
-      ENDIF
-      !
-   END SUBROUTINE p2z_exp_init
-
-   INTEGER FUNCTION p2z_exp_alloc()
-      !!----------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_exp_alloc  ***
-      !!----------------------------------------------------------------------
-      ALLOCATE( cmask(A2D(0)) , dminl(A2D(0)) , dmin3(A2D(0),jpk), &
-         &      sedpocb(A2D(0)) , sedpocn(A2D(0)),   STAT=p2z_exp_alloc )
-      IF( p2z_exp_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p2z_exp_alloc : failed to allocate arrays.' )
-      !
-   END FUNCTION p2z_exp_alloc
-
-   !!======================================================================
-END MODULE p2zexp
diff --git a/src/TOP/PISCES/P2Z/p2zopt.F90 b/src/TOP/PISCES/P2Z/p2zopt.F90
deleted file mode 100644
index 4c8268de..00000000
--- a/src/TOP/PISCES/P2Z/p2zopt.F90
+++ /dev/null
@@ -1,195 +0,0 @@
-MODULE p2zopt
-   !!======================================================================
-   !!                         ***  MODULE p2zopt  ***
-   !! TOP :   LOBSTER Compute the light availability in the water column
-   !!======================================================================
-   !! History :    -   !  1995-05  (M. Levy) Original code
-   !!              -   !  1999-09  (J.-M. Andre, M. Levy) 
-   !!              -   !  1999-11  (C. Menkes, M.-A. Foujols) itabe initial
-   !!              -   !  2000-02  (M.A. Foujols) change x**y par exp(y*log(x))
-   !!   NEMO      2.0  !  2007-12  (C. Deltel, G. Madec)  F90
-   !!             3.2  !  2009-04  (C. Ethe, G. Madec)  minor optimisation + style
-   !!----------------------------------------------------------------------
-
-   !!----------------------------------------------------------------------
-   !!   p2z_opt        :   Compute the light availability in the water column
-   !!----------------------------------------------------------------------
-   USE oce_trc         !
-   USE trc
-   USE sms_pisces
-   USE prtctl          ! Print control for debbuging
-
-   IMPLICIT NONE
-   PRIVATE
-
-   PUBLIC   p2z_opt   !
-   PUBLIC   p2z_opt_init   !
-
-   REAL(wp), PUBLIC ::  xkr0      !: water coefficient absorption in red      
-   REAL(wp), PUBLIC ::  xkg0      !: water coefficient absorption in green    
-   REAL(wp), PUBLIC ::  xkrp      !: pigment coefficient absorption in red    
-   REAL(wp), PUBLIC ::  xkgp      !: pigment coefficient absorption in green  
-   REAL(wp), PUBLIC ::  xlr       !: exposant for pigment absorption in red  
-   REAL(wp), PUBLIC ::  xlg       !: exposant for pigment absorption in green 
-   REAL(wp), PUBLIC ::  rpig      !: chla/chla+phea ratio    
-   !                 
-   REAL(wp), PUBLIC ::  rcchl     ! Carbone/Chlorophyl ratio [mgC.mgChla-1]
-   REAL(wp), PUBLIC ::  redf      ! redfield ratio (C:N) for phyto
-   REAL(wp), PUBLIC ::  reddom    ! redfield ratio (C:N) for DOM
-
-   !! * Substitutions
-#  include "do_loop_substitute.h90"
-#  include "domzgr_substitute.h90"
-   !!----------------------------------------------------------------------
-   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
-   !! $Id: p2zopt.F90 15090 2021-07-06 14:25:18Z cetlod $ 
-   !! Software governed by the CeCILL license (see ./LICENSE)
-   !!----------------------------------------------------------------------
-CONTAINS
-
-   SUBROUTINE p2z_opt( kt, Kmm )
-      !!---------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_opt  ***
-      !!
-      !! ** Purpose :   computes the light propagation in the water column
-      !!              and the euphotic layer depth
-      !!
-      !! ** Method  :   local par is computed in w layers using light propagation
-      !!              mean par in t layers are computed by integration
-      !!
-!!gm please remplace the '???' by true comments
-      !! ** Action  :   etot   ???
-      !!                neln   ???
-      !!---------------------------------------------------------------------
-      !!
-      INTEGER, INTENT( in ) ::   kt   ! index of the time stepping
-      INTEGER, INTENT( in ) ::   Kmm  ! time level index
-      !!
-      INTEGER  ::   ji, jj, jk          ! dummy loop indices
-      CHARACTER (len=25) ::   charout   ! temporary character
-      REAL(wp) ::   zpig                ! log of the total pigment
-      REAL(wp) ::   zkr, zkg            ! total absorption coefficient in red and green
-      REAL(wp) ::   zcoef               ! temporary scalar
-      REAL(wp), DIMENSION(A2D(0)    ) :: zpar100, zpar0m
-      REAL(wp), DIMENSION(A2D(0),jpk) :: zparr, zparg
-      !!---------------------------------------------------------------------
-      !
-      IF( ln_timing )   CALL timing_start('p2z_opt')
-      !
-
-      IF( kt == nittrc000 ) THEN
-         IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) ' p2z_opt : LOBSTER optic-model'
-         IF(lwp) WRITE(numout,*) ' ~~~~~~~ '
-      ENDIF
-
-      !                                          ! surface irradiance
-      !                                          ! ------------------
-      IF( ln_dm2dc ) THEN  
-         DO_2D( 0, 0, 0, 0 )
-            zpar0m(ji,jj) = qsr_mean(ji,jj) * 0.43
-         END_2D
-      ELSE  
-         DO_2D( 0, 0, 0, 0 )
-            zpar0m(ji,jj) = qsr(ji,jj) * 0.43
-         END_2D
-      ENDIF
-      zpar100(:,:)   = zpar0m(:,:) * 0.01
-      zparr  (:,:,1) = zpar0m(:,:) * 0.5
-      zparg  (:,:,1) = zpar0m(:,:) * 0.5
-
-      !                                          ! Photosynthetically Available Radiation (PAR)
-      zcoef = 12 * redf / rcchl / rpig           ! --------------------------------------
-      DO_3D( 0, 0, 0, 0, 2, jpk )
-         zpig = LOG(  MAX( TINY(0.), tr(ji,jj,jk-1,jpphy,Kmm) ) * zcoef  )
-         zkr  = xkr0 + xkrp * EXP( xlr * zpig )
-         zkg  = xkg0 + xkgp * EXP( xlg * zpig )
-         zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * e3t(ji,jj,jk-1,Kmm) )
-         zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * e3t(ji,jj,jk-1,Kmm) )
-      END_3D
-      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) ! mean par at t-levels
-         zpig = LOG(  MAX( TINY(0.), tr(ji,jj,jk,jpphy,Kmm) ) * zcoef  )
-         zkr  = xkr0 + xkrp * EXP( xlr * zpig )
-         zkg  = xkg0 + xkgp * EXP( xlg * zpig )
-         zparr(ji,jj,jk) = zparr(ji,jj,jk) / ( zkr * e3t(ji,jj,jk,Kmm) ) * ( 1 - EXP( -zkr * e3t(ji,jj,jk,Kmm) ) )
-         zparg(ji,jj,jk) = zparg(ji,jj,jk) / ( zkg * e3t(ji,jj,jk,Kmm) ) * ( 1 - EXP( -zkg * e3t(ji,jj,jk,Kmm) ) )
-         etot (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 )
-      END_3D
-
-      !                                          ! Euphotic layer
-      !                                          ! --------------
-      neln(:,:) = 1                                   ! euphotic layer level
-      DO_3D( 0, 0, 0, 0, 1, jpkm1 )  ! (i.e. 1rst T-level strictly below EL bottom)
-        IF( etot(ji,jj,jk) >= zpar100(ji,jj) )   neln(ji,jj) = jk + 1 
-      END_3D
-      !                                               ! Euphotic layer depth
-      DO_2D( 0, 0, 0, 0 ) 
-         heup(ji,jj) = gdepw(ji,jj,neln(ji,jj),Kmm)
-      END_2D
-
-
-      IF(sn_cfctl%l_prttrc) THEN      ! print mean trends (used for debugging)
-         WRITE(charout, FMT="('opt')")
-         CALL prt_ctl_info( charout, cdcomp = 'top' )
-         CALL prt_ctl( tab4d_1=tr(:,:,:,:,Kmm), mask1=tmask, clinfo=ctrcnm )
-      ENDIF
-      !
-      IF( ln_timing )   CALL timing_stop('p2z_opt')
-      !
-   END SUBROUTINE p2z_opt
-
-
-   SUBROUTINE p2z_opt_init
-      !!----------------------------------------------------------------------
-      !!                  ***  ROUTINE p2z_opt_init  ***
-      !!
-      !! ** Purpose :  optical parameters 
-      !!
-      !! ** Method  :   Read the namlobopt namelist and check the parameters
-      !!
-      !!----------------------------------------------------------------------
-      INTEGER ::   ios   ! Local integer
-      !!
-      NAMELIST/namlobopt/ xkg0, xkr0, xkgp, xkrp, xlg, xlr, rpig
-      NAMELIST/namlobrat/ rcchl, redf, reddom
-      !!----------------------------------------------------------------------
-
-      READ  ( numnatp_ref, namlobopt, IOSTAT = ios, ERR = 901)
-901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobopt in reference namelist' )
-
-      READ  ( numnatp_cfg, namlobopt, IOSTAT = ios, ERR = 902 )
-902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namlobopt in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobopt )
-
-      IF(lwp) THEN
-         WRITE(numout,*)
-         WRITE(numout,*) ' Namelist namlobopt'
-         WRITE(numout,*) '    green   water absorption coeff                       xkg0  = ', xkg0
-         WRITE(numout,*) '    red water absorption coeff                           xkr0  = ', xkr0
-         WRITE(numout,*) '    pigment red absorption coeff                         xkrp  = ', xkrp
-         WRITE(numout,*) '    pigment green absorption coeff                       xkgp  = ', xkgp
-         WRITE(numout,*) '    green chl exposant                                   xlg   = ', xlg
-         WRITE(numout,*) '    red   chl exposant                                   xlr   = ', xlr
-         WRITE(numout,*) '    chla/chla+phea ratio                                 rpig  = ', rpig
-         WRITE(numout,*) ' '
-      ENDIF
-      !
-      READ  ( numnatp_ref, namlobrat, IOSTAT = ios, ERR = 903)
-903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobrat in reference namelist' )
-
-      READ  ( numnatp_cfg, namlobrat, IOSTAT = ios, ERR = 904 )
-904   IF( ios >  0 ) CALL ctl_nam ( ios , 'namlobrat in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobrat )
-
-      IF(lwp) THEN
-          WRITE(numout,*) ' Namelist namlobrat'
-         WRITE(numout,*) '     carbone/chlorophyl ratio                             rcchl = ', rcchl
-          WRITE(numout,*) '    redfield ratio  c:n for phyto                        redf      =', redf
-          WRITE(numout,*) '    redfield ratio  c:n for DOM                          reddom    =', reddom
-          WRITE(numout,*) ' '
-      ENDIF
-      !
-   END SUBROUTINE p2z_opt_init
-
-   !!======================================================================
-END MODULE p2zopt
diff --git a/src/TOP/PISCES/P2Z/p2zsed.F90 b/src/TOP/PISCES/P2Z/p2zsed.F90
deleted file mode 100644
index 50d7e769..00000000
--- a/src/TOP/PISCES/P2Z/p2zsed.F90
+++ /dev/null
@@ -1,157 +0,0 @@
-MODULE p2zsed
-   !!======================================================================
-   !!                         ***  MODULE p2zsed  ***
-   !! TOP :   PISCES Compute loss of organic matter in the sediments
-   !!======================================================================
-   !! History :    -   !  1995-06 (M. Levy)  original code
-   !!              -   !  2000-12 (E. Kestenare)  clean up
-   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90 + simplifications
-   !!----------------------------------------------------------------------
-   !!   p2z_sed        :  Compute loss of organic matter in the sediments
-   !!----------------------------------------------------------------------
-   USE oce_trc         !
-   USE trd_oce         !
-   USE trdtrc          !
-   USE trc             !
-   USE sms_pisces      !
-   !
-   USE lbclnk          !
-   USE iom             !
-   USE prtctl          ! Print control for debbuging
-
-   IMPLICIT NONE
-   PRIVATE
-
-   PUBLIC   p2z_sed         ! called in ???
-   PUBLIC   p2z_sed_init    ! called in ???
-
-   REAL(wp), PUBLIC ::   sedlam      !: time coefficient of POC remineralization in sediments
-   REAL(wp), PUBLIC ::   sedlostpoc  !: mass of POC lost in sediments 
-   REAL(wp), PUBLIC ::   vsed        !: detritus sedimentation speed [m/s] 
-   REAL(wp), PUBLIC ::   xhr         !: coeff for martin''s remineralisation profile
-
-   !! * Substitutions
-#  include "do_loop_substitute.h90"
-#  include "domzgr_substitute.h90"
-   !!----------------------------------------------------------------------
-   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
-   !! $Id: p2zsed.F90 15090 2021-07-06 14:25:18Z cetlod $ 
-   !! Software governed by the CeCILL license (see ./LICENSE)
-   !!----------------------------------------------------------------------
-CONTAINS
-
-   SUBROUTINE p2z_sed( kt, Kmm, Krhs )
-      !!---------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_sed  ***
-      !!
-      !! ** Purpose :   compute the now trend due to the vertical sedimentation of
-      !!              detritus and add it to the general trend of detritus equations
-      !!
-      !! ** Method  :   this ROUTINE compute not exactly the advection but the
-      !!              transport term, i.e.  dz(wt) and dz(ws)., dz(wtr)
-      !!              using an upstream scheme
-      !!              the now vertical advection of tracers is given by:
-      !!                      dz(tr(:,:,:,:,Kmm) ww) = 1/bt dk+1( e1t e2t vsed (tr(:,:,:,:,Kmm)) )
-      !!              add this trend now to the general trend of tracer (ta,sa,tr(:,:,:,:,Krhs)):
-      !!                             tr(:,:,:,:,Krhs) = tr(:,:,:,:,Krhs) + dz(tr(:,:,:,:,Kmm) ww)
-      !!        
-      !!              IF 'key_diabio' is defined, the now vertical advection
-      !!              trend of passive tracers is saved for futher diagnostics.
-      !!---------------------------------------------------------------------
-      INTEGER, INTENT( in ) ::   kt         ! ocean time-step index      
-      INTEGER, INTENT( in ) ::   Kmm, Krhs  ! time level indices
-      !
-      INTEGER  ::   ji, jj, jk
-      CHARACTER (len=25) :: charout
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d
-      REAL(wp), DIMENSION(A2D(0),jpk) :: zwork
-      REAL(wp) :: ztra
-      !!---------------------------------------------------------------------
-      !
-      IF( ln_timing )   CALL timing_start('p2z_sed')
-      !
-      IF( kt == nittrc000 ) THEN
-         IF(lwp) WRITE(numout,*)
-         IF(lwp) WRITE(numout,*) ' p2z_sed: LOBSTER sedimentation'
-         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
-      ENDIF
-
-      ! sedimentation of detritus  : upstream scheme
-      ! --------------------------------------------
-
-      ! for detritus sedimentation only - jpdet
-      zwork(:,:,1  ) = 0.e0      ! surface value set to zero
-      zwork(:,:,jpk) = 0.e0      ! bottom value  set to zero
-
-      ! tracer flux at w-point: we use -vsed (downward flux)  with simplification : no e1*e2
-      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
-         zwork(ji,jj,jk) = -vsed * tr(ji,jj,jk-1,jpdet,Kmm)
-      END_3D
-
-      ! tracer flux divergence at t-point added to the general trend
-      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
-         ztra  = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm)
-         tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + ztra
-      END_3D
-
-      IF( lk_iomput )  THEN
-         IF( iom_use( "TDETSED" ) ) THEN
-            ALLOCATE( zw2d(A2D(0)) )
-            DO_2D( 0, 0, 0, 0 ) 
-               zw2d(ji,jj)  = - ( zwork(ji,jj,1) - zwork(ji,jj,2) ) * 86400._wp
-            END_2D
-            DO jk = 2, jpkm1
-               DO_2D( 0, 0, 0, 0 ) 
-                  zw2d(ji,jj) = zw2d(ji,jj) - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) * 86400._wp
-               END_2D
-            END DO
-            CALL iom_put( "TDETSED", zw2d )
-            DEALLOCATE( zw2d )
-         ENDIF
-      ENDIF
-      !
-
-      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
-         WRITE(charout, FMT="('sed')")
-         CALL prt_ctl_info( charout, cdcomp = 'top' )
-         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
-      ENDIF
-      !
-      IF( ln_timing )   CALL timing_stop('p2z_sed')
-      !
-   END SUBROUTINE p2z_sed
-
-
-   SUBROUTINE p2z_sed_init
-      !!----------------------------------------------------------------------
-      !!                  ***  ROUTINE p2z_sed_init  ***
-      !!
-      !! ** Purpose :   Parameters from aphotic layers to sediment
-      !!
-      !! ** Method  :   Read the namlobsed namelist and check the parameters
-      !!
-      !!----------------------------------------------------------------------
-      INTEGER ::   ios   ! Local integer
-      !!
-      NAMELIST/namlobsed/ sedlam, sedlostpoc, vsed, xhr
-      !!----------------------------------------------------------------------
-      !
-      READ  ( numnatp_ref, namlobsed, IOSTAT = ios, ERR = 901)
-901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlosed in reference namelist' )
-      READ  ( numnatp_cfg, namlobsed, IOSTAT = ios, ERR = 902 )
-902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobsed in configuration namelist' )
-      IF(lwm) WRITE ( numonp, namlobsed )
-      !
-      IF(lwp) THEN
-          WRITE(numout,*) '   Namelist namlobsed'
-          WRITE(numout,*) '      time coeff of POC in sediments                sedlam    =', sedlam
-          WRITE(numout,*) '      Sediment geol loss for POC                    sedlostpoc=', sedlostpoc
-          WRITE(numout,*) '      detritus sedimentation speed                  vsed      =', 86400 * vsed  , ' d'
-          WRITE(numout,*) '      coeff for martin''s remineralistion           xhr       =', xhr
-          WRITE(numout,*) ' '
-      ENDIF
-      !
-   END SUBROUTINE p2z_sed_init
-
-   !!======================================================================
-END MODULE p2zsed
diff --git a/src/TOP/PISCES/P2Z/p2zsms.F90 b/src/TOP/PISCES/P2Z/p2zsms.F90
deleted file mode 100644
index ed0fc90e..00000000
--- a/src/TOP/PISCES/P2Z/p2zsms.F90
+++ /dev/null
@@ -1,71 +0,0 @@
-MODULE p2zsms
-   !!======================================================================
-   !!                         ***  MODULE p2zsms  ***
-   !! TOP :   Time loop of LOBSTER model
-   !!======================================================================
-   !! History :   1.0  !            M. Levy
-   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  revised architecture
-   !!----------------------------------------------------------------------
-
-   !!----------------------------------------------------------------------
-   !!   p2zsms        :  Time loop of passive tracers sms
-   !!----------------------------------------------------------------------
-   USE oce_trc          !
-   USE trc
-   USE sms_pisces
-   USE p2zbio
-   USE p2zopt
-   USE p2zsed
-   USE p2zexp
-   USE trd_oce
-   USE trdtrc_oce
-   USE trdtrc
-   USE trdmxl_trc
-
-   IMPLICIT NONE
-   PRIVATE
-
-   PUBLIC   p2z_sms    ! called in p2zsms.F90
-
-   !!----------------------------------------------------------------------
-   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
-   !! $Id: p2zsms.F90 12377 2020-02-12 14:39:06Z acc $ 
-   !! Software governed by the CeCILL license (see ./LICENSE)
-   !!----------------------------------------------------------------------
-CONTAINS
-
-   SUBROUTINE p2z_sms( kt, Kmm, Krhs )
-      !!---------------------------------------------------------------------
-      !!                     ***  ROUTINE p2z_sms  ***
-      !!
-      !! ** Purpose :  Managment of the call to Biological sources and sinks 
-      !!               routines of LOBSTER bio-model 
-      !!
-      !! ** Method  : - ???
-      !! --------------------------------------------------------------------
-      INTEGER, INTENT( in ) ::   kt            ! ocean time-step index      
-      INTEGER, INTENT( in ) ::   Kmm, Krhs     ! ocean time level index      
-      !
-      INTEGER ::   jn   ! dummy loop index
-      !! --------------------------------------------------------------------
-      !
-      IF( ln_timing )   CALL timing_start('p2z_sms')
-      !
-      CALL p2z_opt( kt, Kmm       )      ! optical model
-      CALL p2z_bio( kt, Kmm, Krhs )      ! biological model
-      CALL p2z_sed( kt, Kmm, Krhs )      ! sedimentation model
-      CALL p2z_exp( kt, Kmm, Krhs )      ! export
-      !
-      IF( l_trdtrc ) THEN
-         DO jn = jp_pcs0, jp_pcs1
-           CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm )   ! save trends
-         END DO
-      END IF
-      !
-      IF ( lwm .AND. kt == nittrc000 ) CALL FLUSH    ( numonp )     ! flush output namelist PISCES
-      IF( ln_timing )   CALL timing_stop('p2z_sms')
-      !
-   END SUBROUTINE p2z_sms
-
-   !!======================================================================
-END MODULE p2zsms
diff --git a/src/TOP/PISCES/P4Z/p2zlim.F90 b/src/TOP/PISCES/P4Z/p2zlim.F90
new file mode 100644
index 00000000..091070d0
--- /dev/null
+++ b/src/TOP/PISCES/P4Z/p2zlim.F90
@@ -0,0 +1,257 @@
+MODULE p2zlim
+   !!======================================================================
+   !!                         ***  MODULE p2zlim  ***
+   !! TOP :   Computes the nutrient limitation terms of phytoplankton
+   !!======================================================================
+   !! History :   1.0  !  2004     (O. Aumont) Original code
+   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
+   !!             3.4  !  2011-04  (O. Aumont, C. Ethe) Limitation for iron modelled in quota 
+   !!----------------------------------------------------------------------
+   !!   p2z_lim        :   Compute the nutrients limitation terms 
+   !!   p2z_lim_init   :   Read the namelist 
+   !!----------------------------------------------------------------------
+   USE oce_trc         ! Shared ocean-passive tracers variables
+   USE trc             ! Tracers defined
+   USE sms_pisces      ! PISCES variables
+   USE iom             ! I/O manager
+
+   IMPLICIT NONE
+   PRIVATE
+
+   PUBLIC p2z_lim           ! called in p4zbio.F90 
+   PUBLIC p2z_lim_init      ! called in trcsms_pisces.F90 
+   PUBLIC p2z_lim_alloc     ! called in trcini_pisces.F90
+
+   !! * Shared module variables
+   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation   
+   REAL(wp), PUBLIC ::  concbno3    !:  NO3 half saturation  for bacteria 
+   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto 
+   REAL(wp), PUBLIC ::  xsizephy    !:  Minimum size criteria for nanophyto
+   REAL(wp), PUBLIC ::  xsizern     !:  Size ratio for nanophytoplankton
+   REAL(wp), PUBLIC ::  xkdoc       !:  2nd half-sat. of DOC remineralization  
+   REAL(wp), PUBLIC ::  concbfe     !:  Fe half saturation for bacteria 
+   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio 
+
+   !!* Phytoplankton limitation terms
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: Nanophyto limitation by NO3
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: Nutrient limitation term of nanophytoplankton
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: Bacterial limitation term
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: Bacterial limitation term
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: Nanophyto limitation by Iron
+
+   LOGICAL  :: l_dia_nut_lim, l_dia_size_lim, l_dia_fracal
+
+   !! * Substitutions
+#  include "do_loop_substitute.h90"
+   !!----------------------------------------------------------------------
+   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
+   !! $Id: p2zlim.F90 10069 2018-08-28 14:12:24Z nicolasmartin $ 
+   !! Software governed by the CeCILL license (see ./LICENSE)
+   !!----------------------------------------------------------------------
+CONTAINS
+
+   SUBROUTINE p2z_lim( kt, knt, Kbb, Kmm )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_lim  ***
+      !!
+      !! ** Purpose :   Compute the co-limitations by the various nutrients
+      !!                for the unique phytoplankton species 
+      !!
+      !! ** Method  : - Limitation is computed according to Monod formalism
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in)  :: kt, knt
+      INTEGER, INTENT(in)  :: Kbb, Kmm      ! time level indices
+      !
+      INTEGER  ::   ji, jj, jk
+      REAL(wp) ::   zcoef, zconc0n, zconcnf, zlim1, zlim2, zlim3
+      REAL(wp) ::   zbiron, ztem1, ztem2, zetot1, zetot2, zsize
+      REAL(wp) ::   zferlim, zno3
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )   CALL timing_start('p2z_lim')
+      !
+      IF( kt == nittrc000 )  THEN
+         l_dia_nut_lim  = iom_use( "LNnut"   )
+         l_dia_size_lim = iom_use( "SIZEN"   )
+         l_dia_fracal   = iom_use( "xfracal" )
+      ENDIF
+      !
+      sizena(:,:,:) = 1.0
+      !
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+
+         ! Tuning of the iron concentration to a minimum level that is set to the detection limit
+         !-------------------------------------
+         zno3    = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6
+         zferlim = MAX( 5e-11 * zno3 * zno3, 2e-11 )
+         zferlim = MIN( zferlim, 5e-11 )
+         tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim )
+         
+         ! Computation of a variable Ks for NO3 on phyto taking into account
+         ! that increasing biomass is made of generally bigger cells
+         ! The allometric relationship is classical.
+         !------------------------------------------------
+         zsize    = sizen(ji,jj,jk)**0.81
+         zconc0n  = concnno3 * zsize
+         zconcnf  = concnfer * zsize
+
+         ! Nanophytoplankton
+         zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk)
+
+         ! Michaelis-Menten Limitation term by nutrients of
+         ! heterotrophic bacteria
+         ! -------------------------------------------------
+         zlim1  = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) )
+         zlim2  = zbiron / ( concbfe + zbiron )
+         zlim3  = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) )
+
+         ! Xlimbac is used for DOC solubilization whereas xlimbacl
+         ! is used for all the other bacterial-dependent terms
+         ! -------------------------------------------------------
+         xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2)
+         xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim3
+
+         ! Michaelis-Menten Limitation term by nutrients: Nanophyto
+         ! Optimal parameterization by Smith and Pahlow series of 
+         ! papers is used. Optimal allocation is supposed independant
+         ! for all nutrients. 
+         ! --------------------------------------------------------
+
+         ! Limitation of nanophytoplankton growth
+         xnanono3(ji,jj,jk) = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) )
+         xlimnfe (ji,jj,jk) = zbiron / ( zbiron + zconcnf )
+         xlimphy (ji,jj,jk) = MIN( xlimnfe(ji,jj,jk), xnanono3(ji,jj,jk) )
+      END_3D
+
+      ! Size estimation of phytoplankton based on total biomass
+      ! Assumes that larger biomass implies addition of larger cells
+      ! ------------------------------------------------------------
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) )
+         sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef )
+      END_3D
+
+
+      ! Compute the fraction of nanophytoplankton that is made of calcifiers
+      ! This is a purely adhoc formulation described in Aumont et al. (2015)
+      ! This fraction depends on nutrient limitation, light, temperature
+      ! --------------------------------------------------------------------
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8)
+         ztem2  = ts(ji,jj,jk,jp_tem,Kmm) - 10.
+         zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) 
+         zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) )
+
+         xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)                              &
+            &                       * ztem1 / ( 0.1 + ztem1 )                        &
+            &                       * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) / xsizephy )  &
+            &                       * zetot1 * zetot2                                &
+            &                       * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )            &
+            &                       * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
+         xfracal(ji,jj,jk) = MIN( 0.8 , xfracal(ji,jj,jk) )
+         xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) )
+      END_3D
+      !
+      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics
+        !
+        IF( l_dia_fracal ) THEN   ! fraction of calcifiers
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+          zw3d(A2D(0),1:jpkm1) = xfracal(A2D(0),1:jpkm1) * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "xfracal",  zw3d)
+          DEALLOCATE( zw3d )
+        ENDIF
+        !
+        IF( l_dia_nut_lim ) THEN   ! Nutrient limitation term
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+          zw3d(A2D(0),1:jpkm1) = xlimphy(A2D(0),1:jpkm1) * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "LNnut",  zw3d)
+          DEALLOCATE( zw3d )
+        ENDIF
+        !
+        IF( l_dia_size_lim ) THEN   ! Size limitation term
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+          zw3d(A2D(0),1:jpkm1) = sizen(A2D(0),1:jpkm1) * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "SIZEN",  zw3d)
+          DEALLOCATE( zw3d )
+        ENDIF
+        !
+      ENDIF
+      !
+      IF( ln_timing )   CALL timing_stop('p2z_lim')
+      !
+   END SUBROUTINE p2z_lim
+
+
+   SUBROUTINE p2z_lim_init
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE p2z_lim_init  ***
+      !!
+      !! ** Purpose :   Initialization of the nutrient limitation parameters
+      !!
+      !! ** Method  :   Read the namp2zlim namelist and check the parameters
+      !!      called at the first timestep (nittrc000)
+      !!
+      !! ** input   :   Namelist namp2zlim
+      !!
+      !!----------------------------------------------------------------------
+      INTEGER ::   ios   ! Local integer
+
+      ! Namelist block
+      NAMELIST/namp2zlim/ concnno3, concbno3, concnfer, xsizephy, xsizern,  &
+         &                concbfe, xkdoc, caco3r, oxymin
+      !!----------------------------------------------------------------------
+      !
+      IF(lwp) THEN
+         WRITE(numout,*)
+         WRITE(numout,*) 'p2z_lim_init : initialization of nutrient limitations'
+         WRITE(numout,*) '~~~~~~~~~~~~'
+      ENDIF
+      !
+      READ  ( numnatp_ref, namp2zlim, IOSTAT = ios, ERR = 901)
+901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp2zlim in reference namelist' )
+      READ  ( numnatp_cfg, namp2zlim, IOSTAT = ios, ERR = 902 )
+902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp2zlim in configuration namelist' )
+      IF(lwm) WRITE( numonp, namp2zlim )
+
+      !
+      IF(lwp) THEN                         ! control print
+         WRITE(numout,*) '   Namelist : namp2zlim'
+         WRITE(numout,*) '      mean rainratio                           caco3r    = ', caco3r
+         WRITE(numout,*) '      NO3 half saturation of phyto             concnno3  = ', concnno3
+         WRITE(numout,*) '      Iron half saturation for nanophyto       concnfer  = ', concnfer
+         WRITE(numout,*) '      Fe half saturation for bacteria          concbfe   = ', concbfe
+         WRITE(numout,*) '      half-sat. of DOC remineralization        xkdoc     = ', xkdoc
+         WRITE(numout,*) '      size ratio for phytoplankton             xsizern   = ', xsizern
+         WRITE(numout,*) '      NO3 half saturation of bacteria          concbno3  = ', concbno3
+         WRITE(numout,*) '      Minimum size criteria for phyto          xsizephy  = ', xsizephy
+         WRITE(numout,*) '      halk saturation constant for anoxia      oxymin    =' , oxymin
+      ENDIF
+      !
+      xfracal (:,:,jpk) = 0._wp
+      xlimphy (:,:,jpk) = 0._wp
+      !
+   END SUBROUTINE p2z_lim_init
+
+
+   INTEGER FUNCTION p2z_lim_alloc()
+      !!----------------------------------------------------------------------
+      !!                     ***  ROUTINE p5z_lim_alloc  ***
+      !! 
+      !            Allocation of the arrays used in this module
+      !!----------------------------------------------------------------------
+      USE lib_mpp , ONLY: ctl_stop
+      !!----------------------------------------------------------------------
+
+      !*  Biological arrays for phytoplankton growth
+      ALLOCATE( xnanono3(A2D(0),jpk), xlimphy (A2D(0),jpk),       &
+         &      xlimnfe (A2D(0),jpk), xlimbac (A2D(0),jpk),       &
+         &      xlimbacl(A2D(0),jpk),                       STAT=p2z_lim_alloc )
+ 
+      !
+      IF( p2z_lim_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p2z_lim_alloc : failed to allocate arrays.' )
+      !
+   END FUNCTION p2z_lim_alloc
+
+   !!======================================================================
+END MODULE p2zlim
diff --git a/src/TOP/PISCES/P4Z/p2zmicro.F90 b/src/TOP/PISCES/P4Z/p2zmicro.F90
new file mode 100644
index 00000000..280a9733
--- /dev/null
+++ b/src/TOP/PISCES/P4Z/p2zmicro.F90
@@ -0,0 +1,306 @@
+MODULE p2zmicro
+   !!======================================================================
+   !!                         ***  MODULE p2zmicro  ***
+   !! TOP :   REDUCED PISCES Compute the sources/sinks for microzooplankton
+   !!======================================================================
+   !! History :   1.0  !  2004     (O. Aumont) Original code
+   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
+   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron
+   !!----------------------------------------------------------------------
+   !!   p2z_micro      : Compute the sources/sinks for microzooplankton
+   !!   p2z_micro_init : Initialize and read the appropriate namelist
+   !!----------------------------------------------------------------------
+   USE oce_trc         ! shared variables between ocean and passive tracers
+   USE trc             ! passive tracers common variables 
+   USE sms_pisces      ! PISCES Source Minus Sink variables
+   USE p2zprod         ! production
+   USE p4zsink         ! sedimentation of particles
+   USE iom             ! I/O manager
+   USE prtctl          ! print control for debugging
+
+   IMPLICIT NONE
+   PRIVATE
+
+   !! * Shared module variables
+   PUBLIC   p2z_micro         ! called in p2zbio.F90
+   PUBLIC   p2z_micro_init    ! called in trcsms_pisces.F90
+
+   REAL(wp), PUBLIC ::   part        !: part of calcite not dissolved in microzoo guts
+   REAL(wp), PUBLIC ::   xprefc      !: microzoo preference for POC 
+   REAL(wp), PUBLIC ::   xprefn      !: microzoo preference for nanophyto
+   REAL(wp), PUBLIC ::   xprefz      !: microzoo preference for microzooplankton
+   REAL(wp), PUBLIC ::   xthreshphy  !: nanophyto threshold for microzooplankton 
+   REAL(wp), PUBLIC ::   xthreshpoc  !: poc threshold for microzooplankton 
+   REAL(wp), PUBLIC ::   xthreshzoo  !: microzoo threshold for microzooplankton 
+   REAL(wp), PUBLIC ::   xthresh     !: feeding threshold for microzooplankton 
+   REAL(wp), PUBLIC ::   resrat      !: exsudation rate of microzooplankton
+   REAL(wp), PUBLIC ::   mzrat       !: microzooplankton mortality rate 
+   REAL(wp), PUBLIC ::   grazrat     !: maximal microzoo grazing rate
+   REAL(wp), PUBLIC ::   xkgraz      !: Half-saturation constant of assimilation
+   REAL(wp), PUBLIC ::   unass       !: Non-assimilated part of food
+   REAL(wp), PUBLIC ::   sigma1      !: Fraction of microzoo excretion as DOM 
+   REAL(wp), PUBLIC ::   epsher      !: growth efficiency for grazing 1 
+   REAL(wp), PUBLIC ::   epshermin   !: minimum growth efficiency for grazing 1
+
+   LOGICAL          ::   l_dia_graz1, l_dia_lprodz
+
+   !! * Substitutions
+#  include "do_loop_substitute.h90"
+   !!----------------------------------------------------------------------
+   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
+   !! $Id: p2zmicro.F90 15459 2021-10-29 08:19:18Z cetlod $ 
+   !! Software governed by the CeCILL license (see ./LICENSE)
+   !!----------------------------------------------------------------------
+CONTAINS
+
+   SUBROUTINE p2z_micro( kt, knt, Kbb, Krhs )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_micro  ***
+      !!
+      !! ** Purpose :   Compute the sources/sinks for microzooplankton
+      !!                This includes ingestion and assimilation, flux feeding
+      !!                and mortality. We use a passive prey switching  
+      !!                parameterization.
+      !!                All living compartments smaller than microzooplankton
+      !!                are potential preys of microzooplankton
+      !!
+      !! ** Method  : - ???
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in) ::   kt    ! ocean time step
+      INTEGER, INTENT(in) ::   knt   ! ??? 
+      INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices
+      !
+      INTEGER  :: ji, jj, jk
+      REAL(wp) :: zcompaz , zcompaph, zcompapoc
+      REAL(wp) :: zgraze, zdenom, zfact, zfood, zfoodlim, zbeta
+      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn
+      REAL(wp) :: zgrarem, zgrapoc, zprcaca, zmortz
+      REAL(wp) :: zrespz, ztortz, zgrasratn
+      REAL(wp) :: zgraznc, zgrazz, zgrazpoc
+      REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmptot, zproport, zproport2
+      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zgrazing
+      CHARACTER (len=25) :: charout
+
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )   CALL timing_start('p2z_micro')
+      !
+      IF( kt == nittrc000 )  THEN
+         l_dia_graz1  = iom_use( "GRAZ1" )
+      ENDIF
+      IF( l_dia_graz1 ) THEN
+         ALLOCATE( zgrazing(A2D(0),jpk) ) 
+      ENDIF
+      !
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - 1.e-9 ), 0.e0 )
+         zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz
+
+         ! Proportion of diatoms that are within the size range
+         ! accessible to microzooplankton. 
+         zproport  = MAX(sizen(ji,jj,jk)/3.0,1.0)**(-0.48)*(1.0 - (sizen(ji,jj,jk)**2.0 - 1.0) / 160.0)
+         zproport2 = MIN(1.0, ( wsbio2 - wsbio3(ji,jj,jk) ) / ( wsbio2 - wsbio ) )
+
+         !  linear mortality of mesozooplankton
+         !  A michaelis menten modulation term is used to avoid extinction of 
+         !  microzooplankton at very low food concentrations. Mortality is 
+         !  enhanced in low O2 waters
+         !  -----------------------------------------------------------------
+         zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
+            &   + 3. * nitrfac(ji,jj,jk) )
+
+         !  Zooplankton quadratic mortality. A square function has been selected with
+         !  to mimic predation and disease (density dependent mortality). It also tends
+         !  to stabilise the model
+         !  -------------------------------------------------------------------------
+         ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
+         zmortz = ztortz + zrespz
+
+         !   Computation of the abundance of the preys
+         !   A threshold can be specified in the namelist
+         !   Diatoms have a specific treatment. WHen concentrations 
+         !   exceed a certain value, diatoms are suppposed to be too 
+         !   big for microzooplankton.
+         !   --------------------------------------------------------
+         zcompaph  = zproport * MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 )
+         zcompapoc = zproport2 * MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 )
+         zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 )
+ 
+         ! Microzooplankton grazing
+         ! The total amount of food is the sum of all preys accessible to mesozooplankton 
+         ! multiplied by their food preference
+         ! A threshold can be specified in the namelist (xthresh). However, when food 
+         ! concentration is close to this threshold, it is decreased to avoid the 
+         ! accumulation of food in the mesozoopelagic domain
+         ! -------------------------------------------------------------------------------
+         zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefz * zcompaz
+         zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
+         zdenom    = zfoodlim / ( xkgraz + zfoodlim )
+         zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
+
+         ! An active switching parameterization is used here.
+         ! We don't use the KTW parameterization proposed by 
+         ! Vallina et al. because it tends to produce too steady biomass
+         ! composition and the variance of Chl is too low as it grazes
+         ! too strongly on winning organisms. We use a generalized
+         ! switching parameterization proposed by Morozov and 
+         ! Petrovskii (2013)
+         ! ------------------------------------------------------------  
+         ! The width of the selection window is increased when preys
+         ! have low abundance, .i.e. zooplankton become less specific 
+         ! to avoid starvation.
+         ! ----------------------------------------------------------
+         ztmp1 = xprefn * zcompaph**2
+         ztmp2 = xprefc * zcompapoc**2
+         ztmp3 = xprefz * zcompaz**2
+         ztmptot = ztmp1 + ztmp2 + ztmp3 + rtrn
+         ztmp1 = ztmp1 / ztmptot
+         ztmp2 = ztmp2 / ztmptot
+         ztmp3 = ztmp3 / ztmptot
+
+         ! Ingestion terms on the different preys of microzooplankton
+         zgraznc   = zgraze   * ztmp1 * zdenom  ! Nanophytoplankton
+         zgrazpoc  = zgraze   * ztmp2 * zdenom  ! POC
+         zgrazz    = zgraze   * ztmp3 * zdenom  ! Microzoo
+
+         ! Ingestion terms on the iron content of the different preys
+         ! Total ingestion rate in C, Fe, N units
+         zgraztotc = zgraznc + zgrazpoc + zgrazz
+         IF( l_dia_graz1 )   zgrazing(ji,jj,jk) = zgraztotc
+         zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazz
+
+         !   Stoichiometruc ratios of the food ingested by zooplanton 
+         !   --------------------------------------------------------
+         zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn )
+
+         ! Microzooplankton efficiency. 
+         ! We adopt a formulation proposed by Mitra et al. (2007)
+         ! The gross growth efficiency is controled by the most limiting nutrient.
+         ! Growth is also further decreased when the food quality is poor. This is currently
+         ! hard coded : it can be decreased by up to 50% (zepsherq)
+         ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 
+         ! Fulton, 2012)
+         ! -----------------------------------------------------------------------------
+         zepshert  =  MIN( 1., zgrasratn )
+         zbeta     =  MAX(0., (epsher - epshermin) )
+         ! Food quantity deprivation of the GGE
+         zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )
+         ! Food quality deprivation of the GGE
+         zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 )
+         ! Actual GGE of microzooplankton
+         zepsherv  = zepsherf * zepshert * zepsherq
+         ! Excretion of C, N, P
+         zgrarem   = zgraztotc * ( 1. - zepsherv - unass ) + ( 1. - epsher - unass ) / ( 1. - epsher ) * ztortz
+         ! Egestion of C, N, P
+         zgrapoc   = zgraztotc * unass + unass / ( 1. - epsher ) * ztortz + zrespz
+
+         !  Update of the TRA arrays
+         !  ------------------------
+         ! Fraction of excretion as inorganic nutrients and DIC
+         zgrarsig  = zgrarem * sigma1
+         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zgrarsig
+         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgrarem - zgrarsig
+         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgrarem * feratz
+         !
+         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - (o2ut + o2nit) * zgrarsig
+         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarsig
+         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - rno3 * zgrarsig
+         !   Update the arrays TRA which contain the biological sources and sinks
+         !   --------------------------------------------------------------------
+         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc - zgrazz 
+         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc
+         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zgrapoc - zgrazpoc
+         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc
+         conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc
+         !
+         ! Calcite remineralization due to zooplankton activity
+         ! part of the ingested calcite is not dissolving in the acidic gut
+         ! ----------------------------------------------------------------
+         zprcaca = xfracal(ji,jj,jk) * zgraznc
+         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca * part  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
+         !
+         zprcaca = part * zprcaca
+         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprcaca
+         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca
+      END_3D
+      !
+      IF( lk_iomput .AND. knt == nrdttrc ) THEN
+        !
+        IF( l_dia_graz1 ) THEN  !   Total grazing of phyto by zooplankton
+            zgrazing(A2D(0),jpk) = 0._wp
+            DO_3D( 0, 0, 0, 0, 1, jpkm1)
+               zgrazing(ji,jj,jk) = zgrazing(ji,jj,jk) *  1.e+3 * rfact2r * tmask(ji,jj,jk) ! conversion in mol/m2/s
+            END_3D
+            CALL iom_put( "GRAZ1" , zgrazing )
+            DEALLOCATE( zgrazing )
+        ENDIF
+        !
+      ENDIF
+      !
+      IF(sn_cfctl%l_prttrc) THEN      ! print mean trends (used for debugging)
+         WRITE(charout, FMT="('micro')")
+         CALL prt_ctl_info( charout, cdcomp = 'top' )
+         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+      ENDIF
+      !
+      IF( ln_timing )   CALL timing_stop('p2z_micro')
+      !
+   END SUBROUTINE p2z_micro
+
+
+   SUBROUTINE p2z_micro_init
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE p2z_micro_init  ***
+      !!
+      !! ** Purpose :   Initialization of microzooplankton parameters
+      !!
+      !! ** Method  :   Read the namp2zzoo namelist and check the parameters
+      !!                called at the first timestep (nittrc000)
+      !!
+      !! ** input   :   Namelist namp2zzoo
+      !!
+      !!----------------------------------------------------------------------
+      INTEGER ::   ios   ! Local integer
+      !
+      NAMELIST/namp2zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, &
+         &                xprefz, xthreshphy, xthreshpoc, xthreshzoo, &
+         &                xthresh, xkgraz, epsher, epshermin, sigma1, unass
+      !!----------------------------------------------------------------------
+      !
+      IF(lwp) THEN
+         WRITE(numout,*) 
+         WRITE(numout,*) 'p2z_micro_init : Initialization of microzooplankton parameters'
+         WRITE(numout,*) '~~~~~~~~~~~~~~'
+      ENDIF
+      !
+      READ  ( numnatp_ref, namp2zzoo, IOSTAT = ios, ERR = 901)
+901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp2zzoo in reference namelist' )
+
+      READ  ( numnatp_cfg, namp2zzoo, IOSTAT = ios, ERR = 902 )
+902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp2zzoo in configuration namelist' )
+      IF(lwm) WRITE( numonp, namp2zzoo )
+      !
+      IF(lwp) THEN                         ! control print
+         WRITE(numout,*) '   Namelist : namp2zzoo'
+         WRITE(numout,*) '      part of calcite not dissolved in microzoo guts  part        =', part
+         WRITE(numout,*) '      microzoo preference for POC                     xprefc      =', xprefc
+         WRITE(numout,*) '      microzoo preference for nano                    xprefn      =', xprefn
+         WRITE(numout,*) '      microzoo preference for microzooplankton        xprefz      =', xprefz
+         WRITE(numout,*) '      nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
+         WRITE(numout,*) '      poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
+         WRITE(numout,*) '      microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
+         WRITE(numout,*) '      feeding threshold for microzooplankton          xthresh     =', xthresh
+         WRITE(numout,*) '      exsudation rate of microzooplankton             resrat      =', resrat
+         WRITE(numout,*) '      microzooplankton mortality rate                 mzrat       =', mzrat
+         WRITE(numout,*) '      maximal microzoo grazing rate                   grazrat     =', grazrat
+         WRITE(numout,*) '      non assimilated fraction of P by microzoo       unass       =', unass
+         WRITE(numout,*) '      Efficicency of microzoo growth                  epsher      =', epsher
+         WRITE(numout,*) '      Minimum efficicency of microzoo growth          epshermin   =', epshermin
+         WRITE(numout,*) '      Fraction of microzoo excretion as DOM           sigma1      =', sigma1
+         WRITE(numout,*) '      half saturation constant for grazing 1          xkgraz      =', xkgraz
+      ENDIF
+      !
+   END SUBROUTINE p2z_micro_init
+
+   !!======================================================================
+END MODULE p2zmicro
diff --git a/src/TOP/PISCES/P4Z/p2zmort.F90 b/src/TOP/PISCES/P4Z/p2zmort.F90
new file mode 100644
index 00000000..7579498a
--- /dev/null
+++ b/src/TOP/PISCES/P4Z/p2zmort.F90
@@ -0,0 +1,140 @@
+MODULE p2zmort
+   !!======================================================================
+   !!                         ***  MODULE p2zmort  ***
+   !! TOP :   PISCES Compute the mortality terms for phytoplankton
+   !!======================================================================
+   !! History :   1.0  !  2002     (O. Aumont)  Original code
+   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
+   !!----------------------------------------------------------------------
+   !!   p4z_mort       : Compute the mortality terms for phytoplankton
+   !!   p4z_mort_init  : Initialize the mortality params for phytoplankton
+   !!----------------------------------------------------------------------
+   USE oce_trc         ! shared variables between ocean and passive tracers
+   USE trc             ! passive tracers common variables 
+   USE sms_pisces      ! PISCES Source Minus Sink variables
+   USE p2zlim          ! Phytoplankton limitation terms
+   USE prtctl          ! print control for debugging
+
+   IMPLICIT NONE
+   PRIVATE
+
+   PUBLIC   p2z_mort           ! Called from p4zbio.F90 
+   PUBLIC   p2z_mort_init      ! Called from trcini_pisces.F90 
+
+   REAL(wp), PUBLIC ::   wchln    !: Quadratic mortality rate of nanophytoplankton
+   REAL(wp), PUBLIC ::   mpratn   !: Linear mortality rate of nanophytoplankton
+
+   !! * Substitutions
+#  include "do_loop_substitute.h90"
+   !!----------------------------------------------------------------------
+   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
+   !! $Id: p4zmort.F90 15459 2021-10-29 08:19:18Z cetlod $ 
+   !! Software governed by the CeCILL license (see ./LICENSE)
+   !!----------------------------------------------------------------------
+CONTAINS
+
+   SUBROUTINE p2z_mort( kt, Kbb, Krhs )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p4z_mort_nano  ***
+      !!
+      !! ** Purpose :   Compute the mortality terms for nanophytoplankton
+      !!
+      !! ** Method  :   Both quadratic and simili linear mortality terms
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in) ::   kt ! ocean time step
+      INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices
+      !!---------------------------------------------------------------------
+      !
+      INTEGER  ::   ji, jj, jk
+      REAL(wp) ::   zcompaph, zprcaca
+      REAL(wp) ::   ztortp , zrespp , zmortp, zlim1, zlim2 
+      CHARACTER (len=25) ::   charout
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )   CALL timing_start('p2z_mort')
+      !
+      prodcal(:,:,:) = 0._wp   ! calcite production variable set to zero
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-9 ), 0.e0 )
+
+         ! Quadratic mortality of nano due to aggregation during
+         ! blooms (Doney et al. 1996)
+         ! -----------------------------------------------------
+         zlim2   = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk)
+         zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * tr(ji,jj,jk,jpphy,Kbb)
+         zrespp  = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph
+
+         ! Phytoplankton linear mortality
+         ! A michaelis-menten like term is introduced to avoid 
+         ! extinction of nanophyto in highly limited areas
+         ! ----------------------------------------------------
+         ztortp = mpratn * xstep * zcompaph / ( xkmort + tr(ji,jj,jk,jpphy,Kbb) ) * tr(ji,jj,jk,jpphy,Kbb)
+
+         zmortp = zrespp + ztortp
+         
+         !   Update the arrays TRA which contains the biological sources and sinks
+         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zmortp
+
+         ! Production PIC particles due to mortality
+         zprcaca = xfracal(ji,jj,jk) * zmortp
+         prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo)
+
+         ! POC associated with the shell is supposed to be routed to 
+         ! big particles because of the ballasting effect
+         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprcaca
+         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - 2. * zprcaca
+         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortp
+         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortp
+         !
+      END_3D
+      !
+       IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
+         WRITE(charout, FMT="('nano')")
+         CALL prt_ctl_info( charout, cdcomp = 'top' )
+         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+       ENDIF
+      !
+      IF( ln_timing )   CALL timing_stop('p2z_mort')
+      !
+   END SUBROUTINE p2z_mort
+
+   SUBROUTINE p2z_mort_init
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE p2z_mort_init  ***
+      !!
+      !! ** Purpose :   Initialization of phytoplankton parameters
+      !!
+      !! ** Method  :   Read the namp4zmort namelist and check the parameters
+      !!              called at the first timestep
+      !!
+      !! ** input   :   Namelist namp2zmort
+      !!
+      !!----------------------------------------------------------------------
+      INTEGER ::   ios   ! Local integer
+      !
+      NAMELIST/namp2zmort/ wchln, mpratn
+      !!----------------------------------------------------------------------
+      !
+      IF(lwp) THEN
+         WRITE(numout,*) 
+         WRITE(numout,*) 'p2z_mort_init : Initialization of phytoplankton mortality parameters'
+         WRITE(numout,*) '~~~~~~~~~~~~~'
+      ENDIF
+      !
+      READ  ( numnatp_ref, namp2zmort, IOSTAT = ios, ERR = 901)
+901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmort in reference namelist' )
+
+      READ  ( numnatp_cfg, namp2zmort, IOSTAT = ios, ERR = 902 )
+902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' )
+      IF(lwm) WRITE( numonp, namp2zmort )
+      !
+      IF(lwp) THEN                         ! control print
+         WRITE(numout,*) '   Namelist : namp4zmort'
+         WRITE(numout,*) '      quadratic mortality of phytoplankton        wchln  =', wchln
+         WRITE(numout,*) '      phytoplankton mortality rate                mpratn =', mpratn
+      ENDIF
+      !
+   END SUBROUTINE p2z_mort_init
+
+   !!======================================================================
+END MODULE p2zmort
diff --git a/src/TOP/PISCES/P4Z/p2zprod.F90 b/src/TOP/PISCES/P4Z/p2zprod.F90
new file mode 100644
index 00000000..53ac064f
--- /dev/null
+++ b/src/TOP/PISCES/P4Z/p2zprod.F90
@@ -0,0 +1,320 @@
+MODULE p2zprod
+   !!======================================================================
+   !!                         ***  MODULE p2zprod  ***
+   !! TOP :  Growth Rate of phytoplankton 
+   !!======================================================================
+   !! History :   1.0  !  2004     (O. Aumont) Original code
+   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
+   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation
+   !!----------------------------------------------------------------------
+   !!   p2z_prod       : Compute the growth Rate of the two phytoplanktons groups
+   !!   p2z_prod_init  : Initialization of the parameters for growth
+   !!   p2z_prod_alloc : Allocate variables for growth
+   !!----------------------------------------------------------------------
+   USE oce_trc         ! shared variables between ocean and passive tracers
+   USE trc             ! passive tracers common variables 
+   USE sms_pisces      ! PISCES Source Minus Sink variables
+   USE p2zlim          ! Co-limitations of differents nutrients
+   USE prtctl          ! print control for debugging
+   USE iom             ! I/O manager
+
+   IMPLICIT NONE
+   PRIVATE
+
+   PUBLIC   p2z_prod         ! called in p4zbio.F90
+   PUBLIC   p2z_prod_init    ! called in trcsms_pisces.F90
+   PUBLIC   p2z_prod_alloc   ! called in trcini_pisces.F90
+
+   REAL(wp), PUBLIC ::   pislopen     !:  P-I slope of nanophytoplankton
+   REAL(wp), PUBLIC ::   xadap        !:  Adaptation factor to low light 
+   REAL(wp), PUBLIC ::   excretn      !:  Excretion ratio of nanophyto
+   REAL(wp), PUBLIC ::   bresp        !:  Basal respiration rate
+   REAL(wp), PUBLIC ::   chlcnm       !:  Maximum Chl/C ratio of nano
+   REAL(wp), PUBLIC ::   chlcmin      !:  Minimum Chl/C ratio of phytoplankton
+
+   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto
+   
+   REAL(wp) ::   r1_rday    ! 1 / rday
+   REAL(wp) ::   texcretn   ! 1 - excretn 
+
+   LOGICAL  :: l_dia_ppphy
+   LOGICAL  :: l_dia_mu, l_dia_light, l_dia_lprod
+   !! * Substitutions
+#  include "do_loop_substitute.h90"
+#  include "domzgr_substitute.h90"
+   !!----------------------------------------------------------------------
+   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
+   !! $Id: p2zprod.F90 15459 2021-10-29 08:19:18Z cetlod $ 
+   !! Software governed by the CeCILL license (see ./LICENSE)
+   !!----------------------------------------------------------------------
+CONTAINS
+
+   SUBROUTINE p2z_prod( kt , knt, Kbb, Kmm, Krhs )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_prod  ***
+      !!
+      !! ** Purpose :   Computes phytoplankton production depending on
+      !!                light, temperature and nutrient availability
+      !!                Computes also the chlorophyll content 
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in) ::   kt, knt   !
+      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices
+      !
+      INTEGER  ::   ji, jj, jk
+      REAL(wp) ::   znanotot, zpislopen, zfact
+      REAL(wp) ::   zlimfac, zsizetmp, zprodfer, zprprod
+      REAL(wp) ::   zprod, zval, zmxl_fac
+      CHARACTER (len=25) :: charout
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zprmax, zmxl
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zprbio, zprchln
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zprorcan
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )   CALL timing_start('p2z_prod')
+      !
+      IF( kt == nittrc000 ) THEN
+         l_dia_ppphy = iom_use( "PPPHYN" ) .OR. iom_use( "TPP"  ) 
+         l_dia_mu    = iom_use( "Mumax"  ) .OR. iom_use( "MuN"    )
+         l_dia_light = iom_use( "LNlight")
+      ENDIF
+
+      ! Initialize the local arrays
+      zprorcan(:,:,:) = 0._wp
+      zprbio  (:,:,:) = 0._wp
+      zmxl    (:,:,:) = 0._wp
+
+      ! Computation of the maximimum production. Based on a Q10 description
+      ! of the thermal dependency. Parameters are taken from Bissinger et al. (2008)
+      zprmax(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:)
+
+      ! Intermittency is supposed to have a similar effect on production as 
+      ! day length (Shatwell et al., 2012). The correcting factor is zmxl_fac. 
+      ! zmxl_chl is the fractional day length and is used to compute the mean
+      ! PAR during daytime. The effect of mixing is computed using the 
+      ! absolute light level definition of the euphotic zone
+      ! ------------------------------------------------------------------------- 
+      IF ( ln_p4z_dcyc ) THEN    ! Diurnal cycle in PISCES
+         DO_3D( 0, 0, 0, 0, 1, jpkm1)
+            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+               zval = 24.0
+               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
+                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
+               ENDIF
+               zmxl(ji,jj,jk) = zval
+            ENDIF
+         END_3D
+      ELSE ! No diurnal cycle in PISCES
+         DO_3D( 0, 0, 0, 0, 1, jpkm1)
+            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+               zval = MAX( 1., strn(ji,jj) )
+               IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
+                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
+               ENDIF
+               zmxl(ji,jj,jk) = zval
+            ENDIF
+         END_3D
+      ENDIF
+
+      ! The formulation proposed by Geider et al. (1997) has been modified 
+      ! to exclude the effect of nutrient limitation and temperature in the PI
+      ! curve following Vichi et al. (2007)
+      ! -----------------------------------------------------------------------
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+            zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
+            zprprod = zprmax(ji,jj,jk) * zmxl_fac
+            !
+            ! The initial slope of the PI curve can be increased for nano
+            ! to account for photadaptation, for instance in the DCM
+            ! This parameterization is adhoc and should be either 
+            ! improved or removed in future versions of the model
+            ! Nanophytoplankton
+            ! Computation of production function for Carbon
+            ! Actual light levels are used here 
+            ! ----------------------------------------------
+            zpislopen = pislopen * thetanano(ji,jj,jk) / ( zprprod * rday * xlimphy(ji,jj,jk) + rtrn )
+            zprchln(ji,jj,jk) = zprprod * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) )  )
+            zprbio(ji,jj,jk)  = zprprod * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
+         ENDIF
+      END_3D
+
+      !  Computation of a proxy of the N/C quota from nutrient limitation 
+      !  and light limitation. Steady state is assumed to allow the computation
+      !  ----------------------------------------------------------------------
+!      thetanano(:,:,:) = chlcnm
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+          zval = xnanono3(ji,jj,jk) * zprmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn )
+          quotan(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval )
+
+          ! Diagnostic Chl/C ratio according to Geider et al. (1997)
+          ! --------------------------------------------------------
+          zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
+          thetanano(ji,jj,jk) = chlcnm / ( 1.0 + pislopen * chlcnm * enanom(ji,jj,jk)   &
+             &                  / ( 2.0 * zprmax(ji,jj,jk) * zmxl_fac * xlimphy(ji,jj,jk) * rday + rtrn ) )
+          thetanano(ji,jj,jk) = MAX( chlcmin, thetanano(ji,jj,jk) )
+      END_3D
+
+      ! Sea-ice effect on production
+      ! No production is assumed below sea ice
+      ! -------------------------------------- 
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
+      END_3D
+
+      ! Computation of the various production  and nutrient uptake terms
+      ! ---------------------------------------------------------------
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+            !  production terms for nanophyto. (C)
+            zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * tr(ji,jj,jk,jpphy,Kbb) * rfact2
+            !
+            ! Size computation
+            ! Size is made a function of the limitation of of phytoplankton growth
+            ! Strongly limited cells are supposed to be smaller. sizena is the 
+            ! size at time step t+1 and is thus updated at the end of the 
+            ! current time step
+            ! --------------------------------------------------------------------
+            zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmax(ji,jj,jk) + rtrn )
+            zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
+            sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) )
+         ENDIF
+      END_3D
+
+      !   Update the arrays TRA which contain the biological sources and sinks
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+            zprodfer = zprorcan(ji,jj,jk) * feratz * texcretn
+            !
+            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zprorcan(ji,jj,jk)
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprorcan(ji,jj,jk) * feratz * texcretn
+            consfe3(ji,jj,jk)   = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   &
+            &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2
+            !
+            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zprorcan(ji,jj,jk) * texcretn
+            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + excretn * zprorcan(ji,jj,jk)
+            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zprorcan(ji,jj,jk)
+            !
+            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zprorcan(ji,jj,jk)
+            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zprorcan(ji,jj,jk)
+         ENDIF
+      END_3D
+
+    ! Total primary production per year
+    IF( l_dia_ppphy .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  THEN
+       ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+       DO_3D( 0, 0, 0, 0, 1, jpkm1)
+          zw3d(ji,jj,jk) = zprorcan(ji,jj,jk) * cvol(ji,jj,jk)
+       END_3D
+       tpp = glob_sum( 'p2zprod', zw3d )
+       DEALLOCATE ( zw3d )
+    ENDIF
+    
+    IF( lk_iomput .AND.  knt == nrdttrc ) THEN
+       !
+       ! Diagnostic Chl:C ratio
+       CALL iom_put( "THETANANO", thetanano(:,:,:) )
+       IF( l_dia_ppphy ) THEN
+          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp  
+          ! primary production by nanophyto
+          zw3d(A2D(0),1:jpkm1) = zprorcan(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1) 
+          CALL iom_put( "PPPHYN", zw3d )  
+          ! total primary production
+          zw3d(A2D(0),1:jpkm1) = zprorcan(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1) 
+          CALL iom_put( "TPP", zw3d )  
+          CALL iom_put( "tintpp"  , tpp * zfact )  !  global total integrated primary production molC/s
+          DEALLOCATE ( zw3d ) 
+       ENDIF
+       !
+       IF( l_dia_mu ) THEN
+          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp  
+          zw3d(A2D(0),1:jpkm1) = zprmax(A2D(0),1:jpkm1)  * tmask(A2D(0),1:jpkm1) 
+          CALL iom_put( "Mumax", zw3d )  
+          ! Realized growth rate for nanophyto
+          zw3d(A2D(0),1:jpkm1) = zprbio(A2D(0),1:jpkm1) * xlimphy(A2D(0),1:jpkm1) * tmask(A2D(0),1:jpkm1) 
+          CALL iom_put( "MuN", zw3d )  
+          DEALLOCATE ( zw3d ) 
+       ENDIF
+       !
+       IF( l_dia_light ) THEN
+          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp  
+          ! light limitation term for nano
+          zw3d(A2D(0),1:jpkm1) = zprbio(A2D(0),1:jpkm1) / ( zprmax(A2D(0),1:jpkm1) + rtrn ) * tmask(A2D(0),1:jpkm1) 
+          CALL iom_put( "LNlight", zw3d )  
+          DEALLOCATE ( zw3d ) 
+       ENDIF
+       !
+     ENDIF
+
+     IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
+         WRITE(charout, FMT="('prod')")
+         CALL prt_ctl_info( charout, cdcomp = 'top' )
+         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+     ENDIF
+      !
+      IF( ln_timing )  CALL timing_stop('p2z_prod')
+      !
+   END SUBROUTINE p2z_prod
+
+
+   SUBROUTINE p2z_prod_init
+      !!----------------------------------------------------------------------
+      !!                  ***  ROUTINE p2z_prod_init  ***
+      !!
+      !! ** Purpose :   Initialization of phytoplankton production parameters
+      !!
+      !! ** Method  :   Read the namp2zprod namelist and check the parameters
+      !!      called at the first timestep (nittrc000)
+      !!
+      !! ** input   :   Namelist namp2zprod
+      !!----------------------------------------------------------------------
+      INTEGER ::   ios   ! Local integer
+      !
+      ! Namelist block
+      NAMELIST/namp2zprod/ pislopen, bresp, excretn,  &
+         &                 chlcnm, chlcmin
+      !!----------------------------------------------------------------------
+      !
+      IF(lwp) THEN                         ! control print
+         WRITE(numout,*)
+         WRITE(numout,*) 'p2z_prod_init : phytoplankton growth'
+         WRITE(numout,*) '~~~~~~~~~~~~~'
+      ENDIF
+      !
+      READ  ( numnatp_ref, namp2zprod, IOSTAT = ios, ERR = 901)
+901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp2zprod in reference namelist' )
+
+      READ  ( numnatp_cfg, namp2zprod, IOSTAT = ios, ERR = 902 )
+902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp2zprod in configuration namelist' )
+      IF(lwm) WRITE( numonp, namp2zprod )
+
+      IF(lwp) THEN                         ! control print
+         WRITE(numout,*) '   Namelist : namp2zprod'
+         WRITE(numout,*) '      P-I slope                                 pislopen     =', pislopen
+         WRITE(numout,*) '      excretion ratio of nanophytoplankton      excretn      =', excretn
+         WRITE(numout,*) '      basal respiration in phytoplankton        bresp        =', bresp
+         WRITE(numout,*) '      Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
+         WRITE(numout,*) '      Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm
+      ENDIF
+      !
+      r1_rday   = 1._wp / rday 
+      texcretn  = 1._wp - excretn
+      tpp       = 0._wp
+      !
+   END SUBROUTINE p2z_prod_init
+
+   INTEGER FUNCTION p2z_prod_alloc()
+      !!----------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_prod_alloc  ***
+      !!----------------------------------------------------------------------
+      ALLOCATE( quotan(A2D(0),jpk), STAT = p2z_prod_alloc )
+      !
+      IF( p2z_prod_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p2z_prod_alloc : failed to allocate arrays.' )
+      !
+   END FUNCTION p2z_prod_alloc
+
+   !!======================================================================
+END MODULE p2zprod
diff --git a/src/TOP/PISCES/P4Z/p4zagg.F90 b/src/TOP/PISCES/P4Z/p4zagg.F90
index 9c16b164..13a5cef0 100644
--- a/src/TOP/PISCES/P4Z/p4zagg.F90
+++ b/src/TOP/PISCES/P4Z/p4zagg.F90
@@ -57,7 +57,7 @@ CONTAINS
       REAL(wp) ::   zaggpoc , zaggfe, zaggdoc, zaggdoc2, zaggdoc3
       REAL(wp) ::   zaggpon , zaggdon, zaggdon2, zaggdon3
       REAL(wp) ::   zaggpop, zaggdop, zaggdop2, zaggdop3
-      REAL(wp) ::   zaggtmp, zfact, zmax
+      REAL(wp) ::   zaggtmp, zfact
       CHARACTER (len=25) :: charout
       !!---------------------------------------------------------------------
       !
@@ -122,18 +122,18 @@ CONTAINS
             zfact = xstep * xdiss(ji,jj,jk)
             !  Part I : Coagulation dependent on turbulence
             ! The stickiness has been assumed to be 0.1
-            zaggtmp = 25.9  * zfact * tr(ji,jj,jk,jppoc,Kbb)
+            zaggtmp = 12.5  * zfact * tr(ji,jj,jk,jppoc,Kbb)
             zaggpoc1 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb)
-            zaggtmp = 4452. * zfact * tr(ji,jj,jk,jpgoc,Kbb)
+            zaggtmp = 169.7 * zfact * tr(ji,jj,jk,jpgoc,Kbb)
             zaggpoc2 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb)
                   
             ! Part II : Differential settling
             ! The stickiness has been assumed to be 0.1
    
             !  Aggregation of small into large particles
-            zaggtmp =  47.1 * xstep * tr(ji,jj,jk,jpgoc,Kbb)
+            zaggtmp =  8.63  * xstep * tr(ji,jj,jk,jpgoc,Kbb)
             zaggpoc3 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb)
-            zaggtmp =  3.3  * xstep * tr(ji,jj,jk,jppoc,Kbb)
+            zaggtmp =  132.8 * xstep * tr(ji,jj,jk,jppoc,Kbb)
             zaggpoc4 = zaggtmp * tr(ji,jj,jk,jppoc,Kbb)
 
             zaggpoc = zaggpoc1 + zaggpoc2 + zaggpoc3 + zaggpoc4
@@ -146,8 +146,8 @@ CONTAINS
             ! 2nd term is shear aggregation of DOC-POC
             ! 3rd term is differential settling of DOC-POC
             ! 1/3 of DOC is supposed to experience aggregation (HMW)
-            zaggtmp = ( ( 0.37 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 20.5 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       &
-            &            + 0.15 * xstep * tr(ji,jj,jk,jppoc,Kbb) )
+            zaggtmp = ( ( 12.0 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 9.05 * tr(ji,jj,jk,jppoc,Kbb) ) * zfact       &
+            &            + 2.49 * xstep * tr(ji,jj,jk,jppoc,Kbb) )
             zaggdoc  = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb)
             zaggdon  = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb)
             zaggdop  = zaggtmp * 0.3 * tr(ji,jj,jk,jpdop,Kbb)
@@ -156,19 +156,18 @@ CONTAINS
             ! 1st term is shear aggregation
             ! 2nd term is differential settling 
             ! 1/3 of DOC is supposed to experience aggregation (HMW)
-            zaggtmp = 655.4 * zfact * tr(ji,jj,jk,jpgoc,Kbb)
+            zaggtmp = ( 1.94 * zfact + 1.37 * xstep ) * tr(ji,jj,jk,jpgoc,Kbb)
             zaggdoc2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb)
             zaggdon2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb)
             zaggdop2 = zaggtmp * 0.3 * tr(ji,jj,jk,jpdop,Kbb)
 
             ! tranfer of DOC to POC due to brownian motion
             ! 1/3 of DOC is supposed to experience aggregation (HMW)
-            zaggtmp = ( 260.2 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) +  418.5 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep
+            zaggtmp = ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) +  725.7 * tr(ji,jj,jk,jppoc,Kbb) ) * xstep
             zaggdoc3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdoc,Kbb)
             zaggdon3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdon,Kbb)
             zaggdop3 =  zaggtmp * 0.3 * tr(ji,jj,jk,jpdop,Kbb)
 
-
             !  Update the trends
             tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zaggpoc + zaggdoc + zaggdoc3
             tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zaggpon + zaggdon + zaggdon3
diff --git a/src/TOP/PISCES/P4Z/p4zbc.F90 b/src/TOP/PISCES/P4Z/p4zbc.F90
index c05ae9a1..ed2f909d 100644
--- a/src/TOP/PISCES/P4Z/p4zbc.F90
+++ b/src/TOP/PISCES/P4Z/p4zbc.F90
@@ -120,24 +120,25 @@ CONTAINS
 
          ENDIF
 
+         IF( .NOT. ln_p2z ) THEN 
          ! Atmospheric input of PO4 dissolves in the water column
-         IF ( ln_trc_sbc(jppo4) ) THEN
-            DO_3D( 0, 0, 0, 0, 2, jpkm1 )
-               zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) )
-               !
-               tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P
-            END_3D
-         ENDIF
+            IF ( ln_trc_sbc(jppo4) ) THEN
+               DO_3D( 0, 0, 0, 0, 2, jpkm1 )
+                  zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) )
+                  !
+                  tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zdustdep * 1.e-3 / mMass_P
+               END_3D
+            ENDIF
 
-         ! Atmospheric input of Si dissolves in the water column
-         IF ( ln_trc_sbc(jpsil) ) THEN
-            DO_3D( 0, 0, 0, 0, 2, jpkm1 )
-               zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) )
-               !
-               tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si
-            END_3D
+            ! Atmospheric input of Si dissolves in the water column
+            IF ( ln_trc_sbc(jpsil) ) THEN
+               DO_3D( 0, 0, 0, 0, 2, jpkm1 )
+                  zdustdep = dust(ji,jj) * zwdust * rfact * EXP( -gdept(ji,jj,jk,Kmm) /( 250. * wdust ) )
+                  !
+                  tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) + zdustdep * 0.269 / mMass_Si
+               END_3D
+            ENDIF
          ENDIF
-
          !
          IF( lk_iomput ) THEN
              ! dust concentration at surface
@@ -172,12 +173,14 @@ CONTAINS
                tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) - rno3 * zndep * rfact
             END_2D
          ENDIF
-         IF( ln_trc_sbc(jpnh4) ) THEN
-            jl = n_trc_indsbc(jpnh4)
-            DO_2D( 0, 0, 0, 0 )
-               zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time
-               tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) + rno3 * zndep * rfact
-            END_2D
+         IF( .NOT. ln_p2z ) THEN
+            IF( ln_trc_sbc(jpnh4) ) THEN
+               jl = n_trc_indsbc(jpnh4)
+               DO_2D( 0, 0, 0, 0 )
+                  zndep = rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) / e3t(ji,jj,1,Kmm) / rn_sbc_time
+                  tr(ji,jj,1,jptal,Krhs) = tr(ji,jj,1,jptal,Krhs) + rno3 * zndep * rfact
+               END_2D
+            ENDIF
          ENDIF
       ENDIF
       !
@@ -281,8 +284,8 @@ CONTAINS
       INTEGER  :: ierr, ierr1, ierr2, ierr3
       INTEGER  :: ios                 ! Local integer output status for namelist read
       INTEGER  :: ik50                !  last level where depth less than 50 m
-      REAL(wp) :: zexpide, zdenitide, zmaskt, zsurfc, zsurfp,ze3t, ze3t2, zcslp
-      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zriver, zcmask
+      REAL(wp) :: zexpide, zdenitide, zmaskt, zsurfc, zsurfp, ze3t, ze3t2, zcslp
+      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zcmask
       !
       CHARACTER(len=100) ::  cn_dir          ! Root directory for location of ssr files
       TYPE(FLD_N) ::   sn_dust, sn_ironsed, sn_hydrofe   ! informations about the fields to be read
@@ -328,12 +331,17 @@ CONTAINS
          IF( ln_hydrofe ) THEN
             WRITE(numout,*) '      Fe to 3He ratio assumed for vent iron supply hratio  = ', hratio
          ENDIF
-      END IF
+      ENDIF
 
-      ll_bc    = ( ln_trcbc .AND. lltrcbc )  .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice 
-      ll_dust  =  ln_trc_sbc(jpfer) .OR. ln_trc_sbc(jppo4) .OR. ln_trc_sbc(jpsil) .OR. ln_sediment
-      ll_ndepo =  ln_trc_sbc(jpno3) .OR. ln_trc_sbc(jpnh4)   
-      ll_river =  ln_trc_cbc(jpno3)  
+      ll_river =  ln_trc_cbc(jpno3)
+      IF( ln_p2z ) THEN
+         ll_dust    =  ln_trc_sbc(jpfer)
+         ll_ndepo   =  ln_trc_sbc(jpno3)
+      ELSE
+         ll_dust  =  ln_trc_sbc(jpfer) .OR. ln_trc_sbc(jppo4) .OR. ln_trc_sbc(jpsil) .OR. ln_sediment
+         ll_ndepo =  ln_trc_sbc(jpno3) .OR. ln_trc_sbc(jpnh4)   
+      ENDIF
+      ll_bc    = ( ln_trcbc .AND. lltrcbc )  .OR. ln_hydrofe .OR. ln_ironsed .OR. ln_ironice
 
       ! dust input from the atmosphere
       ! ------------------------------
diff --git a/src/TOP/PISCES/P4Z/p4zbio.F90 b/src/TOP/PISCES/P4Z/p4zbio.F90
index 65f61f4f..7d2d289e 100644
--- a/src/TOP/PISCES/P4Z/p4zbio.F90
+++ b/src/TOP/PISCES/P4Z/p4zbio.F90
@@ -16,6 +16,10 @@ MODULE p4zbio
    USE sms_pisces      !  PISCES Source Minus Sink variables
    USE p4zsink         !  vertical flux of particulate matter due to sinking
    USE p4zopt          !  optical model
+   USE p2zlim          !  Co-limitations by nutrient (REDUCED)
+   USE p2zprod         !  Growth rate of phytoplankton (REDUCED)
+   USE p2zmicro        !  Sources and sinks of microzooplankton (REDUCED)
+   USE p2zmort         !  Mortality terms for phytoplankton (REDUCED)
    USE p4zlim          !  Co-limitations of differents nutrients
    USE p4zprod         !  Growth rate of the 2 phyto groups
    USE p4zmort         !  Mortality terms for phytoplankton
@@ -80,7 +84,12 @@ CONTAINS
       CALL p4z_sink    ( kt, knt, Kbb, Kmm, Krhs )     ! vertical flux of particulate organic matter
       CALL p4z_fechem  ( kt, knt, Kbb, Kmm, Krhs )     ! Iron chemistry/scavenging
       !
-      IF( ln_p4z ) THEN  ! PISCES standard
+      IF( ln_p2z ) THEN  ! PISCES reduced
+         CALL p2z_lim  ( kt, knt, Kbb, Kmm       )     ! co-limitations by the various nutrients
+         CALL p2z_prod ( kt, knt, Kbb, Kmm, Krhs )     ! phytoplankton growth rate over the global ocean. 
+         CALL p2z_mort ( kt,      Kbb,      Krhs )     ! phytoplankton mortality
+         CALL p2z_micro( kt, knt, Kbb,      Krhs )     ! microzooplankton
+      ELSE IF( ln_p4z ) THEN  ! PISCES standard
          ! Phytoplankton only sources/sinks terms
          CALL p4z_lim  ( kt, knt, Kbb, Kmm       )     ! co-limitations by the various nutrients
          CALL p4z_prod ( kt, knt, Kbb, Kmm, Krhs )     ! phytoplankton growth rate over the global ocean. 
@@ -100,8 +109,12 @@ CONTAINS
          CALL p5z_meso ( kt, knt, Kbb, Kmm, Krhs )           ! mesozooplankton
       ENDIF
       !
-      CALL p4z_agg     ( kt, knt, Kbb,      Krhs )     ! Aggregation of particles
-      CALL p4z_rem     ( kt, knt, Kbb, Kmm, Krhs )     ! remineralization terms of organic matter+scavenging of Fe
+      IF( ln_p2z ) THEN
+         CALL p2z_rem     ( kt, knt, Kbb, Kmm, Krhs )     ! remineralization terms of organic matter+scavenging of Fe
+      ELSE
+         CALL p4z_agg     ( kt, knt, Kbb,      Krhs )     ! Aggregation of particles
+         CALL p4z_rem     ( kt, knt, Kbb, Kmm, Krhs )     ! remineralization terms of organic matter+scavenging of Fe
+      ENDIF
       CALL p4z_poc     ( kt, knt, Kbb, Kmm, Krhs )     ! Remineralization of organic particles
       !
       ! Ligand production. ln_ligand should be set .true. to activate
@@ -109,10 +122,12 @@ CONTAINS
       & CALL p4z_ligand( kt, knt, Kbb,      Krhs )
 
       ! Update of the size of the different phytoplankton groups
-      sized(:,:,:) = MAX(1.0, sizeda(:,:,:) )
       sizen(:,:,:) = MAX(1.0, sizena(:,:,:) )
-      IF (ln_p5z) THEN
-         sizep(:,:,:) = MAX(1.0, sizepa(:,:,:) )
+      IF( .NOT. ln_p2z ) THEN
+         sized(:,:,:) = MAX(1.0, sizeda(:,:,:) )
+         IF (ln_p5z) THEN
+            sizep(:,:,:) = MAX(1.0, sizepa(:,:,:) )
+         ENDIF
       ENDIF
       !                                                             !
       IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
diff --git a/src/TOP/PISCES/P4Z/p4zche.F90 b/src/TOP/PISCES/P4Z/p4zche.F90
index 8d9f68fe..33507f81 100644
--- a/src/TOP/PISCES/P4Z/p4zche.F90
+++ b/src/TOP/PISCES/P4Z/p4zche.F90
@@ -427,9 +427,8 @@ CONTAINS
           sulfat(ji,jj,jk) = zst
           fluorid(ji,jj,jk) = zft 
 
-          ! Iron and SIO3 saturation concentration from ...
-          sio3eq(ji,jj,jk) = EXP(  LOG( 10.) * ( 6.44 - 968. / ztkel )  ) * 1.e-6
           fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ztkel ) 
+
           ! Liu and Millero (1999) only valid 5 - 50 degC
           ztkel1 = MAX( 5. , tempis(ji,jj,jk) ) + 273.16
           fesol(ji,jj,jk,1) = 10**(-13.486 - 0.1856* zis**0.5 + 0.3073*zis + 5254.0/ztkel1)
@@ -438,6 +437,15 @@ CONTAINS
           fesol(ji,jj,jk,4) = 10**(-0.2965 - 0.7881*zis**0.5 - 4086.0/ztkel1 )
           fesol(ji,jj,jk,5) = 10**(4.4466 - 0.8505*zis**0.5 - 7980.0/ztkel1 )
       END_3D
+      ! Iron and SIO3 saturation concentration from ...
+      IF( .NOT. ln_p2z) THEN
+         DO_3D( 0, 0, 0, 0, 1, jpk )
+             ! SET ABSOLUTE TEMPERATURE
+             ztkel   = tempis(ji,jj,jk) + 273.15
+             sio3eq(ji,jj,jk) = EXP(  LOG( 10.) * ( 6.44 - 968. / ztkel )  ) * 1.e-6
+            !
+         END_3D
+      ENDIF
       !
       IF( ln_timing )  CALL timing_stop('p4z_che')
       !
@@ -522,13 +530,23 @@ CONTAINS
    INTEGER  ::   ji, jj, jk
    REAL(wp)  ::  zrhd
 
-    DO_3D( 0, 0, 0, 0, 1, jpk )
-      zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. )
-      p_alknw_inf(ji,jj,jk) =  -tr(ji,jj,jk,jppo4,Kbb) * zrhd - sulfat(ji,jj,jk) &
-      &              - fluorid(ji,jj,jk)
-      p_alknw_sup(ji,jj,jk) =   (2. * tr(ji,jj,jk,jpdic,Kbb) + 2. * tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpsil,Kbb) )    &
-      &               * zrhd + borat(ji,jj,jk)
-    END_3D
+   IF( ln_p2z ) THEN
+      DO_3D( 0, 0, 0, 0, 1, jpk )
+         zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. )
+         p_alknw_inf(ji,jj,jk) =  -2.174E-6 * zrhd - sulfat(ji,jj,jk) &
+         &              - fluorid(ji,jj,jk)
+         p_alknw_sup(ji,jj,jk) =   (2. * tr(ji,jj,jk,jpdic,Kbb) + 2. * 2.174E-6    &
+         &               + 90.33E-6 ) * zrhd + borat(ji,jj,jk)
+      END_3D
+   ELSE
+      DO_3D( 0, 0, 0, 0, 1, jpk )
+         zrhd = 1._wp / ( rhd(ji,jj,jk) + 1. )
+         p_alknw_inf(ji,jj,jk) =  -tr(ji,jj,jk,jppo4,Kbb) * zrhd * po4r - sulfat(ji,jj,jk) &
+         &              - fluorid(ji,jj,jk)
+         p_alknw_sup(ji,jj,jk) =   (2. * tr(ji,jj,jk,jpdic,Kbb) + 2. * tr(ji,jj,jk,jppo4,Kbb) * po4r    &
+         &               + tr(ji,jj,jk,jpsil,Kbb) ) * zrhd + borat(ji,jj,jk)
+      END_3D
+   ENDIF
 
    END SUBROUTINE anw_infsup
 
@@ -607,13 +625,18 @@ CONTAINS
          p_alktot = tr(ji,jj,jk,jptal,Kbb) * zrhd
          zdic  = tr(ji,jj,jk,jpdic,Kbb) * zrhd
          zbot  = borat(ji,jj,jk)
-         zpt = tr(ji,jj,jk,jppo4,Kbb) * zrhd * po4r
-         zsit = tr(ji,jj,jk,jpsil,Kbb) * zrhd
          zst = sulfat (ji,jj,jk)
          zft = fluorid(ji,jj,jk)
          aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk)
          zh = zhi(ji,jj,jk)
          zh_prev = zh
+         IF( ln_p2z ) THEN
+            zsit = 90.33E-6 * zrhd
+            zpt  = 2.174E-6 * zrhd
+         ELSE
+            zpt  = tr(ji,jj,jk,jppo4,Kbb) * zrhd * po4r
+            zsit = tr(ji,jj,jk,jpsil,Kbb) * zrhd
+         ENDIF
 
          ! H2CO3 - HCO3 - CO3 : n=2, m=0
          znumer_dic = 2.*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*ak13(ji,jj,jk)
@@ -796,12 +819,12 @@ CONTAINS
       !!----------------------------------------------------------------------
       !!                     ***  ROUTINE p4z_che_alloc  ***
       !!----------------------------------------------------------------------
-      INTEGER ::   ierr(3)        ! Local variables
+      INTEGER ::   ierr(4)        ! Local variables
       !!----------------------------------------------------------------------
 
       ierr(:) = 0
 
-      ALLOCATE( sio3eq(A2D(0),jpk), fekeq(A2D(0),jpk), chemc(A2D(0),3), chemo2(A2D(0),jpk), STAT=ierr(1) )
+      ALLOCATE( fekeq(A2D(0),jpk), chemc(A2D(0),3), chemo2(A2D(0),jpk), STAT=ierr(1) )
 
       ALLOCATE( akb3(A2D(0),jpk)     , tempis(A2D(0),jpk),       &
          &      akw3(A2D(0),jpk)     , borat (A2D(0),jpk)  ,       &
@@ -812,6 +835,7 @@ CONTAINS
          &      salinprac(A2D(0),jpk),                 STAT=ierr(2) )
 
       ALLOCATE( fesol(A2D(0),jpk,5), STAT=ierr(3) )
+      IF( .NOT. ln_p2z ) ALLOCATE( sio3eq(A2D(0),jpk), STAT=ierr(4) )
 
       !* Variable for chemistry of the CO2 cycle
       p4z_che_alloc = MAXVAL( ierr )
diff --git a/src/TOP/PISCES/P4Z/p4zfechem.F90 b/src/TOP/PISCES/P4Z/p4zfechem.F90
index 2e05446d..0d4090a9 100644
--- a/src/TOP/PISCES/P4Z/p4zfechem.F90
+++ b/src/TOP/PISCES/P4Z/p4zfechem.F90
@@ -79,12 +79,12 @@ CONTAINS
       ! Parameterization from Pham and Ito (2018)
       ! -------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         xfecolagg(ji,jj,jk) = ligand * 1E9 + MAX(0., chemo2(ji,jj,jk) - tr(ji,jj,jk,jpoxy,Kbb) ) / 400.E-6
+         xfecolagg(ji,jj,jk) = ligand * 1E9 + 0.01 * MAX(0., (chemo2(ji,jj,jk) - tr(ji,jj,jk,jpoxy,Kbb) ) * 1E6 )**0.8
       END_3D
       !
       IF( ln_ligvar ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
-            ztotlig(ji,jj,jk) =  0.09 * 0.667 * tr(ji,jj,jk,jpdoc,Kbb) * 1E6 + xfecolagg(ji,jj,jk)
+            ztotlig(ji,jj,jk) =  0.07 * 0.667 * (tr(ji,jj,jk,jpdoc,Kbb) * 1E6 )**0.8  + xfecolagg(ji,jj,jk)
             ztotlig(ji,jj,jk) =  MIN( ztotlig(ji,jj,jk), 10. )
          END_3D
       ELSE
@@ -169,13 +169,6 @@ CONTAINS
          ! This occurs in anoxic waters only
          zprecipno3 = 2.0 * 130.0 * tr(ji,jj,jk,jpno3,Kbb) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk)
          !
-         ztrc   = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6 
-         ztrc = MAX( rtrn, ztrc )
-         IF( ll_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk)
-         zxlam  = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) ))
-         zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam
-         zscave = zFe3(ji,jj,jk) * zlam1b * xstep
-
          !  Compute the coagulation of colloidal iron. This parameterization 
          !  could be thought as an equivalent of colloidal pumping.
          !  It requires certainly some more work as it is very poorly constrained.
@@ -184,36 +177,53 @@ CONTAINS
              &    + ( 2.49  * tr(ji,jj,jk,jppoc,Kbb) )     &
              &    + ( 127.8 * 0.3 * tr(ji,jj,jk,jpdoc,Kbb) + 725.7 * tr(ji,jj,jk,jppoc,Kbb) )
          zaggdfea = zlam1a * xstep * zfecoll(ji,jj,jk)
-               !
-         zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb)
-         zaggdfeb = zlam1b * xstep * zfecoll(ji,jj,jk)
-         xcoagfe(ji,jj,jk) = zlam1a + zlam1b
          !
-         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb &
-         &                       - ( zprecip + zprecipno3 )
+         IF( ll_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk)
+         zxlam  = MAX( 1.E-3, (1. - EXP(-2 * tr(ji,jj,jk,jpoxy,Kbb) / 100.E-6 ) ))
 
-         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc
-         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc
+         IF( ln_p2z ) THEN
+            ztrc = tr(ji,jj,jk,jppoc,Kbb) * 1e6
+         ELSE
+            ztrc = ( tr(ji,jj,jk,jppoc,Kbb) + tr(ji,jj,jk,jpgoc,Kbb) + tr(ji,jj,jk,jpcal,Kbb) + tr(ji,jj,jk,jpgsi,Kbb) ) * 1.e6
+         ENDIF
+         ztrc = MAX( rtrn, ztrc )
+         zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam
+         zscave = zFe3(ji,jj,jk) * zlam1b * xstep
 
+         !
+         IF( ln_p2z ) THEN
+            zaggdfeb = 0._wp
+            xcoagfe(ji,jj,jk) = zlam1a
+         ELSE
+            zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * tr(ji,jj,jk,jpgoc,Kbb)
+            zaggdfeb = zlam1b * xstep * zfecoll(ji,jj,jk)
+            xcoagfe(ji,jj,jk) =  zlam1a + zlam1b
+            !
+            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc
+            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zscave * scaveff * tr(ji,jj,jk,jppoc,Kbb) / ztrc
+            !
+            ! Precipitated iron is supposed to be permanently lost.
+            ! Scavenged iron is supposed to be released back to seawater
+            ! when POM is solubilized. This is highly uncertain as probably
+            ! a significant part of it may be rescavenged back onto 
+            ! the particles. An efficiency factor is applied that is read
+            ! in the namelist. 
+            ! See for instance Tagliabue et al. (2019).
+            ! Aggregated FeL is considered as biogenic Fe as it 
+            ! probably remains  complexed when the particle is solubilized.
+            ! -------------------------------------------------------------
+            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea
+            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb
+            !
+         ENDIF
+         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zscave - zaggdfea - zaggdfeb &
+            &                    - ( zprecip + zprecipno3 )
 
-          ! Precipitated iron is supposed to be permanently lost.
-          ! Scavenged iron is supposed to be released back to seawater
-          ! when POM is solubilized. This is highly uncertain as probably
-          ! a significant part of it may be rescavenged back onto 
-          ! the particles. An efficiency factor is applied that is read
-          ! in the namelist. 
-          ! See for instance Tagliabue et al. (2019).
-          ! Aggregated FeL is considered as biogenic Fe as it 
-          ! probably remains  complexed when the particle is solubilized.
-          ! -------------------------------------------------------------
-          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zaggdfea
-          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zaggdfeb
-          !
-          IF( l_dia_fechem ) THEN
-             zscav3d(ji,jj,jk)   = zscave 
-             zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb
-             zfeprecip(ji,jj,jk) = zprecip + zprecipno3
-          ENDIF
+         IF( l_dia_fechem ) THEN
+            zscav3d(ji,jj,jk)   = zscave 
+            zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb
+            zfeprecip(ji,jj,jk) = zprecip + zprecipno3
+         ENDIF
          !
       END_3D
       !
diff --git a/src/TOP/PISCES/P4Z/p4zint.F90 b/src/TOP/PISCES/P4Z/p4zint.F90
index c0243fc4..c77472a8 100644
--- a/src/TOP/PISCES/P4Z/p4zint.F90
+++ b/src/TOP/PISCES/P4Z/p4zint.F90
@@ -52,30 +52,31 @@ CONTAINS
       END_3D
 
 
-      ! Computation of the silicon dependant half saturation  constant for silica uptake
-      ! This is based on an old study by Pondaven et al. (1998)
-      ! --------------------------------------------------------------------------------
-      DO_2D( 0, 0, 0, 0 )
-         zvar = tr(ji,jj,1,jpsil,Kbb) * tr(ji,jj,1,jpsil,Kbb)
-         xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 )
-      END_2D
-      !
-      ! At the end of each year, the half saturation constant for silica is 
-      ! updated as this is based on the highest concentration reached over 
-      ! the year
-      ! -------------------------------------------------------------------
-      IF( nday_year == nyear_len(1) ) THEN
-         xksi   (:,:) = xksimax(:,:)
-         xksimax(:,:) = 0._wp
+      IF( ln_p4z .OR. ln_p5z ) THEN
+         ! Computation of the silicon dependant half saturation  constant for silica uptake
+         ! This is based on an old study by Pondaven et al. (1998)
+         ! --------------------------------------------------------------------------------
+         DO_2D( 0, 0, 0, 0 )
+            zvar = tr(ji,jj,1,jpsil,Kbb) * tr(ji,jj,1,jpsil,Kbb)
+            xksimax(ji,jj) = MAX( xksimax(ji,jj), ( 1.+ 7.* zvar / ( xksilim * xksilim + zvar ) ) * 1e-6 )
+         END_2D
+         !
+         ! At the end of each year, the half saturation constant for silica is 
+         ! updated as this is based on the highest concentration reached over 
+         ! the year
+         ! -------------------------------------------------------------------
+         IF( nday_year == nyear_len(1) ) THEN
+            xksi   (:,:) = xksimax(:,:)
+            xksimax(:,:) = 0._wp
+         ENDIF
       ENDIF
-      !
-      ! compute the day length depending on latitude and the day
-      ! Astronomical parameterization taken from HAMOCC3
+         !
+         ! compute the day length depending on latitude and the day
+         ! Astronomical parameterization taken from HAMOCC3
       zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp )
       zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  )
 
       ! day length in hours
-!      strn(:,:) = 0.
       DO_2D( 0, 0, 0, 0 )
          zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad )
          zargu = MAX( -1., MIN(  1., zargu ) )
diff --git a/src/TOP/PISCES/P4Z/p4zlim.F90 b/src/TOP/PISCES/P4Z/p4zlim.F90
index d388955f..84f3bcfa 100644
--- a/src/TOP/PISCES/P4Z/p4zlim.F90
+++ b/src/TOP/PISCES/P4Z/p4zlim.F90
@@ -13,6 +13,7 @@ MODULE p4zlim
    USE oce_trc         ! Shared ocean-passive tracers variables
    USE trc             ! Tracers defined
    USE sms_pisces      ! PISCES variables
+   USE p2zlim          ! Reduced PISCES nutrient limitation
    USE iom             ! I/O manager
 
    IMPLICIT NONE
@@ -23,40 +24,28 @@ MODULE p4zlim
    PUBLIC p4z_lim_alloc     ! called in trcini_pisces.F90
 
    !! * Shared module variables
-   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation   
    REAL(wp), PUBLIC ::  concdno3    !:  Phosphate half saturation for diatoms  
    REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for nanophyto  
    REAL(wp), PUBLIC ::  concdnh4    !:  NH4 half saturation for diatoms
-   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto 
    REAL(wp), PUBLIC ::  concdfer    !:  Iron half saturation for diatoms  
-   REAL(wp), PUBLIC ::  concbno3    !:  NO3 half saturation  for bacteria 
    REAL(wp), PUBLIC ::  concbnh4    !:  NH4 half saturation for bacteria
    REAL(wp), PUBLIC ::  xsizedia    !:  Minimum size criteria for diatoms
-   REAL(wp), PUBLIC ::  xsizephy    !:  Minimum size criteria for nanophyto
-   REAL(wp), PUBLIC ::  xsizern     !:  Size ratio for nanophytoplankton
    REAL(wp), PUBLIC ::  xsizerd     !:  Size ratio for diatoms
    REAL(wp), PUBLIC ::  xksi1       !:  half saturation constant for Si uptake 
    REAL(wp), PUBLIC ::  xksi2       !:  half saturation constant for Si/C 
-   REAL(wp), PUBLIC ::  xkdoc       !:  2nd half-sat. of DOC remineralization  
-   REAL(wp), PUBLIC ::  concbfe     !:  Fe half saturation for bacteria 
    REAL(wp), PUBLIC ::  qnfelim     !:  optimal Fe quota for nanophyto
    REAL(wp), PUBLIC ::  qdfelim     !:  optimal Fe quota for diatoms
-   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio 
+   REAL(wp), PUBLIC ::  ratchl      !:  C associated with Chlorophyll
 
    !!* Phytoplankton limitation terms
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: Nanophyto limitation by NO3
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: Diatoms limitation by NO3
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: Nanophyto limitation by NH4
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !:  Diatoms limitation by NH4
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: Nanophyto limitation by PO4
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: Diatoms limitation by PO4
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: Nutrient limitation term of nanophytoplankton
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: Nutrient limitation term of diatoms
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: Nanophyto limitation by Iron
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: Diatoms limitation by iron
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: Diatoms limitation by Si
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: Bacterial limitation term
-   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: Bacterial limitation term
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: Limitation of diatoms uptake of Fe
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: Limitation of Nano uptake of Fe
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto
@@ -252,7 +241,7 @@ CONTAINS
 
          xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  &
             &                       * ztem1 / ( 0.1 + ztem1 )                     &
-            &                       * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) * 1.e6 / 2. )  &
+            &                       * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) / xsizephy )  &
             &                       * zetot1 * zetot2               &
             &                       * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         &
             &                       * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
@@ -260,18 +249,6 @@ CONTAINS
          xfracal(ji,jj,jk) = MAX( 0.02, xfracal(ji,jj,jk) )
       END_3D
       !
-      DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         ! denitrification factor computed from O2 levels
-         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    &
-            &                                / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) )  )
-         nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) )
-         !
-         ! denitrification factor computed from NO3 levels
-         nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - tr(ji,jj,jk,jpno3,Kbb) )  &
-            &                                / ( 1.E-6 + tr(ji,jj,jk,jpno3,Kbb) ) )
-         nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) )
-      END_3D
-      !
       IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics
         !
         IF( l_dia_fracal ) THEN   ! fraction of calcifiers
@@ -332,7 +309,7 @@ CONTAINS
       ! Namelist block
       NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   &
          &                concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd,          & 
-         &                xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r, oxymin
+         &                xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r, oxymin, ratchl
       !!----------------------------------------------------------------------
       !
       IF(lwp) THEN
@@ -351,6 +328,7 @@ CONTAINS
       IF(lwp) THEN                         ! control print
          WRITE(numout,*) '   Namelist : namp4zlim'
          WRITE(numout,*) '      mean rainratio                           caco3r    = ', caco3r
+         WRITE(numout,*) '      C associated with Chlorophyll            ratchl    = ', ratchl
          WRITE(numout,*) '      NO3 half saturation of nanophyto         concnno3  = ', concnno3
          WRITE(numout,*) '      NO3 half saturation of diatoms           concdno3  = ', concdno3
          WRITE(numout,*) '      NH4 half saturation for phyto            concnnh4  = ', concnnh4
@@ -367,13 +345,11 @@ CONTAINS
          WRITE(numout,*) '      Minimum size criteria for diatoms        xsizedia  = ', xsizedia
          WRITE(numout,*) '      Minimum size criteria for nanophyto      xsizephy  = ', xsizephy
          WRITE(numout,*) '      Fe half saturation for bacteria          concbfe   = ', concbfe
-         WRITE(numout,*) '      halk saturation constant for anoxia       oxymin   =' , oxymin
+         WRITE(numout,*) '      halk saturation constant for anoxia      oxymin    =' , oxymin
          WRITE(numout,*) '      optimal Fe quota for nano.               qnfelim   = ', qnfelim
          WRITE(numout,*) '      Optimal Fe quota for diatoms             qdfelim   = ', qdfelim
       ENDIF
       !
-      nitrfac (:,:,jpk) = 0._wp
-      nitrfac2(:,:,jpk) = 0._wp
       xfracal (:,:,jpk) = 0._wp
       xlimphy (:,:,jpk) = 0._wp
       xlimdia (:,:,jpk) = 0._wp
@@ -393,13 +369,11 @@ CONTAINS
       !!----------------------------------------------------------------------
 
       !*  Biological arrays for phytoplankton growth
-      ALLOCATE( xnanono3(A2D(0),jpk), xdiatno3(A2D(0),jpk),       &
+      ALLOCATE( xdiatno3(A2D(0),jpk),                             &
          &      xnanonh4(A2D(0),jpk), xdiatnh4(A2D(0),jpk),       &
          &      xnanopo4(A2D(0),jpk), xdiatpo4(A2D(0),jpk),       &
          &      xnanofer(A2D(0),jpk), xdiatfer(A2D(0),jpk),       &
-         &      xlimphy (A2D(0),jpk), xlimdia (A2D(0),jpk),       &
-         &      xlimnfe (A2D(0),jpk), xlimdfe (A2D(0),jpk),       &
-         &      xlimbac (A2D(0),jpk), xlimbacl(A2D(0),jpk),       &
+         &      xlimdia (A2D(0),jpk), xlimdfe (A2D(0),jpk),       &
          &      concnfe (A2D(0),jpk), concdfe (A2D(0),jpk),       &
          &      xqfuncfecn(A2D(0),jpk), xqfuncfecd(A2D(0),jpk),   &
          &      xlimsi  (A2D(0),jpk), STAT=p4z_lim_alloc )
diff --git a/src/TOP/PISCES/P4Z/p4zlys.F90 b/src/TOP/PISCES/P4Z/p4zlys.F90
index 61db35c3..7745ec24 100644
--- a/src/TOP/PISCES/P4Z/p4zlys.F90
+++ b/src/TOP/PISCES/P4Z/p4zlys.F90
@@ -20,12 +20,14 @@ MODULE p4zlys
    USE trc             !  passive tracers common variables 
    USE sms_pisces      !  PISCES Source Minus Sink variables
    USE p4zche          !  Chemical model
+   USE p4zsink         ! sinking of particles
    USE prtctl          !  print control for debugging
    USE iom             !  I/O manager
 
    IMPLICIT NONE
    PRIVATE
 
+   PUBLIC   p2z_lys         ! called in trcsms_pisces.F90
    PUBLIC   p4z_lys         ! called in trcsms_pisces.F90
    PUBLIC   p4z_lys_init    ! called in trcsms_pisces.F90
 
@@ -42,6 +44,7 @@ MODULE p4zlys
 
    !! * Substitutions
 #  include "do_loop_substitute.h90"
+#  include "domzgr_substitute.h90"
    !!----------------------------------------------------------------------
    !! NEMO/TOP 4.0 , NEMO Consortium (2018)
    !! $Id: p4zlys.F90 15532 2021-11-24 11:47:32Z techene $ 
@@ -50,6 +53,169 @@ MODULE p4zlys
 
 CONTAINS
 
+   SUBROUTINE p2z_lys( kt, knt, Kbb, Kmm, Krhs )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_lys  ***
+      !!
+      !! ** Purpose :   CALCULATES DEGREE OF CACO3 SATURATION IN THE WATER
+      !!                COLUMN, DISSOLUTION/PRECIPITATION OF CACO3 AND LOSS
+      !!                OF CACO3 TO THE CACO3 SEDIMENT POOL.
+      !!
+      !! ** Method  : - ???
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step and ???
+      INTEGER, INTENT(in)  ::  Kbb, Kmm, Krhs ! time level indices
+      !
+      INTEGER  ::   ji, jj, jk, jn
+      REAL(wp) ::   zdispot, zrhd, zcalcon, zdepexp, zdissol
+      REAL(wp) ::   zomegaca, zexcess, zexcess0, zkd, zwsbio
+      CHARACTER (len=25) ::   charout
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zhinit, zhi, zco3, zcaco3, ztra
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)  :: zw3d
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )  CALL timing_start('p2z_lys')
+      !
+      IF( kt == nittrc000 )  &
+           & l_dia = iom_use( "PH" ) .OR. iom_use( "CO3" ) .OR. iom_use( "CO3sat" ) .OR. iom_use( "DCAL" ) .OR. iom_use( "PCAL" )
+      !
+      IF( l_dia )   THEN                  !* Save ta and sa trends
+         ALLOCATE( zw3d(A2D(0),jpk) )    ;    zw3d(A2D(0),jpk) = 0._wp
+         DO_3D( 0, 0, 0, 0, 1, jpkm1)
+            zw3d(ji,jj,jk) = tr(ji,jj,jk,jpdic,Krhs)  ! we be used to compute DCAL if needed
+         END_3D
+      ENDIF
+      !
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zhinit(ji,jj,jk) = hi(ji,jj,jk) / ( rhd(ji,jj,jk) + 1._wp )
+      END_3D
+      !
+      !     -------------------------------------------
+      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS
+      !     -------------------------------------------
+
+      CALL solve_at_general( zhinit, zhi, Kbb )
+
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zco3(ji,jj,jk) = tr(ji,jj,jk,jpdic,Kbb) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2   &
+            &             + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn )
+         hi  (ji,jj,jk) = zhi(ji,jj,jk) * ( rhd(ji,jj,jk) + 1._wp )
+      END_3D
+
+      !     ---------------------------------------------------------
+      !        CALCULATE DEGREE OF CACO3 SATURATION AND CORRESPONDING
+      !        DISSOLOUTION AND PRECIPITATION OF CACO3 (BE AWARE OF
+      !        MGCO3)
+      !     ---------------------------------------------------------
+
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+
+         ! DEVIATION OF [CO3--] FROM SATURATION VALUE
+         ! Salinity dependance in zomegaca and divide by rhd to have good units
+         zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp )
+         zrhd    = rhd(ji,jj,jk) + 1._wp
+         zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zrhd + rtrn )
+
+         ! SET DEGREE OF UNDER-/SUPERSATURATION
+         excess(ji,jj,jk) = 1._wp - zomegaca
+         zexcess0 = MAX( 0., excess(ji,jj,jk) )
+
+         IF( zomegaca < 0.8 ) THEN
+            zexcess = zexcess0**nca
+            ! AMOUNT CACO3 THAT RE-ENTERS SOLUTION
+            zdispot = kdca * zexcess 
+         ELSE
+            zkd = kdca * 0.2**(nca - 0.2)
+            zexcess = zexcess0**0.2
+            zdispot = zkd * zexcess
+        ENDIF
+
+        !  CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3],
+        !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION
+        ztra(ji,jj,jk)  = zdispot / rmtss ! calcite dissolution
+        !
+      END_3D
+      !
+      DO_2D( 0, 0, 0, 0 )
+         zcaco3(ji,jj,1) = prodcal(ji,jj,1) * rfact2r / ( wsbio4(ji,jj,1) / e3t(ji,jj,1,Kmm) / rday + ztra(ji,jj,1) )
+      END_2D
+
+      DO_3D( 0, 0, 0, 0, 2, jpkm1)
+         zdissol = 0.0
+         zwsbio = wsbio4(ji,jj,jk) / rday
+         IF ( tmask(ji,jj,1) == 1. ) THEN
+            IF ( ztra(ji,jj,jk) == 0.0 ) THEN
+               zcaco3(ji,jj,jk) = zcaco3(ji,jj,jk-1) + prodcal(ji,jj,jk) * rfact2r / zwsbio * e3t(ji,jj,jk,Kmm) 
+            ELSE
+               zdepexp = exp( - ztra(ji,jj,jk) * e3t(ji,jj,jk,Kmm) / zwsbio )
+               zcaco3(ji,jj,jk) = prodcal(ji,jj,jk) * rfact2r / ztra(ji,jj,jk)  &
+                  & * (1.0 - zdepexp ) + zcaco3(ji,jj,jk-1) * zdepexp
+               zdissol = prodcal(ji,jj,jk) * e3t(ji,jj,jk,Kmm) + prodcal(ji,jj,jk)   &
+                  &      * zwsbio / ztra(ji,jj,jk) * ( zdepexp - 1.0 )   &
+                  &      + zwsbio * zcaco3(ji,jj,jk-1) * ( 1.0 - zdepexp ) * rfact2 
+               zdissol = zdissol / e3t(ji,jj,jk,Kmm)
+            ENDIF
+            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zdissol
+            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + 2.0 * zdissol
+         ENDIF
+      END_3D
+      DO_2D( 0, 0, 0, 0 )
+         sinkcalb(ji,jj) = wsbio4(ji,jj,mbkt(ji,jj)) * zcaco3(ji,jj,mbkt(ji,jj)) * rfact2 / rday
+      END_2D
+      !
+      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
+        WRITE(charout, FMT="('lys ')")
+        CALL prt_ctl_info( charout, cdcomp = 'top' )
+        CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+      ENDIF
+      !
+      IF( l_dia .AND. knt == nrdttrc ) THEN
+         IF( iom_use ( "PCAL" ) ) THEN   ! Calcite production
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = prodcal(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "PCAL", zw3d )
+         ENDIF
+         IF( iom_use( "DCAL" ) ) THEN  ! calcite dissolution
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = ( tr(ji,jj,jk,jpdic,Krhs) - zw3d(ji,jj,jk) ) * 1.e+3 * rfact2r * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "DCAL", zw3d )
+         ENDIF
+         IF( iom_use ( "EPCAL100" ) .OR. iom_use ( "EXPCAL" ) ) THEN
+            DO_3D( 0, 0, 0, 0, 1, jpkm1)
+               zw3d(ji,jj,jk) = wsbio4(ji,jj,jk) * zcaco3(ji,jj,jk) * 1.e+3 / rday * tmask(ji,jj,jk)
+            END_3D
+            CALL iom_put( "EPCAL100",  zw3d(:,:,ik100) )  ! Export of calcite at 100m
+            CALL iom_put( "EXPCAL"  ,  zw3d )             ! Export of calcite in the water column
+         ENDIF
+         IF( iom_use( "PH" ) ) THEN
+            DO_3D( 0, 0, 0, 0, 1, jpkm1)
+               zw3d(ji,jj,jk) = -1. * LOG10( MAX( hi(ji,jj,jk), rtrn ) ) * tmask(ji,jj,jk)
+            END_3D
+            CALL iom_put( "PH" , zw3d )
+         ENDIF
+         IF( iom_use( "CO3" ) ) THEN  ! bicarbonate 
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = zco3(ji,jj,jk) * 1.e+3 * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "CO3", zw3d )
+         ENDIF
+         IF( iom_use( "CO3sat" ) ) THEN  ! calcite saturation
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zrhd  = rhd(ji,jj,jk) + 1._wp
+                zw3d(ji,jj,jk) = aksp(ji,jj,jk) * zrhd / ( calcon * ( salinprac(ji,jj,jk) / 35._wp ) + rtrn )  &
+                 &            * 1.e+3 * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "CO3sat", zw3d )
+         ENDIF
+         DEALLOCATE( zw3d )
+      ENDIF
+      !
+      IF( ln_timing )   CALL timing_stop('p2z_lys')
+      !
+   END SUBROUTINE p2z_lys
+
    SUBROUTINE p4z_lys( kt, knt, Kbb, Krhs )
       !!---------------------------------------------------------------------
       !!                     ***  ROUTINE p4z_lys  ***
@@ -74,7 +240,7 @@ CONTAINS
       IF( ln_timing )  CALL timing_start('p4z_lys')
       !
      IF( kt == nittrc000 )  &
-           & l_dia = iom_use( "PH" ) .OR. iom_use( "CO3" ) .OR. iom_use( "CO3sat" ) .OR. iom_use( "DCAL" )
+           & l_dia = iom_use( "PH" ) .OR. iom_use( "CO3" ) .OR. iom_use( "CO3sat" ) .OR. iom_use( "DCAL" ) .OR. iom_use( "PCAL" )
 
       IF( l_dia )   THEN                  !* Save ta and sa trends
          ALLOCATE( zw3d(A2D(0),jpk) )    ;    zw3d(A2D(0),jpk) = 0._wp
@@ -122,8 +288,8 @@ CONTAINS
             ! AMOUNT CACO3 THAT RE-ENTERS SOLUTION
             zdispot = kdca * zexcess * tr(ji,jj,jk,jpcal,Kbb)
          ELSE
-            zkd = kdca * 0.2**(nca - 0.11)
-            zexcess = zexcess0**0.11
+            zkd = kdca * 0.2**(nca - 0.2)
+            zexcess = zexcess0**0.2
             zdispot = zkd * zexcess * tr(ji,jj,jk,jpcal,Kbb)
         ENDIF
 
@@ -138,6 +304,12 @@ CONTAINS
       !
 
       IF( l_dia .AND. knt == nrdttrc ) THEN
+         IF( iom_use ( "PCAL" ) ) THEN   ! Calcite production
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = prodcal(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "PCAL", zw3d )
+         ENDIF
          IF( iom_use( "DCAL" ) ) THEN  ! calcite dissolution
              DO_3D( 0, 0, 0, 0, 1, jpkm1)
                 zw3d(ji,jj,jk) = ( tr(ji,jj,jk,jpdic,Krhs) - zw3d(ji,jj,jk) ) * 1.e+3 * rfact2r * tmask(ji,jj,jk)
diff --git a/src/TOP/PISCES/P4Z/p4zmeso.F90 b/src/TOP/PISCES/P4Z/p4zmeso.F90
index d13609af..35160bcb 100644
--- a/src/TOP/PISCES/P4Z/p4zmeso.F90
+++ b/src/TOP/PISCES/P4Z/p4zmeso.F90
@@ -31,10 +31,12 @@ MODULE p4zmeso
    REAL(wp), PUBLIC ::  xpref2n      !: mesozoo preference for nanophyto
    REAL(wp), PUBLIC ::  xpref2z      !: mesozoo preference for microzooplankton
    REAL(wp), PUBLIC ::  xpref2c      !: mesozoo preference for POC 
+   REAL(wp), PUBLIC ::  xpref2m      !: mesozoo preference for mesozoo
    REAL(wp), PUBLIC ::  xthresh2zoo  !: zoo feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  xthresh2dia  !: diatoms feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  xthresh2phy  !: nanophyto feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  xthresh2poc  !: poc feeding threshold for mesozooplankton 
+   REAL(wp), PUBLIC ::  xthresh2mes  !: mesozoo feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  xthresh2     !: feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  resrat2      !: exsudation rate of mesozooplankton
    REAL(wp), PUBLIC ::  mzrat2       !: microzooplankton mortality rate 
@@ -81,14 +83,14 @@ CONTAINS
       INTEGER, INTENT(in)  ::  Kbb, kmm, Krhs ! time level indices
       !
       INTEGER  :: ji, jj, jk, jkt
-      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam
-      REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact   , zfood, zfoodlim, zproport, zbeta
+      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames
+      REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport, zbeta
       REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal
       REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgraztotc, zgraztotn, zgraztotf
       REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn
       REAL(wp) :: zrespz, ztortz, zgrazdc, zgrazz, zgrazpof, zgraznc, zgrazpoc, zgraznf, zgrazdf
-      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval, zdep
-      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zmigthick 
+      REAL(wp) :: zgrazm, zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zdep
+      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot, zmigthick 
       CHARACTER (len=25) :: charout
       REAL(wp), DIMENSION(A2D(0),jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi
       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof
@@ -143,19 +145,13 @@ CONTAINS
          !  -------------------------------------------------------------------------
          ztortz    = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb)  * (1. - nitrfac(ji,jj,jk) )
          !
- 
          !   Computation of the abundance of the preys
          !   A threshold can be specified in the namelist
          !   --------------------------------------------
          zcompadi  = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 )
          zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 )
          zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 )
-
-         ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone
-         ! it is to predation by mesozooplankton. We use a quota dependant parameterization
-         ! as a low quota indicates oligotrophic conditions which are charatcerized by
-         ! small cells
-         ! -------------------------------------------------------------------------------
+         zcompames = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - xthresh2mes ), 0.e0 )
          zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 )
 
          ! Mesozooplankton grazing
@@ -165,13 +161,12 @@ CONTAINS
          ! concentration is close to this threshold, it is decreased to avoid the 
          ! accumulation of food in the mesozoopelagic domain
          ! -------------------------------------------------------------------------------
-         zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc 
+         zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc    &
+           &         + xpref2m * zcompames 
          zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) )
          zdenom    = zfoodlim / ( xkgraz2 + zfoodlim )
-         zdenom2   = zdenom / ( zfood + rtrn )
          zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 
 
-
          ! An active switching parameterization is used here.
          ! We don't use the KTW parameterization proposed by 
          ! Vallina et al. because it tends to produce too steady biomass
@@ -190,22 +185,25 @@ CONTAINS
          ! to be close enough to have potential interference
          ! -----------------------------------------------------------
          zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 )
-         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn )
-         ztmp2 = xpref2c * zcompapoc**2
-         ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn )
-         ztmp4 = xpref2z * zcompaz**2
-         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn
+         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi )
+         ztmp2 = xpref2m * zcompames**2
+         ztmp3 = xpref2c * zcompapoc**2
+         ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph )
+         ztmp5 = xpref2z * zcompaz**2
+         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
          ztmp1 = ztmp1 / ztmptot
          ztmp2 = ztmp2 / ztmptot
          ztmp3 = ztmp3 / ztmptot
          ztmp4 = ztmp4 / ztmptot
+         ztmp5 = ztmp5 / ztmptot
 
          !   Mesozooplankton regular grazing on the different preys
          !   ------------------------------------------------------
-         zgrazdc   = zgraze2  * ztmp3 * zdenom  ! diatoms
+         zgrazdc   = zgraze2  * ztmp4 * zdenom  ! diatoms
          zgraznc   = zgraze2  * ztmp1 * zdenom  ! nanophytoplankton
-         zgrazpoc  = zgraze2  * ztmp2 * zdenom  ! small POC
-         zgrazz    = zgraze2  * ztmp4 * zdenom  ! microzooplankton
+         zgrazpoc  = zgraze2  * ztmp3 * zdenom  ! small POC
+         zgrazz    = zgraze2  * ztmp5 * zdenom  ! microzooplankton
+         zgrazm    = zgraze2  * ztmp2 * zdenom
 
          ! Ingestion rates of the Fe content of the different preys
          zgraznf   = zgraznc  * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn)
@@ -224,14 +222,12 @@ CONTAINS
          &           * (1. - nitrfac(ji,jj,jk))
          zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn)
          !
-         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg
+         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg
 
          ! Compute the proportion of filter feeders. It is assumed steady state.
-         ! ---------------------------------------------------------------------  
-         zproport  = 0._wp
-         IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN
-            zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc)
-         ENDIF
+         ! ---------------------------------------------------------------------
+         zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc)
+         zproport = zproport**2
 
          ! Compute fractionation of aggregates. It is assumed that 
          ! diatoms based aggregates are more prone to fractionation
@@ -257,18 +253,23 @@ CONTAINS
          zgraznc   = (1.0 - zproport) * zgraznc
          zgrazz    = (1.0 - zproport) * zgrazz
          zgrazpoc  = (1.0 - zproport) * zgrazpoc
+         zgrazm    = (1.0 - zproport) * zgrazm
          zgrazdf   = (1.0 - zproport) * zgrazdf
          zgraznf   = (1.0 - zproport) * zgraznf
          zgrazpof  = (1.0 - zproport) * zgrazpof
 
-
          ! Total ingestion rates in C, N, Fe
-         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazffep + zgrazffeg  ! grazing by mesozooplankton
+         zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazpoc + zgrazm + zgrazffep + zgrazffeg  ! grazing by mesozooplankton
          IF( l_dia_graz2 ) zgrazing2(ji,jj,jk) = zgraztotc
 
          zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk)   &
-         &   + zgrazpoc + zgrazffep + zgrazffeg
-         zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg
+         &   + zgrazm + zgrazpoc + zgrazffep + zgrazffeg
+         zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg + zgrazm * feratm
+
+         !   Stoichiometruc ratios of the food ingested by zooplanton 
+         !   --------------------------------------------------------
+         zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn )
+         zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn )
 
          ! Mesozooplankton efficiency. 
          ! We adopt a formulation proposed by Mitra et al. (2007)
@@ -278,13 +279,10 @@ CONTAINS
          ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 
          ! Fulton, 2012)
          ! -----------------------------------------------------------------------------------
-
-         zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn )
-         zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn )
          zepshert  = MIN( 1., zgrasratn, zgrasratf / feratm)
          zbeta     = MAX(0., (epsher2 - epsher2min) )
          ! Food quantity deprivation of GGE
-         zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
+         zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )
          ! Food quality deprivation of GGE
          zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 )
          ! Actual GGE
@@ -297,7 +295,7 @@ CONTAINS
          ! according to a infinite chain of predators (ANderson et al., 2013)
          zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz
 
-         tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) - zmortz + zepsherv * zgraztotc 
+         tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) - zmortz + zepsherv * zgraztotc - zgrazm 
          tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc
          tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zgrazz
          tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc
@@ -422,16 +420,6 @@ CONTAINS
       !
       ! Write the output
       IF( lk_iomput .AND. knt == nrdttrc ) THEN
-        !
-        IF( iom_use ( "PCAL" ) ) THEN   ! Calcite production
-            ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-            DO_3D( 0, 0, 0, 0, 1, jpkm1)
-               zw3d(ji,jj,jk) = prodcal(ji,jj,jk) * 1.e+3 * rfact2r * tmask(ji,jj,jk)
-            END_3D
-          CALL iom_put( "PCAL", zw3d )
-          DEALLOCATE( zw3d )
-        ENDIF
-        !
         !
         IF( l_dia_graz2 ) THEN  !   Total grazing of phyto by zooplankton
             zgrazing2(A2D(0),jpk) = 0._wp
@@ -488,7 +476,7 @@ CONTAINS
       INTEGER ::   ios   ! Local integer
       !
       NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xpref2n, xpref2d, xpref2z,   &
-         &                xpref2c, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, &
+         &                xpref2c, xpref2m, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, xthresh2mes, &
          &                xthresh2, xkgraz2, epsher2, epsher2min, sigma2, unass2, grazflux, ln_dvm_meso,  &
          &                xsigma2, xsigma2del, xfracmig
       !!----------------------------------------------------------------------
@@ -513,10 +501,12 @@ CONTAINS
          WRITE(numout,*) '      mesozoo preference for diatoms                 xpref2d      =', xpref2d
          WRITE(numout,*) '      mesozoo preference for zoo                     xpref2z      =', xpref2z
          WRITE(numout,*) '      mesozoo preference for poc                     xpref2c      =', xpref2c
+         WRITE(numout,*) '      mesozoo preference for mesozoo                 xpref2m      = ', xpref2m
          WRITE(numout,*) '      microzoo feeding threshold  for mesozoo        xthresh2zoo  =', xthresh2zoo
          WRITE(numout,*) '      diatoms feeding threshold  for mesozoo         xthresh2dia  =', xthresh2dia
          WRITE(numout,*) '      nanophyto feeding threshold for mesozoo        xthresh2phy  =', xthresh2phy
          WRITE(numout,*) '      poc feeding threshold for mesozoo              xthresh2poc  =', xthresh2poc
+         WRITE(numout,*) '      mesozoo feeding threshold for mesozoo          xthresh2mes  = ', xthresh2mes
          WRITE(numout,*) '      feeding threshold for mesozooplankton          xthresh2     =', xthresh2
          WRITE(numout,*) '      exsudation rate of mesozooplankton             resrat2      =', resrat2
          WRITE(numout,*) '      mesozooplankton mortality rate                 mzrat2       =', mzrat2
diff --git a/src/TOP/PISCES/P4Z/p4zmicro.F90 b/src/TOP/PISCES/P4Z/p4zmicro.F90
index a18a41e3..d480cb1a 100644
--- a/src/TOP/PISCES/P4Z/p4zmicro.F90
+++ b/src/TOP/PISCES/P4Z/p4zmicro.F90
@@ -13,7 +13,6 @@ MODULE p4zmicro
    USE oce_trc         ! shared variables between ocean and passive tracers
    USE trc             ! passive tracers common variables 
    USE sms_pisces      ! PISCES Source Minus Sink variables
-   USE p4zlim          ! Co-limitations
    USE p4zprod         ! production
    USE iom             ! I/O manager
    USE prtctl          ! print control for debugging
@@ -29,9 +28,11 @@ MODULE p4zmicro
    REAL(wp), PUBLIC ::   xprefc      !: microzoo preference for POC 
    REAL(wp), PUBLIC ::   xprefn      !: microzoo preference for nanophyto
    REAL(wp), PUBLIC ::   xprefd      !: microzoo preference for diatoms
+   REAL(wp), PUBLIC ::   xprefz      !: microzoo preference for microzooplankton
    REAL(wp), PUBLIC ::   xthreshdia  !: diatoms feeding threshold for microzooplankton 
    REAL(wp), PUBLIC ::   xthreshphy  !: nanophyto threshold for microzooplankton 
    REAL(wp), PUBLIC ::   xthreshpoc  !: poc threshold for microzooplankton 
+   REAL(wp), PUBLIC ::   xthreshzoo  !: microzoo threshold for microzooplankton 
    REAL(wp), PUBLIC ::   xthresh     !: feeding threshold for microzooplankton 
    REAL(wp), PUBLIC ::   resrat      !: exsudation rate of microzooplankton
    REAL(wp), PUBLIC ::   mzrat       !: microzooplankton mortality rate 
@@ -74,12 +75,12 @@ CONTAINS
       !
       INTEGER  :: ji, jj, jk
       REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc
-      REAL(wp) :: zgraze  , zdenom, zdenom2, zfact, zfood, zfoodlim, zbeta
+      REAL(wp) :: zgraze, zdenom, zfact, zfood, zfoodlim, zbeta
       REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf
       REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz
       REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn
-      REAL(wp) :: zgraznc, zgrazpoc, zgrazdc, zgrazpof, zgrazdf, zgraznf
-      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmptot, zproport
+      REAL(wp) :: zgraznc, zgrazz, zgrazpoc, zgrazdc, zgrazpof, zgrazdf, zgraznf
+      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot, zproport
       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zgrazing, zfezoo, zzligprod
       CHARACTER (len=25) :: charout
 
@@ -114,21 +115,22 @@ CONTAINS
 
          ! Proportion of diatoms that are within the size range
          ! accessible to microzooplankton. 
-         zproport  = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 ))
+         zproport  = sized(ji,jj,jk)**(-0.48) * ( 1.0 - ( sized(ji,jj,jk)**1.6 - 1.0 ) / 14.0 )
 
          !  linear mortality of mesozooplankton
          !  A michaelis menten modulation term is used to avoid extinction of 
          !  microzooplankton at very low food concentrations. Mortality is 
          !  enhanced in low O2 waters
          !  -----------------------------------------------------------------
-         zrespz = resrat * zfact * tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
-            &   + resrat * zfact * 3. * nitrfac(ji,jj,jk)
+         zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
+            &   + 3. * nitrfac(ji,jj,jk) )
 
          !  Zooplankton quadratic mortality. A square function has been selected with
          !  to mimic predation and disease (density dependent mortality). It also tends
          !  to stabilise the model
          !  -------------------------------------------------------------------------
          ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
+         zmortz = ztortz + zrespz
 
          !   Computation of the abundance of the preys
          !   A threshold can be specified in the namelist
@@ -139,6 +141,7 @@ CONTAINS
          zcompadi  = zproport * MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthreshdia ), 0.e0 )
          zcompaph  = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthreshphy ), 0.e0 )
          zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthreshpoc ), 0.e0 )
+         zcompaz   = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthreshzoo ), 0.e0 )
  
          ! Microzooplankton grazing
          ! The total amount of food is the sum of all preys accessible to mesozooplankton 
@@ -147,10 +150,9 @@ CONTAINS
          ! concentration is close to this threshold, it is decreased to avoid the 
          ! accumulation of food in the mesozoopelagic domain
          ! -------------------------------------------------------------------------------
-         zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi
-         zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) )
+         zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi + xprefz * zcompaz
+         zfoodlim  = MAX( 0. , zfood - MIN(xthresh,0.5*zfood) )
          zdenom    = zfoodlim / ( xkgraz + zfoodlim )
-         zdenom2   = zdenom / ( zfood + rtrn )
          zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
 
          ! An active switching parameterization is used here.
@@ -167,19 +169,22 @@ CONTAINS
          ! ----------------------------------------------------------
          zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2)
          zsigma = xsigma + xsigmadel * zsigma
-         zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
-         ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn )
-         ztmp2 = xprefd * zcompadi * ( zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn )
+         zdiffdn = EXP( -ABS(LOG(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
+         ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) 
+         ztmp2 = xprefd * zcompadi * ( zdiffdn * zcompaph + zcompadi )
          ztmp3 = xprefc * zcompapoc**2
-         ztmptot = ztmp1 + ztmp2 + ztmp3 + rtrn
+         ztmp4 = xprefz * zcompaz**2
+         ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn
          ztmp1 = ztmp1 / ztmptot
          ztmp2 = ztmp2 / ztmptot
          ztmp3 = ztmp3 / ztmptot
+         ztmp4 = ztmp4 / ztmptot
 
          ! Ingestion terms on the different preys of microzooplankton
          zgraznc   = zgraze   * ztmp1 * zdenom  ! Nanophytoplankton
          zgrazdc   = zgraze   * ztmp2 * zdenom  ! Diatoms
          zgrazpoc  = zgraze   * ztmp3 * zdenom  ! POC
+         zgrazz    = zgraze   * ztmp4 * zdenom  ! Microzoo
 
          ! Ingestion terms on the iron content of the different preys
          zgraznf   = zgraznc  * tr(ji,jj,jk,jpnfe,Kbb) / (tr(ji,jj,jk,jpphy,Kbb) + rtrn)
@@ -187,11 +192,16 @@ CONTAINS
          zgrazdf   = zgrazdc  * tr(ji,jj,jk,jpdfe,Kbb) / (tr(ji,jj,jk,jpdia,Kbb) + rtrn)
          !
          ! Total ingestion rate in C, Fe, N units
-         zgraztotc = zgraznc + zgrazpoc + zgrazdc   ! grazing by microzooplankton
+         zgraztotc = zgraznc + zgrazpoc + zgrazdc + zgrazz
          IF( l_dia_graz1 )   zgrazing(ji,jj,jk) = zgraztotc
 
-         zgraztotf = zgraznf + zgrazdf  + zgrazpof 
-         zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazdc * quotad(ji,jj,jk)
+         zgraztotf = zgraznf + zgrazdf  + zgrazpof + zgrazz * feratz
+         zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazdc * quotad(ji,jj,jk) + zgrazz
+
+         !   Stoichiometruc ratios of the food ingested by zooplanton 
+         !   --------------------------------------------------------
+         zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn )
+         zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn )
 
          ! Microzooplankton efficiency. 
          ! We adopt a formulation proposed by Mitra et al. (2007)
@@ -201,11 +211,8 @@ CONTAINS
          ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and 
          ! Fulton, 2012)
          ! -----------------------------------------------------------------------------
-
-         zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn )
-         zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn )
          zepshert  =  MIN( 1., zgrasratn, zgrasratf / feratz)
-         zbeta     = MAX(0., (epsher - epshermin) )
+         zbeta     =  MAX(0., (epsher - epshermin) )
          ! Food quantity deprivation of the GGE
          zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )
          ! Food quality deprivation of the GGE
@@ -219,7 +226,6 @@ CONTAINS
          ! Egestion of C, N, P
          zgrapoc   = zgraztotc * unass
 
-
          !  Update of the TRA arrays
          !  ------------------------
          ! Fraction of excretion as inorganic nutrients and DIC
@@ -241,8 +247,7 @@ CONTAINS
          tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgrarsig
          !   Update the arrays TRA which contain the biological sources and sinks
          !   --------------------------------------------------------------------
-         zmortz = ztortz + zrespz
-         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc 
+         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zmortz + zepsherv * zgraztotc - zgrazz 
          tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc
          tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc
          tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb)/(tr(ji,jj,jk,jpphy,Kbb)+rtrn)
@@ -328,7 +333,7 @@ CONTAINS
       INTEGER ::   ios   ! Local integer
       !
       NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, &
-         &                xprefd,  xthreshdia,  xthreshphy,  xthreshpoc, &
+         &                xprefd, xprefz, xthreshdia, xthreshphy, xthreshpoc, xthreshzoo, &
          &                xthresh, xkgraz, epsher, epshermin, sigma1, unass,  &
          &                xsigma, xsigmadel
       !!----------------------------------------------------------------------
@@ -352,9 +357,11 @@ CONTAINS
          WRITE(numout,*) '      microzoo preference for POC                     xprefc      =', xprefc
          WRITE(numout,*) '      microzoo preference for nano                    xprefn      =', xprefn
          WRITE(numout,*) '      microzoo preference for diatoms                 xprefd      =', xprefd
+         WRITE(numout,*) '      microzoo preference for microzooplankton        xprefz      =', xprefz
          WRITE(numout,*) '      diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia
          WRITE(numout,*) '      nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy
          WRITE(numout,*) '      poc feeding threshold for microzoo              xthreshpoc  =', xthreshpoc
+         WRITE(numout,*) '      microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
          WRITE(numout,*) '      feeding threshold for microzooplankton          xthresh     =', xthresh
          WRITE(numout,*) '      exsudation rate of microzooplankton             resrat      =', resrat
          WRITE(numout,*) '      microzooplankton mortality rate                 mzrat       =', mzrat
diff --git a/src/TOP/PISCES/P4Z/p4zmort.F90 b/src/TOP/PISCES/P4Z/p4zmort.F90
index 3c3903e7..f90213ce 100644
--- a/src/TOP/PISCES/P4Z/p4zmort.F90
+++ b/src/TOP/PISCES/P4Z/p4zmort.F90
@@ -13,6 +13,7 @@ MODULE p4zmort
    USE trc             ! passive tracers common variables 
    USE sms_pisces      ! PISCES Source Minus Sink variables
    USE p4zprod         ! Primary productivity 
+   USE p2zlim          ! Phytoplankton limitation terms
    USE p4zlim          ! Phytoplankton limitation terms
    USE prtctl          ! print control for debugging
 
diff --git a/src/TOP/PISCES/P4Z/p4zopt.F90 b/src/TOP/PISCES/P4Z/p4zopt.F90
index 8ff01e2c..961f6775 100644
--- a/src/TOP/PISCES/P4Z/p4zopt.F90
+++ b/src/TOP/PISCES/P4Z/p4zopt.F90
@@ -65,8 +65,8 @@ CONTAINS
       INTEGER  ::   irgb
       REAL(wp) ::   zchl
       REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zetmp5
-      REAL(wp), DIMENSION(A2D(0)    ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zetmp4
+      REAL(wp), DIMENSION(A2D(0)    ) :: zdepmoy, zetmp1, zetmp2, zetmp3
       REAL(wp), DIMENSION(A2D(0)    ) :: zqsr100, zqsr_corr
       REAL(wp), DIMENSION(A2D(0),jpk) :: zpar, ze0, ze1, ze2, ze3
       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
@@ -82,12 +82,6 @@ CONTAINS
 
       IF( knt == 1 .AND. ln_varpar )   CALL p4z_opt_sbc( kt )
 
-      !     Initialisation of variables used to compute PAR
-      !     -----------------------------------------------
-!      ze1(:,:,:) = 0._wp
-!      ze2(:,:,:) = 0._wp
-!      ze3(:,:,:) = 0._wp
-
       !
       ! Attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue)
       ! Thus the light penetration scheme is based on a decomposition of PAR
@@ -98,8 +92,12 @@ CONTAINS
       ! Computation of the light attenuation parameters based on a 
       ! look-up table
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         zchl =  ( tr(ji,jj,jk,jpnch,Kbb) + tr(ji,jj,jk,jpdch,Kbb) + rtrn ) * 1.e6
-         IF( ln_p5z )   zchl = zchl + tr(ji,jj,jk,jppch,Kbb) * 1.e6
+         IF( ln_p2z ) THEN
+            zchl = ( tr(ji,jj,jk,jpphy,Kbb) * 12.0 * thetanano(ji,jj,jk) + rtrn ) * 1.e6
+         ELSE
+            zchl =  ( tr(ji,jj,jk,jpnch,Kbb) + tr(ji,jj,jk,jpdch,Kbb) + rtrn ) * 1.e6
+            IF( ln_p5z )       zchl = zchl + tr(ji,jj,jk,jppch,Kbb) * 1.e6
+         ENDIF
          zchl = MIN(  10. , MAX( 0.05, zchl )  )
          irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn )
          !                                                         
@@ -153,12 +151,16 @@ CONTAINS
             DO_3D( 0, 0, 0, 0, 1, nksr )
                etot (ji,jj,jk) =         ze1(ji,jj,jk) +        ze2(ji,jj,jk) +        ze3(ji,jj,jk)
                enano(ji,jj,jk) =  1.85 * ze1(ji,jj,jk) + 0.69 * ze2(ji,jj,jk) + 0.46 * ze3(ji,jj,jk)
-               ediat(ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
             END_3D
-            IF( ln_p5z ) THEN
+            IF( .NOT. ln_p2z ) THEN
                DO_3D( 0, 0, 0, 0, 1, nksr )
-                  epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk)
+                  ediat(ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
                END_3D
+               IF( ln_p5z ) THEN
+                  DO_3D( 0, 0, 0, 0, 1, nksr )
+                     epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk)
+                  END_3D
+               ENDIF
             ENDIF
 
          ELSE ! No diurnal cycle in PISCES
@@ -182,12 +184,16 @@ CONTAINS
             DO_3D( 0, 0, 0, 0, 1, nksr )
                etot_ndcy(ji,jj,jk) =         ze1(ji,jj,jk) +        ze2(ji,jj,jk) +        ze3(ji,jj,jk)
                enano    (ji,jj,jk) =  1.85 * ze1(ji,jj,jk) + 0.69 * ze2(ji,jj,jk) + 0.46 * ze3(ji,jj,jk)
-               ediat    (ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
             END_3D
-            IF( ln_p5z ) THEN
+            IF( .NOT. ln_p2z ) THEN
                DO_3D( 0, 0, 0, 0, 1, nksr )
-                  epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk)
+                  ediat(ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
                END_3D
+               IF( ln_p5z ) THEN
+                  DO_3D( 0, 0, 0, 0, 1, nksr )
+                     epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk)
+                  END_3D
+               ENDIF
             ENDIF
             !
             ! SW over the ice free zone of the grid cell. This assumes that
@@ -227,12 +233,16 @@ CONTAINS
          DO_3D( 0, 0, 0, 0, 1, nksr )
             etot (ji,jj,jk) =         ze1(ji,jj,jk) +        ze2(ji,jj,jk) +        ze3(ji,jj,jk)
             enano(ji,jj,jk) =  1.85 * ze1(ji,jj,jk) + 0.69 * ze2(ji,jj,jk) + 0.46 * ze3(ji,jj,jk)
-            ediat(ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
          END_3D
-         IF( ln_p5z ) THEN
+         IF( .NOT. ln_p2z ) THEN
             DO_3D( 0, 0, 0, 0, 1, nksr )
-               epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk) ! Picophytoplankton (PISCES-QUOTA)
+               ediat(ji,jj,jk) =  1.62 * ze1(ji,jj,jk) + 0.74 * ze2(ji,jj,jk) + 0.63 * ze3(ji,jj,jk)
             END_3D
+            IF( ln_p5z ) THEN
+               DO_3D( 0, 0, 0, 0, 1, nksr )
+                  epico(ji,jj,jk) =  1.94 * ze1(ji,jj,jk) + 0.66 * ze2(ji,jj,jk) + 0.4 * ze3(ji,jj,jk)
+               END_3D
+            ENDIF
          ENDIF
          etot_ndcy(:,:,:) =  etot(:,:,:) 
       ENDIF
@@ -307,32 +317,48 @@ CONTAINS
       ! groups based on their absorption characteristics.
       zdepmoy(:,:)   = 0.e0
       zetmp3 (:,:)   = 0.e0
-      zetmp4 (:,:)   = 0.e0
       !
       DO_3D( 0, 0, 0, 0, 1, nksr)
          IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN
             zetmp3 (ji,jj) = zetmp3 (ji,jj) + enano    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Nanophytoplankton
-            zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms
             zdepmoy(ji,jj) = zdepmoy(ji,jj) +                       e3t(ji,jj,jk,Kmm)
          ENDIF
       END_3D
       enanom(:,:,:) = enano(:,:,:)
-      ediatm(:,:,:) = ediat(:,:,:)
       !
       DO_3D( 0, 0, 0, 0, 1, nksr)
          IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
             z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn )
             enanom(ji,jj,jk) = zetmp3(ji,jj) * z1_dep
-            ediatm(ji,jj,jk) = zetmp4(ji,jj) * z1_dep
          ENDIF
       END_3D
       !
+      IF( .NOT. ln_p2z ) THEN
+         ! Diatoms when using PISCES-operational or PISCES-QUOTA
+         ALLOCATE( zetmp4(A2D(0)) )  ;   zetmp4 (:,:) = 0.e0
+         !
+         DO_3D( 0, 0, 0, 0, 1, nksr)
+            IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN
+               zetmp4 (ji,jj) = zetmp4 (ji,jj) + ediat    (ji,jj,jk) * e3t(ji,jj,jk,Kmm) ! Diatoms
+            ENDIF
+         END_3D
+         !
+         ediatm(:,:,:) = ediat(:,:,:)
+         !
+         DO_3D( 0, 0, 0, 0, 1, nksr)
+            IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
+               z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn )
+               ediatm(ji,jj,jk) = zetmp4(ji,jj) * z1_dep
+            ENDIF
+         END_3D
+         DEALLOCATE( zetmp4 )
+      ENDIF
       IF( ln_p5z ) THEN
          ! Picophytoplankton when using PISCES-QUOTA
-         ALLOCATE( zetmp5(A2D(0)) )  ;   zetmp5 (:,:) = 0.e0
+         ALLOCATE( zetmp4(A2D(0)) )  ;   zetmp4 (:,:) = 0.e0
          DO_3D( 0, 0, 0, 0, 1, nksr)
             IF( gdepw(ji,jj,jk+1,Kmm) <= MIN(hmld(ji,jj), heup_01(ji,jj)) ) THEN
-               zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm)
+               zetmp4(ji,jj)  = zetmp4 (ji,jj) + epico(ji,jj,jk) * e3t(ji,jj,jk,Kmm)
             ENDIF
          END_3D
          !
@@ -341,10 +367,10 @@ CONTAINS
          DO_3D( 0, 0, 0, 0, 1, nksr)
             IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
                z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn )
-               epicom(ji,jj,jk) = zetmp5(ji,jj) * z1_dep
+               epicom(ji,jj,jk) = zetmp4(ji,jj) * z1_dep
             ENDIF
          END_3D
-         DEALLOCATE( zetmp5 )
+         DEALLOCATE( zetmp4 )
       ENDIF
       !
       IF( lk_iomput .AND.  knt == nrdttrc ) THEN
@@ -537,9 +563,9 @@ CONTAINS
                          etot     (:,:,:) = 0._wp
                          etot_ndcy(:,:,:) = 0._wp
                          enano    (:,:,:) = 0._wp
-                         ediat    (:,:,:) = 0._wp
-      IF( ln_p5z     )   epico    (:,:,:) = 0._wp
-      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp
+      IF( .NOT. ln_p2z)  ediat    (:,:,:) = 0._wp
+      IF( ln_p5z      )  epico    (:,:,:) = 0._wp
+      IF( ln_qsr_bio  )  etot3    (:,:,:) = 0._wp
       ! 
    END SUBROUTINE p4z_opt_init
 
diff --git a/src/TOP/PISCES/P4Z/p4zpoc.F90 b/src/TOP/PISCES/P4Z/p4zpoc.F90
index 823d416a..59863b31 100644
--- a/src/TOP/PISCES/P4Z/p4zpoc.F90
+++ b/src/TOP/PISCES/P4Z/p4zpoc.F90
@@ -28,7 +28,6 @@ MODULE p4zpoc
    PUBLIC   alngam          ! 
    PUBLIC   gamain          !
 
-   REAL(wp), PUBLIC ::   xremip     !: remineralisation rate of DOC
    REAL(wp), PUBLIC ::   xremipc    !: remineralisation rate of DOC
    REAL(wp), PUBLIC ::   xremipn    !: remineralisation rate of DON
    REAL(wp), PUBLIC ::   xremipp    !: remineralisation rate of DOP
@@ -71,7 +70,7 @@ CONTAINS
       !
       INTEGER  ::   ji, jj, jk, jn
       REAL(wp) ::   zremip, zremig, zdep, zorem, zorem2, zofer
-      REAL(wp) ::   zopon, zopop, zopoc, zopoc2, zopon2, zopop2
+      REAL(wp) ::   zopon, zopop, zopon2, zopop2
       REAL(wp) ::   zsizek, zsizek1, alphat, remint, zpoc, zremipart
       REAL(wp) ::   zofer2, zofer3
       CHARACTER (len=25) :: charout
@@ -86,184 +85,173 @@ CONTAINS
       IF( kt == nittrc000 ) & 
           &      l_dia_remin_part = iom_use( "REMINP" ) .OR. iom_use( "REMING" ) .OR. iom_use( "REMINF" )
       !
-     IF( l_dia_remin_part ) THEN
+      IF( l_dia_remin_part ) THEN
          ALLOCATE( zfolimi (A2D(0),jpk) )  ;  zfolimi (A2D(0),jpk) = 0._wp
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
             zfolimi (ji,jj,jk) = tr(ji,jj,jk,jpfer,Krhs)
          END_3D
-     ENDIF
-      ! Initialisation of temporary arrays
-      IF( ln_p4z ) THEN   ;   ztremint(:,:,:) = xremip
-      ELSE                ;   ztremint(:,:,:) = xremipc ! ln_p5z
       ENDIF
+
+      ! Initialisation of temporary arrays
+      ztremint(:,:,:) = xremipc
+      orem  (:,:,jpk) = 0.
       zorem3(:,:,:)   = 0.
-      orem  (:,:,:)   = 0.
 
       ! Initialisation of the lability distributions that are set to 
       ! the distribution of newly produced organic particles
       DO jn = 1, jcpoc
-        alphag(:,:,:,jn) = alphan(jn)
         alphap(:,:,:,jn) = alphan(jn)
+        alphag(:,:,:,jn) = alphan(jn)
       END DO
 
-     ! Lability parameterization. This is the big particles part (GOC)
-     ! This lability parameterization is always active. However, if only one
-     ! lability class is specified in the namelist, this is equivalent to 
-     ! a standard parameterisation with a constant lability
-     ! -----------------------------------------------------------------------
-     DO_3D( 0, 0, 0, 0, 2, jpkm1)
-        IF (tmask(ji,jj,jk) == 1.) THEN
-          zdep = hmld(ji,jj)
-          !
-          ! In the case of GOC, lability is constant in the mixed layer 
-          ! It is computed only below the mixed layer depth
-          ! ------------------------------------------------------------
-          !
-          IF( gdept(ji,jj,jk,Kmm) > zdep ) THEN
-            alphat = 0.
-            remint = 0.
-            !
-            zsizek1  = e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1)
-            zsizek = e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk)
-            !
-            IF ( gdept(ji,jj,jk-1,Kmm) <= zdep ) THEN
-              ! 
-              ! The first level just below the mixed layer needs a 
-              ! specific treatment because lability is supposed constant
-              ! everywhere within the mixed layer. This means that 
-              ! change in lability in the bottom part of the previous cell
-              ! should not be computed
-              ! ----------------------------------------------------------
+     IF( .NOT. ln_p2z) THEN
+        ! Lability parameterization. This is the big particles part (GOC)
+        ! This lability parameterization is always active. However, if only one
+        ! lability class is specified in the namelist, this is equivalent to 
+        ! a standard parameterisation with a constant lability
+        ! -----------------------------------------------------------------------
+        DO_3D( 0, 0, 0, 0, 2, jpkm1)
+           IF (tmask(ji,jj,jk) == 1.) THEN
+              zdep = hmld(ji,jj)
               !
-              ! POC concentration is computed using the lagrangian 
-              ! framework. It is only used for the lability param
-              zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk) * rday / rfact2               &
-              &   * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn)
-              zpoc = MAX(0., zpoc)
+              ! In the case of GOC, lability is constant in the mixed layer 
+              ! It is computed only below the mixed layer depth
+              ! ------------------------------------------------------------
               !
-              DO jn = 1, jcpoc
+              IF( gdept(ji,jj,jk,Kmm) > zdep ) THEN
+                 alphat = 0.
+                 remint = 0.
                  !
-                 ! Lagrangian based algorithm. The fraction of each 
-                 ! lability class is computed starting from the previous
-                 ! level
-                 ! -----------------------------------------------------
+                 zsizek1  = e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1)
+                 zsizek = e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk)
                  !
-                 ! the concentration of each lability class is calculated
-                 ! as the sum of the different sources and sinks
-                 ! Please note that production of new GOC experiences
-                 ! degradation 
-                 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc &
-                 &   + prodgoc(ji,jj,jk) * alphan(jn) / tgfunc(ji,jj,jk) / reminp(jn)             &
-                 &   * ( 1. - exp( -reminp(jn) * zsizek ) ) * rday / rfact2 
-                 alphat = alphat + alphag(ji,jj,jk,jn)
-                 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn)
-              END DO
-            ELSE
-              !
-              ! standard algorithm in the rest of the water column
-              ! See the comments in the previous block.
-              ! ---------------------------------------------------
-              !
-              zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk-1) * rday / rfact2               &
-              &   * e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk)   &
-              &   * rday / rfact2 * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn)
-              zpoc = max(0., zpoc)
-              !
-              DO jn = 1, jcpoc
-                 alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * ( zsizek              &
-                 &   + zsizek1 ) ) * zpoc + ( prodgoc(ji,jj,jk-1) / tgfunc(ji,jj,jk-1) * ( 1.           &
-                 &   - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) * zsizek ) + prodgoc(ji,jj,jk) &
-                 &   / tgfunc(ji,jj,jk) * ( 1. - exp( -reminp(jn) * zsizek ) ) ) * rday / rfact2 / reminp(jn) * alphan(jn) 
-                 alphat = alphat + alphag(ji,jj,jk,jn)
-                 remint = remint + alphag(ji,jj,jk,jn) * reminp(jn)
-              END DO
-            ENDIF
-            !
-            DO jn = 1, jcpoc
-               ! The contribution of each lability class at the current
-               ! level is computed
-               alphag(ji,jj,jk,jn) = alphag(ji,jj,jk,jn) / ( alphat + rtrn)
-            END DO
-            ! Computation of the mean remineralisation rate
-            ztremint(ji,jj,jk) =  MAX(0., remint / ( alphat + rtrn) )
-            !
-          ENDIF
+                 IF ( gdept(ji,jj,jk-1,Kmm) <= zdep ) THEN
+                    ! 
+                    ! The first level just below the mixed layer needs a 
+                    ! specific treatment because lability is supposed constant
+                    ! everywhere within the mixed layer. This means that 
+                    ! change in lability in the bottom part of the previous cell
+                    ! should not be computed
+                    ! ----------------------------------------------------------
+                    !
+                    ! POC concentration is computed using the lagrangian 
+                    ! framework. It is only used for the lability param
+                    zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk) * rday / rfact2               &
+                    &   * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn)
+                    zpoc = MAX(0., zpoc)
+                    !
+                    DO jn = 1, jcpoc
+                       !
+                       ! Lagrangian based algorithm. The fraction of each 
+                       ! lability class is computed starting from the previous
+                       ! level
+                       ! -----------------------------------------------------
+                       !
+                       ! the concentration of each lability class is calculated
+                       ! as the sum of the different sources and sinks
+                       ! Please note that production of new GOC experiences
+                       ! degradation 
+                       alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * zsizek ) * zpoc &
+                       &   + prodgoc(ji,jj,jk) * alphan(jn) / tgfunc(ji,jj,jk) / reminp(jn)             &
+                       &   * ( 1. - exp( -reminp(jn) * zsizek ) ) * rday / rfact2 
+                       alphat = alphat + alphag(ji,jj,jk,jn)
+                       remint = remint + alphag(ji,jj,jk,jn) * reminp(jn)
+                    END DO
+                 ELSE
+                    !
+                    ! standard algorithm in the rest of the water column
+                    ! See the comments in the previous block.
+                    ! ---------------------------------------------------
+                    !
+                    zpoc = tr(ji,jj,jk-1,jpgoc,Kbb) + consgoc(ji,jj,jk-1) * rday / rfact2               &
+                    &   * e3t(ji,jj,jk-1,Kmm) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk)   &
+                    &   * rday / rfact2 * e3t(ji,jj,jk,Kmm) / 2. / (wsbio4(ji,jj,jk) + rtrn)
+                    zpoc = max(0., zpoc)
+                    !
+                    DO jn = 1, jcpoc
+                       alphag(ji,jj,jk,jn) = alphag(ji,jj,jk-1,jn) * exp( -reminp(jn) * ( zsizek              &
+                       &   + zsizek1 ) ) * zpoc + ( prodgoc(ji,jj,jk-1) / tgfunc(ji,jj,jk-1) * ( 1.           &
+                       &   - exp( -reminp(jn) * zsizek1 ) ) * exp( -reminp(jn) * zsizek ) + prodgoc(ji,jj,jk) &
+                       &   / tgfunc(ji,jj,jk) * ( 1. - exp( -reminp(jn) * zsizek ) ) ) * rday / rfact2 / reminp(jn) * alphan(jn) 
+                       alphat = alphat + alphag(ji,jj,jk,jn)
+                       remint = remint + alphag(ji,jj,jk,jn) * reminp(jn)
+                    END DO
+                 ENDIF
+                 !
+                 DO jn = 1, jcpoc
+                    ! The contribution of each lability class at the current
+                    ! level is computed
+                    alphag(ji,jj,jk,jn) = alphag(ji,jj,jk,jn) / ( alphat + rtrn)
+                 END DO
+                 ! Computation of the mean remineralisation rate
+                 ztremint(ji,jj,jk) =  MAX(0., remint / ( alphat + rtrn) )
+                 !
+              ENDIF
+           ENDIF
+        END_3D
+        !
+        IF( l_dia_remin_part ) THEN
+           ALLOCATE( zremigoc(A2D(0),jpk) )  ;  zremigoc(A2D(0),jpk) = 0._wp
+           DO_3D( 0, 0, 0, 0, 1, jpkm1)
+              zremigoc(ji,jj,jk) = tr(ji,jj,jk,jpdoc,Krhs)
+           END_3D
         ENDIF
-     END_3D
-     !
-     IF( l_dia_remin_part ) THEN
-        ALLOCATE( zremigoc(A2D(0),jpk) )  ;  zremigoc(A2D(0),jpk) = 0._wp
+        !
+        ! The standard PISCES part
         DO_3D( 0, 0, 0, 0, 1, jpkm1)
-           zremigoc(ji,jj,jk) = tr(ji,jj,jk,jpdoc,Krhs)
+           ! POC degradation by bacterial activity. It is a function 
+           ! of the mean lability and of temperature. This also includes
+           ! shrinking of particles due to the bacterial activity
+           ! -----------------------------------------------------------
+           zremipart = MIN( xremipc, ztremint(ji,jj,jk) )
+           zremig = zremipart * xstep * tgfunc(ji,jj,jk)
+           zorem2  = zremig * tr(ji,jj,jk,jpgoc,Kbb)
+           orem(ji,jj,jk)   = zorem2
+           zorem3(ji,jj,jk) = zremig * solgoc * tr(ji,jj,jk,jpgoc,Kbb)
+           zofer2 = zremig * tr(ji,jj,jk,jpbfe,Kbb)
+
+           ! update of the TRA arrays
+           tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk)
+           tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zorem2 - zorem3(ji,jj,jk)
+           tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + solgoc * zofer2
+           tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - (1.0 + solgoc) * zofer2
+           tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem2
+           tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer2
         END_3D
-     ENDIF
-     !
-     IF( ln_p4z ) THEN
-         ! The standard PISCES part
-         DO_3D( 0, 0, 0, 0, 1, jpkm1)
-            ! POC degradation by bacterial activity. It is a function 
-            ! of the mean lability and of temperature. This also includes
-            ! shrinking of particles due to the bacterial activity
-            ! -----------------------------------------------------------
-            zremipart = MIN( xremip, ztremint(ji,jj,jk) )
-            zremig = zremipart * xstep * tgfunc(ji,jj,jk)
-            zorem2  = zremig * tr(ji,jj,jk,jpgoc,Kbb)
-            orem(ji,jj,jk)      = zorem2
-            zorem3(ji,jj,jk) = zremig * solgoc * tr(ji,jj,jk,jpgoc,Kbb)
-            zofer2 = zremig * tr(ji,jj,jk,jpbfe,Kbb)
-            zofer3 = zremig * solgoc * tr(ji,jj,jk,jpbfe,Kbb)
-
-            ! update of the TRA arrays
-            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk)
-            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zorem2 - zorem3(ji,jj,jk)
-            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + zofer3
-            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zofer2 - zofer3
-            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem2
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer2
-         END_3D
-      ELSE
-         DO_3D( 0, 0, 0, 0, 1, jpkm1)
-            ! POC degradation by bacterial activity. It is a function 
-            ! of the mean lability and of temperature. This also includes
-            ! shrinking of particles due to the bacterial activity
-            ! --------------------------------------------------------
-            zremipart = MIN( xremipc, ztremint(ji,jj,jk) )
-            zremig = zremipart * xstep * tgfunc(ji,jj,jk)
-            zopoc2 = zremig  * tr(ji,jj,jk,jpgoc,Kbb)
-            orem(ji,jj,jk) = zopoc2
-            zorem3(ji,jj,jk) = zremig * solgoc * tr(ji,jj,jk,jpgoc,Kbb)
-            zopon2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpgon,Kbb)
-            zopop2 = xremipp / xremipc * zremig * tr(ji,jj,jk,jpgop,Kbb)
-            zofer2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpbfe,Kbb)
-
-            ! update of the TRA arrays
-            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zorem3(ji,jj,jk)
-            tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2 
-            tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + solgoc * zopop2
-            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + solgoc * zofer2
-            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zopoc2
-            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon2
-            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop2
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer2
-            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zopoc2 - zorem3(ji,jj,jk)
-            tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zopon2 * (1. + solgoc)
-            tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zopop2 * (1. + solgoc)
-            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zofer2 * (1. + solgoc)
-         END_3D
-      ENDIF
-      IF( l_dia_remin_part ) THEN
-         DO_3D( 0, 0, 0, 0, 1, jpkm1)
-            zremigoc(ji,jj,jk) = ( tr(ji,jj,jk,jpdoc,Krhs) - zremigoc(ji,jj,jk) ) / &
-                                 ( xstep * tgfunc(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) * tmask(ji,jj,jk) ! =zremipart
-         END_3D
-      ENDIF
+        IF ( ln_p5z ) THEN
+           DO_3D( 0, 0, 0, 0, 1, jpkm1)
+              ! POC degradation by bacterial activity. It is a function 
+              ! of the mean lability and of temperature. This also includes
+              ! shrinking of particles due to the bacterial activity
+              ! --------------------------------------------------------
+              zremipart = MIN( xremipc, ztremint(ji,jj,jk) )
+              zremig = zremipart * xstep * tgfunc(ji,jj,jk)
+              zopon2 = xremipn / xremipc * zremig * tr(ji,jj,jk,jpgon,Kbb)
+              zopop2 = xremipp / xremipc * zremig * tr(ji,jj,jk,jpgop,Kbb)
+
+              ! update of the TRA arrays
+              tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + solgoc * zopon2 
+              tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + solgoc * zopop2
+              tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon2
+              tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop2
+              tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zopon2 * (1. + solgoc)
+              tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zopop2 * (1. + solgoc)
+           END_3D
+        ENDIF
+        IF( l_dia_remin_part ) THEN
+           DO_3D( 0, 0, 0, 0, 1, jpkm1)
+              zremigoc(ji,jj,jk) = ( tr(ji,jj,jk,jpdoc,Krhs) - zremigoc(ji,jj,jk) ) / &
+              &                  ( xstep * tgfunc(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) * tmask(ji,jj,jk) ! =zremipart
+           END_3D
+        ENDIF
 
-     IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
-        WRITE(charout, FMT="('poc1')")
-        CALL prt_ctl_info( charout, cdcomp = 'top' )
-        CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
-     ENDIF
+        IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
+           WRITE(charout, FMT="('poc1')")
+           CALL prt_ctl_info( charout, cdcomp = 'top' )
+           CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+        ENDIF
 
+     ENDIF
      ! Lability parameterization for the small OM particles. This param 
      ! is based on the same theoretical background as the big particles.
      ! However, because of its low sinking speed, lability is not supposed
@@ -273,6 +261,7 @@ CONTAINS
      totprod (:,:) = 0.
      totthick(:,:) = 0.
      totcons (:,:) = 0.
+     ztremint(:,:,:) = xremipc
 
      ! intregrated production and consumption of POC in the mixed layer
      ! ----------------------------------------------------------------
@@ -396,63 +385,82 @@ CONTAINS
             zremipoc(ji,jj,jk) = tr(ji,jj,jk,jpdoc,Krhs)
          END_3D
      ENDIF
-     IF( ln_p4z ) THEN
-         DO_3D( 0, 0, 0, 0, 1, jpkm1)
-            IF (tmask(ji,jj,jk) == 1.) THEN
-              ! POC disaggregation by turbulence and bacterial activity.It is a function
-              ! of the mean lability and of temperature  
-              ! --------------------------------------------------------
-              zremipart = MIN( xremip, ztremint(ji,jj,jk) )  
-              zremip = zremipart * xstep * tgfunc(ji,jj,jk)
-              zorem  = zremip * tr(ji,jj,jk,jppoc,Kbb)
-              zofer  = zremip * tr(ji,jj,jk,jpsfe,Kbb)
+     DO_3D( 0, 0, 0, 0, 1, jpkm1)
+        ! POC disaggregation by turbulence and bacterial activity.It is a function
+        ! of the mean lability and of temperature  
+        ! --------------------------------------------------------
+        zremipart = MIN( xremipc, ztremint(ji,jj,jk) )  
+        zremip = zremipart * xstep * tgfunc(ji,jj,jk)
+        zorem  = zremip * tr(ji,jj,jk,jppoc,Kbb)
               
-              ! Update of the TRA arrays
-              tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem
-              orem(ji,jj,jk)      = orem(ji,jj,jk) + zorem
-              tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer
-              tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zorem
-              tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zofer
-            ENDIF
-         END_3D
+        ! Update of the TRA arrays
+        tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zorem
+        tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zorem
+     END_3D
+     IF( ln_p2z ) THEN
+        DO_3D( 0, 0, 0, 0, 1, jpkm1)
+           ! POC disaggregation by turbulence and bacterial activity.It is a function
+           ! of the mean lability and of temperature  
+           ! --------------------------------------------------------
+           zremipart = MIN( xremipc, ztremint(ji,jj,jk) )
+           zremip = zremipart * xstep * tgfunc(ji,jj,jk)
+           zorem  = zremip * tr(ji,jj,jk,jppoc,Kbb)
+           orem(ji,jj,jk)  =  zorem
+           ! Update of the TRA arrays
+           tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zorem * feratz
+        END_3D
      ELSE
-       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-          ! POC disaggregation by turbulence and bacterial activity.It is a function
-          ! of the mean lability and of temperature  
-          !--------------------------------------------------------
-          zremipart = MIN( xremipc, ztremint(ji,jj,jk) )  
-          zremip = zremipart * xstep * tgfunc(ji,jj,jk)
-          zopoc  = zremip * tr(ji,jj,jk,jppoc,Kbb)
-          orem(ji,jj,jk)  = orem(ji,jj,jk) + zopoc
-          zopon  = xremipn / xremipc * zremip * tr(ji,jj,jk,jppon,Kbb)
-          zopop  = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb)
-          zofer  = xremipn / xremipc * zremip * tr(ji,jj,jk,jpsfe,Kbb)
-              
-          ! Update of the TRA arrays
-          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zopoc
-          tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon
-          tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zopop
-          tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zofer
-          tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zopoc
-          tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon 
-          tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop 
-          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer 
-       END_3D
+        DO_3D( 0, 0, 0, 0, 1, jpkm1)
+           ! POC disaggregation by turbulence and bacterial activity.It is a function
+           ! of the mean lability and of temperature  
+           ! --------------------------------------------------------
+           zremipart = MIN( xremipc, ztremint(ji,jj,jk) )  
+           zremip = zremipart * xstep * tgfunc(ji,jj,jk)
+           zorem  = zremip * tr(ji,jj,jk,jppoc,Kbb)
+           orem(ji,jj,jk)  = orem(ji,jj,jk) + zorem
+           zofer  = zremip * tr(ji,jj,jk,jpsfe,Kbb)
+
+           ! Update of the TRA arrays
+           tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zofer
+           tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zofer
+        END_3D
+     ENDIF
+     IF ( ln_p5z ) THEN
+        DO_3D( 0, 0, 0, 0, 1, jpkm1)
+           ! POC disaggregation by turbulence and bacterial activity.It is a function
+           ! of the mean lability and of temperature  
+           !--------------------------------------------------------
+           zremipart = MIN( xremipc, ztremint(ji,jj,jk) )  
+           zremip = zremipart * xstep * tgfunc(ji,jj,jk)
+           zopon  = xremipn / xremipc * zremip * tr(ji,jj,jk,jppon,Kbb)
+           zopop  = xremipp / xremipc * zremip * tr(ji,jj,jk,jppop,Kbb)
+           
+           ! Update of the TRA arrays
+           tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zopon
+           tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zopop
+           tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zopon 
+           tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zopop 
+        END_3D
      ENDIF
      IF( l_dia_remin_part ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
             zremipoc(ji,jj,jk) = ( tr(ji,jj,jk,jpdoc,Krhs) - zremipoc(ji,jj,jk) ) / &
                                  ( xstep * tgfunc(ji,jj,jk) * tr(ji,jj,jk,jppoc,Kbb) + rtrn ) * tmask(ji,jj,jk)
+         END_3D
+         DO_3D( 0, 0, 0, 0, 1, jpkm1)
             zfolimi (ji,jj,jk) = ( tr(ji,jj,jk,jpfer,Krhs) - zfolimi (ji,jj,jk) ) * tmask(ji,jj,jk)
          END_3D
      ENDIF
 
      IF( lk_iomput .AND. knt == nrdttrc ) THEN
         IF( l_dia_remin_part ) THEN
-            CALL iom_put( "REMINP", zremipoc )  ! Remineralisation rate of small particles
-            CALL iom_put( "REMING", zremigoc ) ! Remineralisation rate of large particles
-            CALL iom_put( "REMINF", zfolimi * 1.e+9 * 1.e3 * rfact2r ) ! Remineralisation of biogenic particulate iron
-            DEALLOCATE ( zremipoc, zremigoc, zfolimi )  
+           CALL iom_put( "REMINP", zremipoc )  ! Remineralisation rate of small particles
+           IF( .NOT. ln_p2z ) THEN
+              CALL iom_put( "REMING", zremigoc ) ! Remineralisation rate of large particles
+              DEALLOCATE ( zremigoc )
+           ENDIF
+           CALL iom_put( "REMINF", zfolimi * 1.e+9 * 1.e3 * rfact2r ) ! Remineralisation of biogenic particulate iron
+           DEALLOCATE ( zremipoc, zfolimi )
         ENDIF
      ENDIF
 
@@ -483,7 +491,7 @@ CONTAINS
       INTEGER ::   ios, ifault   ! Local integer
       REAL(wp)::   remindelta, reminup, remindown
       !!
-      NAMELIST/nampispoc/ xremip , jcpoc  , rshape,  &
+      NAMELIST/nampispoc/ jcpoc  , rshape,  &
          &                xremipc, xremipn, xremipp
       !!----------------------------------------------------------------------
       !
@@ -501,10 +509,8 @@ CONTAINS
 
       IF(lwp) THEN                         ! control print
          WRITE(numout,*) '   Namelist : nampispoc'
-         IF( ln_p4z ) THEN
-            WRITE(numout,*) '      remineralisation rate of POC              xremip    =', xremip
-         ELSE
-            WRITE(numout,*) '      remineralisation rate of POC              xremipc   =', xremipc
+         WRITE(numout,*) '      remineralisation rate of POC              xremipc   =', xremipc
+         IF( ln_p5z ) THEN 
             WRITE(numout,*) '      remineralisation rate of PON              xremipn   =', xremipn
             WRITE(numout,*) '      remineralisation rate of POP              xremipp   =', xremipp
          ENDIF
@@ -528,22 +534,22 @@ CONTAINS
          ! ---------------------------------------------------------------------
          !
          alphan(1) = gamain(reminup, rshape, ifault)
-         reminp(1) = gamain(reminup, rshape+1.0, ifault) * xremip / alphan(1)
+         reminp(1) = gamain(reminup, rshape+1.0, ifault) * xremipc / alphan(1)
          DO jn = 2, jcpoc-1
             reminup = 1./ 400. * EXP( REAL(jn, wp) * remindelta)
             remindown = 1. / 400. * EXP( REAL(jn-1, wp) * remindelta)
             alphan(jn) = gamain(reminup, rshape, ifault) - gamain(remindown, rshape, ifault)
             reminp(jn) = gamain(reminup, rshape+1.0, ifault) - gamain(remindown, rshape+1.0, ifault)
-            reminp(jn) = reminp(jn) * xremip / alphan(jn)
+            reminp(jn) = reminp(jn) * xremipc / alphan(jn)
          END DO
          remindown = 1. / 400. * EXP( REAL(jcpoc-1, wp) * remindelta)
          alphan(jcpoc) = 1.0 - gamain(remindown, rshape, ifault)
          reminp(jcpoc) = 1.0 - gamain(remindown, rshape+1.0, ifault)
-         reminp(jcpoc) = reminp(jcpoc) * xremip / alphan(jcpoc)
+         reminp(jcpoc) = reminp(jcpoc) * xremipc / alphan(jcpoc)
 
       ELSE  ! Only one lability class is used
          alphan(jcpoc) = 1.
-         reminp(jcpoc) = xremip
+         reminp(jcpoc) = xremipc
       ENDIF
 
       DO jn = 1, jcpoc
diff --git a/src/TOP/PISCES/P4Z/p4zprod.F90 b/src/TOP/PISCES/P4Z/p4zprod.F90
index 6a89fb6a..08444729 100644
--- a/src/TOP/PISCES/P4Z/p4zprod.F90
+++ b/src/TOP/PISCES/P4Z/p4zprod.F90
@@ -14,6 +14,7 @@ MODULE p4zprod
    USE oce_trc         ! shared variables between ocean and passive tracers
    USE trc             ! passive tracers common variables 
    USE sms_pisces      ! PISCES Source Minus Sink variables
+   USE p2zlim          ! Co-limitations of different nutrients
    USE p4zlim          ! Co-limitations of differents nutrients
    USE prtctl          ! print control for debugging
    USE iom             ! I/O manager
@@ -27,12 +28,9 @@ MODULE p4zprod
 
    REAL(wp), PUBLIC ::   pislopen     !:  P-I slope of nanophytoplankton
    REAL(wp), PUBLIC ::   pisloped     !:  P-I slope of diatoms
-   REAL(wp), PUBLIC ::   xadap        !:  Adaptation factor to low light 
    REAL(wp), PUBLIC ::   excretn      !:  Excretion ratio of nanophyto
    REAL(wp), PUBLIC ::   excretd      !:  Excretion ratio of diatoms
    REAL(wp), PUBLIC ::   bresp        !:  Basal respiration rate
-   REAL(wp), PUBLIC ::   chlcnm       !:  Maximum Chl/C ratio of nano
-   REAL(wp), PUBLIC ::   chlcdm       !:  Maximum Chl/C ratio of diatoms
    REAL(wp), PUBLIC ::   chlcmin      !:  Minimum Chl/C ratio of phytoplankton
    REAL(wp), PUBLIC ::   fecnm        !:  Maximum Fe/C ratio of nano
    REAL(wp), PUBLIC ::   fecdm        !:  Maximum Fe/C ratio of diatoms
@@ -71,10 +69,10 @@ CONTAINS
       INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices
       !
       INTEGER  ::   ji, jj, jk
-      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2
-      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn
+      REAL(wp) ::   zsilfac, znanotot, zdiattot
+      REAL(wp) ::   zratio, zmax, zsilim, zlim, zsiborn
       REAL(wp) ::   zpptot, zpnewtot, zpregtot, zprochln, zprochld
-      REAL(wp) ::   zproddoc, zprodsil, zprodfer, zprodlig
+      REAL(wp) ::   zproddoc, zprodsil, zprodfer, zprodlig, zprod1
       REAL(wp) ::   zpislopen, zpisloped, zfact
       REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp, zfecnm, zfecdm
       REAL(wp) ::   zprod, zval, zmxl_fac, zmxl_chl, zpronewn, zpronewd
@@ -119,8 +117,9 @@ CONTAINS
       IF ( ln_p4z_dcyc ) THEN    ! Diurnal cycle in PISCES
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
             IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+               zval = 24.0
                IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
-                  zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
+                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
                ENDIF
                zmxl(ji,jj,jk) = zval
             ENDIF
@@ -137,24 +136,16 @@ CONTAINS
          END_3D
       ENDIF
 
-      DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
-            zmxl_fac      = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
-            zprbio(ji,jj,jk) = zprmax(ji,jj,jk) * zmxl_fac
-            zprdia(ji,jj,jk) = zprmax(ji,jj,jk) * zmxl_fac
-         ENDIF
-      END_3D
-
       ! The formulation proposed by Geider et al. (1997) has been modified 
       ! to exclude the effect of nutrient limitation and temperature in the PI
       ! curve following Vichi et al. (2007)
       ! -----------------------------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
          IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
-            ztn         = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) - 15. )
-            zadap       = xadap * ztn / ( 2.+ ztn )
-            zconctemp   = MAX( 0.e0 , tr(ji,jj,jk,jpdia,Kbb) - xsizedia )
-            zconctemp2  = tr(ji,jj,jk,jpdia,Kbb) - zconctemp
+            zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
+            zmxl_chl = zmxl(ji,jj,jk) / 24.
+            zprbio(ji,jj,jk) = zprmax(ji,jj,jk) * zmxl_fac
+            zprdia(ji,jj,jk) = zprmax(ji,jj,jk) * zmxl_fac
             !
             ! The initial slope of the PI curve can be increased for nano
             ! to account for photadaptation, for instance in the DCM
@@ -162,35 +153,32 @@ CONTAINS
             ! improved or removed in future versions of the model
 
             ! Nanophytoplankton
-            zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  &
-            &                   * tr(ji,jj,jk,jpnch,Kbb) /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
+            zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb)  &
+            &                   /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
 
             ! Diatoms
-            zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )   &
-            &                   * tr(ji,jj,jk,jpdch,Kbb) /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn)
-             !
-             ! Computation of production function for Carbon
-             ! Actual light levels are used here 
-             ! ----------------------------------------------
-             zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
-             zmxl_chl = zmxl(ji,jj,jk) / 24.
-             !
-             zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) &
-             &            * zmxl_fac * rday + rtrn)
-             zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) &
-             &            * zmxl_fac * rday + rtrn)
-             zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
-             zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  )
-
-             !  Computation of production function for Chlorophyll
-             !  Mean light level in the mixed layer (when appropriate)
-             !  is used here (acclimation is in general slower than 
-             !  the characteristic time scales of vertical mixing)
-             !  ------------------------------------------------------
-             zpislopen = zpislopeadn(ji,jj,jk) / ( zprmax(ji,jj,jk) * zmxl_chl * rday + rtrn )
-             zpisloped = zpislopeadd(ji,jj,jk) / ( zprmax(ji,jj,jk) * zmxl_chl * rday + rtrn )
-             zprchln(ji,jj,jk) = zprmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) )
-             zprchld(ji,jj,jk) = zprmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) )
+            zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb)   &
+            &                   /( tr(ji,jj,jk,jpdia,Kbb) * 12. + rtrn)
+            !
+            ! Computation of production function for Carbon
+            ! Actual light levels are used here 
+            ! ----------------------------------------------
+            zpislopen = zpislopeadn(ji,jj,jk) / ( zprmax(ji,jj,jk) * xlimphy(ji,jj,jk) &
+            &            * zmxl_fac * rday + rtrn)
+            zpisloped = zpislopeadd(ji,jj,jk) / ( zprmax(ji,jj,jk) * xlimdia(ji,jj,jk) &
+            &            * zmxl_fac * rday + rtrn)
+            zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
+            zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  )
+
+            !  Computation of production function for Chlorophyll
+            !  Mean light level in the mixed layer (when appropriate)
+            !  is used here (acclimation is in general slower than 
+            !  the characteristic time scales of vertical mixing)
+            !  ------------------------------------------------------
+            zpislopen = zpislopen * zmxl_fac / ( zmxl_chl + rtrn )
+            zpisloped = zpisloped * zmxl_fac / ( zmxl_chl + rtrn )
+            zprchln(ji,jj,jk) = ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) ) )
+            zprchld(ji,jj,jk) = ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) ) )
          ENDIF
       END_3D
 
@@ -259,7 +247,7 @@ CONTAINS
             ! size at time step t+1 and is thus updated at the end of the 
             ! current time step
             ! --------------------------------------------------------------------
-            zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmax(ji,jj,jk) + rtrn )
+            zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk)
             zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
             sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) )
 
@@ -277,14 +265,13 @@ CONTAINS
             ! production terms of diatoms (C)
             zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * tr(ji,jj,jk,jpdia,Kbb) * rfact2
 
-
             ! Size computation
             ! Size is made a function of the limitation of of phytoplankton growth
             ! Strongly limited cells are supposed to be smaller. sizeda is
             ! size at time step t+1 and is thus updated at the end of the 
             ! current time step. 
             ! --------------------------------------------------------------------
-            zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmax(ji,jj,jk) + rtrn )
+            zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk)
             zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
             sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) )
 
@@ -310,21 +297,25 @@ CONTAINS
             zmxl_chl = zmxl(ji,jj,jk)  / 24.
             !  production terms for nanophyto. ( chlorophyll )
             znanotot = enanom(ji,jj,jk) / ( zmxl_chl + rtrn )
-            zprod    = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk)
-            zprochln = chlcmin * 12. * zprorcan (ji,jj,jk)
-            zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / &
-                                  & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn)
+            zprod1   = zprorcan(ji,jj,jk) * texcretn / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
+            zprod = zprod1 / ratchl * ( pislopen * znanotot / ( zprmax(ji,jj,jk) * rday )   &
+            &   * ( 1.0 - zprchln(ji,jj,jk) ) * MAX(0.0, (1.0 - ratchl * tr(ji,jj,jk,jpnch,Kbb)    &
+            &   / ( 12. * tr(ji,jj,jk,jpphy,Kbb) + rtrn ) / (xlimphy(ji,jj,jk) + rtrn ) ) )     &
+            &   - ratchl * zprchln(ji,jj,jk) ) + zprod1
+            zprochln = MAX(zprod * tr(ji,jj,jk,jpnch,Kbb) , chlcmin * 12 * zprorcan(ji,jj,jk) )
 
             !  production terms for diatoms ( chlorophyll )
             zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl + rtrn )
-            zprod    = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk)
-            zprochld = chlcmin * 12. * zprorcad(ji,jj,jk)
-            zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / &
-                                  & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn )
+            zprod1   = zprorcad(ji,jj,jk) * texcretd / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
+            zprod = zprod1 / ratchl * ( pisloped * zdiattot / ( zprmax(ji,jj,jk) * rday )   &
+            &   * ( 1.0 - zprchld(ji,jj,jk) ) * MAX(0.0, (1.0 - ratchl * tr(ji,jj,jk,jpdch,Kbb)    &
+            &   / ( 12. * tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / (xlimdia(ji,jj,jk) + rtrn ) ) )     &
+            &   - ratchl * zprchld(ji,jj,jk) ) + zprod1
+            zprochld = MAX(zprod * tr(ji,jj,jk,jpdch,Kbb) , chlcmin * 12 * zprorcad(ji,jj,jk) )
 
             !   Update the arrays TRA which contain the Chla sources and sinks
-            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn
-            tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld * texcretd
+            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln
+            tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld
          ENDIF
       END_3D
 
@@ -522,8 +513,8 @@ CONTAINS
       INTEGER ::   ios   ! Local integer
       !
       ! Namelist block
-      NAMELIST/namp4zprod/ pislopen, pisloped, xadap, bresp, excretn, excretd,  &
-         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip
+      NAMELIST/namp4zprod/ pislopen, pisloped, bresp, excretn, excretd,  &
+         &                 chlcmin, fecnm, fecdm, grosip
       !!----------------------------------------------------------------------
       !
       IF(lwp) THEN                         ! control print
@@ -543,14 +534,11 @@ CONTAINS
          WRITE(numout,*) '   Namelist : namp4zprod'
          WRITE(numout,*) '      mean Si/C ratio                           grosip       =', grosip
          WRITE(numout,*) '      P-I slope                                 pislopen     =', pislopen
-         WRITE(numout,*) '      Acclimation factor to low light           xadap        =', xadap
          WRITE(numout,*) '      excretion ratio of nanophytoplankton      excretn      =', excretn
          WRITE(numout,*) '      excretion ratio of diatoms                excretd      =', excretd
          WRITE(numout,*) '      basal respiration in phytoplankton        bresp        =', bresp
          WRITE(numout,*) '      Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
          WRITE(numout,*) '      P-I slope  for diatoms                    pisloped     =', pisloped
-         WRITE(numout,*) '      Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm
-         WRITE(numout,*) '      Minimum Chl/C in diatoms                  chlcdm       =', chlcdm
          WRITE(numout,*) '      Maximum Fe/C in nanophytoplankton         fecnm        =', fecnm
          WRITE(numout,*) '      Minimum Fe/C in diatoms                   fecdm        =', fecdm
       ENDIF
diff --git a/src/TOP/PISCES/P4Z/p4zrem.F90 b/src/TOP/PISCES/P4Z/p4zrem.F90
index e63e5eec..386a85e4 100644
--- a/src/TOP/PISCES/P4Z/p4zrem.F90
+++ b/src/TOP/PISCES/P4Z/p4zrem.F90
@@ -18,6 +18,7 @@ MODULE p4zrem
    USE sms_pisces      !  PISCES Source Minus Sink variables
    USE p4zche          !  chemical model
    USE p4zprod         !  Growth rate of the 2 phyto groups
+   USE p2zlim          !  Nutrient limitation terms
    USE p4zlim          !  Nutrient limitation terms
    USE prtctl          !  print control for debugging
    USE iom             !  I/O manager
@@ -27,6 +28,7 @@ MODULE p4zrem
    PRIVATE
 
    PUBLIC   p4z_rem         ! called in p4zbio.F90
+   PUBLIC   p2z_rem
    PUBLIC   p4z_rem_init    ! called in trcini_pisces.F90
    PUBLIC   p4z_rem_alloc   ! called in trcini_pisces.F90
 
@@ -54,6 +56,137 @@ MODULE p4zrem
    !!----------------------------------------------------------------------
 CONTAINS
 
+   SUBROUTINE p2z_rem( kt, knt, Kbb, Kmm, Krhs )
+      !!---------------------------------------------------------------------
+      !!                     ***  ROUTINE p2z_rem  ***
+      !!
+      !! ** Purpose :   Compute remineralization/dissolution of organic compounds
+      !!                Computes also nitrification of ammonium 
+      !!                The solubilization/remineralization of POC is treated 
+      !!                in p4zpoc.F90. The dissolution of calcite is processed
+      !!                in p4zlys.F90. 
+      !!
+      !! ** Method  : - Bacterial biomass is computed implicitely based on a 
+      !!                parameterization developed from an explicit modeling
+      !!                of PISCES in an alternative version 
+      !!---------------------------------------------------------------------
+      INTEGER, INTENT(in) ::   kt, knt         ! ocean time step
+      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices
+      !
+      INTEGER  ::   ji, jj, jk
+      REAL(wp) ::   zremik, zremikc, zfact
+      REAL(wp) ::   zdep, zdepmin, zfactdep
+      REAL(wp) ::   zammonic, zoxyremc, zolimic
+      CHARACTER (len=25) :: charout
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zdepbac
+      REAL(wp), DIMENSION(A2D(0)    ) :: ztempbac
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zw3d, zolimi
+      !!---------------------------------------------------------------------
+      !
+      IF( ln_timing )   CALL timing_start('p2z_rem')
+      !
+      IF( kt == nittrc000 )  THEN
+         l_dia_remin  = iom_use( "REMIN" )
+         l_dia_denit  = iom_use( "DENIT" )
+         l_dia_bact   = iom_use( "BACT" )
+      ENDIF
+      IF( l_dia_remin ) THEN
+         ALLOCATE( zolimi(A2D(0),jpk) )    ;   zolimi(A2D(0),jpk) = 0._wp
+         DO_3D( 0, 0, 0, 0, 1, jpk)
+            zolimi(ji,jj,jk) = tr(ji,jj,jk,jpoxy,Krhs)
+         END_3D
+      ENDIF
+
+      ! Computation of the mean bacterial concentration
+      ! this parameterization has been deduced from a model version
+      ! that was modeling explicitely bacteria. This is a very old parame
+      ! that will be very soon updated based on results from a much more
+      ! recent version of PISCES with bacteria.
+      ! ----------------------------------------------------------------
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         zdep = MAX( hmld(ji,jj), heup_01(ji,jj), gdept(ji,jj,1,Kmm) )
+         IF ( gdept(ji,jj,jk,Kmm) <= zdep ) THEN
+            zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) ) * 1.0E6 )**0.6 * 1.E-6
+            ztempbac(ji,jj)   = zdepbac(ji,jj,jk)
+         ELSE
+            zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) )
+            zdepbac(ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj)
+         ENDIF
+      END_3D
+
+      DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         ! DOC ammonification. Depends on depth, phytoplankton biomass
+         ! and a limitation term which is supposed to be a parameterization of the bacterial activity. 
+         ! --------------------------------------------------------------------------
+         zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)
+         zremik = MAX( zremik, 2.74e-4 * xstep / xremikc )
+         zremikc = xremikc * zremik
+         ! Ammonification in oxic waters with oxygen consumption
+         ! -----------------------------------------------------
+         zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * tr(ji,jj,jk,jpdoc,Kbb)
+         zolimic = MAX(0., MIN( ( tr(ji,jj,jk,jpoxy,Kbb) - rtrn ) / o2ut, zolimic ) )
+
+         ! Ammonification in suboxic waters with denitrification
+         ! -----------------------------------------------------
+         zammonic = zremikc * nitrfac(ji,jj,jk) * tr(ji,jj,jk,jpdoc,Kbb)
+         denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) )
+         denitr(ji,jj,jk)  = MAX(0., MIN(  ( tr(ji,jj,jk,jpno3,Kbb) - rtrn ) / rdenit, denitr(ji,jj,jk) ) )
+
+         ! Ammonification in waters depleted in O2 and NO3 based on 
+         ! other redox processes
+         ! --------------------------------------------------------
+         zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk) )
+
+         ! Update of the the trends arrays
+         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - denitr (ji,jj,jk) * rdenit
+         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) - ( zolimic + denitr(ji,jj,jk) + zoxyremc )
+         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - zolimic * (o2ut + o2nit)
+         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc
+         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zolimic + denitr(ji,jj,jk) + zoxyremc
+         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - rno3 * ( zolimic + zoxyremc - ( rdenit - 1.) * denitr(ji,jj,jk) )
+      END_3D
+
+      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
+         WRITE(charout, FMT="('rem1')")
+         CALL prt_ctl_info( charout, cdcomp = 'top' )
+         CALL prt_ctl(tab4d_1=tr(:,:,:,:,Krhs), mask1=tmask, clinfo=ctrcnm)
+      ENDIF
+
+      IF( lk_iomput .AND. knt == nrdttrc ) THEN
+          !
+          IF( l_dia_remin ) THEN    ! Remineralisation rate
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zolimi(ji,jj,jk) = ( zolimi(ji,jj,jk) - tr(ji,jj,jk,jpoxy,Krhs) ) / o2ut &
+                   &               * rfact2r * tmask(ji,jj,jk) ! 
+             END_3D
+             CALL iom_put( "REMIN", zolimi )
+             DEALLOCATE( zolimi )
+          ENDIF
+          !
+          IF( l_dia_bact ) THEN   ! Bacterial biomass
+             ALLOCATE( zw3d(A2D(0),jpk) )    ;    zw3d(A2D(0),jpk) = 0._wp
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = zdepbac(ji,jj,jk) * 1.E6 * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "BACT", zw3d )
+             DEALLOCATE( zw3d )
+          ENDIF
+          !
+          IF( l_dia_denit )  THEN ! Denitrification
+             ALLOCATE( zw3d(A2D(0),jpk) )    ;    zw3d(A2D(0),jpk) = 0._wp
+             DO_3D( 0, 0, 0, 0, 1, jpkm1)
+                zw3d(ji,jj,jk) = denitr(ji,jj,jk) * 1E+3 * rfact2r * rno3 * tmask(ji,jj,jk)
+             END_3D
+             CALL iom_put( "DENIT", zw3d )
+             DEALLOCATE( zw3d )
+          ENDIF
+          !
+      ENDIF
+      !
+      IF( ln_timing )   CALL timing_stop('p2z_rem')
+      !
+   END SUBROUTINE p2z_rem
+
    SUBROUTINE p4z_rem( kt, knt, Kbb, Kmm, Krhs )
       !!---------------------------------------------------------------------
       !!                     ***  ROUTINE p4z_rem  ***
@@ -113,11 +246,10 @@ CONTAINS
       ! recent version of PISCES with bacteria.
       ! ----------------------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         zdep = MAX( hmld(ji,jj), heup_01(ji,jj) )
-         IF ( gdept(ji,jj,jk,Kmm) < zdep ) THEN
+         zdep = MAX( hmld(ji,jj), heup_01(ji,jj), gdept(ji,jj,1,Kmm) )
+         IF ( gdept(ji,jj,jk,Kmm) <= zdep ) THEN
             zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, tr(ji,jj,jk,jpzoo,Kbb) + tr(ji,jj,jk,jpmes,Kbb) ) * 1.0E6 )**0.6 * 1.E-6
             ztempbac(ji,jj)   = zdepbac(ji,jj,jk)
-!         IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN
          ELSE
             zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) )
             zdepbac(ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj)
@@ -194,17 +326,16 @@ CONTAINS
          IF( gdept(ji,jj,jk,Kmm) >= zdep ) THEN
             zdepmin = MIN( 1., zdep / gdept(ji,jj,jk,Kmm) )
             zdepeff = 0.3_wp * zdepmin**0.6
-!            zdepeff = 0.3_wp * zdepmin**0.3
          ELSE
-             zdepeff = 0.3_wp
+            zdepeff = 0.3_wp
          ENDIF
 
          ! Bacterial uptake of iron. No iron is available in DOC. So
          ! Bacteries are obliged to take up iron from the water. Some
          ! studies (especially at Papa) have shown this uptake to be significant
          ! ----------------------------------------------------------
-         zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * tr(ji,jj,jk,jpfer,Kbb)    &
-           &       / ( xkferb + tr(ji,jj,jk,jpfer,Kbb) ) * zdepeff * zdepbac(ji,jj,jk)
+         zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * biron(ji,jj,jk)    &
+           &       / ( xkferb + biron(ji,jj,jk) ) * zdepeff * zdepbac(ji,jj,jk)
          
          ! Only the transfer of iron from its dissolved form to particles
          ! is treated here. The GGE of bacteria supposed to be equal to 
@@ -336,19 +467,20 @@ CONTAINS
 
       IF(lwp) THEN                         ! control print
          WRITE(numout,*) '   Namelist parameters for remineralization, nampisrem'
-         IF( ln_p4z ) THEN
-            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc
-         ELSE
+         WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc
+         IF( ln_p5z ) THEN 
             WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc
             WRITE(numout,*) '      remineralization rate of DON              xremikn   =', xremikn
             WRITE(numout,*) '      remineralization rate of DOP              xremikp   =', xremikp
          ENDIF
-         WRITE(numout,*) '      remineralization rate of Si               xsirem    =', xsirem
-         WRITE(numout,*) '      fast remineralization rate of Si          xsiremlab =', xsiremlab
-         WRITE(numout,*) '      fraction of labile biogenic silica        xsilab    =', xsilab
-         WRITE(numout,*) '      NH4 nitrification rate                    nitrif    =', nitrif
-         WRITE(numout,*) '      Bacterial Fe/C ratio                      feratb    =', feratb
-         WRITE(numout,*) '      Half-saturation constant for bact. Fe/C   xkferb    =', xkferb
+         IF( ln_p5z .OR. ln_p4z ) THEN
+            WRITE(numout,*) '      remineralization rate of Si               xsirem    =', xsirem
+            WRITE(numout,*) '      fast remineralization rate of Si          xsiremlab =', xsiremlab
+            WRITE(numout,*) '      fraction of labile biogenic silica        xsilab    =', xsilab
+            WRITE(numout,*) '      NH4 nitrification rate                    nitrif    =', nitrif
+            WRITE(numout,*) '      Bacterial Fe/C ratio                      feratb    =', feratb
+            WRITE(numout,*) '      Half-saturation constant for bact. Fe/C   xkferb    =', xkferb
+         ENDIF
       ENDIF
       !
       denitr(:,:,:) = 0._wp
diff --git a/src/TOP/PISCES/P4Z/p4zsed.F90 b/src/TOP/PISCES/P4Z/p4zsed.F90
index 45d5dafb..9eab5f19 100644
--- a/src/TOP/PISCES/P4Z/p4zsed.F90
+++ b/src/TOP/PISCES/P4Z/p4zsed.F90
@@ -13,6 +13,7 @@ MODULE p4zsed
    USE oce_trc         !  shared variables between ocean and passive tracers
    USE trc             !  passive tracers common variables 
    USE sms_pisces      !  PISCES Source Minus Sink variables
+   USE p2zlim          !  Co-limitations of differents nutrients
    USE p4zlim          !  Co-limitations of differents nutrients
    USE p4zint          !  interpolation and computation of various fields
    USE p4zsink         !  Sinking fluxes
@@ -63,17 +64,17 @@ CONTAINS
       INTEGER, INTENT(in) ::   kt, knt ! ocean time step
       INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices
       INTEGER  ::  ji, jj, jk, ikt
-      REAL(wp) ::  zbureff, zrivsil
+      REAL(wp) ::  zbureff
       REAL(wp) ::  zlim, zfact, zfactcal
       REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zolimit
-      REAL(wp) ::  zsiloss, zcaloss, zdep
+      REAL(wp) ::  zsiloss, zsiloss2, zcaloss, zdep
       REAL(wp) ::  zwstpoc, zwstpon, zwstpop
       REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp
-      REAL(wp) ::  zsoufer, zlight, ztrpo4, ztrdop
+      REAL(wp) ::  zsoufer, zlight, ztrpo4, ztrdop, zratpo4
       REAL(wp) ::  xdiano3, xdianh4
       !
       CHARACTER (len=25) :: charout
-      REAL(wp), DIMENSION(A2D(0)) :: zdenit2d, zrivno3, zrivalk
+      REAL(wp), DIMENSION(A2D(0)) :: zdenit2d, zrivno3, zrivalk, zrivsil
       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
       !!---------------------------------------------------------------------
       !
@@ -84,7 +85,6 @@ CONTAINS
          l_dia_sdenit = iom_use( "Sdenit" ) 
          l_dia_sed    = .NOT.lk_sed .AND. ( iom_use( "SedC" ) .OR. iom_use( "SedCal" ) .OR. iom_use( "SedSi" ) )
       ENDIF
-
       !
       zdenit2d(:,:) = 0.e0
       zrivno3 (:,:) = 0.e0
@@ -107,7 +107,7 @@ CONTAINS
               zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) )
                 !
               zflx = sinkpocb(ji,jj) / xstep * 1E6 
-              zbureff = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2
+              zbureff = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 * MIN(gdepw(ji,jj,ikt+1,Kmm) / 1000.00, 1.0)
               zrivno3(ji,jj) = 1. - zbureff
            ENDIF
          END_2D
@@ -119,13 +119,10 @@ CONTAINS
       ! ------------------------------------------------------
       !
       IF( .NOT.lk_sed ) THEN
-         zrivsil = 1._wp - sedsilfrac
          DO_2D( 0, 0, 0, 0 )
             ikt  = mbkt(ji,jj)
             zdep = 1._wp / e3t(ji,jj,ikt,Kmm)
-            zsiloss = sinksilb(ji,jj) * zdep
             zcaloss = sinkcalb(ji,jj) * zdep
-            tr(ji,jj,ikt,jpsil,Krhs) = tr(ji,jj,ikt,jpsil,Krhs) + zsiloss * zrivsil 
             !
             zfactcal = MAX(-0.1, MIN( excess(ji,jj,ikt), 0.2 ) )
             zfactcal = 0.3 + 0.7 * MIN( 1., (0.1 + zfactcal) / ( 0.5 - zfactcal ) )
@@ -133,27 +130,54 @@ CONTAINS
             tr(ji,jj,ikt,jptal,Krhs) =  tr(ji,jj,ikt,jptal,Krhs) + zcaloss * zrivalk(ji,jj) * 2.0
             tr(ji,jj,ikt,jpdic,Krhs) =  tr(ji,jj,ikt,jpdic,Krhs) + zcaloss * zrivalk(ji,jj)
          END_2D
+
+         IF( .NOT. ln_p2z ) THEN
+            DO_2D( 0, 0, 0, 0 )
+               ikt  = mbkt(ji,jj)
+               zdep = 1._wp / e3t(ji,jj,ikt,Kmm)
+               zsiloss = sinksilb(ji,jj) * zdep
+               zsiloss2 = sinksilb(ji,jj) / xstep * 365.0 * 1E3 * 1E-4 * 1E6
+               zrivsil(ji,jj) = 1.0 - sedsilfrac * zsiloss2 / ( 15.0 + zsiloss2 )
+               tr(ji,jj,ikt,jpsil,Krhs) = tr(ji,jj,ikt,jpsil,Krhs) + zsiloss * zrivsil(ji,jj)
+            END_2D
+         ENDIF
       ENDIF
       !
 
       ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after
       ! denitrification in the sediments. Not very clever, but simpliest option.
       IF( .NOT.lk_sed ) THEN
-         DO_2D( 0, 0, 0, 0 )
-            ikt  = mbkt(ji,jj)
-            zwstpoc = sinkpocb(ji,jj) / e3t(ji,jj,ikt,Kmm)
-            zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3(ji,jj) )
-            z1pdenit = zwstpoc * zrivno3(ji,jj) - zpdenit
-            zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )
-            tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit
-            tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit
-            tr(ji,jj,ikt,jpnh4,Krhs) = tr(ji,jj,ikt,jpnh4,Krhs) + zpdenit + zolimit
-            tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) - rdenit * zpdenit
-            tr(ji,jj,ikt,jpoxy,Krhs) = tr(ji,jj,ikt,jpoxy,Krhs) - zolimit * o2ut
-            tr(ji,jj,ikt,jptal,Krhs) = tr(ji,jj,ikt,jptal,Krhs) + rno3 * (zolimit + (1.+rdenit) * zpdenit )
-            tr(ji,jj,ikt,jpdic,Krhs) = tr(ji,jj,ikt,jpdic,Krhs) + zpdenit + zolimit 
-            sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm)
-         END_2D
+         IF( ln_p2z ) THEN
+            DO_2D( 0, 0, 0, 0 )
+               ikt  = mbkt(ji,jj)
+               zwstpoc = sinkpocb(ji,jj) / e3t(ji,jj,ikt,Kmm)
+               zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3(ji,jj) )
+               z1pdenit = zwstpoc * zrivno3(ji,jj) - zpdenit
+               zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / (o2ut + o2nit), z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )
+               tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit
+               tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) + zpdenit + zolimit - rdenit * zpdenit
+               tr(ji,jj,ikt,jpoxy,Krhs) = tr(ji,jj,ikt,jpoxy,Krhs) - zolimit * (o2ut + o2nit)
+               tr(ji,jj,ikt,jptal,Krhs) = tr(ji,jj,ikt,jptal,Krhs) - rno3 * (zolimit + (1.-rdenit) * zpdenit )
+               tr(ji,jj,ikt,jpdic,Krhs) = tr(ji,jj,ikt,jpdic,Krhs) + zpdenit + zolimit
+               sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm)
+            END_2D
+         ELSE
+            DO_2D( 0, 0, 0, 0 )
+               ikt  = mbkt(ji,jj)
+               zwstpoc = sinkpocb(ji,jj) / e3t(ji,jj,ikt,Kmm)
+               zpdenit  = MIN( 0.5 * ( tr(ji,jj,ikt,jpno3,Kbb) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3(ji,jj) )
+               z1pdenit = zwstpoc * zrivno3(ji,jj) - zpdenit
+               zolimit = MIN( ( tr(ji,jj,ikt,jpoxy,Kbb) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) )
+               tr(ji,jj,ikt,jpdoc,Krhs) = tr(ji,jj,ikt,jpdoc,Krhs) + z1pdenit - zolimit
+               tr(ji,jj,ikt,jppo4,Krhs) = tr(ji,jj,ikt,jppo4,Krhs) + zpdenit + zolimit
+               tr(ji,jj,ikt,jpnh4,Krhs) = tr(ji,jj,ikt,jpnh4,Krhs) + zpdenit + zolimit
+               tr(ji,jj,ikt,jpno3,Krhs) = tr(ji,jj,ikt,jpno3,Krhs) - rdenit * zpdenit
+               tr(ji,jj,ikt,jpoxy,Krhs) = tr(ji,jj,ikt,jpoxy,Krhs) - zolimit * o2ut
+               tr(ji,jj,ikt,jptal,Krhs) = tr(ji,jj,ikt,jptal,Krhs) + rno3 * (zolimit + (1.+rdenit) * zpdenit )
+               tr(ji,jj,ikt,jpdic,Krhs) = tr(ji,jj,ikt,jpdic,Krhs) + zpdenit + zolimit 
+               sdenit(ji,jj) = rdenit * zpdenit * e3t(ji,jj,ikt,Kmm)
+            END_2D
+         ENDIF
          IF( ln_p5z ) THEN
             DO_2D( 0, 0, 0, 0 )
                ikt  = mbkt(ji,jj)
@@ -175,84 +199,86 @@ CONTAINS
       ! Small source iron from particulate inorganic iron
       !-----------------------------------
       !
-      IF( ln_p4z ) THEN
+      IF( ln_p2z ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
             !                      ! Potential nitrogen fixation dependant on temperature and iron
-            zlight  =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 
+            zlight  =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) )
             zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) )
             !
             ztemp = ts(ji,jj,jk,jp_tem,Kmm)
             zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3
             !       Potential nitrogen fixation dependant on temperature and iron
-            xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) )
-            xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4)
-            zlim = ( 1.- xdiano3 - xdianh4 )
+            xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) )
+            zlim    = 1.- xdiano3 
             IF( zlim <= 0.1 )   zlim = 0.01
-            zfact = zlim * rfact2
-            ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
-            ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
-            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 ) * zlight
+            zfact   = zlim * rfact2
+            ztrfer  = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
+            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * ztrfer * zlight
             !
             ! Nitrogen change due to nitrogen fixation
             ! ----------------------------------------
             zfact = nitrpot(ji,jj,jk) * nitrfix
-            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0
-            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0
-            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zfact * 2.0 / 3.0            
-            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zfact * 2.0 / 3.0
+            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zfact / 3.0
+            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) - rno3 * zfact / 3.0
+            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zfact * 2.0 / 3.0
             tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0
-            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0
-            tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0
-            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0
-            tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0
-            tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday
-            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + concdnh4 / ( concdnh4 + tr(ji,jj,jk,jppo4,Kbb) ) &
-            &                     * 0.001 * tr(ji,jj,jk,jpdoc,Kbb) * xstep
+            tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zfact * 1.0 / 3.0 * feratz
+            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.005 * 4E-10 * zsoufer * rfact2 / rday
          END_3D
-      ELSE       ! p5z
+      ELSE
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
+            !                      ! Potential nitrogen fixation dependant on temperature and iron
             zlight  =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) ) * ( 1. - fr_i(ji,jj) ) 
             zsoufer = zlight * 2E-11 / ( 2E-11 + biron(ji,jj,jk) )
             !
-            !                      ! Potential nitrogen fixation dependant on temperature and iron
             ztemp = ts(ji,jj,jk,jp_tem,Kmm)
-            zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625
+            zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3
             !       Potential nitrogen fixation dependant on temperature and iron
             xdianh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concnnh4 + tr(ji,jj,jk,jpnh4,Kbb) )
             xdiano3 = tr(ji,jj,jk,jpno3,Kbb) / ( concnno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - xdianh4)
-            zlim = ( 1.- xdiano3 - xdianh4 )
+            zlim    = ( 1.- xdiano3 - xdianh4 )
             IF( zlim <= 0.1 )   zlim = 0.01
-            zfact = zlim * rfact2
-            ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
-            ztrpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
-            ztrdop = tr(ji,jj,jk,jpdop,Kbb) / ( 1E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4)
-            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 + ztrdop ) * zlight
-
+            zfact   = zlim * rfact2
+            ztrfer  = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) )
+            ztrpo4  = tr(ji,jj,jk,jppo4,Kbb) / ( 1E-6 + tr(ji,jj,jk,jppo4,Kbb) )
+            IF (ln_p5z) THEN
+               ztrdop  = tr(ji,jj,jk,jpdop,Kbb) / ( 10E-6 + tr(ji,jj,jk,jpdop,Kbb) ) * (1. - ztrpo4)
+               ztrpo4  =  ztrpo4 + ztrdop + rtrn
+               zratpo4 =  (ztrpo4 - ztrdop) / (ztrpo4 + rtrn)
+            ENDIF
+            nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrpo4 ) * zlight
+            !
             ! Nitrogen change due to nitrogen fixation
             ! ----------------------------------------
             zfact = nitrpot(ji,jj,jk) * nitrfix
             tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zfact / 3.0
             tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zfact / 3.0
             tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zfact * 2.0 / 3.0            
-            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) &
-            &                     * ztrpo4 / (ztrpo4 + ztrdop + rtrn)
-            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0
             tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zfact * 1.0 / 3.0
-            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0  &
-            &                     - 16.0 / 46.0 * zfact * ztrdop / ( ztrpo4 + ztrdop + rtrn)
             tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zfact * 1.0 / 3.0 * 2.0 / 3.0
-            tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0
-            tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 2.0 /3.0
             tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zfact * 1.0 / 3.0 * 1.0 / 3.0
-            tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zfact * 1.0 / 3.0 * 1.0 /3.0
-            tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0
             tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0 
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - 30E-6 * zfact * 1.0 / 3.0
             tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0
             tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0
-            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.002 * 4E-10 * zsoufer * rfact2 / rday
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + 0.003 * 4E-10 * zsoufer * rfact2 / rday
+            IF ( ln_p4z) THEN
+               tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zfact * 2.0 / 3.0
+               tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + concdnh4 / ( concdnh4 + tr(ji,jj,jk,jppo4,Kbb) ) &
+               &                     * 0.001 * tr(ji,jj,jk,jpdoc,Kbb) * xstep
+            ELSE
+               tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - 16.0 / 46.0 * zfact * 2.0 / 3.0  &
+               &                     * zratpo4
+               tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zfact * 1.0 / 3.0
+               tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + 16.0 / 46.0 * zfact / 3.0  &
+               &                     - 16.0 / 46.0 * zfact * 2.0 / 3.0 * (1.0 - zratpo4)
+               tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + zfact * 1.0 / 3.0 * 2.0 /3.0
+               tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 2.0 /3.0
+               tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zfact * 1.0 / 3.0 * 1.0 /3.0
+               tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0
+            ENDIF
          END_3D
       ENDIF
 
@@ -269,8 +295,10 @@ CONTAINS
           IF( l_dia_sed ) THEN
             zfact = 1.e+3 * rfact2r !  conversion from molC/l/kt  to molC/m3/s
             CALL iom_put( "SedCal", ( 1.0 - zrivalk(:,:) ) * sinkcalb(:,:) * zfact )
-            CALL iom_put( "SedSi" , ( 1.0 - zrivsil      ) * sinksilb(:,:) * zfact )
             CALL iom_put( "SedC"  , ( 1.0 - zrivno3(:,:) ) * sinkpocb(:,:) * zfact )
+            IF( .NOT. ln_p2z ) THEN
+               CALL iom_put( "SedSi" , ( 1.0 - zrivsil(:,:) ) * sinksilb(:,:) * zfact )
+            ENDIF
           ENDIF
           !
           IF( l_dia_sdenit ) THEN
@@ -321,7 +349,9 @@ CONTAINS
          WRITE(numout,*) '   Namelist : nampissed '
          WRITE(numout,*) '      nitrogen fixation rate                       nitrfix = ', nitrfix
          WRITE(numout,*) '      nitrogen fixation sensitivty to light    diazolight  = ', diazolight
-         WRITE(numout,*) '      Fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz
+         IF( .NOT. ln_p2z ) THEN
+            WRITE(numout,*) '      Fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz
+         ENDIF
       ENDIF
       !
       r1_rday  = 1. / rday
@@ -331,8 +361,6 @@ CONTAINS
       !
       lk_sed = ln_sediment .AND. ln_sed_2way 
       !
-!      nitrpot(:,:,jpk) = 0._wp   ! define last level for iom_put
-      !
    END SUBROUTINE p4z_sed_init
 
    INTEGER FUNCTION p4z_sed_alloc()
diff --git a/src/TOP/PISCES/P4Z/p4zsink.F90 b/src/TOP/PISCES/P4Z/p4zsink.F90
index e794e8a7..e0151b52 100644
--- a/src/TOP/PISCES/P4Z/p4zsink.F90
+++ b/src/TOP/PISCES/P4Z/p4zsink.F90
@@ -36,8 +36,8 @@ MODULE p4zsink
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  sinksilb  !: BSi sinking fluxes at bottom
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  sinkponb  !: POC sinking fluxes at bottom 
    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::  sinkpopb  !: POC sinking fluxes at bottom 
+   INTEGER, PUBLIC, SAVE :: ik100
 
-   INTEGER  :: ik100
    REAL(wp) :: xfact
    LOGICAL  :: l_dia_sink, l_diag
 
@@ -88,8 +88,6 @@ CONTAINS
       ! ---------------------------------------
       prodpoc(:,:,:) = 0.
       conspoc(:,:,:) = 0.
-      prodgoc(:,:,:) = 0.
-      consgoc(:,:,:) = 0.
 
       ! Sinking speeds of big detritus is increased with depth as shown
       ! by data and from the coagulation theory. This is controled by
@@ -105,62 +103,86 @@ CONTAINS
       END_3D
 
       ! Sinking speed of the small particles is always constant
-      wsbio3(:,:,:) = wsbio
+      ! except in PISCES reduced
+      IF( ln_p2z ) THEN
+         DO_3D( 0, 0, 0, 0, 1, jpkm1)
+            zmax  = MAX( heup_01(ji,jj), hmld(ji,jj) )
+            zfact = MAX( 0., gdepw(ji,jj,jk+1,Kmm) - zmax ) * tgfunc(ji,jj,jk) * ( 0.03 / wsbio2 - 0.015/ wsbio)
+            zfact = MIN(3.0, EXP(-zfact) )
+            wsbio3(ji,jj,jk) = ( wsbio + wsbio2 * ( sizen(ji,jj,1) - 1.0 ) * 0.05 * zfact )    &
+               &               / ( 1.0 + ( sizen(ji,jj,1) - 1.0 ) * 0.05 * zfact )
+         END_3D
+      ELSE
+         wsbio3(:,:,:) = wsbio
+      ENDIF
 
       ! Compute the sedimentation term using trc_sink for all the sinking particles
       ! ---------------------------------------------------------------------------
-      zsinking(:,:,:) = 0.e0
-      !
       CALL trc_sink( kt, Kbb, Kmm, wsbio3, zsinking , jppoc, rfact2 )
       DO_2D( 0, 0, 0, 0 )
          sinkpocb(ji,jj) = zsinking(ji,jj,mbkt(ji,jj)+1)
       END_2D
       IF( l_diag ) THEN
-         ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),:) = 0._wp 
+         ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),:) = 0._wp
          zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
       ENDIF
-      !
-      CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpgoc, rfact2 )
-      DO_2D( 0, 0, 0, 0 )
-         sinkpocb(ji,jj) = sinkpocb(ji,jj) + zsinking(ji,jj,mbkt(ji,jj)+1)
-      END_2D
+
+
+      IF( .NOT. ln_p2z ) THEN
+         prodgoc(:,:,:) = 0.
+         consgoc(:,:,:) = 0.
+
+         ! Compute the sedimentation term using trc_sink for all the sinking particles
+         ! ---------------------------------------------------------------------------
+         CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpgoc, rfact2 )
+         DO_2D( 0, 0, 0, 0 )
+            sinkpocb(ji,jj) = sinkpocb(ji,jj) + zsinking(ji,jj,mbkt(ji,jj)+1)
+         END_2D
+         IF( l_diag ) THEN
+            zw3d(A2D(0),1:jpkm1) = zw3d(A2D(0),1:jpkm1) + zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
+         ENDIF
+      ENDIF
+
       IF( l_diag ) THEN
-         zw3d(A2D(0),1:jpkm1) = zw3d(A2D(0),1:jpkm1) + zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
          t_oce_co2_exp = glob_sum( 'p4zsink', zw3d(A2D(0),ik100) * e1e2t(A2D(0)) * tmask(A2D(0),1) )
          CALL iom_put( "EPC100",  zw3d(:,:,ik100) )  ! Export of carbon at 100m
          CALL iom_put( "EXPC"  ,  zw3d )             ! Export of carbon in the water column
          CALL iom_put( "tcexp", t_oce_co2_exp )      ! Total cabon exort
       ENDIF
       !
-      CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpgsi, rfact2 )
-      DO_2D( 0, 0, 0, 0 )
-         sinksilb(ji,jj) = zsinking(ji,jj,mbkt(ji,jj)+1)
-      END_2D
-      IF( l_diag ) THEN
-         zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
-         CALL iom_put( "EPSI100",  zw3d(:,:,ik100) )  ! Export of Silicate at 100m
-         CALL iom_put( "EXPSI"  ,  zw3d )             ! Export of Silicate in the water column
-      ENDIF
-      !
-      CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpcal, rfact2 )
-      DO_2D( 0, 0, 0, 0 )
-         sinkcalb(ji,jj) = zsinking(ji,jj,mbkt(ji,jj)+1)
-      END_2D
-      IF( l_diag ) THEN
-         zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
-         CALL iom_put( "EPCAL100",  zw3d(:,:,ik100) )  ! Export of calcite at 100m
-         CALL iom_put( "EXPCAL"  ,  zw3d )             ! Export of calcite in the water column
-      ENDIF
-      !
-      CALL trc_sink( kt, Kbb, Kmm, wsbio3, zsinking, jpsfe, rfact2 )
-      IF( l_diag ) THEN
-         zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
-      ENDIF
-      CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpbfe, rfact2 )
-      IF( l_diag ) THEN
-         zw3d(A2D(0),1:jpkm1) = zw3d(A2D(0),1:jpkm1) + zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
-         CALL iom_put( "EPFE100",  zw3d(:,:,ik100) )  ! Export of iron at 100m
-         CALL iom_put( "EXPFE"  ,  zw3d )             ! Export of iron in the water column
+      IF( .NOT. ln_p2z ) THEN
+
+         zsinking(:,:,:) = 0.e0
+         CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpcal, rfact2 )
+         DO_2D( 0, 0, 0, 0 )
+            sinkcalb(ji,jj) = zsinking(ji,jj,mbkt(ji,jj)+1)
+         END_2D
+         IF( l_diag ) THEN
+            zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
+            CALL iom_put( "EPCAL100",  zw3d(:,:,ik100) )  ! Export of calcite at 100m
+            CALL iom_put( "EXPCAL"  ,  zw3d )             ! Export of calcite in the water column
+         ENDIF
+
+         CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpgsi, rfact2 )
+         DO_2D( 0, 0, 0, 0 )
+            sinksilb(ji,jj) = zsinking(ji,jj,mbkt(ji,jj)+1)
+         END_2D
+         IF( l_diag ) THEN
+            zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
+            CALL iom_put( "EPSI100",  zw3d(:,:,ik100) )  ! Export of Silicate at 100m
+            CALL iom_put( "EXPSI"  ,  zw3d )             ! Export of Silicate in the water column
+         ENDIF
+         !
+         CALL trc_sink( kt, Kbb, Kmm, wsbio3, zsinking, jpsfe, rfact2 )
+         IF( l_diag ) THEN
+            zw3d(A2D(0),1:jpkm1) = zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
+         ENDIF
+         CALL trc_sink( kt, Kbb, Kmm, wsbio4, zsinking, jpbfe, rfact2 )
+         IF( l_diag ) THEN
+            zw3d(A2D(0),1:jpkm1) = zw3d(A2D(0),1:jpkm1) + zsinking(A2D(0),1:jpkm1) * xfact * tmask(A2D(0),1:jpkm1)
+            CALL iom_put( "EPFE100",  zw3d(:,:,ik100) )  ! Export of iron at 100m
+            CALL iom_put( "EXPFE"  ,  zw3d )             ! Export of iron in the water column
+         ENDIF
       ENDIF
       !
       ! PISCES-QUOTA part
@@ -227,15 +249,18 @@ CONTAINS
       !!----------------------------------------------------------------------
       !!                     ***  ROUTINE p4z_sink_alloc  ***
       !!----------------------------------------------------------------------
-      INTEGER :: ierr(2)
+      INTEGER :: ierr(3)
       !!----------------------------------------------------------------------
       !
       ierr(:) = 0
       !
-      ALLOCATE( sinkpocb(A2D(0)), sinkcalb(A2D(0)), sinksilb(A2D(0)), STAT=ierr(1) )                
+      ALLOCATE( sinkpocb(A2D(0)), sinkcalb(A2D(0)), STAT=ierr(1) )
       !
-      IF( ln_p5z ) ALLOCATE( sinkponb(A2D(0)), sinkpopb(A2D(0)), STAT=ierr(2) )
-
+      IF( .NOT. ln_p2z ) THEN
+         ALLOCATE( sinksilb(A2D(0)), STAT=ierr(2) )                
+         !
+         IF( ln_p5z ) ALLOCATE( sinkponb(A2D(0)), sinkpopb(A2D(0)), STAT=ierr(3) )
+      ENDIF
       !
       p4z_sink_alloc = MAXVAL( ierr )
       IF( p4z_sink_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p4z_sink_alloc : failed to allocate arrays.' )
diff --git a/src/TOP/PISCES/P4Z/p4zsms.F90 b/src/TOP/PISCES/P4Z/p4zsms.F90
index 000eacc4..18527c6b 100644
--- a/src/TOP/PISCES/P4Z/p4zsms.F90
+++ b/src/TOP/PISCES/P4Z/p4zsms.F90
@@ -119,7 +119,11 @@ CONTAINS
       DO jnt = 1, nrdttrc          ! Potential time splitting if requested
          !
          CALL p4z_bio( kt, jnt, Kbb, Kmm, Krhs )   ! Biology
-         CALL p4z_lys( kt, jnt, Kbb,      Krhs )   ! Compute CaCO3 saturation
+         IF( ln_p2z ) THEN
+            CALL p2z_lys( kt, jnt, Kbb, Kmm, Krhs )   ! Compute CaCO3 saturation
+         ELSE
+            CALL p4z_lys( kt, jnt, Kbb,      Krhs )   ! Compute CaCO3 saturation
+         ENDIF
          CALL p4z_sed( kt, jnt, Kbb, Kmm, Krhs )   ! Surface and Bottom boundary conditions
          CALL p4z_flx( kt, jnt, Kbb, Kmm, Krhs )   ! Compute surface fluxes
          !
@@ -149,59 +153,75 @@ CONTAINS
         IF(  iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR.  &
           &  iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) )  THEN
           !
-          ALLOCATE( zw3d(A2D(0),jpk), zw2d(A2D(0)) )
-          DO_3D( 0, 0, 0, 0, 1, jpkm1)
-             zw3d(ji,jj,jk) = xnegtr(ji,jj,jk) * xfact * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk)
-          END_3D
-          !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jptal,Krhs) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtAlk', zw2d )
-          !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpdic,Krhs) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtDIC', zw2d )
-          !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) * rno3 * ( tr(ji,jj,jk,jpno3,Krhs) + tr(ji,jj,jk,jpnh4,Krhs) ) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtDIN', zw2d )
+           ALLOCATE( zw3d(A2D(0),jpk), zw2d(A2D(0)) )
+        ENDIF
+        IF ( iom_use( 'INTdtAlk' ) ) THEN
+           DO_3D( 0, 0, 0, 0, 1, jpkm1)
+              zw3d(ji,jj,jk) = xnegtr(ji,jj,jk) * xfact * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk)
+           END_3D
+           !
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jptal,Krhs) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtAlk', zw2d )
+        ENDIF
           !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) * po4r * tr(ji,jj,jk,jppo4,Krhs) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtDIP', zw2d )
+        IF ( iom_use( 'INTdtDIC' ) ) THEN
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpdic,Krhs) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtDIC', zw2d )
+        ENDIF
           !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpfer,Krhs) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtFer', zw2d )
+        IF ( iom_use( 'INTdtDIN' ) ) THEN
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) * rno3 * ( tr(ji,jj,jk,jpno3,Krhs) + tr(ji,jj,jk,jpnh4,Krhs) ) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtDIN', zw2d )
+        ENDIF
           !
-          zw2d(:,:) = 0.
-          DO jk = 1, jpkm1
-             DO_2D( 0, 0, 0, 0 )
-                zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpsil,Krhs) 
-             END_2D
-          ENDDO
-          CALL iom_put( 'INTdtSil', zw2d )
+        IF ( iom_use( 'INTdtDIP' ) .AND. .NOT.ln_p2z ) THEN
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) * po4r * tr(ji,jj,jk,jppo4,Krhs) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtDIP', zw2d )
+        ENDIF
+           !
+        IF ( iom_use( 'INTdtFer' ) ) THEN
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpfer,Krhs) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtFer', zw2d )
+        ENDIF
           !
+        IF ( iom_use( 'INTdtSil' ) .AND. .NOT.ln_p2z ) THEN
+           zw2d(:,:) = 0.
+           DO jk = 1, jpkm1
+              DO_2D( 0, 0, 0, 0 )
+                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) *  tr(ji,jj,jk,jpsil,Krhs) 
+              END_2D
+           ENDDO
+           CALL iom_put( 'INTdtSil', zw2d )
+           !
+        ENDIF 
+
+        IF(  iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR.  &
+          &  iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) )  THEN
           DEALLOCATE( zw3d, zw2d )
         ENDIF
         !
@@ -224,7 +244,6 @@ CONTAINS
       DO jn = jp_pcs0, jp_pcs1
          tr(:,:,:,jn,Krhs) = ( tr(:,:,:,jn,Kbb) - ztrbbio(:,:,:,jn) ) * rfactr
          tr(:,:,:,jn,Kbb ) = ztrbbio(:,:,:,jn)
-         ztrbbio(:,:,:,jn) = 0._wp
       END DO
       !
       !
@@ -286,16 +305,16 @@ CONTAINS
             WRITE(numout,*) '      P/C in zooplankton                     po4rat3     =', po4rat3
          ENDIF
          WRITE(numout,*) '      Fe/C in microzooplankton                  feratz      =', feratz
-         WRITE(numout,*) '      Fe/C in microzooplankton                  feratz      =', feratm
+         IF( .NOT. ln_p2z ) THEN
+            WRITE(numout,*) '      Fe/C in mesozooplankton                   feratm      =', feratm
+         ENDIF
          WRITE(numout,*) '      Big particles sinking speed               wsbio2      =', wsbio2
          WRITE(numout,*) '      Big particles maximum sinking speed       wsbio2max   =', wsbio2max
          WRITE(numout,*) '      Big particles sinking speed length scale  wsbio2scale =', wsbio2scale
          IF( ln_ligand ) THEN
-            IF( ln_p4z ) THEN
-               WRITE(numout,*) '      Phyto ligand production per unit doc           ldocp  =', ldocp
-               WRITE(numout,*) '      Zoo ligand production per unit doc             ldocz  =', ldocz
-               WRITE(numout,*) '      Proportional loss of ligands due to Fe uptake  lthet  =', lthet
-            ENDIF
+            WRITE(numout,*) '      Phyto ligand production per unit doc           ldocp  =', ldocp
+            WRITE(numout,*) '      Zoo ligand production per unit doc             ldocz  =', ldocz
+            WRITE(numout,*) '      Proportional loss of ligands due to Fe uptake  lthet  =', lthet
          ENDIF
       ENDIF
 
@@ -358,13 +377,24 @@ CONTAINS
             CALL p4z_che( Kbb, Kmm )                  ! initialize the chemical constants
             CALL ahini_for_at( hi, Kbb )
          ENDIF
-         CALL iom_get( numrtr, jpdom_auto, 'Silicalim', xksi(:,:) )
 
-         ! Read the Si half saturation constant and the maximum Silica concentration
-         IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN
-            CALL iom_get( numrtr, jpdom_auto, 'Silicamax' , xksimax(:,:)  )
-         ELSE
-            xksimax(:,:) = xksi(:,:)
+         IF( ln_p2z ) THEN
+            IF( iom_varid( numrtr, 'Thetanano', ldstop = .FALSE. ) > 0 ) THEN
+               CALL iom_get( numrtr, jpdom_auto, 'Thetanano' , thetanano(:,:,:)  )
+            ELSE
+               thetanano(:,:,:) = 1.0 / 55.0
+            ENDIF
+         ENDIF
+
+         IF( .NOT. ln_p2z ) THEN
+            CALL iom_get( numrtr, jpdom_auto, 'Silicalim', xksi(:,:) )
+   
+            ! Read the Si half saturation constant and the maximum Silica concentration
+            IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN
+               CALL iom_get( numrtr, jpdom_auto, 'Silicamax' , xksimax(:,:)  )
+            ELSE
+               xksimax(:,:) = xksi(:,:)
+            ENDIF
          ENDIF
 
          ! Read the Fe3 consumption term by phytoplankton
@@ -374,7 +404,6 @@ CONTAINS
             consfe3(:,:,:) = 0._wp
          ENDIF
 
-
          ! Read the cumulative total flux. If not in the restart file, it is set to 0          
          IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon
             CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum  )
@@ -383,12 +412,6 @@ CONTAINS
          ENDIF
          !
          ! PISCES size proxy
-         IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN
-            CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:)  )
-            sized(:,:,:) = MAX( 1.0, sized(:,:,:) )
-         ELSE
-            sized(:,:,:) = 1.
-         ENDIF
          !
          IF( iom_varid( numrtr, 'sizen', ldstop = .FALSE. ) > 0 ) THEN
             CALL iom_get( numrtr, jpdom_auto, 'sizen' , sizen(:,:,:)  )
@@ -397,6 +420,15 @@ CONTAINS
             sizen(:,:,:) = 1.
          ENDIF
 
+         IF( ln_p4z .OR. ln_p5z ) THEN
+            IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN
+               CALL iom_get( numrtr, jpdom_auto, 'sized' , sized(:,:,:)  )
+               sized(:,:,:) = MAX( 1.0, sized(:,:,:) )
+            ELSE
+               sized(:,:,:) = 1.
+            ENDIF
+         ENDIF
+
          ! PISCES-QUOTA specific part
          IF( ln_p5z ) THEN
             ! Read the size of the different phytoplankton groups
@@ -417,13 +449,18 @@ CONTAINS
             IF(lwp) WRITE(numout,*) '~~~~~~~'
          ENDIF
          CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:)           )
-         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:)    )
-         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) )
-         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum )
-         CALL iom_rstput( kt, nitrst, numrtw, 'Consfe3', consfe3(:,:,:) ) ! Si max concentration
-         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux
          CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )  ! Size of nanophytoplankton
-         CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )  ! Size of diatoms
+         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum )
+         IF( ln_p2z ) THEN
+            CALL iom_rstput( kt, nitrst, numrtw, 'Thetanano' , thetanano(:,:,:)  )
+         ENDIF
+
+         IF ( ln_p4z .OR. ln_p5z ) THEN
+            CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:)    )
+            CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) )
+            CALL iom_rstput( kt, nitrst, numrtw, 'Consfe3', consfe3(:,:,:) ) ! Si max concentration
+            CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )  ! Size of diatoms
+         ENDIF
          IF( ln_p5z ) CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) )  ! Size of picophytoplankton
       ENDIF
       !
@@ -463,54 +500,60 @@ CONTAINS
             zarea          = 1._wp / glob_sum( 'p4zsms', cvol(:,:,:) ) * 1e6              
 
             zalksumn = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kmm) * cvol(:,:,:)  ) * zarea
-            zpo4sumn = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kmm) * cvol(:,:,:)  ) * zarea * po4r
             zno3sumn = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kmm) * cvol(:,:,:)  ) * zarea * rno3
-            zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:)  ) * zarea
  
             ! Correct the trn mean content of alkalinity
             IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn
             tr(:,:,:,jptal,Kmm) = tr(:,:,:,jptal,Kmm) * alkmean / zalksumn
 
-            ! Correct the trn mean content of PO4
-            IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn
-            tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn
-
             ! Correct the trn mean content of NO3
             IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn
             tr(:,:,:,jpno3,Kmm) = tr(:,:,:,jpno3,Kmm) * no3mean / zno3sumn
 
-            ! Correct the trn mean content of SiO3
-            IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn
-            tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn )
+            IF ( ln_p4z .OR. ln_p5z ) THEN
+               zpo4sumn = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kmm) * cvol(:,:,:)  ) * zarea * po4r
+               zsilsumn = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kmm) * cvol(:,:,:)  ) * zarea
+
+               ! Correct the trn mean content of PO4
+               IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn
+               tr(:,:,:,jppo4,Kmm) = tr(:,:,:,jppo4,Kmm) * po4mean / zpo4sumn
+
+               ! Correct the trn mean content of SiO3
+               IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn
+               tr(:,:,:,jpsil,Kmm) = MIN( 400.e-6,tr(:,:,:,jpsil,Kmm) * silmean / zsilsumn )
+            ENDIF
             !
             !
             IF( .NOT. ln_top_euler ) THEN
                zalksumb = glob_sum( 'p4zsms', tr(:,:,:,jptal,Kbb) * cvol(:,:,:)  ) * zarea
-               zpo4sumb = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kbb) * cvol(:,:,:)  ) * zarea * po4r
                zno3sumb = glob_sum( 'p4zsms', tr(:,:,:,jpno3,Kbb) * cvol(:,:,:)  ) * zarea * rno3
-               zsilsumb = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kbb) * cvol(:,:,:)  ) * zarea
  
                IF(lwp) WRITE(numout,*) ' '
                ! Correct the trb mean content of alkalinity
                IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb
                tr(:,:,:,jptal,Kbb) = tr(:,:,:,jptal,Kbb) * alkmean / zalksumb
 
-               ! Correct the trb mean content of PO4
-               IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb
-               tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb
-
                ! Correct the trb mean content of NO3
                IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb
                tr(:,:,:,jpno3,Kbb) = tr(:,:,:,jpno3,Kbb) * no3mean / zno3sumb
 
-               ! Correct the trb mean content of SiO3
-               IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb
-               tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb )
-           ENDIF
-        ENDIF
-        !
+               IF ( ln_p4z .OR. ln_p5z ) THEN
+                  zpo4sumb = glob_sum( 'p4zsms', tr(:,:,:,jppo4,Kbb) * cvol(:,:,:)  ) * zarea * po4r
+                  zsilsumb = glob_sum( 'p4zsms', tr(:,:,:,jpsil,Kbb) * cvol(:,:,:)  ) * zarea
+
+                  ! Correct the trb mean content of PO4
+                  IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb
+                  tr(:,:,:,jppo4,Kbb) = tr(:,:,:,jppo4,Kbb) * po4mean / zpo4sumb
+
+                  ! Correct the trb mean content of SiO3
+                  IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb
+                  tr(:,:,:,jpsil,Kbb) = MIN( 400.e-6,tr(:,:,:,jpsil,Kbb) * silmean / zsilsumb )
+               ENDIF
+            ENDIF
+         ENDIF
+      !
       ENDIF
-        !
+      !
    END SUBROUTINE p4z_dmp
 
 
@@ -546,8 +589,14 @@ CONTAINS
 
       ! Compute the budget of NO3
       IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
-         ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-         IF( ln_p4z ) THEN
+        ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+        IF( ln_p2z ) THEN
+            DO_3D( 0, 0, 0, 0, 1, jpk)
+            zw3d(ji,jj,jk)  =  ( tr(ji,jj,jk,jpno3,Kmm) + tr(ji,jj,jk,jpphy,Kmm)                      &
+               &             +   tr(ji,jj,jk,jppoc,Kmm) + tr(ji,jj,jk,jpdoc,Kmm)                      &
+               &             +   tr(ji,jj,jk,jpzoo,Kmm) ) * cvol(ji,jj,jk)
+            END_3D
+        ELSE IF( ln_p4z ) THEN
             DO_3D( 0, 0, 0, 0, 1, jpk)
             zw3d(ji,jj,jk)  =  ( tr(ji,jj,jk,jpno3,Kmm) + tr(ji,jj,jk,jpnh4,Kmm)                      &
                &             +   tr(ji,jj,jk,jpphy,Kmm) + tr(ji,jj,jk,jpdia,Kmm)                      &
@@ -568,50 +617,87 @@ CONTAINS
         CALL iom_put( "pno3tot", no3budget )
         DEALLOCATE( zw3d )
       ENDIF
+      IF( .NOT. ln_p2z ) THEN
       !
       ! Compute the budget of PO4
-      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
+         IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
+            ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+            IF( ln_p4z ) THEN
+               DO_3D( 0, 0, 0, 0, 1, jpk)
+                  zw3d(ji,jj,jk) =    ( tr(ji,jj,jk,jppo4,Kmm)                                         &
+                     &             +   tr(ji,jj,jk,jpphy,Kmm) + tr(ji,jj,jk,jpdia,Kmm)                      &
+                     &             +   tr(ji,jj,jk,jppoc,Kmm) + tr(ji,jj,jk,jpgoc,Kmm)  + tr(ji,jj,jk,jpdoc,Kmm)  &        
+                     &             +   tr(ji,jj,jk,jpzoo,Kmm) + tr(ji,jj,jk,jpmes,Kmm) ) * cvol(ji,jj,jk)
+               END_3D
+            ELSE
+               DO_3D( 0, 0, 0, 0, 1, jpk)
+                  zw3d(ji,jj,jk) =    ( tr(ji,jj,jk,jppo4,Kmm) + tr(ji,jj,jk,jppph,Kmm)                      &
+                     &             +   tr(ji,jj,jk,jppdi,Kmm) + tr(ji,jj,jk,jpppi,Kmm)                      & 
+                     &             +   tr(ji,jj,jk,jppop,Kmm) + tr(ji,jj,jk,jpgop,Kmm) + tr(ji,jj,jk,jpdop,Kmm)   &
+                     &             + ( tr(ji,jj,jk,jpzoo,Kmm) + tr(ji,jj,jk,jpmes,Kmm) ) * po4rat3 ) * cvol(ji,jj,jk)
+               END_3D
+            ENDIF
+            !
+            po4budget = glob_sum( 'p4zsms', zw3d(:,:,:)  )  
+            po4budget = po4budget / areatot
+            CALL iom_put( "ppo4tot", po4budget )
+            DEALLOCATE( zw3d )
+         ENDIF
+         !
+         ! Compute the budget of SiO3
+         IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
+            ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+            DO_3D( 0, 0, 0, 0, 1, jpk)
+               zw3d(ji,jj,jk) =  ( tr(ji,jj,jk,jpsil,Kmm) + tr(ji,jj,jk,jpgsi,Kmm) + tr(ji,jj,jk,jpdsi,Kmm) ) * cvol(ji,jj,jk)
+            END_3D
+            !
+            silbudget = glob_sum( 'p4zsms', zw3d(:,:,:)  )  
+            silbudget = silbudget / areatot
+            CALL iom_put( "psiltot", silbudget )
+            DEALLOCATE( zw3d )
+         ENDIF
+      ENDIF
+         ! Compute the budget of Iron
+      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-         IF( ln_p4z ) THEN
+         IF( ln_p2z ) THEN
             DO_3D( 0, 0, 0, 0, 1, jpk)
-               zw3d(ji,jj,jk) =    ( tr(ji,jj,jk,jppo4,Kmm)                                         &
-                  &             +   tr(ji,jj,jk,jpphy,Kmm) + tr(ji,jj,jk,jpdia,Kmm)                      &
-                  &             +   tr(ji,jj,jk,jppoc,Kmm) + tr(ji,jj,jk,jpgoc,Kmm)  + tr(ji,jj,jk,jpdoc,Kmm)  &        
-                  &             +   tr(ji,jj,jk,jpzoo,Kmm) + tr(ji,jj,jk,jpmes,Kmm) ) * cvol(ji,jj,jk)
+               zw3d(ji,jj,jk) =   ( tr(ji,jj,jk,jpfer,Kmm) + tr(ji,jj,jk,jpphy,Kmm) * feratz  &
+                  &            +    tr(ji,jj,jk,jppoc,Kmm) *feratz               &
+                  &            +    tr(ji,jj,jk,jpzoo,Kmm) * feratz ) * cvol(ji,jj,jk)
+            END_3D
+         ELSE IF( ln_p4z ) THEN
+            DO_3D( 0, 0, 0, 0, 1, jpk)
+               zw3d(ji,jj,jk) =   ( tr(ji,jj,jk,jpfer,Kmm) + tr(ji,jj,jk,jpnfe,Kmm) + tr(ji,jj,jk,jpdfe,Kmm)   &
+                  &            +    tr(ji,jj,jk,jpbfe,Kmm) + tr(ji,jj,jk,jpsfe,Kmm)                      &
+                  &            +    tr(ji,jj,jk,jpzoo,Kmm) * feratz + tr(ji,jj,jk,jpmes,Kmm) * feratm ) * cvol(ji,jj,jk)
             END_3D
          ELSE
             DO_3D( 0, 0, 0, 0, 1, jpk)
-               zw3d(ji,jj,jk) =    ( tr(ji,jj,jk,jppo4,Kmm) + tr(ji,jj,jk,jppph,Kmm)                      &
-                  &             +   tr(ji,jj,jk,jppdi,Kmm) + tr(ji,jj,jk,jpppi,Kmm)                      & 
-                  &             +   tr(ji,jj,jk,jppop,Kmm) + tr(ji,jj,jk,jpgop,Kmm) + tr(ji,jj,jk,jpdop,Kmm)   &
-                  &             + ( tr(ji,jj,jk,jpzoo,Kmm) + tr(ji,jj,jk,jpmes,Kmm) ) * po4rat3 ) * cvol(ji,jj,jk)
+               zw3d(ji,jj,jk) =   ( tr(ji,jj,jk,jpfer,Kmm) + tr(ji,jj,jk,jpnfe,Kmm) + tr(ji,jj,jk,jpdfe,Kmm)   &
+                  &            +    tr(ji,jj,jk,jppfe,Kmm) + tr(ji,jj,jk,jpbfe,Kmm) + tr(ji,jj,jk,jpsfe,Kmm)   &
+                  &            +    tr(ji,jj,jk,jpzoo,Kmm) * feratz + tr(ji,jj,jk,jpmes,Kmm) * feratm ) * cvol(ji,jj,jk)
             END_3D
-        ENDIF
-        !
-        po4budget = glob_sum( 'p4zsms', zw3d(:,:,:)  )  
-        po4budget = po4budget / areatot
-        CALL iom_put( "ppo4tot", po4budget )
-        DEALLOCATE( zw3d )
-      ENDIF
-      !
-      ! Compute the budget of SiO3
-      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
-         ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-         DO_3D( 0, 0, 0, 0, 1, jpk)
-            zw3d(ji,jj,jk) =  ( tr(ji,jj,jk,jpsil,Kmm) + tr(ji,jj,jk,jpgsi,Kmm) + tr(ji,jj,jk,jpdsi,Kmm) ) * cvol(ji,jj,jk)
-         END_3D
+         ENDIF
          !
-         silbudget = glob_sum( 'p4zsms', zw3d(:,:,:)  )  
-         silbudget = silbudget / areatot
-         CALL iom_put( "psiltot", silbudget )
+         ferbudget = glob_sum( 'p4zsms', zw3d(:,:,:) )
+         ferbudget = ferbudget / areatot
+         CALL iom_put( "pfertot", ferbudget )
          DEALLOCATE( zw3d )
       ENDIF
       !
       IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-         DO_3D( 0, 0, 0, 0, 1, jpk)
-            zw3d(ji,jj,jk) =  ( tr(ji,jj,jk,jpno3,Kmm) * rno3 + tr(ji,jj,jk,jptal,Kmm) + tr(ji,jj,jk,jpcal,Kmm) * 2. ) * cvol(ji,jj,jk)             
-         END_3D
+         IF( ln_p2z ) THEN
+            DO_3D( 0, 0, 0, 0, 1, jpk)
+               zw3d(ji,jj,jk) =  ( tr(ji,jj,jk,jpno3,Kmm) * rno3 + tr(ji,jj,jk,jptal,Kmm) ) * cvol(ji,jj,jk)             
+            END_3D
+         ELSE
+            DO_3D( 0, 0, 0, 0, 1, jpk)
+               zw3d(ji,jj,jk) =  ( tr(ji,jj,jk,jpno3,Kmm) * rno3 + tr(ji,jj,jk,jptal,Kmm)   &
+                 &               + tr(ji,jj,jk,jpcal,Kmm) * 2. - tr(ji,jj,jk,jpnh4,Kmm) * rno3 ) * cvol(ji,jj,jk)
+            END_3D
+         ENDIF
          !
          alkbudget = glob_sum( 'p4zsms', zw3d(:,:,:)  )         !
          alkbudget = alkbudget / areatot
@@ -619,21 +705,6 @@ CONTAINS
          DEALLOCATE( zw3d )
       ENDIF
       !
-      ! Compute the budget of Iron
-      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN
-         ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
-         DO_3D( 0, 0, 0, 0, 1, jpk)
-            zw3d(ji,jj,jk) =   ( tr(ji,jj,jk,jpfer,Kmm) + tr(ji,jj,jk,jpnfe,Kmm) + tr(ji,jj,jk,jpdfe,Kmm)   &
-               &            +    tr(ji,jj,jk,jpbfe,Kmm) + tr(ji,jj,jk,jpsfe,Kmm)                      &
-               &            +    tr(ji,jj,jk,jpzoo,Kmm) * feratz + tr(ji,jj,jk,jpmes,Kmm) * feratm ) * cvol(ji,jj,jk)  
-         END_3D
-         !
-         ferbudget = glob_sum( 'p4zsms', zw3d(:,:,:) )  
-         ferbudget = ferbudget / areatot
-         CALL iom_put( "pfertot", ferbudget )
-         DEALLOCATE( zw3d )
-      ENDIF
-      !
       ! Global budget of N SMS : denitrification in the water column and in the sediment
       !                          nitrogen fixation by the diazotrophs
       ! --------------------------------------------------------------------------------
@@ -663,9 +734,11 @@ CONTAINS
          IF( lwp ) WRITE(numco2,9000) ndastp, t_atm_co2_flx, t_oce_co2_flx, tpp, t_oce_co2_exp
          IF( lwp ) WRITE(numnut,9100) ndastp, alkbudget        * 1.e+06, &
              &                                no3budget * rno3 * 1.e+06, &
-             &                                po4budget * po4r * 1.e+06, &
-             &                                silbudget        * 1.e+06, &
              &                                ferbudget        * 1.e+09
+         IF( ln_p4z .OR. ln_p5z ) THEN
+            IF( lwp ) WRITE(numnut,9101) ndastp, po4budget * po4r * 1.e+06, &
+                &                                silbudget        * 1.e+06
+         ENDIF
          !
          IF( lwp ) WRITE(numnit,9200) ndastp, znitrpottot * xfact2  , &
             &                             zrdenittot  * xfact2  , &
@@ -673,7 +746,8 @@ CONTAINS
       ENDIF
       !
  9000  FORMAT(i8,f10.5,e18.10,f10.5,f10.5)
- 9100  FORMAT(i8,5e18.10)
+ 9100  FORMAT(i8,3e18.10)
+ 9101  FORMAT(i8,2e18.10)
  9200  FORMAT(i8,3f10.5)
        !
    END SUBROUTINE p4z_chk_mass
diff --git a/src/TOP/PISCES/P4Z/p5zlim.F90 b/src/TOP/PISCES/P4Z/p5zlim.F90
index dfaa8c68..00cdd20f 100644
--- a/src/TOP/PISCES/P4Z/p5zlim.F90
+++ b/src/TOP/PISCES/P4Z/p5zlim.F90
@@ -14,6 +14,7 @@ MODULE p5zlim
    !!----------------------------------------------------------------------
    USE oce_trc         ! Shared ocean-passive tracers variables
    USE trc             ! Tracers defined
+   USE p2zlim          ! Nutrient limitation
    USE p4zlim          ! Nutrient limitation 
    USE sms_pisces      ! PISCES variables
    USE iom             !  I/O manager
@@ -135,9 +136,9 @@ CONTAINS
       REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe
       REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf
       REAL(wp) ::   fapico, fapicop, fapicof, zlimpo4, zlimdop
-      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl, ztrn, ztrp
+      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, ztrn, ztrp
       REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl
-      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4, zbiron
+      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbiron
       REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zlim1f, zsizetmp
       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
       !!---------------------------------------------------------------------
@@ -152,7 +153,6 @@ CONTAINS
          l_dia_fracal   = iom_use( "xfracal" )
       ENDIF
       !
-      zratchl = 6.0
       sizena(:,:,:) = 0.0  ;  sizepa(:,:,:) = 0.0  ;  sizeda(:,:,:) = 0.0
       !
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
@@ -194,12 +194,17 @@ CONTAINS
          ! Allometric variations of the minimum and maximum quotas
          ! From Talmy et al. (2014) and Maranon et al. (2013)
          ! -------------------------------------------------------
-         xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.36)
+         xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.18)
          xqnnmax(ji,jj,jk) = qnnmax
-         xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.36)
+         xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.18)
          xqndmax(ji,jj,jk) = qndmax
-         xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.36)
+         xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.18)
          xqnpmax(ji,jj,jk) = qnpmax
+         !
+         ! Michaelis-Menten Limitation term for nutrients Small flagellates
+         ! -----------------------------------------------
+         ztrn    = tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb)
+         ztrp    = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb) / 200.0
 
          ! Computation of the optimal allocation parameters
          ! Based on the different papers by Pahlow et al., and Smith et al.
@@ -207,28 +212,25 @@ CONTAINS
          zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk)
                
          ! Nanophytoplankton
-         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4,    &
-           &         tr(ji,jj,jk,jpno3,Kbb) / zconc0n)
+         znutlim = ztrn / zconc0n
          fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
-         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4
+         znutlim = ztrp / zconc0npo4
          fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
          znutlim = zbiron / zconcnfe
          fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
 
          ! Picophytoplankton
-         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4,    &
-           &         tr(ji,jj,jk,jpno3,Kbb) / zconc0p)
+         znutlim = ztrn / zconc0p
          fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
-         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4
+         znutlim = ztrp / zconc0npo4
          fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
          znutlim = zbiron / zconcpfe
          fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
 
          ! Diatoms
-         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4,    &
-           &         tr(ji,jj,jk,jpno3,Kbb) / zconc1d )
+         znutlim = ztrn / zconc1d
          fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
-         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4
+         znutlim = ztrp / zconc0dpo4
          fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
          znutlim = zbiron / zconcdfe
          fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) )
@@ -237,14 +239,9 @@ CONTAINS
          ! Michaelis-Menten Limitation term by nutrients of
          !  heterotrophic bacteria
          ! -------------------------------------------------------------
-         zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) )
-         zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) )
-         znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) )  &
+         zlim1   = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) )  &
              &      / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) )
-         zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )
-         zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )         
          !
-         zlim1    = zbactno3 + zbactnh4
          zlim2    = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbpo4)
          zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) )
          zlim4    = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) )
@@ -255,11 +252,6 @@ CONTAINS
          xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 )
          xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4
          !
-         ! Michaelis-Menten Limitation term for nutrients Small flagellates
-         ! -----------------------------------------------
-         ztrn    = tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb)
-         ztrp    = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb) 
-         !
          ! Limitation of N based nutrients uptake (NO3 and NH4)
          zfalim  = (1.-fanano) / fanano
          zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) )
@@ -290,15 +282,13 @@ CONTAINS
          zration = tr(ji,jj,jk,jpnph,Kbb) * z1_trnphy
          zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration ))
          fvnuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn)  &
-         &                   * MAX(0., (1. - zratchl * znanochl / 12. ) )
+         &                   * MAX(0., (1. - ratchl * znanochl / 12. ) )
          !
-         zlim1  = max(0., (zration - xqnnmin(ji,jj,jk) )  &
-         &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  &
-         &          / (zration + rtrn)
+         zlim1  = (zration - xqnnmin(ji,jj,jk) ) / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) )
+
          ! The value of the optimal quota in the formulation below
          ! has been found by solving a non linear equation
-         zlim1f = max(0., ( 1.13 - xqnnmin(ji,jj,jk) )  &
-         &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)
+         zlim1f = ( 1.13 - xqnnmin(ji,jj,jk) ) / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) )
          zlim3  = MAX( 0.,( zratiof - zqfemn ) / qfnopt )
          ! computation of the various limitation terms of nanophyto
          ! growth and PP
@@ -338,15 +328,13 @@ CONTAINS
          zration   = tr(ji,jj,jk,jpnpi,Kbb) * z1_trnpic
          zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration ))
          fvpuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn)  &
-         &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 
+         &                   * MAX(0., (1. - ratchl * zpicochl / 12. ) ) 
          !
-         zlim1    = max(0., (zration - xqnpmin(ji,jj,jk) )  &
-         &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  &
-         &          / (zration + rtrn)
+         zlim1    = (zration - xqnpmin(ji,jj,jk) ) / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) )
+
          ! The value of the optimal quota in the formulation below
          ! has been found by solving a non linear equation
-         zlim1f   = max(0., (1.29 - xqnpmin(ji,jj,jk) )  &
-         &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)
+         zlim1f   = (1.13 - xqnpmin(ji,jj,jk) ) / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) )
          zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt )
 
          ! computation of the various limitation terms of picophyto
@@ -355,8 +343,6 @@ CONTAINS
          xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 )
          xlimnpp (ji,jj,jk) = MIN( 1., zlim1 )
          xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 )
-
-
          !
          !   Michaelis-Menten Limitation term for nutrients Diatoms
          !   ------------------------------------------------------
@@ -391,16 +377,12 @@ CONTAINS
          zration   = tr(ji,jj,jk,jpndi,Kbb) * z1_trndia
          zration   = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration ))
          fvduptk(ji,jj,jk) = 2.5 * xpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn)   &
-         &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 
+         &                   * MAX(0., (1. - ratchl * zdiatchl / 12. ) ) 
          !
-         zlim1    = max(0., (zration - xqndmin(ji,jj,jk) )    &
-         &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   &
-         &          * xqndmax(ji,jj,jk) / (zration + rtrn)
+         zlim1    = (zration - xqndmin(ji,jj,jk) ) / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) )
          ! The value of the optimal quota in the formulation below
          ! has been found by solving a non linear equation
-         zlim1f   = max(0., (1.13 - xqndmin(ji,jj,jk) )    &
-         &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   &
-         &          * xqndmax(ji,jj,jk)
+         zlim1f   = (1.13 - xqndmin(ji,jj,jk) ) / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) )
          zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) )
          zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt )
          ! computation of the various limitation terms of diatoms
@@ -419,6 +401,7 @@ CONTAINS
       ! phytoplankton (see Daines et al., 2013). 
       ! --------------------------------------------------------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
+         ztrp    = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb) / 200.0
          ! Size estimation of nanophytoplankton based on total biomass
          ! Assumes that larger biomass implies addition of larger cells
          ! ------------------------------------------------------------
@@ -429,10 +412,10 @@ CONTAINS
          zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn )
          ! Computed from Inomura et al. (2020) using Pavlova Lutheri
          zrpho  = 11.55 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn )
-         zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) )
-         xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 ) * 16.
+         zrass = 0.62 * (0.15 + 0.85 * ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) )
+         xqpnmin(ji,jj,jk) = ( 0.0078 + 0.62 * 0.15 * 0.0783 ) * 16.
          xqpnmax(ji,jj,jk) = ( zrpho * 0.0089 + zrass * 0.0783 ) * 16.
-         xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16.
+         xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + ( 0.0078 + 0.022 ) * 16. + 3500 * ztrp
          xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) )
 
          ! Size estimation of picophytoplankton based on total biomass
@@ -443,13 +426,13 @@ CONTAINS
 
          ! N/P ratio of picophytoplankton
          ! ------------------------------
-         zfuptk = 0.2 + 0.12 / ( 0.8 * sizep(ji,jj,jk) + rtrn )
+         zfuptk = 0.2 + 0.12 / ( 0.7 * sizep(ji,jj,jk) + rtrn )
          ! Computed from Inomura et al. (2020) using a synechococcus
          zrpho = 13.4 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn )
-         zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) )
-         xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 ) * 16.
+         zrass = 0.4 * ( 0.15 + 0.85 * ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) )
+         xqppmin(ji,jj,jk) = ( 0.0078 + 0.4/4. * 0.0517 ) * 16.
          xqppmax(ji,jj,jk) = ( zrpho * 0.0076 + zrass * 0.0517 ) * 16.
-         xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) +  (0.033 + 0.0078 ) * 16
+         xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) + ( 0.0078 + 0.022 ) * 16. + 1500 * ztrp
          xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) )
 
          ! Size estimation of diatoms based on total biomass
@@ -462,10 +445,10 @@ CONTAINS
          zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn )
          ! Computed from Inomura et al. (2020) using a synechococcus
          zrpho = 8.08 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * 12. + rtrn )
-         zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) )
-         xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 ) * 16.
+         zrass = 0.66 * ( 0.15 + 0.85 * ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) )
+         xqpdmin(ji,jj,jk) = ( 0.0078 + 0.66/4. * 0.0783 ) * 16.
          xqpdmax(ji,jj,jk) = ( zrpho * 0.0135 + zrass * 0.0783 ) * 16.
-         xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.033 ) * 16.
+         xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.022 ) * 16. + 5000 * ztrp
          xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) )
       END_3D
 
@@ -474,29 +457,17 @@ CONTAINS
       ! This fraction depends on nutrient limitation, light, temperature
       ! --------------------------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         zlim1 =  tr(ji,jj,jk,jpnh4,Kbb) / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) + tr(ji,jj,jk,jpno3,Kbb)    &
-         &        / ( tr(ji,jj,jk,jpno3,Kbb) + concnno3 ) * ( 1.0 - tr(ji,jj,jk,jpnh4,Kbb)   &
-         &        / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) )
-         zlim2  = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnpo4 )
-         zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  6.E-11 ) 
          ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8 )
          ztem2  = ts(ji,jj,jk,jp_tem,Kmm) - 10.
          zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) * 30. / ( 30. + etot_ndcy(ji,jj,jk) ) 
 
-         xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)     &
-         &                   * ztem1 / ( 0.1 + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 )   &
+         xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) * ztem1 / ( 0.1 + ztem1 )     &
+            &                * MAX( 1., tr(ji,jj,jk,jpphy,Kbb) / xsizephy )   &
             &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         &
             &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) )
          xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) )
       END_3D
       !
-      DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         ! denitrification factor computed from O2 levels
-         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    &
-            &                                / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) )  )
-         nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) )
-      END_3D
-      !
       IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics
         !
         IF( l_dia_fracal ) THEN   ! fraction of calcifiers
@@ -587,7 +558,7 @@ CONTAINS
          &                concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4,   &
          &                concdpo4, concbno3, concbnh4, concbpo4, xsizedia, xsizepic,  &
          &                xsizephy, xsizern, xsizerp, xsizerd, xksi1, xksi2, xkdoc,    &
-         &                caco3r, oxymin
+         &                caco3r, oxymin, ratchl
          !
       NAMELIST/namp5zquota/ qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin,      &
          &                  qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax,  &
@@ -606,6 +577,7 @@ CONTAINS
          WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zlim'
          WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
          WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r
+         WRITE(numout,*) '    C associated with Chlorophyll            ratchl    = ', ratchl
          WRITE(numout,*) '    NO3 half saturation of nanophyto         concnno3  = ', concnno3
          WRITE(numout,*) '    NO3 half saturation of picophyto         concpno3  = ', concpno3
          WRITE(numout,*) '    NO3 half saturation of diatoms           concdno3  = ', concdno3
@@ -669,7 +641,6 @@ CONTAINS
       xpsinh4  = 1.8 * rno3
       xpsiuptk = 1.0 / 6.625
       !
-      nitrfac(:,:,jpk) = 0._wp
       xfracal(:,:,jpk) = 0._wp
       xlimphy(:,:,jpk) = 0._wp
       xlimpic(:,:,jpk) = 0._wp
diff --git a/src/TOP/PISCES/P4Z/p5zmeso.F90 b/src/TOP/PISCES/P4Z/p5zmeso.F90
index 9e0bf8a6..f0afae60 100644
--- a/src/TOP/PISCES/P4Z/p5zmeso.F90
+++ b/src/TOP/PISCES/P4Z/p5zmeso.F90
@@ -39,6 +39,7 @@ MODULE p5zmeso
    REAL(wp), PUBLIC ::  xthresh2mes  !: mesozoo feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  xthresh2     !: feeding threshold for mesozooplankton 
    REAL(wp), PUBLIC ::  resrat2      !: exsudation rate of mesozooplankton
+   REAL(wp), PUBLIC ::  lmzrat2      !: linear microzooplankton mortality rate 
    REAL(wp), PUBLIC ::  mzrat2       !: microzooplankton mortality rate 
    REAL(wp), PUBLIC ::  grazrat2     !: maximal mesozoo grazing rate
    REAL(wp), PUBLIC ::  xkgraz2      !: Half-saturation constant of assimilation
@@ -94,7 +95,7 @@ CONTAINS
       REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf
       REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt
       REAL(wp) :: zprcaca, zmortz, zexcess
-      REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf
+      REAL(wp) :: zbeta, zrespz, ztortz, zltortz, zgrasratp, zgrasratn, zgrasratf
       REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot
       REAL(wp) :: zgrazdc, zgrazz, zgrazm, zgrazpof, zgrazcal, zfracal
       REAL(wp) :: zgraznc, zgrazpoc, zgrazpon, zgrazpop, zgraznf, zgrazdf
@@ -106,10 +107,10 @@ CONTAINS
       REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn
       REAL(wp), DIMENSION(A2D(0),jpk) :: zgrarem, zgraref, zgrapoc, zgrapof
       REAL(wp), DIMENSION(A2D(0),jpk) :: zgrarep, zgraren, zgrapon, zgrapop
-      REAL(wp), DIMENSION(A2D(0),jpk) :: zgradoc, zgradon, zgradop
+      REAL(wp), DIMENSION(A2D(0),jpk) :: zgradoc, zgradon, zgradop, zgrabsi
       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof
       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrep, zgramigren, zgramigpop, zgramigpon
-      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigdoc, zgramigdop, zgramigdon
+      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigdoc, zgramigdop, zgramigdon, zgramigbsi
       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zgrazing2, zfezoo2, zzligprod2, zw3d
 
       !!---------------------------------------------------------------------
@@ -164,14 +165,21 @@ CONTAINS
          !  A michaelis menten modulation term is used to avoid extinction of 
          !  mesozooplankton at very low food concentrations
          !  -----------------------------------------------------------------
-         zrespz   = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) )  &
-         &          + 3. * nitrfac(ji,jj,jk) )
+         zrespz   = resrat2 * zfact * tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) )
+
+         !  linear mortality  of mesozooplankton
+         !  A michaelis menten modulation term is used to avoid extinction of 
+         !  mesozooplankton at very low food concentrations
+         !  -----------------------------------------------------------------
+         zltortz   = lmzrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) &
+         &        + 3. * nitrfac(ji,jj,jk) )
 
          !  Zooplankton quadratic mortality. A square function has been selected with
          !  to mimic predation and disease (density dependent mortality). It also tends
          !  to stabilise the model
          !  -------------------------------------------------------------------------
          ztortz   = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk))
+         zmortz = ztortz + zltortz
 
          !   Computation of the abundance of the preys
          !   A threshold can be specified in the namelist
@@ -207,16 +215,16 @@ CONTAINS
          ! have low abundance, .i.e. zooplankton become less specific 
          ! to avoid starvation.
          ! ----------------------------------------------------------
-         zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3)
+         zsigma = 1.0 - zdenom**3/(0.05**3+zdenom**3)
          zsigma = xsigma2 + xsigma2del * zsigma
          ! Nanophytoplankton and diatoms are the only preys considered
          ! to be close enough to have potential interference
          ! -----------------------------------------------------------
          zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 )
-         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / (1.0 + zdiffdn)
+         ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi )
          ztmp2 = xpref2m * zcompames**2
          ztmp3 = xpref2c * zcompapoc**2
-         ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / (1.0 + zdiffdn)
+         ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph )
          ztmp5 = xpref2z * zcompaz**2
          ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
          ztmp1 = ztmp1 / ztmptot
@@ -261,11 +269,10 @@ CONTAINS
          zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg
 
          ! Compute the proportion of filter feeders. It is assumed steady state.
-         ! ---------------------------------------------------------------------  
+         ! ---------------------------------------------------------------------
          zproport  = 0._wp
-         IF( gdepw(ji,jj,jk+1,Kmm) > MAX(hmld(ji,jj), heup_01(ji,jj) ) ) THEN
-            zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc)
-         ENDIF
+         zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc)
+         zproport = zproport**2
 
          !   Compute fractionation of aggregates. It is assumed that 
          !   diatoms based aggregates are more prone to fractionation
@@ -330,7 +337,7 @@ CONTAINS
          !   Excess carbon in the food is used preferentially
          !   when bmetexc2 is set to .true.
          !   -----------------------------------------------
-         zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 
+         zexcess  = zgraztotc * zepsherq * zepsherf * (1.0 - zepshert) * zmetexcess 
          zbasresb = MAX(0., zrespz - zexcess)
          zbasresi = zexcess + MIN(0., zrespz - zexcess)
          zrespirc = srespir2 * zepsherv * zgraztotc + zbasresb
@@ -351,28 +358,28 @@ CONTAINS
          zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn
          zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp
          zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf
-         ztmp1    = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz
+         ztmp1    = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * zmortz
 
-         zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2
-         zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2
-         zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2
+         zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * (1.0 - ssigma2)
+         zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * (1.0 - ssigma2)
+         zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * (1.0 - ssigma2)
 
 
          !  Since only semilabile DOM is represented in PISCES
          !  part of DOM is in fact labile and is then released
          !  as dissolved inorganic compounds (ssigma2)
          !  --------------------------------------------------
-         zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2)
-         zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2)
-         zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2)
+         zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * ssigma2
+         zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * ssigma2
+         zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * ssigma2
          zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1
 
          !   Defecation as a result of non assimilated products
          !   --------------------------------------------------
-         zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz
-         zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz
-         zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz
-         zgrapof(ji,jj,jk)  = zgraztotf * unass2c + feratm  * unass2c / ( 1. - epsher2 ) * ztortz
+         zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * zmortz
+         zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * zmortz
+         zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * zmortz
+         zgrapof(ji,jj,jk)  = zgraztotf * unass2c + feratm  * unass2c / ( 1. - epsher2 ) * zmortz
 
          !  Addition of respiration to the release of inorganic nutrients
          !  -------------------------------------------------------------
@@ -386,7 +393,7 @@ CONTAINS
          !   sinks
          !   --------------------------------------------------------------
          tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) + zepsherv * zgraztotc - zrespirc   &
-         &                     - ztortz - zgrazm
+         &                     - zmortz - zgrazm
          tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc
          tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zgrazdn
          tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zgrazdp
@@ -399,7 +406,7 @@ CONTAINS
          tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
          tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
          tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
-         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
+         zgrabsi(ji,jj,jk)       = zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
 
          tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfracc
          prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc
@@ -435,13 +442,13 @@ CONTAINS
       IF( ln_dvm_meso ) THEN
           ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) )
           ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) )
-          ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) )
+          ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj), zgramigbsi(jpi,jpj) )
           zgramigrem(:,:)  = 0.0   ;   zgramigref(:,:) = 0.0
           zgramigrep(:,:)  = 0.0   ;   zgramigren(:,:) = 0.0
           zgramigpoc(:,:)  = 0.0   ;   zgramigpof(:,:) = 0.0
           zgramigpop(:,:)  = 0.0   ;   zgramigpon(:,:) = 0.0
           zgramigdoc(:,:)  = 0.0   ;   zgramigdon(:,:) = 0.0
-          zgramigdop(:,:)  = 0.0   
+          zgramigdop(:,:)  = 0.0   ;   zgramigbsi(:,:) = 0.0 
                  
           ! Compute the amount of materials that will go into vertical migration
           ! This fraction is sumed over the euphotic zone and is removed from 
@@ -462,6 +469,7 @@ CONTAINS
                 zgramigdoc(ji,jj) = zgramigdoc(ji,jj) + xfracmig * zgradoc(ji,jj,jk) * zmigthick
                 zgramigdop(ji,jj) = zgramigdop(ji,jj) + xfracmig * zgradop(ji,jj,jk) * zmigthick
                 zgramigdon(ji,jj) = zgramigdon(ji,jj) + xfracmig * zgradon(ji,jj,jk) * zmigthick
+                zgramigbsi(ji,jj) = zgramigbsi(ji,jj) + xfracmig * zgrabsi(ji,jj,jk) * zmigthick
 
                 zgrarem(ji,jj,jk)  = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
                 zgrarep(ji,jj,jk)  = zgrarep(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
@@ -474,6 +482,7 @@ CONTAINS
                 zgradoc(ji,jj,jk)  = zgradoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
                 zgradop(ji,jj,jk)  = zgradop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
                 zgradon(ji,jj,jk)  = zgradon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
+                zgrabsi(ji,jj,jk)  = zgrabsi(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime )
              ENDIF
           END_3D
 
@@ -495,6 +504,7 @@ CONTAINS
                  zgradoc(ji,jj,jkt) = zgradoc(ji,jj,jkt) + zgramigdoc(ji,jj) * zdep
                  zgradop(ji,jj,jkt) = zgradop(ji,jj,jkt) + zgramigdop(ji,jj) * zdep 
                  zgradon(ji,jj,jkt) = zgradon(ji,jj,jkt) + zgramigdon(ji,jj) * zdep 
+                 zgrabsi(ji,jj,jkt) = zgrabsi(ji,jj,jkt) + zgramigbsi(ji,jj) * zdep
               ENDIF
           END_2D
                    !
@@ -502,7 +512,7 @@ CONTAINS
           ! ------------------------------
           DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof )
           DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon )
-          DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop )
+          DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop, zgramigbsi )
          ! End of the ln_dvm_meso part
       ENDIF
 
@@ -522,7 +532,7 @@ CONTAINS
          tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop(ji,jj,jk)
          tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem(ji,jj,jk)
          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref(ji,jj,jk)
-         zfezoo2(ji,jj,jk)   = zgraref(ji,jj,jk)
+         IF( l_dia_fezoo2 )  zfezoo2(ji,jj,jk)   = zgraref(ji,jj,jk)
          tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem(ji,jj,jk)
          tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren(ji,jj,jk)                      
          tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zgrapoc(ji,jj,jk)
@@ -530,6 +540,7 @@ CONTAINS
          tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zgrapon(ji,jj,jk)
          tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zgrapop(ji,jj,jk)
          tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zgrapof(ji,jj,jk)
+         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrabsi(ji,jj,jk)
       END_3D
       !
       ! Write the output
@@ -600,7 +611,7 @@ CONTAINS
       !!----------------------------------------------------------------------
       INTEGER :: ios    ! Local integer output status for namelist read
       !!
-      NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, &
+      NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, lmzrat2, mzrat2, xpref2c, xpref2n, xpref2z, &
          &                xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, &
          &                xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, &
          &                unass2n, unass2p, srespir2, xsigma2, xsigma2del, grazflux, ln_dvm_meso, xfracmig
@@ -630,6 +641,7 @@ CONTAINS
          WRITE(numout,*) '    mesozoo feeding threshold for mesozoo          xthresh2mes = ', xthresh2mes
          WRITE(numout,*) '    feeding threshold for mesozooplankton          xthresh2    = ', xthresh2
          WRITE(numout,*) '    exsudation rate of mesozooplankton             resrat2     = ', resrat2
+         WRITE(numout,*) '    linear mesozooplankton mortality rate          lmzrat2     = ', lmzrat2
          WRITE(numout,*) '    mesozooplankton mortality rate                 mzrat2      = ', mzrat2
          WRITE(numout,*) '    maximal mesozoo grazing rate                   grazrat2    = ', grazrat2
          WRITE(numout,*) '    mesozoo flux feeding rate                      grazflux    = ', grazflux
diff --git a/src/TOP/PISCES/P4Z/p5zmicro.F90 b/src/TOP/PISCES/P4Z/p5zmicro.F90
index d70b3ff4..ae1cd5c7 100644
--- a/src/TOP/PISCES/P4Z/p5zmicro.F90
+++ b/src/TOP/PISCES/P4Z/p5zmicro.F90
@@ -14,8 +14,6 @@ MODULE p5zmicro
    USE oce_trc         !  shared variables between ocean and passive tracers
    USE trc             !  passive tracers common variables 
    USE sms_pisces      !  PISCES Source Minus Sink variables
-   USE p4zlim          !  PISCES nutrient limitation term of PISCES std
-   USE p5zlim          !  Phytoplankton limitation terms
    USE iom             !  I/O manager
    USE prtctl          !  print control for debugging
 
@@ -39,6 +37,7 @@ MODULE p5zmicro
    REAL(wp), PUBLIC ::  xthreshpoc  !: poc threshold for microzooplankton 
    REAL(wp), PUBLIC ::  xthresh     !: feeding threshold for microzooplankton 
    REAL(wp), PUBLIC ::  resrat      !: exsudation rate of microzooplankton
+   REAL(wp), PUBLIC ::  lmzrat      !: linear microzooplankton mortality rate 
    REAL(wp), PUBLIC ::  mzrat       !: microzooplankton mortality rate 
    REAL(wp), PUBLIC ::  grazrat     !: maximal microzoo grazing rate
    REAL(wp), PUBLIC ::  xkgraz      !: Half-saturation constant of assimilation
@@ -86,7 +85,7 @@ CONTAINS
       REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft
       REAL(wp) :: zexcess, zgraren, zgrarep, zgrarem
       REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz
-      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn, zgrasratp
+      REAL(wp) :: zrespz, zltortz, ztortz, zgrasratf, zgrasratn, zgrasratp
       REAL(wp) :: zgraznc, zgraznn, zgraznp, zgrazpoc, zgrazpon, zgrazpop, zgrazpof
       REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz
       REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess
@@ -127,18 +126,21 @@ CONTAINS
          zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz
          ! Proportion of nano and diatoms that are within the size range
          ! accessible to microzooplankton. 
-         zproport  = min(sized(ji,jj,jk),1.8)**(-0.48)*min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 ))
-         zproport2 = sizen(ji,jj,jk)**(-0.48)
-         zproport2 = 1.0
+         zproport  = sized(ji,jj,jk)**(-0.48) * (1.0 - (sized(ji,jj,jk)**1.6 - 1.0) / 14.0)
+         zproport2 = sizen(ji,jj,jk)**(-0.48) * (1.0 - (sizen(ji,jj,jk)**3.0 - 1.0) / 100.0)
          !  linear mortality of mesozooplankton
          !  A michaelis menten modulation term is used to avoid extinction of 
          !  microzooplankton at very low food concentrations. Mortality is 
          !  enhanced in low O2 waters
          !  -----------------------------------------------------------------
 
-         !   Michaelis-Menten mortality rates of microzooplankton
+         !   Michaelis-Menten respiration rates of microzooplankton
          !   -----------------------------------------------------
-         zrespz = resrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
+         zrespz = resrat * zfact * tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )
+
+         !   Michaelis-Menten linear mortality rate of microzooplankton
+         !   ----------------------------------------------------------
+         zltortz = lmzrat * zfact * ( tr(ji,jj,jk,jpzoo,Kbb) / ( xkmort + tr(ji,jj,jk,jpzoo,Kbb) )  &
          &        + 3. * nitrfac(ji,jj,jk) )
 
          !  Zooplankton quadratic mortality. A square function has been selected with
@@ -146,6 +148,7 @@ CONTAINS
          !  to stabilise the model
          !  -------------------------------------------------------------------------
          ztortz = mzrat * 1.e6 * zfact * tr(ji,jj,jk,jpzoo,Kbb) * (1. - nitrfac(ji,jj,jk))
+         zmortz = ztortz + zltortz
 
          !   Computation of the abundance of the preys
          !   A threshold can be specified in the namelist
@@ -183,15 +186,15 @@ CONTAINS
          ! have low abundance, .i.e. zooplankton become less specific 
          ! to avoid starvation.
          ! ----------------------------------------------------------
-         zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3)
+         zsigma = 1.0 - zdenom**3/(0.05**3+zdenom**3)
          zsigma = xsigma + xsigmadel * zsigma
          zdiffpn = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 )
          zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
          zdiffdp = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2)
-         ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi ) / ( 1.0 + zdiffdn + zdiffpn )
-         ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi ) / ( 1.0 + zdiffpn + zdiffdp )
+         ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi )
+         ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi )
          ztmp3 = xprefc * zcompapoc**2
-         ztmp4 = xprefd * zcompadi * ( zdiffdp * zcompapi + zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn + zdiffdp )
+         ztmp4 = xprefd * zcompadi * ( zdiffdp * zcompapi + zdiffdn * zcompaph + zcompadi )
          ztmp5 = xprefz * zcompaz**2
          ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn
          ztmp1 = ztmp1 / ztmptot
@@ -264,7 +267,7 @@ CONTAINS
          ! Excess carbon in the food is used preferentially
          ! when activated by zmetexcess
          ! ------------------------------------------------
-         zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess
+         zexcess  = zgraztotc * zepsherq * zepsherf * (1.0 - zepshert) * zmetexcess
          zbasresb = MAX(0., zrespz - zexcess)
          zbasresi = zexcess + MIN(0., zrespz - zexcess)  
          zrespirc = srespir * zepsherv * zgraztotc + zbasresb
@@ -290,12 +293,12 @@ CONTAINS
          ! part of DOM is in fact labile and is then released
          ! as dissolved inorganic compounds (ssigma)
          ! --------------------------------------------------
-         zgradoc =  zgradoct * ssigma
-         zgradon =  zgradont * ssigma
-         zgradop =  zgradopt * ssigma
-         zgrarem = (1.0 - ssigma) * zgradoct
-         zgraren = (1.0 - ssigma) * zgradont
-         zgrarep = (1.0 - ssigma) * zgradopt
+         zgradoc =  (1.0 - ssigma) * zgradoct
+         zgradon =  (1.0 - ssigma) * zgradont
+         zgradop =  (1.0 - ssigma) * zgradopt
+         zgrarem = ssigma * zgradoct
+         zgraren = ssigma * zgradont
+         zgrarep = ssigma * zgradopt
          zgraref = zgrareft
 
          ! Defecation as a result of non assimilated products
@@ -326,7 +329,7 @@ CONTAINS
          tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop
          tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem 
          tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref
-         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz
+         tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zepsherv * zgraztotc - zrespirc - zmortz - zgrazz
          tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc
          tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) - zgraznn
          tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) - zgraznp
@@ -344,12 +347,12 @@ CONTAINS
          tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf
          tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) - zgrazpf
          tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf
-         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortz + zgrapoc - zgrazpoc 
-         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ztortz + zgrapoc
+         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + zmortz + zgrapoc - zgrazpoc 
+         prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz + zgrapoc
          conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc
-         tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * ztortz + zgrapon - zgrazpon
-         tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * ztortz + zgrapop - zgrazpop
-         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + feratz * ztortz  + zgrapof - zgrazpof
+         tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + no3rat3 * zmortz + zgrapon - zgrazpon
+         tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + po4rat3 * zmortz + zgrapop - zgrazpop
+         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + feratz * zmortz  + zgrapof - zgrazpof
          !
          ! calcite production
          zprcaca = xfracal(ji,jj,jk) * zgraznc
@@ -419,7 +422,7 @@ CONTAINS
       !!----------------------------------------------------------------------
       INTEGER ::   ios   ! Local integer
       !!
-      NAMELIST/namp5zzoo/ part, grazrat, bmetexc, resrat, mzrat, xprefc, xprefn, &
+      NAMELIST/namp5zzoo/ part, grazrat, bmetexc, resrat, lmzrat, mzrat, xprefc, xprefn, &
          &                xprefp, xprefd, xprefz, xthreshdia, xthreshphy, &
          &                xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, &
          &                epsher, epshermin, ssigma, srespir, unassc, unassn, unassp,   &
@@ -450,6 +453,7 @@ CONTAINS
          WRITE(numout,*) '    microzoo feeding threshold for microzoo         xthreshzoo  =', xthreshzoo
          WRITE(numout,*) '    feeding threshold for microzooplankton          xthresh     =', xthresh
          WRITE(numout,*) '    exsudation rate of microzooplankton             resrat      =', resrat
+         WRITE(numout,*) '    linear microzooplankton mortality rate          lmzrat      =', lmzrat
          WRITE(numout,*) '    microzooplankton mortality rate                 mzrat       =', mzrat
          WRITE(numout,*) '    maximal microzoo grazing rate                   grazrat     =', grazrat
          WRITE(numout,*) '    C egested fraction of fodd by microzoo          unassc      =', unassc
diff --git a/src/TOP/PISCES/P4Z/p5zmort.F90 b/src/TOP/PISCES/P4Z/p5zmort.F90
index 4fb33dac..90682d2c 100644
--- a/src/TOP/PISCES/P4Z/p5zmort.F90
+++ b/src/TOP/PISCES/P4Z/p5zmort.F90
@@ -13,6 +13,7 @@ MODULE p5zmort
    USE oce_trc         !  shared variables between ocean and passive tracers
    USE trc             !  passive tracers common variables 
    USE sms_pisces      !  PISCES Source Minus Sink variables
+   USE p2zlim
    USE p4zlim          !  Phytoplankton limitation terms (p4z)
    USE p5zlim          !  Phytoplankton limitation terms (p5z)
    USE prtctl          !  print control for debugging
@@ -79,7 +80,7 @@ CONTAINS
       !
       IF( ln_timing )   CALL timing_start('p5z_mort_nano')
       !
-      prodcal(:,:,:) = 0.  !: calcite production variable set to zero
+      prodcal(:,:,:) = 0._wp   ! calcite production variable set to zero
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
          zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - 1e-9 ), 0.e0 )
 
@@ -207,7 +208,7 @@ CONTAINS
       INTEGER, INTENT(in) ::   Kbb, Krhs  ! time level indices
       INTEGER  ::  ji, jj, jk
       REAL(wp) ::  zfactfe,zfactsi,zfactch, zfactn, zfactp, zcompadi
-      REAL(wp) ::  zrespp2, ztortp2, zmortp2
+      REAL(wp) ::  zrespp, ztortp, zmortp
       REAL(wp) ::  zlim2, zlim1
       CHARACTER (len=25) :: charout
       !!---------------------------------------------------------------------
@@ -227,14 +228,14 @@ CONTAINS
          !  -------------------------------
          zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk)
          zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 
-         zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb)
+         zrespp  = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * tr(ji,jj,jk,jpdia,Kbb)
 
          ! Phytoplankton linear mortality
          ! A michaelis-menten like term is introduced to avoid 
          ! extinction of diatoms in highly limited areas
          !  ---------------------------------------------------
-         ztortp2 = mpratd * xstep  * zcompadi * tr(ji,jj,jk,jpdia,Kbb) /  ( xkmort + tr(ji,jj,jk,jpdia,Kbb) )
-         zmortp2 = zrespp2 + ztortp2
+         ztortp  = mpratd * xstep  * zcompadi * tr(ji,jj,jk,jpdia,Kbb) /  ( xkmort + tr(ji,jj,jk,jpdia,Kbb) )
+         zmortp  = zrespp + ztortp
 
          !   Update the arrays tr(:,:,:,:,Krhs) which contains the biological sources and sinks
          !   ---------------------------------------------------------------------
@@ -243,23 +244,23 @@ CONTAINS
          zfactch = tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
          zfactfe = tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
          zfactsi = tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
-         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zmortp2 
-         tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zmortp2 * zfactn
-         tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zmortp2 * zfactp
-         tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zmortp2 * zfactch
-         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zmortp2 * zfactfe
-         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp2 * zfactsi
-         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp2 * zfactsi
-         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp2 
-         tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zrespp2 * zfactn
-         tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zrespp2 * zfactp
-         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zrespp2 * zfactfe
-         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortp2
-         tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + ztortp2 * zfactn
-         tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + ztortp2 * zfactp
-         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ztortp2 * zfactfe
-         prodpoc(ji,jj,jk)   = prodpoc(ji,jj,jk) + ztortp2
-         prodgoc(ji,jj,jk)   = prodgoc(ji,jj,jk) + zrespp2
+         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zmortp 
+         tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zmortp * zfactn
+         tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zmortp * zfactp
+         tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zmortp * zfactch
+         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zmortp * zfactfe
+         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zmortp * zfactsi
+         tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zmortp * zfactsi
+         tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) + zrespp 
+         tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) + zrespp * zfactn
+         tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) + zrespp * zfactp
+         tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) + zrespp * zfactfe
+         tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) + ztortp
+         tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) + ztortp * zfactn
+         tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) + ztortp * zfactp
+         tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) + ztortp * zfactfe
+         prodpoc(ji,jj,jk)   = prodpoc(ji,jj,jk) + ztortp
+         prodgoc(ji,jj,jk)   = prodgoc(ji,jj,jk) + zrespp
 
       END_3D
       !
diff --git a/src/TOP/PISCES/P4Z/p5zprod.F90 b/src/TOP/PISCES/P4Z/p5zprod.F90
index 0888dfc0..ddefe58a 100644
--- a/src/TOP/PISCES/P4Z/p5zprod.F90
+++ b/src/TOP/PISCES/P4Z/p5zprod.F90
@@ -16,6 +16,7 @@ MODULE p5zprod
    USE oce_trc         !  shared variables between ocean and passive tracers
    USE trc             !  passive tracers common variables 
    USE sms_pisces      !  PISCES Source Minus Sink variables
+   USE p2zlim
    USE p4zlim
    USE p5zlim          !  Co-limitations of differents nutrients
    USE prtctl          !  print control for debugging
@@ -31,14 +32,10 @@ MODULE p5zprod
    REAL(wp), PUBLIC ::  pislopen        !: P-I slope of nanophytoplankton
    REAL(wp), PUBLIC ::  pislopep        !: P-I slope of picophytoplankton
    REAL(wp), PUBLIC ::  pisloped        !: P-I slope of diatoms
-   REAL(wp), PUBLIC ::  xadap           !: Adaptation factor to low light
    REAL(wp), PUBLIC ::  excretn         !: Excretion ratio of nanophyto
    REAL(wp), PUBLIC ::  excretp         !: Excretion ratio of picophyto
    REAL(wp), PUBLIC ::  excretd         !: Excretion ratio of diatoms
    REAL(wp), PUBLIC ::  bresp           !: Basal respiration rate
-   REAL(wp), PUBLIC ::  thetanpm        !: Maximum Chl/N ratio of picophyto
-   REAL(wp), PUBLIC ::  thetannm        !: Maximum Chl/N ratio of nanophyto
-   REAL(wp), PUBLIC ::  thetandm        !: Maximum Chl/N ratio of diatoms
    REAL(wp), PUBLIC ::  chlcmin         !: Minimum Chl/C ratio of phytoplankton
    REAL(wp), PUBLIC ::  grosip          !: Mean Si/C ratio of diatoms
 
@@ -50,7 +47,7 @@ MODULE p5zprod
    REAL(wp) :: xq10_p      !: q10 coef for pico =  1. + xpsino3 * qnpmax
    REAL(wp) :: xq10_d      !: q10 coef for diat =  1. + xpsino3 * qndmax
 
-   LOGICAL  :: l_dia_ppphy, l_dia_ppnew, l_dia_ppbfe, l_dia_ppbsi
+   LOGICAL  :: l_dia_ppphy, l_dia_gpphy, l_dia_ppnew, l_dia_ppbfe, l_dia_ppbsi
    LOGICAL  :: l_dia_mu, l_dia_light, l_dia_lprod
 
    !! * Substitutions
@@ -77,18 +74,18 @@ CONTAINS
       INTEGER, INTENT(in) :: Kbb, Kmm, Krhs      ! time level indices
       !
       INTEGER  ::   ji, jj, jk
-      REAL(wp) ::   zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2
-      REAL(wp) ::   zration, zratiop, zratiof, zmax, ztn, zadap
+      REAL(wp) ::   zsilfac, znanotot, zpicotot, zdiattot
+      REAL(wp) ::   zration, zratiop, zratiof, zmax
       REAL(wp) ::   zprofmax, zratio
       REAL(wp) ::   zpronewn, zpronewp, zpronewd
       REAL(wp) ::   zproregn, zproregp, zproregd
       REAL(wp) ::   zpropo4n, zpropo4p, zpropo4d
       REAL(wp) ::   zprodopn, zprodopp, zprodopd
-      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot
-      REAL(wp) ::   zproddoc, zproddon, zproddop, zprodsil, zprodfer, zprodlig, zresptot     
+      REAL(wp) ::   zlim, zsiborn, zprod, zprod1, zprontot, zproptot, zprodtot
+      REAL(wp) ::   zproddoc, zproddon, zproddop, zprodsil, zprodfer, zprodlig
       REAL(wp) ::   zprnutmax, zprochln, zprochld, zprochlp
       REAL(wp) ::   zpislopen, zpislopep, zpisloped
-      REAL(wp) ::   zval, zpptot, zpnewtot, zpregtot
+      REAL(wp) ::   zval, zpo4tot, zpptot, zpnewtot, zpregtot
       REAL(wp) ::   zmxl_chl, zmxl_fac
       REAL(wp) ::   zqfpmax, zqfnmax, zqfdmax
       REAL(wp) ::   zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac, zsilim
@@ -100,7 +97,6 @@ CONTAINS
       REAL(wp), DIMENSION(A2D(0),jpk) :: zprofed, zprofep, zprofen
       REAL(wp), DIMENSION(A2D(0),jpk) :: zpronmaxn, zpronmaxp,zpronmaxd
       REAL(wp), DIMENSION(A2D(0),jpk) :: zpropmaxn, zpropmaxp,zpropmaxd
-!      REAL(wp), DIMENSION(A2D(0),jpk) :: zrespn, zrespp, zrespd
       REAL(wp), DIMENSION(A2D(0),jpk) :: zprmaxn, zprmaxd, zprmaxp, zmxl
       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d
       !!---------------------------------------------------------------------
@@ -109,6 +105,7 @@ CONTAINS
       !
       IF( kt == nittrc000 ) THEN
          l_dia_ppphy = iom_use( "PPPHYN" ) .OR. iom_use( "PPPHYD" ) .OR. iom_use( "PPPHYP" ) .OR. iom_use( "TPP"  )
+         l_dia_gpphy = iom_use( "GPPHYN" ) .OR. iom_use( "GPPHYD" ) .OR. iom_use( "GPPHYP" )
          l_dia_ppnew = iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) .OR. iom_use( "PPNEWP" ) .OR. iom_use( "TPNEW")
          l_dia_ppbfe = iom_use( "PFeN"   ) .OR. iom_use( "PFeD"   ) .OR. iom_use( "PFeP"   ) .OR. iom_use( "TPBFE")
          l_dia_ppbsi = iom_use( "PBSi"   )
@@ -125,14 +122,12 @@ CONTAINS
       zpropmaxn(:,:,:) = 0._wp ; zpropmaxp(:,:,:) = 0._wp ; zpropmaxd(:,:,:) = 0._wp
       zmxl     (:,:,:) = 0._wp ; zysopt   (:,:,:) = 0._wp 
       
-!      zrespn  (:,:,:) = 0._wp ; zrespp  (:,:,:) = 0._wp ; zrespd  (:,:,:) = 0._wp 
-
       ! Computation of the optimal production rates and nutrient uptake
       ! rates. Based on a Q10 description of the thermal dependency.
-       zprnut (:,:,:) =  0.8_wp          * r1_rday * tgfunc(:,:,:)
-       zprmaxn(:,:,:)  = 0.8_wp * xq10_n * r1_rday * tgfunc(:,:,:)
-       zprmaxd(:,:,:)  = 0.8_wp * xq10_d * r1_rday * tgfunc(:,:,:)
-       zprmaxp(:,:,:)  = 0.6_wp * xq10_p * r1_rday * tgfunc(:,:,:)
+       zprnut (:,:,:) =  0.65_wp          * r1_rday * tgfunc(:,:,:)
+       zprmaxn(:,:,:)  = 0.65_wp * xq10_n * r1_rday * tgfunc(:,:,:)
+       zprmaxd(:,:,:)  = 0.65_wp * xq10_d * r1_rday * tgfunc(:,:,:)
+       zprmaxp(:,:,:)  = 0.50_wp * xq10_p * r1_rday * tgfunc(:,:,:)
 
       ! Impact of the day duration and light intermittency on phytoplankton growth
       ! Intermittency is supposed to have a similar effect on production as 
@@ -145,8 +140,9 @@ CONTAINS
       IF ( ln_p4z_dcyc ) THEN    ! Diurnal cycle in PISCES
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
             IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+               zval = 24.0
                IF( gdepw(ji,jj,jk+1,Kmm) <= hmld(ji,jj) ) THEN
-                  zval = MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
+                  zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn ))
                ENDIF
                zmxl(ji,jj,jk) = zval 
             ENDIF
@@ -164,30 +160,25 @@ CONTAINS
 
       ENDIF
 
+      ! Computation of the P-I slope for nanos, picos and diatoms
+      ! The formulation proposed by Geider et al. (1997) has been used.
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
          IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
-             zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
+            zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
+            zmxl_chl = zmxl(ji,jj,jk) / 24.
             zprbio(ji,jj,jk) = zprmaxn(ji,jj,jk) * zmxl_fac
             zprdia(ji,jj,jk) = zprmaxd(ji,jj,jk) * zmxl_fac
             zprpic(ji,jj,jk) = zprmaxp(ji,jj,jk) * zmxl_fac
-         ENDIF
-      END_3D
+            zprnut(ji,jj,jk) = zprnut (ji,jj,jk) * zmxl_fac
 
-      ! Computation of the P-I slope for nanos, picos and diatoms
-      ! The formulation proposed by Geider et al. (1997) has been used.
-      DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
             ! Computation of the P-I slope for nanos and diatoms
-            ztn         = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) - 15. )
-            zadap       = xadap * ztn / ( 2.+ ztn )
-            !
             ! Nanophytoplankton
             zpislopeadn(ji,jj,jk) = pislopen * tr(ji,jj,jk,jpnch,Kbb)    &
             &                       /( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn)
 
             ! Picophytoplankton
-            zpislopeadp(ji,jj,jk) = pislopep * ( 1. + zadap * EXP( -0.25 * epico(ji,jj,jk) ) )   &
-            &                       * tr(ji,jj,jk,jppch,Kbb) /( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn)
+            zpislopeadp(ji,jj,jk) = pislopep * tr(ji,jj,jk,jppch,Kbb)    &
+            &                       /( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn)
 
             ! Diatoms
             zpislopeadd(ji,jj,jk) = pisloped * tr(ji,jj,jk,jpdch,Kbb)    &
@@ -200,12 +191,9 @@ CONTAINS
             ! Computation of production function for Carbon
             ! Actual light levels are used here 
             !  ---------------------------------------------
-            zmxl_fac = 1.0 - EXP( -0.26 * zmxl(ji,jj,jk) )
-            zmxl_chl = zmxl(ji,jj,jk) / 24.
-            !
-            zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_fac )  )
-            zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_fac )  )
-            zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_fac )  )
+            zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  )
+            zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) )  )
+            zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  )
 
             !  Computation of production function for Chlorophyll
             !  Mean light level in the mixed layer (when appropriate)
@@ -216,9 +204,9 @@ CONTAINS
             zpisloped = zpisloped * zmxl_fac / ( zmxl_chl + rtrn )
             zpislopep = zpislopep * zmxl_fac / ( zmxl_chl + rtrn )
             !
-            zprchln(ji,jj,jk) = zprmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) )  )
-            zprchlp(ji,jj,jk) = zprmaxp(ji,jj,jk) * ( 1.- EXP( -zpislopep * epicom(ji,jj,jk) )  )
-            zprchld(ji,jj,jk) = zprmaxd(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) )  )
+            zprchln(ji,jj,jk) = ( 1.- EXP( -zpislopen * enanom(ji,jj,jk) )  )
+            zprchlp(ji,jj,jk) = ( 1.- EXP( -zpislopep * epicom(ji,jj,jk) )  )
+            zprchld(ji,jj,jk) = ( 1.- EXP( -zpisloped * ediatm(ji,jj,jk) )  )
          ENDIF
       END_3D
 
@@ -229,40 +217,43 @@ CONTAINS
             ! ------------------------
             ! Si/C increases with iron stress and silicate availability (zsilfac)
             ! Si/C is arbitrariliy increased for very high Si concentrations
-            ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2)
+            ! to mimic the very high ratios observed in the Southern Ocean (zsilfac)
             ! A parameterization derived from Flynn (2003) is used for the control
             ! when Si is not limiting which is similar to the parameterisation
             ! proposed by Gurney and Davidson (1999).
             ! -----------------------------------------------------------------------
             zlim  = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi1 )
-            zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn )
+            zsilim = MIN(1.0, xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprnut(ji,jj,jk) + rtrn ) )
             zsiborn = tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb) * tr(ji,jj,jk,jpsil,Kbb)
             IF (gphit(ji,jj) < -30 ) THEN
-              zsilfac2 = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 )
+              zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )
             ELSE
-              zsilfac2 = 1.
+              zsilfac = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 )
             ENDIF
-            zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn )
+            zratiosi = 1.0 - tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) * zsilfac * grosip * 3.0 + rtrn )
             zratiosi = MAX(0., MIN(1.0, zratiosi) )
             zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 )
             IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN
-               zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi
+               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi
             ELSE
-               zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi
+               zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi
             ENDIF
          ENDIF
       END_3D
 
-      !  Sea-ice effect on production
+      ! Sea-ice effect on production
       ! No production is assumed below sea ice
-      ! -------------------------------------- 
+      ! --------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         zprbio(ji,jj,jk)  = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
-         zprpic(ji,jj,jk)  = zprpic(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
-         zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
-         zprnut(ji,jj,jk)  = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) )
+         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+            zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * (1.0 - fr_i(ji,jj) )
+            zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * (1.0 - fr_i(ji,jj) )
+            zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * (1.0 - fr_i(ji,jj) )
+            zprnut(ji,jj,jk) = zprnut(ji,jj,jk) * (1.0 - fr_i(ji,jj) )
+         ENDIF
       END_3D
 
+
       ! Computation of the various production and uptake terms of nanophytoplankton 
       ! Interactions between N and P are modeled according to the Chain Model 
       ! of Pahlow et al. (2009). Iron uptake is modeled following traditional
@@ -281,7 +272,7 @@ CONTAINS
             ! size at time step t+1 and is thus updated at the end of the 
             ! current time step
             ! --------------------------------------------------------------------
-            zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn )
+            zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk)
             zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
             sizena(ji,jj,jk) = MIN(xsizern, MAX( sizena(ji,jj,jk), zsizetmp ) )
             ! Maximum potential uptake rate
@@ -294,11 +285,11 @@ CONTAINS
             zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
             zpronmaxn(ji,jj,jk) = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) )   &
             &          / ( xqpnmax(ji,jj,jk) - xqpnmin(ji,jj,jk) + rtrn ), xlimnfe(ji,jj,jk) ) )
-            zpronmaxn(ji,jj,jk) = zpronmaxn(ji,jj,jk) * xqnnmin(ji,jj,jk) / qnnmin
+
             ! Uptake of phosphorus and DOP
             zratio = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) )
             zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
-            zpropmaxn(ji,jj,jk) = zprnutmax * zmax * xlimnfe(ji,jj,jk)
+            zpropmaxn(ji,jj,jk) = 2.0 * zprnutmax * zmax * xlimnfe(ji,jj,jk)
             ! Uptake of iron
             zqfnmax = xqfuncfecn(ji,jj,jk) + ( qfnmax - xqfuncfecn(ji,jj,jk) ) * xlimnpn(ji,jj,jk)
             zratio = 1.0 - MIN( 1., zratiof / zqfnmax )
@@ -328,7 +319,7 @@ CONTAINS
             ! size at time step t+1 and is thus updated at the end of the 
             ! current time step
             ! --------------------------------------------------------------------
-            zlimfac = zprchlp(ji,jj,jk)  * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn )
+            zlimfac = zprchlp(ji,jj,jk)  * xlimpics(ji,jj,jk)
             zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
             sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) )
             ! Maximum potential uptake rate of nutrients
@@ -341,11 +332,11 @@ CONTAINS
             zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) )
             zpronmaxp(ji,jj,jk) = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) )   &
             &          / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) )
-            zpronmaxp(ji,jj,jk) = zpronmaxp(ji,jj,jk) * xqnpmin(ji,jj,jk) / qnnmin
+
             ! Uptake of phosphorus
             zratio = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) )
             zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
-            zpropmaxp(ji,jj,jk) = zprnutmax * zmax * xlimpfe(ji,jj,jk) 
+            zpropmaxp(ji,jj,jk) = 2.0 * zprnutmax * zmax * xlimpfe(ji,jj,jk) 
             ! Uptake of iron
             zqfpmax = xqfuncfecp(ji,jj,jk) + ( qfpmax - xqfuncfecp(ji,jj,jk) ) * xlimnpp(ji,jj,jk)
             zratio = 1.0 - MIN( 1., zratiof / zqfpmax )
@@ -375,7 +366,7 @@ CONTAINS
             ! size at time step t+1 and is thus updated at the end of the 
             ! current time step. 
             ! --------------------------------------------------------------------
-            zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn )
+            zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk)
             zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3)
             sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) )
             ! Maximum potential uptake rate of nutrients
@@ -388,11 +379,11 @@ CONTAINS
             zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) )
             zpronmaxd(ji,jj,jk) = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) )   &
             &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) )
-            zpronmaxd(ji,jj,jk) = zpronmaxd(ji,jj,jk) * xqndmin(ji,jj,jk) / qnnmin
+
             ! Uptake of phosphorus
             zratio = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) )
             zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) )
-            zpropmaxd(ji,jj,jk) = zprnutmax * zmax * xlimdfe(ji,jj,jk)
+            zpropmaxd(ji,jj,jk) = 2.0 * zprnutmax * zmax * xlimdfe(ji,jj,jk)
             ! Uptake of iron
             zqfdmax = xqfuncfecd(ji,jj,jk) + ( qfdmax - xqfuncfecd(ji,jj,jk) ) * xlimnpd(ji,jj,jk)
             zratio = 1.0 - MIN( 1., zratiof / zqfdmax )
@@ -404,7 +395,7 @@ CONTAINS
          ENDIF
       END_3D
 
-      ! Production of Chlorophyll. The formulation proposed by Geider et al.
+      ! Production of Chlorophyll. The formulation proposed by Pahlow and Oschlies 
       ! is adopted here.
       ! --------------------------------------------------------------------
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
@@ -414,129 +405,139 @@ CONTAINS
             zpronewn = zpronmaxn(ji,jj,jk) * xnanono3(ji,jj,jk)
             zproregn = zpronmaxn(ji,jj,jk) * xnanonh4(ji,jj,jk)
             znanotot = enanom(ji,jj,jk) / ( zmxl_chl + rtrn )
-            zprod = rday * (zpronewn + zproregn) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk)
-            zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn )
-            zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) )
+            zprod1 = ( zprorcan(ji,jj,jk) * texcretn - xpsinh4 * zproregn   &
+            &        - xpsino3 * zpronewn ) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn )
+            zprod = zprod1 / ratchl * ( pislopen * znanotot / ( zprmaxn(ji,jj,jk) * rday )   &
+            &   * ( 1.0 - zprchln(ji,jj,jk) ) * MAX(0.0, (1.0 - ratchl * tr(ji,jj,jk,jpnch,Kbb)    &
+            &   / ( 12. * tr(ji,jj,jk,jpphy,Kbb) + rtrn ) / (xlimphy(ji,jj,jk) + rtrn ) ) )     &
+            &   - ratchl * zprchln(ji,jj,jk) ) + zprod1
+            zprochln = MAX(zprod * tr(ji,jj,jk,jpnch,Kbb) , chlcmin * 12 * zprorcan(ji,jj,jk) )
             !  production terms for picophyto. ( chlorophyll )
-            zpronewp = zpronmaxp(ji,jj,jk) * xpicono3(ji,jj,jk) 
+            zpronewp = zpronmaxp(ji,jj,jk) * xpicono3(ji,jj,jk)
             zproregp = zpronmaxp(ji,jj,jk) * xpiconh4(ji,jj,jk)
             zpicotot = epicom(ji,jj,jk) / ( zmxl_chl + rtrn )
-            zprod = rday * (zpronewp + zproregp) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk)
-            zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn )
-            zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) )
+            zprod1 = ( zprorcap(ji,jj,jk) * texcretp - xpsinh4 * zproregp   &
+            &        - xpsino3 * zpronewp ) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn )
+            zprod = zprod1 / ratchl * ( pislopep * zpicotot / ( zprmaxp(ji,jj,jk) * rday )   &
+            &   * ( 1.0 - zprchlp(ji,jj,jk) ) * MAX(0.0, (1.0 - ratchl * tr(ji,jj,jk,jppch,Kbb)    &
+            &   / ( 12. * tr(ji,jj,jk,jppic,Kbb) + rtrn ) / (xlimpic(ji,jj,jk) + rtrn ) ) )     &
+            &   - ratchl * zprchlp(ji,jj,jk) ) + zprod1
+            zprochlp = MAX(zprod * tr(ji,jj,jk,jppch,Kbb) , chlcmin * 12 * zprorcap(ji,jj,jk) )
             !  production terms for diatoms ( chlorophyll )
             zpronewd = zpronmaxd(ji,jj,jk) * xdiatno3(ji,jj,jk)
             zproregd = zpronmaxd(ji,jj,jk) * xdiatnh4(ji,jj,jk)
             zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl + rtrn )
-            zprod = rday * (zpronewd + zproregd) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk)
-            zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn )
-            zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) )
+            zprod1 = ( zprorcad(ji,jj,jk) * texcretd - xpsinh4 * zproregd   &
+            &        - xpsino3 * zpronewd ) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn )
+            zprod = zprod1 / ratchl * ( pisloped * zdiattot / ( zprmaxd(ji,jj,jk) * rday )   &
+            &   * ( 1.0 - zprchld(ji,jj,jk) ) * MAX(0.0, (1.0 - ratchl * tr(ji,jj,jk,jpdch,Kbb)    &
+            &   / ( 12. * tr(ji,jj,jk,jpdia,Kbb) + rtrn ) / (xlimdia(ji,jj,jk) + rtrn ) ) )     &
+            &   - ratchl * zprchld(ji,jj,jk) ) + zprod1
+            zprochld = MAX(zprod * tr(ji,jj,jk,jpdch,Kbb) , chlcmin * 12 * zprorcad(ji,jj,jk) )
             !   Update the arrays TRA which contain the Chla sources and sinks
-            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln * texcretn
-            tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld * texcretd
-            tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) + zprochlp * texcretp
+            tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) + zprochln
+            tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) + zprochld
+            tr(ji,jj,jk,jppch,Krhs) = tr(ji,jj,jk,jppch,Krhs) + zprochlp
          ENDIF
       END_3D
 
       !   Update the arrays TRA which contain the biological sources and sinks
       DO_3D( 0, 0, 0, 0, 1, jpkm1)
-         zpronewn = zpronmaxn(ji,jj,jk) * xnanono3(ji,jj,jk)
-         zpronewp = zpronmaxp(ji,jj,jk) * xpicono3(ji,jj,jk) 
-         zpronewd = zpronmaxd(ji,jj,jk) * xdiatno3(ji,jj,jk)
-         !
-         zproregn = zpronmaxn(ji,jj,jk) * xnanonh4(ji,jj,jk)
-         zproregp = zpronmaxp(ji,jj,jk) * xpiconh4(ji,jj,jk)
-         zproregd = zpronmaxd(ji,jj,jk) * xdiatnh4(ji,jj,jk)
-         !
-         zpropo4n = zpropmaxn(ji,jj,jk) * xnanopo4(ji,jj,jk)
-         zpropo4p = zpropmaxp(ji,jj,jk) * xpicopo4(ji,jj,jk)
-         zpropo4d = zpropmaxd(ji,jj,jk) * xdiatpo4(ji,jj,jk)
-         !
-         zprodopn = zpropmaxn(ji,jj,jk) * xnanodop(ji,jj,jk)
-         zprodopp = zpropmaxp(ji,jj,jk) * xpicodop(ji,jj,jk)
-         zprodopd = zpropmaxd(ji,jj,jk) * xdiatdop(ji,jj,jk)
-         !
-         zpptot   = zpropo4n + zpropo4d + zpropo4p
-         zpnewtot = zpronewn + zpronewd + zpronewp
-         zpregtot = zproregn + zproregd + zproregp
-
-         zprontot = zpronewn + zproregn
-         zproptot = zpronewp + zproregp
-         zprodtot = zpronewd + zproregd
-         !
-         zproddoc = excretd * zprorcad(ji,jj,jk) &
-         &        + excretn * zprorcan(ji,jj,jk) &
-         &        + excretp * zprorcap(ji,jj,jk)
-         !
-         zproddop = excretd * zpropo4d - texcretd * zprodopd &
-         &        + excretn * zpropo4n - texcretn * zprodopn &
-         &        + excretp * zpropo4p - texcretp * zprodopp
-
-         zproddon =  excretd * zprodtot + excretn * zprontot + excretp * zproptot
-
-         zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
-!  CE : zrespn/d/p ????
-!        zresptot = zrespn(ji,jj,jk) + zrespp(ji,jj,jk) + zrespd(ji,jj,jk) 
-         zresptot = 0._wp
-         !
-         tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpptot
-         tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot
-         tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot  
-         !
-         tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs)         &
-           &                     + zprorcan(ji,jj,jk) * texcretn  &
-           &                     - xpsino3 * zpronewn   &
-           &                     - xpsinh4 * zproregn   
-!           &                     - zrespn(ji,jj,jk) 
-
-         tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) + zprontot * texcretn
-         tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + ( zpropo4n + zprodopn ) * texcretn
-         tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn
-
-         !
-         tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs)         &
-            &                     + zprorcap(ji,jj,jk) * texcretp  &
-            &                     - xpsino3 * zpronewp   &
-            &                     - xpsinh4 * zproregp   
-!           &                     - zrespp(ji,jj,jk) 
-
-         tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) + zproptot * texcretp
-         tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + ( zpropo4p + zprodopp ) * texcretp
-         tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) + zprofep(ji,jj,jk) * texcretp
-
-         !
-         tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs)         &
-            &                    + zprorcad(ji,jj,jk) * texcretd   &
-            &                    - xpsino3 * zpronewd    &
-            &                    - xpsinh4 * zproregd    
-!           &                    - zrespd(ji,jj,jk) 
-
-         !
-         zprodsil = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 
-         !
-         tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) + zprodtot * texcretd
-         tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + ( zpropo4d + zprodopd ) * texcretd
-         tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd
-         tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil
-         tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc
-         tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zproddon                                        
-         tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zproddop
+         IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+            zpronewn = zpronmaxn(ji,jj,jk) * xnanono3(ji,jj,jk)
+            zpronewp = zpronmaxp(ji,jj,jk) * xpicono3(ji,jj,jk) 
+            zpronewd = zpronmaxd(ji,jj,jk) * xdiatno3(ji,jj,jk)
+            !
+            zproregn = zpronmaxn(ji,jj,jk) * xnanonh4(ji,jj,jk)
+            zproregp = zpronmaxp(ji,jj,jk) * xpiconh4(ji,jj,jk)
+            zproregd = zpronmaxd(ji,jj,jk) * xdiatnh4(ji,jj,jk)
+            !
+            zpropo4n = zpropmaxn(ji,jj,jk) * xnanopo4(ji,jj,jk)
+            zpropo4p = zpropmaxp(ji,jj,jk) * xpicopo4(ji,jj,jk)
+            zpropo4d = zpropmaxd(ji,jj,jk) * xdiatpo4(ji,jj,jk)
+            !
+            zprodopn = zpropmaxn(ji,jj,jk) * xnanodop(ji,jj,jk)
+            zprodopp = zpropmaxp(ji,jj,jk) * xpicodop(ji,jj,jk)
+            zprodopd = zpropmaxd(ji,jj,jk) * xdiatdop(ji,jj,jk)
+            !
+            zpo4tot  = zpropo4n + zpropo4d + zpropo4p
+            zpnewtot = zpronewn + zpronewd + zpronewp
+            zpregtot = zproregn + zproregd + zproregp
+            !
+            zpptot   = zprorcap(ji,jj,jk) + zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk)
+
+            zprontot = zpronewn + zproregn
+            zproptot = zpronewp + zproregp
+            zprodtot = zpronewd + zproregd
+            !
+            zproddoc = excretd * zprorcad(ji,jj,jk) &
+            &        + excretn * zprorcan(ji,jj,jk) &
+            &        + excretp * zprorcap(ji,jj,jk)
+            !
+            zproddop = excretd * zpropo4d - texcretd * zprodopd &
+            &        + excretn * zpropo4n - texcretn * zprodopn &
+            &        + excretp * zpropo4p - texcretp * zprodopp
+
+            zproddon =  excretd * zprodtot + excretn * zprontot + excretp * zproptot
+
+            zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
+            !
+            tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) - zpo4tot
+            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) - zpnewtot
+            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) - zpregtot  
+            !
+            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs)         &
+              &                     + zprorcan(ji,jj,jk) * texcretn  &
+              &                     - xpsino3 * zpronewn   &
+              &                     - xpsinh4 * zproregn   
+
+            tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) + zprontot * texcretn
+            tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) + ( zpropo4n + zprodopn ) * texcretn
+            tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) + zprofen(ji,jj,jk) * texcretn
+
+            !
+            tr(ji,jj,jk,jppic,Krhs) = tr(ji,jj,jk,jppic,Krhs)         &
+              &                     + zprorcap(ji,jj,jk) * texcretp  &
+              &                     - xpsino3 * zpronewp   &
+              &                     - xpsinh4 * zproregp   
+
+            tr(ji,jj,jk,jpnpi,Krhs) = tr(ji,jj,jk,jpnpi,Krhs) + zproptot * texcretp
+            tr(ji,jj,jk,jpppi,Krhs) = tr(ji,jj,jk,jpppi,Krhs) + ( zpropo4p + zprodopp ) * texcretp
+            tr(ji,jj,jk,jppfe,Krhs) = tr(ji,jj,jk,jppfe,Krhs) + zprofep(ji,jj,jk) * texcretp
+
+            !
+            tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs)         &
+              &                     + zprorcad(ji,jj,jk) * texcretd   &
+              &                     - xpsino3 * zpronewd    &
+              &                     - xpsinh4 * zproregd    
+
+            !
+            zprodsil = zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * tr(ji,jj,jk,jpdia,Kbb) 
+            !
+            tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) + zprodtot * texcretd
+            tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) + ( zpropo4d + zprodopd ) * texcretd
+            tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) + zprofed(ji,jj,jk) * texcretd
+            tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) + zprodsil
+            tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zproddoc
+            tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zproddon                                        
+            tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zproddop
   
-         tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) &
-           &                     + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot - o2ut * zresptot 
+            tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) &
+              &                     + o2ut * zpregtot + ( o2ut + o2nit ) * zpnewtot
 
-         tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer
-         consfe3(ji,jj,jk)       = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   &
-             &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2
-         tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil
+            tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) - zprodfer
+            consfe3(ji,jj,jk)       = zprodfer * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   &
+                &                   * tr(ji,jj,jk,jpfer,Kbb) ) / rfact2
+            tr(ji,jj,jk,jpsil,Krhs) = tr(ji,jj,jk,jpsil,Krhs) - zprodsil
 
-         tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot  &
-            &                     + xpsino3 * zpronewn + xpsinh4 * zproregn   &
-            &                     + xpsino3 * zpronewp + xpsinh4 * zproregp   &
-            &                     + xpsino3 * zpronewd + xpsinh4 * zproregd  
+            tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) - zpptot  &
+               &                     + xpsino3 * zpronewn + xpsinh4 * zproregn   &
+               &                     + xpsino3 * zpronewp + xpsinh4 * zproregp   &
+               &                     + xpsino3 * zpronewd + xpsinh4 * zproregd  
 
-         tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot )
-         !
+            tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * ( zpnewtot - zpregtot )
+            !
+         ENDIF
       END_3D
      
      ! Production and uptake of ligands by phytoplankton. This part is activated 
@@ -546,11 +547,13 @@ CONTAINS
      ! -------------------------------------------------------------------------
      IF( ln_ligand ) THEN
          DO_3D( 0, 0, 0, 0, 1, jpkm1)
-           zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk)
-           zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
-           zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
-           !
-           tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig
+            IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN
+              zproddoc = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) + excretp * zprorcap(ji,jj,jk)
+              zprodfer = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk)
+              zprodlig = plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
+              !
+              tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zproddoc * ldocp - zprodfer * zprodlig
+            ENDIF
         END_3D
      ENDIF
 
@@ -559,7 +562,11 @@ CONTAINS
     IF( l_dia_ppphy .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  THEN
        ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
        DO_3D( 0, 0, 0, 0, 1, jpkm1)
-          zw3d(ji,jj,jk) = ( zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) + zprorcap(ji,jj,jk) ) * cvol(ji,jj,jk)
+          zw3d(ji,jj,jk) = ( zprorcan(ji,jj,jk) + zprorcad(ji,jj,jk) + zprorcap(ji,jj,jk)     &
+              &            - zpronmaxn(ji,jj,jk) * ( xpsino3 * xnanono3(ji,jj,jk) + xpsinh4 * xnanonh4(ji,jj,jk) )   &
+              &            - zpronmaxd(ji,jj,jk) * ( xpsino3 * xdiatno3(ji,jj,jk) + xpsinh4 * xdiatnh4(ji,jj,jk) )   &
+              &            - zpronmaxp(ji,jj,jk) * ( xpsino3 * xpicono3(ji,jj,jk) + xpsinh4 * xpiconh4(ji,jj,jk) ) ) &
+              &            * cvol(ji,jj,jk)
        END_3D
        tpp = glob_sum( 'p5zprod', zw3d )
        DEALLOCATE ( zw3d )
@@ -571,22 +578,46 @@ CONTAINS
           zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
           ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
           ! primary production by nanophyto
-          zw3d(A2D(0),1:jpkm1) = zprorcan(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          zw3d(A2D(0),1:jpkm1) = (zprorcan(A2D(0),1:jpkm1) - xpsinh4 * zpronmaxn(A2D(0),1:jpkm1) * xnanonh4(A2D(0),1:jpkm1)   &
+              &                  - xpsino3 * zpronmaxn(A2D(0),1:jpkm1) * xnanono3(A2D(0),1:jpkm1) )   &
+              &                  * zfact * tmask(A2D(0),1:jpkm1)
           CALL iom_put( "PPPHYN", zw3d )
-          ! primary production by diatomes
-          zw3d(A2D(0),1:jpkm1) = zprorcad(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          ! primary production by diatoms
+          zw3d(A2D(0),1:jpkm1) = (zprorcad(A2D(0),1:jpkm1) - xpsinh4 * zpronmaxd(A2D(0),1:jpkm1) * xdiatnh4(A2D(0),1:jpkm1)   &
+              &                  - xpsino3 * zpronmaxd(A2D(0),1:jpkm1) * xdiatno3(A2D(0),1:jpkm1) )   &
+              &                  * zfact * tmask(A2D(0),1:jpkm1)
           CALL iom_put( "PPPHYD", zw3d )
           ! primary production by pico
-          zw3d(A2D(0),1:jpkm1) = zprorcap(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          zw3d(A2D(0),1:jpkm1) = (zprorcap(A2D(0),1:jpkm1) - xpsinh4 * zpronmaxp(A2D(0),1:jpkm1) * xpiconh4(A2D(0),1:jpkm1)   &
+              &                  - xpsino3 * zpronmaxp(A2D(0),1:jpkm1) * xpicono3(A2D(0),1:jpkm1) )   &
+              &                  * zfact * tmask(A2D(0),1:jpkm1)
           CALL iom_put( "PPPHYP", zw3d )
           ! total primary production
-          zw3d(A2D(0),1:jpkm1) = ( zprorcan(A2D(0),1:jpkm1) + zprorcad(A2D(0),1:jpkm1) + zprorcap(A2D(0),1:jpkm1) ) &
+          zw3d(A2D(0),1:jpkm1) = ( zprorcan(A2D(0),1:jpkm1) + zprorcad(A2D(0),1:jpkm1) + zprorcap(A2D(0),1:jpkm1)                           &
+              &                 - zpronmaxn(A2D(0),1:jpkm1) * ( xpsino3 * xnanono3(A2D(0),1:jpkm1) + xpsinh4 * xnanonh4(A2D(0),1:jpkm1) )   &
+              &                 - zpronmaxd(A2D(0),1:jpkm1) * ( xpsino3 * xdiatno3(A2D(0),1:jpkm1) + xpsinh4 * xdiatnh4(A2D(0),1:jpkm1) )   &
+              &                 - zpronmaxp(A2D(0),1:jpkm1) * ( xpsino3 * xpicono3(A2D(0),1:jpkm1) + xpsinh4 * xpiconh4(A2D(0),1:jpkm1) ) ) & 
               &                 * zfact * tmask(A2D(0),1:jpkm1)
           CALL iom_put( "TPP", zw3d )
           CALL iom_put( "tintpp"  , tpp * zfact )  !  global total integrated primary production molC/s
           DEALLOCATE ( zw3d )
        ENDIF
        !
+       IF( l_dia_gpphy ) THEN
+          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
+          ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
+          ! primary production by nanophyto
+          zw3d(A2D(0),1:jpkm1) = zprorcan(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "GPPHYN", zw3d )
+          ! primary production by diatoms
+          zw3d(A2D(0),1:jpkm1) = zprorcad(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "GPPHYD", zw3d )
+          ! primary production by pico
+          zw3d(A2D(0),1:jpkm1) = zprorcap(A2D(0),1:jpkm1) * zfact * tmask(A2D(0),1:jpkm1)
+          CALL iom_put( "GPPHYP", zw3d )
+          DEALLOCATE ( zw3d )
+       ENDIF
+       !
        IF( l_dia_ppnew ) THEN
           zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s
           ALLOCATE( zw3d(A2D(0),jpk) )  ;  zw3d(A2D(0),jpk) = 0._wp
@@ -690,7 +721,6 @@ CONTAINS
        ENDIF
        !
      ENDIF
-
       IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
          WRITE(charout, FMT="('prod')")
          CALL prt_ctl_info( charout, cdcomp = 'top' )
@@ -716,7 +746,7 @@ CONTAINS
       INTEGER :: ios    ! Local integer output status for namelist read
       !!
       NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd,     &
-         &                 thetannm, thetanpm, thetandm, chlcmin, grosip, bresp, xadap
+         &                 chlcmin, grosip, bresp
       !!----------------------------------------------------------------------
 
       READ  ( numnatp_ref, namp5zprod, IOSTAT = ios, ERR = 901)
@@ -734,15 +764,11 @@ CONTAINS
          WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen
          WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped
          WRITE(numout,*) '    P-I slope  for picophytoplankton          pislopep     =', pislopep
-         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap
          WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn
          WRITE(numout,*) '    excretion ratio of picophytoplankton      excretp      =', excretp
          WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd
          WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp
          WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin
-         WRITE(numout,*) '    Minimum Chl/N in nanophytoplankton        thetannm     =', thetannm
-         WRITE(numout,*) '    Minimum Chl/N in picophytoplankton        thetanpm     =', thetanpm
-         WRITE(numout,*) '    Minimum Chl/N in diatoms                  thetandm     =', thetandm
       ENDIF
       !
       r1_rday   = 1._wp / rday 
diff --git a/src/TOP/PISCES/SED/sedadv.F90 b/src/TOP/PISCES/SED/sedadv.F90
index 53652ed6..51e9c994 100644
--- a/src/TOP/PISCES/SED/sedadv.F90
+++ b/src/TOP/PISCES/SED/sedadv.F90
@@ -150,8 +150,8 @@ CONTAINS
       END DO
       DO jk = 2, jpksed
          pwcp(:,jk,jwnh4) = (pwcp(:,jk,jwnh4) + zsolcp(:,jk,jpsol+1) * por1(jk) / por(jk) ) * radssol(jk,jwnh4)
-         IF (jpoce == 146 .and. slatit(145) > 0.) write(0,*) 'plante advection ',pwcp(145,jk,jwfe2)*1E6,zsolcp(145,jk,jpsol+2)*1E6,    &
-         &         (pwcp(145,jk,jwfe2) + zsolcp(145,jk,jpsol+2) * por1(jk) / por(jk) ) * radssol(jk,jwfe2) * 1E6
+!         IF (jpoce == 146 .and. slatit(145) > 0.) write(0,*) 'plante advection ',pwcp(145,jk,jwfe2)*1E6,zsolcp(145,jk,jpsol+2)*1E6,    &
+!         &         (pwcp(145,jk,jwfe2) + zsolcp(145,jk,jpsol+2) * por1(jk) / por(jk) ) * radssol(jk,jwfe2) * 1E6
          pwcp(:,jk,jwfe2) = (pwcp(:,jk,jwfe2) + zsolcp(:,jk,jpsol+2) * por1(jk) / por(jk) ) * radssol(jk,jwfe2)
       END DO
 
diff --git a/src/TOP/PISCES/sms_pisces.F90 b/src/TOP/PISCES/sms_pisces.F90
index e4862e94..0e1ef4c4 100644
--- a/src/TOP/PISCES/sms_pisces.F90
+++ b/src/TOP/PISCES/sms_pisces.F90
@@ -17,7 +17,7 @@ MODULE sms_pisces
    INTEGER ::   numonp      = -1                !! Logical unit for namelist pisces output
 
    !!* Model used
-   LOGICAL  ::  ln_p2z            !: Flag to use LOBSTER model
+   LOGICAL  ::  ln_p2z            !: Flag to use PISCES  reduced model
    LOGICAL  ::  ln_p4z            !: Flag to use PISCES  model
    LOGICAL  ::  ln_p5z            !: Flag to use PISCES  quota model
    LOGICAL  ::  ln_ligand         !: Flag to enable organic ligands
@@ -106,6 +106,7 @@ MODULE sms_pisces
    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizena     !: size of nanophytoplankton, after
    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizepa     !: size of picophyto, after
    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizeda     !: size of diatomss, after
+   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   thetanano  !: size of diatomss, after
    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfecolagg  !: Refractory diagnostic concentration of ligands
    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xcoagfe    !: Coagulation rate of colloidal Fe/ligands
 
@@ -138,56 +139,69 @@ CONTAINS
       !!        *** ROUTINE sms_pisces_alloc ***
       !!----------------------------------------------------------------------
       USE lib_mpp , ONLY: ctl_stop
-      INTEGER ::   ierr(11)        ! Local variables
+      INTEGER ::   ierr(17)        ! Local variables
       !!----------------------------------------------------------------------
       ierr(:) = 0
       !*  Biological fluxes for light : shared variables for pisces & lobster
-      ALLOCATE( xksi(A2D(0)), strn(A2D(0)),  STAT=ierr(1) )
+      ALLOCATE( strn(A2D(0)),  STAT=ierr(1) )
+
+      !* Optics
+      ALLOCATE(  enano(A2D(0),jpk) , enanom(A2D(0),jpk) ,   &
+         &       emoy(A2D(0),jpk)  , etotm(A2D(0),jpk)  ,      STAT=ierr(2) )
+
+      ! Biological SMS
+      ALLOCATE( orem     (A2D(0),jpk), xdiss   (A2D(0),jpk),  &
+         &      nitrfac  (A2D(0),jpk), nitrfac2(A2D(0),jpk),  &
+         &      prodcal  (A2D(0),jpk), prodpoc (A2D(0),jpk),  &
+         &      conspoc  (A2D(0),jpk), xfracal (A2D(0),jpk),   STAT=ierr(3) )
+
+      !* Carbonate chemistry
+      ALLOCATE( ak13(A2D(0),jpk),                         &
+         &      ak23(A2D(0),jpk), aksp  (A2D(0),jpk) ,    &
+         &      hi  (A2D(0),jpk), excess(A2D(0),jpk) ,    &
+         &      aphscale(A2D(0),jpk),                          STAT=ierr(4) )
+      !
+      !* Temperature dependency of SMS terms
+      ALLOCATE( tgfunc (A2D(0),jpk) , tgfunc2(A2D(0),jpk),     STAT=ierr(5) )
+      !
+      !* Sinking speed
+      ALLOCATE( wsbio3 (A2D(0),jpk) , wsbio4 (A2D(0),jpk),     STAT=ierr(6) )
 
-      IF( ln_p4z .OR. ln_p5z ) THEN
+      !*  Size of phytoplankton cells
+      ALLOCATE( sizen (A2D(0),jpk), sizena(A2D(0),jpk),        STAT=ierr(7) )
+
+      ALLOCATE( blim     (A2D(0),jpk), consfe3 (A2D(0),jpk),  &
+         &      xfecolagg(A2D(0),jpk), xcoagfe (A2D(0),jpk),   STAT=ierr(8) )
+      ! 
+      ALLOCATE( plig(A2D(0),jpk)  ,   biron(A2D(0),jpk)    ,   STAT=ierr(9) )
 
+      IF( ln_p2z )   &
+         &   ALLOCATE( thetanano (A2D(0),jpk),                 STAT=ierr(10) )
+
+      IF( ln_p4z .OR. ln_p5z ) THEN
          !* Optics
-         ALLOCATE(  enano(A2D(0),jpk) , ediat(A2D(0),jpk) ,   &
-           &        enanom(A2D(0),jpk), ediatm(A2D(0),jpk),   &
-           &        emoy(A2D(0),jpk)  , etotm(A2D(0),jpk),   STAT=ierr(2) )
+         ALLOCATE(  ediat(A2D(0),jpk) , ediatm(A2D(0),jpk),    STAT=ierr(11) )
 
          !* Biological SMS
-         ALLOCATE( xksimax(A2D(0))  , biron(A2D(0),jpk)      ,  STAT=ierr(3) )
+         ALLOCATE( xksimax(A2D(0))  ,                          STAT=ierr(12) )
 
          ! Biological SMS
-         ALLOCATE( xfracal  (A2D(0),jpk), orem    (A2D(0),jpk),  &
-            &      nitrfac  (A2D(0),jpk), nitrfac2(A2D(0),jpk),  &
-            &      prodcal  (A2D(0),jpk), xdiss   (A2D(0),jpk),  &
-            &      prodpoc  (A2D(0),jpk), conspoc (A2D(0),jpk),  &
-            &      prodgoc  (A2D(0),jpk), consgoc (A2D(0),jpk),  &
-            &      blim     (A2D(0),jpk), consfe3 (A2D(0),jpk),  &
-            &      xfecolagg(A2D(0),jpk), xcoagfe (A2D(0),jpk), STAT=ierr(4) )
-
-         !* Carbonate chemistry
-         ALLOCATE( ak13(A2D(0),jpk),                          &
-            &      ak23(A2D(0),jpk), aksp  (A2D(0),jpk) ,    &
-            &      hi  (A2D(0),jpk), excess(A2D(0),jpk) ,    &
-            &      aphscale(A2D(0),jpk),                         STAT=ierr(5) )
-         !
-         !* Temperature dependency of SMS terms
-         ALLOCATE( tgfunc (A2D(0),jpk) , tgfunc2(A2D(0),jpk),   STAT=ierr(6) )
+         ALLOCATE( prodgoc(A2D(0),jpk), consgoc(A2D(0),jpk),   STAT=ierr(13) )
          !
-         !* Sinking speed
-         ALLOCATE( wsbio3 (A2D(0),jpk) , wsbio4 (A2D(0),jpk),   STAT=ierr(7) )
+         !* Si 1/2 saturation constant 
+         ALLOCATE( xksi (A2D(0))  ,                            STAT=ierr(14) )
 
          !*  Size of phytoplankton cells
-         ALLOCATE( sizen (A2D(0),jpk), sized (A2D(0),jpk),        &
-           &       sizena(A2D(0),jpk), sizeda(A2D(0),jpk),      STAT=ierr(8) )
+         ALLOCATE( sized (A2D(0),jpk), sizeda(A2D(0),jpk),     STAT=ierr(15) )
          ! 
-         ALLOCATE( plig(A2D(0),jpk)  ,                           STAT=ierr(9) )
       ENDIF
       !
       IF( ln_p5z ) THEN
          ! PISCES-QUOTA specific part      
-         ALLOCATE( epico(A2D(0),jpk)   , epicom(A2D(0),jpk) ,   STAT=ierr(10) ) 
+         ALLOCATE( epico(A2D(0),jpk)   , epicom(A2D(0),jpk),   STAT=ierr(16) ) 
 
          !*  Size of phytoplankton cells
-         ALLOCATE( sizep(A2D(0),jpk), sizepa(A2D(0),jpk),       STAT=ierr(11) )
+         ALLOCATE( sizep(A2D(0),jpk), sizepa(A2D(0),jpk),      STAT=ierr(17) )
       ENDIF
       !
       sms_pisces_alloc = MAXVAL( ierr )
diff --git a/src/TOP/PISCES/trcice_pisces.F90 b/src/TOP/PISCES/trcice_pisces.F90
index 06e458a5..a444dea6 100644
--- a/src/TOP/PISCES/trcice_pisces.F90
+++ b/src/TOP/PISCES/trcice_pisces.F90
@@ -35,9 +35,7 @@ CONTAINS
       !! ** Purpose :   Initialisation of the PISCES biochemical model
       !!----------------------------------------------------------------------
       !
-      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ice_ini   !  PISCES
-      ELSE                           ;   CALL p2z_ice_ini   !  LOBSTER
-      ENDIF
+      CALL p4z_ice_ini   !  PISCES
       !
    END SUBROUTINE trc_ice_ini_pisces
 
@@ -341,14 +339,5 @@ CONTAINS
       !
    END SUBROUTINE p4z_ice_ini
 
-   SUBROUTINE p2z_ice_ini
-      !!----------------------------------------------------------------------
-      !!                   ***  ROUTINE p2z_ice_ini ***
-      !!
-      !! ** Purpose :   Initialisation of the LOBSTER biochemical model
-      !!----------------------------------------------------------------------
-   END SUBROUTINE p2z_ice_ini
-
-
    !!======================================================================
 END MODULE trcice_pisces
diff --git a/src/TOP/PISCES/trcini_pisces.F90 b/src/TOP/PISCES/trcini_pisces.F90
index eaaac7e2..6404915d 100644
--- a/src/TOP/PISCES/trcini_pisces.F90
+++ b/src/TOP/PISCES/trcini_pisces.F90
@@ -44,9 +44,7 @@ CONTAINS
       ! Read the PISCES namelist
       CALL trc_nam_pisces
       !
-      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ini( Kmm )   !  PISCES
-      ELSE                           ;   CALL p2z_ini( Kmm )   !  LOBSTER
-      ENDIF
+      CALL p4z_ini( Kmm )   !  PISCES
 
    END SUBROUTINE trc_ini_pisces
 
@@ -61,10 +59,13 @@ CONTAINS
       USE p4zche          !  Chemical model
       USE p4zsink         !  vertical flux of particulate matter due to sinking
       USE p4zopt          !  optical model
-      USE p4zbc          !  Boundary conditions
+      USE p4zbc           !  Boundary conditions
       USE p4zfechem       !  Iron chemistry
       USE p4zrem          !  Remineralisation of organic matter
       USE p4zflx          !  Gas exchange
+      USE p2zlim          !  Nutrient limitation of phytoplankton
+      USE p2zmort         !  Mortality terms for phytoplankton
+      USE p2zprod         !  Growth rate of phytoplankton
       USE p4zlim          !  Co-limitations of differents nutrients
       USE p4zprod         !  Growth rate of the 2 phyto groups
       USE p4zmicro        !  Sources and sinks of microzooplankton
@@ -79,6 +80,7 @@ CONTAINS
       USE p5zmicro        !  Sources and sinks of microzooplankton (QUOTA)
       USE p5zmeso         !  Sources and sinks of mesozooplankton (QUOTA)
       USE p5zmort         !  Mortality terms for phytoplankton (QUOTA)
+      USE p2zmicro        !  Sources and sinks of microzooplankton (REDUCED)
       !
       INTEGER, INTENT(in)  ::  Kmm      ! time level indices
       !
@@ -91,9 +93,12 @@ CONTAINS
       !
       IF(lwp) THEN
          WRITE(numout,*)
-         IF( ln_p4z ) THEN 
+         IF( ln_p2z ) THEN
+            WRITE(numout,*) 'p2z_ini :   PISCES biochemical model initialisation'
+            WRITE(numout,*) '~~~~~~~     Reduced version'
+         ELSE IF( ln_p4z ) THEN 
             WRITE(numout,*) 'p4z_ini :   PISCES biochemical model initialisation'
-            WRITE(numout,*) '~~~~~~~'
+            WRITE(numout,*) '~~~~~~~     Operationnal version'
          ELSE
             WRITE(numout,*) 'p5z_ini :   PISCES biochemical model initialisation'
             WRITE(numout,*) '~~~~~~~     With variable stoichiometry'
@@ -115,13 +120,19 @@ CONTAINS
       ierr = ierr +  p4z_opt_alloc()
       ierr = ierr +  p4z_flx_alloc()
       ierr = ierr +  p4z_sed_alloc()
-      ierr = ierr +  p4z_lim_alloc()
+      ierr = ierr +  p2z_lim_alloc()
+      IF( ln_p2z ) THEN
+         ierr = ierr +  p2z_prod_alloc()
+      ENDIF
       IF( ln_p4z ) THEN
          ! PISCES part
+         ierr = ierr +  p4z_lim_alloc()
          ierr = ierr +  p4z_prod_alloc()
          ierr = ierr +  p4z_meso_alloc()
-      ELSE
+      ENDIF
+      IF( ln_p5z ) THEN 
          ! PISCES-QUOTA part
+         ierr = ierr +  p4z_lim_alloc()
          ierr = ierr +  p5z_lim_alloc()
          ierr = ierr +  p5z_meso_alloc()
       ENDIF
@@ -203,26 +214,28 @@ CONTAINS
          tr(:,:,:,jpdoc,Kmm) = bioma0
          tr(:,:,:,jptal,Kmm) = alka0
          tr(:,:,:,jpoxy,Kmm) = oxyg0
-         tr(:,:,:,jpcal,Kmm) = bioma0
-         tr(:,:,:,jppo4,Kmm) = po4 / po4r
-         tr(:,:,:,jppoc,Kmm) = bioma0
-         tr(:,:,:,jpgoc,Kmm) = bioma0
-         tr(:,:,:,jpbfe,Kmm) = bioma0 * 5.e-6
-         tr(:,:,:,jpsil,Kmm) = silic1
-         tr(:,:,:,jpdsi,Kmm) = bioma0 * 0.15
-         tr(:,:,:,jpgsi,Kmm) = bioma0 * 5.e-6
+         tr(:,:,:,jpno3,Kmm) = no3
          tr(:,:,:,jpphy,Kmm) = bioma0
-         tr(:,:,:,jpdia,Kmm) = bioma0
          tr(:,:,:,jpzoo,Kmm) = bioma0
-         tr(:,:,:,jpmes,Kmm) = bioma0
+         tr(:,:,:,jppoc,Kmm) = bioma0
          tr(:,:,:,jpfer,Kmm) = 0.6E-9
-         tr(:,:,:,jpsfe,Kmm) = bioma0 * 5.e-6
-         tr(:,:,:,jpdfe,Kmm) = bioma0 * 5.e-6
-         tr(:,:,:,jpnfe,Kmm) = bioma0 * 5.e-6
-         tr(:,:,:,jpnch,Kmm) = bioma0 * 12. / 55.
-         tr(:,:,:,jpdch,Kmm) = bioma0 * 12. / 55.
-         tr(:,:,:,jpno3,Kmm) = no3
-         tr(:,:,:,jpnh4,Kmm) = bioma0
+         IF( .NOT. ln_p2z ) THEN
+            tr(:,:,:,jppo4,Kmm) = po4 / po4r
+            tr(:,:,:,jpgoc,Kmm) = bioma0
+            tr(:,:,:,jpbfe,Kmm) = bioma0 * 5.e-6
+            tr(:,:,:,jpsil,Kmm) = silic1
+            tr(:,:,:,jpdsi,Kmm) = bioma0 * 0.15
+            tr(:,:,:,jpgsi,Kmm) = bioma0 * 5.e-6
+            tr(:,:,:,jpdia,Kmm) = bioma0
+            tr(:,:,:,jpmes,Kmm) = bioma0
+            tr(:,:,:,jpsfe,Kmm) = bioma0 * 5.e-6
+            tr(:,:,:,jpdfe,Kmm) = bioma0 * 5.e-6
+            tr(:,:,:,jpnfe,Kmm) = bioma0 * 5.e-6
+            tr(:,:,:,jpnch,Kmm) = bioma0 * 12. / 55.
+            tr(:,:,:,jpdch,Kmm) = bioma0 * 12. / 55.
+            tr(:,:,:,jpnh4,Kmm) = bioma0
+            tr(:,:,:,jpcal,Kmm) = bioma0
+         ENDIF
          IF( ln_ligand) THEN
             tr(:,:,:,jplgw,Kmm) = 0.6E-9
          ENDIF
@@ -245,13 +258,17 @@ CONTAINS
          ENDIF
          ! initialize the half saturation constant for silicate
          ! ----------------------------------------------------
-         xksi(:,:)      = 2.e-6
-         xksimax(:,:)   = xksi(:,:)
+         sizen(:,:,:)   = 1.0
          consfe3(:,:,:) = 0._wp
-         !
-         sized(:,:,:) = 1.0
-         sizen(:,:,:) = 1.0
-         IF( ln_p5z )  sizep(:,:,:) = 1.0
+         IF ( .NOT. ln_p2z ) THEN
+            xksi(:,:)      = 2.e-6
+            xksimax(:,:)   = xksi(:,:)
+            !
+            sized(:,:,:) = 1.0
+            IF( ln_p5z )  sizep(:,:,:) = 1.0
+         ENDIF 
+
+         IF( ln_p2z ) thetanano(:,:,:) = 1.0 / 55.0
       END IF
 
 
@@ -260,7 +277,11 @@ CONTAINS
       ! ----------------------------------------------
       CALL p4z_sink_init         !  vertical flux of particulate organic matter
       CALL p4z_opt_init          !  Optic: PAR in the water column
-      IF( ln_p4z ) THEN
+      IF( ln_p2z ) THEN
+         ! Reduced PISCES part
+         CALL p2z_lim_init       !  co-limitations by the various nutrients
+         CALL p2z_prod_init      !  phytoplankton growth rate over the global ocean.
+      ELSE IF( ln_p4z ) THEN
          ! PISCES part
          CALL p4z_lim_init       !  co-limitations by the various nutrients
          CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean.
@@ -276,7 +297,10 @@ CONTAINS
       IF( ln_ligand ) &
          & CALL p4z_ligand_init  !  remineralisation of organic ligands
 
-      IF( ln_p4z ) THEN ! PISCES-std
+      IF( ln_p2z ) THEN ! PISCES-reduced
+         CALL p2z_mort_init      !  phytoplankton mortality 
+         CALL p2z_micro_init     !  microzooplankton
+      ELSE IF( ln_p4z ) THEN ! PISCES-std
          CALL p4z_mort_init      !  phytoplankton mortality 
          CALL p4z_micro_init     !  microzooplankton
          CALL p4z_meso_init      !  mesozooplankton
@@ -301,78 +325,5 @@ CONTAINS
       !
    END SUBROUTINE p4z_ini
 
-
-   SUBROUTINE p2z_ini( Kmm )
-      !!----------------------------------------------------------------------
-      !!                   ***  ROUTINE p2z_ini ***
-      !!
-      !! ** Purpose :   Initialisation of the LOBSTER biochemical model
-      !!----------------------------------------------------------------------
-      !
-      USE p2zopt
-      USE p2zexp
-      USE p2zbio
-      USE p2zsed
-      !
-      INTEGER, INTENT(in)  ::  Kmm      ! time level indices
-      INTEGER  ::  ji, jj, jk, jn, ierr
-      CHARACTER(len = 10)  ::  cltra
-      !!----------------------------------------------------------------------
-
-      IF(lwp) WRITE(numout,*)
-      IF(lwp) WRITE(numout,*) ' p2z_ini :   LOBSTER biochemical model initialisation'
-      IF(lwp) WRITE(numout,*) ' ~~~~~~~'
-
-      ierr =        sms_pisces_alloc()          
-      ierr = ierr + p2z_exp_alloc()
-      !
-      CALL mpp_sum( 'trcini_pisces', ierr )
-      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' )
-
-      DO jn = 1, jptra
-        cltra = ctrcnm(jn) 
-        IF( cltra == 'DET' )   jpdet = jn       !: detritus                    [mmoleN/m3]
-        IF( cltra == 'ZOO' )   jpzoo = jn       !: zooplancton concentration   [mmoleN/m3]
-        IF( cltra == 'PHY' )   jpphy = jn       !: phytoplancton concentration [mmoleN/m3]
-        IF( cltra == 'NO3' )   jpno3 = jn       !: nitrate concentration       [mmoleN/m3]
-        IF( cltra == 'NH4' )   jpnh4 = jn       !: ammonium concentration      [mmoleN/m3]
-        IF( cltra == 'DOM' )   jpdom = jn       !: dissolved organic matter    [mmoleN/m3]
-      ENDDO
-
-      jpkb = 10        !  last level where depth less than 200 m
-      DO jk = jpkm1, 1, -1
-         IF( gdept_1d(jk) > 200. ) jpkb = jk 
-      END DO
-      IF (lwp) WRITE(numout,*)
-      IF (lwp) WRITE(numout,*) ' first vertical layers where biology is active (200m depth ) ', jpkb
-      IF (lwp) WRITE(numout,*)
-      jpkbm1 = jpkb - 1
-      !
-
-
-      ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07
-      ! ----------------------
-      IF( .NOT. ln_rsttr ) THEN             ! in case of  no restart 
-         tr(:,:,:,jpdet,Kmm) = 0.1 * tmask(:,:,:)
-         tr(:,:,:,jpzoo,Kmm) = 0.1 * tmask(:,:,:)
-         tr(:,:,:,jpnh4,Kmm) = 0.1 * tmask(:,:,:)
-         tr(:,:,:,jpphy,Kmm) = 0.1 * tmask(:,:,:)
-         tr(:,:,:,jpdom,Kmm) = 1.0 * tmask(:,:,:)
-         WHERE( rhd(:,:,:) <= 24.5e-3 )  ;  tr(:,:,:,jpno3,Kmm) = 2._wp * tmask(:,:,:)
-         ELSE WHERE                      ;  tr(:,:,:,jpno3,Kmm) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:)
-         END WHERE                       
-      ENDIF
-      !                        !  Namelist read
-      CALL p2z_opt_init        !  Optics parameters
-      CALL p2z_sed_init        !  sedimentation
-      CALL p2z_bio_init        !  biology
-      CALL p2z_exp_init( Kmm ) !  export 
-      !
-      IF(lwp) WRITE(numout,*) 
-      IF(lwp) WRITE(numout,*) '   ==>>>   Initialization of LOBSTER tracers done'
-      IF(lwp) WRITE(numout,*) 
-      !
-   END SUBROUTINE p2z_ini
-
    !!======================================================================
 END MODULE trcini_pisces
diff --git a/src/TOP/PISCES/trcnam_pisces.F90 b/src/TOP/PISCES/trcnam_pisces.F90
index 4954e849..11aff9da 100644
--- a/src/TOP/PISCES/trcnam_pisces.F90
+++ b/src/TOP/PISCES/trcnam_pisces.F90
@@ -62,7 +62,7 @@ CONTAINS
       !
       IF(lwp) THEN                  ! control print
          WRITE(numout,*) '   Namelist : nampismod '
-         WRITE(numout,*) '      Flag to use LOBSTER model            ln_p2z      = ', ln_p2z
+         WRITE(numout,*) '      Flag to use PISCES reduced model     ln_p2z      = ', ln_p2z
          WRITE(numout,*) '      Flag to use PISCES standard model    ln_p4z      = ', ln_p4z
          WRITE(numout,*) '      Flag to use PISCES quota    model    ln_p5z      = ', ln_p5z
          WRITE(numout,*) '      Flag to ligand                       ln_ligand   = ', ln_ligand
@@ -73,8 +73,8 @@ CONTAINS
          WRITE(numout,*)
          IF( ln_p5z      )  WRITE(numout,*) '   ==>>>   PISCES QUOTA model is used'
          IF( ln_p4z      )  WRITE(numout,*) '   ==>>>   PISCES STANDARD model is used'
-         IF( ln_p2z      )  WRITE(numout,*) '   ==>>>   LOBSTER model is used'
-         IF( ln_ligand )  WRITE(numout,*) '   ==>>>   Compute remineralization/dissolution of organic ligands'
+         IF( ln_p2z      )  WRITE(numout,*) '   ==>>>   PISCES REDUCED model is used'
+         IF( ln_ligand   )  WRITE(numout,*) '   ==>>>   Compute remineralization/dissolution of organic ligands'
          IF( ln_sediment )  WRITE(numout,*) '   ==>>>   Sediment module is used'
       ENDIF
     
diff --git a/src/TOP/PISCES/trcsms_pisces.F90 b/src/TOP/PISCES/trcsms_pisces.F90
index 8015dbfd..2cf745c3 100644
--- a/src/TOP/PISCES/trcsms_pisces.F90
+++ b/src/TOP/PISCES/trcsms_pisces.F90
@@ -12,7 +12,6 @@ MODULE trcsms_pisces
    USE par_pisces
    USE sms_pisces
    USE p4zsms
-   USE p2zsms
 
    IMPLICIT NONE
    PRIVATE
@@ -38,10 +37,7 @@ CONTAINS
       INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs   ! time level index
       !!---------------------------------------------------------------------
       !
-      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_sms( kt, Kbb, Kmm, Krhs )   !  PISCES
-      ELSE                           ;   CALL p2z_sms( kt,      Kmm, Krhs )   !  LOBSTER
-      ENDIF
-
+      CALL p4z_sms( kt, Kbb, Kmm, Krhs )   !  PISCES
       !
    END SUBROUTINE trc_sms_pisces
 
diff --git a/src/TOP/PISCES/trcwri_pisces.F90 b/src/TOP/PISCES/trcwri_pisces.F90
index d44b7b11..eddb77d9 100644
--- a/src/TOP/PISCES/trcwri_pisces.F90
+++ b/src/TOP/PISCES/trcwri_pisces.F90
@@ -43,49 +43,42 @@ CONTAINS
  
       ! write the tracer concentrations in the file
       ! ---------------------------------------
-      IF( ln_p2z ) THEN
-         DO jn = jp_pcs0, jp_pcs1
-            cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer
-            CALL iom_put( cltra, tr(:,:,:,jn,Kmm) )
-         END DO
-      ELSE
-         DO jn = jp_pcs0, jp_pcs1
-            zfact = 1.0e+6 
-            IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+6 
-            IF( jn == jppo4  )                 zfact = po4r * 1.0e+6
-            cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer
-            IF( iom_use( cltra ) )  CALL iom_put( cltra, tr(:,:,:,jn,Kmm) * zfact )
-         END DO
+      DO jn = jp_pcs0, jp_pcs1
+         zfact = 1.0e+6 
+         IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+6 
+         IF( jn == jppo4  )                 zfact = po4r * 1.0e+6
+         cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer
+         IF( iom_use( cltra ) )  CALL iom_put( cltra, tr(:,:,:,jn,Kmm) * zfact )
+      END DO
 
-         IF( iom_use( "INTDIC" ) ) THEN                     !   DIC content in kg/m2
-            zdic(:,:) = 0.
-            DO jk = 1, jpkm1
-               DO_2D( 0, 0, 0, 0 )
-                 zdic(ji,jj) = zdic(ji,jj) + tr(ji,jj,jk,jpdic,Kmm) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * 12.
-               END_2D
-            ENDDO
-            CALL iom_put( 'INTDIC', zdic )
-         ENDIF
-         !
-         IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN  ! Oxygen minimum concentration and depth
+      IF( iom_use( "INTDIC" ) ) THEN                     !   DIC content in kg/m2
+         zdic(:,:) = 0.
+         DO jk = 1, jpkm1
             DO_2D( 0, 0, 0, 0 )
-               zo2min   (ji,jj) = tr(ji,jj,1,jpoxy,Kmm) * tmask(ji,jj,1)
-               zdepo2min(ji,jj) = gdepw(ji,jj,1,Kmm)    * tmask(ji,jj,1)
+            zdic(ji,jj) = zdic(ji,jj) + tr(ji,jj,jk,jpdic,Kmm) * e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) * 12.
             END_2D
-            DO_3D( 0, 0, 0, 0, 2, jpkm1 )
-               IF( tmask(ji,jj,jk) == 1 ) then
-                  IF( tr(ji,jj,jk,jpoxy,Kmm) < zo2min(ji,jj) ) then
-                     zo2min   (ji,jj) = tr(ji,jj,jk,jpoxy,Kmm)
-                     zdepo2min(ji,jj) = gdepw(ji,jj,jk,Kmm)
-                  ENDIF
+         ENDDO
+            CALL iom_put( 'INTDIC', zdic )
+      ENDIF
+      !
+      IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN  ! Oxygen minimum concentration and depth
+         DO_2D( 0, 0, 0, 0 )
+            zo2min   (ji,jj) = tr(ji,jj,1,jpoxy,Kmm) * tmask(ji,jj,1)
+            zdepo2min(ji,jj) = gdepw(ji,jj,1,Kmm)    * tmask(ji,jj,1)
+         END_2D
+         DO_3D( 0, 0, 0, 0, 2, jpkm1 )
+            IF( tmask(ji,jj,jk) == 1 ) then
+               IF( tr(ji,jj,jk,jpoxy,Kmm) < zo2min(ji,jj) ) then
+                  zo2min   (ji,jj) = tr(ji,jj,jk,jpoxy,Kmm)
+                  zdepo2min(ji,jj) = gdepw(ji,jj,jk,Kmm)
                ENDIF
-            END_3D
-            !
-            CALL iom_put('O2MIN' , zo2min     )                              ! oxygen minimum concentration
-            CALL iom_put('ZO2MIN', zdepo2min  )                              ! depth of oxygen minimum concentration
-             !
-         ENDIF
-     ENDIF
+            ENDIF
+         END_3D
+         !
+         CALL iom_put('O2MIN' , zo2min     )                              ! oxygen minimum concentration
+         CALL iom_put('ZO2MIN', zdepo2min  )                              ! depth of oxygen minimum concentration
+         !
+      ENDIF
       !
    END SUBROUTINE trc_wri_pisces
 
diff --git a/tests/BENCH/EXPREF/namelist_pisces_cfg b/tests/BENCH/EXPREF/namelist_pisces_cfg
index 71bea925..3c81eff8 100644
--- a/tests/BENCH/EXPREF/namelist_pisces_cfg
+++ b/tests/BENCH/EXPREF/namelist_pisces_cfg
@@ -102,35 +102,3 @@
 &nampismass    !   Mass conservation
 !-----------------------------------------------------------------------
 /
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-/
diff --git a/tests/CPL_OASIS/EXPREF/namelist_pisces_cfg b/tests/CPL_OASIS/EXPREF/namelist_pisces_cfg
index f67b07c4..8b7782ab 100644
--- a/tests/CPL_OASIS/EXPREF/namelist_pisces_cfg
+++ b/tests/CPL_OASIS/EXPREF/namelist_pisces_cfg
@@ -107,35 +107,3 @@
 &nampismass    !   Mass conservation
 !-----------------------------------------------------------------------
 /
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-/
diff --git a/tests/DIA_GPU/EXPREF/namelist_pisces_cfg b/tests/DIA_GPU/EXPREF/namelist_pisces_cfg
index f67b07c4..8b7782ab 100644
--- a/tests/DIA_GPU/EXPREF/namelist_pisces_cfg
+++ b/tests/DIA_GPU/EXPREF/namelist_pisces_cfg
@@ -107,35 +107,3 @@
 &nampismass    !   Mass conservation
 !-----------------------------------------------------------------------
 /
-!-----------------------------------------------------------------------
-&namlobphy     !   biological parameters for phytoplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobnut     !   biological parameters for nutrients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobzoo     !   biological parameters for zooplankton
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdet     !   biological parameters for detritus
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobdom     !   biological parameters for DOM
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobsed     !   parameters from aphotic layers to sediment
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobrat     !   general coefficients
-!-----------------------------------------------------------------------
-/
-!-----------------------------------------------------------------------
-&namlobopt     !   optical parameters
-!-----------------------------------------------------------------------
-/
-- 
GitLab