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 14276 for NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z – NEMO

Ignore:
Timestamp:
2021-01-07T23:09:56+01:00 (3 years ago)
Author:
aumont
Message:

numerous updates to PISCES, PISCES-QUOTA and the sediment module

Location:
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zagg.F90

    r13233 r14276  
    7575                  ! Part I : Coagulation dependent on turbulence 
    7676                  ! The stickiness has been assumed to be 0.1 
    77                   zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    78                   zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
     77                  zagg1 = 12.5  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     78                  zagg2 = 169.7 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    7979 
    8080                  ! Part II : Differential settling 
    8181                  ! Aggregation of small into large particles 
    8282                  ! The stickiness has been assumed to be 0.1 
    83                   zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    84                   zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     83                  zagg3 =  8.63  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     84                  zagg4 =  132.8 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    8585 
    8686                  zagg   = zagg1 + zagg2 + zagg3 + zagg4 
     
    9292                  ! 3rd term is differential settling of DOC-POC 
    9393                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    94                   zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    95                   &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
     94                  zaggdoc  = ( ( 12.0 * 0.3 * trb(ji,jj,jk,jpdoc) + 9.05 * trb(ji,jj,jk,jppoc) ) * zfact       & 
     95                  &            + 2.49 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
    9696                  ! transfer of DOC to GOC :  
    9797                  ! 1st term is shear aggregation 
    98                   ! 2nd term is differential settling  
    99                   ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    100                   zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
     98                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
     99                  zaggdoc2 = ( 1.94 * zfact + 1.37 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    101100                  ! tranfer of DOC to POC due to brownian motion 
    102101                  ! The temperature dependency has been omitted. 
    103                   zaggdoc3 =  114. * 0.3 * trb(ji,jj,jk,jpdoc) *xstep * 0.3 * trb(ji,jj,jk,jpdoc) 
     102                  zaggdoc3 =  ( 127.8 * 0.3 * trb(ji,jj,jk,jpdoc) + 725.7 * trb(ji,jj,jk,jppoc) ) * xstep * 0.3 * trb(ji,jj,jk,jpdoc) 
    104103 
    105104                  !  Update the trends 
     
    150149                  ! 3rd term is differential settling of DOC-POC 
    151150                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    152                   zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    153                   &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) 
     151                  zaggtmp = ( ( 0.37 * 0.3 * trb(ji,jj,jk,jpdoc) + 20.5 * trb(ji,jj,jk,jppoc) ) * zfact       & 
     152                  &            + 0.15 * xstep * trb(ji,jj,jk,jppoc) ) 
    154153                  zaggdoc  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) 
    155154                  zaggdon  = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon) 
     
    160159                  ! 2nd term is differential settling  
    161160                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    162                   zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) 
     161                  zaggtmp = 655.4 * zfact * trb(ji,jj,jk,jpgoc) 
    163162                  zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) 
    164163                  zaggdon2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdon) 
     
    167166                  ! tranfer of DOC to POC due to brownian motion 
    168167                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    169                   zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep 
     168                  zaggtmp = ( 260.2 * 0.3 * trb(ji,jj,jk,jpdoc) +  418.5 * trb(ji,jj,jk,jppoc) ) * xstep 
    170169                  zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) 
    171170                  zaggdon3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdon) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90

    r13233 r14276  
    110110 
    111111      ! Update of the size of the different phytoplankton groups 
    112       sized(:,:,:) = sizeda(:,:,:) 
    113       sizen(:,:,:) = sizena(:,:,:) 
     112      sized(:,:,:) = MAX(1.0, sizeda(:,:,:) ) 
     113      sizen(:,:,:) = MAX(1.0, sizena(:,:,:) ) 
    114114      IF (ln_p5z) THEN 
    115          sizep(:,:,:) = sizepa(:,:,:) 
     115         sizep(:,:,:) = MAX(1.0, sizepa(:,:,:) ) 
    116116      ENDIF 
    117117      !                                                             ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zfechem.F90

    r13200 r14276  
    3030   REAL(wp), PUBLIC ::   ligand       !: ligand concentration in the ocean  
    3131   REAL(wp), PUBLIC ::   kfep         !: rate constant for nanoparticle formation 
     32   REAL(wp), PUBLIC ::   scaveff      !: Fraction of scavenged iron that is considered as being subject to solubilization 
    3233 
    3334   !!---------------------------------------------------------------------- 
     
    5051      ! 
    5152      INTEGER  ::   ji, jj, jk, jic, jn 
    52       REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac 
    53       REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol, zligco 
    54       REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag, ztrc, zdust 
    55       REAL(wp) ::   zdenom2, ztfe, zhplus, zxlam, zaggliga, zaggligb 
     53      REAL(wp) ::   zlam1a, zlam1b 
     54      REAL(wp) ::   zkeq, zfesatur, zfecoll, fe3sol, zligco 
     55      REAL(wp) ::   zscave, zaggdfea, zaggdfeb, ztrc, zdust, zklight 
     56      REAL(wp) ::   ztfe, zhplus, zxlam, zaggliga, zaggligb 
    5657      REAL(wp) ::   zrfact2 
    5758      CHARACTER (len=25) :: charout 
    58       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, zFeL1 
    59       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d 
     59      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zTL1, zFe3, ztotlig, precip, precipno3, zFeL1 
     60      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zcoll3d, zscav3d, zlcoll3d, zprecip3d 
    6061      !!--------------------------------------------------------------------- 
    6162      ! 
     
    6667 
    6768      ! Total ligand concentration : Ligands can be chosen to be constant or variable 
    68       ! Parameterization from Tagliabue and Voelker (2011) 
     69      ! Parameterization from Pham and Ito (2018) 
    6970      ! ------------------------------------------------- 
    7071      IF( ln_ligvar ) THEN 
    71          ztotlig(:,:,:) =  0.09 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 
     72         ztotlig(:,:,:) =  0.09 * 0.667 * trb(:,:,:,jpdoc) * 1E6 + ligand * 1E9 + MAX(0., chemo2(:,:,:) - trb(:,:,:,jpoxy) ) / 400.E-6 
    7273         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    7374      ELSE 
    7475        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9 
    75         ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9 
     76        ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9  
    7677        ENDIF 
    7778      ENDIF 
     
    7980      ! ------------------------------------------------------------ 
    8081      !  from Aumont and Bopp (2006) 
    81       ! This model is based on one ligand and Fe'  
     82      ! This model is based on one ligand, Fe2+ and Fe3+  
    8283      ! Chemistry is supposed to be fast enough to be at equilibrium 
    8384      ! ------------------------------------------------------------ 
     
    8788               zTL1(ji,jj,jk)  = ztotlig(ji,jj,jk) 
    8889               zkeq            = fekeq(ji,jj,jk) 
     90               zklight         = 4.77E-7 * etot(ji,jj,jk) * 0.5 / 10**-6.3 
    8991               zfesatur        = zTL1(ji,jj,jk) * 1E-9 
    90                ztfe            = trb(ji,jj,jk,jpfer)  
     92               ztfe            = (1.0 + zklight) * trb(ji,jj,jk,jpfer)  
    9193               ! Fe' is the root of a 2nd order polynom 
    92                zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq - zkeq * ztfe )               & 
    93                   &              + SQRT( ( 1. + zfesatur * zkeq - zkeq * ztfe )**2       & 
     94               zFe3 (ji,jj,jk) = ( -( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * trb(ji,jj,jk,jpfer) )               & 
     95                  &              + SQRT( ( 1. + zfesatur * zkeq + zklight + consfe3(ji,jj,jk)/10**-6.3 - zkeq * trb(ji,jj,jk,jpfer) )**2       & 
    9496                  &              + 4. * ztfe * zkeq) ) / ( 2. * zkeq ) 
    95                zFe3 (ji,jj,jk) = zFe3(ji,jj,jk) * 1E9 
    96                zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) * 1E9 - zFe3(ji,jj,jk) ) 
     97               zFeL1(ji,jj,jk) = MAX( 0., trb(ji,jj,jk,jpfer) - zFe3(ji,jj,jk) ) 
    9798           END DO 
    9899         END DO 
    99100      END DO 
    100          ! 
    101  
     101      ! 
     102      plig(:,:,:) =  MAX( 0., ( zFeL1(:,:,:) / ( trb(:,:,:,jpfer) + rtrn ) ) ) 
     103      ! 
    102104      zdust = 0.         ! if no dust available 
    103105      DO jk = 1, jpkm1 
     
    113115               &         + fesol(ji,jj,jk,5) / zhplus ) 
    114116               ! 
    115                zfeequi = zFe3(ji,jj,jk) * 1E-9 
    116                zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     117               zfecoll = 0.5 * zFeL1(ji,jj,jk) 
    117118               ! precipitation of Fe3+, creation of nanoparticles 
    118                precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * 1E-9 - fe3sol ) ) * kfep * xstep 
     119               precip(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) - fe3sol ) ) * kfep * xstep * ( 1.0 - nitrfac(ji,jj,jk) )  
     120               ! Precipitation of Fe2+ due to oxidation by NO3 (Croot et al., 2019) 
     121               ! This occurs in anoxic waters only 
     122               precipno3(ji,jj,jk) = 2.0 * 130.0 * trb(ji,jj,jk,jpno3) * nitrfac(ji,jj,jk) * xstep * zFe3(ji,jj,jk) 
    119123               ! 
    120124               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
     125               ztrc = MAX( rtrn, ztrc ) 
    121126               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) 
    122                IF (ln_ligand) THEN 
    123                   zxlam  = xlam1 * MAX( 1.E-3, EXP(-2 * etot(ji,jj,jk) / 10. ) * (1. - EXP(-2 * trb(ji,jj,jk,jpoxy) / 100.E-6 ) )) 
    124                ELSE 
    125                   zxlam  = xlam1 * 1.0 
    126                ENDIF 
    127                zlam1b = 3.e-5 + xlamdust * zdust + zxlam * ztrc 
    128                zscave = zfeequi * zlam1b * xstep 
    129  
    130                ! Compute the different ratios for scavenging of iron 
    131                ! to later allocate scavenged iron to the different organic pools 
    132                ! --------------------------------------------------------- 
    133                zdenom1 = zxlam * trb(ji,jj,jk,jppoc) / zlam1b 
    134                zdenom2 = zxlam * trb(ji,jj,jk,jpgoc) / zlam1b 
    135  
    136                ! Increased scavenging for very high iron concentrations found near the coasts  
    137                ! due to increased lithogenic particles and let say it is unknown processes (precipitation, ...) 
    138                !  ----------------------------------------------------------- 
    139                zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 
    140                zlamfac = MIN( 1.  , zlamfac ) 
    141                zdep    = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 
    142                zcoag   = 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 
     127               zxlam  = MAX( 1.E-3, (1. - EXP(-2 * trb(ji,jj,jk,jpoxy) / 100.E-6 ) )) 
     128               zlam1b = 3.e-5 + ( xlamdust * zdust + xlam1 * ztrc ) * zxlam 
     129               zscave = zFe3(ji,jj,jk) * zlam1b * xstep 
    143130 
    144131               ! Compute the coagulation of colloidal iron. This parameterization  
     
    146133               ! It requires certainly some more work as it is very poorly constrained. 
    147134               ! ---------------------------------------------------------------- 
    148                zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    149                    &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     135               zlam1a   = ( 12.0  * 0.3 * trb(ji,jj,jk,jpdoc) + 9.05  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     136                   &    + ( 2.49  * trb(ji,jj,jk,jppoc) )     & 
     137                   &    + ( 127.8 * 0.3 * trb(ji,jj,jk,jpdoc) + 725.7 * trb(ji,jj,jk,jppoc) ) 
    150138               zaggdfea = zlam1a * xstep * zfecoll 
    151139               ! 
    152                zlam1b   = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
     140               zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * trb(ji,jj,jk,jpgoc) 
    153141               zaggdfeb = zlam1b * xstep * zfecoll 
    154142               ! 
    155143               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb & 
    156                &                     - zcoag - precip(ji,jj,jk) 
    157                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 
    158                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 
    159                zscav3d(ji,jj,jk)   = zscave 
     144               &                     - precip(ji,jj,jk) - precipno3(ji,jj,jk) 
     145               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * scaveff * trb(ji,jj,jk,jppoc) / ztrc 
     146               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * scaveff * trb(ji,jj,jk,jpgoc) / ztrc 
     147 
     148               ! Precipitated iron is supposed to be permanently lost. 
     149               ! Scavenged iron is supposed to be released back to seawater 
     150               ! when POM is solubilized. This is highly uncertain as probably 
     151               ! a significant part of it may be rescavenged back onto  
     152               ! the particles. An efficiency factor is applied that is read 
     153               ! in the namelist.  
     154               ! See for instance Tagliabue et al. (2019). 
     155               ! Aggregated FeL is considered as biogenic Fe as it  
     156               ! probably remains  complexed when the particle is solubilized. 
     157               ! ------------------------------------------------------------- 
     158               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zaggdfea 
     159               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggdfeb 
     160               zscav3d(ji,jj,jk)   = zscave  
    160161               zcoll3d(ji,jj,jk)   = zaggdfea + zaggdfeb 
     162               zprecip3d(ji,jj,jk) = precip(ji,jj,jk) + precipno3(ji,jj,jk) 
    161163               ! 
    162164            END DO 
     
    175177 
    176178                  ! Coagulation of ligands due to various processes (Brownian, shear, diff. sedimentation 
    177                   ! Coefficients are taken from the p4zagg 
     179                  ! Coefficients are taken from p4zagg 
    178180                  ! ------------------------------------------------------------------------------------- 
    179                   zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    180                       &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     181                  zlam1a   = ( 12.0  * 0.3 * trb(ji,jj,jk,jpdoc) + 9.05  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     182                      &    + ( 2.49  * trb(ji,jj,jk,jppoc) )     & 
     183                      &    + ( 127.8 * 0.3 * trb(ji,jj,jk,jpdoc) + 725.7 * trb(ji,jj,jk,jppoc) ) 
    181184                  ! 
    182                   zlam1b   = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    183  
     185                  zlam1b   = ( 1.94 * xdiss(ji,jj,jk) + 1.37 ) * trb(ji,jj,jk,jpgoc) 
    184186                  ! 50% of the ligands are supposed to be in the colloidal size fraction 
    185                   zligco   = 0.5 * trn(ji,jj,jk,jplgw) 
    186                   zaggliga = zlam1a * xstep * zligco 
     187                  ! as for FeL 
     188                  zligco   = 0.5 * trb(ji,jj,jk,jplgw) 
     189                  zaggliga = zlam1a * xstep * zligco  
    187190                  zaggligb = zlam1b * xstep * zligco 
    188191                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 
     
    191194            END DO 
    192195         END DO 
    193          ! 
    194          plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 
    195196         ! 
    196197      ENDIF 
     
    206207         IF( iom_use("FESCAV") )  CALL iom_put("FESCAV" , zscav3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    207208         IF( iom_use("FECOLL") )  CALL iom_put("FECOLL" , zcoll3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
     209         IF( iom_use("FEPREC") )  CALL iom_put("FEPREC" , zprecip3d(:,:,:)  * 1e9 * tmask(:,:,:) * zrfact2 ) 
    208210         IF( iom_use("LGWCOLL"))  CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 
    209211      ENDIF 
     
    234236      INTEGER ::   ios   ! Local integer  
    235237      !! 
    236       NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep  
     238      NAMELIST/nampisfer/ ln_ligvar, xlam1, xlamdust, ligand, kfep, scaveff  
    237239      !!---------------------------------------------------------------------- 
    238240      ! 
     
    258260         WRITE(numout,*) '      ligand concentration in the ocean         ligand       =', ligand 
    259261         WRITE(numout,*) '      rate constant for nanoparticle formation  kfep         =', kfep 
     262         WRITE(numout,*) '      Scavenged iron that is added to POFe      scaveff      =', scaveff 
    260263      ENDIF 
    261264      !  
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zflx.F90

    r11536 r14276  
    359359      IF( ln_presatm ) THEN 
    360360         CALL fld_read( kt, 1, sf_patm )               !* input Patm provided at kt + 1/2 
    361          patm(:,:) = sf_patm(1)%fnow(:,:,1)                        ! atmospheric pressure 
     361         patm(:,:) = sf_patm(1)%fnow(:,:,1)/101325.0     ! atmospheric pressure 
    362362      ENDIF 
    363363      ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zint.F90

    r12537 r14276  
    3636      ! 
    3737      INTEGER  :: ji, jj                 ! dummy loop indices 
    38       REAL(wp) :: zvar                   ! local variable 
     38      REAL(wp) :: zrum, zcodel, zargu, zvar 
    3939      !!--------------------------------------------------------------------- 
    4040      ! 
     
    4444      ! ------------------------------------------- 
    4545      ! Generic temperature dependence (Eppley, 1972) 
    46       tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 
     46      tgfunc (:,:,:) = EXP( 0.0631 * tsn(:,:,:,jp_tem) ) 
    4747      ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) 
    48       tgfunc2(:,:,:) = EXP( 0.07608  * tsn(:,:,:,jp_tem) ) 
    49       ! Temperature dependence of picophytoplankton (Stawiarsky et al., 2016) 
    50       tgfunc3(:,:,:) = EXP( 0.0825   * tsn(:,:,:,jp_tem) ) 
     48      tgfunc2(:,:,:) = EXP( 0.0761  * tsn(:,:,:,jp_tem) ) 
    5149 
    5250      ! Computation of the silicon dependant half saturation  constant for silica uptake 
     
    6967      ENDIF 
    7068      ! 
     69      ! compute the day length depending on latitude and the day 
     70      ! Astronomical parameterization taken from HAMOCC3 
     71      zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
     72      zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
     73 
     74      ! day length in hours 
     75      strn(:,:) = 0. 
     76      DO jj = 1, jpj 
     77         DO ji = 1, jpi 
     78            zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
     79            zargu = MAX( -1., MIN(  1., zargu ) ) 
     80            strn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     81         END DO 
     82      END DO 
     83      ! 
    7184      IF( ln_timing )   CALL timing_stop('p4z_int') 
    7285      ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlim.F90

    r13233 r14276  
    6363   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto 
    6464   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: Limitation of Fe uptake by diatoms 
     65   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xqfuncfecd, xqfuncfecn 
    6566 
    6667   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
     
    9091      ! 
    9192      INTEGER  ::   ji, jj, jk 
    92       REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim, zcoef 
     93      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zcoef 
    9394      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    94       REAL(wp) ::   zdenom, zratio, zironmin 
     95      REAL(wp) ::   zdenom, zratio, zironmin, zbactno3, zbactnh4 
    9596      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
    9697      REAL(wp) ::   fananof, fadiatf, znutlim, zfalim 
     98      REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zbiron 
    9799      !!--------------------------------------------------------------------- 
    98100      ! 
    99101      IF( ln_timing )   CALL timing_start('p4z_lim') 
    100102      ! 
    101       sizena(:,:,:) = 0.0  ;  sizeda(:,:,:) = 0.0 
     103      sizena(:,:,:) = 1.0  ;  sizeda(:,:,:) = 1.0 
    102104      ! 
    103105      DO jk = 1, jpkm1 
    104106         DO jj = 1, jpj 
    105107            DO ji = 1, jpi 
    106                 
    107                ! Tuning of the iron concentration to a minimum level that  
    108                ! is set to the detection limit 
    109                ! -------------------------------------------------------- 
    110                zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    111                zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    112                zferlim = MIN( zferlim, 7e-11 ) 
    113                trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    114  
    115108               ! Computation of a variable Ks of diatoms taking into account 
    116109               ! that increasing biomass is made of generally bigger cells 
     
    134127 
    135128               ! Nanophytoplankton 
    136                znutlim = biron(ji,jj,jk) / concnfe(ji,jj,jk) 
     129               zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 
     130               znutlim = zbiron / concnfe(ji,jj,jk) 
    137131               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    138132 
    139133               ! Diatoms 
    140                znutlim = biron(ji,jj,jk) / concdfe(ji,jj,jk) 
     134               znutlim = zbiron / concdfe(ji,jj,jk) 
    141135               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    142136 
     
    144138               ! heterotrophic bacteria 
    145139               ! ------------------------------------------------- 
    146                zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 
    147                xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 
    148                xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * concbno3 * zdenom 
     140               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( concbno3 + trb(ji,jj,jk,jpnh4) ) 
     141               zlimno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) 
     142               znutlimtot = ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) / ( concbno3 + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     143               zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     144               zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    149145               ! 
    150                zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
     146               zlim1    = zbactno3 + zbactnh4 
    151147               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbnh4 ) 
    152148               zlim3    = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 
     
    166162               ! Limitation of Fe uptake (Quota formalism) 
    167163               zfalim = (1.-fananof) / fananof 
    168                xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concnfe(ji,jj,jk) ) 
     164               xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * concnfe(ji,jj,jk) ) 
    169165 
    170166               ! Limitation of nanophytoplankton growth 
    171                zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 
    172                xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
    173                xnanonh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc0n    * zdenom 
     167               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( zconc0n + trb(ji,jj,jk,jpnh4) ) 
     168               zlimno3 = trb(ji,jj,jk,jpno3) / ( zconc0n + trb(ji,jj,jk,jpno3) ) 
     169               znutlimtot = ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) / ( zconc0n + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     170               xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     171               xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    174172               ! 
    175173               zlim1    = xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) 
     
    181179               ! proposed by Flynn and Hipkin (1999) 
    182180               zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
     181               xqfuncfecn(ji,jj,jk) = zironmin + qnfelim 
    183182               zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
    184183               xnanopo4(ji,jj,jk) = zlim2 
     
    190189               ! Limitation of Fe uptake (Quota formalism) 
    191190               zfalim = (1.-fadiatf) / fadiatf 
    192                xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concdfe(ji,jj,jk) ) 
     191               xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * concdfe(ji,jj,jk) ) 
    193192 
    194193               ! Limitation of diatoms growth 
    195                zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 
    196                xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
    197                xdiatnh4(ji,jj,jk) = trb(ji,jj,jk,jpnh4) * zconc1d    * zdenom 
     194               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( zconc1d + trb(ji,jj,jk,jpnh4) ) 
     195               zlimno3 = trb(ji,jj,jk,jpno3) / ( zconc1d + trb(ji,jj,jk,jpno3) ) 
     196               znutlimtot = ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) / ( zconc1d + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     197               xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn )  
     198               xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    198199               ! 
    199200               zlim1    = xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) 
     
    206207               ! proposed by Flynn and Hipkin (1999) 
    207208               zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
     209               xqfuncfecd(ji,jj,jk) = zironmin + qdfelim 
    208210               zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
    209211               xdiatpo4(ji,jj,jk) = zlim2 
     
    238240         DO jj = 1, jpj 
    239241            DO ji = 1, jpi 
    240                zlim1 =  ( trb(ji,jj,jk,jpno3) * concnnh4 + trb(ji,jj,jk,jpnh4) * concnno3 )    & 
    241                   &   / ( concnno3 * concnnh4 + concnnh4 * trb(ji,jj,jk,jpno3) + concnno3 * trb(ji,jj,jk,jpnh4) )  
     242               zlim1  = xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk)  
    242243               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnnh4 ) 
    243                zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  5.E-11   ) 
    244                ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
     244               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  6.E-11   ) 
     245               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) + 1.8) 
    245246               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
    246247               zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) )  
    247                zetot2 = 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
     248               zetot2 = 30. / ( 30.0 + etot_ndcy(ji,jj,jk) ) 
    248249 
    249250               xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )                  & 
     
    375376         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
    376377         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
     378         &      xqfuncfecn(jpi,jpj,jpk), xqfuncfecd(jpi,jpj,jpk),   & 
    377379         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
    378380      ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlys.F90

    r13233 r14276  
    5757      ! 
    5858      INTEGER  ::   ji, jj, jk, jn 
    59       REAL(wp) ::   zdispot, zfact, zcalcon 
     59      REAL(wp) ::   zdispot, zfact, zcalcon, zkd 
    6060      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    6161      CHARACTER (len=25) ::   charout 
     
    6565      IF( ln_timing )  CALL timing_start('p4z_lys') 
    6666      ! 
    67       zco3    (:,:,:) = 0. 
    68       zcaldiss(:,:,:) = 0. 
     67      zco3    (:,:,:) = 0._wp 
     68      zcaldiss(:,:,:) = 0._wp     ;     zco3sat(:,:,:) = 0._wp 
    6969      zhinit  (:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 
    7070      ! 
     
    106106               excess(ji,jj,jk) = 1._wp - zomegaca 
    107107               zexcess0 = MAX( 0., excess(ji,jj,jk) ) 
    108                zexcess  = zexcess0**nca 
     108               IF (zomegaca < 0.8) THEN 
     109                  zexcess  = zexcess0**nca 
     110                 ! AMOUNT CACO3 THAT RE-ENTERS SOLUTION 
     111                  zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 
     112               ELSE 
     113                  zkd = kdca * 0.1**(nca - 0.4) 
     114                  zexcess  = zexcess0**0.4 
     115                  zdispot = zkd * zexcess * trb(ji,jj,jk,jpcal) 
     116               ENDIF 
    109117 
    110                ! AMOUNT CACO3 THAT RE-ENTERS SOLUTION 
    111                zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 
    112118               ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 
    113119               ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90

    r13234 r14276  
    8989      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof, zgrabsi 
    9090      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof 
    91       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zstrn, zgramigbsi 
     91      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigbsi 
    9292      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   zw3d, zz2ligprod 
    9393      !!--------------------------------------------------------------------- 
     
    236236               zgraztotn = zgrazdc * quotad(ji,jj,jk) + zgrazz + zgraznc * quotan(ji,jj,jk)   & 
    237237               &   + zgrazpoc + zgrazffep + zgrazffeg 
    238                zgraztotf = zgrazdf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 
     238               zgraztotf = zgrazdf + zgraznf + zgrazz * feratz + zgrazpof + zgrazfffp + zgrazfffg 
    239239 
    240240               ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
     
    251251               zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
    252252               zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 
    253                zepshert  = MIN( 1., zgrasratn, zgrasratf / ferat3) 
     253               zepshert  = MIN( 1., zgrasratn, zgrasratf / feratm) 
    254254               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
    255255               ! Food quantity deprivation of GGE 
     
    298298               zprcaca = part2 * zprcaca 
    299299               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 
    300                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 
     300               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * ( zgrazcal - zprcaca ) 
    301301               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 
    302302  
     
    305305               zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 
    306306               &         + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 
    307                zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - ferat3 * zepsherv )    & 
    308                &         + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
     307               zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - feratm * zepsherv )    & 
     308               &         + feratm * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
    309309               zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 
    310                zgrapof(ji,jj,jk) = zgraztotf * unass2 + ferat3 * zmortzgoc 
     310               zgrapof(ji,jj,jk) = zgraztotf * unass2 + feratm * zmortzgoc 
    311311            END DO  
    312312         END DO 
     
    320320         ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 
    321321         ALLOCATE( zgramigbsi(jpi,jpj) ) 
    322          ALLOCATE( zstrn(jpi,jpj) ) 
    323322         zgramigrem(:,:) = 0.0    ;   zgramigref(:,:) = 0.0 
    324323         zgramigpoc(:,:) = 0.0    ;   zgramigpof(:,:) = 0.0 
    325324         zgramigbsi(:,:) = 0.0 
    326  
    327          ! compute the day length depending on latitude and the day 
    328          zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    329          zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    330  
    331          ! day length in hours 
    332          zstrn(:,:) = 0. 
    333          DO jj = 1, jpj 
    334             DO ji = 1, jpi 
    335                zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    336                zargu = MAX( -1., MIN(  1., zargu ) ) 
    337                zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    338                zstrn(ji,jj) = MIN(0.75, MAX( 0.25, zstrn(ji,jj) / 24.) ) 
    339             END DO 
    340          END DO 
    341325 
    342326        ! Compute the amount of materials that will go into vertical migration 
     
    347331            DO jj = 1, jpj 
    348332               DO ji = 1, jpi 
    349                   zmigreltime = (1. - zstrn(ji,jj)) 
     333                  zmigreltime = (1. - strn(ji,jj)) 
    350334                  IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 
    351335                     zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * (1. - zmigreltime )    & 
     
    389373         ! ------------------------------ 
    390374         DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof, zgramigbsi ) 
    391          DEALLOCATE( zstrn ) 
    392  
    393375      ! End of the ln_dvm_meso part 
    394376      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90

    r13234 r14276  
    187187               zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
    188188               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 
    189                zepshert  =  MIN( 1., zgrasratn, zgrasratf / ferat3) 
     189               zepshert  =  MIN( 1., zgrasratn, zgrasratf / feratz) 
    190190               zbeta     = MAX(0., (epsher - epshermin) ) 
    191191               ! Food quantity deprivation of the GGE 
     
    196196               zepsherv  = zepsherf * zepshert * zepsherq 
    197197               ! Excretion of Fe 
    198                zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - ferat3 * zepsherv )  
     198               zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - feratz * zepsherv )  
    199199               ! Excretion of C, N, P 
    200200               zgrarem   = zgraztotc * ( 1. - zepsherv - unass ) 
     
    236236               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 
    237237               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 
    238                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazpof 
     238               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + feratz * zmortz - zgrazpof 
    239239               ! 
    240240               ! Calcite remineralization due to zooplankton activity 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmort.F90

    r13233 r14276  
    2525   REAL(wp), PUBLIC ::   wchln    !: Quadratic mortality rate of nanophytoplankton 
    2626   REAL(wp), PUBLIC ::   wchld    !: Quadratic mortality rate of diatoms 
    27    REAL(wp), PUBLIC ::   wchldm   !: Maximum quadratic mortality rate of diatoms 
    2827   REAL(wp), PUBLIC ::   mpratn   !: Linear mortality rate of nanophytoplankton 
    2928   REAL(wp), PUBLIC ::   mpratd   !: Linear mortality rate of diatoms 
     
    6362      !!--------------------------------------------------------------------- 
    6463      INTEGER  ::   ji, jj, jk 
    65       REAL(wp) ::   zsizerat, zcompaph 
     64      REAL(wp) ::   zcompaph 
    6665      REAL(wp) ::   zfactfe, zfactch, zprcaca, zfracal 
    67       REAL(wp) ::   ztortp , zrespp , zmortp  
     66      REAL(wp) ::   ztortp , zrespp , zmortp, zlim1, zlim2  
    6867      CHARACTER (len=25) ::   charout 
    6968      !!--------------------------------------------------------------------- 
     
    7675            DO ji = 1, jpi 
    7776               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
    78                !     When highly limited by macronutrients, very small cells  
    79                !     dominate the community. As a consequence, aggregation 
    80                !     due to turbulence is negligible. Mortality is also set 
    81                !     to 0 
    82                zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 
    83  
    8477               ! Quadratic mortality of nano due to aggregation during 
    8578               ! blooms (Doney et al. 1996) 
    8679               ! ----------------------------------------------------- 
    87                zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat  
     80               zlim2   = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk) 
     81               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * trb(ji,jj,jk,jpphy) 
     82               zrespp  = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 
    8883 
    8984               ! Phytoplankton linear mortality 
     
    9186               ! extinction of nanophyto in highly limited areas 
    9287               ! ---------------------------------------------------- 
    93                ztortp = mpratn * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 
     88               ztortp = mpratn * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * trb(ji,jj,jk,jpphy) 
    9489 
    9590               zmortp = zrespp + ztortp 
     
    170165               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    171166               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    172                zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
     167               zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    173168 
    174169               ! Phytoplankton linear mortality 
     
    228223      INTEGER ::   ios   ! Local integer 
    229224      ! 
    230       NAMELIST/namp4zmort/ wchln, wchld, wchldm, mpratn, mpratd 
     225      NAMELIST/namp4zmort/ wchln, wchld, mpratn, mpratd 
    231226      !!---------------------------------------------------------------------- 
    232227      ! 
     
    249244         WRITE(numout,*) '      quadratic mortality of phytoplankton        wchln  =', wchln 
    250245         WRITE(numout,*) '      maximum quadratic mortality of diatoms      wchld  =', wchld 
    251          WRITE(numout,*) '      maximum quadratic mortality of diatoms      wchldm =', wchldm 
    252246         WRITE(numout,*) '      phytoplankton mortality rate                mpratn =', mpratn 
    253247         WRITE(numout,*) '      Diatoms mortality rate                      mpratd =', mpratd 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zopt.F90

    r13233 r14276  
    6767      REAL(wp), DIMENSION(jpi,jpj    ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 
    6868      REAL(wp), DIMENSION(jpi,jpj    ) :: zqsr100, zqsr_corr 
    69       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpar, ze0, ze1, ze2, ze3, zchl3d 
     69      REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze0, ze1, ze2, ze3, zchl3d 
    7070      !!--------------------------------------------------------------------- 
    7171      ! 
     
    206206                 heup(ji,jj) = gdepw_n(ji,jj,jk+1)     ! Euphotic layer depth 
    207207              ENDIF 
    208               IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.50 )  THEN 
     208              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.10 )  THEN 
    209209                 heup_01(ji,jj) = gdepw_n(ji,jj,jk+1)  ! Euphotic layer depth (light level definition) 
    210210              ENDIF 
     
    235235      END DO 
    236236      ! 
    237       emoy(:,:,:) = etot(:,:,:)       ! PAR 
    238       zpar(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
     237      emoy(:,:,:)  = etot(:,:,:)       ! PAR 
     238      etotm(:,:,:) = etot_ndcy(:,:,:)  ! diagnostic : PAR with no diurnal cycle  
    239239      ! 
    240240      DO jk = 1, nksrp 
     
    244244                  z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
    245245                  emoy (ji,jj,jk) = zetmp1(ji,jj) * z1_dep 
    246                   zpar (ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
     246                  etotm(ji,jj,jk) = zetmp2(ji,jj) * z1_dep 
    247247               ENDIF 
    248248            END DO 
     
    313313        IF( knt == nrdttrc ) THEN 
    314314           IF( iom_use( "Heup"  ) ) CALL iom_put( "Heup" , heup(:,:  ) * tmask(:,:,1) )  ! euphotic layer deptht 
    315            IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", zpar(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
     315           IF( iom_use( "PARDM" ) ) CALL iom_put( "PARDM", etotm(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
    316316           IF( iom_use( "PAR"   ) ) CALL iom_put( "PAR"  , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
    317317        ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zprod.F90

    r13233 r14276  
    6767      INTEGER  ::   ji, jj, jk 
    6868      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 
    69       REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsilfac2, zsiborn 
     69      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsiborn 
    7070      REAL(wp) ::   zprod, zproreg, zproreg2, zprochln, zprochld 
    7171      REAL(wp) ::   zdocprod, zpislopen, zpisloped, zfact 
    72       REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp 
    73       REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n 
     72      REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp, zfecnm, zfecdm 
     73      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup 
    7474      CHARACTER (len=25) :: charout 
    7575      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d 
    7676      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    77       REAL(wp), DIMENSION(jpi,jpj    ) :: zstrn 
    7877      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 
    7978      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt   
     
    9493      zprbio  (:,:,:) = 0._wp ; zprchld (:,:,:) = 0._wp ; zprchln (:,:,:) = 0._wp  
    9594      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
     95      consfe3 (:,:,:) = 0._wp 
    9696 
    9797      ! Computation of the maximimum production. Based on a Q10 description 
     
    100100      zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
    101101      zprmaxd(:,:,:) = zprmaxn(:,:,:) 
    102  
    103       ! compute the day length depending on latitude and the day 
    104       ! Astronomical parameterization taken from HAMOCC3 
    105       zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    106       zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    107  
    108       ! day length in hours 
    109       zstrn(:,:) = 0. 
    110       DO jj = 1, jpj 
    111          DO ji = 1, jpi 
    112             zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    113             zargu = MAX( -1., MIN(  1., zargu ) ) 
    114             zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    115          END DO 
    116       END DO 
    117102 
    118103      ! Impact of the day duration and light intermittency on phytoplankton growth 
     
    127112            DO ji = 1, jpi 
    128113               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    129                   zval = MAX( 1., zstrn(ji,jj) ) 
     114                  zval = MAX( 1., strn(ji,jj) ) 
    130115                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    131116                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     
    225210                   ! Si/C of diatoms 
    226211                   ! ------------------------ 
    227                    ! Si/C increases with iron stress and silicate availability (zsilfac) 
     212                   ! Si/C increases with iron stress and silicate availability 
    228213                   ! Si/C is arbitrariliy increased for very high Si concentrations 
    229                    ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 
     214                   ! to mimic the very high ratios observed in the Southern Ocean (zsilfac) 
    230215                   ! A parameterization derived from Flynn (2003) is used for the control 
    231216                   ! when Si is not limiting which is similar to the parameterisation 
     
    236221                 zsiborn = trb(ji,jj,1,jpsil)**3 
    237222                 IF (gphit(ji,jj) < -30.0 ) THEN 
    238                    zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     223                   zsilfac = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    239224                 ELSE 
    240                    zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
     225                   zsilfac = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    241226                 ENDIF 
    242                  zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 
     227                 zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac * grosip * 3.0 + rtrn ) 
    243228                 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 
    244229                 zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 
    245230                 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 
    246                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 
     231                    zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zmaxsi 
    247232                 ELSE 
    248                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 
     233                    zysopt(ji,jj,jk) = zlim * zsilfac * grosip * 1.0 * zsilim**0.7 * zmaxsi 
    249234                 ENDIF 
    250235              ENDIF 
     
    291276                  ! do not suggest it for accimated cells. Uptake is 
    292277                  ! downregulated when the quota is close to the maximum quota 
    293                   zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) ) 
     278                  zfecnm = xqfuncfecn(ji,jj,jk) + ( fecnm - xqfuncfecn(ji,jj,jk) ) * ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) 
     279                  zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * zfecnm + rtrn ) ) 
    294280                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
    295                   zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     281                  zprofen(ji,jj,jk) = zfecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    296282                  &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk)  & 
    297283                  &          + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )   & 
     
    317303                  ! do not suggest it for accimated cells. Uptake is 
    318304                  ! downregulated when the quota is close to the maximum quota 
    319                   zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) ) 
     305                  zfecdm = xqfuncfecd(ji,jj,jk) + ( fecdm - xqfuncfecd(ji,jj,jk) ) * ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) 
     306                  zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * zfecdm + rtrn ) ) 
    320307                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
    321                   zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
     308                  zprofed(ji,jj,jk) = zfecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
    322309                  &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk)  & 
    323310                  &          + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )   & 
     
    339326                  zprod    = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 
    340327                  zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
    341  
    342                   ! The maximum reachable Chl quota is modulated by temperature 
    343                   ! following Geider (1987) 
    344                   chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    345                   zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
     328                  zprochln = zprochln + (chlcnm - chlcmin) * 12. * zprod / & 
    346329                                        & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
    347330 
     
    350333                  zprod    = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
    351334                  zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
    352  
    353                   ! The maximum reachable Chl quota is modulated by temperature 
    354                   ! following Geider (1987) 
    355                   chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    356                   zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     335                  zprochld = zprochld + (chlcdm - chlcmin) * 12. * zprod / & 
    357336                                        & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
    358337 
     
    386365                 &                   + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
    387366                 ! 
    388                  zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    389                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
     367                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - ( texcretn * zprofen(ji,jj,jk)    & 
     368                 &                   + texcretd * zprofed(ji,jj,jk) ) 
     369                 consfe3(ji,jj,jk) = ( texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) )     & 
     370                 &                    * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * trb(ji,jj,jk,jpfer) ) / rfact2 
    390371                 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk)   & 
    391372                 &                   * rfact2 * trb(ji,jj,jk,jpdia) 
     
    401382     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
    402383     ! and based on the FeL model by Morel et al. (2008) and on the study of 
    403      ! Shaked and Lis (2012) 
     384     ! Shaked et al. (2020) 
    404385     ! ------------------------------------------------------------------------- 
    405386     IF( ln_ligand ) THEN 
     
    412393                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    413394                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp    & 
    414                     &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     395                    &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    415396                    zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    416397                    zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 
    417                     &                      + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     398                    &                      + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    418399                 ENDIF 
    419400              END DO 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zrem.F90

    r13233 r14276  
    3535   REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON (p5z)  
    3636   REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP (p5z)  
    37    REAL(wp), PUBLIC ::   xremik     !: remineralisation rate of DOC (p4z)  
    3837   REAL(wp), PUBLIC ::   nitrif     !: NH4 nitrification rate  
    3938   REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of biogenic silica 
     
    7170      REAL(wp) ::   zremik, zremikc, zremikn, zremikp, zsiremin, zfact  
    7271      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    73       REAL(wp) ::   zbactfer, zolimit, zonitr, zrfact2 
    74       REAL(wp) ::   zammonic, zoxyremc, zoxyremn, zoxyremp 
    75       REAL(wp) ::   zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 
     72      REAL(wp) ::   zbactfer, zonitr 
     73      REAL(wp) ::   zammonic, zoxyremc, zosil, ztem, zdenitnh4, zolimic 
    7674      CHARACTER (len=25) :: charout 
    77       REAL(wp), DIMENSION(jpi,jpj    ) :: ztempbac 
    78       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zdepprod, zfacsi, zfacsib, zdepeff, zfebact 
     75      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdepbac, zolimi, zfacsi, zfacsib, zdepeff, zfebact 
    7976      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    8077      !!--------------------------------------------------------------------- 
     
    8380      ! 
    8481      ! Initialisation of arrays 
    85       zdepprod(:,:,:) = 1._wp 
    8682      zdepeff (:,:,:) = 0.3_wp 
    87       ztempbac(:,:)   = 0._wp 
    8883      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
    8984      zfebact(:,:,:)  = 0._wp 
     
    9994         DO jj = 1, jpj 
    10095            DO ji = 1, jpi 
    101                zdep = MAX( hmld(ji,jj), heup(ji,jj) ) 
    102                IF( gdept_n(ji,jj,jk) < zdep ) THEN 
    103                   zdepbac(ji,jj,jk) = MIN( 0.7 * ( trb(ji,jj,jk,jpzoo) + 2.* trb(ji,jj,jk,jpmes) ), 4.e-6 ) 
    104                   ztempbac(ji,jj)   = zdepbac(ji,jj,jk) 
    105                ELSE 
     96               zdep = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     97               zdepbac(ji,jj,jk) = 0.6 * ( MAX(0.0, trb(ji,jj,jk,jpzoo) + trb(ji,jj,jk,jpmes) ) * 1.0E6 )**0.6 * 1.E-6 
     98               IF( gdept_n(ji,jj,jk) >= zdep ) THEN 
    10699                  zdepmin = MIN( 1., zdep / gdept_n(ji,jj,jk) ) 
    107                   zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 
    108                   zdepprod(ji,jj,jk) = zdepmin**0.273 
    109100                  zdepeff (ji,jj,jk) = zdepeff(ji,jj,jk) * zdepmin**0.3 
    110101               ENDIF 
     
    113104      END DO 
    114105 
    115       IF( ln_p4z ) THEN ! Standard PISCES code 
    116          DO jk = 1, jpkm1 
    117             DO jj = 1, jpj 
    118                DO ji = 1, jpi 
    119                   ! DOC ammonification. Depends on a limitation term of the bacterial activity 
    120                   ! and on the implicit bacteria concentration 
    121                   ! -------------------------------------------------------------------------- 
    122                   zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    123                   zremik = MAX( zremik, 2.74e-4 * xstep ) 
    124  
    125                   ! Ammonification in oxic waters with oxygen consumption 
    126                   ! ----------------------------------------------------- 
    127                   zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    128                   zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    129  
    130                   ! Ammonification in suboxic waters with denitrification 
    131                   ! ----------------------------------------------------- 
    132                   zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
    133                   denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    134                   denitr(ji,jj,jk)  = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 
    135  
    136                   ! Ammonification in waters depleted in O2 and NO3 based on  
    137                   ! other redox processes 
    138                   ! -------------------------------------------------------- 
    139                   zoxyremc          = zammonic - denitr(ji,jj,jk) 
    140                   ! 
    141                   zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    142                   denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    143                   zoxyremc          = MAX( 0.e0, zoxyremc ) 
    144                   ! Update of the TRA arrays 
    145                   tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    146                   tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    147                   tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 
    148                   tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) - zoxyremc 
    149                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 
    150                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    151                   tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk) + zoxyremc    & 
    152                   &                     + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
    153                END DO 
    154             END DO 
    155          END DO 
    156       ELSE ! PISCES-QUOTA 
    157          DO jk = 1, jpkm1 
    158             DO jj = 1, jpj 
    159                DO ji = 1, jpi 
    160                   ! DOC ammonification. Depends on a limitation term of the bacterial activity 
    161                   ! and on the implicit bacteria concentration 
    162                   ! --------------------------------------------------------------- 
    163                   zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
    164                   zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
    165  
    166                   zremikc = xremikc * zremik 
    167                   zremikn = xremikn / xremikc 
    168                   zremikp = xremikp / xremikc 
    169  
    170                   ! Ammonification in oxic waters with oxygen consumption 
    171                   ! ----------------------------------------------------- 
    172                   zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    173                   zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) )  
    174                   zolimi(ji,jj,jk) = zolimic 
    175                   zolimin = zremikn * zolimic * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    176                   zolimip = zremikp * zolimic * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn )  
    177  
    178                   ! Ammonification in suboxic waters with denitrification 
    179                   ! ------------------------------------------------------- 
    180                   zammonic = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
    181                   denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    182                   denitr(ji,jj,jk)  = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
    183                   zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk)) 
    184                   zdenitrn  = zremikn * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    185                   zdenitrp  = zremikp * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    186                   zoxyremn  = zremikn * zoxyremc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    187                   zoxyremp  = zremikp * zoxyremc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    188                   ! Update of the TRA arrays 
    189                   tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp + zoxyremp 
    190                   tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn + zoxyremn 
    191                   tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
    192                   tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) - zoxyremc 
    193                   tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn - zoxyremn 
    194                   tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp - zoxyremp 
    195                   tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
    196                   tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) + zoxyremc 
    197                   tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + zoxyremn + ( rdenit + 1.) * zdenitrn ) 
    198                END DO 
    199             END DO 
    200          END DO 
    201          ! 
    202       ENDIF 
     106      DO jk = 1, jpkm1 
     107         DO jj = 1, jpj 
     108            DO ji = 1, jpi 
     109               ! DOC ammonification. Depends on a limitation term of the bacterial activity 
     110               ! and on the implicit bacteria concentration 
     111               ! -------------------------------------------------------------------------- 
     112               zremik = xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     113               zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     114               zremikc = xremikc * zremik 
     115 
     116               ! Ammonification in oxic waters with oxygen consumption 
     117               ! ----------------------------------------------------- 
     118               zolimic = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc) 
     119               zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimic ) ) 
     120               zolimi(ji,jj,jk) = zolimic 
     121 
     122               ! Ammonification in suboxic waters with denitrification 
     123               ! ----------------------------------------------------- 
     124               zammonic = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
     125               denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
     126               denitr(ji,jj,jk)  = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) ) 
     127 
     128               ! Ammonification in waters depleted in O2 and NO3 based on  
     129               ! other redox processes 
     130               ! -------------------------------------------------------- 
     131               zoxyremc          = MAX(0., zammonic - denitr(ji,jj,jk) ) 
     132 
     133               ! Update of the TRA arrays 
     134               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
     135               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     136               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
     137               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     138               IF ( ln_p4z ) THEN ! PISCES-std 
     139                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     140                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimic + denitr(ji,jj,jk) + zoxyremc 
     141                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     142               ELSE  ! PISCES-QUOTA (p5z) 
     143                  zremikn = xremikn / xremikc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     144                  zremikp = xremikp / xremikc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     145                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     146                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     147                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zremikn * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     148                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zremikp * ( zolimic + denitr(ji,jj,jk) + zoxyremc ) 
     149                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zremikn * ( zolimic + zoxyremc + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     150               ENDIF 
     151            END DO 
     152         END DO 
     153      END DO 
    203154 
    204155      DO jk = 1, jpkm1 
     
    211162               &         / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) )  
    212163               zdenitnh4 = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 
    213                zdenitnh4 = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenita, zdenitnh4 )  
     164               zdenitnh4 = MAX(0., MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenita, zdenitnh4 ) )  
    214165               ! Update of the tracers trends 
    215166               ! ---------------------------- 
     
    217168               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * zdenitnh4 
    218169               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 
    219                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
     170               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
    220171            END DO 
    221172         END DO 
     
    236187               ! studies (especially at Papa) have shown this uptake to be significant 
    237188               ! --------------------------------------------------------------------- 
    238                zbactfer = feratb *  rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk)     & 
    239                   &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    240                   &              * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     189               zbactfer = feratb * 0.6_wp * xstep * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk) * trb(ji,jj,jk,jpfer)    & 
     190                  &       / ( xkferb + trb(ji,jj,jk,jpfer) ) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
    241191 
    242192               ! Only the transfer of iron from its dissolved form to particles 
    243193               ! is treated here. The GGE of bacteria supposed to be equal to  
    244194               ! 0.33. This is hard-coded.  
    245                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 
    246                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 
    247                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.08 
    248                zfebact(ji,jj,jk)   = zbactfer * 0.33 
     195               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.18 
     196               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.15 
     197               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.03 
     198               zfebact(ji,jj,jk)   = zbactfer * 0.18 
    249199               blim(ji,jj,jk)      = xlimbacl(ji,jj,jk)  * zdepbac(ji,jj,jk) / 1.e-6 
    250200            END DO 
     
    304254 
    305255      IF( knt == nrdttrc ) THEN 
    306           zrfact2 = 1.e3 * rfact2r 
    307256          ALLOCATE( zw3d(jpi,jpj,jpk) ) 
    308257          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
     
    321270          ENDIF 
    322271          IF( iom_use( "FEBACT" ) )  THEN 
    323                zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zrfact2   ! Bacterial iron consumption 
     272               zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zfact   ! Bacterial iron consumption 
    324273               CALL iom_put( "FEBACT" , zw3d ) 
    325274          ENDIF 
     
    345294      !! 
    346295      !!---------------------------------------------------------------------- 
    347       NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     296      NAMELIST/nampisrem/ nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
    348297         &                xremikc, xremikn, xremikp 
    349298      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    367316         WRITE(numout,*) '   Namelist parameters for remineralization, nampisrem' 
    368317         IF( ln_p4z ) THEN 
    369             WRITE(numout,*) '      remineralization rate of DOC              xremik    =', xremik 
     318            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
    370319         ELSE 
    371320            WRITE(numout,*) '      remineralization rate of DOC              xremikc   =', xremikc 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsbc.F90

    r12526 r14276  
    483483      ! 
    484484      sedsilfrac = 0.03     ! percentage of silica loss in the sediments 
    485       sedcalfrac = 0.6      ! percentage of calcite loss in the sediments 
     485      sedcalfrac = 0.99     ! percentage of calcite loss in the sediments 
    486486      ! 
    487487   END SUBROUTINE p4z_sbc_init 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsed.F90

    r13233 r14276  
    6666      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep 
    6767      REAL(wp) ::  zwstpoc, zwstpon, zwstpop 
    68       REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp 
     68      REAL(wp) ::  ztrpo4s, ztrdp, zwdust, zmudia, ztemp 
    6969      REAL(wp) ::  xdiano3, xdianh4 
    7070      ! 
     
    7373      REAL(wp), DIMENSION(jpi,jpj    ) :: zwsbio3, zwsbio4 
    7474      REAL(wp), DIMENSION(jpi,jpj    ) :: zsedcal, zsedsi, zsedc 
    75       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight 
    76       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep 
    77       REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zsidep, zironice 
     75      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsoufer, zlight, ztrfer 
     76      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zpdep, zsidep 
     77      REAL(wp), ALLOCATABLE, DIMENSION(:,:  ) :: zironice 
    7878      !!--------------------------------------------------------------------- 
    7979      ! 
     
    137137      IF( ln_dust ) THEN 
    138138         !                                               
    139          ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 
     139         ALLOCATE( zsidep(jpi,jpj,jpk), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 
    140140 
    141141         ! Iron, P and Si deposition at the surface 
     
    154154         ! and the solubility are hard coded 
    155155         ! ---------------------------------------------------------------- 
    156          zsidep(:,:)   = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
    157          zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
     156         ! Si crustal abundance is about 26.9% by mass and 7.5% is soluble 
     157         ! (see for instance, Tegen and Kohfeld, 2006). 
     158         zsidep(:,:,1) = 0.269 * 0.075 * dust(:,:) * rfact2 / e3t_n(:,:,1) / 28.1  
     159         ! P Crustal abundance is about 0.1% by mass and about 10% of it soluble 
     160         ! (Paytan and McLaughlin, 2007). 
     161         zpdep (:,:,1) = 0.1 * 1.e-3 * dust(:,:) * rfact2 / e3t_n(:,:,1) / 31. / po4r  
    158162 
    159163         ! Iron solubilization of particles in the water column 
     
    168172         DO jk = 2, jpkm1 
    169173            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / (250. * wdust) ) 
    170             zpdep   (:,:,jk) = zirondep(:,:,jk) * 0.38 / po4r 
     174            zpdep   (:,:,jk) = zirondep(:,:,jk) * 1.e-3 / mfrac * 55.85 / 31. 
     175            zsidep  (:,:,jk) = zirondep(:,:,jk) * 0.269 / mfrac * 55.85 / 28.1 
    171176         END DO 
    172177 
    173178         ! Solubilization of particles in the water column (Si, P, Fe) 
    174          tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
    175179         DO jk = 1, jpkm1 
    176180            tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zpdep   (:,:,jk) 
    177181            tra(:,:,jk,jpfer) = tra(:,:,jk,jpfer) + zirondep(:,:,jk)  
     182            tra(:,:,jk,jpsil) = tra(:,:,jk,jpsil) + zsidep  (:,:,jk) 
    178183         ENDDO 
    179184         !  
     
    299304                 zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    300305                   &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
    301                  zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
     306                 zbureff(ji,jj) = 0.013 + 0.13 * zflx**2 / ( 7.0 + zflx )**2 
    302307              ENDIF 
    303308            END DO 
     
    306311      ENDIF 
    307312 
    308       ! Fraction of dSi that is remineralized in the sediments. This is  
    309       ! set so that the burial in sediments equals the total input of Si 
    310       ! by rivers and dust (sedsilfrac) 
    311       ! ---------------------------------------------------------------- 
     313      ! Fraction of dSi that is dissolved in the sediments. This fraction is   
     314      ! set to a constant value in p4zsbc 
     315      ! -------------------------------------------------------------------- 
    312316      IF( .NOT.lk_sed )  zrivsil = 1._wp - sedsilfrac 
    313317 
     
    331335         ! modeled. The amount of CaCO3 that dissolves in the sediments 
    332336         ! is computed using a metamodel constructed from Archer (1996) 
    333          ! ------------------------------------------------------------ 
     337         ! A minimum set to sedcalfrac is preserved. This value is defined 
     338         ! in p4zsbc 
     339         ! --------------------------------------------------------------- 
    334340         DO jj = 1, jpj 
    335341            DO ji = 1, jpi 
     
    341347               tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
    342348               ! 
    343                zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 
    344                zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
     349               zfactcal = MAX(-0.1, MIN( excess(ji,jj,ikt), 0.2 ) ) 
     350               zfactcal = 0.3 + 0.7 * MIN( 1., (0.1 + zfactcal) / ( 0.5 - zfactcal ) ) 
    345351               zrivalk  = sedcalfrac * zfactcal 
    346352               tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
     
    394400               zws4 = zwsbio4(ji,jj) * zdep 
    395401               zws3 = zwsbio3(ji,jj) * zdep 
     402               ! Fraction that is permanently buried in the sediments 
    396403               zrivno3 = 1. - zbureff(ji,jj) 
    397404               zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
     405               ! Denitrification in the sediments 
    398406               zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     407               ! Fraction that is not denitrified 
    399408               z1pdenit = zwstpoc * zrivno3 - zpdenit 
     409               ! Oxic remineralization of organic matter in the sediments 
    400410               zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     411               ! The fraction that cannot be denitrified nor oxidized by O2 
     412               ! is released back to the water column as DOC 
    401413               tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit 
     414               ! Update of the tracers concentrations 
    402415               tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit 
    403416               tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit 
     
    408421               sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt) 
    409422               zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc * e3t_n(ji,jj,ikt) 
     423               ! PISCES-QUOTA (p5z) 
    410424               IF( ln_p5z ) THEN 
    411425                  zwstpop              = trb(ji,jj,ikt,jpgop) * zws4 + trb(ji,jj,ikt,jppop) * zws3 
     
    421435      ! Nitrogen fixation process : light limitation of diazotrophy 
    422436      ! Small source of iron from particulate inorganic iron (photochemistry) 
     437      ! This is a purely adhoc param. 
    423438      !---------------------------------------------------------------------- 
    424439      DO jk = 1, jpkm1 
    425440         zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) )  
    426          zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 
     441         zsoufer(:,:,jk) = zlight(:,:,jk) * 1E-10 / ( 1E-10 + biron(:,:,jk) ) 
    427442      ENDDO 
    428443 
     
    438453            DO jj = 1, jpj 
    439454               DO ji = 1, jpi 
    440                   ! Potential nitrogen fixation dependant on temperature and iron 
     455                  ! Potential nitrogen fixation dependant on temperature 
    441456                  ztemp = tsn(ji,jj,jk,jp_tem) 
    442                   zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
    443                   xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
    444                   xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
    445                   zlim = ( 1.- xdiano3 - xdianh4 ) 
    446                   ! Nitrogen fixation is almost fully halted when the N  
    447                   ! limitation term (xdiano3+xdianh4) is > 0.9 
    448                   IF( zlim <= 0.1 )   zlim = 0.01 
     457                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) / rno3 
     458                  ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 
     459                  zlim = ( 1.- xnanonh4(ji,jj,jk) - xnanono3(ji,jj,jk) ) 
    449460                  zfact = zlim * rfact2 
    450                   ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
    451                   ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) 
     461                  ! Nitrogen fixation limitation by PO4 and Fe 
     462                  ztrfer(ji,jj,jk) = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
     463                  ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( concnnh4 + trb(ji,jj,jk,jppo4) ) 
    452464                  ztrdp = ztrpo4(ji,jj,jk) 
    453                   nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
     465                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer(ji,jj,jk), ztrdp ) * zlight(ji,jj,jk) 
    454466               END DO 
    455467            END DO 
     
    460472            DO jj = 1, jpj 
    461473               DO ji = 1, jpi 
    462                   ! Potential nitrogen fixation dependant on temperature and iron 
     474                  ! Potential nitrogen fixation dependant on temperature 
    463475                  ztemp = tsn(ji,jj,jk,jp_tem) 
    464476                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
     477                  ! Nitrogen fixation is inhibited when enough NO3 and/or NH4 
    465478                  xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
    466479                  xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
    467480                  zlim = ( 1.- xdiano3 - xdianh4 ) 
    468  
    469                   ! Nitrogen fixation is almost fully halted when the N  
    470                   ! limitation term (xdiano3+xdianh4) is > 0.9 
    471                   IF( zlim <= 0.1 )   zlim = 0.01 
    472481                  zfact = zlim * rfact2 
    473                   ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
     482                  ! Nitrogen fixation limitation by PO4/DOP and Fe 
     483                  ztrfer(ji,jj,jk) = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
    474484                  ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) 
    475485                  ztrdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( 1E-6 + trb(ji,jj,jk,jpdop) ) * (1. - ztrpo4(ji,jj,jk)) 
    476486                  ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) 
    477                   nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
     487                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer(ji,jj,jk), ztrdp ) * zlight(ji,jj,jk) 
    478488               END DO 
    479489            END DO 
     
    490500                  zfact = nitrpot(ji,jj,jk) * nitrfix 
    491501                  ! 1/3 of the diazotrophs growth is supposed to be excreted 
    492                   ! as NH4. 1/3 as DOC and the rest is routed POC and GOC as  
     502                  ! as NH4. 1/3 as DOC and the rest is routed to POC/GOC as  
    493503                  ! a result of mortality by predation. Completely adhoc param  
    494504                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 
     
    499509                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfact * 1.0 / 3.0 * 1.0 / 3.0 
    500510                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
    501                   ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C 
    502                   tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0 
    503                   tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
    504                   tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
    505                   tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     511                  ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max 
     512                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0 
     513                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0 * 2.0 / 3.0 
     514                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0 * 1.0 / 3.0 
     515                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.005 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     516                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
     517                  &                     * 0.001 * trb(ji,jj,jk,jpdoc) * xstep 
    506518              END DO 
    507519            END DO  
     
    533545                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 
    534546                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
    535                   ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C 
    536                   tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0  
    537                   tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
    538                   tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
     547                  ! Fe/c of diazotrophs is assumed to be 30umol Fe/mol C at max 
     548                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0  
     549                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0 * 2.0 / 3.0 
     550                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * ztrfer(ji,jj,jk) * zfact * 1.0 / 3.0 * 1.0 / 3.0 
    539551                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
    540552              END DO 
     
    558570            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * zfact ) ! Permanent burial of bSi in sediments 
    559571            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * zfact ) ! Permanent burial of OC in sediments 
    560             IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) ! Denitrification in the sediments 
     572!            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) ! Denitrification in the sediments 
     573            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", zdenit2d(:,:) ) ! Denitrification in the sediments 
    561574         ENDIF 
    562575      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsms.F90

    r13233 r14276  
    6464      REAL(wp) ::  ztra 
    6565      CHARACTER (len=25) :: charout 
     66      REAL(wp), DIMENSION(jpi,jpj,jpk,jp_pisces) :: ztrbbio 
    6667      !!--------------------------------------------------------------------- 
    6768      ! 
     
    102103         END DO 
    103104      ENDIF 
     105 
     106      DO jn = jp_pcs0, jp_pcs1              !   Store the tracer concentrations before entering PISCES 
     107         ztrbbio(:,:,:,jn) = trb(:,:,:,jn) 
     108      END DO 
    104109      ! 
    105110      IF( ll_sbc ) CALL p4z_sbc( kt )   ! external sources of nutrients  
     
    147152            tra(:,:,:,jn) = 0._wp 
    148153         END DO 
    149          ! Euler-forward temporal scheme 
    150          IF( ln_top_euler ) THEN 
    151             DO jn = jp_pcs0, jp_pcs1 
    152                trn(:,:,:,jn) = trb(:,:,:,jn) 
    153             END DO 
    154          ENDIF 
     154         ! 
    155155      END DO 
    156  
     156      ! 
     157#endif 
     158      ! 
     159      ! If ln_sediment is set to .true. then the sediment module is called 
     160      IF( ln_sediment ) THEN  
     161         ! 
     162         CALL sed_model( kt )     !  Main program of Sediment model 
     163         ! 
     164      ENDIF 
     165      ! 
     166      ! 
     167      DO jn = jp_pcs0, jp_pcs1 
     168         tra(:,:,:,jn) = ( trb(:,:,:,jn) - ztrbbio(:,:,:,jn) ) * rfactr 
     169         trb(:,:,:,jn) = ztrbbio(:,:,:,jn) 
     170         ztrbbio(:,:,:,jn) = 0._wp 
     171      END DO 
    157172      ! 
    158173      IF( l_trdtrc ) THEN 
     
    161176         END DO 
    162177      END IF 
    163 #endif 
    164       ! 
    165       ! If ln_sediment is set to .true. then the sediment module is called 
    166       IF( ln_sediment ) THEN  
    167          ! 
    168          CALL sed_model( kt )     !  Main program of Sediment model 
    169          ! Eulor forward temporal scheme 
    170          IF( ln_top_euler ) THEN 
    171             DO jn = jp_pcs0, jp_pcs1 
    172                trn(:,:,:,jn) = trb(:,:,:,jn) 
    173             END DO 
    174          ENDIF 
    175          ! 
    176       ENDIF 
    177178      ! 
    178179      IF( lrst_trc )  CALL p4z_rst( kt, 'WRITE' )  !* Write PISCES informations in restart file  
     
    199200      INTEGER :: ios                 ! Local integer output status for namelist read 
    200201      !! 
    201       NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, wsbio2max, wsbio2scale,    & 
    202          &                  ldocp, ldocz, lthet, no3rat3, po4rat3 
     202      NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, feratz, feratm, wsbio2, wsbio2max,    & 
     203         &                wsbio2scale, ldocp, ldocz, lthet, no3rat3, po4rat3 
    203204         ! 
    204205      NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 
     
    226227         WRITE(numout,*) '      half saturation constant for mortality    xkmort      =', xkmort  
    227228         IF( ln_p5z ) THEN 
    228             WRITE(numout,*) '      N/C in zooplankton                        no3rat3     =', no3rat3 
    229             WRITE(numout,*) '      P/C in zooplankton                        po4rat3     =', po4rat3 
    230          ENDIF 
    231          WRITE(numout,*) '      Fe/C in zooplankton                       ferat3      =', ferat3 
     229            WRITE(numout,*) '      N/C in zooplankton                     no3rat3     =', no3rat3 
     230            WRITE(numout,*) '      P/C in zooplankton                     po4rat3     =', po4rat3 
     231         ENDIF 
     232         WRITE(numout,*) '      Fe/C in microzooplankton                  feratz      =', feratz 
     233         WRITE(numout,*) '      Fe/C in microzooplankton                  feratz      =', feratm 
    232234         WRITE(numout,*) '      Big particles sinking speed               wsbio2      =', wsbio2 
    233235         WRITE(numout,*) '      Big particles maximum sinking speed       wsbio2max   =', wsbio2max 
     
    313315         ENDIF 
    314316 
     317         ! Read the Fe3 consumption term by phytoplankton 
     318         IF( iom_varid( numrtr, 'Consfe3', ldstop = .FALSE. ) > 0 ) THEN 
     319            CALL iom_get( numrtr, jpdom_autoglo, 'Consfe3' , consfe3(:,:,:)  ) 
     320         ELSE 
     321            consfe3(:,:,:) = 0._wp 
     322         ENDIF 
     323 
     324 
    315325         ! Read the cumulative total flux. If not in the restart file, it is set to 0           
    316326         IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon 
     
    326336            sized(:,:,:) = 1. 
    327337         ENDIF 
     338         sized(:,:,:) = MAX( 1.0, sized(:,:,:) ) 
    328339         IF( iom_varid( numrtr, 'sizen', ldstop = .FALSE. ) > 0 ) THEN 
    329340            CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sizen(:,:,:)  ) 
     
    331342            sizen(:,:,:) = 1. 
    332343         ENDIF 
     344         sizen(:,:,:) = MAX( 1.0, sizen(:,:,:) ) 
    333345 
    334346         ! PISCES-QUOTA specific part 
     
    338350            IF( iom_varid( numrtr, 'sizep', ldstop = .FALSE. ) > 0 ) THEN 
    339351               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:)  ) 
     352               sizep(:,:,:) = MAX( 1.0, sizep(:,:,:) ) 
    340353            ELSE 
    341354               sizep(:,:,:) = 1. 
     
    353366         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) )    ! Si 1/2 saturation constant 
    354367         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) ! Si max concentration 
     368         CALL iom_rstput( kt, nitrst, numrtw, 'Consfe3', consfe3(:,:,:) ) ! Si max concentration 
    355369         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 
    356370         CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )  ! Size of nanophytoplankton 
     
    377391      ! 
    378392      REAL(wp) ::  alkmean = 2426.     ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 
    379       REAL(wp) ::  po4mean = 2.165     ! mean value of phosphate 
    380       REAL(wp) ::  no3mean = 30.90     ! mean value of nitrate 
    381       REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
     393      REAL(wp) ::  po4mean = 2.174     ! mean value of phosphate 
     394      REAL(wp) ::  no3mean = 31.00     ! mean value of nitrate 
     395      REAL(wp) ::  silmean = 90.33     ! mean value of silicate 
    382396      ! 
    383397      REAL(wp) :: zarea, zalksumn, zpo4sumn, zno3sumn, zsilsumn 
     
    534548         zwork(:,:,:) =   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe)   & 
    535549            &         +   trn(:,:,:,jpbfe) + trn(:,:,:,jpsfe)                      & 
    536             &         + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) )  * ferat3     
     550            &         + trn(:,:,:,jpzoo) * feratz + trn(:,:,:,jpmes) * feratm 
    537551         ! 
    538552         ferbudget = glob_sum( 'p4zsms', zwork(:,:,:) * cvol(:,:,:)  )   
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90

    r13233 r14276  
    8888   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk    !: Maximum potential uptake rate of picophyto 
    8989   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 
    9092 
    9193   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
     
    127129      REAL(wp) ::   zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe 
    128130      REAL(wp) ::   fanano, fananop, fananof, fadiat, fadiatp, fadiatf 
    129       REAL(wp) ::   fapico, fapicop, fapicof 
     131      REAL(wp) ::   fapico, fapicop, fapicof, zlimpo4, zlimdop 
    130132      REAL(wp) ::   zrpho, zrass, zcoef, zfuptk, zratchl 
    131133      REAL(wp) ::   zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 
    132       REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 
    133       REAL(wp) ::   zlim1f, zsizetmp 
    134       REAL(wp), DIMENSION(jpi,jpj,jpk) :: xlimnpn, xlimnpp, xlimnpd 
     134      REAL(wp) ::   zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4, zbiron 
     135      REAL(wp) ::   znutlimtot, zlimno3, zlimnh4, zlim1f, zsizetmp 
     136      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zrassn, zrassp, zrassd 
    135137      !!--------------------------------------------------------------------- 
    136138      ! 
     
    143145         DO jj = 1, jpj 
    144146            DO ji = 1, jpi 
    145                !  
    146                ! Tuning of the iron concentration to a minimum level that 
    147                ! is set to the detection limit 
    148                ! -------------------------------------------------------- 
    149                zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    150                zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
    151                zferlim = MIN( zferlim, 7e-11 ) 
    152                trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    153  
    154147               ! Computation of the Chl/C ratio of each phytoplankton group 
    155148               ! ---------------------------------------------------------- 
     
    190183               ! From Talmy et al. (2014) and Maranon et al. (2013) 
    191184               ! ------------------------------------------------------- 
    192                xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.3) 
     185               xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.36) 
    193186               xqnnmax(ji,jj,jk) = qnnmax 
    194                xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.3) 
     187               xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.36) 
    195188               xqndmax(ji,jj,jk) = qndmax 
    196                xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.48) 
    197                xqnpmax(ji,jj,jk) = qnpmax * sizep(ji,jj,jk)**(-0.21) 
     189               xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.36) 
     190               xqnpmax(ji,jj,jk) = qnpmax 
    198191 
    199192               ! Computation of the optimal allocation parameters 
     
    201194               ! Smith et al. 
    202195               ! --------------------------------------------------- 
    203  
     196               zbiron = ( 75.0 * ( 1.0 - plig(ji,jj,jk) ) + plig(ji,jj,jk) ) * biron(ji,jj,jk) 
    204197               ! Nanophytoplankton 
    205198               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4,    & 
     
    208201               znutlim = trb(ji,jj,jk,jppo4) / zconc0npo4 
    209202               fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    210                znutlim = biron(ji,jj,jk) / zconcnfe 
     203               znutlim = zbiron / zconcnfe 
    211204               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    212205 
     
    217210               znutlim = trb(ji,jj,jk,jppo4) / zconc0ppo4 
    218211               fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    219                znutlim = biron(ji,jj,jk) / zconcpfe 
     212               znutlim = zbiron / zconcpfe 
    220213               fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    221214 
     
    226219               znutlim = trb(ji,jj,jk,jppo4) / zconc0dpo4 
    227220               fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    228                znutlim = biron(ji,jj,jk) / zconcdfe 
     221               znutlim = zbiron / zconcdfe 
    229222               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    230223 
     
    232225               ! heterotrophic bacteria 
    233226               ! ------------------------------------------------- 
    234                zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 
    235                zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) 
     227               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( concbno3 + trb(ji,jj,jk,jpnh4) ) 
     228               zlimno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) 
     229               znutlimtot = ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) / ( concbno3 + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     230               zbactnh4 = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     231               zbactno3 = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    236232               ! 
    237233               zlim1    = zbactno3 + zbactnh4 
     
    250246               ! Limitation of N based nutrients uptake (NO3 and NH4) 
    251247               zfalim = (1.-fanano) / fanano 
    252                xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) 
    253                xnanono3(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trb(ji,jj,jk,jpno3) )  & 
    254                &                    * (1. - xnanonh4(ji,jj,jk)) 
     248               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( zconc0n + trb(ji,jj,jk,jpnh4) ) 
     249               zlimno3 = trb(ji,jj,jk,jpno3) / ( zconc0n + trb(ji,jj,jk,jpno3) ) 
     250               znutlimtot = (1. - fanano) * ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) / ( zfalim * zconc0n + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     251               xnanonh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     252               xnanono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    255253               ! 
    256254               ! Limitation of P based nutrients (PO4 and DOP) 
    257255               zfalim = (1.-fananop) / fananop 
    258                xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) 
    259                xnanodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   & 
    260                &                    * ( 1.0 - xnanopo4(ji,jj,jk) ) 
    261                xnanodop(ji,jj,jk) = 0. 
     256               zlimpo4 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0npo4 ) 
     257               zlimdop = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + zconc0npo4 ) 
     258               znutlimtot = (1. - fananop) * ( trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) / ( zfalim * zconc0npo4 + trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) 
     259               xnanopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     260               xnanodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
    262261               ! 
    263262               ! Limitation of Fe uptake 
    264263               zfalim = (1.-fananof) / fananof 
    265                xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 
     264               xnanofer(ji,jj,jk) = (1. - fananof) * zbiron / ( zbiron + zfalim * zconcnfe ) 
    266265               ! 
    267266               ! The minimum iron quota depends on the size of PSU, respiration 
     
    270269               zratiof   = trb(ji,jj,jk,jpnfe) * z1_trnphy 
    271270               zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 
     271               xqfuncfecn(ji,jj,jk) = zqfemn + qfnopt 
    272272               ! 
    273273               zration = trb(ji,jj,jk,jpnph) * z1_trnphy 
    274274               zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration )) 
    275                zzpsiuptk = xqnnmin(ji,jj,jk) * rno3 / zpsiuptk**2 
    276                fvnuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
     275               fvnuptk(ji,jj,jk) = 2.5 * zpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn)  & 
    277276               &                   * MAX(0., (1. - zratchl * znanochl / 12. ) ) 
    278277               ! 
     
    282281               ! The value of the optimal quota in the formulation below 
    283282               ! has been found by solving a non linear equation 
    284                zlim1f = max(0., ( 1.086 - xqnnmin(ji,jj,jk) )  & 
     283               zlim1f = max(0., ( 1.13 - xqnnmin(ji,jj,jk) )  & 
    285284               &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 
    286285               zlim3  = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 
     
    297296               ! Limitation of N based nutrients uptake (NO3 and NH4)  
    298297               zfalim = (1.-fapico) / fapico  
    299                xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) 
    300                xpicono3(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trb(ji,jj,jk,jpno3) )  & 
    301                &                    * (1. - xpiconh4(ji,jj,jk)) 
     298               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( zconc0p + trb(ji,jj,jk,jpnh4) ) 
     299               zlimno3 = trb(ji,jj,jk,jpno3) / ( zconc0p + trb(ji,jj,jk,jpno3) ) 
     300               znutlimtot = (1. - fapico) * ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) )   & 
     301               &            / ( zfalim * zconc0p + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     302               xpiconh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     303               xpicono3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    302304               ! 
    303305               ! Limitation of P based nutrients uptake (PO4 and DOP) 
    304306               zfalim = (1.-fapicop) / fapicop  
    305                xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) 
    306                xpicodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )   & 
    307                &                    * ( 1.0 - xpicopo4(ji,jj,jk) ) 
    308                xpicodop(ji,jj,jk) = 0. 
     307               zlimpo4 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0ppo4 ) 
     308               zlimdop = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + zconc0ppo4 ) 
     309               znutlimtot = (1. - fapicop) * ( trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) / ( zfalim * zconc0ppo4 + trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) 
     310               xpicopo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     311               xpicodop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
    309312               ! 
    310313               zfalim = (1.-fapicof) / fapicof 
    311                xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 
     314               xpicofer(ji,jj,jk) = (1. - fapicof) * zbiron / ( zbiron + zfalim * zconcpfe ) 
    312315               ! 
    313316               ! The minimum iron quota depends on the size of PSU, respiration 
    314317               ! and the reduction of nitrate following the parameterization  
    315318               ! proposed by Flynn and Hipkin (1999) 
    316                zratiof   = trb(ji,jj,jk,jppfe) * z1_trnpic 
     319               zratiof = trb(ji,jj,jk,jppfe) * z1_trnpic 
    317320               zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 
     321               xqfuncfecp(ji,jj,jk) = zqfemp + qfpopt 
    318322               ! 
    319323               zration   = trb(ji,jj,jk,jpnpi) * z1_trnpic 
    320324               zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration )) 
    321                zzpsiuptk = xqnpmin(ji,jj,jk) * rno3 / zpsiuptk**2 
    322                fvpuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
     325               fvpuptk(ji,jj,jk) = 2.5 * zpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn)  & 
    323326               &                   * MAX(0., (1. - zratchl * zpicochl / 12. ) )  
    324327               ! 
     
    328331               ! The value of the optimal quota in the formulation below 
    329332               ! has been found by solving a non linear equation 
    330                zlim1f   = max(0., (1.367 - xqnpmin(ji,jj,jk) )  & 
     333               zlim1f   = max(0., (1.29 - xqnpmin(ji,jj,jk) )  & 
    331334               &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 
    332335               zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 
     
    344347               ! Limitation of N based nutrients uptake (NO3 and NH4) 
    345348               zfalim = (1.-fadiat) / fadiat  
    346                xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) 
    347                xdiatno3(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trb(ji,jj,jk,jpno3) )  & 
    348                &                    * (1. - xdiatnh4(ji,jj,jk)) 
     349               zlimnh4 = trb(ji,jj,jk,jpnh4) / ( zconc1d + trb(ji,jj,jk,jpnh4) ) 
     350               zlimno3 = trb(ji,jj,jk,jpno3) / ( zconc1d + trb(ji,jj,jk,jpno3) ) 
     351               znutlimtot = (1.0 - fadiat) * ( trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) )    & 
     352               &            / ( zfalim * zconc1d + trb(ji,jj,jk,jpnh4) + trb(ji,jj,jk,jpno3) ) 
     353               xdiatnh4(ji,jj,jk) = znutlimtot * 5.0 * zlimnh4 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
     354               xdiatno3(ji,jj,jk) = znutlimtot * zlimno3 / ( zlimno3 + 5.0 * zlimnh4 + rtrn ) 
    349355               ! 
    350356               ! Limitation of P based nutrients uptake (PO4 and DOP) 
    351357               zfalim = (1.-fadiatp) / fadiatp 
    352                xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) 
    353                xdiatdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc )  & 
    354                &                    * ( 1.0 - xdiatpo4(ji,jj,jk) ) 
    355                xdiatdop(ji,jj,jk) = 0. 
     358               zlimpo4 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0dpo4 ) 
     359               zlimdop = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + zconc0dpo4 ) 
     360               znutlimtot = (1. - fadiatp) * ( trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) / ( zfalim * zconc0dpo4 + trb(ji,jj,jk,jppo4) + trb(ji,jj,jk,jpdop) ) 
     361               xdiatpo4(ji,jj,jk) = znutlimtot * 100.0 * zlimpo4 / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
     362               xdiatdop(ji,jj,jk) = znutlimtot * zlimdop / ( zlimdop + 100.0 * zlimpo4 + rtrn ) 
    356363               ! 
    357364               ! Limitation of Fe uptake 
    358365               zfalim = (1.-fadiatf) / fadiatf 
    359                xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 
     366               xdiatfer(ji,jj,jk) = (1. - fadiatf) * zbiron / ( zbiron + zfalim * zconcdfe ) 
    360367               ! 
    361368               ! The minimum iron quota depends on the size of PSU, respiration 
     
    364371               zratiof   = trb(ji,jj,jk,jpdfe) * z1_trndia 
    365372               zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 
     373               xqfuncfecd(ji,jj,jk) = zqfemd + qfdopt 
    366374               ! 
    367375               zration   = trb(ji,jj,jk,jpndi) * z1_trndia 
    368376               zration   = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration )) 
    369                zzpsiuptk = xqndmin(ji,jj,jk) * rno3 / zpsiuptk**2 
    370                fvduptk(ji,jj,jk) = 1. / zzpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
     377               fvduptk(ji,jj,jk) = 2.5 * zpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn)   & 
    371378               &                   * MAX(0., (1. - zratchl * zdiatchl / 12. ) )  
    372379               ! 
     
    376383               ! The value of the optimal quota in the formulation below 
    377384               ! has been found by solving a non linear equation 
    378                zlim1f   = max(0., (1.077 - xqndmin(ji,jj,jk) )    & 
     38565             zlim1f   = max(0., (1.13 - xqndmin(ji,jj,jk) )    & 
    379386               &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   & 
    380387               &          * xqndmax(ji,jj,jk) 
     
    408415               ! ------------------------------ 
    409416               zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn ) 
    410                zrpho  = 1.54 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 14. + rtrn ) 
     417               ! Computed from Inomura et al. (2020) using Pavlova Lutheri 
     418               zrpho  = 11.55 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) * 12. + rtrn ) 
    411419               zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) ) 
    412                xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 * xqnnmin(ji,jj,jk) ) * 16. 
    413                xqpnmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16. 
    414                xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn )  & 
    415                &      + (0.033 + 0.0078 ) * 16. 
     420               zrassn(ji,jj,jk) = zrass 
     421               xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 ) * 16. 
     422               xqpnmax(ji,jj,jk) = ( zrpho * 0.0089 + zrass * 0.0783 ) * 16. 
     423               xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) + (0.033 + 0.0078 ) * 16. 
    416424               xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) ) 
    417  
    418425 
    419426               ! Size estimation of picophytoplankton based on total biomass 
     
    425432               ! N/P ratio of picophytoplankton 
    426433               ! ------------------------------ 
    427                zfuptk = 0.2 + 0.12 / ( 0.5 * sizep(ji,jj,jk) + rtrn ) 
    428                zrpho = 1.54 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 14. + rtrn ) 
     434               zfuptk = 0.2 + 0.12 / ( 0.8 * sizep(ji,jj,jk) + rtrn ) 
     435               ! Computed from Inomura et al. (2020) using a synechococcus 
     436               zrpho = 13.4 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jppic) * 12. + rtrn ) 
    429437               zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) ) 
    430                xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 * xqnpmin(ji,jj,jk) ) * 16. 
    431                xqppmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0517 ) * 16. 
    432                xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) & 
    433                &      +  (0.033 + 0.0078 ) * 16 
     438               zrassp(ji,jj,jk) = zrass 
     439               xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 ) * 16. 
     440               xqppmax(ji,jj,jk) = ( zrpho * 0.0076 + zrass * 0.0517 ) * 16. 
     441               xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) +  (0.033 + 0.0078 ) * 16 
    434442               xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 
    435443 
     
    443451               ! -------------------- 
    444452               zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn ) 
    445                zrpho = 1.54 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 14. + rtrn ) 
     453               ! Computed from Inomura et al. (2020) using a synechococcus 
     454               zrpho = 8.08 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * 12. + rtrn ) 
    446455               zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) ) 
    447  
    448                xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 *  xqndmin(ji,jj,jk) ) * 16. 
    449                xqpdmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16. 
    450                xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 
    451                &      + ( 0.0078 + 0.033 ) * 16. 
     456               zrassd(ji,jj,jk)=zrass 
     457               xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 ) * 16. 
     458               xqpdmax(ji,jj,jk) = ( zrpho * 0.0135 + zrass * 0.0783 ) * 16. 
     459               xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) + ( 0.0078 + 0.033 ) * 16. 
    452460               xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) ) 
    453461 
     
    467475               &        / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) ) 
    468476               zlim2  = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnpo4 ) 
    469                zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  5.E-11 )  
    470                ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 
     477               zlim3  = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) +  6.E-11 )  
     478               ztem1  = MAX( 0., tsn(ji,jj,jk,jp_tem) + 1.8 ) 
    471479               ztem2  = tsn(ji,jj,jk,jp_tem) - 10. 
    472                zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) )  
    473  
    474                xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 )    & 
    475                &                   * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 )   & 
     480               zetot1 = MAX( 0., etot_ndcy(ji,jj,jk) - 1.) / ( 4. + etot_ndcy(ji,jj,jk) ) * 30. / ( 30. + etot_ndcy(ji,jj,jk) )  
     481 
     482               xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk)     & 
     483               &                   * ztem1 / ( 0.1 + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 )   & 
    476484                  &                * ( 1. + EXP(-ztem2 * ztem2 / 25. ) )         & 
    477485                  &                * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 
     
    508516        IF( iom_use( "SIZEP"   ) ) CALL iom_put( "SIZEP"  , sizep(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    509517        IF( iom_use( "SIZED"   ) ) CALL iom_put( "SIZED"  , sized(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     518        IF( iom_use( "RASSN"   ) ) CALL iom_put( "RASSN"  , zrassn(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     519        IF( iom_use( "RASSP"   ) ) CALL iom_put( "RASSP"  , zrassp(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     520        IF( iom_use( "RASSD"   ) ) CALL iom_put( "RASSD"  , zrassd(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    510521      ENDIF 
    511522      ! 
     
    640651         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       & 
    641652         &      xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk),       & 
    642          &      xlimpics(jpi,jpj,jpk),                              & 
     653         &      xlimnpp (jpi,jpj,jpk), xlimnpn (jpi,jpj,jpk),       & 
     654         &      xlimnpd (jpi,jpj,jpk),                              & 
     655         &      xlimpics(jpi,jpj,jpk), xqfuncfecp(jpi,jpj,jpk),     & 
    643656         &      fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk),    STAT=ierr(1) ) 
    644657         ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90

    r13234 r14276  
    8888      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 
    8989      REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 
    90       REAL(wp) :: zgratmp, zgradoct, zgradont, zgrareft, zgradopt 
     90      REAL(wp) :: zgradoct, zgradont, zgrareft, zgradopt 
    9191      REAL(wp) :: zprcaca, zmortz, zexcess 
    9292      REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 
     
    104104      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 
    105105      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 
    106       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof, zstrn 
     106      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrem, zgramigref, zgramigpoc, zgramigpof 
    107107      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigrep, zgramigren, zgramigpop, zgramigpon 
    108108      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   ::   zgramigdoc, zgramigdop, zgramigdon 
     
    190190               ! to avoid starvation. 
    191191               ! ---------------------------------------------------------- 
    192                zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     192               zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 
    193193               zsigma = xsigma2 + xsigma2del * zsigma 
    194194               ! Nanophytoplankton and diatoms are the only preys considered 
     
    267267 
    268268               zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 
    269                zgraztotf  = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3 + zgrazpof & 
     269               zgraztotf  = zgrazdf + zgraznf + zgrazz * feratz + zgrazm * feratm + zgrazpof & 
    270270               &            + zgrazfffp + zgrazfffg 
    271271               zgraztotn  = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon  & 
     
    291291               ! Fulton, 2012) 
    292292               ! ----------------------------------------------------------------------------------- 
    293                zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
     293               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratm) 
    294294               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
    295295               zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
     
    312312               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
    313313               zbasresp = zbasresi * zexcess * zgrasratp 
    314                zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     314               zexcess  = ( zgrasratf/ feratm - zepshert ) / ( 1.0 - zepshert + rtrn) 
    315315               zbasresf = zbasresi * zexcess * zgrasratf 
    316316 
     
    320320               zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
    321321               zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 
    322                zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
    323                ztmp1   = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 
     322               zgrareft = (1. - unass2c) * zgraztotf - zepsherv * feratm * zgraztotc - zbasresf 
     323               ztmp1    = (1. - epsher2 - unass2c) /( 1. - epsher2 ) * ztortz 
    324324               zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 
    325325               zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 
    326326               zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 
    327                zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 
    328327 
    329328               !  Since only semilabile DOM is represented in PISCES 
     
    331330               !  as dissolved inorganic compounds (ssigma2) 
    332331               !  -------------------------------------------------- 
    333                zgrarem(ji,jj,jk) = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 
    334                zgraren(ji,jj,jk) = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 
    335                zgrarep(ji,jj,jk) = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 
    336                zgraref(ji,jj,jk) = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 
     332               zgrarem(ji,jj,jk) = ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 
     333               zgraren(ji,jj,jk) = ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 
     334               zgrarep(ji,jj,jk) = ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 
     335               zgraref(ji,jj,jk) = zgrareft + feratm * ztmp1 
    337336 
    338337               !   Defecation as a result of non assimilated products 
    339338               !   -------------------------------------------------- 
    340                zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
    341                zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 
    342                zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 
    343                zgrapof(ji,jj,jk)  = zgraztotf * unass2c + ferat3  * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 
     339               zgrapoc(ji,jj,jk)  = zgraztotc * unass2c + unass2c / ( 1. - epsher2 ) * ztortz 
     340               zgrapon(ji,jj,jk)  = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - epsher2 ) * ztortz 
     341               zgrapop(ji,jj,jk)  = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - epsher2 ) * ztortz 
     342               zgrapof(ji,jj,jk)  = zgraztotf * unass2c + feratm  * unass2c / ( 1. - epsher2 ) * ztortz 
    344343 
    345344               !  Addition of respiration to the release of inorganic nutrients 
     
    348347               zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 
    349348               zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 
    350                zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * ferat3 
     349               zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * feratm 
    351350 
    352351               !   Update the arrays TRA which contain the biological sources and 
     
    404403         ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 
    405404         ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 
    406          ALLOCATE( zstrn(jpi,jpj) ) 
    407405         zgramigrem(:,:)  = 0.0   ;   zgramigref(:,:) = 0.0 
    408406         zgramigrep(:,:)  = 0.0   ;   zgramigren(:,:) = 0.0 
     
    411409         zgramigdoc(:,:)  = 0.0   ;   zgramigdon(:,:) = 0.0 
    412410         zgramigdop(:,:)  = 0.0    
    413  
    414          ! compute the day length depending on latitude and the day 
    415          zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    416          zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    417  
    418          ! day length in hours 
    419          zstrn(:,:) = 0. 
    420          DO jj = 1, jpj 
    421             DO ji = 1, jpi 
    422                zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    423                zargu = MAX( -1., MIN(  1., zargu ) ) 
    424                zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    425                zstrn(ji,jj) = MIN(0.75, MAX( 0.25, zstrn(ji,jj) / 24.) ) 
    426             END DO 
    427          END DO 
    428  
    429411 
    430412        ! Compute the amount of materials that will go into vertical migration 
     
    435417            DO jj = 1, jpj 
    436418               DO ji = 1, jpi 
    437                   zmigreltime = (1. - zstrn(ji,jj)) 
     419                  zmigreltime = (1. - strn(ji,jj)) 
    438420                  IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 
    439421                     zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * (1. - zmigreltime )    & 
     
    441423                     zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime )    & 
    442424                     &                   * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    443                      zgramigrep(ji,jj) = zgramigren(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime )    & 
     425                     zgramigren(ji,jj) = zgramigren(ji,jj) + xfracmig * zgraren(ji,jj,jk) * (1. - zmigreltime )    & 
    444426                     &                   * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    445427                     zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * (1. - zmigreltime )   & 
     
    503485         DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 
    504486         DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 
    505          DEALLOCATE( zstrn ) 
    506487      ! End of the ln_dvm_meso part 
    507488      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90

    r13233 r14276  
    110110               ! Proportion of nano and diatoms that are within the size range 
    111111               ! accessible to microzooplankton.  
    112                zproport  = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 
    113                zproport2 = sizen(ji,jj,jk)**(-0.54) 
     112               zproport  = min(sized(ji,jj,jk),1.8)**(-0.48)*min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 
     113               zproport2 = sizen(ji,jj,jk)**(-0.48) 
     114               zproport2 = 1.0 
    114115               !  linear mortality of mesozooplankton 
    115116               !  A michaelis menten modulation term is used to avoid extinction of  
     
    162163               ! to avoid starvation. 
    163164               ! ---------------------------------------------------------- 
    164                zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     165               zsigma = 1.0 - zdenom**3/(0.1**3+zdenom**3) 
    165166               zsigma = xsigma + xsigmadel * zsigma 
    166                zdiffpn = exp( -ABS(log(0.5 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
     167               zdiffpn = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
    167168               zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 
    168                zdiffdp = exp( -ABS(log(0.5 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 
     169               zdiffdp = exp( -ABS(log(0.7 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 
    169170               ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi ) / ( 1.0 + zdiffdn + zdiffpn ) 
    170171               ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi ) / ( 1.0 + zdiffpn + zdiffdp ) 
     
    211212               zgraztotn = zgraznn + zgrazpn + zgrazpon + zgrazdn + zgrazz * no3rat3 
    212213               zgraztotp = zgraznp + zgrazpp + zgrazpop + zgrazdp + zgrazz * po4rat3 
    213                zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * ferat3 
     214               zgraztotf = zgraznf + zgrazpf + zgrazpof + zgrazdf + zgrazz * feratz 
    214215               ! 
    215216               ! Grazing by microzooplankton 
     
    230231               ! Fulton, 2012) 
    231232               ! ----------------------------------------------------------------------------------- 
    232                zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
     233               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / feratz) 
    233234               zbeta     = MAX( 0., (epsher - epshermin) ) 
    234235               ! Food density deprivation of GGE 
     
    255256               zexcess  = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
    256257               zbasresp = zbasresi * zexcess * zgrasratp 
    257                zexcess  = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
     258               zexcess  = ( zgrasratf/ feratz - zepshert ) / ( 1.0 - zepshert + rtrn) 
    258259               zbasresf = zbasresi * zexcess * zgrasratf 
    259260 
     
    263264               zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
    264265               zgradopt   = (1. - unassp) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 
    265                zgrareft   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
     266               zgrareft   = (1. - unassc) * zgraztotf - zepsherv * feratz * zgraztotc - zbasresf 
    266267 
    267268               ! Since only semilabile DOM is represented in PISCES 
     
    289290               zgraren = zgraren + zbasresn + zrespirc * no3rat3 
    290291               zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 
    291                zgraref = zgraref + zbasresf + zrespirc * ferat3 
     292               zgraref = zgraref + zbasresf + zrespirc * feratz 
    292293 
    293294               ! Update of the TRA arrays 
     
    330331               tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + no3rat3 * ztortz + zgrapon - zgrazpon 
    331332               tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + po4rat3 * ztortz + zgrapop - zgrazpop 
    332                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz  + zgrapof - zgrazpof 
     333               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + feratz * ztortz  + zgrapof - zgrazpof 
    333334               ! 
    334335               ! Calcite production 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmort.F90

    r13233 r14276  
    2828   REAL(wp), PUBLIC :: wchlp   !: Quadratic mortality rate of picophytoplankton 
    2929   REAL(wp), PUBLIC :: wchld   !: Quadratic mortality rate of diatoms 
    30    REAL(wp), PUBLIC :: wchldm  !: Maximum quadratic mortality rate of diatoms 
    3130   REAL(wp), PUBLIC :: mpratn  !: Linear mortality rate of nanophytoplankton 
    3231   REAL(wp), PUBLIC :: mpratp  !: Linear mortality rate of picophytoplankton 
     
    6968      !!--------------------------------------------------------------------- 
    7069      INTEGER  :: ji, jj, jk 
    71       REAL(wp) :: zcompaph 
     70      REAL(wp) :: zcompaph, zlim1, zlim2 
    7271      REAL(wp) :: zfactfe, zfactch, zfactn, zfactp, zprcaca 
    7372      REAL(wp) :: ztortp , zrespp , zmortp 
     
    8685               ! blooms (Doney et al. 1996) 
    8786               ! ----------------------------------------------------- 
    88                zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jpphy) 
     87               zlim2   = xlimphy(ji,jj,jk) * xlimphy(ji,jj,jk) 
     88               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * trb(ji,jj,jk,jpphy) 
     89               zrespp = wchln * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 
    8990 
    9091               ! Phytoplankton linear mortality 
     
    142143      !!--------------------------------------------------------------------- 
    143144      INTEGER  :: ji, jj, jk 
    144       REAL(wp) :: zcompaph 
     145      REAL(wp) :: zcompaph, zlim1, zlim2 
    145146      REAL(wp) :: zfactfe, zfactch, zfactn, zfactp 
    146147      REAL(wp) :: ztortp , zrespp , zmortp  
     
    158159               ! blooms (Doney et al. 1996) 
    159160               ! ----------------------------------------------------- 
    160                zrespp = wchlp * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jppic) 
     161               zlim2   = xlimpic(ji,jj,jk) * xlimpic(ji,jj,jk) 
     162               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) * trb(ji,jj,jk,jppic) 
     163               zrespp = wchlp * 1.e6 * xstep * zlim1 * xdiss(ji,jj,jk) * zcompaph 
    161164 
    162165               ! Phytoplankton linear mortality 
     
    229232               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    230233               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    231                zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
     234               zrespp2 = 1.e6 * xstep * wchld * zlim1 * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    232235 
    233236               ! Phytoplankton linear mortality 
     
    291294      INTEGER :: ios   ! Local integer output status for namelist read 
    292295      !! 
    293       NAMELIST/namp5zmort/ wchln, wchlp, wchld, wchldm, mpratn, mpratp, mpratd 
     296      NAMELIST/namp5zmort/ wchln, wchlp, wchld, mpratn, mpratp, mpratd 
    294297      !!---------------------------------------------------------------------- 
    295298 
     
    310313         WRITE(numout,*) '    quadratic mortality of picophyto.         wchlp     =', wchlp 
    311314         WRITE(numout,*) '    quadratic mortality of diatoms            wchld     =', wchld 
    312          WRITE(numout,*) '    Additional quadratic mortality of diatoms wchldm    =', wchldm 
    313315         WRITE(numout,*) '    nanophyto. mortality rate                 mpratn    =', mpratn 
    314316         WRITE(numout,*) '    picophyto. mortality rate                 mpratp    =', mpratp 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90

    r13233 r14276  
    7272      INTEGER  ::   ji, jj, jk 
    7373      REAL(wp) ::   zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2 
    74       REAL(wp) ::   zration, zratiop, zratiof, zmax, zsilim, ztn, zadap 
    75       REAL(wp) ::   zpronmax, zpropmax, zprofmax, zrat 
     74      REAL(wp) ::   zration, zratiop, zratiof, zmax, ztn, zadap 
     75      REAL(wp) ::   zpronmax, zpropmax, zprofmax, zratio 
    7676      REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot 
    7777      REAL(wp) ::   zprnutmax, zdocprod, zprochln, zprochld, zprochlp 
    7878      REAL(wp) ::   zpislopen, zpislopep, zpisloped 
    7979      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup 
    80       REAL(wp) ::   zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac 
     80      REAL(wp) ::   zqfpmax, zqfnmax, zqfdmax 
     81      REAL(wp) ::   zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac, zsilim 
    8182      CHARACTER (len=25) :: charout 
    82       REAL(wp), DIMENSION(jpi,jpj    ) :: zmixnano, zmixpico, zmixdiat, zstrn 
     83      REAL(wp), DIMENSION(jpi,jpj    ) :: zmixnano, zmixpico, zmixdiat 
    8384      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadp, zpislopeadd 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprnutp, zprmaxp, zprmaxn, zprmaxd 
     85      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprmaxp, zprmaxn, zprmaxd 
    8586      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprbio, zprpic, zprdia, zysopt 
    8687      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprchln, zprchlp, zprchld 
     
    111112      zysopt  (:,:,:) = 0._wp 
    112113      zrespn  (:,:,:) = 0._wp ; zrespp  (:,:,:) = 0._wp ; zrespd  (:,:,:) = 0._wp  
     114      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp 
     115      consfe3 (:,:,:) = 0._wp 
    113116 
    114117      ! Computation of the optimal production rates and nutrient uptake 
    115118      ! rates. Based on a Q10 description of the thermal dependency. 
    116       zprnut (:,:,:) = 0.6_wp * (1.0 + zpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 
    117       zprnutp(:,:,:) =  0.6_wp * (1. + zpsino3 * qnpmax ) * r1_rday * tgfunc3(:,:,:) 
    118       zprmaxn(:,:,:) = ( 0.6_wp * (1. + zpsino3 * qnnmax ) ) * r1_rday * tgfunc(:,:,:) 
    119       zprmaxd(:,:,:) = ( 0.6_wp * (1. + zpsino3 * qndmax ) ) * r1_rday * tgfunc(:,:,:) 
    120       zprmaxp(:,:,:) = ( 0.4_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc3(:,:,:) 
    121  
    122       ! compute the day length depending on latitude and the day 
    123       ! Astronomical parameterization taken from HAMOCC3 
    124       zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
    125       zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
    126  
    127       ! day length in hours 
    128       zstrn(:,:) = 0. 
    129       DO jj = 1, jpj 
    130          DO ji = 1, jpi 
    131             zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
    132             zargu = MAX( -1., MIN(  1., zargu ) ) 
    133             zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
    134          END DO 
    135       END DO 
     119      zprnut (:,:,:) =  0.8_wp * r1_rday * tgfunc(:,:,:) 
     120      zprmaxn(:,:,:) =  0.8_wp * (1. + zpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 
     121      zprmaxd(:,:,:) =  0.8_wp * (1. + zpsino3 * qndmax ) * r1_rday * tgfunc(:,:,:) 
     122      zprmaxp(:,:,:) =  0.6_wp * (1. + zpsino3 * qnpmax ) * r1_rday * tgfunc(:,:,:) 
    136123 
    137124      ! Impact of the day duration and light intermittency on phytoplankton growth 
     
    146133            DO ji = 1, jpi 
    147134               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    148                   zval = MAX( 1., zstrn(ji,jj) ) 
     135                  zval = MAX( 1., strn(ji,jj) ) 
    149136                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    150137                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     
    161148      zprpic(:,:,:) = zprmaxp(:,:,:) * zmxl_fac(:,:,:) 
    162149 
    163  
    164150      ! Maximum light intensity 
    165       zdaylen(:,:) = MAX(1., zstrn(:,:)) / 24. 
     151      zdaylen(:,:) = MAX(1., strn(:,:)) / 24. 
    166152 
    167153      ! Computation of the P-I slope for nanos, picos and diatoms 
     
    192178                  ! Actual light levels are used here  
    193179                  !  --------------------------------------------- 
    194                   zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_chl(ji,jj,jk) )  ) 
    195                   zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_chl(ji,jj,jk))  ) 
    196                   zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_chl(ji,jj,jk))  ) 
     180                  zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  ) 
     181                  zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  ) 
     182                  zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_fac(ji,jj,jk) )  ) 
    197183 
    198184                  !  Computation of production function for Chlorophyll 
     
    227213                  ! ----------------------------------------------------------------------- 
    228214                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    229                   zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
     215                  zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
    230216                  zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    231217                  IF (gphit(ji,jj) < -30 ) THEN 
     
    240226                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 
    241227                  ELSE 
    242                      zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.75 * zmaxsi 
     228                     zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 
    243229                  ENDIF 
    244230               ENDIF 
     
    257243               zprdia(ji,jj,jk)  = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) )  
    258244               zprnut(ji,jj,jk)  = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    259                zprnutp(ji,jj,jk) = zprnutp(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    260245            END DO 
    261246         END DO 
     
    284269                  zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 
    285270                  zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
    286                   sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 
     271                  sizena(ji,jj,jk) = MIN(xsizern, MAX( sizena(ji,jj,jk), zsizetmp ) ) 
    287272                  ! Maximum potential uptake rate 
    288273                  zration = trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     
    291276                  zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpphy) * rfact2 
    292277                  ! Uptake of nitrogen 
    293                   zrat = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 
    294                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
     278                  zratio = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 
     279                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
    295280                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) )   & 
    296281                  &          / ( xqpnmax(ji,jj,jk) - xqpnmin(ji,jj,jk) + rtrn ), xlimnfe(ji,jj,jk) ) ) 
     282                  zpronmax = zpronmax * xqnnmin(ji,jj,jk) / qnnmin 
    297283                  zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 
    298284                  zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk) 
    299285                  ! Uptake of phosphorus and DOP 
    300                   zrat = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 
    301                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
    302                   zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) * 16. / 10. 
     286                  zratio = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 
     287                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
     288                  zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) 
    303289                  zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk) 
    304290                  zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk) 
    305291                  ! Uptake of iron 
    306                   zrat = 1.0 - MIN( 1., zratiof / qfnmax ) 
    307                   zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 
    308                   zprofmax = zprnutmax * qfnmax * zmax  
     292                  zqfnmax = xqfuncfecn(ji,jj,jk) + ( qfnmax - xqfuncfecn(ji,jj,jk) ) * xlimnpn(ji,jj,jk) 
     293                  zratio = 1.0 - MIN( 1., zratiof / zqfnmax ) 
     294                  zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 
     295                  zprofmax = zprnutmax * zqfnmax * zmax  
    309296                  zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk)    & 
    310297                  &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn  & 
     
    341328                  zratiop = trb(ji,jj,jk,jpppi) / ( trb(ji,jj,jk,jppic) + rtrn ) 
    342329                  zratiof = trb(ji,jj,jk,jppfe) / ( trb(ji,jj,jk,jppic) + rtrn ) 
    343                   zprnutmax = zprnutp(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jppic) * rfact2 
     330                  zprnutmax = zprnut(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jppic) * rfact2 
    344331                  ! Uptake of nitrogen 
    345                   zrat = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) ) 
    346                   zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 
     332                  zratio = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) ) 
     333                  zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 
    347334                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) )   & 
    348335                  &          / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) ) 
     336                  zpronmax = zpronmax * xqnpmin(ji,jj,jk) / qnnmin 
    349337                  zpronewp(ji,jj,jk) = zpronmax * xpicono3(ji,jj,jk)  
    350338                  zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk) 
    351339                  ! Uptake of phosphorus 
    352                   zrat = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) ) 
    353                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
    354                   zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) * 16./10. 
     340                  zratio = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) ) 
     341                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
     342                  zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk)  
    355343                  zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk) 
    356344                  zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk) 
    357345                  ! Uptake of iron 
    358                   zrat = 1.0 - MIN( 1., zratiof / qfpmax ) 
    359                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
    360                   zprofmax = zprnutmax * qfpmax * zmax 
     346                  zqfpmax = xqfuncfecp(ji,jj,jk) + ( qfpmax - xqfuncfecp(ji,jj,jk) ) * xlimnpp(ji,jj,jk) 
     347                  zratio = 1.0 - MIN( 1., zratiof / zqfpmax ) 
     348                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
     349                  zprofmax = zprnutmax * zqfpmax * zmax 
    361350                  zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk)  & 
    362351                  &          * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn   & 
     
    395384                  zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpdia) * rfact2 
    396385                  ! Uptake of nitrogen 
    397                   zrat = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) ) 
    398                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
     386                  zratio = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) ) 
     387                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
    399388                  zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) )   & 
    400389                  &          / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) ) 
     390                  zpronmax = zpronmax * xqndmin(ji,jj,jk) / qnnmin 
    401391                  zpronewd(ji,jj,jk) = zpronmax * xdiatno3(ji,jj,jk) 
    402392                  zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) 
    403393                  ! Uptake of phosphorus 
    404                   zrat = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 
    405                   zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 
    406                   zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) * 16./10. 
     394                  zratio = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 
     395                  zmax = MAX(0., MIN(1., zratio**2/ (0.05**2 + zratio**2) ) ) 
     396                  zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) 
    407397                  zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 
    408398                  zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) 
    409399                  ! Uptake of iron 
    410                   zrat = 1.0 - MIN( 1., zratiof / qfdmax ) 
    411                   zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
    412                   zprofmax = zprnutmax * qfdmax * zmax 
     400                  zqfdmax = xqfuncfecd(ji,jj,jk) + ( qfdmax - xqfuncfecd(ji,jj,jk) ) * xlimnpd(ji,jj,jk) 
     401                  zratio = 1.0 - MIN( 1., zratiof / zqfdmax ) 
     402                  zmax = MAX(0., MIN(1., zratio**2 / (0.05**2 + zratio**2) ) ) 
     403                  zprofmax = zprnutmax * zqfdmax * zmax 
    413404                  zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk)    & 
    414405                  &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn   & 
     
    503494              zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 
    504495              tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
     496              consfe3(ji,jj,jk)   = zfeup * 75.0 / ( rtrn + ( plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) )   & 
     497              &                     * trb(ji,jj,jk,jpfer) ) / rfact2 
    505498              tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * trb(ji,jj,jk,jpdia) 
    506499              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) - zprorcap(ji,jj,jk)  & 
     
    529522                 zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 
    530523                 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp    & 
    531                  &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     524                 &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    532525                 zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    533526                 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 
    534                  &                      + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
     527                 &                      + 75.0 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    535528              END DO 
    536529           END DO 
Note: See TracChangeset for help on using the changeset viewer.