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

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

Comments in routines have been revised and significantly augmented

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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' ) 
Note: See TracChangeset for help on using the changeset viewer.