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

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 15548 for NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/TOP/PISCES/P4Z/p5zlim.F90 – NEMO

Ignore:
Timestamp:
2021-11-28T18:59:49+01:00 (3 years ago)
Author:
gsamson
Message:

update branch to the head of the trunk (r15547); ticket #2632

Location:
NEMO/branches/2021/ticket2632_r14588_theta_sbcblk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/ticket2632_r14588_theta_sbcblk

    • Property svn:externals
      •  

        old new  
        99 
        1010# SETTE 
        11 ^/utils/CI/sette@14244        sette 
         11^/utils/CI/sette@HEAD        sette 
         12 
  • NEMO/branches/2021/ticket2632_r14588_theta_sbcblk/src/TOP/PISCES/P4Z/p5zlim.F90

    r13434 r15548  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p5zlim  *** 
    4    !! TOP :   PISCES with variable stoichiometry  
     4   !! TOP :   PISCES-QUOTA : Computes the various nutrient limitation terms 
     5   !!                        of phytoplankton 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1415   USE oce_trc         ! Shared ocean-passive tracers variables 
    1516   USE trc             ! Tracers defined 
    16    USE p4zlim 
     17   USE p4zlim          ! Nutrient limitation  
    1718   USE sms_pisces      ! PISCES variables 
    1819   USE iom             !  I/O manager 
     
    2122   PRIVATE 
    2223 
    23    PUBLIC p5z_lim     
    24    PUBLIC p5z_lim_init     
    25    PUBLIC p5z_lim_alloc 
     24   PUBLIC p5z_lim           ! called in p4zbio.F90   
     25   PUBLIC p5z_lim_init      ! called in trcsms_pisces.F90  
     26   PUBLIC p5z_lim_alloc     ! called in trcini_pisces.F90 
    2627 
    2728   !! * Shared module variables 
    28    REAL(wp), PUBLIC ::  concpno3    !:  NO3, PO4 half saturation    
    29    REAL(wp), PUBLIC ::  concpnh4    !:  NH4 half saturation for phyto   
    30    REAL(wp), PUBLIC ::  concnpo4    !:  NH4 half saturation for diatoms 
    31    REAL(wp), PUBLIC ::  concppo4    !:  NH4 half saturation for diatoms 
    32    REAL(wp), PUBLIC ::  concdpo4    !:  NH4 half saturation for diatoms 
    33    REAL(wp), PUBLIC ::  concpfer    !:  Iron half saturation for nanophyto  
     29   REAL(wp), PUBLIC ::  concpno3    !:  NO3 half saturation for picophyto   
     30   REAL(wp), PUBLIC ::  concpnh4    !:  NH4 half saturation for picophyto 
     31   REAL(wp), PUBLIC ::  concnpo4    !:  PO4 half saturation for nanophyto 
     32   REAL(wp), PUBLIC ::  concppo4    !:  PO4 half saturation for picophyto 
     33   REAL(wp), PUBLIC ::  concdpo4    !:  PO4 half saturation for diatoms 
     34   REAL(wp), PUBLIC ::  concpfer    !:  Iron half saturation for picophyto 
    3435   REAL(wp), PUBLIC ::  concbpo4    !:  PO4 half saturation for bacteria 
    35    REAL(wp), PUBLIC ::  xsizepic    !:  Minimum size criteria for diatoms 
    36    REAL(wp), PUBLIC ::  xsizerp     !:  Size ratio for nanophytoplankton 
     36   REAL(wp), PUBLIC ::  xsizepic    !:  Minimum size criteria for picophyto 
     37   REAL(wp), PUBLIC ::  xsizerp     !:  Size ratio for picophytoplankton 
    3738   REAL(wp), PUBLIC ::  qfnopt      !:  optimal Fe quota for nanophyto 
    38    REAL(wp), PUBLIC ::  qfpopt      !:  optimal Fe quota for nanophyto 
     39   REAL(wp), PUBLIC ::  qfpopt      !:  optimal Fe quota for picophyto 
    3940   REAL(wp), PUBLIC ::  qfdopt      !:  optimal Fe quota for diatoms 
    40    REAL(wp), PUBLIC ::  qnnmin      !:  optimal Fe quota for diatoms 
    41    REAL(wp), PUBLIC ::  qnnmax      !:  optimal Fe quota for diatoms 
    42    REAL(wp), PUBLIC ::  qpnmin      !:  optimal Fe quota for diatoms 
    43    REAL(wp), PUBLIC ::  qpnmax      !:  optimal Fe quota for diatoms 
    44    REAL(wp), PUBLIC ::  qnpmin      !:  optimal Fe quota for diatoms 
    45    REAL(wp), PUBLIC ::  qnpmax      !:  optimal Fe quota for diatoms 
    46    REAL(wp), PUBLIC ::  qppmin      !:  optimal Fe quota for diatoms 
    47    REAL(wp), PUBLIC ::  qppmax      !:  optimal Fe quota for diatoms 
    48    REAL(wp), PUBLIC ::  qndmin      !:  optimal Fe quota for diatoms 
    49    REAL(wp), PUBLIC ::  qndmax      !:  optimal Fe quota for diatoms 
    50    REAL(wp), PUBLIC ::  qpdmin      !:  optimal Fe quota for diatoms 
    51    REAL(wp), PUBLIC ::  qpdmax      !:  optimal Fe quota for diatoms 
    52    REAL(wp), PUBLIC ::  qfnmax      !:  optimal Fe quota for diatoms 
    53    REAL(wp), PUBLIC ::  qfpmax      !:  optimal Fe quota for diatoms 
    54    REAL(wp), PUBLIC ::  qfdmax      !:  optimal Fe quota for diatoms 
    55    REAL(wp), PUBLIC ::  zpsinh4 
    56    REAL(wp), PUBLIC ::  zpsino3 
    57    REAL(wp), PUBLIC ::  zpsiuptk 
     41   REAL(wp), PUBLIC ::  qnnmin      !:  minimum N  quota for nanophyto 
     42   REAL(wp), PUBLIC ::  qnnmax      !:  maximum N quota for nanophyto 
     43   REAL(wp), PUBLIC ::  qpnmin      !:  minimum P quota for nanophyto 
     44   REAL(wp), PUBLIC ::  qpnmax      !:  maximum P quota for nanophyto 
     45   REAL(wp), PUBLIC ::  qnpmin      !:  minimum N quota for nanophyto 
     46   REAL(wp), PUBLIC ::  qnpmax      !:  maximum N quota for nanophyto 
     47   REAL(wp), PUBLIC ::  qppmin      !:  minimum P quota for nanophyto 
     48   REAL(wp), PUBLIC ::  qppmax      !:  maximum P quota for nanophyto 
     49   REAL(wp), PUBLIC ::  qndmin      !:  minimum N quota for diatoms 
     50   REAL(wp), PUBLIC ::  qndmax      !:  maximum N quota for diatoms 
     51   REAL(wp), PUBLIC ::  qpdmin      !:  minimum P quota for diatoms 
     52   REAL(wp), PUBLIC ::  qpdmax      !:  maximum P quota for diatoms 
     53   REAL(wp), PUBLIC ::  qfnmax      !:  maximum Fe quota for nanophyto 
     54   REAL(wp), PUBLIC ::  qfpmax      !:  maximum Fe quota for picophyto 
     55   REAL(wp), PUBLIC ::  qfdmax      !:  maximum Fe quota for diatoms 
     56   REAL(wp), PUBLIC ::  xpsinh4     !:  respiration cost of NH4 assimilation 
     57   REAL(wp), PUBLIC ::  xpsino3     !:  respiration cost of NO3 assimilation 
     58   REAL(wp), PUBLIC ::  xpsiuptk    !:  Mean respiration cost 
    5859 
    5960   !!*  Allometric variations of the quotas 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmin    !: ??? 
    61    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmax    !: ??? 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmin    !: ??? 
    63    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmax    !: ??? 
    64    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmin    !: ??? 
    65    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmax    !: ??? 
    66    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmin    !: ??? 
    67    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmax    !: ??? 
    68    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmin    !: ??? 
    69    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmax    !: ??? 
    70    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmin    !: ??? 
    71    REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmax    !: ??? 
    72  
    73    !!* Phytoplankton limitation terms 
    74    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: ??? 
    75    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: ??? 
    76    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: ??? 
    77    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: ??? 
    78    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: ??? 
    79    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: ??? 
    80    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: ??? 
    81    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: ??? 
    82    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: ??? 
    83    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: ??? 
    84    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: ??? 
    85    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk 
    86    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk 
    87    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk 
    88  
    89    ! Coefficient for iron limitation 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmin    !: Minimum N quota of nanophyto 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmax    !: Maximum N quota of nanophyto 
     63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmin    !: Minimum P quota of nanophyto 
     64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmax    !: Maximum P quota of picophyto 
     65   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmin    !: Minimum N quota of picophyto 
     66   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmax    !: Maximum N quota of picophyto 
     67   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmin    !: Minimum P quota of picophyto 
     68   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmax    !: Maximum P quota of picophyto 
     69   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmin    !: Minimum N quota of diatoms 
     70   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmax    !: Maximum N quota of diatoms 
     71   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmin    !: Minimum P quota of diatoms 
     72   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmax    !: Maximum P quota of diatoms 
     73 
     74   !!* Phytoplankton nutrient limitation terms 
     75   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: Limitation of NO3 uptake by picophyto 
     76   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: Limitation of NH4 uptake by picophyto 
     77   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: Limitation of PO4 uptake by picophyto 
     78   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: Limitation of DOP uptake by nanophyto 
     79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: Limitation of DOP uptake by picophyto 
     80   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: Limitation of DOP uptake by diatoms 
     81   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: Limitation of Fe uptake by picophyto 
     82   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: Limitation of picophyto PP by nutrients 
     83   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpics   !: Limitation of picophyto PP by nutrients 
     84   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphys   !: Limitation of nanophyto PP by nutrients 
     85   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdias   !: Limitation of diatoms PP by nutrients 
     86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: Limitation of picophyto PP by Fe 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk    !: Maximum potential uptake rate of nanophyto 
     88   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk    !: Maximum potential uptake rate of picophyto 
     89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk    !: Maximum potential uptake rate of diatoms 
     90   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xqfuncfecp !:  
     91   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnpn, xlimnpp, xlimnpd 
     92 
     93   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
    9094   REAL(wp) ::  xcoef1   = 0.00167  / 55.85 
    9195   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
     
    106110      !! 
    107111      !! ** Purpose :   Compute the co-limitations by the various nutrients 
    108       !!              for the various phytoplankton species 
     112      !!                for the various phytoplankton species. Quota based 
     113      !!                approach. The quota model is derived from theoretical 
     114      !!                models proposed by Pahlow and Oschlies (2009) and  
     115      !!                Flynn (2001). Various adaptations from several  
     116      !!                publications by these authors have been also adopted.  
    109117      !! 
    110       !! ** Method  : - ??? 
     118      !! ** Method  : Quota based approach. The quota model is derived from  
     119      !!              theoretical models by Pahlow and Oschlies (2009) and  
     120      !!              Flynn (2001). Various adaptations from several publications 
     121      !!              by these authors have been also adopted. 
    111122      !!--------------------------------------------------------------------- 
    112123      ! 
     
    117128      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    118129      REAL(wp) ::   z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1 
    119       REAL(wp) ::   zratio, zration, zratiof, znutlim, zfalim 
     130      REAL(wp) ::   zratio, zration, zratiof, znutlim, zfalim, zxpsiuptk 
    120131      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4 
    121132      REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe 
    122133      REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf 
    123       REAL(wp) ::   fapico, fapicop, fapicof 
    124       REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl 
     134      REAL(wp) ::   fapico, fapicop, fapicof, zlimpo4, zlimdop 
     135      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl, ztrn, ztrp 
    125136      REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 
    126       REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 
     137      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4, zbiron 
     138      REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zlim1f, zsizetmp 
     139      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrassn, zrassp, zrassd 
    127140      !!--------------------------------------------------------------------- 
    128141      ! 
     
    130143      ! 
    131144      zratchl = 6.0 
    132       ! 
    133       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    134          !  
    135          ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    136          !------------------------------------- 
    137          zno3    = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 
    138          zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    139          zferlim = MIN( zferlim, 7e-11 ) 
    140          tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 
    141  
    142          ! Computation of the mean relative size of each community 
     145      sizena(:,:,:) = 0.0  ;  sizepa(:,:,:) = 0.0  ;  sizeda(:,:,:) = 0.0 
     146      ! 
     147      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     148         ! Computation of the Chl/C ratio of each phytoplankton group 
    143149         ! ------------------------------------------------------- 
    144150         z1_trnphy   = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 
     
    149155         zdiatchl = tr(ji,jj,jk,jpdch,Kbb) * z1_trndia 
    150156 
    151          ! Computation of a variable Ks for iron on diatoms taking into account 
    152          ! that increasing biomass is made of generally bigger cells 
     157         ! Computation of a variable Ks for the different phytoplankton 
     158         ! group as a function of their relative size. Allometry 
     159         ! from Edwards et al. (2012) 
    153160         !------------------------------------------------ 
     161 
     162         ! diatoms 
    154163         zsized            = sized(ji,jj,jk)**0.81 
    155164         zconcdfe          = concdfer * zsized 
     
    158167         zconc0dpo4        = concdpo4 * zsized 
    159168 
    160          zsizep            = 1. 
     169         ! picophytoplankton 
     170         zsizep            = sizep(ji,jj,jk)**0.81 
    161171         zconcpfe          = concpfer * zsizep 
    162172         zconc0p           = concpno3 * zsizep 
     
    164174         zconc0ppo4        = concppo4 * zsizep 
    165175 
    166          zsizen            = 1. 
     176         ! nanophytoplankton 
     177         zsizen            = sizen(ji,jj,jk)**0.81 
    167178         zconcnfe          = concnfer * zsizen 
    168179         zconc0n           = concnno3 * zsizen 
     
    173184         ! From Talmy et al. (2014) and Maranon et al. (2013) 
    174185         ! ------------------------------------------------------- 
    175          xqnnmin(ji,jj,jk) = qnnmin 
     186         xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.36) 
    176187         xqnnmax(ji,jj,jk) = qnnmax 
    177          xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27)  
     188         xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.36) 
    178189         xqndmax(ji,jj,jk) = qndmax 
    179          xqnpmin(ji,jj,jk) = qnpmin 
     190         xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.36) 
    180191         xqnpmax(ji,jj,jk) = qnpmax 
    181192 
     
    183194         ! Based on the different papers by Pahlow et al., and Smith et al. 
    184195         ! ----------------------------------------------------------------- 
     196         zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 
     197                
     198         ! Nanophytoplankton 
    185199         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4,    & 
    186200           &         tr(ji,jj,jk,jpno3,Kbb) / zconc0n) 
     
    188202         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4 
    189203         fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    190          znutlim = biron(ji,jj,jk) / zconcnfe 
     204         znutlim = zbiron / zconcnfe 
    191205         fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     206 
     207         ! Picophytoplankton 
    192208         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4,    & 
    193209           &         tr(ji,jj,jk,jpno3,Kbb) / zconc0p) 
     
    195211         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4 
    196212         fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    197          znutlim = biron(ji,jj,jk) / zconcpfe 
     213         znutlim = zbiron / zconcpfe 
    198214         fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     215 
     216         ! Diatoms 
    199217         znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4,    & 
    200218           &         tr(ji,jj,jk,jpno3,Kbb) / zconc1d ) 
     
    202220         znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4 
    203221         fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    204          znutlim = biron(ji,jj,jk) / zconcdfe 
     222         znutlim = zbiron / zconcdfe 
    205223         fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    206          ! 
    207          ! Michaelis-Menten Limitation term for nutrients Small bacteria 
     224 
     225         ! 
     226         ! Michaelis-Menten Limitation term by nutrients of 
     227         !  heterotrophic bacteria 
    208228         ! ------------------------------------------------------------- 
    209          zbactnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    210          zbactno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - zbactnh4) 
     229         zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
     230         zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) 
     231         znutlimtot = ( tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) )  & 
     232             &      / ( concbno3 + tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) ) 
     233         zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     234         zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )          
    211235         ! 
    212236         zlim1    = zbactno3 + zbactnh4 
     
    214238         zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 
    215239         zlim4    = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc   + tr(ji,jj,jk,jpdoc,Kbb) ) 
     240 
     241         ! Xlimbac is used for DOC solubilization whereas xlimbacl 
     242         ! is used for all the other bacterial-dependent term 
     243         ! ------------------------------------------------------- 
    216244         xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    217245         xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 
     
    219247         ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    220248         ! ----------------------------------------------- 
    221          zfalim = (1.-fanano) / fanano 
    222          xnanonh4(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0nnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    223          xnanono3(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0n + tr(ji,jj,jk,jpno3,Kbb) )  & 
    224          &                    * (1. - xnanonh4(ji,jj,jk)) 
    225          ! 
    226          zfalim = (1.-fananop) / fananop 
    227          xnanopo4(ji,jj,jk) = (1. - fananop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0npo4 ) 
    228          xnanodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc )   & 
    229          &                    * ( 1.0 - xnanopo4(ji,jj,jk) ) 
    230          xnanodop(ji,jj,jk) = 0. 
    231          ! 
     249         ztrn    = tr(ji,jj,jk,jpnh4,Kbb) + tr(ji,jj,jk,jpno3,Kbb) 
     250         ztrp    = tr(ji,jj,jk,jppo4,Kbb) + tr(ji,jj,jk,jpdop,Kbb)  
     251         ! 
     252         ! Limitation of N based nutrients uptake (NO3 and NH4) 
     253         zfalim  = (1.-fanano) / fanano 
     254         zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0n + tr(ji,jj,jk,jpnh4,Kbb) ) 
     255         zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) 
     256         znutlimtot = (1. - fanano) * ztrn  / ( zfalim * zconc0n + ztrn ) 
     257         xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     258         xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     259         ! 
     260         ! Limitation of P based nutrients (PO4 and DOP) 
     261         zfalim  = (1.-fananop) / fananop 
     262         zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0npo4 ) 
     263         zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0npo4 ) 
     264         znutlimtot = (1. - fananop) * ztrp / ( zfalim * zconc0npo4 + ztrp ) 
     265         xnanopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     266         xnanodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     267         ! 
     268         ! Limitation of Fe uptake 
    232269         zfalim = (1.-fananof) / fananof 
    233          xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 
    234          ! 
     270         xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * zconcnfe ) 
     271         ! 
     272         ! The minimum iron quota depends on the size of PSU, respiration 
     273         ! and the reduction of nitrate following the parameterization  
     274         ! proposed by Flynn and Hipkin (1999) 
    235275         zratiof   = tr(ji,jj,jk,jpnfe,Kbb) * z1_trnphy 
    236276         zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 
     277         xqfuncfecn(ji,jj,jk) = zqfemn + qfnopt 
    237278         ! 
    238279         zration = tr(ji,jj,jk,jpnph,Kbb) * z1_trnphy 
    239          zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 
    240          fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
     280         zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration )) 
     281         fvnuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
    241282         &                   * MAX(0., (1. - zratchl * znanochl / 12. ) ) 
    242283         ! 
    243          zlim1    = max(0., (zration - 2. * xqnnmin(ji,jj,jk) )  & 
    244          &          / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  & 
     284         zlim1  = max(0., (zration - xqnnmin(ji,jj,jk) )  & 
     285         &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  & 
    245286         &          / (zration + rtrn) 
    246          zlim3    = MAX( 0.,( zratiof - zqfemn ) / qfnopt )  
    247          xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 
    248          xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     287         ! The value of the optimal quota in the formulation below 
     288         ! has been found by solving a non linear equation 
     289         zlim1f = max(0., ( 1.13 - xqnnmin(ji,jj,jk) )  & 
     290         &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 
     291         zlim3  = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 
     292         ! computation of the various limitation terms of nanophyto 
     293         ! growth and PP 
     294         xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
     295         xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     296         xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 
     297         xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 
    249298         ! 
    250299         ! Michaelis-Menten Limitation term for nutrients picophytoplankton 
    251300         ! ---------------------------------------------------------------- 
     301         ! Limitation of N based nutrients uptake (NO3 and NH4)  
    252302         zfalim = (1.-fapico) / fapico  
    253          xpiconh4(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0pnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    254          xpicono3(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0p + tr(ji,jj,jk,jpno3,Kbb) )  & 
    255          &                    * (1. - xpiconh4(ji,jj,jk)) 
    256          ! 
     303         zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc0p + tr(ji,jj,jk,jpnh4,Kbb) ) 
     304         zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) 
     305         znutlimtot = (1. - fapico) * ztrn / ( zfalim * zconc0p + ztrn ) 
     306         xpiconh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     307         xpicono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     308         ! 
     309         ! Limitation of P based nutrients uptake (PO4 and DOP) 
    257310         zfalim = (1.-fapicop) / fapicop  
    258          xpicopo4(ji,jj,jk) = (1. - fapicop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0ppo4 ) 
    259          xpicodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc )   & 
    260          &                    * ( 1.0 - xpicopo4(ji,jj,jk) ) 
    261          xpicodop(ji,jj,jk) = 0. 
     311         zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0ppo4 ) 
     312         zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0ppo4 ) 
     313         znutlimtot = (1. - fapicop) * ztrp / ( zfalim * zconc0ppo4 + ztrp) 
     314         xpicopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     315         xpicodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
    262316         ! 
    263317         zfalim = (1.-fapicof) / fapicof 
    264          xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 
    265          ! 
    266          zratiof   = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 
     318         xpicofer(ji,jj,jk) = (1. - fapicof) * zbiron / ( zbiron + zfalim * zconcpfe ) 
     319         ! 
     320         ! The minimum iron quota depends on the size of PSU, respiration 
     321         ! and the reduction of nitrate following the parameterization  
     322         ! proposed by Flynn and Hipkin (1999) 
     323         zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 
    267324         zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 
     325         xqfuncfecp(ji,jj,jk) = zqfemp + qfpopt 
    268326         ! 
    269327         zration   = tr(ji,jj,jk,jpnpi,Kbb) * z1_trnpic 
    270          zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 
    271          fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
     328         zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration )) 
     329         fvpuptk(ji,jj,jk) = 2.5 * xpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
    272330         &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) )  
    273331         ! 
    274          zlim1    = max(0., (zration - 2. * xqnpmin(ji,jj,jk) )  & 
    275          &          / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  & 
     332         zlim1    = max(0., (zration - xqnpmin(ji,jj,jk) )  & 
     333         &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  & 
    276334         &          / (zration + rtrn) 
     335         ! The value of the optimal quota in the formulation below 
     336         ! has been found by solving a non linear equation 
     337         zlim1f   = max(0., (1.29 - xqnpmin(ji,jj,jk) )  & 
     338         &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 
    277339         zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 
    278          xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 
    279          xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     340 
     341         ! computation of the various limitation terms of picophyto 
     342         ! growth and PP 
     343         xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 
     344         xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     345         xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 
     346         xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 
     347 
     348 
    280349         ! 
    281350         !   Michaelis-Menten Limitation term for nutrients Diatoms 
    282351         !   ------------------------------------------------------ 
     352         ! 
     353         ! Limitation of N based nutrients uptake (NO3 and NH4) 
    283354         zfalim = (1.-fadiat) / fadiat  
    284          xdiatnh4(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc1dnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 
    285          xdiatno3(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc1d + tr(ji,jj,jk,jpno3,Kbb) )  & 
    286          &                    * (1. - xdiatnh4(ji,jj,jk)) 
    287          ! 
     355         zlimnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( zconc1d + tr(ji,jj,jk,jpnh4,Kbb) ) 
     356         zlimno3 = tr(ji,jj,jk,jpno3,Kbb) / ( zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) 
     357         znutlimtot = (1.0 - fadiat) * ztrn / ( zfalim * zconc1d + ztrn ) 
     358         xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     359         xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     360         ! 
     361         ! Limitation of P based nutrients uptake (PO4 and DOP) 
    288362         zfalim = (1.-fadiatp) / fadiatp 
    289          xdiatpo4(ji,jj,jk) = (1. - fadiatp) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0dpo4 ) 
    290          xdiatdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc )  & 
    291          &                    * ( 1.0 - xdiatpo4(ji,jj,jk) ) 
    292          xdiatdop(ji,jj,jk) = 0. 
    293          ! 
     363         zlimpo4 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zconc0dpo4 ) 
     364         zlimdop = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + zconc0dpo4 ) 
     365         znutlimtot = (1. - fadiatp) * ztrp / ( zfalim * zconc0dpo4 + ztrp ) 
     366         xdiatpo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     367         xdiatdop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     368         ! 
     369         ! Limitation of Fe uptake 
    294370         zfalim = (1.-fadiatf) / fadiatf 
    295          xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 
    296          ! 
     371         xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * zconcdfe ) 
     372         ! 
     373         ! The minimum iron quota depends on the size of PSU, respiration 
     374         ! and the reduction of nitrate following the parameterization  
     375         ! proposed by Flynn and Hipkin (1999) 
    297376         zratiof   = tr(ji,jj,jk,jpdfe,Kbb) * z1_trndia 
    298377         zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 
     378         xqfuncfecd(ji,jj,jk) = zqfemd + qfdopt 
    299379         ! 
    300380         zration   = tr(ji,jj,jk,jpndi,Kbb) * z1_trndia 
    301          zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 
    302          fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
     381         zration   = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration )) 
     382         fvduptk(ji,jj,jk) = 2.5 * xpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
    303383         &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) )  
    304384         ! 
    305          zlim1    = max(0., (zration - 2. * xqndmin(ji,jj,jk) )    & 
    306          &          / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) )   & 
     385         zlim1    = max(0., (zration - xqndmin(ji,jj,jk) )    & 
     386         &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   & 
    307387         &          * xqndmax(ji,jj,jk) / (zration + rtrn) 
    308          zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) + rtrn ) 
     388         ! The value of the optimal quota in the formulation below 
     389         ! has been found by solving a non linear equation 
     390         zlim1f   = max(0., (1.13 - xqndmin(ji,jj,jk) )    & 
     391         &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   & 
     392         &          * xqndmax(ji,jj,jk) 
     393         zlim3    = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 
    309394         zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 
     395         ! computation of the various limitation terms of diatoms 
     396         ! growth and PP 
    310397         xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 
    311398         xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 
     399         xlimdias(ji,jj,jk) = MIN (1.0, zlim1 / (zlim1f + rtrn ), zlim3, zlim4 ) 
    312400         xlimsi(ji,jj,jk)  = MIN( zlim1, zlim4 ) 
     401         xlimnpd(ji,jj,jk) = MIN( 1., zlim1 ) 
    313402      END_3D 
     403 
    314404      ! 
    315405      ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. 
     
    318408      ! phytoplankton (see Daines et al., 2013).  
    319409      ! -------------------------------------------------------------------------------------------------- 
    320       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    321          ! Size estimation of nanophytoplankton 
    322          ! ------------------------------------ 
    323          zfvn = 2. * fvnuptk(ji,jj,jk) 
    324          sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
    325  
     410      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
     411         ! Size estimation of nanophytoplankton based on total biomass 
     412         ! Assumes that larger biomass implies addition of larger cells 
     413         ! ------------------------------------------------------------ 
     414         zcoef = tr(ji,jj,jk,jpphy,Kbb) - MIN(xsizephy, tr(ji,jj,jk,jpphy,Kbb) ) 
     415         sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 
    326416         ! N/P ratio of nanophytoplankton 
    327417         ! ------------------------------ 
    328          zfuptk = 0.23 * zfvn 
    329          zrpho = 2.24 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpnph,Kbb) * rno3 * 15. + rtrn ) 
    330          zrass = 1. - 0.2 - zrpho - zfuptk 
    331          xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 
    332          xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) + 0.13 
    333          xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16. 
    334  
    335          ! Size estimation of picophytoplankton 
    336          ! ------------------------------------ 
    337          zfvn = 2. * fvpuptk(ji,jj,jk) 
    338          sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
     418         zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn ) 
     419         ! Computed from Inomura et al. (2020) using Pavlova Lutheri 
     420         zrpho  = 11.55 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) * 12. + rtrn ) 
     421         zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) ) 
     422         zrassn(ji,jj,jk) = zrass 
     423         xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 ) * 16. 
     424         xqpnmax(ji,jj,jk) = ( zrpho * 0.0089 + zrass * 0.0783 ) * 16. 
     425         xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16. 
     426         xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) ) 
     427 
     428         ! Size estimation of picophytoplankton based on total biomass 
     429         ! Assumes that larger biomass implies addition of larger cells 
     430         ! ------------------------------------------------------------ 
     431         zcoef = tr(ji,jj,jk,jppic,Kbb) - MIN(xsizepic, tr(ji,jj,jk,jppic,Kbb) ) 
     432         sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) 
    339433 
    340434         ! N/P ratio of picophytoplankton 
    341435         ! ------------------------------ 
    342          zfuptk = 0.35 * zfvn 
    343          zrpho = 2.24 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jpnpi,Kbb) * rno3 * 15. + rtrn ) 
    344          zrass = 1. - 0.4 - zrpho - zfuptk 
    345          xqppmax(ji,jj,jk) =  (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16. 
    346          xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) + 0.13 
    347          xqppmin(ji,jj,jk) = 0.13 
    348  
    349          ! Size estimation of diatoms 
    350          ! -------------------------- 
    351          zfvn = 2. * fvduptk(ji,jj,jk) 
    352          sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
     436         zfuptk = 0.2 + 0.12 / ( 0.8 * sizep(ji,jj,jk) + rtrn ) 
     437         ! Computed from Inomura et al. (2020) using a synechococcus 
     438         zrpho = 13.4 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) * 12. + rtrn ) 
     439         zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) ) 
     440         zrassp(ji,jj,jk) = zrass 
     441         xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 ) * 16. 
     442         xqppmax(ji,jj,jk) = ( zrpho * 0.0076 + zrass * 0.0517 ) * 16. 
     443         xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) +  (0.033 + 0.0078 ) * 16 
     444         xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 
     445 
     446         ! Size estimation of diatoms based on total biomass 
     447         ! Assumes that larger biomass implies addition of larger cells 
     448         ! ------------------------------------------------------------ 
    353449         zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 
    354          sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 
    355  
     450         sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
    356451         ! N/P ratio of diatoms 
    357452         ! -------------------- 
    358          zfuptk = 0.2 * zfvn 
    359          zrpho = 2.24 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * rno3 * 15. + rtrn ) 
    360          zrass = 1. - 0.2 - zrpho - zfuptk 
    361          xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 
    362          xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) + 0.13 
    363          xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 
    364  
     453         zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn ) 
     454         ! Computed from Inomura et al. (2020) using a synechococcus 
     455         zrpho = 8.08 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * 12. + rtrn ) 
     456         zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) ) 
     457         zrassd(ji,jj,jk)=zrass 
     458         xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 ) * 16. 
     459         xqpdmax(ji,jj,jk) = ( zrpho * 0.0135 + zrass * 0.0783 ) * 16. 
     460         xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.033 ) * 16. 
     461         xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) ) 
    365462      END_3D 
    366463 
    367464      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     465      ! This is a purely adhoc formulation described in Aumont et al. (2015) 
     466      ! This fraction depends on nutrient limitation, light, temperature 
    368467      ! -------------------------------------------------------------------- 
    369       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     468      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    370469         zlim1 =  tr(ji,jj,jk,jpnh4,Kbb) / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) + tr(ji,jj,jk,jpno3,Kbb)    & 
    371470         &        / ( tr(ji,jj,jk,jpno3,Kbb) + concnno3 ) * ( 1.0 - tr(ji,jj,jk,jpnh4,Kbb)   & 
    372471         &        / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) ) 
    373472         zlim2  = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnpo4 ) 
    374          zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  5.E-11 )  
    375          ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) ) 
     473         zlim3  = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) +  6.E-11 )  
     474         ztem1  = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) + 1.8 ) 
    376475         ztem2  = ts(ji,jj,jk,jp_tem,Kmm) - 10. 
    377          zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) )  
    378  
    379 !               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
    380          xfracal(ji,jj,jk) = caco3r                 & 
    381          &                   * ztem1 / ( 1. + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 )   & 
     476         zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) * 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
     477 
     478         xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)     & 
     479         &                   * ztem1 / ( 0.1 + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 )   & 
    382480            &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
    383481            &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 
     
    385483      END_3D 
    386484      ! 
    387       DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
     485      DO_3D( nn_hls, nn_hls, nn_hls, nn_hls, 1, jpkm1) 
    388486         ! denitrification factor computed from O2 levels 
    389487         nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - tr(ji,jj,jk,jpoxy,Kbb) )    & 
     
    403501        CALL iom_put( "SIZEP"  , sizep  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    404502        CALL iom_put( "SIZED"  , sized  (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     503        CALL iom_put( "RASSN"  , zrassn (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     504        CALL iom_put( "RASSP"  , zrassp (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     505        CALL iom_put( "RASSD"  , zrassd (:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    405506      ENDIF 
    406507      ! 
     
    416517      !! ** Purpose :   Initialization of nutrient limitation parameters 
    417518      !! 
    418       !! ** Method  :   Read the nampislim and nampisquota namelists and check 
     519      !! ** Method  :   Read the namp5zlim and nampisquota namelists and check 
    419520      !!      the parameters called at the first timestep (nittrc000) 
    420521      !! 
    421       !! ** input   :   Namelist nampislim 
     522      !! ** input   :   Namelist namp5zlim 
    422523      !! 
    423524      !!---------------------------------------------------------------------- 
     
    436537      ! 
    437538      READ  ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 
    438 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist' ) 
     539901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zlim in reference namelist' ) 
    439540      ! 
    440541      READ  ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 
    441 902   IF( ios >  0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist' ) 
     542902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zlim in configuration namelist' ) 
    442543      IF(lwm) WRITE ( numonp, namp5zlim ) 
    443544      ! 
     
    505606      ENDIF 
    506607      ! 
    507       zpsino3 = 2.3 * rno3 
    508       zpsinh4 = 1.8 * rno3 
    509       zpsiuptk = 2.3 * rno3 
     608      ! Metabolic cost of nitrate and ammonium utilisation 
     609      xpsino3  = 2.3 * rno3 
     610      xpsinh4  = 1.8 * rno3 
     611      xpsiuptk = 1.0 / 6.625 
    510612      ! 
    511613      nitrfac(:,:,jpk) = 0._wp 
     
    537639         &      xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk),       & 
    538640         &      xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk),       & 
    539          &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
    540641         &      xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk),       & 
    541642         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       & 
     643         &      xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk),       & 
     644         &      xlimnpp (jpi,jpj,jpk), xlimnpn (jpi,jpj,jpk),       & 
     645         &      xlimnpd (jpi,jpj,jpk),                              & 
     646         &      xlimpics(jpi,jpj,jpk), xqfuncfecp(jpi,jpj,jpk),     & 
    542647         &      fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk),    STAT=ierr(1) ) 
    543648         ! 
Note: See TracChangeset for help on using the changeset viewer.