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

Changeset 12537


Ignore:
Timestamp:
2020-03-11T16:02:54+01:00 (5 years ago)
Author:
aumont
Message:

Comments in routines have been revised and significantly augmented

Location:
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP
Files:
26 edited

Legend:

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

    r10069 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zagg  *** 
    4    !! TOP :  PISCES  aggregation of particles 
     4   !! TOP :  PISCES  aggregation of particles (DOC, POC, GOC) 
     5   !!        This module is the same for both PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    3536      !!                     ***  ROUTINE p4z_agg  *** 
    3637      !! 
    37       !! ** Purpose :   Compute aggregation of particles 
     38      !! ** Purpose :   Compute aggregation of particle. Aggregation by  
     39      !!                brownian motion, differential settling and shear 
     40      !!                are considered. 
    3841      !! 
    39       !! ** Method  : - ??? 
     42      !! ** Method  : - Aggregation rates are computed assuming a fixed and  
     43      !!                constant size spectrum in the different particulate  
     44      !!                pools. The coagulation rates have been computed  
     45      !!                externally using dedicated programs (O. Aumont). They  
     46      !!                are hard-coded because they can't be changed  
     47      !!                independently of each other.  
    4048      !!--------------------------------------------------------------------- 
    4149      INTEGER, INTENT(in) ::   kt, knt   ! 
     
    5361      IF( ln_timing )   CALL timing_start('p4z_agg') 
    5462      ! 
    55       !  Exchange between organic matter compartments due to coagulation/disaggregation 
     63      !  Exchange between organic matter compartments due to  
     64      !  coagulation/disaggregation 
    5665      !  --------------------------------------------------- 
     66 
     67      ! PISCES part 
    5768      IF( ln_p4z ) THEN 
    5869         ! 
     
    6273                  ! 
    6374                  zfact = xstep * xdiss(ji,jj,jk) 
    64                   !  Part I : Coagulation dependent on turbulence 
     75                  ! Part I : Coagulation dependent on turbulence 
     76                  ! The stickiness has been assumed to be 0.1 
    6577                  zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    6678                  zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    6779 
    6880                  ! Part II : Differential settling 
    69  
    70                   !  Aggregation of small into large particles 
     81                  ! Aggregation of small into large particles 
     82                  ! The stickiness has been assumed to be 0.1 
    7183                  zagg3 =  47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    7284                  zagg4 =  3.3  * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
     
    7991                  ! 2nd term is shear aggregation of DOC-POC 
    8092                  ! 3rd term is differential settling of DOC-POC 
     93                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    8194                  zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    8295                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
     
    8497                  ! 1st term is shear aggregation 
    8598                  ! 2nd term is differential settling  
     99                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    86100                  zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    87101                  ! tranfer of DOC to POC due to brownian motion 
     
    103117      ELSE    ! ln_p5z 
    104118        ! 
     119        ! PISCES-QUOTA part 
    105120         DO jk = 1, jpkm1 
    106121            DO jj = 1, jpj 
     
    109124                  zfact = xstep * xdiss(ji,jj,jk) 
    110125                  !  Part I : Coagulation dependent on turbulence 
     126                  ! The stickiness has been assumed to be 0.1 
    111127                  zaggtmp = 25.9  * zfact * trb(ji,jj,jk,jppoc) 
    112128                  zaggpoc1 = zaggtmp * trb(ji,jj,jk,jppoc) 
     
    115131 
    116132                  ! Part II : Differential settling 
     133                  ! The stickiness has been assumed to be 0.1 
    117134    
    118135                  !  Aggregation of small into large particles 
     
    131148                  ! 2nd term is shear aggregation of DOC-POC 
    132149                  ! 3rd term is differential settling of DOC-POC 
     150                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    133151                  zaggtmp = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    134152                  &            + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) 
     
    140158                  ! 1st term is shear aggregation 
    141159                  ! 2nd term is differential settling  
     160                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    142161                  zaggtmp = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) 
    143162                  zaggdoc2 = zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) 
     
    146165 
    147166                  ! tranfer of DOC to POC due to brownian motion 
     167                  ! 1/3 of DOC is supposed to experience aggregation (HMW) 
    148168                  zaggtmp = ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep 
    149169                  zaggdoc3 =  zaggtmp * 0.3 * trb(ji,jj,jk,jpdoc) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90

    r12349 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zbio  *** 
    4    !! TOP :   PISCES bio-model 
     4   !! TOP :   PISCES biogeochemical model 
     5   !!         This module is for both PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
    78   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     9   !!             3.6  ! 2015 (O. Aumont) PISCES-QUOTA 
    810   !!---------------------------------------------------------------------- 
    911   !!   p4z_bio        :   computes the interactions between the different 
     
    5052      !! 
    5153      !! ** Purpose :   Ecosystem model in the whole ocean: computes the 
    52       !!              different interactions between the different compartments 
    53       !!              of PISCES 
     54      !!                different interactions between the different compartments 
     55      !!                of PISCES 
    5456      !! 
    5557      !! ** Method  : - ??? 
     
    6264      ! 
    6365      IF( ln_timing )   CALL timing_start('p4z_bio') 
    64       ! 
    65       !     ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 
    66       !     OF PHYTOPLANKTON AND DETRITUS 
    6766 
     67      ! ASSIGN THE SHEAR RATE THAT IS USED FOR AGGREGATION 
     68      ! OF PHYTOPLANKTON AND DETRITUS 
    6869      xdiss(:,:,:) = 1. 
    69 !!gm the use of nmld should be better here? 
    7070      DO jk = 2, jpkm1 
    7171         DO jj = 1, jpj 
    7272            DO ji = 1, jpi 
    73 !!gm  :  use nmln  and test on jk ...  less memory acces 
    7473               IF( gdepw_n(ji,jj,jk+1) > hmld(ji,jj) )   xdiss(ji,jj,jk) = 0.01 
    7574            END DO  
     
    7776      END DO 
    7877 
    79       CALL p4z_opt     ( kt, knt )     ! Optic: PAR in the water column 
     78      CALL p4z_opt     ( kt, knt )     ! Optics: PAR in the water column 
    8079      CALL p4z_sink    ( kt, knt )     ! vertical flux of particulate organic matter 
    8180      CALL p4z_fechem  ( kt, knt )     ! Iron chemistry/scavenging 
     
    8786         CALL p4z_mort ( kt      )     ! phytoplankton mortality 
    8887         !                             ! zooplankton sources/sinks routines  
    89          CALL p4z_micro( kt, knt )           ! microzooplankton 
    90          CALL p4z_meso ( kt, knt )           ! mesozooplankton 
     88         CALL p4z_micro( kt, knt )     ! microzooplankton 
     89         CALL p4z_meso ( kt, knt )     ! mesozooplankton 
    9190      ELSE 
    9291         CALL p5z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
    9392         CALL p5z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
    94          !                             ! (for each element : C, Si, Fe, Chl ) 
     93         !                             ! (for each element : C, N, P, Si, Fe, Chl ) 
    9594         CALL p5z_mort ( kt      )     ! phytoplankton mortality 
    9695         !                             ! zooplankton sources/sinks routines  
    97          CALL p5z_micro( kt, knt )           ! microzooplankton 
    98          CALL p5z_meso ( kt, knt )           ! mesozooplankton 
     96         CALL p5z_micro( kt, knt )     ! microzooplankton 
     97         CALL p5z_meso ( kt, knt )     ! mesozooplankton 
    9998      ENDIF 
    10099      ! 
     
    103102      CALL p4z_poc     ( kt, knt )     ! Remineralization of organic particles 
    104103      ! 
     104      ! Ligand production. ln_ligand should be set .true. to activate 
    105105      IF( ln_ligand )  & 
    106106      & CALL p4z_ligand( kt, knt ) 
    107       ! Update of the size of the organisms 
     107 
     108      ! Update of the size of the different phytoplankton groups 
    108109      IF (ln_p5z) THEN 
    109110         sized(:,:,:) = sizeda(:,:,:) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zint.F90

    r12349 r12537  
    11MODULE p4zint 
    2    !!====================================================================== 
     2   !!========================================================================= 
    33   !!                         ***  MODULE p4zint  *** 
    44   !! TOP :   PISCES interpolation and computation of various accessory fields 
    5    !!====================================================================== 
     5   !!========================================================================= 
    66   !! History :   1.0  !  2004-03 (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
     
    4343      ! Computation of phyto and zoo metabolic rate 
    4444      ! ------------------------------------------- 
     45      ! Generic temperature dependence (Eppley, 1972) 
    4546      tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 
     47      ! Temperature dependence of mesozooplankton (Buitenhuis et al. (2005)) 
    4648      tgfunc2(:,:,:) = EXP( 0.07608  * tsn(:,:,:,jp_tem) ) 
     49      ! Temperature dependence of picophytoplankton (Stawiarsky et al., 2016) 
    4750      tgfunc3(:,:,:) = EXP( 0.0825   * tsn(:,:,:,jp_tem) ) 
    4851 
    4952      ! Computation of the silicon dependant half saturation  constant for silica uptake 
    50       ! --------------------------------------------------- 
     53      ! This is based on an old study by Pondaven et al. (1998) 
     54      ! -------------------------------------------------------------------------------- 
    5155      DO ji = 1, jpi 
    5256         DO jj = 1, jpj 
     
    5660      END DO 
    5761      ! 
     62      ! At the end of each year, the half saturation constant for silica is  
     63      ! updated as this is based on the highest concentration reached over  
     64      ! the year 
     65      ! ------------------------------------------------------------------- 
    5866      IF( nday_year == nyear_len(1) ) THEN 
    5967         xksi   (:,:) = xksimax(:,:) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlim.F90

    r11536 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zlim  *** 
    4    !! TOP :   PISCES  
     4   !! TOP :   Computes the nutrient limitation terms of phytoplankton 
    55   !!====================================================================== 
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1414   USE trc             ! Tracers defined 
    1515   USE sms_pisces      ! PISCES variables 
    16    USE iom             !  I/O manager 
     16   USE iom             ! I/O manager 
    1717 
    1818   IMPLICIT NONE 
    1919   PRIVATE 
    2020 
    21    PUBLIC p4z_lim     
    22    PUBLIC p4z_lim_init     
    23    PUBLIC p4z_lim_alloc 
     21   PUBLIC p4z_lim           ! called in p4zbio.F90  
     22   PUBLIC p4z_lim_init      ! called in trcsms_pisces.F90  
     23   PUBLIC p4z_lim_alloc     ! called in trcini_pisces.F90 
    2424 
    2525   !! * Shared module variables 
    2626   REAL(wp), PUBLIC ::  concnno3    !:  NO3, PO4 half saturation    
    2727   REAL(wp), PUBLIC ::  concdno3    !:  Phosphate half saturation for diatoms   
    28    REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for phyto   
     28   REAL(wp), PUBLIC ::  concnnh4    !:  NH4 half saturation for nanophyto   
    2929   REAL(wp), PUBLIC ::  concdnh4    !:  NH4 half saturation for diatoms 
    3030   REAL(wp), PUBLIC ::  concnfer    !:  Iron half saturation for nanophyto  
     
    4646 
    4747   !!* Phytoplankton limitation terms 
    48    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
    49    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
    50    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
    51    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
    52    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
    53    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
    54    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
    55    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
    56    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
    57    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
    58    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
    59    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: ?? 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: ?? 
    61    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
    63  
    64    ! Coefficient for iron limitation 
     48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: Nanophyto limitation by NO3 
     49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: Diatoms limitation by NO3 
     50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: Nanophyto limitation by NH4 
     51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !:  Diatoms limitation by NH4 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: Nanophyto limitation by PO4 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: Diatoms limitation by PO4 
     54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: Nutrient limitation term of nanophytoplankton 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: Nutrient limitation term of diatoms 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: Nanophyto limitation by Iron 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: Diatoms limitation by iron 
     58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: Diatoms limitation by Si 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: Bacterial limitation term 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: Bacterial limitation term 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: Limitation of diatoms uptake of Fe 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: Limitation of Nano uptake of Fe 
     63 
     64   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
    6565   REAL(wp) ::  xcoef1   = 0.0016  / 55.85   
    6666   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
     
    7979      !! 
    8080      !! ** Purpose :   Compute the co-limitations by the various nutrients 
    81       !!              for the various phytoplankton species 
    82       !! 
    83       !! ** Method  : - ??? 
     81      !!                for the various phytoplankton species 
     82      !! 
     83      !! ** Method  : - Limitation follows the Liebieg law of the minimum 
    8484      !!--------------------------------------------------------------------- 
    8585      INTEGER, INTENT(in)  :: kt, knt 
     
    9999            DO ji = 1, jpi 
    100100                
    101                ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    102                !------------------------------------- 
     101               ! Tuning of the iron concentration to a minimum level that  
     102               ! is set to the detection limit 
     103               ! -------------------------------------------------------- 
    103104               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    104105               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
     
    106107               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    107108 
    108                ! Computation of a variable Ks for iron on diatoms taking into account 
     109               ! Computation of a variable Ks of diatoms taking into account 
    109110               ! that increasing biomass is made of generally bigger cells 
    110                !------------------------------------------------ 
     111               !------------------------------------------------------------ 
    111112               zconcd   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    112113               zconcd2  = trb(ji,jj,jk,jpdia) - zconcd 
     
    124125               zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 
    125126 
    126                ! Michaelis-Menten Limitation term for nutrients Small bacteria 
    127                ! ------------------------------------------------------------- 
     127               ! Michaelis-Menten Limitation term by nutrients of 
     128               ! heterotrophic bacteria 
     129               ! ------------------------------------------------- 
    128130               zdenom = 1. /  ( concbno3 * concbnh4 + concbnh4 * trb(ji,jj,jk,jpno3) + concbno3 * trb(ji,jj,jk,jpnh4) ) 
    129131               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * concbnh4 * zdenom 
     
    134136               zlim3    = trb(ji,jj,jk,jpfer) / ( concbfe + trb(ji,jj,jk,jpfer) ) 
    135137               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) ) 
     138               ! Xlimbac is used for DOC solubilization whereas xlimbacl 
     139               ! is used for all the other bacterial-dependent terms 
     140               ! ------------------------------------------------------- 
    136141               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    137142               xlimbac (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) * zlim4 
    138143 
    139                ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    140                ! ----------------------------------------------- 
     144               ! Michaelis-Menten Limitation term by nutrients: Nanophyto 
     145               ! -------------------------------------------------------- 
    141146               zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 
    142147               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
     
    146151               zlim2    = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zconc0nnh4 ) 
    147152               zratio   = trb(ji,jj,jk,jpnfe) * z1_trbphy  
     153 
     154               ! The minimum iron quota depends on the size of PSU, respiration 
     155               ! and the reduction of nitrate following the parameterization  
     156               ! proposed by Flynn and Hipkin (1999) 
    148157               zironmin = xcoef1 * trb(ji,jj,jk,jpnch) * z1_trbphy + xcoef2 * zlim1 + xcoef3 * xnanono3(ji,jj,jk) 
    149158               zlim3    = MAX( 0.,( zratio - zironmin ) / qnfelim ) 
     
    151160               xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
    152161               xlimphy (ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    153                ! 
    154                !   Michaelis-Menten Limitation term for nutrients Diatoms 
    155                !   ---------------------------------------------- 
     162                
     163               !   Michaelis-Menten Limitation term by nutrients : Diatoms 
     164               !   ------------------------------------------------------- 
    156165               zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 
    157166               xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
     
    162171               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
    163172               zratio   = trb(ji,jj,jk,jpdfe) * z1_trbdia 
     173 
     174               ! The minimum iron quota depends on the size of PSU, respiration 
     175               ! and the reduction of nitrate following the parameterization  
     176               ! proposed by Flynn and Hipkin (1999) 
    164177               zironmin = xcoef1 * trb(ji,jj,jk,jpdch) * z1_trbdia + xcoef2 * zlim1 + xcoef3 * xdiatno3(ji,jj,jk) 
    165178               zlim4    = MAX( 0., ( zratio - zironmin ) / qdfelim ) 
     
    173186 
    174187      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     188      ! This is a purely adhoc formulation described in Aumont et al. (2015) 
     189      ! This fraction depends on nutrient limitation, light, temperature 
    175190      ! -------------------------------------------------------------------- 
    176191      DO jk = 1, jpkm1 
     
    206221               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
    207222               ! 
    208                ! denitrification factor computed from NO3 levels 
     223               ! redox factor computed from NO3 levels 
    209224               nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - trb(ji,jj,jk,jpno3) )  & 
    210225                  &                                / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 
     
    215230      ! 
    216231      IF( lk_iomput .AND. knt == nrdttrc ) THEN        ! save output diagnostics 
    217         IF( iom_use( "xfracal" ) )   CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! euphotic layer deptht 
     232        IF( iom_use( "xfracal" ) )   CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) )  ! Faction of nanophytoplankton that is calcifiers 
    218233        IF( iom_use( "LNnut"   ) )   CALL iom_put( "LNnut"  , xlimphy(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
    219234        IF( iom_use( "LDnut"   ) )   CALL iom_put( "LDnut"  , xlimdia(:,:,:) * tmask(:,:,:) )  ! Nutrient limitation term 
     
    231246      !!                  ***  ROUTINE p4z_lim_init  *** 
    232247      !! 
    233       !! ** Purpose :   Initialization of nutrient limitation parameters 
    234       !! 
    235       !! ** Method  :   Read the nampislim namelist and check the parameters 
     248      !! ** Purpose :   Initialization of the nutrient limitation parameters 
     249      !! 
     250      !! ** Method  :   Read the namp4zlim namelist and check the parameters 
    236251      !!      called at the first timestep (nittrc000) 
    237252      !! 
    238       !! ** input   :   Namelist nampislim 
     253      !! ** input   :   Namelist namp4zlim 
    239254      !! 
    240255      !!---------------------------------------------------------------------- 
     
    252267      ENDIF 
    253268      ! 
    254       REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 
     269      REWIND( numnatp_ref )              ! Namelist namp4zlim in reference namelist : Pisces nutrient limitation parameters 
    255270      READ  ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 
    256271901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zlim in reference namelist' ) 
    257       REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters  
     272      REWIND( numnatp_cfg )              ! Namelist namp4zlim in configuration namelist : Pisces nutrient limitation parameters  
    258273      READ  ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 
    259274902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zlim in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90

    r12524 r12537  
    88   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    99   !!---------------------------------------------------------------------- 
    10    !!   p4z_meso       : Compute the sources/sinks for mesozooplankton 
    11    !!   p4z_meso_init  : Initialization of the parameters for mesozooplankton 
     10   !!   p4z_meso        : Compute the sources/sinks for mesozooplankton 
     11   !!   p4z_meso_init   : Initialization of the parameters for mesozooplankton 
     12   !!   p4z_meso_alloc  : Allocate variables for mesozooplankton  
    1213   !!---------------------------------------------------------------------- 
    1314   USE oce_trc         ! shared variables between ocean and passive tracers 
     
    2324   PUBLIC   p4z_meso              ! called in p4zbio.F90 
    2425   PUBLIC   p4z_meso_init         ! called in trcsms_pisces.F90 
    25    PUBLIC   p4z_meso_alloc 
    26  
     26   PUBLIC   p4z_meso_alloc        ! called in trcini_pisces.F90 
     27 
     28   !! * Shared module variables 
    2729   REAL(wp), PUBLIC ::  part2        !: part of calcite not dissolved in mesozoo guts 
    2830   REAL(wp), PUBLIC ::  xpref2d      !: mesozoo preference for diatoms 
     
    4648   REAL(wp), PUBLIC ::  xfracmig     !: Fractional biomass of meso that performs DVM 
    4749   LOGICAL , PUBLIC ::  ln_dvm_meso  !: Boolean to activate DVM of mesozooplankton 
    48    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig 
    49    INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig  
     50   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig  !: DVM of mesozooplankton : migration depth 
     51   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig    !: Vertical indice of the the migration depth 
    5052 
    5153   !!---------------------------------------------------------------------- 
     
    6163      !! 
    6264      !! ** Purpose :   Compute the sources/sinks for mesozooplankton 
     65      !!                This includes ingestion and assimilation, flux feeding 
     66      !!                and mortality. We use a passive prey switching   
     67      !!                parameterization. 
     68      !!                All living compartments smaller than mesozooplankton 
     69      !!                are potential preys of mesozooplankton as well as small 
     70      !!                sinking particles  
    6371      !! 
    6472      !! ** Method  : - ??? 
     
    6876      INTEGER  :: ji, jj, jk, jkt 
    6977      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
    70       REAL(wp) :: zgraze2 , zdenom, zdenom2 
    71       REAL(wp) :: zfact   , zfood, zfoodlim, zproport, zbeta 
     78      REAL(wp) :: zgraze2 , zdenom, zdenom2, zfact   , zfood, zfoodlim, zproport, zbeta 
    7279      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 
    7380      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    7481      REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasrat, zgrasratn 
    75       REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof 
    76       REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 
    77       REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    78       REAL(wp) :: zrum, zcodel, zargu, zval 
     82      REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof, zgrazn, zgrazpoc, zgraznf, zgrazf 
     83      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval 
    7984      CHARACTER (len=25) :: charout 
    8085      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 
     
    95100      ! 
    96101      ! Diurnal vertical migration of mesozooplankton 
     102      ! Computation of the migration depth 
    97103      ! --------------------------------------------- 
    98104      IF (ln_dvm_meso) CALL p4z_meso_depmig 
     
    104110               zfact     = xstep * tgfunc2(ji,jj,jk) * zcompam 
    105111 
    106                !  Respiration rates of both zooplankton 
    107                !  ------------------------------------- 
     112               !  linear mortality of mesozooplankton 
     113               !  A michaelis menten modulation term is used to avoid extinction of  
     114               !  mesozooplankton at very low food concentration. Mortality is 
     115  
     116               !  enhanced in low O2 waters 
     117               !  ----------------------------------------------------------------- 
    108118               zrespz    = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    109119               &           + 3. * nitrfac(ji,jj,jk) ) 
    110120 
    111                !  Zooplankton mortality. A square function has been selected with 
    112                !  no real reason except that it seems to be more stable and may mimic predation 
    113                !  --------------------------------------------------------------- 
     121               !  Zooplankton quadratic mortality. A square function has been selected with 
     122               !  to mimic predation and disease (density dependent mortality). It also tends 
     123               !  to stabilise the model 
     124               !  ------------------------------------------------------------------------- 
    114125               ztortz    = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes)  * (1. - nitrfac(ji,jj,jk) ) 
    115                ! 
     126 
     127               !   Computation of the abundance of the preys 
     128               !   A threshold can be specified in the namelist 
     129               !   -------------------------------------------- 
    116130               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
    117131               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
    118132               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
    119133               ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    120                ! it is to predation by mesozooplankton 
     134               ! it is to predation by mesozooplankton. We use a quota dependant parameterization 
     135               ! as a low quota indicates oligotrophic conditions which are charatcerized by 
     136               ! small cells 
    121137               ! ------------------------------------------------------------------------------- 
    122138               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
     
    124140 
    125141               ! Mesozooplankton grazing 
    126                ! ------------------------ 
     142               ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     143               ! multiplied by their food preference 
     144               ! A threshold can be specified in the namelist (xthresh2). However, when food  
     145               ! concentration is close to this threshold, it is decreased to avoid the  
     146               ! accumulation of food in the mesozoopelagic domain 
     147               ! ------------------------------------------------------------------------------- 
    127148               zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc  
    128149               zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
     
    131152               zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk))  
    132153 
     154               ! The grazing pressure on each prey is computed assuming passive switching. This  
     155               ! is equivalent to assuming that mesozooplankton have an opportunistic feeding 
     156               ! behaviour. 
     157               ! ----------------------------------------------------------------------------- 
    133158               zgrazd    = zgraze2  * xpref2d  * zcompadi  * zdenom2  
    134159               zgrazz    = zgraze2  * xpref2z  * zcompaz   * zdenom2  
     
    140165               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    141166 
    142                !  Mesozooplankton flux feeding on GOC 
    143                !  ---------------------------------- 
     167               !  Mesozooplankton flux feeding on GOC and POC. The feeding pressure 
     168               ! is proportional to the flux 
     169               !  ------------------------------------------------------------------ 
    144170               zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    145171               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 
     
    150176               &           * (1. - nitrfac(ji,jj,jk)) 
    151177               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    152                ! 
     178                
    153179               zgraztotc = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    154                ! Compute the proportion of filter feeders 
     180               ! Compute the proportion of filter feeders. It is assumed steady state. 
     181               ! ---------------------------------------------------------------------   
    155182               zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 
     183 
    156184               ! Compute fractionation of aggregates. It is assumed that  
    157185               ! diatoms based aggregates are more prone to fractionation 
    158186               ! since they are more porous (marine snow instead of fecal pellets) 
     187               ! ----------------------------------------------------------------- 
    159188               zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    160189               zratio2   = zratio * zratio 
     
    164193               zfracfe   = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    165194 
     195               ! Flux feeding is multiplied by the fractional biomass of flux feeders 
    166196               zgrazffep = zproport * zgrazffep 
    167197               zgrazffeg = zproport * zgrazffeg 
     
    176206               zgrazing(ji,jj,jk) = zgraztotc 
    177207 
    178                !    Mesozooplankton efficiency 
    179                !    -------------------------- 
     208               ! Mesozooplankton efficiency.  
     209               ! We adopt a formulation proposed by Mitra et al. (2007) 
     210               ! The gross growth efficiency is controled by the most limiting nutrient. 
     211               ! Growth is also further decreased when the food quality is poor. This is currently 
     212               ! hard coded : it can be decreased by up to 50% (zepsherq) 
     213               ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and  
     214               ! Fulton, 2012) 
     215               ! ----------------------------------------------------------------------------------- 
    180216               zgrasrat  =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
    181217               zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 
     
    189225               ! --------------------------------------------- 
    190226               zmortz = ztortz + zrespz 
     227               ! Mortality induced by the upper trophic levels, ztortz, is allocated  
     228               ! according to a infinite chain of predators (ANderson et al., 2013) 
    191229               zmortzgoc = unass2 / ( 1. - epsher2 ) * ztortz + zrespz 
    192230               tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz + zepsherv * zgraztotc 
     
    208246               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg - zfracfe 
    209247               ! Calcite remineralization due to zooplankton activity 
     248               ! part2 of the ingested calcite is dissolving in the acidic gut 
    210249               zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 
    211250               zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 
     
    218257               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 
    219258               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 
    220                  
    221                ! Correct the fluxes for the effect of DVM 
    222                ! A fixed fraction of mesozooplankton is assumed to migrate 
     259  
     260               ! Computation of total excretion and egestion by mesozoo.  
    223261               ! --------------------------------------------------------- 
    224262               zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 
     
    232270      END DO 
    233271 
     272      ! Computation of the effect of DVM by mesozooplankton 
     273      ! This part is only activated if ln_dvm_meso is set to true 
     274      ! The parameterization has been published in Gorgues et al. (2019). 
     275      ! ----------------------------------------------------------------- 
    234276      IF (ln_dvm_meso) THEN 
    235277         ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 
     
    253295         END DO 
    254296 
    255  
     297        ! Compute the amount of materials that will go into vertical migration 
     298        ! This fraction is sumed over the euphotic zone and is removed from  
     299        ! the fluxes driven by mesozooplankton in the euphotic zone. 
     300        ! -------------------------------------------------------------------- 
    256301         DO jk = 1, jpk 
    257302            DO jj = 1, jpj 
    258303               DO ji = 1, jpi 
    259  
    260                   !   Compute the amount of materials that will go into vertical migration 
    261304                  zmigreltime = (1. - zstrn(ji,jj)) 
    262305                  IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 
     
    279322         END DO 
    280323       
     324         ! The inorganic and organic fluxes induced by migrating organisms are added at the  
     325         ! the migration depth (corresponding indice is set by kmig) 
     326         ! -------------------------------------------------------------------------------- 
    281327         DO jj = 1, jpj 
    282328            DO ji = 1, jpi 
     
    296342         DEALLOCATE( zstrn ) 
    297343 
     344      ! End of the ln_dvm_meso part 
    298345      ENDIF 
    299346 
     
    302349            DO ji = 1, jpi 
    303350               !   Update the arrays TRA which contain the biological sources and sinks 
     351               !   This only concerns the variables which are affected by DVM (inorganic  
     352               !   nutrients, DOC agands, and particulate organic carbon).  
    304353               zgrarsig  = zgrarem(ji,jj,jk) * sigma2 
    305354               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarsig 
     
    324373      END DO 
    325374      ! 
     375      ! Write the output 
    326376      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    327377         ALLOCATE( zw3d(jpi,jpj,jpk) ) 
     
    364414      !! ** Purpose :   Initialization of mesozooplankton parameters 
    365415      !! 
    366       !! ** Method  :   Read the nampismes namelist and check the parameters 
     416      !! ** Method  :   Read the namp4zmes namelist and check the parameters 
    367417      !!      called at the first timestep (nittrc000) 
    368418      !! 
     
    383433      ENDIF 
    384434      ! 
    385       REWIND( numnatp_ref )              ! Namelist nampismes in reference namelist : Pisces mesozooplankton 
     435      REWIND( numnatp_ref )              ! Namelist namp4zmes in reference namelist : Pisces mesozooplankton 
    386436      READ  ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 
    387437901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmes in reference namelist' ) 
    388       REWIND( numnatp_cfg )              ! Namelist nampismes in configuration namelist : Pisces mesozooplankton 
     438      REWIND( numnatp_cfg )              ! Namelist namp4zmes in configuration namelist : Pisces mesozooplankton 
    389439      READ  ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 
    390440902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmes in configuration namelist' ) 
     
    427477      !!      temperature and chlorophylle following the parameterization  
    428478      !!      proposed by Bianchi et al. (2013) 
    429       !! 
    430       !! ** input   :    
    431479      !!---------------------------------------------------------------------- 
    432480      INTEGER  :: ji, jj, jk 
     
    447495      ! Compute the averaged values of oxygen, temperature over the domain  
    448496      ! 150m to 500 m depth. 
    449       ! 
     497      ! ------------------------------------------------------------------ 
    450498      DO jk =1, jpk 
    451499         DO jj = 1, jpj 
     
    462510      END DO 
    463511 
     512      ! Compute the difference between surface values and the mean values in the mesopelagic 
     513      ! domain 
     514      ! ------------------------------------------------------------------------------------ 
    464515      DO jj = 1, jpj 
    465516         DO ji = 1, jpi 
     
    472523      ! Bianchi et al. (2013) 
    473524      ! ------------------------------------------------------------------- 
    474       ! 
    475525      DO jj = 1, jpj 
    476526         DO ji = 1, jpi 
     
    484534      ! Computation of the corresponding jk indice  
    485535      ! ------------------------------------------ 
    486       !  
    487536      DO jk = 1, jpk-1 
    488537         DO jj = 1, jpj 
     
    501550      ! that it falls above the OMZ 
    502551      ! ----------------------------------------------------------------------- 
    503       ! 
    504552      DO ji =1, jpi 
    505553         DO jj = 1, jpj 
     
    530578   END FUNCTION p4z_meso_alloc 
    531579 
    532  
    533580   !!====================================================================== 
    534581END MODULE p4zmeso 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90

    r12349 r12537  
    2222   PRIVATE 
    2323 
     24   !! * Shared module variables 
    2425   PUBLIC   p4z_micro         ! called in p4zbio.F90 
    2526   PUBLIC   p4z_micro_init    ! called in trcsms_pisces.F90 
     
    5455      !! 
    5556      !! ** Purpose :   Compute the sources/sinks for microzooplankton 
     57      !!                This includes ingestion and assimilation, flux feeding 
     58      !!                and mortality. We use a passive prey switching   
     59      !!                parameterization. 
     60      !!                All living compartments smaller than microzooplankton 
     61      !!                are potential preys of mesozooplankton 
    5662      !! 
    5763      !! ** Method  : - ??? 
     
    8793               zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz 
    8894 
    89                !  Respiration rates of both zooplankton 
    90                !  ------------------------------------- 
     95               !  linear mortality of mesozooplankton 
     96               !  A michaelis menten modulation term is used to avoid extinction of  
     97               !  microzooplankton at very low food concentrations. Mortality is  
     98               !  enhanced in low O2 waters 
     99               !  ----------------------------------------------------------------- 
    91100               zrespz = resrat * zfact * trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  & 
    92101                  &   + resrat * zfact * 3. * nitrfac(ji,jj,jk) 
    93102 
    94                !  Zooplankton mortality. A square function has been selected with 
    95                !  no real reason except that it seems to be more stable and may mimic predation. 
    96                !  --------------------------------------------------------------- 
     103               !  Zooplankton quadratic mortality. A square function has been selected with 
     104               !  to mimic predation and disease (density dependent mortality). It also tends 
     105               !  to stabilise the model 
     106               !  ------------------------------------------------------------------------- 
    97107               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    98108 
     109               !   Computation of the abundance of the preys 
     110               !   A threshold can be specified in the namelist 
     111               !   Diatoms have a specific treatment. WHen concentrations  
     112               !   exceed a certain value, diatoms are suppposed to be too  
     113               !   big for microzooplankton. 
     114               !   -------------------------------------------------------- 
    99115               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
    100116               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
    101117               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
    102118                
    103                !     Microzooplankton grazing 
    104                !     ------------------------ 
     119               ! Microzooplankton grazing 
     120               ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     121               ! multiplied by their food preference 
     122               ! A threshold can be specified in the namelist (xthresh). However, when food  
     123               ! concentration is close to this threshold, it is decreased to avoid the  
     124               ! accumulation of food in the mesozoopelagic domain 
     125               ! ------------------------------------------------------------------------------- 
    105126               zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 
    106127               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 
     
    109130               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    110131 
     132               ! The grazing pressure on each prey is computed assuming passive switching. This  
     133               ! is equivalent to assuming that microzooplankton have an opportunistic feeding 
     134               ! behaviour. 
     135               ! ----------------------------------------------------------------------------- 
    111136               zgrazp    = zgraze  * xprefn * zcompaph  * zdenom2  
    112137               zgrazm    = zgraze  * xprefc * zcompapoc * zdenom2  
     
    124149               zgrazing(ji,jj,jk) = zgraztotc 
    125150 
    126                !    Various remineralization and excretion terms 
    127                !    -------------------------------------------- 
     151               ! Microzooplankton efficiency.  
     152               ! We adopt a formulation proposed by Mitra et al. (2007) 
     153               ! The gross growth efficiency is controled by the most limiting nutrient. 
     154               ! Growth is also further decreased when the food quality is poor. This is currently 
     155               ! hard coded : it can be decreased by up to 50% (zepsherq) 
     156               ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and  
     157               ! Fulton, 2012) 
     158               ! ----------------------------------------------------------------------------- 
    128159               zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
    129160               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 
     
    157188               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
    158189               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 
    159                !   Update the arrays TRA which contain the biological sources and sinks 
    160                !   -------------------------------------------------------------------- 
    161190               zmortz = ztortz + zrespz 
    162191               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc  
     
    174203               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 
    175204               ! 
    176                ! calcite production 
     205               ! Calcite remineralization due to zooplankton activity 
     206               ! part of the ingested calcite is dissolving in the acidic gut 
    177207               zprcaca = xfracal(ji,jj,jk) * zgrazp 
    178208               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     
    224254      !! ** Purpose :   Initialization of microzooplankton parameters 
    225255      !! 
    226       !! ** Method  :   Read the nampiszoo namelist and check the parameters 
     256      !! ** Method  :   Read the namp4zzoo namelist and check the parameters 
    227257      !!                called at the first timestep (nittrc000) 
    228258      !! 
    229       !! ** input   :   Namelist nampiszoo 
     259      !! ** input   :   Namelist namp4zzoo 
    230260      !! 
    231261      !!---------------------------------------------------------------------- 
     
    243273      ENDIF 
    244274      ! 
    245       REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton 
     275      REWIND( numnatp_ref )              ! Namelist namp4zzoo in reference namelist : Pisces microzooplankton 
    246276      READ  ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 
    247277901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zzoo in reference namelist' ) 
    248       REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 
     278      REWIND( numnatp_cfg )              ! Namelist namp4zzoo in configuration namelist : Pisces microzooplankton 
    249279      READ  ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 
    250280902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmort.F90

    r12496 r12537  
    2020   PRIVATE 
    2121 
    22    PUBLIC   p4z_mort     
    23    PUBLIC   p4z_mort_init     
    24  
    25    REAL(wp), PUBLIC ::   wchln    !: 
    26    REAL(wp), PUBLIC ::   wchld    !: 
    27    REAL(wp), PUBLIC ::   wchldm   !: 
    28    REAL(wp), PUBLIC ::   mpratn   !: 
    29    REAL(wp), PUBLIC ::   mpratd   !: 
     22   PUBLIC   p4z_mort           ! Called from p4zbio.F90  
     23   PUBLIC   p4z_mort_init      ! Called from trcini_pisces.F90  
     24 
     25   REAL(wp), PUBLIC ::   wchln    !: Quadratic mortality rate of nanophytoplankton 
     26   REAL(wp), PUBLIC ::   wchld    !: Quadratic mortality rate of diatoms 
     27   REAL(wp), PUBLIC ::   wchldm   !: Maximum quadratic mortality rate of diatoms 
     28   REAL(wp), PUBLIC ::   mpratn   !: Linear mortality rate of nanophytoplankton 
     29   REAL(wp), PUBLIC ::   mpratd   !: Linear mortality rate of diatoms 
    3030 
    3131   !!---------------------------------------------------------------------- 
     
    4040      !!                     ***  ROUTINE p4z_mort  *** 
    4141      !! 
    42       !! ** Purpose :   Calls the different subroutine to initialize and compute 
     42      !! ** Purpose :   Calls the different subroutine to compute 
    4343      !!                the different phytoplankton mortality terms 
    4444      !! 
     
    4949      ! 
    5050      CALL p4z_nano            ! nanophytoplankton 
    51       ! 
    5251      CALL p4z_diat            ! diatoms 
    5352      ! 
     
    8281               !     to 0 
    8382               zsizerat = MIN(1., MAX( 0., (quotan(ji,jj,jk) - 0.2) / 0.3) ) * trb(ji,jj,jk,jpphy) 
    84                !     Squared mortality of Phyto similar to a sedimentation term during 
    85                !     blooms (Doney et al. 1996) 
     83 
     84               ! Quadratic mortality of nano due to aggregation during 
     85               ! blooms (Doney et al. 1996) 
     86               ! ----------------------------------------------------- 
    8687               zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat  
    8788 
    88                !     Phytoplankton mortality. This mortality loss is slightly 
    89                !     increased when nutrients are limiting phytoplankton growth 
    90                !     as observed for instance in case of iron limitation. 
     89               ! Phytoplankton linear mortality 
     90               ! A michaelis-menten like term is introduced to avoid  
     91               ! extinction of nanophyto in highly limited areas 
     92               ! ---------------------------------------------------- 
    9193               ztortp = mpratn * xstep * zcompaph / ( xkmort + trb(ji,jj,jk,jpphy) ) * zsizerat 
    9294 
    9395               zmortp = zrespp + ztortp 
    9496 
    95                !   Update the arrays TRA which contains the biological sources and sinks 
    96  
     97               ! Update the arrays TRA which contains the biological sources and sinks 
    9798               zfactfe = trb(ji,jj,jk,jpnfe)/(trb(ji,jj,jk,jpphy)+rtrn) 
    9899               zfactch = trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
     
    100101               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 
    101102               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 
     103               ! Production PIC particles due to mortality 
    102104               zprcaca = xfracal(ji,jj,jk) * zmortp 
    103                ! 
    104105               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    105                ! 
    106106               zfracal = 0.5 * xfracal(ji,jj,jk) 
    107107               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca 
     
    146146      IF( ln_timing )   CALL timing_start('p4z_diat') 
    147147      ! 
    148       !    Aggregation term for diatoms is increased in case of nutrient 
    149       !    stress as observed in reality. The stressed cells become more 
    150       !    sticky and coagulate to sink quickly out of the euphotic zone 
    151       !     ------------------------------------------------------------ 
     148      ! Aggregation term for diatoms is increased in case of nutrient 
     149      ! stress as observed in reality. The stressed cells become more 
     150      ! sticky and coagulate to sink quickly out of the euphotic zone 
     151      ! ------------------------------------------------------------- 
    152152 
    153153      DO jk = 1, jpkm1 
     
    157157               zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - 1e-9), 0. ) 
    158158 
    159                !    Aggregation term for diatoms is increased in case of nutrient 
    160                !    stress as observed in reality. The stressed cells become more 
    161                !    sticky and coagulate to sink quickly out of the euphotic zone 
    162                !     ------------------------------------------------------------ 
    163                !  Phytoplankton respiration  
    164                !     ------------------------ 
     159               ! Aggregation term for diatoms is increased in case of nutrient 
     160               ! stress as observed in reality. The stressed cells become more 
     161               ! sticky and coagulate to sink quickly out of the euphotic zone 
     162               ! ------------------------------------------------------------ 
    165163               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    166164               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    167165               zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    168166 
    169                !     Phytoplankton mortality.  
    170                !     ------------------------ 
     167               ! Phytoplankton linear mortality 
     168               ! A michaelis-menten like term is introduced to avoid  
     169               ! extinction of diatoms in highly limited areas 
     170               !  --------------------------------------------------- 
    171171               ztortp2 = mpratd * xstep * trb(ji,jj,jk,jpdia)  / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi  
    172172 
    173173               zmortp2 = zrespp2 + ztortp2 
    174174 
    175                !   Update the arrays tra which contains the biological sources and sinks 
     175               ! Update the arrays tra which contains the biological sources and sinks 
    176176               !   --------------------------------------------------------------------- 
    177177               zfactch = trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     
    210210      !! ** Purpose :   Initialization of phytoplankton parameters 
    211211      !! 
    212       !! ** Method  :   Read the nampismort namelist and check the parameters 
     212      !! ** Method  :   Read the namp4zmort namelist and check the parameters 
    213213      !!              called at the first timestep 
    214214      !! 
    215       !! ** input   :   Namelist nampismort 
     215      !! ** input   :   Namelist namp4zmort 
    216216      !! 
    217217      !!---------------------------------------------------------------------- 
     
    227227      ENDIF 
    228228      ! 
    229       REWIND( numnatp_ref )              ! Namelist nampismort in reference namelist : Pisces phytoplankton 
     229      REWIND( numnatp_ref )              ! Namelist namp4zmort in reference namelist : Pisces phytoplankton 
    230230      READ  ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 
    231231901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zmort in reference namelist' ) 
    232       REWIND( numnatp_cfg )              ! Namelist nampismort in configuration namelist : Pisces phytoplankton 
     232      REWIND( numnatp_cfg )              ! Namelist namp4zmort in configuration namelist : Pisces phytoplankton 
    233233      READ  ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 
    234234902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zmort in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zpoc.F90

    r11536 r12537  
    33   !!                         ***  MODULE p4zpoc  *** 
    44   !! TOP :   PISCES Compute remineralization of organic particles 
     5   !!         Same module for both PISCES and PISCES-QUOTA 
    56   !!========================================================================= 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    89   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    910   !!             3.6  !  2016-03  (O. Aumont) Quota model and diverse 
     11   !!             4.0  !  2018     (O. Aumont) Variable lability parameterization 
    1012   !!---------------------------------------------------------------------- 
    1113   !!   p4z_poc       :  Compute remineralization/dissolution of organic compounds 
    1214   !!   p4z_poc_init  :  Initialisation of parameters for remineralisation 
     15   !!   alngam and gamain : computation of the incomplete gamma function 
    1316   !!---------------------------------------------------------------------- 
    1417   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2225 
    2326   PUBLIC   p4z_poc         ! called in p4zbio.F90 
    24    PUBLIC   p4z_poc_init    ! called in trcsms_pisces.F90 
    25    PUBLIC   alngam          ! 
     27   PUBLIC   p4z_poc_init    ! called in trcini_pisces.F90 
     28   PUBLIC   alngam          !  
    2629   PUBLIC   gamain          ! 
    2730 
     
    3336   REAL(wp), PUBLIC ::   rshape     !: shape factor of the gamma distribution 
    3437 
    35    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   alphan, reminp   !: 
    36    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   alphap           !: 
     38   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   alphan, reminp   !: variable lability of POC and initial distribution 
     39   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   alphap           !: lability distribution of small particles 
    3740 
    3841 
     
    4952      !! 
    5053      !! ** Purpose :   Compute remineralization of organic particles 
     54      !!                A reactivity-continuum parameterization is chosen 
     55      !!                to describe the lability of the organic particles 
     56      !!                As a consequence, the remineralisation rates of the  
     57      !!                the different pools change with time as a function of  
     58      !!                the lability distribution 
    5159      !! 
    52       !! ** Method  : - ??? 
     60      !! ** Method  : - Computation of the remineralisation rates is performed 
     61      !!                according to reactivity continuum formalism described 
     62      !!                in Aumont et al. (2017).  
    5363      !!--------------------------------------------------------------------- 
    5464      INTEGER, INTENT(in) ::   kt, knt   ! ocean time step and ??? 
     
    7989      solgoc = 0.04/ 2.56 * 1./ ( 1.-50**(-0.04) ) 
    8090 
    81       ! Initialisation of temprary arrys 
     91      ! Initialisation of temporary arrys 
    8292      IF( ln_p4z ) THEN 
    8393         zremipoc(:,:,:) = xremip 
     
    92102      zfolimi (:,:,:) = 0. 
    93103 
     104      ! Initialisation of the lability distributions that are set to  
     105      ! the distribution of newly produced organic particles 
    94106      DO jn = 1, jcpoc 
    95107        alphag(:,:,:,jn) = alphan(jn) 
     
    97109      END DO 
    98110 
    99      ! ----------------------------------------------------------------------- 
    100111     ! Lability parameterization. This is the big particles part (GOC) 
    101      ! This lability parameterization can be activated only with the standard 
    102      ! particle scheme. Does not work with Kriest parameterization. 
     112     ! This lability parameterization is always active. However, if only one 
     113     ! lability class is specified in the namelist, this is equivalent to  
     114     ! a standard parameterisation with a constant lability 
    103115     ! ----------------------------------------------------------------------- 
    104116     ztremint(:,:,:) = zremigoc(:,:,:) 
     
    108120              IF (tmask(ji,jj,jk) == 1.) THEN 
    109121                zdep = hmld(ji,jj) 
    110                 ! 
     122 
    111123                ! In the case of GOC, lability is constant in the mixed layer  
    112124                ! It is computed only below the mixed layer depth 
    113125                ! ------------------------------------------------------------ 
    114                 ! 
    115126                IF( gdept_n(ji,jj,jk) > zdep ) THEN 
    116127                  alphat = 0. 
     
    153164                    END DO 
    154165                  ELSE 
    155                     ! 
     166 
    156167                    ! standard algorithm in the rest of the water column 
    157168                    ! See the comments in the previous block. 
    158169                    ! --------------------------------------------------- 
    159                     ! 
    160170                    zpoc = trb(ji,jj,jk-1,jpgoc) + consgoc(ji,jj,jk-1) * rday / rfact2               & 
    161171                    &   * e3t_n(ji,jj,jk-1) / 2. / (wsbio4(ji,jj,jk-1) + rtrn) + consgoc(ji,jj,jk)   & 
     
    192202 
    193203      IF( ln_p4z ) THEN 
     204         ! The standard PISCES part 
    194205         DO jk = 1, jpkm1 
    195206            DO jj = 1, jpj 
    196207               DO ji = 1, jpi 
    197                   ! POC disaggregation by turbulence and bacterial activity.  
    198                   ! -------------------------------------------------------- 
     208                  ! POC degradation by bacterial activity. It is a function  
     209                  ! of the mean lability and of temperature. This also includes 
     210                  ! shrinking of particles due to the bacterial activity 
     211                  ! ----------------------------------------------------------- 
    199212                  zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    200213                  zorem2  = zremig * trb(ji,jj,jk,jpgoc) 
     
    204217                  zofer3 = zremig * solgoc * trb(ji,jj,jk,jpbfe) 
    205218 
    206                   ! ------------------------------------- 
     219                  ! update of the TRA arrays 
    207220                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 
    208221                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 - zorem3(ji,jj,jk) 
     
    216229         END DO 
    217230      ELSE 
     231         ! PISCES-QUOTA part 
    218232         DO jk = 1, jpkm1 
    219233            DO jj = 1, jpj 
    220234               DO ji = 1, jpi 
    221                    ! POC disaggregation by turbulence and bacterial activity.  
    222                   ! -------------------------------------------------------- 
     235                  ! POC disaggregation by bacterial activity. It is a function 
     236                  ! of the mean lability and of temperature. Shrinking of  
     237                  ! particles due to the bacterial activity is also included  
     238                  ! ---------------------------------------------------------- 
    223239                  zremig = zremigoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    224240                  zopoc2 = zremig  * trb(ji,jj,jk,jpgoc) 
     
    229245                  zofer2 = xremipn / xremipc * zremig * trb(ji,jj,jk,jpbfe) 
    230246 
    231                   ! ------------------------------------- 
     247                  ! Update of the TRA arrays 
    232248                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem3(ji,jj,jk) 
    233249                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + solgoc * zopon2  
     
    254270     ENDIF 
    255271 
    256      ! ------------------------------------------------------------------ 
    257272     ! Lability parameterization for the small OM particles. This param  
    258273     ! is based on the same theoretical background as the big particles. 
    259274     ! However, because of its low sinking speed, lability is not supposed 
    260275     ! to be equal to its initial value (the value of the freshly produced 
    261      ! organic matter). It is however uniform in the mixed layer. 
    262      ! ------------------------------------------------------------------- 
    263      ! 
     276     ! organic matter) in the MLD. It is however uniform in the mixed layer. 
     277     ! --------------------------------------------------------------------- 
    264278     totprod (:,:) = 0. 
    265279     totthick(:,:) = 0. 
    266280     totcons (:,:) = 0. 
     281 
    267282     ! intregrated production and consumption of POC in the mixed layer 
    268283     ! ---------------------------------------------------------------- 
    269      !  
    270284     DO jk = 1, jpkm1 
    271285        DO jj = 1, jpj 
     
    284298 
    285299     ! Computation of the lability spectrum in the mixed layer. In the mixed  
    286      ! layer, this spectrum is supposed to be uniform. 
     300     ! layer, this spectrum is supposed to be uniform as a result of intense 
     301     ! mixing. 
    287302     ! --------------------------------------------------------------------- 
    288303     ztremint(:,:,:) = zremipoc(:,:,:) 
     
    318333     ENDIF 
    319334 
    320      ! ----------------------------------------------------------------------- 
    321335     ! The lability parameterization is used here. The code is here  
    322336     ! almost identical to what is done for big particles. The only difference 
     
    325339     ! should be determined before. 
    326340     ! ----------------------------------------------------------------------- 
    327      ! 
    328341     DO jk = 2, jpkm1 
    329342        DO jj = 1, jpj 
     
    334347                  alphat = 0. 
    335348                  remint = 0. 
    336                   ! 
    337349                  ! the scale factors are corrected with temperature 
    338350                  zsizek1  = e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) * tgfunc(ji,jj,jk-1) 
    339351                  zsizek = e3t_n(ji,jj,jk) / 2. / (wsbio3(ji,jj,jk) + rtrn) * tgfunc(ji,jj,jk) 
    340                   ! 
     352 
    341353                  ! Special treatment of the level just below the MXL 
    342354                  ! See the comments in the GOC section 
    343355                  ! --------------------------------------------------- 
    344                   ! 
    345356                  IF ( gdept_n(ji,jj,jk-1) <= zdep ) THEN 
    346357                    ! 
     
    362373                    END DO 
    363374                  ELSE 
    364                     ! 
     375 
    365376                    ! Lability parameterization for the interior of the ocean 
    366377                    ! This is very similar to what is done in the previous  
    367378                    ! block 
    368379                    ! -------------------------------------------------------- 
    369                     ! 
    370380                    zpoc = trb(ji,jj,jk-1,jppoc) + conspoc(ji,jj,jk-1) * rday / rfact2               & 
    371381                    &   * e3t_n(ji,jj,jk-1) / 2. / (wsbio3(ji,jj,jk-1) + rtrn) + conspoc(ji,jj,jk)   & 
     
    404414 
    405415     IF( ln_p4z ) THEN 
    406          DO jk = 1, jpkm1 
    407             DO jj = 1, jpj 
    408                DO ji = 1, jpi 
    409                   IF (tmask(ji,jj,jk) == 1.) THEN 
    410                     ! POC disaggregation by turbulence and bacterial activity.  
    411                     ! -------------------------------------------------------- 
     416        ! Standard PISCES part 
     417        DO jk = 1, jpkm1 
     418           DO jj = 1, jpj 
     419              DO ji = 1, jpi 
     420                 IF (tmask(ji,jj,jk) == 1.) THEN 
     421                    ! POC disaggregation by bacterial activity. It is a function 
     422                    ! of the mean lability and of temperature  
     423                    ! ---------------------------------------------------------- 
    412424                    zremip          = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    413425                    zorem           = zremip * trb(ji,jj,jk,jppoc) 
    414426                    zofer           = zremip * trb(ji,jj,jk,jpsfe) 
    415427 
     428                    ! Update of the TRA arrays 
    416429                    tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 
    417430                    orem(ji,jj,jk)      = orem(ji,jj,jk) + zorem 
     
    420433                    tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
    421434                    zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
    422                   ENDIF 
    423                END DO 
    424             END DO 
    425          END DO 
     435                 ENDIF 
     436              END DO 
     437           END DO 
     438        END DO 
    426439     ELSE 
    427        DO jk = 1, jpkm1 
    428           DO jj = 1, jpj 
    429              DO ji = 1, jpi 
    430                 ! POC disaggregation by turbulence and bacterial activity.  
    431                 ! -------------------------------------------------------- 
    432                 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
    433                 zopoc  = zremip * trb(ji,jj,jk,jppoc) 
    434                 orem(ji,jj,jk)  = orem(ji,jj,jk) + zopoc 
    435                 zopon  = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 
    436                 zopop  = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 
    437                 zofer  = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 
    438  
    439                 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 
    440                 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 
    441                 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 
    442                 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
    443                 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 
    444                 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon  
    445                 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop  
    446                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer  
    447                 zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
    448              END DO 
     440        ! PISCES QUOTA part 
     441        DO jk = 1, jpkm1 
     442           DO jj = 1, jpj 
     443              DO ji = 1, jpi 
     444                 ! POC disaggregation by bacterial activity. It is a function 
     445                 ! of the mean lability and of temperature  
     446                 ! ---------------------------------------------------------- 
     447                 zremip = zremipoc(ji,jj,jk) * xstep * tgfunc(ji,jj,jk) 
     448                 zopoc  = zremip * trb(ji,jj,jk,jppoc) 
     449                 orem(ji,jj,jk)  = orem(ji,jj,jk) + zopoc 
     450                 zopon  = xremipn / xremipc * zremip * trb(ji,jj,jk,jppon) 
     451                 zopop  = xremipp / xremipc * zremip * trb(ji,jj,jk,jppop) 
     452                 zofer  = xremipn / xremipc * zremip * trb(ji,jj,jk,jpsfe) 
     453 
     454                 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zopoc 
     455                 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zopon 
     456                 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zopop 
     457                 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
     458                 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zopoc 
     459                 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zopon  
     460                 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop  
     461                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer  
     462                 zfolimi(ji,jj,jk)   = zfolimi(ji,jj,jk) + zofer 
     463              END DO 
    449464           END DO 
    450465        END DO 
     
    454469        IF( knt == nrdttrc ) THEN 
    455470          zrfact2 = 1.e3 * rfact2r 
    456           CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
    457           CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate 
    458           CALL iom_put( "REMINF" , zfolimi(:,:,:)  * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation rate 
     471          CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of small particles 
     472          CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) )  ! Remineralisation rate of large particles 
     473          CALL iom_put( "REMINF" , zfolimi(:,:,:)  * tmask(:,:,:)  * 1.e+9 * zrfact2 )  ! Remineralisation of biogenic particulate iron 
    459474        ENDIF 
    460475     ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zprod.F90

    r12496 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zprod  *** 
    4    !! TOP :  Growth Rate of the two phytoplanktons groups  
     4   !! TOP :  Growth Rate of the two phytoplankton groups of PISCES  
    55   !!====================================================================== 
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    2424   PUBLIC   p4z_prod         ! called in p4zbio.F90 
    2525   PUBLIC   p4z_prod_init    ! called in trcsms_pisces.F90 
    26    PUBLIC   p4z_prod_alloc 
     26   PUBLIC   p4z_prod_alloc   ! called in trcini_pisces.F90 
    2727 
    2828   REAL(wp), PUBLIC ::   pislopen     !: 
     
    4040 
    4141   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotan   !: proxy of N quota in Nanophyto 
    42    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatomee 
     42   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   quotad   !: proxy of N quota in diatoms 
    4343    
    4444   REAL(wp) ::   r1_rday    ! 1 / rday 
     
    5757      !!                     ***  ROUTINE p4z_prod  *** 
    5858      !! 
    59       !! ** Purpose :   Compute the phytoplankton production depending on 
    60       !!              light, temperature and nutrient availability 
    61       !! 
    62       !! ** Method  : - ??? 
     59      !! ** Purpose :   Computes phytoplankton production depending on 
     60      !!                light, temperature and nutrient availability 
     61      !!                Computes also the uptake of Iron and Si as well  
     62      !!                as the chlorophyll content of the cells 
    6363      !!--------------------------------------------------------------------- 
    6464      INTEGER, INTENT(in) ::   kt, knt   ! 
     
    9595      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
    9696 
    97       ! Computation of the optimal production 
     97      ! Computation of the maximimum production 
     98      ! Parameters are taken from Bissinger et al. (2008) 
    9899      zprmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 
    99100      zprmaxd(:,:,:) = zprmaxn(:,:,:) 
     
    114115 
    115116      ! Impact of the day duration and light intermittency on phytoplankton growth 
     117      ! Intermittency is supposed to have a similar effect on production as  
     118      ! day length. The correcting factor is zmxl_fac. zmxl_chl is the fractional 
     119      ! day length and is used to compute the mean PAR during daytime. 
     120      ! Formulation for the impact of day length on PP is from Thompson (1999) 
     121      ! -------------------------------------------------------------------------  
    116122      DO jk = 1, jpkm1 
    117123         DO jj = 1 ,jpj 
     
    132138      zprdia(:,:,:) = zprmaxd(:,:,:) * zmxl_fac(:,:,:) 
    133139 
    134       ! Maximum light intensity 
    135140      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    136141 
    137142      ! Computation of the P-I slope for nanos and diatoms 
     143      ! The formulation proposed by Geider et al. (1997) has been modified  
     144      ! to exclude the effect of nutrient limitation and temperature in the PI 
     145      ! curve following Vichi et al. (2007) 
     146      ! ----------------------------------------------------------------------- 
    138147      DO jk = 1, jpkm1 
    139148         DO jj = 1, jpj 
     
    145154                  zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    146155                  ! 
     156                  ! The initial slope of the PI curve can be increased for nano 
     157                  ! to account for photadaptation, for instance in the DCM 
    147158                  zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  & 
    148159                  &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
     
    179190 
    180191      !  Computation of a proxy of the N/C ratio 
     192      !  Steady state is assumed 
    181193      !  --------------------------------------- 
    182194      DO jk = 1, jpkm1 
     
    199211 
    200212                IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    201                    !    Si/C of diatoms 
    202                    !    ------------------------ 
    203                    !    Si/C increases with iron stress and silicate availability 
    204                    !    Si/C is arbitrariliy increased for very high Si concentrations 
    205                    !    to mimic the very high ratios observed in the Southern Ocean (silpot2) 
     213                   ! Si/C of diatoms 
     214                   ! ------------------------ 
     215                   ! Si/C increases with iron stress and silicate availability (zsilfac) 
     216                   ! Si/C is arbitrariliy increased for very high Si concentrations 
     217                   ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 
     218                   ! ----------------------------------------------------------------------- 
    206219                  zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    207220                  zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
     
    219232      END DO 
    220233 
    221       !  Mixed-layer effect on production  
    222       !  Sea-ice effect on production 
    223  
     234      ! Sea-ice effect on production 
     235      ! No production is assumed below sea ice 
     236      ! --------------------------------------  
    224237      DO jk = 1, jpkm1 
    225238         DO jj = 1, jpj 
     
    231244      END DO 
    232245 
    233       ! Computation of the various production terms  
     246      ! Computation of the various production  and nutrient uptake terms 
     247      ! --------------------------------------------------------------- 
    234248      DO jk = 1, jpkm1 
    235249         DO jj = 1, jpj 
    236250            DO ji = 1, jpi 
    237251               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    238                   !  production terms for nanophyto. (C) 
     252                  !  production term of nanophyto. (C) 
    239253                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
     254 
     255                  !  New production (uptake of NO3) 
    240256                  zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    241257                  ! 
    242258                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 
     259 
     260                  !  Iron uptake rates of nanophytoplankton. Upregulation   
     261                  !  is parameterized at low iron concentrations. Typical  
     262                  !  formulation used in quota formulations. Uptake is downregulated 
     263                  !  when the quota is close to the maximum quota  
    243264                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    244265                  zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
     
    246267                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    247268                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    248                   !  production terms for diatoms (C) 
     269                  !  production terms of diatoms (C) 
    249270                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
     271 
     272                  ! New production (uptake of NO3) 
    250273                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    251                   ! 
     274 
     275                  !  Iron uptake rates of nanophytoplankton. Upregulation   
     276                  !  is parameterized at low iron concentrations. Typical  
     277                  !  formulation used in quota formulations. Uptake is downregulated 
     278                  !  when the quota is close to the maximum quota  
    252279                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 
    253280                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     
    262289 
    263290      ! Computation of the chlorophyll production terms 
     291      ! The parameterization is taken from Geider et al. (1997) 
     292      ! ------------------------------------------------------- 
    264293      DO jk = 1, jpkm1 
    265294         DO jj = 1, jpj 
    266295            DO ji = 1, jpi 
    267296               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    268                   !  production terms for nanophyto. ( chlorophyll ) 
     297                  !  production term for nanophyto. ( chlorophyll ) 
    269298                  znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    270299                  zprod    = rday * zprorcan(ji,jj,jk) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 
    271300                  zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
     301                  ! The maximum reachable Chl quota is modulated by temperature 
     302                  ! following Geider (1987) 
    272303                  chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    273304                  zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
    274305                                        & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
    275                   !  production terms for diatoms ( chlorophyll ) 
     306                  !  production terms of diatoms ( chlorophyll ) 
    276307                  zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    277308                  zprod    = rday * zprorcad(ji,jj,jk) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
    278309                  zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
     310                  ! The maximum reachable Chl quota is modulated by temperature 
     311                  ! following Geider (1987) 
    279312                  chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
    280313                  zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     
    319352     END DO 
    320353     ! 
     354     ! Production and uptake of ligands by phytoplankton. This part is activated  
     355     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
     356     ! and based on the FeL model by Morel et al. (2008) and on the study of 
     357     ! Shaked and Lis (2012) 
     358     ! ------------------------------------------------------------------------- 
    321359     IF( ln_ligand ) THEN 
    322360         zpligprod1(:,:,:) = 0._wp    ;    zpligprod2(:,:,:) = 0._wp 
     
    328366                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    329367                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp    & 
    330                     &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) 
     368                    &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    331369                    zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    332                     zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 
     370                    zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 
     371                    &                      + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    333372                 ENDIF 
    334373              END DO 
     
    373412          ENDIF 
    374413          IF( iom_use( "LPRODP" ) )  THEN 
    375               zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     414              zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:)  ! Ligand production by phytoplankton 
    376415              CALL iom_put( "LPRODP"  , zw3d ) 
    377416          ENDIF 
    378417          IF( iom_use( "LDETP" ) )  THEN 
    379               zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
     418              zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:)  ! Uptake of ligands by phytoplankton 
    380419              CALL iom_put( "LDETP"  , zw3d ) 
    381420          ENDIF 
     
    392431          ENDIF 
    393432          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) )  THEN 
    394               zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     433              zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of nanophytoplankton 
    395434              CALL iom_put( "LNlight"  , zw3d ) 
    396435              ! 
    397               zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     436              zw3d(:,:,:) = zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term of diatoms 
    398437              CALL iom_put( "LDlight"  , zw3d ) 
    399438          ENDIF 
     
    474513      !! ** Purpose :   Initialization of phytoplankton production parameters 
    475514      !! 
    476       !! ** Method  :   Read the nampisprod namelist and check the parameters 
     515      !! ** Method  :   Read the namp4zprod namelist and check the parameters 
    477516      !!      called at the first timestep (nittrc000) 
    478517      !! 
    479       !! ** input   :   Namelist nampisprod 
     518      !! ** input   :   Namelist namp4zprod 
    480519      !!---------------------------------------------------------------------- 
    481520      INTEGER ::   ios   ! Local integer 
     
    491530      ENDIF 
    492531      ! 
    493       REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production 
     532      REWIND( numnatp_ref )              ! Namelist namp4zprod in reference namelist : Pisces phytoplankton production 
    494533      READ  ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 
    495534901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namp4zprod in reference namelist' ) 
    496       REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 
     535      REWIND( numnatp_cfg )              ! Namelist namp4zprod in configuration namelist : Pisces phytoplankton production 
    497536      READ  ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 
    498537902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namp4zprod in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zrem.F90

    r12524 r12537  
    33   !!                         ***  MODULE p4zrem  *** 
    44   !! TOP :   PISCES Compute remineralization/dissolution of organic compounds 
     5   !!         except for POC which is treated in p4zpoc.F90 
     6   !!         This module is common to both PISCES and PISCES-QUOTA 
    57   !!========================================================================= 
    68   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1719   USE p4zche          !  chemical model 
    1820   USE p4zprod         !  Growth rate of the 2 phyto groups 
    19    USE p4zlim 
     21   USE p4zlim          !  Nutrient limitation terms 
    2022   USE prtctl_trc      !  print control for debugging 
    2123   USE iom             !  I/O manager 
     
    2628 
    2729   PUBLIC   p4z_rem         ! called in p4zbio.F90 
    28    PUBLIC   p4z_rem_init    ! called in trcsms_pisces.F90 
    29    PUBLIC   p4z_rem_alloc 
    30  
    31    REAL(wp), PUBLIC ::   xremikc    !: remineralisation rate of DOC  
    32    REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON  
    33    REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP  
    34    REAL(wp), PUBLIC ::   xremik     !: remineralisation rate of POC  
     30   PUBLIC   p4z_rem_init    ! called in trcini_pisces.F90 
     31   PUBLIC   p4z_rem_alloc   ! called in trcini_pisces.F90 
     32 
     33   !! * Shared module variables 
     34   REAL(wp), PUBLIC ::   xremikc    !: remineralisation rate of DOC (p5z)  
     35   REAL(wp), PUBLIC ::   xremikn    !: remineralisation rate of DON (p5z)  
     36   REAL(wp), PUBLIC ::   xremikp    !: remineralisation rate of DOP (p5z)  
     37   REAL(wp), PUBLIC ::   xremik     !: remineralisation rate of DOC (p4z)  
    3538   REAL(wp), PUBLIC ::   nitrif     !: NH4 nitrification rate  
    36    REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of POC  
    37    REAL(wp), PUBLIC ::   xsiremlab  !: fast remineralisation rate of POC  
     39   REAL(wp), PUBLIC ::   xsirem     !: remineralisation rate of biogenic silica 
     40   REAL(wp), PUBLIC ::   xsiremlab  !: fast remineralisation rate of BSi 
    3841   REAL(wp), PUBLIC ::   xsilab     !: fraction of labile biogenic silica  
    3942   REAL(wp), PUBLIC ::   feratb     !: Fe/C quota in bacteria 
    40    REAL(wp), PUBLIC ::   xkferb     !: Half-saturation constant for bacteria Fe/C 
     43   REAL(wp), PUBLIC ::   xkferb     !: Half-saturation constant for bacterial Fe/C 
    4144 
    4245   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitr   !: denitrification array 
     
    5356      !!                     ***  ROUTINE p4z_rem  *** 
    5457      !! 
    55       !! ** Purpose :   Compute remineralization/scavenging of organic compounds 
    56       !! 
    57       !! ** Method  : - ??? 
     58      !! ** Purpose :   Compute remineralization/dissolution of organic compounds 
     59      !!                Computes also nitrification of ammonium  
     60      !!                The solubilization/remineralization of POC is treated  
     61      !!                in p4zpoc.F90. The dissolution of calcite is processed 
     62      !!                in p4zlys.F90.  
     63      !! 
     64      !! ** Method  : - Bacterial biomass is computed implicitely based on a  
     65      !!                parameterization developed from an explicit modeling 
     66      !!                of PISCES in an alternative version  
    5867      !!--------------------------------------------------------------------- 
    5968      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
     
    7382      IF( ln_timing )   CALL timing_start('p4z_rem') 
    7483      ! 
    75       ! Initialisation of arrys 
     84      ! Initialisation of arrays 
    7685      zdepprod(:,:,:) = 1._wp 
    7786      zdepeff (:,:,:) = 0.3_wp 
     
    8190      zfacsi(:,:,:)   = xsilab 
    8291 
    83       ! Computation of the mean phytoplankton concentration as 
    84       ! a crude estimate of the bacterial biomass 
     92      ! Computation of the mean bacterial concentration 
    8593      ! this parameterization has been deduced from a model version 
    8694      ! that was modeling explicitely bacteria 
     
    107115            DO jj = 1, jpj 
    108116               DO ji = 1, jpi 
    109                   ! DOC ammonification. Depends on depth, phytoplankton biomass 
    110                   ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     117                  ! DOC ammonification. Depends on a limitation term of the bacterial activity 
     118                  ! and on the implicit bacteria concentration 
     119                  ! -------------------------------------------------------------------------- 
    111120                  zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    112121                  zremik = MAX( zremik, 2.74e-4 * xstep ) 
     122 
    113123                  ! Ammonification in oxic waters with oxygen consumption 
    114124                  ! ----------------------------------------------------- 
    115125                  zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    116126                  zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
     127 
    117128                  ! Ammonification in suboxic waters with denitrification 
    118                   ! ------------------------------------------------------- 
     129                  ! ----------------------------------------------------- 
    119130                  zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
    120131                  denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
    121132                  denitr(ji,jj,jk)  = MIN( ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, denitr(ji,jj,jk) ) 
     133 
     134                  ! Ammonification in waters depleted in O2 and NO3 based on  
     135                  ! other redox processes 
     136                  ! -------------------------------------------------------- 
    122137                  zoxyremc          = zammonic - denitr(ji,jj,jk) 
    123138                  ! 
     
    125140                  denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    126141                  zoxyremc          = MAX( 0.e0, zoxyremc ) 
    127  
    128                   ! 
     142                  ! Update of the TRA arrays 
    129143                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
    130144                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) + zoxyremc 
     
    142156            DO jj = 1, jpj 
    143157               DO ji = 1, jpi 
    144                   ! DOC ammonification. Depends on depth, phytoplankton biomass 
    145                   ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
    146                   ! ----------------------------------------------------------------- 
     158                  ! DOC ammonification. Depends on a limitation term of the bacterial activity 
     159                  ! and on the implicit bacteria concentration 
     160                  ! --------------------------------------------------------------- 
     161----------- 
    147162                  zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
    148163                  zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     
    170185                  zoxyremn  = zremikn * zoxyremc * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    171186                  zoxyremp  = zremikp * zoxyremc * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
    172  
     187                  ! Update of the TRA arrays 
    173188                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp + zoxyremp 
    174189                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn + zoxyremn 
     
    185200         ! 
    186201      ENDIF 
    187  
    188202 
    189203      DO jk = 1, jpkm1 
     
    220234               ! Bacteries are obliged to take up iron from the water. Some 
    221235               ! studies (especially at Papa) have shown this uptake to be significant 
    222                ! ---------------------------------------------------------- 
     236               ! --------------------------------------------------------------------- 
    223237               zbactfer = feratb *  rfact2 * 0.6_wp / rday * tgfunc(ji,jj,jk) * xlimbacl(ji,jj,jk)     & 
    224238                  &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    225239                  &              * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 
     240 
     241               ! Only the transfer of iron from its dissolved form to particles 
     242               ! is treated here. The GGE of bacteria supposed to be equal to  
     243               ! 0.33. This is hard-coded.  
    226244               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 
    227245               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 
     
    242260      ! of bSi. Set to a constant in the upper ocean 
    243261      ! --------------------------------------------------------------- 
    244  
    245262      DO jk = 1, jpkm1 
    246263         DO jj = 1, jpj 
    247264            DO ji = 1, jpi 
     265               ! Remineralization rate of BSi depedant on T and saturation 
     266               ! The parameterization is taken from Ridgwell et al. (2002)  
     267               ! --------------------------------------------------------- 
    248268               zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
    249269               zsatur   = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 
    250270               zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
    251271               znusil   = 0.225  * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    252                ! Remineralization rate of BSi depedant on T and saturation 
    253                ! --------------------------------------------------------- 
     272               ! Computation of the vertical evolution of the labile fraction 
     273               ! of bSi. This is computed assuming steady state. 
    254274               IF ( gdept_n(ji,jj,jk) > zdep ) THEN 
    255275                  zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem )  & 
     
    261281               zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * xstep * znusil 
    262282               zosil    = zsiremin * trb(ji,jj,jk,jpgsi) 
    263                ! 
     283               ! Update of the TRA arrays 
    264284               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) - zosil 
    265285               tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + zosil 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsed.F90

    r10788 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4sed  *** 
    4    !! TOP :   PISCES Compute loss of organic matter in the sediments 
     4   !! TOP :   PISCES Compute loss of biogenic matter in the sediments 
     5   !!                Compute gain/loss of tracers from dust, rivers and  
     6   !!                sediments  
     7   !!                This module is used both by PISCES and PISCES-QUOTA 
    58   !!====================================================================== 
    69   !! History :   1.0  !  2004-03 (O. Aumont) Original code 
     
    811   !!             3.4  !  2011-06 (C. Ethe) USE of fldread 
    912   !!             3.5  !  2012-07 (O. Aumont) improvment of river input of nutrients  
    10    !!---------------------------------------------------------------------- 
     13   !!----------------------------------------------------------------------- 
    1114   !!   p4z_sed        :  Compute loss of organic matter in the sediments 
    12    !!---------------------------------------------------------------------- 
     15   !!                  :  Compute gain/loss of tracers from dust, rivers and  
     16   !!                     sediments  
     17   !!----------------------------------------------------------------------- 
    1318   USE oce_trc         !  shared variables between ocean and passive tracers 
    1419   USE trc             !  passive tracers common variables  
     
    4348      !!                     ***  ROUTINE p4z_sed  *** 
    4449      !! 
    45       !! ** Purpose :   Compute loss of organic matter in the sediments. This 
    46       !!              is by no way a sediment model. The loss is simply  
    47       !!              computed to balance the inout from rivers and dust 
     50      !! ** Purpose :   Compute loss of biogenic matter in the sediments. This 
     51      !!              is by no way a real sediment model. The loss is simply  
     52      !!              computed from metamodels. 
     53      !!              Loss/gain of tracers are also computed here for  
     54      !!              dust, rivers, sediments and hydrothermal vents (Fe)  
     55      !!              N2 fixation is modeled using an implicit approach 
    4856      !! 
    4957      !! ** Method  : - ??? 
     
    93101      zsedc   (:,:) = 0.e0 
    94102 
    95       ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     103      ! Iron input/uptake due to sea ice : Crude parameterization based on  
     104      ! Lancelot et al. Iron concentration in sea-ice is constant and set  
     105      ! in the namelist_pisces (icefeinput). ln_ironice is forced to false 
     106      ! when nn_ice_tr = 1 
    96107      ! ---------------------------------------------------- 
    97108      IF( ln_ironice ) THEN   
     
    99110         ALLOCATE( zironice(jpi,jpj) ) 
    100111         !                                               
     112         ! Compute the iron flux between sea ice and sea water 
    101113         DO jj = 1, jpj 
    102114            DO ji = 1, jpi 
     
    106118            END DO 
    107119         END DO 
    108          ! 
     120         ! Update of the TRA array 
    109121         tra(:,:,1,jpfer) = tra(:,:,1,jpfer) + zironice(:,:)  
    110122         !  
     
    121133         !                                               
    122134         ALLOCATE( zsidep(jpi,jpj), zpdep(jpi,jpj,jpk), zirondep(jpi,jpj,jpk) ) 
    123          !                                              ! Iron and Si deposition at the surface 
     135         ! Iron, P and Si deposition at the surface 
     136         ! Iron flux at the surface due to dust deposition. Solubility can be  
     137         ! be variable if ln_solub is set to true. In that case, solubility  
     138         ! has to be provided in the specific input file (read in p4zsbc) 
     139         ! ------------------------------------------------------------------ 
    124140         IF( ln_solub ) THEN 
    125141            zirondep(:,:,1) = solub(:,:) * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
     
    127143            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
    128144         ENDIF 
     145         ! Si and P flux at the surface due to dust deposition. The content  
     146         ! and the solubility are hard coded 
     147         ! ---------------------------------------------------------------- 
    129148         zsidep(:,:)   = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
    130149         zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
    131          !                                              ! Iron solubilization of particles in the water column 
    132          !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
    133          zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 270. * rday ) 
     150         ! Iron solubilization of particles in the water column 
     151         ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/d 
     152         ! Dust are supposed to sink at wdust sinking speed. 3% of the iron  
     153         ! in dust is hypothesized to be soluble at a dissolution rate set to  
     154         ! 1/(250 days). The vertical distribution of iron in dust is computed  
     155         ! from a steady state assumption. Parameters are very uncertain and  
     156         ! are estimated from the literature quoted in Raiswell et al. (2011)  
     157         ! -------------------------------------------------------------------  
     158         zwdust = 0.03 * rday / ( wdust * 55.85 ) / ( 250. * rday ) 
    134159         DO jk = 2, jpkm1 
    135             zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540. ) 
     160            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / (250. * wdust) ) 
    136161            zpdep   (:,:,jk) = zirondep(:,:,jk) * 0.023 
    137162         END DO 
    138          !                                              ! Iron solubilization of particles in the water column 
     163         ! Solubilization of particles in the water column (Si, P, Fe) 
    139164         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
    140165         DO jk = 1, jpkm1 
     
    156181      
    157182      ! Add the external input of nutrients from river 
    158       ! ---------------------------------------------------------- 
     183      ! ---------------------------------------------- 
    159184      IF( ln_river ) THEN 
    160185         DO jj = 1, jpj 
     
    171196            ENDDO 
    172197         ENDDO 
     198         ! When prognostic ligands are activated, ligands are supplied  
     199         ! to the ocean by rivers. We assume that the amount of ligands 
     200         ! is equal to that of iron (iron is completely complexed) 
     201         ! ------------------------------------------------------------ 
    173202         IF (ln_ligand) THEN 
    174203            DO jj = 1, jpj 
     
    180209            ENDDO 
    181210         ENDIF 
     211         ! PISCES-QUOTA part 
    182212         IF( ln_p5z ) THEN 
    183213            DO jj = 1, jpj 
     
    200230 
    201231      ! Add the external input of iron from hydrothermal vents 
    202       ! ------------------------------------------------------ 
     232      ! Please refer to Tagliabue et al. (2010) for more information 
     233      ! ------------------------------------------------------------ 
    203234      IF( ln_hydrofe ) THEN 
    204235            tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     
    211242      ENDIF 
    212243 
    213       ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 
     244      ! OA: Warning, the following part is necessary to avoid CFL problems  
     245      ! above the sediments. Vertical sinking speed is limited using the  
     246      ! typical CFL criterion 
    214247      ! -------------------------------------------------------------------- 
    215248      DO jj = 1, jpj 
     
    222255      END DO 
    223256      ! 
     257      ! No sediment module activated 
    224258      IF( .NOT.lk_sed ) THEN 
    225259! 
     
    233267         ENDIF 
    234268 
    235          ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
    236          ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
     269         ! Computation of the sediment denitrification proportion: The metamodel  
     270         ! from Middleburg (2006) is used 
     271         ! Computation of the fraction of organic matter that is permanently  
     272         ! buried from Dunne's model (2007) 
    237273         ! ------------------------------------------------------- 
    238274         DO jj = 1, jpj 
     
    259295      ENDIF 
    260296 
    261       ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 
    262       ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    263       ! ------------------------------------------------------ 
     297      ! Fraction of dSi that is remineralized in the sediments. This is  
     298      ! set so that the burial in sediments equals the total input of Si 
     299      ! by rivers and dust (sedsilfrac) 
     300      ! ---------------------------------------------------------------- 
    264301      IF( .NOT.lk_sed )  zrivsil = 1._wp - sedsilfrac 
    265302 
     303      ! Loss of bSi and CaCO3 to the sediments 
    266304      DO jj = 1, jpj 
    267305         DO ji = 1, jpi 
     
    278316      ! 
    279317      IF( .NOT.lk_sed ) THEN 
     318         ! Dissolution of CaCO3 and bSi in the sediments. This is  
     319         ! instantaneous since here sediments are not explicitly  
     320         ! modeled. The amount of CaCO3 that dissolves in the sediments 
     321         ! is computed using a metamodel constructed from Archer (1996) 
     322         ! ------------------------------------------------------------ 
    280323         DO jj = 1, jpj 
    281324            DO ji = 1, jpi 
     
    298341      ENDIF 
    299342      ! 
     343      ! Loss of particulate organic carbon and Fe to the sediments 
    300344      DO jj = 1, jpj 
    301345         DO ji = 1, jpi 
     
    311355      END DO 
    312356      ! 
     357      ! Loss of particulate organic N and P to the sediments (p5z) 
    313358      IF( ln_p5z ) THEN 
    314359         DO jj = 1, jpj 
     
    327372 
    328373      IF( .NOT.lk_sed ) THEN 
     374         ! Degradation of organic matter in the sediments. The metamodel of  
     375         ! Middleburg (2006) is used here to mimic the diagenetic reactions.  
    329376         ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 
    330377         ! denitrification in the sediments. Not very clever, but simpliest option. 
     378         ! ------------------------------------------------------------------------ 
    331379         DO jj = 1, jpj 
    332380            DO ji = 1, jpi 
     
    360408 
    361409 
    362       ! Nitrogen fixation process 
    363       ! Small source iron from particulate inorganic iron 
    364       !----------------------------------- 
     410      ! Nitrogen fixation process : light limitation of diazotrophy 
     411      ! Small source of iron from particulate inorganic iron (photochemistry) 
     412      !---------------------------------------------------------------------- 
    365413      DO jk = 1, jpkm1 
    366414         zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) )  
    367415         zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 
    368416      ENDDO 
     417 
     418      ! Diazotrophy (nitrogen fixation) is modeled according to an empirical 
     419      ! formulation. This is described in Aumont et al. (2015). Limitation  
     420      ! by P and Fe is computed. Inhibition by high N concentrations is imposed. 
     421      ! Diazotrophy sensitivity to temperature is parameterized as in  
     422      ! Ye et al. (2012)   
     423      ! ------------------------------------------------------------------------ 
    369424      IF( ln_p4z ) THEN 
     425         ! PISCES part 
    370426         DO jk = 1, jpkm1 
    371427            DO jj = 1, jpj 
    372428               DO ji = 1, jpi 
    373                   !                      ! Potential nitrogen fixation dependant on temperature and iron 
     429                  ! Potential nitrogen fixation dependant on temperature and iron 
    374430                  ztemp = tsn(ji,jj,jk,jp_tem) 
    375431                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
    376                   !       Potential nitrogen fixation dependant on temperature and iron 
    377432                  xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
    378433                  xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
     
    388443         END DO 
    389444      ELSE       ! p5z 
     445         ! PISCES-QUOTA part 
    390446         DO jk = 1, jpkm1 
    391447            DO jj = 1, jpj 
    392448               DO ji = 1, jpi 
    393                   !                      ! Potential nitrogen fixation dependant on temperature and iron 
     449                  ! Potential nitrogen fixation dependant on temperature and iron 
    394450                  ztemp = tsn(ji,jj,jk,jp_tem) 
    395451                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
    396                   !       Potential nitrogen fixation dependant on temperature and iron 
    397452                  xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
    398453                  xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
     
    410465      ENDIF 
    411466 
    412       ! Nitrogen change due to nitrogen fixation 
    413       ! ---------------------------------------- 
     467      ! Update of the TRA arrays due to nitrogen fixation 
     468      ! ------------------------------------------------- 
    414469      IF( ln_p4z ) THEN 
     470         ! PISCES part 
    415471         DO jk = 1, jpkm1 
    416472            DO jj = 1, jpj 
     
    428484                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
    429485                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
    430                   tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
    431                   &                     * 0.001 * trb(ji,jj,jk,jpdoc) * xstep 
    432486              END DO 
    433487            END DO  
    434488         END DO 
    435489      ELSE    ! p5z 
     490         ! PISCES-QUOTA part 
    436491         DO jk = 1, jpkm1 
    437492            DO jj = 1, jpj 
     
    475530               CALL iom_put( "INTNFIX" , zwork )  
    476531            ENDIF 
    477             IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) 
    478             IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * zfact ) 
    479             IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * zfact ) 
    480             IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) 
     532            IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) ! Permanent burial of CaCO3 in sediments 
     533            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * zfact ) ! Permanent burial of bSi in sediments 
     534            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * zfact ) ! Permanent burial of OC in sediments 
     535            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * zfact * rno3 ) ! Denitrification in the sediments 
    481536         ENDIF 
    482537      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsink.F90

    r10425 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p4zsink  *** 
    4    !! TOP :  PISCES  vertical flux of particulate matter due to gravitational sinking 
     4   !! TOP :  PISCES  vertical flux of particulate matter due to  
     5   !!        gravitational sinking 
     6   !!        This module is the same for both PISCES and PISCES-QUOTA 
    57   !!====================================================================== 
    68   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    810   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Change aggregation formula 
    911   !!             3.5  !  2012-07  (O. Aumont) Introduce potential time-splitting 
     12   !!             4.0  !  2019     (O. Aumont) an external subroutine is called 
     13   !!                                          to compute the impact of sinking 
    1014   !!---------------------------------------------------------------------- 
    1115   !!   p4z_sink       :  Compute vertical flux of particulate matter due to gravitational sinking 
     
    2529 
    2630   PUBLIC   p4z_sink         ! called in p4zbio.F90 
    27    PUBLIC   p4z_sink_init    ! called in trcsms_pisces.F90 
    28    PUBLIC   p4z_sink_alloc 
     31   PUBLIC   p4z_sink_init    ! called in trcini_pisces.F90 
     32   PUBLIC   p4z_sink_alloc   ! called in trcini_pisces.F90 
    2933 
    3034   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinking, sinking2  !: POC sinking fluxes  
    3135   !                                                          !  (different meanings depending on the parameterization) 
    32    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: POC sinking fluxes  
    33    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POC sinking fluxes  
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: PON sinking fluxes  
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POP sinking fluxes  
    3438   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkcal, sinksil   !: CaCO3 and BSi sinking fluxes 
    3539   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer            !: Small BFe sinking fluxes 
     
    4549CONTAINS 
    4650 
    47    !!---------------------------------------------------------------------- 
    48    !!   'standard sinking parameterisation'                  ??? 
    49    !!---------------------------------------------------------------------- 
    50  
    5151   SUBROUTINE p4z_sink ( kt, knt ) 
    5252      !!--------------------------------------------------------------------- 
     
    5454      !! 
    5555      !! ** Purpose :   Compute vertical flux of particulate matter due to  
    56       !!                gravitational sinking 
    57       !! 
    58       !! ** Method  : - ??? 
     56      !!                gravitational sinking.  
     57      !! 
     58      !! ** Method  : - An external advection subroutine is called to compute 
     59      !!                the impact of sinking on the particles. The tracers 
     60      !!                concentrations are updated in this subroutine which 
     61      !!                is mandatory to deal with negative concentrations 
    5962      !!--------------------------------------------------------------------- 
    6063      INTEGER, INTENT(in) :: kt, knt 
     
    7578      consgoc(:,:,:) = 0. 
    7679 
    77       ! 
    78       !    Sinking speeds of detritus is increased with depth as shown 
    79       !    by data and from the coagulation theory 
    80       !    ----------------------------------------------------------- 
     80      ! Sinking speeds of big detritus is increased with depth as shown 
     81      ! by data and from the coagulation theory. This is controled by 
     82      ! wsbio2max and wsbio2scale. If wsbio2max is set to wsbio2, then 
     83      ! sinking speed is constant with depth. 
     84      ! CaCO3 and bSi are supposed to sink at the big particles speed  
     85      ! due to their high density 
     86      ! --------------------------------------------------------------- 
    8187      DO jk = 1, jpkm1 
    8288         DO jj = 1, jpj 
     
    8995      END DO 
    9096 
    91       ! limit the values of the sinking speeds to avoid numerical instabilities   
     97      ! Sinking speed of the small particles is constant 
    9298      wsbio3(:,:,:) = wsbio 
    9399 
    94       ! 
    95       !  Initializa to zero all the sinking arrays  
    96       !   ----------------------------------------- 
     100      ! Initialize to zero all the sinking arrays  
     101      ! ----------------------------------------- 
    97102      sinking (:,:,:) = 0.e0 
    98103      sinking2(:,:,:) = 0.e0 
     
    102107      sinkfer2(:,:,:) = 0.e0 
    103108 
    104       !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    105       !   ----------------------------------------------------- 
     109      ! Compute the sedimentation term using trc_sink for all the sinking particles 
     110      ! --------------------------------------------------------------------------- 
    106111      CALL trc_sink( kt, wsbio3, sinking , jppoc, rfact2 ) 
    107112      CALL trc_sink( kt, wsbio3, sinkfer , jpsfe, rfact2 ) 
     
    111116      CALL trc_sink( kt, wsbio4, sinkcal , jpcal, rfact2 ) 
    112117 
     118      ! PISCES-QUOTA part 
    113119      IF( ln_p5z ) THEN 
    114120         sinkingn (:,:,:) = 0.e0 
     
    117123         sinking2p(:,:,:) = 0.e0 
    118124 
    119          !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    120          !   ----------------------------------------------------- 
     125         ! Compute the sedimentation term using trc_sink for all the sinking particles 
     126         ! --------------------------------------------------------------------------- 
    121127         CALL trc_sink( kt, wsbio3, sinkingn , jppon, rfact2 ) 
    122128         CALL trc_sink( kt, wsbio3, sinkingp , jppop, rfact2 ) 
     
    186192      !!---------------------------------------------------------------------- 
    187193      !!                  ***  ROUTINE p4z_sink_init  *** 
     194      !! 
     195      !! ** Purpose :   Initialization of sinking parameters 
     196      !! 
     197      !! ** Method  :    
     198      !! 
     199      !! ** input   :    
    188200      !!---------------------------------------------------------------------- 
    189201      INTEGER :: jk 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsms.F90

    r11536 r12537  
    3030   PRIVATE 
    3131 
    32    PUBLIC   p4z_sms_init   ! called in p4zsms.F90 
    33    PUBLIC   p4z_sms        ! called in p4zsms.F90 
     32   PUBLIC   p4z_sms_init   ! called in trcini_pisces.F90 
     33   PUBLIC   p4z_sms        ! called in trcsms_pisces.F90 
    3434 
    3535   INTEGER ::    numco2, numnut, numnit      ! logical unit for co2 budget 
    36    REAL(wp) ::   alkbudget, no3budget, silbudget, ferbudget, po4budget 
     36   REAL(wp) ::   alkbudget, no3budget, silbudget, ferbudget, po4budget ! total budget of the different conservative elements 
    3737   REAL(wp) ::   xfact1, xfact2, xfact3 
    3838 
     
    5353      !!              routines of PISCES bio-model 
    5454      !! 
    55       !! ** Method  : - at each new day ... 
    56       !!              - several calls of bio and sed ??? 
    57       !!              - ... 
     55      !! ** Method  : - calls the various SMS subroutines 
     56      !!              - calls the sediment module (if ln_sediment)   
     57      !!              - several calls of bio and sed (possible time-splitting) 
     58      !!              - handles the potential negative concentrations (xnegtr) 
    5859      !!--------------------------------------------------------------------- 
    5960      ! 
     
    7273        ! 
    7374        IF( .NOT. ln_rsttr ) THEN 
    74             CALL p4z_che                              ! initialize the chemical constants 
     75            CALL p4z_che            ! initialize the chemical constants 
    7576            CALL ahini_for_at(hi)   !  set PH at kt=nit000 
    7677            t_oce_co2_flx_cum = 0._wp 
     
    110111      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    111112         ! 
    112          CALL p4z_bio( kt, jnt )   ! Biology 
    113          CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
     113         CALL p4z_bio( kt, jnt )   ! Biological SMS 
     114         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation and dissolution 
    114115         CALL p4z_sed( kt, jnt )   ! Surface and Bottom boundary conditions 
    115          CALL p4z_flx( kt, jnt )   ! Compute surface fluxes 
    116          ! 
     116         CALL p4z_flx( kt, jnt )   ! Compute surface air-sea fluxes 
     117         ! 
     118         ! Handling of the negative concentrations 
     119         ! The biological SMS may generate negative concentrations 
     120         ! Trends are tested at each grid cell. If a negative concentrations  
     121         ! is created at a grid cell, all the sources and sinks at that grid  
     122         ! cell are scale to avoid that negative concentration. This approach  
     123         ! is quite simplistic but it conserves mass. 
     124         ! ------------------------------------------------------------------ 
    117125         xnegtr(:,:,:) = 1.e0 
    118126         DO jn = jp_pcs0, jp_pcs1 
     
    130138         !                                ! where at least 1 tracer concentration becomes negative 
    131139         !                                !  
     140         ! Concentrations are updated 
    132141         DO jn = jp_pcs0, jp_pcs1 
    133142           trb(:,:,:,jn) = trb(:,:,:,jn) + xnegtr(:,:,:) * tra(:,:,:,jn) 
    134143         END DO 
    135144        ! 
     145        ! Trends are are reset to 0 
    136146         DO jn = jp_pcs0, jp_pcs1 
    137147            tra(:,:,:,jn) = 0._wp 
     
    153163#endif 
    154164      ! 
     165      ! If ln_sediment is set to .true. then the sediment module is called 
    155166      IF( ln_sediment ) THEN  
    156167         ! 
     
    181192      !!                     ***  p4z_sms_init  ***   
    182193      !! 
    183       !! ** Purpose :   read PISCES namelist 
    184       !! 
    185       !! ** input   :   file 'namelist.trc.s' containing the following 
    186       !!             namelist: natext, natbio, natsms 
     194      !! ** Purpose :   read the general PISCES namelist 
     195      !! 
     196      !! ** input   :   file 'namelist_pisces' containing the following 
     197      !!                namelist: nampisbio, nampisdmp, nampismass  
    187198      !!---------------------------------------------------------------------- 
    188199      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    268279      !!                   ***  ROUTINE p4z_rst  *** 
    269280      !! 
    270       !!  ** Purpose : Read or write variables in restart file: 
     281      !!  ** Purpose : Read or write specific PISCES variables in restart file: 
    271282      !! 
    272283      !!  WRITE(READ) mode: 
     
    280291      IF( TRIM(cdrw) == 'READ' ) THEN 
    281292         ! 
     293         ! Read the specific variable of PISCES 
    282294         IF(lwp) WRITE(numout,*) 
    283295         IF(lwp) WRITE(numout,*) ' p4z_rst : Read specific variables from pisces model ' 
    284296         IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    285297         !  
     298         ! Read the pH. If not in the restart file, then it is initialized from 
     299         ! the initial conditions 
    286300         IF( iom_varid( numrtr, 'PH', ldstop = .FALSE. ) > 0 ) THEN 
    287301            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  ) 
     
    290304            CALL ahini_for_at(hi) 
    291305         ENDIF 
     306 
     307         ! Read the Si half saturation constant and the maximum Silica concentration 
    292308         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
    293309         IF( iom_varid( numrtr, 'Silicamax', ldstop = .FALSE. ) > 0 ) THEN 
     
    296312            xksimax(:,:) = xksi(:,:) 
    297313         ENDIF 
    298          ! 
     314 
     315         ! Read the cumulative total flux. If not in the restart file, it is set to 0           
    299316         IF( iom_varid( numrtr, 'tcflxcum', ldstop = .FALSE. ) > 0 ) THEN  ! cumulative total flux of carbon 
    300317            CALL iom_get( numrtr, 'tcflxcum' , t_oce_co2_flx_cum  ) 
     
    303320         ENDIF 
    304321         ! 
     322         ! PISCES-QUOTA specific part 
    305323         IF( ln_p5z ) THEN 
     324            ! Read the size of the different phytoplankton groups 
     325            ! If not in the restart file, they are set to 1 
    306326            IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
    307327               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:)  ) 
     
    316336        ! 
    317337      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
     338         ! write the specific variables of PISCES 
    318339         IF( kt == nitrst ) THEN 
    319340            IF(lwp) WRITE(numout,*) 
     
    321342            IF(lwp) WRITE(numout,*) '~~~~~~~' 
    322343         ENDIF 
    323          CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) ) 
    324          CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) ) 
    325          CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
    326          CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
     344         CALL iom_rstput( kt, nitrst, numrtw, 'PH', hi(:,:,:) )           ! pH 
     345         CALL iom_rstput( kt, nitrst, numrtw, 'Silicalim', xksi(:,:) )    ! Si 1/2 saturation constant 
     346         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) ! Si max concentration 
     347         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 
    327348         IF( ln_p5z ) THEN 
    328             CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) ) 
    329             CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) ) 
    330             CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) 
     349            CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sizep(:,:,:) )  ! Size of picophytoplankton 
     350            CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )  ! Size of nanophytoplankton 
     351            CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )  ! Size of diatoms 
    331352         ENDIF 
    332353      ENDIF 
     
    339360      !!                    ***  p4z_dmp  *** 
    340361      !! 
    341       !! ** purpose  : Relaxation of some tracers 
     362      !! ** purpose  : Relaxation of the total budget of some elements 
     363      !!               This routine avoids the model to drift far from the  
     364      !!               observed content in various elements 
     365      !!               Elements that may be relaxed : Alk, P, N, Si 
    342366      !!---------------------------------------------------------------------- 
    343367      ! 
     
    345369      ! 
    346370      REAL(wp) ::  alkmean = 2426.     ! mean value of alkalinity ( Glodap ; for Goyet 2391. ) 
    347       REAL(wp) ::  po4mean = 2.165     ! mean value of phosphates 
     371      REAL(wp) ::  po4mean = 2.165     ! mean value of phosphate 
    348372      REAL(wp) ::  no3mean = 30.90     ! mean value of nitrate 
    349373      REAL(wp) ::  silmean = 91.51     ! mean value of silicate 
     
    368392            zsilsumn = glob_sum( 'p4zsms', trn(:,:,:,jpsil) * cvol(:,:,:)  ) * zarea 
    369393  
     394            ! Correct the trn mean content of alkalinity 
    370395            IF(lwp) WRITE(numout,*) '       TALKN mean : ', zalksumn 
    371396            trn(:,:,:,jptal) = trn(:,:,:,jptal) * alkmean / zalksumn 
    372397 
     398            ! Correct the trn mean content of PO4 
    373399            IF(lwp) WRITE(numout,*) '       PO4N  mean : ', zpo4sumn 
    374400            trn(:,:,:,jppo4) = trn(:,:,:,jppo4) * po4mean / zpo4sumn 
    375401 
     402            ! Correct the trn mean content of NO3 
    376403            IF(lwp) WRITE(numout,*) '       NO3N  mean : ', zno3sumn 
    377404            trn(:,:,:,jpno3) = trn(:,:,:,jpno3) * no3mean / zno3sumn 
    378405 
     406            ! Correct the trn mean content of SiO3 
    379407            IF(lwp) WRITE(numout,*) '       SiO3N mean : ', zsilsumn 
    380408            trn(:,:,:,jpsil) = MIN( 400.e-6,trn(:,:,:,jpsil) * silmean / zsilsumn ) 
     
    388416  
    389417               IF(lwp) WRITE(numout,*) ' ' 
     418               ! Correct the trb mean content of alkalinity 
    390419               IF(lwp) WRITE(numout,*) '       TALKB mean : ', zalksumb 
    391420               trb(:,:,:,jptal) = trb(:,:,:,jptal) * alkmean / zalksumb 
    392421 
     422               ! Correct the trb mean content of PO4 
    393423               IF(lwp) WRITE(numout,*) '       PO4B  mean : ', zpo4sumb 
    394424               trb(:,:,:,jppo4) = trb(:,:,:,jppo4) * po4mean / zpo4sumb 
    395425 
     426               ! Correct the trb mean content of NO3 
    396427               IF(lwp) WRITE(numout,*) '       NO3B  mean : ', zno3sumb 
    397428               trb(:,:,:,jpno3) = trb(:,:,:,jpno3) * no3mean / zno3sumb 
    398429 
     430               ! Correct the trb mean content of SiO3 
    399431               IF(lwp) WRITE(numout,*) '       SiO3B mean : ', zsilsumb 
    400432               trb(:,:,:,jpsil) = MIN( 400.e-6,trb(:,:,:,jpsil) * silmean / zsilsumb ) 
     
    435467      ENDIF 
    436468 
     469      ! Compute the budget of NO3 
    437470      IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    438          !   Compute the budget of NO3, ALK, Si, Fer 
    439471         IF( ln_p4z ) THEN 
    440472            zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)                      & 
     
    454486      ENDIF 
    455487      ! 
     488      ! Compute the budget of PO4 
    456489      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    457490         IF( ln_p4z ) THEN 
     
    472505      ENDIF 
    473506      ! 
     507      ! Compute the budget of SiO3 
    474508      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    475509         zwork(:,:,:) =  trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)  
     
    488522      ENDIF 
    489523      ! 
     524      ! Compute the budget of Iron 
    490525      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    491526         zwork(:,:,:) =   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe)   & 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90

    r12349 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p5zlim  *** 
    4    !! TOP :   PISCES with variable stoichiometry  
     4   !! TOP :   PISCES-QUOTA : Computes the various nutrient limitation terms 
     5   !!                        of phytoplankton 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004     (O. Aumont) Original code 
     
    1415   USE oce_trc         ! Shared ocean-passive tracers variables 
    1516   USE trc             ! Tracers defined 
    16    USE p4zlim 
     17   USE p4zlim          ! Nutrient limitation  
    1718   USE sms_pisces      ! PISCES variables 
    1819   USE iom             !  I/O manager 
     
    2122   PRIVATE 
    2223 
    23    PUBLIC p5z_lim     
    24    PUBLIC p5z_lim_init     
    25    PUBLIC p5z_lim_alloc 
     24   PUBLIC p5z_lim           ! called in p4zbio.F90   
     25   PUBLIC p5z_lim_init      ! called in trcsms_pisces.F90  
     26   PUBLIC p5z_lim_alloc     ! called in trcini_pisces.F90 
    2627 
    2728   !! * Shared module variables 
     
    7273 
    7374   !!* Phytoplankton nutrient limitation terms 
    74    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: ??? 
    75    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: ??? 
    76    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: ??? 
    77    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: ??? 
    78    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: ??? 
    79    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: ??? 
    80    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: ??? 
    81    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: ??? 
    82    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: ??? 
    83    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: ??? 
    84    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpics   !: ??? 
    85    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphys   !: ??? 
    86    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdias   !: ??? 
    87    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: ??? 
    88    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk 
    89    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk 
    90    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk 
    91  
    92    ! Coefficient for iron limitation 
     75   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicono3   !: Limitation of NO3 uptake by picophyto 
     76   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpiconh4   !: Limitation of NH4 uptake by picophyto 
     77   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicopo4   !: Limitation of PO4 uptake by picophyto 
     78   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanodop   !: Limitation of DOP uptake by nanophyto 
     79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: Limitation of DOP uptake by picophyto 
     80   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatdop   !: Limitation of DOP uptake by diatoms 
     81   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto 
     82   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicofer   !: Limitation of Fe uptake by picophyto 
     83   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: Limitation of Fe uptake by diatoms 
     84   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: Limitation of picophyto PP by nutrients 
     85   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpics   !: Limitation of picophyto PP by nutrients 
     86   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphys   !: Limitation of nanophyto PP by nutrients 
     87   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdias   !: Limitation of diatoms PP by nutrients 
     88   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpfe    !: Limitation of picophyto PP by Fe 
     89   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvnuptk    !: Maximum potential uptake rate of nanophyto 
     90   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvpuptk    !: Maximum potential uptake rate of picophyto 
     91   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   fvduptk    !: Maximum potential uptake rate of diatoms 
     92 
     93   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
    9394   REAL(wp) ::  xcoef1   = 0.00167  / 55.85 
    9495   REAL(wp) ::  xcoef2   = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 
     
    110111      !!                approach. The quota model is derived from theoretical 
    111112      !!                models proposed by Pahlow and Oschlies (2009) and  
    112       !!                Flynn (2001). Various adaptations from several publications 
    113       !!                by these authors have been also adopted.  
     113      !!                Flynn (2001). Various adaptations from several  
     114      !!                publications by these authors have been also adopted.  
    114115      !! 
    115116      !! ** Method  : Quota based approach. The quota model is derived from  
     
    145146            DO ji = 1, jpi 
    146147               !  
    147                ! Tuning of the iron concentration to a minimum level that is set to the detection limit 
    148                !------------------------------------- 
     148               ! Tuning of the iron concentration to a minimum level that 
     149               ! is set to the detection limit 
     150               ! -------------------------------------------------------- 
    149151               zno3    = trb(ji,jj,jk,jpno3) / 40.e-6 
    150152               zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 
     
    152154               trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 
    153155 
    154                ! Computation of the mean relative size of each community 
    155                ! ------------------------------------------------------- 
     156               ! Computation of the Chl/C ratio of each phytoplankton group 
     157               ! ---------------------------------------------------------- 
    156158               z1_trnphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    157159               z1_trnpic   = 1. / ( trb(ji,jj,jk,jppic) + rtrn ) 
     
    161163               zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia 
    162164 
    163                ! Computation of a variable Ks for iron on diatoms taking into account 
    164                ! that increasing biomass is made of generally bigger cells 
    165                !------------------------------------------------ 
     165               ! Computation of a variable Ks for the different phytoplankton 
     166               ! group as a function of their relative size. Allometry 
     167               ! from Edwards et al. (2012) 
     168               ! ------------------------------------------------------------ 
     169 
     170               ! diatoms 
    166171               zsized            = sized(ji,jj,jk)**0.81 
    167172               zconcdfe          = concdfer * zsized 
     
    170175               zconc0dpo4        = concdpo4 * zsized 
    171176 
     177               ! picophytoplankton 
    172178               zsizep            = sizep(ji,jj,jk)**0.81 
    173179               zconcpfe          = concpfer * zsizep 
     
    176182               zconc0ppo4        = concppo4 * zsizep 
    177183 
     184               ! nanophytoplankton 
    178185               zsizen            = sizen(ji,jj,jk)**0.81 
    179186               zconcnfe          = concnfer * zsizen 
     
    193200 
    194201               ! Computation of the optimal allocation parameters 
    195                ! Based on the different papers by Pahlow et al., and Smith et al. 
    196                ! ----------------------------------------------------------------- 
     202               ! Based on the different papers by Pahlow et al., and  
     203               ! Smith et al. 
     204               ! --------------------------------------------------- 
     205 
     206               ! Nanophytoplankton 
    197207               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4,    & 
    198208                 &         trb(ji,jj,jk,jpno3) / zconc0n) 
     
    202212               znutlim = biron(ji,jj,jk) / zconcnfe 
    203213               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     214 
     215               ! Picophytoplankton 
    204216               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4,    & 
    205217                 &         trb(ji,jj,jk,jpno3) / zconc0p) 
     
    209221               znutlim = biron(ji,jj,jk) / zconcpfe 
    210222               fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     223 
     224               ! Diatoms 
    211225               znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4,    & 
    212226                 &         trb(ji,jj,jk,jpno3) / zconc1d ) 
     
    216230               znutlim = biron(ji,jj,jk) / zconcdfe 
    217231               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    218                ! 
    219                ! Michaelis-Menten Limitation term for nutrients Small bacteria 
    220                ! ------------------------------------------------------------- 
     232 
     233               ! Michaelis-Menten Limitation term by nutrients of 
     234               ! heterotrophic bacteria 
     235               ! ------------------------------------------------- 
    221236               zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 
    222237               zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) 
     
    226241               zlim3    = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 
    227242               zlim4    = trb(ji,jj,jk,jpdoc) / ( xkdoc   + trb(ji,jj,jk,jpdoc) ) 
     243               ! Xlimbac is used for DOC solubilization whereas xlimbacl 
     244               ! is used for all the other bacterial-dependent terms 
     245               ! ------------------------------------------------------- 
    228246               xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 
    229247               xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 
    230                ! 
    231                ! Michaelis-Menten Limitation term for nutrients Small flagellates 
    232                ! ----------------------------------------------- 
     248                
     249               ! Michaelis-Menten Limitation term by nutrients: Nanophyto 
     250               ! -------------------------------------------------------- 
     251               ! 
     252               ! Limitation of N based nutrients uptake (NO3 and NH4) 
    233253               zfalim = (1.-fanano) / fanano 
    234254               xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) 
     
    236256               &                    * (1. - xnanonh4(ji,jj,jk)) 
    237257               ! 
     258               ! Limitation of P based nutrients (PO4 and DOP) 
    238259               zfalim = (1.-fananop) / fananop 
    239260               xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) 
     
    242263               xnanodop(ji,jj,jk) = 0. 
    243264               ! 
     265               ! Limitation of Fe uptake 
    244266               zfalim = (1.-fananof) / fananof 
    245267               xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 
    246268               ! 
     269               ! The minimum iron quota depends on the size of PSU, respiration 
     270               ! and the reduction of nitrate following the parameterization  
     271               ! proposed by Flynn and Hipkin (1999) 
    247272               zratiof   = trb(ji,jj,jk,jpnfe) * z1_trnphy 
    248273               zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 
     
    257282               &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk)  & 
    258283               &          / (zration + rtrn) 
    259                !  The value of the optimal quota in the formulation below 
    260                !  has been found by solving a non linear equation 
     284               ! The value of the optimal quota in the formulation below 
     285               ! has been found by solving a non linear equation 
    261286               zlim1f = max(0., ( 1.086 - xqnnmin(ji,jj,jk) )  & 
    262287               &          / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 
    263288               zlim3  = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 
     289               ! computation of the various limitation terms of nanophyto 
     290               ! growth and PP 
    264291               xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 
    265292               xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
    266293               xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 
    267294               xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 
    268                ! 
    269                ! Michaelis-Menten Limitation term for nutrients picophytoplankton 
    270                ! ---------------------------------------------------------------- 
     295 
     296               ! Michaelis-Menten Limitation term by nutrients: Picophyto 
     297               ! -------------------------------------------------------- 
     298               ! 
     299               ! Limitation of N based nutrients uptake (NO3 and NH4)  
    271300               zfalim = (1.-fapico) / fapico  
    272301               xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) 
     
    274303               &                    * (1. - xpiconh4(ji,jj,jk)) 
    275304               ! 
     305               ! Limitation of P based nutrients uptake (PO4 and DOP) 
    276306               zfalim = (1.-fapicop) / fapicop  
    277307               xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) 
     
    283313               xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 
    284314               ! 
     315               ! The minimum iron quota depends on the size of PSU, respiration 
     316               ! and the reduction of nitrate following the parameterization  
     317               ! proposed by Flynn and Hipkin (1999) 
    285318               zratiof   = trb(ji,jj,jk,jppfe) * z1_trnpic 
    286319               zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 
     
    295328               &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk)  & 
    296329               &          / (zration + rtrn) 
    297                !  The value of the optimal quota in the formulation below 
    298                !  has been found by solving a non linear equation 
     330               ! The value of the optimal quota in the formulation below 
     331               ! has been found by solving a non linear equation 
    299332               zlim1f   = max(0., (1.367 - xqnpmin(ji,jj,jk) )  & 
    300333               &          / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 
    301334               zlim3    = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 
     335 
     336               ! computation of the various limitation terms of picophyto 
     337               ! growth and PP 
    302338               xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 
    303339               xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 
    304340               xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 
    305341               xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 
    306                ! 
    307                !   Michaelis-Menten Limitation term for nutrients Diatoms 
    308                !   ------------------------------------------------------ 
     342 
     343               ! Michaelis-Menten Limitation term by nutrients : Diatoms 
     344               ! ------------------------------------------------------- 
     345               ! 
     346               ! Limitation of N based nutrients uptake (NO3 and NH4) 
    309347               zfalim = (1.-fadiat) / fadiat  
    310348               xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) 
     
    312350               &                    * (1. - xdiatnh4(ji,jj,jk)) 
    313351               ! 
     352               ! Limitation of P based nutrients uptake (PO4 and DOP) 
    314353               zfalim = (1.-fadiatp) / fadiatp 
    315354               xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) 
     
    318357               xdiatdop(ji,jj,jk) = 0. 
    319358               ! 
     359               ! Limitation of Fe uptake 
    320360               zfalim = (1.-fadiatf) / fadiatf 
    321361               xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 
    322362               ! 
     363               ! The minimum iron quota depends on the size of PSU, respiration 
     364               ! and the reduction of nitrate following the parameterization  
     365               ! proposed by Flynn and Hipkin (1999) 
    323366               zratiof   = trb(ji,jj,jk,jpdfe) * z1_trndia 
    324367               zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 
     
    333376               &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   & 
    334377               &          * xqndmax(ji,jj,jk) / (zration + rtrn) 
    335                !  The value of the optimal quota in the formulation below 
    336                !  has been found by solving a non linear equation 
     378               ! The value of the optimal quota in the formulation below 
     379               ! has been found by solving a non linear equation 
    337380               zlim1f   = max(0., (1.077 - xqndmin(ji,jj,jk) )    & 
    338381               &          / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) )   & 
     
    340383               zlim3    = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 
    341384               zlim4    = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 
     385               ! computation of the various limitation terms of diatoms 
     386               ! growth and PP 
    342387               xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 
    343388               xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 
     
    357402         DO jj = 1, jpj 
    358403            DO ji = 1, jpi 
    359                ! Size estimation of nanophytoplankton 
    360                ! ------------------------------------ 
     404               ! Size estimation of nanophytoplankton based on total biomass 
     405               ! Assumes that larger biomass implies addition of larger cells 
     406               ! ------------------------------------------------------------ 
    361407               zcoef = trb(ji,jj,jk,jpphy) - MIN(xsizephy, trb(ji,jj,jk,jpphy) ) 
    362408               sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 
     
    373419 
    374420 
    375                ! Size estimation of picophytoplankton 
    376                ! ------------------------------------ 
     421               ! Size estimation of picophytoplankton based on total biomass 
     422               ! Assumes that larger biomass implies addition of larger cells 
     423               ! ------------------------------------------------------------ 
    377424               zcoef = trb(ji,jj,jk,jppic) - MIN(xsizepic, trb(ji,jj,jk,jppic) ) 
    378425               sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) 
     
    389436               xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 
    390437 
    391                ! Size estimation of diatoms 
    392                ! -------------------------- 
     438               ! Size estimation of diatoms based on total biomass 
     439               ! Assumes that larger biomass implies addition of larger cells 
     440               ! ------------------------------------------------------------ 
    393441               zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 
    394442               sized(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
     
    412460 
    413461      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     462      ! This is a purely adhoc formulation described in Aumont et al. (2015) 
     463      ! This fraction depends on nutrient limitation, light, temperature 
    414464      ! -------------------------------------------------------------------- 
    415465      DO jk = 1, jpkm1 
     
    441491                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  ) 
    442492               nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
     493               ! 
     494               ! redox factor computed from NO3 levels 
     495               nitrfac2(ji,jj,jk) = MAX( 0.e0,       ( 1.E-6 - trb(ji,jj,jk,jpno3) )  & 
     496                  &                                / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 
     497               nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 
    443498            END DO 
    444499         END DO 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90

    r12524 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p5zmeso  *** 
    4    !! TOP :   PISCES Compute the sources/sinks for mesozooplankton 
     4   !! TOP :   PISCES-QUOTA Compute the sources/sinks for mesozooplankton 
    55   !!====================================================================== 
    66   !! History :   1.0  !  2002     (O. Aumont) Original code 
     
    99   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    1010   !!---------------------------------------------------------------------- 
    11    !!   p5z_meso       :   Compute the sources/sinks for mesozooplankton 
    12    !!   p5z_meso_init  :   Initialization of the parameters for mesozooplankton 
     11   !!   p5z_meso       : Compute the sources/sinks for mesozooplankton 
     12   !!   p5z_meso_init  : Initialization of the parameters for mesozooplankton 
     13   !!   p5z_meso_alloc : Allocate variables for mesozooplankton  
    1314   !!---------------------------------------------------------------------- 
    1415   USE oce_trc         !  shared variables between ocean and passive tracers 
     
    2324   PUBLIC   p5z_meso              ! called in p5zbio.F90 
    2425   PUBLIC   p5z_meso_init         ! called in trcsms_pisces.F90 
    25    PUBLIC   p5z_meso_alloc 
     26   PUBLIC   p5z_meso_alloc        ! called in trcini_pisces.F90 
    2627 
    2728   !! * Shared module variables 
     
    5354   LOGICAL,  PUBLIC ::  bmetexc2     !: Use of excess carbon for respiration 
    5455   LOGICAL , PUBLIC ::  ln_dvm_meso  !: Boolean to activate DVM of mesozooplankton 
    55    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig 
    56    INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig 
    57  
     56   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig  !: DVM of mesozooplankton : migration depth 
     57   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig    !: Vertical indice of the the migration depth 
    5858 
    5959   !!---------------------------------------------------------------------- 
     
    7070      !! 
    7171      !! ** Purpose :   Compute the sources/sinks for mesozooplankton 
    72       !! 
    73       !! ** Method  : - ??? 
     72      !!                This includes ingestion and assimilation, flux feeding 
     73      !!                and mortality. We use an active prey switching   
     74      !!                parameterization Morozov and Petrovskii (2013).  
     75      !!                All living compartments and mesozooplankton 
     76      !!                are potential preys of mesozooplankton as well as small 
     77      !!                sinking particles  
     78      !! 
    7479      !!--------------------------------------------------------------------- 
    7580      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
     81      ! 
    7682      INTEGER  :: ji, jj, jk, jkt 
    7783      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames 
     
    115121      ! 
    116122      ! Diurnal vertical migration of mesozooplankton 
     123      ! Computation of the migration depth 
    117124      ! --------------------------------------------- 
    118125      IF (ln_dvm_meso) CALL p5z_meso_depmig 
    119126 
     127      ! Use of excess carbon for metabolism 
    120128      zmetexcess = 0.0 
    121129      IF ( bmetexc2 ) zmetexcess = 1.0 
     
    127135               zfact     = xstep * tgfunc2(ji,jj,jk) * zcompam 
    128136 
    129                !   Michaelis-Menten mortality rates of mesozooplankton 
    130                !   --------------------------------------------------- 
     137               !  linear mortality of mesozooplankton 
     138               !  A michaelis menten modulation term is used to avoid extinction of  
     139               !  mesozooplankton at very low food concentrations 
     140               !  ----------------------------------------------------------------- 
    131141               zrespz   = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    132142               &          + 3. * nitrfac(ji,jj,jk) ) 
    133143 
    134                !   Zooplankton mortality. A square function has been selected with 
    135                !   no real reason except that it seems to be more stable and may mimic predation 
    136                !   --------------------------------------------------------------- 
     144               !  Zooplankton quadratic mortality. A square function has been selected with 
     145               !  to mimic predation and disease (density dependent mortality). It also tends 
     146               !  to stabilise the model 
     147               !  ------------------------------------------------------------------------- 
    137148               ztortz   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 
    138149 
     
    147158 
    148159               !   Mesozooplankton grazing 
    149                !   ------------------------ 
     160               ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     161               ! multiplied by their food preference 
     162               ! A threshold can be specified in the namelist (xthresh2). However, when food  
     163               ! concentration is close to this threshold, it is decreased to avoid the  
     164               ! accumulation of food in the mesozoopelagic domain 
     165               ! ------------------------------------------------------------------------------- 
    150166               zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc   & 
    151167               &           + xpref2m * zcompames  
     
    154170               zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk))  
    155171 
    156                !   An active switching parameterization is used here. 
    157                !   We don't use the KTW parameterization proposed by  
    158                !   Vallina et al. because it tends to produce too steady biomass 
    159                !   composition and the variance of Chl is too low as it grazes 
    160                !   too strongly on winning organisms. We use a generalized 
    161                !   switching parameterization proposed by Morozov and  
    162                !   Petrovskii (2013) 
    163                !   ------------------------------------------------------------   
     172               ! An active switching parameterization is used here. 
     173               ! We don't use the KTW parameterization proposed by  
     174               ! Vallina et al. because it tends to produce too steady biomass 
     175               ! composition and the variance of Chl is too low as it grazes 
     176               ! too strongly on winning organisms. We use a generalized 
     177               ! switching parameterization proposed by Morozov and  
     178               ! Petrovskii (2013) 
     179               ! ------------------------------------------------------------   
     180               ! The width of the selection window is increased when preys 
     181               ! have low abundance, .i.e. zooplankton become less specific  
     182               ! to avoid starvation. 
     183               ! ---------------------------------------------------------- 
    164184               zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
    165185               zsigma = 0.5 + 1.0 * zsigma 
     186               ! Nanophytoplankton and diatoms are the only preys considered 
     187               ! to be close enough to have potential interference 
     188               ! ----------------------------------------------------------- 
    166189               zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
    167190               ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) 
     
    194217               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    195218 
    196                !   Mesozooplankton flux feeding on GOC 
    197                !   ---------------------------------- 
     219               !  Mesozooplankton flux feeding on GOC and POC. The feeding pressure 
     220               ! is proportional to the flux 
     221               !  ------------------------------------------------------------------ 
    198222               zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    199223               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)  & 
     
    211235               zgraztotc  = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 
    212236 
    213                !   Compute the proportion of filter feeders 
    214                !   ----------------------------------------   
     237               ! Compute the proportion of filter feeders. It is assumed steady state. 
     238               ! ---------------------------------------------------------------------   
    215239               zproport  = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 
    216240 
     
    228252               zfracp    = zfracc * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    229253 
     254               ! Flux feeding is multiplied by the fractional biomass of flux feeders 
    230255               zgrazffep = zproport * zgrazffep   ;   zgrazffeg = zproport * zgrazffeg 
    231256               zgrazfffp = zproport * zgrazfffp   ;   zgrazfffg = zproport * zgrazfffg 
     
    241266               &            + zgrazffpp + zgrazffpg 
    242267 
    243  
    244268               ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 
    245269               zgrazing(ji,jj,jk) = zgraztotc 
     
    251275               zgrasratp  =  (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 
    252276 
    253                !   Growth efficiency is made a function of the quality  
    254                !   and the quantity of the preys 
    255                !   --------------------------------------------------- 
     277               ! Mesozooplankton efficiency.  
     278               ! We adopt a formulation proposed by Mitra et al. (2007) 
     279               ! The gross growth efficiency is controled by the most limiting nutrient. 
     280               ! Growth is also further decreased when the food quality is poor. This is currently 
     281               ! hard coded : it can be decreased by up to 50% (zepsherq) 
     282               ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and  
     283               ! Fulton, 2012) 
     284               ! ----------------------------------------------------------------------------------- 
    256285               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
    257286               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
     
    261290               !   Respiration of mesozooplankton 
    262291               !   Excess carbon in the food is used preferentially 
    263                !   ----------------  ------------------------------ 
     292               !   when bmetexc2 is set to .true. 
     293               !   ----------------------------------------------- 
    264294               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess  
    265295               zbasresb = MAX(0., zrespz - zexcess) 
     
    344374               zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    345375               zgrazcal = zgrazffeg * (1. - part2) * zfracal 
    346                !  calcite production 
    347                !  ------------------ 
     376               ! Calcite production 
     377               ! Calcite remineralization due to zooplankton activity 
     378               ! part2 of the ingested calcite is dissolving in the acidic gut 
     379               ! ------------------------------------------------------------- 
    348380               zprcaca = xfracal(ji,jj,jk) * zgraznc 
    349381               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     
    356388      END DO 
    357389 
     390      ! Computation of the effect of DVM by mesozooplankton 
     391      ! This part is only activated if ln_dvm_meso is set to true 
     392      ! The parameterization has been published in Gorgues et al. (2019). 
     393      ! ----------------------------------------------------------------- 
    358394      IF (ln_dvm_meso) THEN 
    359395         ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 
    360396         ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 
    361397         ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 
    362  
    363398         ALLOCATE( zstrn(jpi,jpj) ) 
    364399         zgramigrem(:,:)  = 0.0   ;   zgramigref(:,:) = 0.0 
     
    385420 
    386421 
     422        ! Compute the amount of materials that will go into vertical migration 
     423        ! This fraction is sumed over the euphotic zone and is removed from  
     424        ! the fluxes driven by mesozooplankton in the euphotic zone. 
     425        ! -------------------------------------------------------------------- 
    387426         DO jk = 1, jpk 
    388427            DO jj = 1, jpj 
    389428               DO ji = 1, jpi 
    390  
    391                   !   Compute the amount of materials that will go into vertical migration 
    392429                  zmigreltime = (1. - zstrn(ji,jj)) 
    393430                  IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 
     
    431468         END DO 
    432469 
     470         ! The inorganic and organic fluxes induced by migrating organisms are added at the  
     471         ! the migration depth (corresponding indice is set by kmig) 
     472         ! -------------------------------------------------------------------------------- 
    433473         DO jj = 1, jpj 
    434474            DO ji = 1, jpi 
     
    456496         DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 
    457497         DEALLOCATE( zstrn ) 
    458  
     498      ! End of the ln_dvm_meso part 
    459499      ENDIF 
    460500 
     501      !   Update the arrays TRA which contain the biological sources and sinks 
     502      !   This only concerns the variables which are affected by DVM (inorganic  
     503      !   nutrients, DOC agands, and particulate organic carbon).  
     504      !   --------------------------------------------------------------------- 
    461505      DO jk = 1, jpk 
    462506         DO jj = 1, jpj 
    463507            DO ji = 1, jpi 
    464                !   Update the arrays TRA which contain the biological sources and sinks 
    465508               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep(ji,jj,jk)  
    466509               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren(ji,jj,jk) 
     
    526569      !! ** Purpose :   Initialization of mesozooplankton parameters 
    527570      !! 
    528       !! ** Method  :   Read the nampismes namelist and check the parameters 
     571      !! ** Method  :   Read the namp5zmes namelist and check the parameters 
    529572      !!      called at the first timestep (nittrc000) 
    530573      !! 
    531       !! ** input   :   Namelist nampismes 
     574      !! ** input   :   Namelist namp5zmes 
    532575      !! 
    533576      !!---------------------------------------------------------------------- 
    534       INTEGER :: ios                 ! Local integer output status for namelist read 
     577      INTEGER :: ios    ! Local integer output status for namelist read 
    535578      !! 
    536579      NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 
     
    540583      !!---------------------------------------------------------------------- 
    541584      ! 
    542       REWIND( numnatp_ref )              ! Namelist nampismes in reference namelist : Pisces mesozooplankton 
     585      REWIND( numnatp_ref )              ! Namelist namp5zmes in reference namelist : Pisces mesozooplankton 
    543586      READ  ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 
    544 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in reference namelist' ) 
    545       ! 
    546       REWIND( numnatp_cfg )              ! Namelist nampismes in configuration namelist : Pisces mesozooplankton 
     587901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmes in reference namelist' ) 
     588      ! 
     589      REWIND( numnatp_cfg )              ! Namelist namp5zmes in configuration namelist : Pisces mesozooplankton 
    547590      READ  ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 
    548 902   IF( ios >  0 ) CALL ctl_nam ( ios , 'nampismes in configuration namelist' ) 
     591902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zmes in configuration namelist' ) 
    549592      IF(lwm) WRITE ( numonp, namp5zmes ) 
    550593      ! 
     
    628671      END DO 
    629672 
     673      ! Compute the difference between surface values and the mean values in the mesopelagic 
     674      ! domain 
     675      ! ------------------------------------------------------------------------------------ 
    630676      DO jj = 1, jpj 
    631677         DO ji = 1, jpi 
     
    634680         END DO 
    635681      END DO 
    636       ! 
     682 
    637683      ! Computation of the migration depth based on the parameterization of  
    638       ! 
     684      ! Bianchi et al. (2013) 
     685      ! ------------------------------------------------------------------- 
    639686      DO jj = 1, jpj 
    640687         DO ji = 1, jpi 
     
    648695      ! Computation of the corresponding jk indice  
    649696      ! ------------------------------------------ 
    650       !  
    651697      DO jk = 1, jpk-1 
    652698         DO jj = 1, jpj 
     
    665711      ! that it falls above the OMZ 
    666712      ! ----------------------------------------------------------------------- 
    667       ! 
    668713      DO ji =1, jpi 
    669714         DO jj = 1, jpj 
     
    685730   INTEGER FUNCTION p5z_meso_alloc() 
    686731      !!---------------------------------------------------------------------- 
    687       !!                     ***  ROUTINE p4z_meso_alloc  *** 
     732      !!                     ***  ROUTINE p5z_meso_alloc  *** 
    688733      !!---------------------------------------------------------------------- 
    689734      ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90

    r12349 r12537  
    9797      ENDIF 
    9898      ! 
     99      ! Use of excess carbon for metabolism 
    99100      zmetexcess = 0.0 
    100101      IF ( bmetexc ) zmetexcess = 1.0 
     
    109110               zproport  = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 
    110111               zproport2 = sizen(ji,jj,jk)**(-0.54) 
    111                !   Michaelis-Menten mortality rates of microzooplankton 
    112                !   ----------------------------------------------------- 
     112               !  linear mortality of mesozooplankton 
     113               !  A michaelis menten modulation term is used to avoid extinction of  
     114               !  microzooplankton at very low food concentrations. Mortality is  
     115               !  enhanced in low O2 waters 
     116               !  ----------------------------------------------------------------- 
    113117               zrespz = resrat * zfact * ( trb(ji,jj,jk,jpzoo) / ( xkmort + trb(ji,jj,jk,jpzoo) )  & 
    114118               &        + 3. * nitrfac(ji,jj,jk) ) 
    115119 
    116                !   Zooplankton mortality. A square function has been selected with 
    117                !   no real reason except that it seems to be more stable and may mimic predation. 
    118                !   ------------------------------------------------------------------------------ 
     120               !  Zooplankton quadratic mortality. A square function has been selected with 
     121               !  to mimic predation and disease (density dependent mortality). It also tends 
     122               !  to stabilise the model 
     123               !  ------------------------------------------------------------------------- 
    119124               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    120125 
    121126               !   Computation of the abundance of the preys 
    122127               !   A threshold can be specified in the namelist 
    123                !   -------------------------------------------- 
     128               !   Nanophyto and diatoms have a specific treatment with  
     129               !   teir preference decreasing with size. 
     130               !   -------------------------------------------------------- 
    124131               zcompadi  = zproport * MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ) 
    125132               zcompaph  = zproport2 * MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
     
    128135               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
    129136                
    130                !   Microzooplankton grazing 
    131                !   ------------------------ 
     137               ! Microzooplankton grazing 
     138               ! The total amount of food is the sum of all preys accessible to mesozooplankton  
     139               ! multiplied by their food preference 
     140               ! A threshold can be specified in the namelist (xthresh). However, when food  
     141               ! concentration is close to this threshold, it is decreased to avoid the  
     142               ! accumulation of food in the mesozoopelagic domain 
     143               ! ------------------------------------------------------------------------------- 
    132144               zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi   & 
    133145               &           + xprefz * zcompaz + xprefp * zcompapi 
     
    136148               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk))  
    137149 
    138                !   An active switching parameterization is used here. 
    139                !   We don't use the KTW parameterization proposed by  
    140                !   Vallina et al. because it tends to produce to steady biomass 
    141                !   composition and the variance of Chl is too low as it grazes 
    142                !   too strongly on winning organisms. Thus, instead of a square 
    143                !   a 1.5 power value is used which decreases the pressure on the 
    144                !   most abundant species 
    145                !   ------------------------------------------------------------   
     150               ! An active switching parameterization is used here. 
     151               ! We don't use the KTW parameterization proposed by  
     152               ! Vallina et al. because it tends to produce too steady biomass 
     153               ! composition and the variance of Chl is too low as it grazes 
     154               ! too strongly on winning organisms. We use a generalized 
     155               ! switching parameterization proposed by Morozov and  
     156               ! Petrovskii (2013) 
     157               ! ------------------------------------------------------------   
     158               ! The width of the selection window is increased when preys 
     159               ! have low abundance, .i.e. zooplankton become less specific  
     160               ! to avoid starvation. 
     161               ! ---------------------------------------------------------- 
    146162               zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
    147163               zsigma = 0.5 + 1.0*zsigma 
     
    189205               zgrazing(ji,jj,jk) = zgraztotc 
    190206 
    191                !   Stoichiometruc ratios of the food ingested by zooplanton  
    192                !   -------------------------------------------------------- 
     207               ! Stoichiometruc ratios of the food ingested by zooplanton  
     208               ! -------------------------------------------------------- 
    193209               zgrasratf =  (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 
    194210               zgrasratn =  (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 
    195211               zgrasratp =  (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 
    196212 
    197                !   Growth efficiency is made a function of the quality  
    198                !   and the quantity of the preys 
    199                !   --------------------------------------------------- 
     213               ! Mesozooplankton efficiency.  
     214               ! We adopt a formulation proposed by Mitra et al. (2007) 
     215               ! The gross growth efficiency is controled by the most limiting nutrient. 
     216               ! Growth is also further decreased when the food quality is poor. This is currently 
     217               ! hard coded : it can be decreased by up to 50% (zepsherq) 
     218               ! GGE can also be decreased when food quantity is high, zepsherf (Montagnes and  
     219               ! Fulton, 2012) 
     220               ! ----------------------------------------------------------------------------------- 
    200221               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
    201222               zbeta     = MAX( 0., (epsher - epshermin) ) 
     
    204225               zepsherv  = zepsherf * zepshert * zepsherq 
    205226 
    206                !   Respiration of microzooplankton 
    207                !   Excess carbon in the food is used preferentially 
    208                !   ------------------------------------------------ 
     227               ! Respiration of microzooplankton 
     228               ! Excess carbon in the food is used preferentially 
     229               ! ------------------------------------------------ 
    209230               zexcess  = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 
    210231               zbasresb = MAX(0., zrespz - zexcess) 
     
    212233               zrespirc = srespir * zepsherv * zgraztotc + zbasresb 
    213234                
    214                !   When excess carbon is used, the other elements in excess 
    215                !   are also used proportionally to their abundance 
    216                !   -------------------------------------------------------- 
     235               ! When excess carbon is used, the other elements in excess 
     236               ! are also used proportionally to their abundance 
     237               ! -------------------------------------------------------- 
    217238               zexcess  = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 
    218239               zbasresn = zbasresi * zexcess * zgrasratn  
     
    222243               zbasresf = zbasresi * zexcess * zgrasratf 
    223244 
    224                !   Voiding of the excessive elements as DOM 
    225                !   ---------------------------------------- 
     245               ! Voiding of the excessive elements as DOM 
     246               ! ---------------------------------------- 
    226247               zgradoct   = (1. - unassc - zepsherv) * zgraztotc - zbasresi   
    227248               zgradont   = (1. - unassn) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 
     
    229250               zgrareft   = (1. - unassc) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 
    230251 
    231                !  Since only semilabile DOM is represented in PISCES 
    232                !  part of DOM is in fact labile and is then released 
    233                !  as dissolved inorganic compounds (ssigma) 
    234                !  -------------------------------------------------- 
     252               ! Since only semilabile DOM is represented in PISCES 
     253               ! part of DOM is in fact labile and is then released 
     254               ! as dissolved inorganic compounds (ssigma) 
     255               ! -------------------------------------------------- 
    235256               zgradoc =  zgradoct * ssigma 
    236257               zgradon =  zgradont * ssigma 
     
    241262               zgraref = zgrareft 
    242263 
    243                !   Defecation as a result of non assimilated products 
    244                !   -------------------------------------------------- 
     264               ! Defecation as a result of non assimilated products 
     265               ! -------------------------------------------------- 
    245266               zgrapoc   = zgraztotc * unassc 
    246267               zgrapon   = zgraztotn * unassn 
     
    248269               zgrapof   = zgraztotf * unassc 
    249270 
    250                !  Addition of respiration to the release of inorganic nutrients 
    251                !  ------------------------------------------------------------- 
     271               ! Addition of respiration to the release of inorganic nutrients 
     272               ! ------------------------------------------------------------- 
    252273               zgrarem = zgrarem + zbasresi + zrespirc 
    253274               zgraren = zgraren + zbasresn + zrespirc * no3rat3 
     
    255276               zgraref = zgraref + zbasresf + zrespirc * ferat3 
    256277 
    257                !   Update of the TRA arrays 
    258                !   ------------------------ 
     278               ! Update of the TRA arrays 
     279               ! ------------------------ 
    259280               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 
    260281               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 
     
    296317               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * ztortz  + zgrapof - zgrazpof 
    297318               ! 
    298                ! calcite production 
     319               ! Calcite production 
     320               ! Calcite remineralization due to zooplankton activity 
     321               ! part of the ingested calcite is dissolving in the acidic gut 
     322               ! ------------------------------------------------------------- 
    299323               zprcaca = xfracal(ji,jj,jk) * zgraznc 
    300324               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     
    345369      !! ** Purpose :   Initialization of microzooplankton parameters 
    346370      !! 
    347       !! ** Method  :   Read the nampiszoo namelist and check the parameters 
     371      !! ** Method  :   Read the namp5zzoo namelist and check the parameters 
    348372      !!                called at the first timestep (nittrc000) 
    349373      !! 
    350       !! ** input   :   Namelist nampiszoo 
     374      !! ** input   :   Namelist namp5zzoo 
    351375      !! 
    352376      !!---------------------------------------------------------------------- 
     
    359383      !!---------------------------------------------------------------------- 
    360384      ! 
    361       REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton 
     385      REWIND( numnatp_ref )              ! Namelist namp5zzoo in reference namelist : Pisces microzooplankton 
    362386      READ  ( numnatp_ref, namp5zzoo, IOSTAT = ios, ERR = 901) 
    363387901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zzoo in reference namelist' ) 
    364388      ! 
    365       REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 
     389      REWIND( numnatp_cfg )              ! Namelist namp5zzoo in configuration namelist : Pisces microzooplankton 
    366390      READ  ( numnatp_cfg, namp5zzoo, IOSTAT = ios, ERR = 902 ) 
    367391902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zzoo in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmort.F90

    r11536 r12537  
    22   !!====================================================================== 
    33   !!                         ***  MODULE p5zmort  *** 
    4    !! TOP :   PISCES Compute the mortality terms for phytoplankton 
     4   !! TOP :   PISCES-QUOTA Compute the mortality terms for phytoplankton 
    55   !!====================================================================== 
    66   !! History :   1.0  !  2002     (O. Aumont)  Original code 
     
    1414   USE trc             !  passive tracers common variables  
    1515   USE sms_pisces      !  PISCES Source Minus Sink variables 
    16    USE p4zlim 
    17    USE p5zlim          !  Phytoplankton limitation terms 
     16   USE p4zlim          !  Phytoplankton limitation terms (p4z) 
     17   USE p5zlim          !  Phytoplankton limitation terms (p5z) 
    1818   USE prtctl_trc      !  print control for debugging 
    1919 
     
    2121   PRIVATE 
    2222 
    23    PUBLIC   p5z_mort     
    24    PUBLIC   p5z_mort_init     
     23   PUBLIC   p5z_mort           ! Called from p4zbio.F90  
     24   PUBLIC   p5z_mort_init      ! Called from trcini_pisces.F90  
    2525 
    2626   !! * Shared module variables 
    27    REAL(wp), PUBLIC :: wchln    !: 
    28    REAL(wp), PUBLIC :: wchlp   !: 
    29    REAL(wp), PUBLIC :: wchld   !: 
    30    REAL(wp), PUBLIC :: wchldm  !: 
    31    REAL(wp), PUBLIC :: mpratn   !: 
    32    REAL(wp), PUBLIC :: mpratp  !: 
    33    REAL(wp), PUBLIC :: mpratd  !: 
     27   REAL(wp), PUBLIC :: wchln   !! Quadratic mortality rate of nanophytoplankton 
     28   REAL(wp), PUBLIC :: wchlp   !: Quadratic mortality rate of picophytoplankton 
     29   REAL(wp), PUBLIC :: wchld   !: Quadratic mortality rate of diatoms 
     30   REAL(wp), PUBLIC :: wchldm  !: Maximum quadratic mortality rate of diatoms 
     31   REAL(wp), PUBLIC :: mpratn  !: Linear mortality rate of nanophytoplankton 
     32   REAL(wp), PUBLIC :: mpratp  !: Linear mortality rate of picophytoplankton 
     33   REAL(wp), PUBLIC :: mpratd  !: Linear mortality rate of diatoms 
    3434 
    3535   !!---------------------------------------------------------------------- 
     
    4545      !!                     ***  ROUTINE p5z_mort  *** 
    4646      !! 
    47       !! ** Purpose :   Calls the different subroutine to initialize and compute 
     47      !! ** Purpose :   Calls the different subroutine to compute 
    4848      !!                the different phytoplankton mortality terms 
    4949      !! 
     
    8282            DO ji = 1, jpi 
    8383               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-9 ), 0.e0 ) 
    84                !   Squared mortality of Phyto similar to a sedimentation term during 
    85                !   blooms (Doney et al. 1996) 
    86                !   ----------------------------------------------------------------- 
     84               ! Quadratic mortality of nano due to aggregation during 
     85               ! blooms (Doney et al. 1996) 
     86               ! ----------------------------------------------------- 
    8787               zrespp = wchln * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jpphy) 
    8888 
    89                !   Phytoplankton linear mortality 
    90                !   ------------------------------ 
    91                ztortp = mpratn * xstep  * zcompaph 
     89               ! Phytoplankton linear mortality 
     90               ! A michaelis-menten like term is introduced to avoid  
     91               ! extinction of nanophyto in highly limited areas 
     92               ! ---------------------------------------------------- 
     93               ztortp = mpratn * xstep  * zcompaphi * trb(ji,jj,jk,jpphy) /  ( xkmort + trb(ji,jj,jk,jpphy) ) 
    9294               zmortp = zrespp + ztortp 
    9395 
    94                !   Update the arrays TRA which contains the biological sources and sinks 
     96               ! Update the arrays TRA which contains the biological sources and sinks 
    9597 
    9698               zfactn  = trb(ji,jj,jk,jpnph)/(trb(ji,jj,jk,jpphy)+rtrn) 
     
    103105               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zmortp * zfactch 
    104106               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zmortp * zfactfe 
     107               ! Production PIC particles due to mortality 
    105108               zprcaca = xfracal(ji,jj,jk) * zmortp 
    106                ! 
    107109               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    108110               ! 
     
    151153            DO ji = 1, jpi 
    152154               zcompaph = MAX( ( trb(ji,jj,jk,jppic) - 1e-9 ), 0.e0 ) 
    153                !  Squared mortality of Phyto similar to a sedimentation term during 
    154                !  blooms (Doney et al. 1996) 
    155                !  ----------------------------------------------------------------- 
     155 
     156               ! Quadratic mortality of pico due to aggregation during 
     157               ! blooms (Doney et al. 1996) 
     158               ! ----------------------------------------------------- 
    156159               zrespp = wchlp * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * trb(ji,jj,jk,jppic) 
    157160 
    158                !     Phytoplankton mortality  
    159                ztortp = mpratp * xstep  * zcompaph 
     161               ! Phytoplankton linear mortality 
     162               ! A michaelis-menten like term is introduced to avoid  
     163               ! extinction of picophyto in highly limited areas 
     164               ! ---------------------------------------------------- 
     165               ztortp = mpratp * xstep  * zcompaph * trb(ji,jj,jk,jppic) /  ( xkmort + trb(ji,jj,jk,jppic) ) 
    160166               zmortp = zrespp + ztortp 
    161167 
    162168               !   Update the arrays TRA which contains the biological sources and sinks 
    163  
    164169               zfactn = trb(ji,jj,jk,jpnpi)/(trb(ji,jj,jk,jppic)+rtrn) 
    165170               zfactp = trb(ji,jj,jk,jpppi)/(trb(ji,jj,jk,jppic)+rtrn) 
     
    225230               zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    226231 
    227                !  Phytoplankton linear mortality  
    228                !  ------------------------------ 
    229                ztortp2 = mpratd * xstep  * zcompadi 
     232               ! Phytoplankton linear mortality 
     233               ! A michaelis-menten like term is introduced to avoid  
     234               ! extinction of diatoms in highly limited areas 
     235               !  --------------------------------------------------- 
     236               ztortp2 = mpratd * xstep  * zcompadi * trb(ji,jj,jk,jpdia) /  ( xkmort + trb(ji,jj,jk,jpdia) ) 
    230237               zmortp2 = zrespp2 + ztortp2 
    231238 
     
    273280      !!                  ***  ROUTINE p5z_mort_init  *** 
    274281      !! 
    275       !! ** Purpose :   Initialization of phytoplankton parameters 
    276       !! 
    277       !! ** Method  :   Read the nampismort namelist and check the parameters 
     282      !! ** Purpose :   Initialization of phytoplankton mortality parameters 
     283      !! 
     284      !! ** Method  :   Read the namp5zmort namelist and check the parameters 
    278285      !!      called at the first timestep 
    279286      !! 
    280       !! ** input   :   Namelist nampismort 
     287      !! ** input   :   Namelist namp5zmort 
    281288      !! 
    282289      !!---------------------------------------------------------------------- 
    283       INTEGER :: ios                 ! Local integer output status for namelist read 
     290      INTEGER :: ios   ! Local integer output status for namelist read 
    284291      !! 
    285292      NAMELIST/namp5zmort/ wchln, wchlp, wchld, wchldm, mpratn, mpratp, mpratd 
    286293      !!---------------------------------------------------------------------- 
    287294 
    288       REWIND( numnatp_ref )              ! Namelist nampismort in reference namelist : Pisces phytoplankton 
     295      REWIND( numnatp_ref )              ! Namelist namp5zmort in reference namelist : Pisces phytoplankton 
    289296      READ  ( numnatp_ref, namp5zmort, IOSTAT = ios, ERR = 901) 
    290297901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zmort in reference namelist' ) 
    291298 
    292       REWIND( numnatp_cfg )              ! Namelist nampismort in configuration namelist : Pisces phytoplankton 
     299      REWIND( numnatp_cfg )              ! Namelist namp5zmort in configuration namelist : Pisces phytoplankton 
    293300      READ  ( numnatp_cfg, namp5zmort, IOSTAT = ios, ERR = 902 ) 
    294301902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zmort in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90

    r12496 r12537  
    238238      END DO 
    239239 
    240       ! Computation of the various production terms of nanophytoplankton  
     240      ! Computation of the various production and uptake terms of nanophytoplankton  
     241      ! Interactions between N and P are modeled according to the Chain Model  
     242      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 
     243      ! Droop kinetics. When the quota is approaching the maximum achievable 
     244      ! quota, uptake is downregulated according to a sigmoidal function  
     245      ! (power 2), as proposed by Flynn (2003) 
     246      ! --------------------------------------------------------------------------- 
    241247      DO jk = 1, jpkm1 
    242248         DO jj = 1, jpj 
     
    245251                  !  production terms for nanophyto. 
    246252                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    247                   ! size computation 
     253 
     254                  ! Size computation 
     255                  ! Size is made a function of the limitation of of phytoplankton growth 
     256                  ! Strongly limited cells are supposed to be smaller. sizena is the  
     257                  ! size at time step t+1 and is thus updated at the end of the  
     258                  ! current time step 
     259                  ! -------------------------------------------------------------------- 
    248260                  zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 
    249261                  zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
    250262                  sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 
    251                   ! Nutrient uptake terms 
     263                  ! Maximum potential uptake rate 
    252264                  zration = trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    253265                  zratiop = trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     
    261273                  zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 
    262274                  zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk) 
    263                   ! Uptake of phosphorus 
     275                  ! Uptake of phosphorus and DOP 
    264276                  zrat = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 
    265277                  zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 
     
    279291      END DO 
    280292 
    281       ! Computation of the various production terms of picophytoplankton  
     293      ! Computation of the various production and uptake terms of picophytoplankton  
     294      ! Interactions between N and P are modeled according to the Chain Model  
     295      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 
     296      ! Droop kinetics. When the quota is approaching the maximum achievable 
     297      ! quota, uptake is downregulated according to a sigmoidal function  
     298      ! (power 2), as proposed by Flynn (2003) 
     299      ! --------------------------------------------------------------------------- 
    282300      DO jk = 1, jpkm1 
    283301         DO jj = 1, jpj 
     
    287305                  zprorcap(ji,jj,jk) = zprpic(ji,jj,jk)  * xlimpic(ji,jj,jk) * trb(ji,jj,jk,jppic) * rfact2 
    288306                  ! Size computation 
     307                  ! Size is made a function of the limitation of of phytoplankton growth 
     308                  ! Strongly limited cells are supposed to be smaller. sizepa is 
     309                  ! size at time step t+1 and is thus updated at the end of the  
     310                  ! current time step 
     311                  ! -------------------------------------------------------------------- 
    289312                  zlimfac = zprchlp(ji,jj,jk)  * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn ) 
    290313                  zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
    291314                  sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) ) 
    292                   ! Nutrient uptake 
     315                  ! Maximum potential uptake rate of nutrients 
    293316                  zration = trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) 
    294317                  zratiop = trb(ji,jj,jk,jpppi) / ( trb(ji,jj,jk,jppic) + rtrn ) 
     
    320343      END DO 
    321344 
    322       ! Computation of the various production terms of diatoms 
     345      ! Computation of the various production and uptake terms of diatoms 
     346      ! Interactions between N and P are modeled according to the Chain Model  
     347      ! of Pahlow et al. (2009). Iron uptake is modeled following traditional 
     348      ! Droop kinetics. When the quota is approaching the maximum achievable 
     349      ! quota, uptake is downregulated according to a sigmoidal function  
     350      ! (power 2), as proposed by Flynn (2003) 
     351      ! --------------------------------------------------------------------------- 
    323352      DO jk = 1, jpkm1 
    324353         DO jj = 1, jpj 
     
    327356                  !  production terms for diatomees 
    328357                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    329                   ! size computation 
     358                  ! Size computation 
     359                  ! Size is made a function of the limitation of of phytoplankton growth 
     360                  ! Strongly limited cells are supposed to be smaller. sizeda is 
     361                  ! size at time step t+1 and is thus updated at the end of the  
     362                  ! current time step.  
     363                  ! -------------------------------------------------------------------- 
    330364                  zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
    331365                  zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
    332366                  sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 
    333                   ! Nutrient uptake 
     367                  ! Maximum potential uptake rate of nutrients 
    334368                  zration = trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    335369                  zratiop = trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     
    361395      END DO 
    362396 
     397      ! Production of Chlorophyll. The formulation proposed by Geider et al. 
     398      ! is adopted here. 
     399      ! -------------------------------------------------------------------- 
    363400      DO jk = 1, jpkm1 
    364401         DO jj = 1, jpj 
     
    375412                  zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 
    376413                  zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 
    377                   !  production terms for diatomees ( chlorophyll ) 
     414                  !  production terms for diatoms ( chlorophyll ) 
    378415                  zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
    379416                  zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 
     
    454491        END DO 
    455492     END DO 
    456      ! 
     493      
     494     ! Production and uptake of ligands by phytoplankton. This part is activated  
     495     ! when ln_ligand is set to .true. in the namelist. Ligand uptake is small  
     496     ! and based on the FeL model by Morel et al. (2008) and on the study of 
     497     ! Shaked and Lis (2012) 
     498     ! ------------------------------------------------------------------------- 
    457499     IF( ln_ligand ) THEN 
    458500         zpligprod1(:,:,:) = 0._wp    ;    zpligprod2(:,:,:) = 0._wp 
     
    463505                 zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 
    464506                 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp    & 
    465                  &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) 
     507                 &       - zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    466508                 zpligprod1(ji,jj,jk) = zdocprod * ldocp 
    467                  zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 
     509                 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) / ( rtrn + plig(ji,jj,jk) & 
     510                 &                      + 2.E3 * (1.0 - plig(ji,jj,jk) ) ) * lthet 
    468511              END DO 
    469512           END DO 
    470513        END DO 
    471514     ENDIF 
    472  
    473  
    474      ! Total primary production per year 
    475515 
    476516    ! Total primary production per year 
     
    490530              CALL iom_put( "PPPHYP"  , zw3d ) 
    491531              ! 
    492               zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
     532              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatoms 
    493533              CALL iom_put( "PPPHYD"  , zw3d ) 
    494534          ENDIF 
     
    500540              CALL iom_put( "PPNEWP"  , zw3d ) 
    501541              ! 
    502               zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by diatomes 
     542              zw3d(:,:,:) = zpronewd(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by diatoms 
    503543              CALL iom_put( "PPNEWD"  , zw3d ) 
    504544          ENDIF 
     
    508548          ENDIF 
    509549          IF( iom_use( "PFeN" ) .OR. iom_use( "PFeD" ) .OR. iom_use( "PFeP" ) )  THEN 
    510               zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by nanophyto 
     550              zw3d(:,:,:) = zprofen(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron uptake by nanophyto 
    511551              CALL iom_put( "PFeN"  , zw3d ) 
    512552              ! 
    513               zw3d(:,:,:) = zprofep(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by picophyto 
     553              zw3d(:,:,:) = zprofep(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron uptake by picophyto 
    514554              CALL iom_put( "PFeP"  , zw3d ) 
    515555              ! 
    516               zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron production by  diatomes 
     556              zw3d(:,:,:) = zprofed(:,:,:) * zfact * tmask(:,:,:)  ! biogenic iron uptake by  diatoms 
    517557              CALL iom_put( "PFeD"  , zw3d ) 
    518558          ENDIF 
    519559          IF( iom_use( "LPRODP" ) )  THEN 
    520560              zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
    521               CALL iom_put( "LPRODP"  , zw3d ) 
     561              CALL iom_put( "LPRODP"  , zw3d )  ! Ligand production by phytoplankton 
    522562          ENDIF 
    523563          IF( iom_use( "LDETP" ) )  THEN 
    524564              zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 
    525               CALL iom_put( "LDETP"  , zw3d ) 
     565              CALL iom_put( "LDETP"  , zw3d )  ! Uptake of ligands by phytoplankton 
    526566          ENDIF 
    527567          IF( iom_use( "Mumax" ) )  THEN 
     
    540580          ENDIF 
    541581          IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) .OR. iom_use( "LPlight" ) )  THEN 
    542               zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     582              zw3d(:,:,:) = zprbio (:,:,:) / (zprmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of nanophytoplankton 
    543583              CALL iom_put( "LNlight"  , zw3d ) 
    544584              ! 
    545               zw3d(:,:,:) = zprpic (:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 
     585              zw3d(:,:,:) = zprpic (:,:,:) / (zprmaxp(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term of picophytoplankton 
    546586              CALL iom_put( "LPlight"  , zw3d ) 
    547587              ! 
    548               zw3d(:,:,:) =  zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term 
     588              zw3d(:,:,:) =  zprdia (:,:,:) / (zprmaxd(:,:,:) + rtrn) * tmask(:,:,:)  ! light limitation term of diatoms 
    549589              CALL iom_put( "LDlight"  , zw3d ) 
    550590          ENDIF 
     
    556596              CALL iom_put( "MunetP"  , zw3d ) 
    557597              ! 
    558               zw3d(:,:,:) = zcroissd(:,:,:) * tmask(:,:,:) ! ! Realized growth rate for diatomes 
     598              zw3d(:,:,:) = zcroissd(:,:,:) * tmask(:,:,:) ! ! Realized growth rate for diatoms 
    559599              CALL iom_put( "MunetD"  , zw3d ) 
    560600              ! 
     
    584624      !! ** Purpose :   Initialization of phytoplankton production parameters 
    585625      !! 
    586       !! ** Method  :   Read the nampisprod namelist and check the parameters 
     626      !! ** Method  :   Read the namp5zprod namelist and check the parameters 
    587627      !!      called at the first timestep (nittrc000) 
    588628      !! 
    589       !! ** input   :   Namelist nampisprod 
     629      !! ** input   :   Namelist namp5zprod 
    590630      !!---------------------------------------------------------------------- 
    591       INTEGER :: ios                 ! Local integer output status for namelist read 
     631      INTEGER :: ios    ! Local integer output status for namelist read 
    592632      !! 
    593633      NAMELIST/namp5zprod/ pislopen, pislopep, pisloped, excretn, excretp, excretd,     & 
     
    595635      !!---------------------------------------------------------------------- 
    596636 
    597       REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production 
     637      REWIND( numnatp_ref )              ! Namelist namp5zprod in reference namelist : Pisces phytoplankton production 
    598638      READ  ( numnatp_ref, namp5zprod, IOSTAT = ios, ERR = 901) 
    599639901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp5zprod in reference namelist' ) 
    600640 
    601       REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 
     641      REWIND( numnatp_cfg )              ! Namelist namp5zprod in configuration namelist : Pisces phytoplankton production 
    602642      READ  ( numnatp_cfg, namp5zprod, IOSTAT = ios, ERR = 902 ) 
    603643902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namp5zprod in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/par_pisces.F90

    r10416 r12537  
    1010 
    1111   ! productive layer depth 
    12    INTEGER, PUBLIC ::   jpkb       !: first vertical layers where biology is active 
    13    INTEGER, PUBLIC ::   jpkbm1     !: first vertical layers where biology is active 
     12   INTEGER, PUBLIC ::   jpkb      !: first vertical layers where biology is active 
     13   INTEGER, PUBLIC ::   jpkbm1    !: first vertical layers where biology is active 
    1414 
    1515   ! assign an index in trc arrays for each LOBSTER prognostic variables 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/sms_pisces.F90

    r12349 r12537  
    22   !!---------------------------------------------------------------------- 
    33   !!                     ***  sms_pisces.F90  ***   
    4    !! TOP :   PISCES Source Minus Sink variables 
     4   !! TOP :   PISCES Source Minus Sink variables are declared and allocated 
    55   !!---------------------------------------------------------------------- 
    66   !! History :   1.0  !  2000-02 (O. Aumont) original code 
     
    1313   PUBLIC 
    1414 
    15    INTEGER ::   numnatp_ref = -1           !! Logical units for namelist pisces 
    16    INTEGER ::   numnatp_cfg = -1           !! Logical units for namelist pisces 
    17    INTEGER ::   numonp      = -1           !! Logical unit for namelist pisces output 
    18  
    19    !                                                       !:  PISCES  : silicon dependant half saturation 
     15   INTEGER ::   numnatp_ref = -1  !: Logical units for namelist pisces 
     16   INTEGER ::   numnatp_cfg = -1  !: Logical units for namelist pisces 
     17   INTEGER ::   numonp      = -1  !: Logical unit for namelist pisces output 
    2018 
    2119   !!* Model used 
     
    2725 
    2826   !!*  Time variables 
    29    INTEGER  ::   nrdttrc           !: ??? 
    30    REAL(wp) ::   rfact , rfactr    !: ??? 
    31    REAL(wp) ::   rfact2, rfact2r   !: ??? 
    32    REAL(wp) ::   xstep             !: Time step duration for biology 
    33    REAL(wp) ::   ryyss             !: number of seconds per year  
    34    REAL(wp) ::   r1_ryyss          !: inverse number of seconds per year  
    35  
     27   INTEGER  ::   nrdttrc          !: ??? 
     28   REAL(wp) ::   rfact , rfactr   !: time step duration (in seconds) 
     29   REAL(wp) ::   rfact2, rfact2r  !: time step duration (in seconds) when timesplitting is activated for PISCES 
     30   REAL(wp) ::   xstep            !: Time step duration for biology 
     31   REAL(wp) ::   ryyss            !: number of seconds per year  
     32   REAL(wp) ::   r1_ryyss         !: inverse number of seconds per year  
    3633 
    3734   !!*  Biological parameters  
    38    REAL(wp) ::   rno3              !: ??? 
    39    REAL(wp) ::   o2ut              !: ??? 
    40    REAL(wp) ::   po4r              !: ??? 
    41    REAL(wp) ::   rdenit            !: ??? 
    42    REAL(wp) ::   rdenita           !: ??? 
    43    REAL(wp) ::   o2nit             !: ??? 
    44    REAL(wp) ::   wsbio, wsbio2     !: ??? 
    45    REAL(wp) ::   wsbio2max         !: ??? 
    46    REAL(wp) ::   wsbio2scale       !: ??? 
    47    REAL(wp) ::   xkmort            !: ??? 
    48    REAL(wp) ::   ferat3            !: ??? 
    49    REAL(wp) ::   ldocp             !: ??? 
    50    REAL(wp) ::   ldocz             !: ??? 
    51    REAL(wp) ::   lthet             !: ??? 
    52    REAL(wp) ::   no3rat3           !: ??? 
    53    REAL(wp) ::   po4rat3           !: ??? 
    54  
     35   REAL(wp) ::   rno3             !: C/N stoichiometric ratio 
     36   REAL(wp) ::   o2ut             !: O2/N stoichiometric ratio for ammonification 
     37   REAL(wp) ::   po4r             !: C/P stoichiometric ratio 
     38   REAL(wp) ::   rdenit           !: C/N ratio for denitrification 
     39   REAL(wp) ::   rdenita          !: C/N ratio for denitrification 
     40   REAL(wp) ::   o2nit            !: O2/N ratio for nitrification 
     41   REAL(wp) ::   wsbio, wsbio2    !: Sinking speeds of particles 
     42   REAL(wp) ::   wsbio2max        !: Maximum sinking speed of the largest particles 
     43   REAL(wp) ::   wsbio2scale      !: Length scale for the variations of wsbio2 
     44   REAL(wp) ::   xkmort           !: Mortality half-saturation constant 
     45   REAL(wp) ::   ferat3           !: Fe/C in heterotrophic organisms 
     46   REAL(wp) ::   ldocp            !: Ligand production ratio during PP 
     47   REAL(wp) ::   ldocz            !: Ligand production ratio by grazing 
     48   REAL(wp) ::   lthet            !: Uptake of ligand by phytoplankton 
     49   REAL(wp) ::   no3rat3          !: C/N ratio of zooplankton 
     50   REAL(wp) ::   po4rat3          !: C/P ratio of zooplankton 
    5551 
    5652   !!*  diagnostic parameters  
    57    REAL(wp) ::  tpp                !: total primary production 
    58    REAL(wp) ::  t_oce_co2_exp      !: total carbon export 
    59    REAL(wp) ::  t_oce_co2_flx      !: Total ocean carbon flux 
    60    REAL(wp) ::  t_oce_co2_flx_cum  !: Cumulative Total ocean carbon flux 
    61    REAL(wp) ::  t_atm_co2_flx      !: global mean of atmospheric pco2 
     53   REAL(wp) ::  tpp               !: total primary production 
     54   REAL(wp) ::  t_oce_co2_exp     !: total carbon export 
     55   REAL(wp) ::  t_oce_co2_flx     !: Total ocean carbon flux 
     56   REAL(wp) ::  t_oce_co2_flx_cum !: Cumulative Total ocean carbon flux 
     57   REAL(wp) ::  t_atm_co2_flx     !: global mean of atmospheric pco2 
    6258 
    6359   !!* restoring 
    64    LOGICAL  ::  ln_pisdmp          !: restoring or not of nutrients to a mean value 
    65    INTEGER  ::  nn_pisdmp          !: frequency of relaxation or not of nutrients to a mean value 
     60   LOGICAL  ::  ln_pisdmp         !: restoring or not of nutrients to a mean value 
     61   INTEGER  ::  nn_pisdmp         !: frequency of relaxation or not of nutrients to a mean value 
    6662 
    6763   !!* Mass conservation 
    68    LOGICAL  ::  ln_check_mass      !: Flag to check mass conservation 
    69    LOGICAL , PUBLIC ::   ln_ironice   !: boolean for Fe input from sea ice 
     64   LOGICAL  ::  ln_check_mass     !: Flag to check mass conservation 
     65   LOGICAL, PUBLIC ::   ln_ironice   !: boolean for Fe input from sea ice 
    7066 
    7167   !!*  Biological fluxes for light : variables shared by pisces & lobster 
     
    7571   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot_ndcy      !: PAR over 24h in case of diurnal cycle 
    7672   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat  
    77    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enanom, ediatm !: PAR for phyto, nano and diat  
     73   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enanom, ediatm !: mean PAR for phyto, nano and diat  
    7874   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico 
    79    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epicom         !: PAR for pico 
     75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epicom         !: mean PAR for pico 
    8076   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy           !: averaged PAR in the mixed layer 
    8177   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup_01 !: Absolute euphotic layer depth 
    82    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure 
     78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  Half-saturation con,stant for diatoms 
    8379 
    8480   !!*  Biological fluxes for primary production 
    85    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: ??? 
     81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: Maximum half-saturation constant over the year (Si) 
    8682   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron 
    8783   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed 
     
    9288 
    9389   !!*  SMS for the organic matter 
    94    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: ?? 
    95    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: ?? 
    96    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: ?? 
    97    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: ?? 
    98    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: ?? 
     90   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: Fraction of nanophytoplankton that are calcifying organisms 
     91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: OMZ  
     92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: N depleted indice 
     93   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: oxic remineralisation 
     94   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: Shear rate 
    9995   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production 
    100    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: Calcite production 
    101    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: Calcite production 
    102    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: Calcite production 
    103    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: Calcite production 
     96   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: POC production 
     97   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: POC consumption 
     98   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: GOC production 
     99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: GOC consumption 
    104100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   blim       !: bacterial production factor 
    105101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of nanophyto 
     
    111107 
    112108   !!* Variable for chemistry of the CO2 cycle 
    113    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: ??? 
    114    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: ??? 
    115    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: ??? 
    116    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: ??? 
    117    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: ??? 
     109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: Carbonate chemistry constant 
     110   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: Carbonate chemistry constant 
     111   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: Solubility product of CaCO3 
     112   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: Proton concentration 
     113   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: CO3 saturation 
    118114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aphscale   !:  
    119115 
     
    139135      !!---------------------------------------------------------------------- 
    140136      ierr(:) = 0 
    141       !*  Biological fluxes for light : shared variables for pisces & lobster 
    142137      ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj),    & 
    143138        &       heup_01(jpi,jpj) , xksi(jpi,jpj)               ,  STAT=ierr(1) ) 
     
    145140   
    146141      IF( ln_p4z .OR. ln_p5z ) THEN 
    147          !*  Biological fluxes for light  
     142 
     143         !* Optics 
    148144         ALLOCATE(  enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk) ,   & 
    149145           &        enanom(jpi,jpj,jpk)   , ediatm(jpi,jpj,jpk),   & 
    150146           &        etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk)  ,  STAT=ierr(2) )  
    151147 
    152          !*  Biological fluxes for primary production 
     148         !* Biological SMS 
    153149         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) ) 
    154          ! 
    155          !*  SMS for the organic matter 
     150 
     151         ! Biological SMS 
    156152         ALLOCATE( xfracal (jpi,jpj,jpk), orem(jpi,jpj,jpk)    ,    & 
    157             &      nitrfac(jpi,jpj,jpk), nitrfac2(jpi,jpj,jpk) ,    & 
     153            &      nitrfac(jpi,jpj,jpk) , nitrfac2(jpi,jpj,jpk),    & 
    158154            &      prodcal(jpi,jpj,jpk) , xdiss   (jpi,jpj,jpk),    & 
    159155            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    & 
     
    161157            &      blim   (jpi,jpj,jpk) ,                         STAT=ierr(4) ) 
    162158 
    163          !* Variable for chemistry of the CO2 cycle 
    164          ALLOCATE( ak13  (jpi,jpj,jpk) ,                            & 
     159         !* Carbonate chemistry 
     160         ALLOCATE( ak13  (jpi,jpj,jpk)  ,                           & 
    165161            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,     & 
    166162            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,     & 
    167163            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) ) 
    168164         ! 
    169          !* Temperature dependancy of SMS terms 
     165         !* Temperature dependency of SMS terms 
    170166         ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk),     & 
    171167            &      tgfunc3(jpi,jpj,jpk) , STAT=ierr(6) ) 
    172168         ! 
    173          !* Sinkong speed 
     169         !* Sinking speed 
    174170         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),     & 
    175171            &                             STAT=ierr(7) )    
    176172         !  
     173         !* Prognostic ligand 
    177174         IF( ln_ligand ) THEN 
    178175           ALLOCATE( plig(jpi,jpj,jpk)  ,                         STAT=ierr(8) ) 
     
    181178      ! 
    182179      IF( ln_p5z ) THEN 
    183          !        
     180         ! PISCES-QUOTA specific part       
    184181         ALLOCATE( epico(jpi,jpj,jpk)   , epicom(jpi,jpj,jpk) ,   STAT=ierr(9) )  
    185182 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcini_pisces.F90

    r12524 r12537  
    33   !!                         ***  MODULE trcini_pisces  *** 
    44   !! TOP :   initialisation of the PISCES biochemical model 
     5   !!         This module is for LOBSTER, PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :    -   !  1988-07  (E. Maier-Reiner) Original code 
     
    3738      !! 
    3839      !! ** Purpose :   Initialisation of the PISCES biochemical model 
    39       !!---------------------------------------------------------------------- 
    40       ! 
     40      !!                Allocation of the dynamic arrays 
     41      !!---------------------------------------------------------------------- 
     42      ! 
     43      ! Read the PISCES namelist 
    4144      CALL trc_nam_pisces 
    4245      ! 
     
    5457      !! ** Purpose :   Initialisation of the PISCES biochemical model 
    5558      !!---------------------------------------------------------------------- 
    56       USE p4zsms          ! Main P4Z routine 
     59      USE p4zsms          !  Main P4Z routine 
    5760      USE p4zche          !  Chemical model 
    5861      USE p4zsink         !  vertical flux of particulate matter due to sinking 
     
    111114      ierr = ierr +  p4z_lim_alloc() 
    112115      IF( ln_p4z ) THEN 
     116         ! PISCES part 
    113117         ierr = ierr +  p4z_prod_alloc() 
    114118         ierr = ierr +  p4z_meso_alloc() 
    115119      ELSE 
     120         ! PISCES-QUOTA part 
    116121         ierr = ierr +  p5z_lim_alloc() 
    117122         ierr = ierr +  p5z_prod_alloc() 
     
    128133 
    129134      ! assign an index in trc arrays for each prognostic variables 
     135      ! This is based on the information read in the namelist_top 
    130136      DO jn = 1, jptra 
    131137        cltra = ctrcnm(jn)  
     
    177183      ! Set biological ratios 
    178184      ! --------------------- 
    179       rno3    =  16._wp / 122._wp 
    180       po4r    =   1._wp / 122._wp 
    181       o2nit   =  32._wp / 122._wp 
    182       o2ut    = 133._wp / 122._wp 
    183       rdenit  =  ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 
    184       rdenita =   3._wp /  5._wp 
     185      rno3    =  16._wp / 122._wp   ! C/N 
     186      po4r    =   1._wp / 122._wp   ! C/P 
     187      o2nit   =  32._wp / 122._wp   ! O2/C for nitrification 
     188      o2ut    = 133._wp / 122._wp   ! O2/C for ammonification 
     189      rdenit  =  ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3  ! Denitrification 
     190      rdenita =   3._wp /  5._wp    ! Denitrification 
    185191      IF( ln_p5z ) THEN 
    186          no3rat3 = no3rat3 / rno3 
    187          po4rat3 = po4rat3 / po4r 
     192         no3rat3 = no3rat3 / rno3   ! C/N ratio in zooplankton 
     193         po4rat3 = po4rat3 / po4r   ! C/P ratio in zooplankton 
    188194      ENDIF 
    189195 
     
    250256      CALL p4z_opt_init          !  Optic: PAR in the water column 
    251257      IF( ln_p4z ) THEN 
     258         ! PISCES part 
    252259         CALL p4z_lim_init       !  co-limitations by the various nutrients 
    253260         CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean. 
    254261      ELSE 
     262         ! PISCES-QUOTA part 
    255263         CALL p5z_lim_init       !  co-limitations by the various nutrients 
    256264         CALL p5z_prod_init      !  phytoplankton growth rate over the global ocean. 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcnam_pisces.F90

    r11536 r12537  
    3434      !!                     ***  trc_nam_pisces  ***   
    3535      !! 
    36       !! ** Purpose :   read PISCES namelist 
     36      !! ** Purpose :  read PISCES namelist. The parameters read here activate 
     37      !!               different functionalities of PISCES : PISCES, PISCES-QUOTA 
     38      !!               LOBSTER, variable ligands, sediment module 
    3739      !! 
    38       !! ** input   :   file 'namelist.trc.sms' containing the following 
    39       !!             namelist: natext, natbio, natsms 
     40      !! ** input   :  file 'namelist_pisces' containing the following 
     41      !!             namelist: nampismod 
    4042      !!---------------------------------------------------------------------- 
    4143      INTEGER :: jl, jn 
     
    5557      IF(lwm) CALL ctl_opn( numonp     , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    5658      ! 
    57       REWIND( numnatp_ref )              ! Namelist nampisbio in reference namelist : Pisces variables 
     59      REWIND( numnatp_ref )              ! Namelist nampismod in reference namelist : Pisces variables 
    5860      READ  ( numnatp_ref, nampismod, IOSTAT = ios, ERR = 901) 
    5961901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'nampismod in reference namelist' ) 
    60       REWIND( numnatp_cfg )              ! Namelist nampisbio in configuration namelist : Pisces variables 
     62      REWIND( numnatp_cfg )              ! Namelist nampismod in configuration namelist : Pisces variables 
    6163      READ  ( numnatp_cfg, nampismod, IOSTAT = ios, ERR = 902 ) 
    6264902   IF( ios >  0 )   CALL ctl_nam ( ios , 'nampismod in configuration namelist' ) 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/trcsms_pisces.F90

    r10068 r12537  
    33   !!                         ***  MODULE trcsms_pisces  *** 
    44   !! TOP :   PISCES Source Minus Sink manager 
     5   !!         This module is for LOBSTER, PISCES and PISCES-QUOTA 
    56   !!====================================================================== 
    67   !! History :   1.0  !  2004-03 (O. Aumont) Original code 
     
    3031      !! 
    3132      !! ** Purpose :   Managment of the call to Biological sources and sinks  
    32       !!                routines of PISCES or LOBSTER bio-model 
     33      !!                routines of PISCES/PISCES-QUOTA or LOBSTER bio-model 
    3334      !! 
    3435      !!--------------------------------------------------------------------- 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcbc.F90

    r11536 r12537  
    153153               IF(trcdta_bdy(jn,ib)%cn_obc == 'frs' .AND. nn_trcdmp_bdy(ib) /= 0 )  & 
    154154                   & CALL ctl_stop( 'trc_bc_ini: Use FRS OR relaxation' ) 
    155                IF(  .NOT.( 0 < nn_trcdmp_bdy(ib)  .AND.  nn_trcdmp_bdy(ib) <= 2 )  )  & 
     155               IF( .NOT.( 0 <= nn_trcdmp_bdy(ib) .AND. nn_trcdmp_bdy(ib) <= 2 ) ) & 
    156156                   & CALL ctl_stop( 'trc_bc_ini: Not a valid option for nn_trcdmp_bdy. Allowed: 0,1,2.' ) 
    157157            END DO 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcini.F90

    r10817 r12537  
    235235      IF( ln_trcdta )   CALL trc_dta_ini( jptra )      ! set initial tracers values 
    236236      ! 
    237       IF( ln_my_trc )   CALL trc_bc_ini ( jptra )      ! set tracers Boundary Conditions 
     237      CALL trc_bc_ini ( jptra )      ! set tracers Boundary Conditions 
    238238      ! 
    239239      ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/trcsms.F90

    r10068 r12537  
    2121   USE trcsms_my_trc      ! MY_TRC  tracers 
    2222   USE prtctl_trc         ! Print control for debbuging 
     23   USE trcbc  , only : trc_bc 
     24   USE bdy_oce, only : ln_bdy  
    2325 
    2426   IMPLICIT NONE 
     
    5557      IF( ln_my_trc  )   CALL trc_sms_my_trc ( kt )    ! MY_TRC  tracers 
    5658 
     59      IF( ln_bdy     )   CALL trc_bc ( kt ) 
     60 
    5761      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
    5862         WRITE(charout, FMT="('sms ')") 
Note: See TracChangeset for help on using the changeset viewer.