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 9450 – NEMO

Changeset 9450


Ignore:
Timestamp:
2018-03-30T18:08:29+02:00 (6 years ago)
Author:
aumont
Message:

debug PISCES code

Location:
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r7753 r9450  
    2020   USE p4zmicro        !  Sources and sinks of microzooplankton 
    2121   USE p4zmeso         !  Sources and sinks of mesozooplankton 
    22    USE p5zlim          !  Co-limitations of differents nutrients 
    2322   USE p5zprod         !  Growth rate of the 2 phyto groups 
    2423   USE p5zmort         !  Mortality terms for phytoplankton 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r7753 r9450  
    7373      REAL(wp) :: zaggliga, zaggligb 
    7474      REAL(wp) :: dissol, zligco 
     75      REAL(wp) :: zrfact2 
    7576      CHARACTER (len=25) :: charout 
    7677      REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip 
    7778      REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 
     79      REAL(wp), POINTER, DIMENSION(:,:,:) :: zcoll3d, zscav3d, zlcoll3d 
    7880      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zstrn2 
    7981      !!--------------------------------------------------------------------- 
     
    8385      ! Allocate temporary workspace 
    8486      CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
     87      CALL wrk_alloc( jpi, jpj, jpk, zcoll3d, zscav3d ) 
     88      IF( ln_ligand ) THEN 
     89         CALL wrk_alloc( jpi, jpj, jpk, zlcoll3d ) 
     90      ENDIF 
    8591      zFe3 (:,:,:) = 0. 
    8692      zFeL1(:,:,:) = 0. 
     
    301307               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 
    302308               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 
     309               zscav3d(ji,jj,jk)   = zscave 
     310               zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
    303311               ! 
    304312            END DO 
     
    321329                  ! 
    322330                  zlam1b   = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    323                   zligco   = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) ) 
     331                  IF ( ln_fecolloid) THEN 
     332                     zligco   = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) ) 
     333                  ELSE 
     334                     zligco  = 0.5 * trn(ji,jj,jk,jplgw) 
     335                  ENDIF 
    324336                  zaggliga = zlam1a * xstep * zligco 
    325337                  zaggligb = zlam1b * xstep * zligco 
    326338                  tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 
    327339                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 
     340                  zlcoll3d(ji,jj,jk)  = zaggliga + zaggligb 
    328341               END DO 
    329342            END DO 
     
    340353      IF( lk_iomput ) THEN 
    341354         IF( knt == nrdttrc ) THEN 
     355         zrfact2 = 1.e3 * rfact2r  ! conversion from mol/L/timestep into mol/m3/s 
    342356         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
    343357         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     
    345359         IF( iom_use("Totlig") )  CALL iom_put("Totlig" , ztotlig(:,:,:)       * tmask(:,:,:) )   ! TL 
    346360         IF( iom_use("Biron")  )  CALL iom_put("Biron"  , biron  (:,:,:) * 1e9 * tmask(:,:,:) )   ! biron 
     361         IF( iom_use("FESCAV") )  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     362         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     363         IF( iom_use("LGWCOLL"))  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    347364         IF( ln_fechem ) THEN 
    348365            IF( iom_use("Fe2")  ) CALL iom_put("Fe2"    , zFe2   (:,:,:)       * tmask(:,:,:) )   ! Fe2+ 
     
    361378      ! 
    362379      CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
     380      CALL wrk_dealloc( jpi, jpj, jpk, zscav3d, zcoll3d ) 
    363381      IF( ln_fechem )  THEN 
    364382         CALL wrk_dealloc( jpi, jpj,      zstrn, zstrn2 ) 
    365383         CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
     384      ENDIF 
     385      IF ( ln_ligand ) THEN 
     386         CALL wrk_dealloc( jpi, jpj, jpk, zlcoll3d ) 
    366387      ENDIF 
    367388      ! 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zligand.F90

    r7646 r9450  
    1313   USE sms_pisces      !  PISCES Source Minus Sink variables 
    1414   USE prtctl_trc      !  print control for debugging 
     15   USE iom             !  I/O manager 
    1516 
    1617   IMPLICIT NONE 
     
    4748      INTEGER  ::   ji, jj, jk 
    4849      REAL(wp) ::   zlgwp, zlgwpr, zlgwr, zlablgw, zrfepa, zfepr 
     50      REAL(wp), POINTER, DIMENSION(:,:,:) :: zligrem, zligpr, zrligprod 
    4951      CHARACTER (len=25) :: charout 
    5052      !!--------------------------------------------------------------------- 
    5153      ! 
    5254      IF( nn_timing == 1 )  CALL timing_start('p4z_ligand') 
     55      ! 
     56      CALL wrk_alloc( jpi, jpj, jpk, zligrem, zligpr, zrligprod ) 
    5357      ! 
    5458      ! ------------------------------------------------------------------ 
     
    6872               zlgwpr = prlgw * xstep * etot(ji,jj,jk) * trb(ji,jj,jk,jplgw) * (1. - fr_i(ji,jj)) 
    6973               tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zlgwp - zlgwr - zlgwpr 
     74               zligrem(ji,jj,jk)   = zlgwr 
     75               zligpr(ji,jj,jk)    = zlgwpr 
     76               zrligprod(ji,jj,jk) = zlgwp 
    7077            END DO 
    7178         END DO 
     
    9097         END DO 
    9198      END DO 
     99 
     100      !  Output of some diagnostics variables 
     101      !     --------------------------------- 
     102      IF( lk_iomput ) THEN 
     103         IF( knt == nrdttrc ) THEN 
     104            IF( iom_use( "LIGREM" ) )   CALL iom_put("LIGREM"   , zligrem(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     105            IF( iom_use( "LIGPR" ) )    CALL iom_put("LIGPR"    , zligpr(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     106            IF( iom_use( "LIGPRODR" ) ) CALL iom_put("LPRODR"   , zrligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     107         ENDIF 
     108      ENDIF 
     109      ! 
     110      CALL wrk_dealloc( jpi, jpj, jpk, zligrem, zligpr, zrligprod ) 
    92111 
    93112      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r8533 r9450  
    2020 
    2121   PUBLIC p4z_lim     
     22   PUBLIC p5z_lim 
    2223   PUBLIC p4z_lim_init     
     24   PUBLIC p5z_lim_init 
    2325   PUBLIC p4z_lim_alloc 
    2426 
    2527   !! * Shared module variables 
    2628   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation    
     29   REAL(wp), PUBLIC ::  concpno3    !:  NO3, PO4 half saturation    
    2730   REAL(wp), PUBLIC ::  concdno3    !:  Phosphate half saturation for diatoms   
    2831   REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for phyto   
     32   REAL(wp), PUBLIC ::  concpnh4    !:  NH4 half saturation for phyto   
    2933   REAL(wp), PUBLIC ::  concdnh4    !:  NH4 half saturation for diatoms 
     34   REAL(wp), PUBLIC ::  concnpo4    !:  NH4 half saturation for diatoms 
     35   REAL(wp), PUBLIC ::  concppo4    !:  NH4 half saturation for diatoms 
     36   REAL(wp), PUBLIC ::  concdpo4    !:  NH4 half saturation for diatoms 
    3037   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto  
     38   REAL(wp), PUBLIC ::  concpfer    !:  Iron half saturation for nanophyto  
    3139   REAL(wp), PUBLIC ::  concdfer    !:  Iron half saturation for diatoms   
    3240   REAL(wp), PUBLIC ::  concbno3    !:  NO3 half saturation  for bacteria  
    3341   REAL(wp), PUBLIC ::  concbnh4    !:  NH4 half saturation for bacteria 
     42   REAL(wp), PUBLIC ::  concbpo4    !:  PO4 half saturation for bacteria 
    3443   REAL(wp), PUBLIC ::  xsizedia    !:  Minimum size criteria for diatoms 
     44   REAL(wp), PUBLIC ::  xsizepic    !:  Minimum size criteria for diatoms 
    3545   REAL(wp), PUBLIC ::  xsizephy    !:  Minimum size criteria for nanophyto 
    3646   REAL(wp), PUBLIC ::  xsizern     !:  Size ratio for nanophytoplankton 
     47   REAL(wp), PUBLIC ::  xsizerp     !:  Size ratio for nanophytoplankton 
    3748   REAL(wp), PUBLIC ::  xsizerd     !:  Size ratio for diatoms 
    3849   REAL(wp), PUBLIC ::  xksi1       !:  half saturation constant for Si uptake  
     
    4152   REAL(wp), PUBLIC ::  concbfe     !:  Fe half saturation for bacteria  
    4253   REAL(wp), PUBLIC ::  oxymin      !:  half saturation constant for anoxia 
     54   REAL(wp), PUBLIC ::  qfnopt      !:  optimal Fe quota for nanophyto 
     55   REAL(wp), PUBLIC ::  qfpopt      !:  optimal Fe quota for nanophyto 
     56   REAL(wp), PUBLIC ::  qfdopt      !:  optimal Fe quota for diatoms 
     57   REAL(wp), PUBLIC ::  qnnmin      !:  optimal Fe quota for diatoms 
     58   REAL(wp), PUBLIC ::  qnnmax      !:  optimal Fe quota for diatoms 
     59   REAL(wp), PUBLIC ::  qpnmin      !:  optimal Fe quota for diatoms 
     60   REAL(wp), PUBLIC ::  qpnmax      !:  optimal Fe quota for diatoms 
     61   REAL(wp), PUBLIC ::  qnpmin      !:  optimal Fe quota for diatoms 
     62   REAL(wp), PUBLIC ::  qnpmax      !:  optimal Fe quota for diatoms 
     63   REAL(wp), PUBLIC ::  qppmin      !:  optimal Fe quota for diatoms 
     64   REAL(wp), PUBLIC ::  qppmax      !:  optimal Fe quota for diatoms 
     65   REAL(wp), PUBLIC ::  qndmin      !:  optimal Fe quota for diatoms 
     66   REAL(wp), PUBLIC ::  qndmax      !:  optimal Fe quota for diatoms 
     67   REAL(wp), PUBLIC ::  qpdmin      !:  optimal Fe quota for diatoms 
     68   REAL(wp), PUBLIC ::  qpdmax      !:  optimal Fe quota for diatoms 
     69   REAL(wp), PUBLIC ::  qfnmax      !:  optimal Fe quota for diatoms 
     70   REAL(wp), PUBLIC ::  qfpmax      !:  optimal Fe quota for diatoms 
     71   REAL(wp), PUBLIC ::  qfdmax      !:  optimal Fe quota for diatoms 
    4372   REAL(wp), PUBLIC ::  qnfelim     !:  optimal Fe quota for nanophyto 
    4473   REAL(wp), PUBLIC ::  qdfelim     !:  optimal Fe quota for diatoms 
    4574   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio  
     75   REAL(wp), PUBLIC ::  zpsinh4 
     76   REAL(wp), PUBLIC ::  zpsino3 
     77   REAL(wp), PUBLIC ::  zpsiuptk 
    4678 
    4779   !!* Phytoplankton limitation terms 
    4880   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
     81   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: ??? 
    4982   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
    5083   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
     84   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: ??? 
    5185   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
    5286   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: ??? 
    5388   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
     89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: ??? 
     90   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: ??? 
     91   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: ??? 
     92   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: ??? 
     93   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: ??? 
     94   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: ??? 
    5495   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
     96   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: ??? 
    5597   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
    5698   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
     99   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: ??? 
    57100   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
    58101   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
     102   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi2    !: ??? 
    59103   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: ?? 
    60104   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: ?? 
    61105   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
    62106   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
     107   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk 
     108   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk 
     109   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk 
     110 
     111   !!*  Allometric variations of the quotas 
     112   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmin    !: ??? 
     113   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnnmax    !: ??? 
     114   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmin    !: ??? 
     115   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpnmax    !: ??? 
     116   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmin    !: ??? 
     117   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqnpmax    !: ??? 
     118   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmin    !: ??? 
     119   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqppmax    !: ??? 
     120   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmin    !: ??? 
     121   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqndmax    !: ??? 
     122   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmin    !: ??? 
     123   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:,:)  ::   xqpdmax    !: ? 
    63124 
    64125   ! Coefficient for iron limitation 
    65    REAL(wp) ::  xcoef1   = 0.0016  / 55.85   
     126   REAL(wp) ::  xcoef1   = 0.00167  / 55.85   
    66127   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
    67128   REAL(wp) ::  xcoef3   = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5  
     
    227288      ! 
    228289   END SUBROUTINE p4z_lim 
     290 
     291 
     292   SUBROUTINE p5z_lim( kt, knt ) 
     293      !!--------------------------------------------------------------------- 
     294      !!                     ***  ROUTINE p5z_lim  *** 
     295      !! 
     296      !! ** Purpose :   Compute the co-limitations by the various nutrients 
     297      !!              for the various phytoplankton species 
     298      !! 
     299      !! ** Method  : - ??? 
     300      !!--------------------------------------------------------------------- 
     301      ! 
     302      INTEGER, INTENT(in)  :: kt, knt 
     303      ! 
     304      INTEGER  ::   ji, jj, jk 
     305      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
     306      REAL(wp) ::   z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1 
     307      REAL(wp) ::   zratio, zration, zratiof, znutlim, zfalim 
     308      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4 
     309      REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe 
     310      REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf 
     311      REAL(wp) ::   fapico, fapicop, fapicof 
     312      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl 
     313      REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 
     314      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 
     315      !!--------------------------------------------------------------------- 
     316      ! 
     317      !!--------------------------------------------------------------------- 
     318      ! 
     319      IF( nn_timing == 1 )  CALL timing_start('p5z_lim') 
     320      ! 
     321      zratchl = 6.0 
     322      ! 
     323      DO jk = 1, jpkm1 
     324         DO jj = 1, jpj 
     325            DO ji = 1, jpi 
     326               !  
     327               ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
     328               !------------------------------------- 
     329               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
     330               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
     331               zferlim = MIN( zferlim, 7e-11 ) 
     332               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
     333 
     334               ! Computation of the mean relative size of each community 
     335               ! ------------------------------------------------------- 
     336               z1_trnphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     337               z1_trnpic   = 1. / ( trb(ji,jj,jk,jppic) + rtrn ) 
     338               z1_trndia   = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     339               znanochl = trb(ji,jj,jk,jpnch) * z1_trnphy 
     340               zpicochl = trb(ji,jj,jk,jppch) * z1_trnpic 
     341               zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia 
     342 
     343               ! Computation of a variable Ks for iron on diatoms taking into account 
     344               ! that increasing biomass is made of generally bigger cells 
     345               !------------------------------------------------ 
     346               zsized            = sized(ji,jj,jk)**0.81 
     347               zconcdfe          = concdfer * zsized 
     348               zconc1d           = concdno3 * zsized 
     349               zconc1dnh4        = concdnh4 * zsized 
     350               zconc0dpo4        = concdpo4 * zsized 
     351 
     352               zsizep            = 1. 
     353               zconcpfe          = concpfer * zsizep 
     354               zconc0p           = concpno3 * zsizep 
     355               zconc0pnh4        = concpnh4 * zsizep 
     356               zconc0ppo4        = concppo4 * zsizep 
     357 
     358               zsizen            = 1. 
     359               zconcnfe          = concnfer * zsizen 
     360               zconc0n           = concnno3 * zsizen 
     361               zconc0nnh4        = concnnh4 * zsizen 
     362               zconc0npo4        = concnpo4 * zsizen 
     363 
     364               ! Allometric variations of the minimum and maximum quotas 
     365               ! From Talmy et al. (2014) and Maranon et al. (2013) 
     366               ! ------------------------------------------------------- 
     367               xqnnmin(ji,jj,jk) = qnnmin 
     368               xqnnmax(ji,jj,jk) = qnnmax 
     369               xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 
     370               xqndmax(ji,jj,jk) = qndmax 
     371               xqnpmin(ji,jj,jk) = qnpmin 
     372               xqnpmax(ji,jj,jk) = qnpmax 
     373 
     374               ! Computation of the optimal allocation parameters 
     375               ! Based on the different papers by Pahlow et al., and Smith et al. 
     376               ! ----------------------------------------------------------------- 
     377               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4,    & 
     378                 &         trb(ji,jj,jk,jpno3) / zconc0n) 
     379               fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     380               znutlim = trb(ji,jj,jk,jppo4) / zconc0npo4 
     381               fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     382               znutlim = biron(ji,jj,jk) / zconcnfe 
     383               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     384               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4,    & 
     385                 &         trb(ji,jj,jk,jpno3) / zconc0p) 
     386               fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     387               znutlim = trb(ji,jj,jk,jppo4) / zconc0ppo4 
     388               fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     389               znutlim = biron(ji,jj,jk) / zconcpfe 
     390               fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     391               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4,    & 
     392                 &         trb(ji,jj,jk,jpno3) / zconc1d ) 
     393               fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     394               znutlim = trb(ji,jj,jk,jppo4) / zconc0dpo4 
     395               fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     396               znutlim = biron(ji,jj,jk) / zconcdfe 
     397               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     398               ! 
     399               ! Michaelis-Menten Limitation term for nutrients Small bacteria 
     400               ! ------------------------------------------------------------- 
     401               zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 
     402               zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) 
     403               ! 
     404               zlim1    = zbactno3 + zbactnh4 
     405               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbpo4) 
     406               zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 
     407               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) ) 
     408               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
     409               xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 
     410               ! 
     411               ! Michaelis-Menten Limitation term for nutrients Small flagellates 
     412               ! ----------------------------------------------- 
     413               zfalim = (1.-fanano) / fanano 
     414               xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) 
     415               xnanono3(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trb(ji,jj,jk,jpno3) )  & 
     416               &                    * (1. - xnanonh4(ji,jj,jk)) 
     417               ! 
     418               zfalim = (1.-fananop) / fananop 
     419               xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) 
     420               xnanodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   & 
     421               &                    * ( 1.0 - xnanopo4(ji,jj,jk) ) 
     422               xnanodop(ji,jj,jk) = 0. 
     423               ! 
     424               zfalim = (1.-fananof) / fananof 
     425               xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 
     426               ! 
     427               zratiof   = trb(ji,jj,jk,jpnfe) * z1_trnphy 
     428               zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 
     429               ! 
     430               zration = trb(ji,jj,jk,jpnph) * z1_trnphy 
     431               zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 
     432               fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
     433               &                   * MAX(0., (1. - zratchl * znanochl / 12. ) ) 
     434               ! 
     435               zlim1    = max(0., (zration - 2. * xqnnmin(ji,jj,jk) )  & 
     436               &          / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  & 
     437               &          / (zration + rtrn) 
     438               zlim3    = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 
     439               xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 
     440               xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     441               ! 
     442               ! Michaelis-Menten Limitation term for nutrients picophytoplankton 
     443               ! ---------------------------------------------------------------- 
     444               zfalim = (1.-fapico) / fapico 
     445               xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) 
     446               xpicono3(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trb(ji,jj,jk,jpno3) )  & 
     447               &                    * (1. - xpiconh4(ji,jj,jk)) 
     448               ! 
     449               zfalim = (1.-fapicop) / fapicop 
     450               xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) 
     451               xpicodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   & 
     452               &                    * ( 1.0 - xpicopo4(ji,jj,jk) ) 
     453               xpicodop(ji,jj,jk) = 0. 
     454               ! 
     455               zfalim = (1.-fapicof) / fapicof 
     456               xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 
     457               ! 
     458               zratiof   = trb(ji,jj,jk,jppfe) * z1_trnpic 
     459               zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 
     460               ! 
     461               zration   = trb(ji,jj,jk,jpnpi) * z1_trnpic 
     462               zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 
     463               fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
     464               &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 
     465               ! 
     466               zlim1    = max(0., (zration - 2. * xqnpmin(ji,jj,jk) )  & 
     467               &          / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  & 
     468               &          / (zration + rtrn) 
     469               zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 
     470               xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 
     471               xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
     472               ! 
     473               !   Michaelis-Menten Limitation term for nutrients Diatoms 
     474               !   ------------------------------------------------------ 
     475               zfalim = (1.-fadiat) / fadiat 
     476               xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) 
     477               xdiatno3(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trb(ji,jj,jk,jpno3) )  & 
     478               &                    * (1. - xdiatnh4(ji,jj,jk)) 
     479               ! 
     480               zfalim = (1.-fadiatp) / fadiatp 
     481               xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) 
     482               xdiatdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )  & 
     483               &                    * ( 1.0 - xdiatpo4(ji,jj,jk) ) 
     484               xdiatdop(ji,jj,jk) = 0. 
     485               ! 
     486               zfalim = (1.-fadiatf) / fadiatf 
     487               xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 
     488               ! 
     489               zratiof   = trb(ji,jj,jk,jpdfe) * z1_trndia 
     490               zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 
     491               ! 
     492               zration   = trb(ji,jj,jk,jpndi) * z1_trndia 
     493               zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 
     494               fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
     495               &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 
     496               ! 
     497               zlim1    = max(0., (zration - 2. * xqndmin(ji,jj,jk) )    & 
     498               &          / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) )   & 
     499               &          * xqndmax(ji,jj,jk) / (zration + rtrn) 
     500               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
     501               zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 
     502               xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 
     503               xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 
     504               xlimsi(ji,jj,jk)  = MIN( 1., zlim3, zlim4 ) 
     505               xlimsi2(ji,jj,jk)  = MIN( 1., zlim1, zlim4 ) 
     506            END DO 
     507         END DO 
     508      END DO 
     509      ! 
     510      ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. 
     511      ! The relative contribution of three fonctional pools are computed: light harvesting apparatus,  
     512      ! nutrient uptake pool and assembly machinery. DNA is assumed to represent 1% of the dry mass of  
     513      ! phytoplankton (see Daines et al., 2013).  
     514      ! -------------------------------------------------------------------------------------------------- 
     515      DO jk = 1, jpkm1 
     516         DO jj = 1, jpj 
     517            DO ji = 1, jpi 
     518               ! Size estimation of nanophytoplankton 
     519               ! ------------------------------------ 
     520               zfvn = zpsiuptk / rno3 * fvnuptk(ji,jj,jk) 
     521               sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
     522 
     523               ! N/P ratio of nanophytoplankton 
     524               ! ------------------------------ 
     525               zfuptk = 0.23 * zfvn 
     526               zrpho = 2.24 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 15. + rtrn ) 
     527               zrass = 1. - 0.2 - zrpho - zfuptk 
     528               xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. + 0.13 
     529               xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn )  
     530               xqpnmin(ji,jj,jk) = qpnmin 
     531 
     532               ! Size estimation of picophytoplankton 
     533               ! ------------------------------------ 
     534               zfvn = zpsiuptk / rno3  * fvpuptk(ji,jj,jk) 
     535               sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
     536 
     537               ! N/P ratio of picophytoplankton 
     538               ! ------------------------------ 
     539               zfuptk = 0.35 * zfvn 
     540               zrpho = 2.24 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 15. + rtrn ) 
     541               zrass = 1. - 0.4 - zrpho - zfuptk 
     542               xqppmax(ji,jj,jk) =  (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 10.9 * 16. + 0.13 
     543               xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn )  
     544               xqppmin(ji,jj,jk) = qppmin 
     545 
     546               ! Size estimation of diatoms 
     547               ! -------------------------- 
     548               zfvn = zpsiuptk / rno3 * fvduptk(ji,jj,jk) 
     549               sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 
     550!               zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 
     551!               sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 
     552 
     553               ! N/P ratio of diatoms 
     554               ! -------------------- 
     555               zfuptk = 0.2 * zfvn 
     556               zrpho = 2.24 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 15. + rtrn ) 
     557               zrass = 1. - 0.2 - zrpho - zfuptk 
     558               xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. + 0.13 
     559               xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     560               xqpdmin(ji,jj,jk) = qpdmin * sized(ji,jj,jk)**(-0.27) 
     561 
     562            END DO 
     563         END DO 
     564      END DO 
     565 
     566      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     567      ! -------------------------------------------------------------------- 
     568      DO jk = 1, jpkm1 
     569         DO jj = 1, jpj 
     570            DO ji = 1, jpi 
     571               zlim1 =  trb(ji,jj,jk,jpnh4) / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) + trb(ji,jj,jk,jpno3)    & 
     572               &        / ( trb(ji,jj,jk,jpno3) + concnno3 ) * ( 1.0 - trb(ji,jj,jk,jpnh4)   & 
     573               &        / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) ) 
     574               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnpo4 ) 
     575               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  1.E-10 ) 
     576               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
     577               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
     578               zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 
     579 
     580!               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
     581               xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)                & 
     582               &                   * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 )   & 
     583                  &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
     584                  &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 
     585               xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 
     586            END DO 
     587         END DO 
     588      END DO 
     589      ! 
     590      DO jk = 1, jpkm1 
     591         DO jj = 1, jpj 
     592            DO ji = 1, jpi 
     593               ! denitrification factor computed from O2 levels 
     594               nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    & 
     595                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  ) 
     596               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
     597            END DO 
     598         END DO 
     599      END DO 
     600      ! 
     601      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics 
     602        IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht 
     603        IF( iom_use( "LNnut"   ) ) CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     604        IF( iom_use( "LPnut"   ) ) CALL iom_put( "LPnut"  , xlimpic(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     605        IF( iom_use( "LDnut"   ) ) CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     606        IF( iom_use( "LNFe"    ) ) CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     607        IF( iom_use( "LPFe"    ) ) CALL iom_put( "LPFe"   , xlimpfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     608        IF( iom_use( "LDFe"    ) ) CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     609        IF( iom_use( "SIZEN"   ) ) CALL iom_put( "SIZEN"  , sizen(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     610        IF( iom_use( "SIZEP"   ) ) CALL iom_put( "SIZEP"  , sizep(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     611        IF( iom_use( "SIZED"   ) ) CALL iom_put( "SIZED"  , sized(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     612      ENDIF 
     613      ! 
     614      IF( nn_timing == 1 )  CALL timing_stop('p5z_lim') 
     615      ! 
     616   END SUBROUTINE p5z_lim 
    229617 
    230618   SUBROUTINE p4z_lim_init 
     
    286674   END SUBROUTINE p4z_lim_init 
    287675 
     676   SUBROUTINE p5z_lim_init 
     677 
     678      !!---------------------------------------------------------------------- 
     679      !!                  ***  ROUTINE p5z_lim_init  *** 
     680      !! 
     681      !! ** Purpose :   Initialization of nutrient limitation parameters 
     682      !! 
     683      !! ** Method  :   Read the nampislim and nampisquota namelists and check 
     684      !!      the parameters called at the first timestep (nittrc000) 
     685      !! 
     686      !! ** input   :   Namelist nampislim 
     687      !! 
     688      !!---------------------------------------------------------------------- 
     689 
     690      NAMELIST/namp5zlim/ concnno3, concpno3, concdno3, concnnh4, concpnh4, concdnh4,  & 
     691         &                concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4,   & 
     692         &                concdpo4, concbno3, concbnh4, concbpo4, xsizedia, xsizepic,  & 
     693         &                xsizephy, xsizern, xsizerp, xsizerd, xksi1, xksi2, xkdoc,    & 
     694         &                caco3r, oxymin 
     695 
     696      NAMELIST/namp5zquota/ qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin,      & 
     697         &                  qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax,  & 
     698         &                  qfnopt, qfpopt, qfdopt 
     699 
     700 
     701      INTEGER :: ios                 ! Local integer output status for namelist read 
     702 
     703      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 
     704      READ  ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 
     705901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist', lwp ) 
     706 
     707      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters  
     708      READ  ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 
     709902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist', lwp ) 
     710      IF(lwm) WRITE ( numonp, namp5zlim ) 
     711 
     712      IF(lwp) THEN                         ! control print 
     713         WRITE(numout,*) ' ' 
     714         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zlim' 
     715         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     716         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r 
     717         WRITE(numout,*) '    NO3 half saturation of nanophyto         concnno3  = ', concnno3 
     718         WRITE(numout,*) '    NO3 half saturation of picophyto         concpno3  = ', concpno3 
     719         WRITE(numout,*) '    NO3 half saturation of diatoms           concdno3  = ', concdno3 
     720         WRITE(numout,*) '    NH4 half saturation for phyto            concnnh4  = ', concnnh4 
     721         WRITE(numout,*) '    NH4 half saturation for pico             concpnh4  = ', concpnh4 
     722         WRITE(numout,*) '    NH4 half saturation for diatoms          concdnh4  = ', concdnh4 
     723         WRITE(numout,*) '    PO4 half saturation for phyto            concnpo4  = ', concnpo4 
     724         WRITE(numout,*) '    PO4 half saturation for pico             concppo4  = ', concppo4 
     725         WRITE(numout,*) '    PO4 half saturation for diatoms          concdpo4  = ', concdpo4 
     726         WRITE(numout,*) '    half saturation constant for Si uptake   xksi1     = ', xksi1 
     727         WRITE(numout,*) '    half saturation constant for Si/C        xksi2     = ', xksi2 
     728         WRITE(numout,*) '    half-sat. of DOC remineralization        xkdoc     = ', xkdoc 
     729         WRITE(numout,*) '    Iron half saturation for nanophyto       concnfer  = ', concnfer 
     730         WRITE(numout,*) '    Iron half saturation for picophyto       concpfer  = ', concpfer 
     731         WRITE(numout,*) '    Iron half saturation for diatoms         concdfer  = ', concdfer 
     732         WRITE(numout,*) '    size ratio for nanophytoplankton         xsizern   = ', xsizern 
     733         WRITE(numout,*) '    size ratio for picophytoplankton         xsizerp   = ', xsizerp 
     734         WRITE(numout,*) '    size ratio for diatoms                   xsizerd   = ', xsizerd 
     735         WRITE(numout,*) '    NO3 half saturation of bacteria          concbno3  = ', concbno3 
     736         WRITE(numout,*) '    NH4 half saturation for bacteria         concbnh4  = ', concbnh4 
     737         WRITE(numout,*) '    Minimum size criteria for diatoms        xsizedia  = ', xsizedia 
     738         WRITE(numout,*) '    Minimum size criteria for picophyto      xsizepic  = ', xsizepic 
     739         WRITE(numout,*) '    Minimum size criteria for nanophyto      xsizephy  = ', xsizephy 
     740         WRITE(numout,*) '    Fe half saturation for bacteria          concbfe   = ', concbfe 
     741         WRITE(numout,*) '    halk saturation constant for anoxia       oxymin   =' , oxymin 
     742      ENDIF 
     743 
     744      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 
     745      READ  ( numnatp_ref, namp5zquota, IOSTAT = ios, ERR = 903) 
     746903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in reference namelist', lwp ) 
     747 
     748      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters  
     749      READ  ( numnatp_cfg, namp5zquota, IOSTAT = ios, ERR = 904 ) 
     750904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in configuration namelist', lwp ) 
     751      IF(lwm) WRITE ( numonp, namp5zquota ) 
     752 
     753      IF(lwp) THEN                         ! control print 
     754         WRITE(numout,*) ' ' 
     755         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zquota' 
     756         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     757         WRITE(numout,*) '    optimal Fe quota for nano.               qfnopt    = ', qfnopt 
     758         WRITE(numout,*) '    optimal Fe quota for pico.               qfpopt    = ', qfpopt 
     759         WRITE(numout,*) '    Optimal Fe quota for diatoms             qfdopt    = ', qfdopt 
     760         WRITE(numout,*) '    Minimal N quota for nano                 qnnmin    = ', qnnmin 
     761         WRITE(numout,*) '    Maximal N quota for nano                 qnnmax    = ', qnnmax 
     762         WRITE(numout,*) '    Minimal P quota for nano                 qpnmin    = ', qpnmin 
     763         WRITE(numout,*) '    Maximal P quota for nano                 qpnmax    = ', qpnmax 
     764         WRITE(numout,*) '    Minimal N quota for pico                 qnpmin    = ', qnpmin 
     765         WRITE(numout,*) '    Maximal N quota for pico                 qnpmax    = ', qnpmax 
     766         WRITE(numout,*) '    Minimal P quota for pico                 qppmin    = ', qppmin 
     767         WRITE(numout,*) '    Maximal P quota for pico                 qppmax    = ', qppmax 
     768         WRITE(numout,*) '    Minimal N quota for diatoms              qndmin    = ', qndmin 
     769         WRITE(numout,*) '    Maximal N quota for diatoms              qndmax    = ', qndmax 
     770         WRITE(numout,*) '    Minimal P quota for diatoms              qpdmin    = ', qpdmin 
     771         WRITE(numout,*) '    Maximal P quota for diatoms              qpdmax    = ', qpdmax 
     772         WRITE(numout,*) '    Maximal Fe quota for nanophyto.          qfnmax    = ', qfnmax 
     773         WRITE(numout,*) '    Maximal Fe quota for picophyto.          qfpmax    = ', qfpmax 
     774         WRITE(numout,*) '    Maximal Fe quota for diatoms             qfdmax    = ', qfdmax 
     775      ENDIF 
     776 
     777      zpsino3 = 2.3 * rno3 
     778      zpsinh4 = 1.8 * rno3 
     779      zpsiuptk = 2.3 * rno3 
     780      ! 
     781      nitrfac (:,:,:) = 0._wp 
     782      ! 
     783   END SUBROUTINE p5z_lim_init 
     784 
    288785   INTEGER FUNCTION p4z_lim_alloc() 
    289786      !!---------------------------------------------------------------------- 
     
    291788      !!---------------------------------------------------------------------- 
    292789      USE lib_mpp , ONLY: ctl_warn 
     790      INTEGER ::   ierr(3)        ! Local variables 
    293791      !!---------------------------------------------------------------------- 
     792      ierr(:) = 0 
    294793 
    295794      !*  Biological arrays for phytoplankton growth 
     
    301800         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
    302801         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
    303          &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
     802         &      xlimsi  (jpi,jpj,jpk), STAT=ierr(1) ) 
     803 
     804      IF (ln_p5z) THEN 
     805      !*  Biological arrays for phytoplankton growth 
     806         ALLOCATE( xpicono3(jpi,jpj,jpk), xpiconh4(jpi,jpj,jpk),       & 
     807         &      xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk),       & 
     808         &      xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk),       & 
     809         &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
     810         &      xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk),       & 
     811         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       & 
     812         &      fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk),       & 
     813         &      xlimsi2 (jpi,jpj,jpk), STAT=ierr(2) ) 
     814 
     815      !*  Minimum/maximum quotas of phytoplankton 
     816         ALLOCATE( xqnnmin (jpi,jpj,jpk), xqnnmax(jpi,jpj,jpk),       & 
     817         &      xqpnmin (jpi,jpj,jpk), xqpnmax(jpi,jpj,jpk),       & 
     818         &      xqnpmin (jpi,jpj,jpk), xqnpmax(jpi,jpj,jpk),       & 
     819         &      xqppmin (jpi,jpj,jpk), xqppmax(jpi,jpj,jpk),       & 
     820         &      xqndmin (jpi,jpj,jpk), xqndmax(jpi,jpj,jpk),       & 
     821         &      xqpdmin (jpi,jpj,jpk), xqpdmax(jpi,jpj,jpk),     STAT=ierr(3) ) 
     822      ENDIF 
     823      ! 
     824 
     825      p4z_lim_alloc = MAXVAL( ierr )  
    304826      ! 
    305827      IF( p4z_lim_alloc /= 0 ) CALL ctl_warn('p4z_lim_alloc : failed to allocate arrays.') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r7753 r9450  
    131131         IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3            * tmask(:,:,:) ) 
    132132         IF( iom_use( "DCAL"   ) ) CALL iom_put( "DCAL"  , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 
     133         IF( iom_use( "AOU"    ) )  CALL iom_put( "AOU"  , MAX(0., (chemo2(:,:,:) - trb(:,:,:,jpoxy) ) ) * 1.E6 * tmask(:,:,:) ) 
    133134      ENDIF 
    134135      ! 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r8533 r9450  
    7272      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    7373      CHARACTER (len=25) :: charout 
    74       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
     74      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2 
     75      REAL(wp), POINTER, DIMENSION(:,:,:) :: zz2ligprod 
    7576 
    7677      !!--------------------------------------------------------------------- 
     
    7879      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    7980      ! 
    80       CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     81      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 
    8182      zgrazing(:,:,:) = 0._wp 
     83      zfezoo2 (:,:,:) = 0._wp 
     84      ! 
     85      IF (ln_ligand) THEN 
     86         CALL wrk_alloc( jpi, jpj, jpk, zz2ligprod ) 
     87         zz2ligprod(:,:,:) = 0._wp 
     88      ENDIF 
    8289 
    8390      DO jk = 1, jpkm1 
     
    176183               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 
    177184               ! 
    178                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 
     185               IF( ln_ligand ) THEN 
     186                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 
     187                  zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 
     188               ENDIF 
    179189               ! 
    180190               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    181191               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 
     192               zfezoo2(ji,jj,jk) = zgrafer2 
    182193               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
    183194               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig               
     
    229240            CALL iom_put( "PCAL", zw3d )   
    230241         ENDIF 
     242         IF( iom_use( "FEZOO2" ) ) THEN 
     243            zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     244            CALL iom_put( "FEZOO2", zw3d ) 
     245         ENDIF 
     246         IF( iom_use( "LPRODZ2" ) .AND. ln_ligand )  THEN 
     247            zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     248            CALL iom_put( "LPRODZ2"  , zw3d ) 
     249         ENDIF 
    231250         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    232251      ENDIF 
     
    238257      ENDIF 
    239258      ! 
    240       CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     259      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 
     260      IF ( ln_ligand ) CALL wrk_dealloc( jpi, jpj, jpk, zz2ligprod ) 
    241261      ! 
    242262      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r8533 r9450  
    7171      REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    7272      REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
    73       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
     73      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo 
     74      REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod 
    7475      CHARACTER (len=25) :: charout 
    7576      !!--------------------------------------------------------------------- 
     
    7778      IF( nn_timing == 1 )  CALL timing_start('p4z_micro') 
    7879      ! 
    79       CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     80      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo ) 
     81      IF (ln_ligand) THEN 
     82         CALL wrk_alloc( jpi, jpj, jpk, zzligprod ) 
     83         zzligprod(:,:,:) = 0._wp 
     84      ENDIF 
    8085      ! 
    8186      DO jk = 1, jpkm1 
     
    139144               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 
    140145               ! 
    141                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     146               IF( ln_ligand ) THEN 
     147                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     148                  zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 
     149               ENDIF 
    142150               ! 
    143151               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    144152               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
     153               zfezoo(ji,jj,jk) = zgrafer 
    145154               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 
    146155               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 
     
    184193              CALL iom_put( "GRAZ1", zw3d ) 
    185194           ENDIF 
     195           IF( iom_use( "FEZOO" ) ) THEN 
     196              zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     197              CALL iom_put( "FEZOO", zw3d ) 
     198           ENDIF 
     199           IF( iom_use( "LPRODZ" ) .AND. ln_ligand )  THEN 
     200              zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     201              CALL iom_put( "LPRODZ"  , zw3d ) 
     202           ENDIF 
    186203           CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    187204         ENDIF 
     
    194211      ENDIF 
    195212      ! 
    196       CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     213      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo ) 
     214      IF (ln_ligand) CALL wrk_dealloc( jpi, jpj, jpk, zzligprod ) 
    197215      ! 
    198216      IF( nn_timing == 1 )  CALL timing_stop('p4z_micro') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zpoc.F90

    r7753 r9450  
    6767      REAL(wp), POINTER, DIMENSION(:,:,:)   :: zremipoc, zremigoc, zorem3, ztremint 
    6868      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: alphag 
     69      REAL(wp), POINTER, DIMENSION(:,:,:)   :: zfolimi 
    6970      !!--------------------------------------------------------------------- 
    7071      ! 
     
    7475      CALL wrk_alloc( jpi, jpj,      totprod,  totthick, totcons ) 
    7576      CALL wrk_alloc( jpi, jpj, jpk, zremipoc, zremigoc, zorem3, ztremint ) 
     77      CALL wrk_alloc( jpi, jpj, jpk, zfolimi ) 
    7678      ALLOCATE( alphag(jpi,jpj,jpk,jcpoc) ) 
    7779 
     
    98100      orem  (:,:,:)   = 0. 
    99101      ztremint(:,:,:) = 0. 
     102      zfolimi(:,:,:)  = 0. 
    100103 
    101104      DO jn = 1, jcpoc 
     
    217220                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem2 
    218221                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer2 
     222                  zfolimi(ji,jj,jk)   = zofer2 
    219223               END DO 
    220224            END DO 
     
    247251                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zopop2 * (1. + solgoc) 
    248252                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 * (1. + solgoc) 
     253                  zfolimi(ji,jj,jk)   = zofer2 
    249254               END DO 
    250255            END DO 
     
    422427                    tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 
    423428                    tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
     429                    zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
    424430                  ENDIF 
    425431               END DO 
     
    447453                tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop  
    448454                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer  
     455                zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
    449456             END DO 
    450457           END DO 
     
    457464          CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
    458465          CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
     466          CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation rate 
    459467        ENDIF 
    460468     ENDIF 
     
    468476      CALL wrk_dealloc( jpi, jpj,      totprod,  totthick, totcons ) 
    469477      CALL wrk_dealloc( jpi, jpj, jpk, zremipoc, zremigoc, zorem3, ztremint ) 
     478      CALL wrk_dealloc( jpi, jpj, jpk, zfolimi ) 
    470479      DEALLOCATE( alphag ) 
    471480      ! 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r7753 r9450  
    4141   REAL(wp), PUBLIC ::  grosip          !: 
    4242 
    43    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmax    !: optimal production = f(temperature) 
     43   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmaxn    !: optimal production = f(temperature) 
    4444   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto 
    4545   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatomee 
     
    8383      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewd 
    8484      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 
     85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpligprod1, zpligprod2 
    8586      !!--------------------------------------------------------------------- 
    8687      ! 
     
    9293      CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
    9394      CALL wrk_alloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
     95     IF( ln_ligand ) THEN 
     96        CALL wrk_alloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 
     97     ENDIF 
    9498      ! 
    9599      zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 
     
    100104 
    101105      ! Computation of the optimal production 
    102       prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)  
     106      prmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)  
     107 
     108      ! Assign the reference growth rate that is used in implicit  
     109      ! biological processes 
     110      prmax(:,:,:)  = prmaxn(:,:,:) 
    103111 
    104112      ! compute the day length depending on latitude and the day 
     
    132140      END DO 
    133141 
    134       zprbio(:,:,:) = prmax(:,:,:) * zmxl_fac(:,:,:) 
     142      zprbio(:,:,:) = prmaxn(:,:,:) * zmxl_fac(:,:,:) 
    135143      zprdia(:,:,:) = zprbio(:,:,:) 
    136144 
     
    173181                      !  Computation of production function for Chlorophyll 
    174182                      !-------------------------------------------------- 
    175                       zpislopen = zpislopeadn(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
    176                       zpisloped = zpislopeadd(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
    177                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
    178                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
     183                      zpislopen = zpislopeadn(ji,jj,jk) / ( prmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     184                      zpisloped = zpislopeadd(ji,jj,jk) / ( prmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     185                      zprnch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     186                      zprdch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    179187                  ENDIF 
    180188               END DO 
     
    196204                      zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    197205                      zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    198                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
    199                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
     206                      zprnch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     207                      zprdch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    200208                  ENDIF 
    201209               END DO 
     
    210218            DO ji = 1, jpi 
    211219                zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   & 
    212                 &      * prmax(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 
     220                &      * prmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 
    213221                quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
    214222                zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) )   & 
    215                 &      * prmax(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 
     223                &      * prmaxn(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 
    216224                quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
    217225            END DO 
     
    231239                   !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
    232240                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    233                   zsilim = MIN( zprdia(ji,jj,jk) / ( prmax(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
     241                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxn(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    234242                  zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    235243                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
     
    253261               zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    254262               zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    255                zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    256                zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    257263            END DO 
    258264         END DO 
     
    270276                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 
    271277                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    272                   zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     278                  zprofen(ji,jj,jk) = fecnm * prmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    273279                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    274280                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
     
    280286                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 
    281287                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    282                   zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     288                  zprofed(ji,jj,jk) = fecdm * prmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    283289                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    284290                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
     
    355361                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    356362                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 
     363                    zpligprod1(ji,jj,jk) = zdocprod * ldocp 
     364                    zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 
    357365                 ENDIF 
    358366              END DO 
     
    398406          ENDIF 
    399407          IF( iom_use( "Mumax" ) )  THEN 
    400               zw3d(:,:,:) = prmax(:,:,:) * tmask(:,:,:)   ! Maximum growth rate 
     408              zw3d(:,:,:) = prmaxn(:,:,:) * tmask(:,:,:)   ! Maximum growth rate 
    401409              CALL iom_put( "Mumax"  , zw3d ) 
    402410          ENDIF 
     
    409417          ENDIF 
    410418          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN 
    411               zw3d(:,:,:) = zprbio (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     419              zw3d(:,:,:) = zprbio (:,:,:) / (prmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
    412420              CALL iom_put( "LNlight"  , zw3d ) 
    413421              ! 
    414               zw3d(:,:,:) =  zprdia (:,:,:) / (prmax(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     422              zw3d(:,:,:) =  zprdia (:,:,:) / (prmaxn(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
    415423              CALL iom_put( "LDlight"  , zw3d ) 
    416424          ENDIF 
     
    426434              zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:)  ! total biogenic iron production 
    427435              CALL iom_put( "TPBFE"  , zw3d ) 
     436          ENDIF 
     437          IF( iom_use( "LPRODP" ) )  THEN 
     438              zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     439              CALL iom_put( "LPRODP"  , zw3d ) 
     440          ENDIF 
     441          IF( iom_use( "LDETP" ) )  THEN 
     442              zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     443              CALL iom_put( "LDETP"  , zw3d ) 
    428444          ENDIF 
    429445          IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN   
     
    485501     CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
    486502     CALL wrk_dealloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
     503     IF( ln_ligand ) THEN 
     504        CALL wrk_dealloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 
     505     ENDIF 
    487506     ! 
    488507     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
     
    550569      !!                     ***  ROUTINE p4z_prod_alloc  *** 
    551570      !!---------------------------------------------------------------------- 
    552       ALLOCATE( prmax(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 
     571      ALLOCATE( prmaxn(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 
    553572      ! 
    554573      IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r8533 r9450  
    1616   USE sms_pisces      !  PISCES Source Minus Sink variables 
    1717   USE p4zche          !  chemical model 
    18    USE p4zprod         !  Growth rate of the 2 phyto groups 
    1918   USE p4zlim 
    2019   USE prtctl_trc      !  print control for debugging 
     
    7069      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac 
    7170      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zfacsi, zw3d, zfacsib 
     71      REAL(wp), POINTER, DIMENSION(:,:,:) :: zfebact, zdepeff 
    7272      !!--------------------------------------------------------------------- 
    7373      ! 
     
    7676      ! Allocate temporary workspace 
    7777      CALL wrk_alloc( jpi, jpj,      ztempbac                  ) 
    78       CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
     78      CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib, zfebact, zdepeff ) 
    7979 
    8080      ! Initialisation of temprary arrys 
    8181      zdepprod(:,:,:) = 1._wp 
     82      zdepeff (:,:,:) = 0.3_wp 
    8283      ztempbac(:,:)   = 0._wp 
     84      zfebact (:,:,:) = 0._wp 
    8385      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
    8486      zfacsi(:,:,:)   = xsilab 
     
    100102                  zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 
    101103                  zdepprod(ji,jj,jk) = zdepmin**0.273 
     104                  zdepeff (ji,jj,jk) = 0.3 * zdepmin**0.3 
    102105               ENDIF 
    103106            END DO 
     
    220223               zbactfer = feratb *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    221224                  &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    222                   &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    223                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 
    224                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.12 
    225                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.04 
     225                  &              * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     226               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 
     227               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 
     228               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.08 
     229               zfebact(ji,jj,jk)   = zbactfer * 0.33 
    226230            END DO 
    227231         END DO 
     
    283287          ENDIF 
    284288          ! 
     289          IF( iom_use( "BACT" ) )  THEN 
     290               zw3d(:,:,:) = zdepbac(:,:,:) * 1.E6 * tmask(:,:,:)  ! Bacterial biomass 
     291               CALL iom_put( "BACT", zw3d ) 
     292          ENDIF 
     293          IF( iom_use( "FEBACT" ) )  THEN 
     294               zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zrfact2   ! Bacterial iron consumption 
     295               CALL iom_put( "FEBACT" , zw3d )   
     296          ENDIF 
    285297          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    286298       ENDIF 
    287299      ! 
    288300      CALL wrk_dealloc( jpi, jpj,      ztempbac                  ) 
    289       CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
     301      CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib, zfebact, zdepeff ) 
    290302      ! 
    291303      IF( nn_timing == 1 )  CALL timing_stop('p4z_rem') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r7753 r9450  
    170170                     rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 
    171171                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     172                     rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
     173                        &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
    172174                  END DO 
    173175               END DO 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmeso.F90

    r7646 r9450  
    8585      CHARACTER (len=25) :: charout 
    8686      REAL(wp) :: zrfact2, zmetexcess 
    87       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
     87      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2 
     88      REAL(wp), POINTER, DIMENSION(:,:,:) :: zz2ligprod 
    8889 
    8990      !!--------------------------------------------------------------------- 
     
    9192      IF( nn_timing == 1 )  CALL timing_start('p5z_meso') 
    9293      ! 
    93       CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     94      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 
    9495      zgrazing(:,:,:) = 0._wp 
     96      zfezoo2 (:,:,:) = 0._wp 
     97      ! 
     98      IF (ln_ligand) THEN 
     99         CALL wrk_alloc( jpi, jpj, jpk, zz2ligprod ) 
     100         zz2ligprod(:,:,:) = 0._wp 
     101      ENDIF 
    95102 
    96103      zmetexcess = 0.0 
     
    138145               !   most abundant species 
    139146               !   ------------------------------------------------------------   
    140                ztmp1 = xpref2p * zcompaph**1.5 
    141                ztmp2 = xpref2m * zcompames**1.5 
    142                ztmp3 = xpref2c * zcompapoc**1.5 
    143                ztmp4 = xpref2d * zcompadi**1.5 
    144                ztmp5 = xpref2z * zcompaz**1.5 
     147               ztmp1 = xpref2p * zcompaph * (0.75 * zcompaph + 0.25 * zcompadi) 
     148               ztmp2 = xpref2m * zcompames**2 
     149               ztmp3 = xpref2c * zcompapoc**2 
     150               ztmp4 = xpref2d * zcompadi * (0.75 * zcompadi + 0.25 * zcompaph) 
     151               ztmp5 = xpref2z * zcompaz**2 
    145152               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 
    146153               ztmp1 = ztmp1 / ztmptot 
     
    290297               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    291298               ! 
    292                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     299               IF( ln_ligand ) THEN 
     300                  tra(ji,jj,jk,jplgw)  = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     301                  zz2ligprod(ji,jj,jk) = zgradoc * ldocz 
     302               ENDIF 
    293303               ! 
    294304               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
     
    296306               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 
    297307               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
     308               zfezoo2(ji,jj,jk)   = zgraref 
    298309               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 
    299310               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren 
     
    351362            CALL iom_put( "PCAL", zw3d ) 
    352363         ENDIF 
     364         IF( iom_use( "FEZOO2" ) ) THEN 
     365            zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     366            CALL iom_put( "FEZOO2", zw3d ) 
     367         ENDIF 
     368         IF( iom_use( "LPRODZ2" ) .AND. ln_ligand )  THEN 
     369            zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     370            CALL iom_put( "LPRODZ2"  , zw3d ) 
     371         ENDIF 
    353372         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    354373      ENDIF 
     
    360379      ENDIF 
    361380      ! 
    362       CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     381      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 
     382      IF ( ln_ligand ) CALL wrk_dealloc( jpi, jpj, jpk, zz2ligprod ) 
    363383      ! 
    364384      IF( nn_timing == 1 )  CALL timing_stop('p5z_meso') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmicro.F90

    r7646 r9450  
    1515   USE trc             !  passive tracers common variables  
    1616   USE sms_pisces      !  PISCES Source Minus Sink variables 
    17    USE p5zlim          !  Phytoplankton limitation terms 
     17   USE p4zlim          !  Phytoplankton limitation terms 
    1818   USE iom             !  I/O manager 
    1919   USE prtctl_trc      !  print control for debugging 
     
    8282      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 
    8383      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 
    84       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
     84      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo 
     85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod 
    8586      CHARACTER (len=25) :: charout 
    8687      !!--------------------------------------------------------------------- 
     
    8889      IF( nn_timing == 1 )  CALL timing_start('p5z_micro') 
    8990      ! 
    90       CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     91      CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo ) 
     92      ! 
     93      IF (ln_ligand) THEN 
     94         CALL wrk_alloc( jpi, jpj, jpk, zzligprod ) 
     95         zzligprod(:,:,:) = 0._wp 
     96      ENDIF 
    9197      ! 
    9298      zmetexcess = 0.0 
     
    134140               !   most abundant species 
    135141               !   ------------------------------------------------------------   
    136                ztmp1 = xprefn * zcompaph**1.5 
    137                ztmp2 = xprefp * zcompapi**1.5 
    138                ztmp3 = xprefc * zcompapoc**1.5 
    139                ztmp4 = xprefd * zcompadi**1.5 
    140                ztmp5 = xprefz * zcompaz**1.5 
     142               ztmp1 = xprefn * zcompaph * ( 0.75 * zcompaph + 0.25 * zcompadi ) 
     143               ztmp2 = xprefp * zcompapi * zcompapi 
     144               ztmp3 = xprefc * zcompapoc * zcompapoc 
     145               ztmp4 = xprefd * zcompadi * ( 0.75 * zcompadi + 0.25 * zcompaph ) 
     146               ztmp5 = xprefz * zcompaz * zcompaz 
    141147               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 
    142148               ztmp1 = ztmp1 / ztmptot 
     
    245251               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    246252               ! 
    247                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     253               IF( ln_ligand ) THEN 
     254                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     255                  zzligprod(ji,jj,jk) = zgradoc * ldocz 
     256               ENDIF 
    248257               ! 
    249258               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
     
    251260               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem  
    252261               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
     262               zfezoo(ji,jj,jk) = zgraref 
    253263               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 
    254264               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 
     
    295305            CALL iom_put( "GRAZ1", zw3d ) 
    296306         ENDIF 
     307         IF( iom_use( "FEZOO" ) ) THEN 
     308            zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     309            CALL iom_put( "FEZOO", zw3d ) 
     310         ENDIF 
     311         IF( iom_use( "LPRODZ" ) .AND. ln_ligand )  THEN 
     312            zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     313            CALL iom_put( "LPRODZ"  , zw3d ) 
     314         ENDIF 
    297315         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    298316      ENDIF 
     
    304322      ENDIF 
    305323      ! 
    306       CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     324      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo ) 
     325      IF (ln_ligand) CALL wrk_dealloc( jpi, jpj, jpk, zzligprod ) 
    307326      ! 
    308327      IF( nn_timing == 1 )  CALL timing_stop('p5z_micro') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmort.F90

    r7646 r9450  
    1414   USE trc             !  passive tracers common variables  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    16    USE p5zlim          !  Phytoplankton limitation terms 
     16   USE p4zlim          !  Phytoplankton limitation terms 
    1717   USE prtctl_trc      !  print control for debugging 
    1818 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90

    r7646 r9450  
    1616   USE trc             !  passive tracers common variables  
    1717   USE sms_pisces      !  PISCES Source Minus Sink variables 
    18    USE p5zlim          !  Co-limitations of differents nutrients 
     18   USE p4zlim          !  Co-limitations of differents nutrients 
    1919   USE prtctl_trc      !  print control for debugging 
    2020   USE iom             !  I/O manager 
     
    7878      REAL(wp) ::   zprnutmax, zdocprod, zprochln, zprochld, zprochlp 
    7979      REAL(wp) ::   zpislopen, zpislopep, zpisloped, thetannm_n, thetandm_n, thetanpm_n 
     80      REAL(wp) ::   zratiosi, zquotasi, grosip2 
    8081      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup 
    8182      REAL(wp) ::   zfact, zrfact2 
     
    9495      REAL(wp), POINTER, DIMENSION(:,:,:) :: zcroissn, zcroissp, zcroissd 
    9596      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 
     97      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpligprod1, zpligprod2 
    9698      REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 
    9799      REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
     
    110112      CALL wrk_alloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd ) 
    111113      CALL wrk_alloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd ) 
     114      IF( ln_ligand ) THEN 
     115         CALL wrk_alloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 
     116      ENDIF 
    112117      ! 
    113118      zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp 
     
    121126 
    122127      ! Computation of the optimal production 
    123       prmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 
    124       prmaxp(:,:,:) = 0.5 / 0.65 * prmaxn(:,:,:)  
     128      prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 
     129      prmaxp(:,:,:) = 0.5 / 0.8 * prmaxn(:,:,:)  
    125130      prmaxd(:,:,:) = prmaxn(:,:,:)  
    126       zprnut(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 
     131      zprnut(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
     132 
     133      ! Assign the reference growth rate used in implicit formulations 
     134      prmax(:,:,:)  = zprnut(:,:,:) 
    127135 
    128136      ! compute the day length depending on latitude and the day 
     
    213221                  !    Si/C is arbitrariliy increased for very high Si concentrations 
    214222                  !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
     223                  IF (gphit(ji,jj) < -30 ) THEN 
     224                    zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 ) 
     225                  ELSE 
     226                    zsilfac2 = 1.  
     227                  ENDIF 
     228                  zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi2(ji,jj,jk) ) 
     229                  zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 
    215230                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    216                   zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    217                   zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    218                   zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    219                   IF (gphit(ji,jj) < -30 ) THEN 
    220                     zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    221                   ELSE 
    222                     zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    223                   ENDIF 
    224                   zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 
     231                  zratiosi = trb(ji,jj,jk,jpndi) 
     232                  grosip2 = zsilfac2 * grosip 
     233                  zquotasi = MIN( grosip2, trn(ji,jj,jk,jpdsi) / (zratiosi + rtrn ) ) 
     234                  zysopt(ji,jj,jk) = 1./3. * zratiosi * zlim * MAX(0.0, grosip2 - zquotasi) 
     235                  zysopt(ji,jj,jk) = zysopt(ji,jj,jk) * 1.005 * zsilim**3 / (0.005 + zsilim**3 ) 
    225236              ENDIF 
    226237            END DO 
     
    332343                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))  
    333344                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) )   & 
    334                   &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) ) 
     345                  &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) ) 
    335346                  zpronewd(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xdiatno3(ji,jj,jk) 
    336347                  zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) 
     
    338349                  zrat = MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 
    339350                  zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))  
    340                   zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) 
     351                  zpropmax = zprnutmax * zmax * xlimsi(ji,jj,jk) 
    341352                  zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 
    342353                  zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) 
     
    362373                  thetannm_n   = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   & 
    363374                  &               * (1. - 1.14 / 43.4 * 20.)) 
     375                  thetannm_n = thetannm 
    364376                  zprochln = thetannm_n * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 
    365377                  zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 
     
    369381                  thetanpm_n   = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   & 
    370382                  &               * (1. - 1.14 / 43.4 * 20.)) 
     383                  thetanpm_n = thetanpm 
    371384                  zprochlp = thetanpm_n * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 
    372385                  zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 
     
    376389                  thetandm_n   = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem)))   & 
    377390                  &               * (1. - 1.14 / 43.4 * 20.)) 
     391                  thetandm_n = thetandm 
    378392                  zprochld = thetandm_n * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 
    379393                  zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) 
     
    460474                 zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 
    461475                 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 
     476                 zpligprod1(ji,jj,jk) = zdocprod * ldocp 
     477                 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 
    462478              END DO 
    463479           END DO 
     
    547563              ! 
    548564          ENDIF 
    549  
     565          IF( iom_use( "LPRODP" ) )  THEN 
     566              zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     567              CALL iom_put( "LPRODP"  , zw3d ) 
     568          ENDIF 
     569          IF( iom_use( "LDETP" ) )  THEN 
     570              zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     571              CALL iom_put( "LDETP"  , zw3d ) 
     572          ENDIF 
     573          ! 
    550574          IF( iom_use( "tintpp" ) )  CALL iom_put( "tintpp" , tpp * zfact )  !  global total integrated primary production molC/s 
    551575          ! 
     
    570594      CALL wrk_dealloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd ) 
    571595      CALL wrk_dealloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd ) 
     596      IF( ln_ligand ) THEN 
     597         CALL wrk_dealloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 
     598      ENDIF 
    572599      ! 
    573600      IF( nn_timing == 1 )  CALL timing_stop('p5z_prod') 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r8533 r9450  
    100100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: ?? 
    101101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: ?? 
     102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prmax      !: Reference maximum growth rate 
    102103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production 
    103104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: Calcite production 
     
    164165            &      prodcal(jpi,jpj,jpk) , xdiss   (jpi,jpj,jpk),    & 
    165166            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    & 
    166             &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,  STAT=ierr(4) ) 
     167            &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,    & 
     168            &      prmax  (jpi,jpj,jpk) , STAT=ierr(4) ) 
    167169 
    168170         !* Variable for chemistry of the CO2 cycle 
  • branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90

    r7753 r9450  
    7171      USE p4zpoc          !  Remineralization of organic particles 
    7272      USE p4zligand       !  Remineralization of organic ligands 
    73       USE p5zlim          !  Co-limitations of differents nutrients 
     73      USE p4zlim          !  Co-limitations of differents nutrients 
    7474      USE p5zprod         !  Growth rate of the 2 phyto groups 
    7575      USE p5zmicro        !  Sources and sinks of microzooplankton 
     
    112112      ierr = ierr +  p4z_sed_alloc() 
    113113      ierr = ierr +  p4z_rem_alloc() 
     114      ierr = ierr +  p4z_lim_alloc() 
    114115      IF( ln_p4z ) THEN 
    115          ierr = ierr +  p4z_lim_alloc() 
    116116         ierr = ierr +  p4z_prod_alloc() 
    117117      ELSE 
    118          ierr = ierr +  p5z_lim_alloc() 
    119118         ierr = ierr +  p5z_prod_alloc() 
    120119      ENDIF 
     
    167166        IF( cltra == 'PICN'     )   jpnpi = jn      !: Picophytoplankton N biomass 
    168167        IF( cltra == 'PICP'     )   jpppi = jn      !: Picophytoplankton P biomass 
     168        IF( cltra == 'PCHL'     )   jppch = jn      !: Diatoms Chlorophyll Concentration 
    169169        IF( cltra == 'PFe'      )   jppfe = jn      !: Picophytoplankton Fe biomass 
    170170        IF( cltra == 'LGW'      )   jplgw = jn      !: Weak ligands 
     
    240240         xksi(:,:)    = 2.e-6 
    241241         xksimax(:,:) = xksi(:,:) 
     242         ! 
     243         IF( ln_p5z ) THEN 
     244            sizep(:,:,:) = 1. 
     245            sizen(:,:,:) = 1. 
     246            sized(:,:,:) = 1. 
     247         ENDIF 
    242248      END IF 
    243249 
Note: See TracChangeset for help on using the changeset viewer.