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 12759 for NEMO/branches – NEMO

Changeset 12759 for NEMO/branches


Ignore:
Timestamp:
2020-04-17T00:17:29+02:00 (4 years ago)
Author:
aumont
Message:

make parameterizations in PISCES-operationnal more similar to thos of PISCES-QUOTA (prey switching, optimal allocation, size, ...)

Location:
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/cfgs/SHARED/namelist_pisces_ref

    r12525 r12759  
    6969   concdfer   =  3.E-9    ! Iron half saturation for diatoms 
    7070   concbfe    =  1.E-11   ! Iron half-saturation for DOC remin. 
    71    concbnh4   =  2.E-8    ! NH4 half saturation for DOC remin. 
     71   concbnh4   =  6.E-8    ! NH4 half saturation for DOC remin. 
    7272   concbno3   =  2.E-7    ! Nitrate half saturation for DOC remin. 
    7373   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
    7474   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
    7575   xsizern    =  3.0      ! Size ratio for nanophytoplankton 
    76    xsizerd    =  3.0      ! Size ratio for diatoms 
    77    xksi1      =  4.E-6    ! half saturation constant for Si uptake 
     76   xsizerd    =  4.0      ! Size ratio for diatoms 
     77   xksi1      =  8.E-6    ! half saturation constant for Si uptake 
    7878   xksi2      =  20E-6    ! half saturation constant for Si/C 
    7979   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
     
    160160   fecnm      =  40E-6    ! Maximum Fe/C in nanophytoplankton 
    161161   fecdm      =  40E-6    ! Maximum Fe/C in diatoms 
    162    grosip     =  0.13     ! mean Si/C ratio 
     162   grosip     =  0.11     ! mean Si/C ratio 
    163163/ 
    164164!----------------------------------------------------------------------- 
     
    203203!----------------------------------------------------------------------- 
    204204   part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
    205    grazrat2   =  0.75     ! maximal mesozoo grazing rate 
    206    resrat2    =  0.005    ! exsudation rate of mesozooplankton 
    207    mzrat2     =  0.03     ! mesozooplankton mortality rate 
     205   grazrat2   =  0.55     ! maximal mesozoo grazing rate 
     206   resrat2    =  0.005    ! Linear mortality rate of mesozooplankton 
     207   mzrat2     =  0.025    ! mesozooplankton mortality rate 
    208208   xpref2d    =  1.       ! mesozoo preference for diatoms 
    209209   xpref2n    =  0.3      ! mesozoo preference for nanophyto. 
     
    230230   grazrat2    = 0.75    ! maximal mesozoo grazing rate 
    231231   bmetexc2    = .true.  ! Metabolic use of excess carbon  
    232    resrat2     = 0.005   ! exsudation rate of mesozooplankton 
     232   resrat2     = 0.005   ! Linear mortality rate of mesozooplankton 
    233233   mzrat2      = 0.03    ! mesozooplankton mortality rate 
    234234   xpref2d     = 1.      ! meso preference for diatoms 
     
    259259!----------------------------------------------------------------------- 
    260260   part       =  0.5      ! part of calcite not dissolved in microzoo guts 
    261    grazrat    =  3.0      ! maximal zoo grazing rate 
    262    resrat     =  0.03     ! exsudation rate of zooplankton 
    263    mzrat      =  0.004    ! zooplankton mortality rate 
     261   grazrat    =  2.0      ! maximal zoo grazing rate 
     262   resrat     =  0.03     ! Linear mortality rate of zooplankton 
     263   mzrat      =  0.005    ! zooplankton mortality rate 
    264264   xprefc     =  0.1      ! Microzoo preference for POM 
    265265   xprefn     =  1.       ! Microzoo preference for Nanophyto 
    266    xprefd     =  0.6      ! Microzoo preference for Diatoms 
     266   xprefd     =  0.8      ! Microzoo preference for Diatoms 
    267267   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton  
    268268   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton  
     
    270270   xthresh    =  3.E-7    ! Food threshold for feeding 
    271271   xkgraz     =  20.E-6   ! half sturation constant for grazing 
    272    epsher     =  0.3      ! Efficiency of microzoo growth 
    273    epshermin  =  0.3      ! Minimum efficiency of microzoo growth 
     272   epsher     =  0.35     ! Efficiency of microzoo growth 
     273   epshermin  =  0.35     ! Minimum efficiency of microzoo growth 
    274274   sigma1     =  0.6      ! Fraction of microzoo excretion as DOM 
    275275   unass      =  0.3      ! non assimilated fraction of phyto by zoo 
     
    281281   grazrat    =  3.0      ! maximal zoo grazing rate 
    282282   bmetexc    =  .true.   ! Metabolic use of excess carbon 
    283    resrat     =  0.03     ! exsudation rate of zooplankton 
     283   resrat     =  0.03     ! Linear mortality rate of zooplankton 
    284284   mzrat      =  0.004    ! zooplankton mortality rate 
    285285   xprefc     =  0.1      ! Microzoo preference for POM 
     
    332332&nampispoc     !   parameters for organic particles 
    333333!----------------------------------------------------------------------- 
    334    xremip    =  0.035     ! remineralisation rate of POC 
     334   xremip    =  0.03      ! remineralisation rate of POC 
    335335   jcpoc     =  15        ! Number of lability classes 
    336336   rshape    =  1.0       ! Shape of the gamma function 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90

    r12537 r12759  
    107107 
    108108      ! Update of the size of the different phytoplankton groups 
     109      sized(:,:,:) = sizeda(:,:,:) 
     110      sizen(:,:,:) = sizena(:,:,:) 
    109111      IF (ln_p5z) THEN 
    110          sized(:,:,:) = sizeda(:,:,:) 
    111          sizen(:,:,:) = sizena(:,:,:) 
    112112         sizep(:,:,:) = sizepa(:,:,:) 
    113113      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zlim.F90

    r12537 r12759  
    6161   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: Limitation of diatoms uptake of Fe 
    6262   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: Limitation of Nano uptake of Fe 
     63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanofer   !: Limitation of Fe uptake by nanophyto 
     64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatfer   !: Limitation of Fe uptake by diatoms 
    6365 
    6466   ! Coefficient for iron limitation following Flynn and Hipkin (1999) 
     
    8688      ! 
    8789      INTEGER  ::   ji, jj, jk 
    88       REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim 
    89       REAL(wp) ::   zconcd, zconcd2, zconcn, zconcn2 
     90      REAL(wp) ::   zlim1, zlim2, zlim3, zlim4, zno3, zferlim, zcoef 
    9091      REAL(wp) ::   z1_trbdia, z1_trbphy, ztem1, ztem2, zetot1, zetot2 
    9192      REAL(wp) ::   zdenom, zratio, zironmin 
    9293      REAL(wp) ::   zconc1d, zconc1dnh4, zconc0n, zconc0nnh4    
     94      REAL(wp) ::   fananof, fadiatf, znutlim, zfalim 
    9395      !!--------------------------------------------------------------------- 
    9496      ! 
    9597      IF( ln_timing )   CALL timing_start('p4z_lim') 
     98      ! 
     99      sizena(:,:,:) = 0.0  ;  sizeda(:,:,:) = 0.0 
    96100      ! 
    97101      DO jk = 1, jpkm1 
     
    110114               ! that increasing biomass is made of generally bigger cells 
    111115               !------------------------------------------------------------ 
    112                zconcd   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    113                zconcd2  = trb(ji,jj,jk,jpdia) - zconcd 
    114                zconcn   = MAX( 0.e0 , trb(ji,jj,jk,jpphy) - xsizephy ) 
    115                zconcn2  = trb(ji,jj,jk,jpphy) - zconcn 
    116116               z1_trbphy   = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    117117               z1_trbdia   = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    118118 
    119                concdfe(ji,jj,jk) = MAX( concdfer, ( zconcd2 * concdfer + concdfer * xsizerd * zconcd ) * z1_trbdia ) 
    120                zconc1d           = MAX( concdno3, ( zconcd2 * concdno3 + concdno3 * xsizerd * zconcd ) * z1_trbdia ) 
    121                zconc1dnh4        = MAX( concdnh4, ( zconcd2 * concdnh4 + concdnh4 * xsizerd * zconcd ) * z1_trbdia ) 
    122  
    123                concnfe(ji,jj,jk) = MAX( concnfer, ( zconcn2 * concnfer + concnfer * xsizern * zconcn ) * z1_trbphy ) 
    124                zconc0n           = MAX( concnno3, ( zconcn2 * concnno3 + concnno3 * xsizern * zconcn ) * z1_trbphy ) 
    125                zconc0nnh4        = MAX( concnnh4, ( zconcn2 * concnnh4 + concnnh4 * xsizern * zconcn ) * z1_trbphy ) 
     119               concnfe(ji,jj,jk) = concnfer * sizen(ji,jj,jk)**0.81 
     120               zconc0n           = concnno3 * sizen(ji,jj,jk)**0.81 
     121               zconc0nnh4        = concnnh4 * sizen(ji,jj,jk)**0.81 
     122 
     123               concdfe(ji,jj,jk) = concdfer * sized(ji,jj,jk)**0.81  
     124               zconc1d           = concdno3 * sized(ji,jj,jk)**0.81  
     125               zconc1dnh4        = concdnh4 * sized(ji,jj,jk)**0.81   
     126 
     127               ! Computation of the optimal allocation parameters 
     128               ! Based on the different papers by Pahlow et al., and  
     129               ! Smith et al. 
     130               ! --------------------------------------------------- 
     131 
     132               ! Nanophytoplankton 
     133               znutlim = biron(ji,jj,jk) / concnfe(ji,jj,jk) 
     134               fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
     135 
     136               ! Diatoms 
     137               znutlim = biron(ji,jj,jk) / concdfe(ji,jj,jk) 
     138               fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 
    126139 
    127140               ! Michaelis-Menten Limitation term by nutrients of 
     
    144157               ! Michaelis-Menten Limitation term by nutrients: Nanophyto 
    145158               ! -------------------------------------------------------- 
     159               ! Limitation of Fe uptake 
     160               zfalim = (1.-fananof) / fananof 
     161               xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concnfe(ji,jj,jk) ) 
     162 
     163               ! Limitation of nanophytoplankton growth 
    146164               zdenom = 1. /  ( zconc0n * zconc0nnh4 + zconc0nnh4 * trb(ji,jj,jk,jpno3) + zconc0n * trb(ji,jj,jk,jpnh4) ) 
    147165               xnanono3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc0nnh4 * zdenom 
     
    163181               !   Michaelis-Menten Limitation term by nutrients : Diatoms 
    164182               !   ------------------------------------------------------- 
     183               ! Limitation of Fe uptake 
     184               zfalim = (1.-fadiatf) / fadiatf 
     185               xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * concdfe(ji,jj,jk) ) 
     186 
     187               ! Limitation of diatoms growth 
    165188               zdenom   = 1. / ( zconc1d * zconc1dnh4 + zconc1dnh4 * trb(ji,jj,jk,jpno3) + zconc1d * trb(ji,jj,jk,jpnh4) ) 
    166189               xdiatno3(ji,jj,jk) = trb(ji,jj,jk,jpno3) * zconc1dnh4 * zdenom 
     
    184207         END DO 
    185208      END DO 
     209 
     210      ! Size estimation of phytoplankton based on total biomass 
     211      ! Assumes that larger biomass implies addition of larger cells 
     212      ! ------------------------------------------------------------ 
     213      DO jk = 1, jpkm1 
     214         DO jj = 1, jpj 
     215            DO ji = 1, jpi 
     216               zcoef = trb(ji,jj,jk,jpphy) - MIN(xsizephy, trb(ji,jj,jk,jpphy) ) 
     217               sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 
     218               zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 
     219               sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
     220 
     221            END DO 
     222         END DO 
     223      END DO 
     224 
    186225 
    187226      ! Compute the fraction of nanophytoplankton that is made of calcifiers 
     
    235274        IF( iom_use( "LNFe"    ) )   CALL iom_put( "LNFe"   , xlimnfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    236275        IF( iom_use( "LDFe"    ) )   CALL iom_put( "LDFe"   , xlimdfe(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     276        IF( iom_use( "SIZEN"   ) )   CALL iom_put( "SIZEN"  , sizen(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
     277        IF( iom_use( "SIZED"   ) )   CALL iom_put( "SIZED"  , sized(:,:,:) * tmask(:,:,:) )  ! Iron limitation term 
    237278      ENDIF 
    238279      ! 
     
    315356         &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
    316357         &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
     358         &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
    317359         &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
    318360         &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90

    r12538 r12759  
    7979      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 
    8080      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    81       REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasrat, zgrasratn 
     81      REAL(wp) :: zmigreltime, zprcaca, zmortz, zgrasratf, zgrasratn 
    8282      REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof, zgrazn, zgrazpoc, zgraznf, zgrazf 
    8383      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg, zrum, zcodel, zargu, zval 
     84      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmp4, ztmptot 
    8485      CHARACTER (len=25) :: charout 
    8586      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 
     
    153154               zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk))  
    154155 
    155                ! The grazing pressure on each prey is computed assuming passive switching. This  
    156                ! is equivalent to assuming that mesozooplankton have an opportunistic feeding 
    157                ! behaviour. 
    158                ! ----------------------------------------------------------------------------- 
    159                zgrazd    = zgraze2  * xpref2d  * zcompadi  * zdenom2  
    160                zgrazz    = zgraze2  * xpref2z  * zcompaz   * zdenom2  
    161                zgrazn    = zgraze2  * xpref2n  * zcompaph  * zdenom2  
    162                zgrazpoc  = zgraze2  * xpref2c  * zcompapoc * zdenom2  
     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               ! ------------------------------------------------------------   
     164               ! The width of the selection window is increased when preys 
     165               ! have low abundance, .i.e. zooplankton become less specific  
     166               ! to avoid starvation. 
     167               ! ---------------------------------------------------------- 
     168               zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     169               zsigma = 0.5 + 1.0 * zsigma 
     170               ! Nanophytoplankton and diatoms are the only preys considered 
     171               ! to be close enough to have potential interference 
     172               ! ----------------------------------------------------------- 
     173               zdiffdn = exp( -ABS(log(1.5 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
     174               ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 
     175               ztmp2 = xpref2c * zcompapoc**2 
     176               ztmp3 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / ( 1.0 + zdiffdn ) 
     177               ztmp4 = xpref2z * zcompaz**2 
     178               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + rtrn 
     179               ztmp1 = ztmp1 / ztmptot 
     180               ztmp2 = ztmp2 / ztmptot 
     181               ztmp3 = ztmp3 / ztmptot 
     182               ztmp4 = ztmp4 / ztmptot 
     183 
     184               !   Mesozooplankton regular grazing on the different preys 
     185               !   ------------------------------------------------------ 
     186               zgrazd    = zgraze2  * ztmp3 * zdenom 
     187               zgrazn    = zgraze2  * ztmp1 * zdenom 
     188               zgrazpoc  = zgraze2  * ztmp2 * zdenom 
     189               zgrazz    = zgraze2  * ztmp4 * zdenom 
    163190 
    164191               zgraznf   = zgrazn   * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 
     
    215242               ! Fulton, 2012) 
    216243               ! ----------------------------------------------------------------------------------- 
    217                zgrasrat  =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
     244               zgrasratf =  ( zgraztotf + rtrn )/ ( zgraztotc + rtrn ) 
    218245               zgrasratn =  ( zgraztotn + rtrn )/ ( zgraztotc + rtrn ) 
    219                zepshert  = MIN( 1., zgrasratn, zgrasrat / ferat3) 
     246               zepshert  = MIN( 1., zgrasratn, zgrasratf / ferat3) 
    220247               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
    221248               zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta )  
     
    263290               zgrarem(ji,jj,jk) = zgraztotc * ( 1. - zepsherv - unass2 ) & 
    264291               &         + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz 
    265                zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv )    & 
     292               zgraref(ji,jj,jk) = zgraztotc * MAX( 0. , ( 1. - unass2 ) * zgrasratf - ferat3 * zepsherv )    & 
    266293               &         + ferat3 * ( ( 1. - epsher2 - unass2 ) /( 1. - epsher2 ) * ztortz ) 
    267294               zgrapoc(ji,jj,jk) = zgraztotc * unass2 + zmortzgoc 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90

    r12537 r12759  
    6868      INTEGER  :: ji, jj, jk 
    6969      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 
    70       REAL(wp) :: zgraze  , zdenom, zdenom2 
    71       REAL(wp) :: zfact   , zfood, zfoodlim, zbeta 
     70      REAL(wp) :: zgraze  , zdenom, zdenom2, zfact, zfood, zfoodlim, zbeta 
    7271      REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    7372      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 
    74       REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn 
    75       REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    76       REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
     73      REAL(wp) :: zrespz, ztortz, zgrasratf, zgrasratn 
     74      REAL(wp) :: zgraznc, zgrazpoc, zgrazdc, zgrazpof, zgrazdf, zgraznf 
     75      REAL(wp) :: zsigma, zdiffdn, ztmp1, ztmp2, ztmp3, ztmptot, zproport 
    7776      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 
    7877      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d, zzligprod 
     
    9291               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
    9392               zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz 
     93 
     94               ! Proportion of nano and diatoms that are within the size range 
     95               ! accessible to microzooplankton.  
     96               zproport  = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 
    9497 
    9598               !  linear mortality of mesozooplankton 
     
    113116               !   big for microzooplankton. 
    114117               !   -------------------------------------------------------- 
    115                zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
     118               zcompadi  = zproport * MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ) 
    116119               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 
    117120               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthreshpoc ), 0.e0 ) 
     
    130133               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    131134 
    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                ! ----------------------------------------------------------------------------- 
    136                zgrazp    = zgraze  * xprefn * zcompaph  * zdenom2  
    137                zgrazm    = zgraze  * xprefc * zcompapoc * zdenom2  
    138                zgrazsd   = zgraze  * xprefd * zcompadi  * zdenom2  
    139  
    140                zgrazpf   = zgrazp  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 
    141                zgrazmf   = zgrazm  * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    142                zgrazsf   = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 
    143                ! 
    144                zgraztotc = zgrazp  + zgrazm  + zgrazsd  
    145                zgraztotf = zgrazpf + zgrazsf + zgrazmf  
    146                zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 
     135               ! An active switching parameterization is used here. 
     136               ! We don't use the KTW parameterization proposed by  
     137               ! Vallina et al. because it tends to produce too steady biomass 
     138               ! composition and the variance of Chl is too low as it grazes 
     139               ! too strongly on winning organisms. We use a generalized 
     140               ! switching parameterization proposed by Morozov and  
     141               ! Petrovskii (2013) 
     142               ! ------------------------------------------------------------   
     143               ! The width of the selection window is increased when preys 
     144               ! have low abundance, .i.e. zooplankton become less specific  
     145               ! to avoid starvation. 
     146               ! ---------------------------------------------------------- 
     147               zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 
     148               zsigma = 0.5 + 1.0*zsigma 
     149               zdiffdn = exp( -ABS(log(1.67 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 
     150               ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / ( 1.0 + zdiffdn ) 
     151               ztmp2 = xprefd * zcompadi * ( zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn ) 
     152               ztmp3 = xprefc * zcompapoc**2 
     153               ztmptot = ztmp1 + ztmp2 + ztmp3 + rtrn 
     154               ztmp1 = ztmp1 / ztmptot 
     155               ztmp2 = ztmp2 / ztmptot 
     156               ztmp3 = ztmp3 / ztmptot 
     157 
     158               zgraznc   = zgraze   * ztmp1 * zdenom 
     159               zgrazdc   = zgraze   * ztmp2 * zdenom 
     160               zgrazpoc  = zgraze   * ztmp3 * zdenom 
     161 
     162               zgraznf   = zgraznc  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 
     163               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
     164               zgrazdf   = zgrazdc  * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 
     165               ! 
     166               zgraztotc = zgraznc + zgrazpoc + zgrazdc 
     167               zgraztotf = zgraznf + zgrazdf  + zgrazpof  
     168               zgraztotn = zgraznc * quotan(ji,jj,jk) + zgrazpoc + zgrazdc * quotad(ji,jj,jk) 
    147169 
    148170               ! Grazing by microzooplankton 
     
    157179               ! Fulton, 2012) 
    158180               ! ----------------------------------------------------------------------------- 
    159                zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
     181               zgrasratf = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
    160182               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 
    161                zepshert  =  MIN( 1., zgrasratn, zgrasrat / ferat3) 
     183               zepshert  =  MIN( 1., zgrasratn, zgrasratf / ferat3) 
    162184               zbeta     = MAX(0., (epsher - epshermin) ) 
    163185               zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
    164186               zepsherq  = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 
    165187               zepsherv  = zepsherf * zepshert * zepsherq 
    166                zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv )  
     188               zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasratf - ferat3 * zepsherv )  
    167189               zgrarem   = zgraztotc * ( 1. - zepsherv - unass ) 
    168190               zgrapoc   = zgraztotc * unass 
     
    190212               zmortz = ztortz + zrespz 
    191213               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc  
    192                tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 
    193                tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 
    194                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazp * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
    195                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazsd * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 
    196                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
    197                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazsd * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
    198                tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgrazpf 
    199                tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
    200                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 
     214               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 
     215               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc 
     216               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch)/(trb(ji,jj,jk,jpphy)+rtrn) 
     217               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch)/(trb(ji,jj,jk,jpdia)+rtrn) 
     218               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
     219               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi)/(trb(ji,jj,jk,jpdia)+rtrn) 
     220               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 
     221               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf 
     222               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazpoc 
    201223               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 
    202                conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 
    203                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 
     224               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc 
     225               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazpof 
    204226               ! 
    205227               ! Calcite remineralization due to zooplankton activity 
    206228               ! part of the ingested calcite is dissolving in the acidic gut 
    207                zprcaca = xfracal(ji,jj,jk) * zgrazp 
     229               zprcaca = xfracal(ji,jj,jk) * zgraznc 
    208230               prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    209231               ! 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zprod.F90

    r12537 r12759  
    6868      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsilfac2, zsiborn 
    6969      REAL(wp) ::   zprod, zproreg, zproreg2, zprochln, zprochld 
    70       REAL(wp) ::   zmaxday, zdocprod, zpislopen, zpisloped 
    71       REAL(wp) ::   zmxltst, zmxlday 
     70      REAL(wp) ::   zdocprod, zpislopen, zpisloped, zfact 
     71      REAL(wp) ::   zratiosi, zmaxsi, zlimfac, zsizetmp 
    7272      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n 
    73       REAL(wp) ::   zfact 
    7473      CHARACTER (len=25) :: charout 
    7574      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d 
    7675      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
    77       REAL(wp), DIMENSION(jpi,jpj    ) :: zstrn, zmixnano, zmixdiat 
     76      REAL(wp), DIMENSION(jpi,jpj    ) :: zstrn 
    7877      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprmaxn,zprmaxd 
    7978      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadd, zysopt   
     
    129128                  ENDIF 
    130129                  zmxl_chl(ji,jj,jk) = zval / 24. 
    131                   zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 
     130                  zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 
    132131               ENDIF 
    133132            END DO 
     
    153152                  zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    154153                  zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    155                   ! 
     154 
    156155                  ! The initial slope of the PI curve can be increased for nano 
    157156                  ! to account for photadaptation, for instance in the DCM 
     
    197196                zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) )   & 
    198197                &      * zprmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 
    199                 quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
     198                quotan(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 
    200199                zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) )   & 
    201200                &      * zprmaxd(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 
    202                 quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 
    203             END DO 
    204          END DO 
    205       END DO 
    206  
    207  
    208       DO jk = 1, jpkm1 
    209          DO jj = 1, jpj 
    210             DO ji = 1, jpi 
    211  
    212                 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     201                quotad(ji,jj,jk) = MIN( 1., 0.3 + 0.7 * zval ) 
     202            END DO 
     203         END DO 
     204      END DO 
     205 
     206 
     207      DO jk = 1, jpkm1 
     208         DO jj = 1, jpj 
     209            DO ji = 1, jpi 
     210 
     211               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    213212                   ! Si/C of diatoms 
    214213                   ! ------------------------ 
     
    217216                   ! to mimic the very high ratios observed in the Southern Ocean (zsilfac2) 
    218217                   ! ----------------------------------------------------------------------- 
    219                   zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
    220                   zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 
    221                   zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) )  ) + 1.e0 
    222                   zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 
    223                   IF (gphit(ji,jj) < -30 ) THEN 
    224                     zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
    225                   ELSE 
    226                     zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
    227                   ENDIF 
    228                   zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 
     218                 zlim  = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 
     219                 zsilim = xlimdia(ji,jj,jk) * zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
     220                 zsiborn = trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) * trb(ji,jj,1,jpsil) 
     221                 IF (gphit(ji,jj) < -30 ) THEN 
     222                   zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 
     223                 ELSE 
     224                   zsilfac2 = 1. +      zsiborn / ( zsiborn + xksi2**3 ) 
     225                 ENDIF 
     226                 zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 
     227                 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 
     228                 zmaxsi  = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 
     229                 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 
     230                    zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 
     231                 ELSE 
     232                    zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.7 * zmaxsi 
     233                 ENDIF 
    229234              ENDIF 
    230235            END DO 
     
    255260                  !  New production (uptake of NO3) 
    256261                  zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    257                   ! 
    258                   zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 
     262 
     263                  ! Size computation 
     264                  ! Size is made a function of the limitation of of phytoplankton growth 
     265                  ! Strongly limited cells are supposed to be smaller. sizena is the  
     266                  ! size at time step t+1 and is thus updated at the end of the  
     267                  ! current time step 
     268                  ! -------------------------------------------------------------------- 
     269                  zlimfac = xlimphy(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 
     270                  zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     271                  sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 
    259272 
    260273                  !  Iron uptake rates of nanophytoplankton. Upregulation   
     
    262275                  !  formulation used in quota formulations. Uptake is downregulated 
    263276                  !  when the quota is close to the maximum quota  
    264                   zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
     277                  zratio = 1.0 - MIN(1.0,trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) ) 
     278                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
    265279                  zprofen(ji,jj,jk) = fecnm * zprmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    266                   &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    267                   &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    268                   &            * zmax * trb(ji,jj,jk,jpphy) * rfact2 
     280                  &          * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn + xnanono3(ji,jj,jk)  & 
     281                  &          + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) )   & 
     282                  &          * xnanofer(ji,jj,jk) * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    269283                  !  production terms of diatoms (C) 
    270284                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
     
    272286                  ! New production (uptake of NO3) 
    273287                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
     288 
     289                  ! Size computation 
     290                  ! Size is made a function of the limitation of of phytoplankton growth 
     291                  ! Strongly limited cells are supposed to be smaller. sizeda is 
     292                  ! size at time step t+1 and is thus updated at the end of the  
     293                  ! current time step.  
     294                  ! -------------------------------------------------------------------- 
     295                  zlimfac = zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 
     296                  zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 
     297                  sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 
    274298 
    275299                  !  Iron uptake rates of nanophytoplankton. Upregulation   
     
    277301                  !  formulation used in quota formulations. Uptake is downregulated 
    278302                  !  when the quota is close to the maximum quota  
    279                   zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 
    280                   zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    281                   zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) )  & 
    282                   &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    283                   &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
    284                   &            * zmax * trb(ji,jj,jk,jpdia) * rfact2 
     303                  zratio = 1.0 - MIN(1.0, trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) ) 
     304                  zmax   = MAX( 0., MIN( 1.0, zratio**2/ (0.05**2+zratio**2) ) )  
     305                  zprofed(ji,jj,jk) = fecdm * zprmaxd(ji,jj,jk) * (1.0 - fr_i(ji,jj) )  & 
     306                  &          * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn + xdiatno3(ji,jj,jk)  & 
     307                  &          + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) )   & 
     308                  &          * xdiatfer(ji,jj,jk) * zmax * trb(ji,jj,jk,jpdia) * rfact2 
    285309               ENDIF 
    286310            END DO 
     
    336360                 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd 
    337361                 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 
    338                  tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 
     362                 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk)   & 
     363                 &                   * rfact2 * trb(ji,jj,jk,jpdia) 
    339364                 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zdocprod 
    340365                 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 
     
    343368                 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
    344369                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
    345                  tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
     370                 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk)   & 
     371                 &                   * rfact2 * trb(ji,jj,jk,jpdia) 
    346372                 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
    347373                 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
     
    401427          ENDIF 
    402428          IF( iom_use( "PBSi" ) )  THEN 
    403               zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) ! biogenic silica production 
     429              zw3d(:,:,:) = zprmaxd(:,:,:) * 1.E3 * tmask(:,:,:) * zysopt(:,:,:) * trb(:,:,:,jpdia) ! biogenic silica production 
    404430              CALL iom_put( "PBSi"  , zw3d ) 
    405431          ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zsms.F90

    r12537 r12759  
    320320         ENDIF 
    321321         ! 
     322         ! PISCES size proxy 
     323         IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
     324            CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:)  ) 
     325         ELSE 
     326            sized(:,:,:) = 1. 
     327         ENDIF 
     328         IF( iom_varid( numrtr, 'sizen', ldstop = .FALSE. ) > 0 ) THEN 
     329            CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sizen(:,:,:)  ) 
     330         ELSE 
     331            sizen(:,:,:) = 1. 
     332         ENDIF 
     333 
    322334         ! PISCES-QUOTA specific part 
    323335         IF( ln_p5z ) THEN 
    324336            ! Read the size of the different phytoplankton groups 
    325337            ! If not in the restart file, they are set to 1 
    326             IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
     338            IF( iom_varid( numrtr, 'sizep', ldstop = .FALSE. ) > 0 ) THEN 
    327339               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sizep(:,:,:)  ) 
    328                CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sizen(:,:,:)  ) 
    329                CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:)  ) 
    330340            ELSE 
    331341               sizep(:,:,:) = 1. 
    332                sizen(:,:,:) = 1. 
    333                sized(:,:,:) = 1. 
    334342            ENDIF 
    335343        ENDIF 
     
    346354         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) ! Si max concentration 
    347355         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) ! Cumulative CO2 flux 
     356         CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sizen(:,:,:) )  ! Size of nanophytoplankton 
     357         CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) )  ! Size of diatoms 
    348358         IF( ln_p5z ) THEN 
    349359            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 
    352360         ENDIF 
    353361      ENDIF 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90

    r12537 r12759  
    7979   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xpicodop   !: Limitation of DOP uptake by picophyto 
    8080   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 
    8281   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 
    8482   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpic    !: Limitation of picophyto PP by nutrients 
    8583   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimpics   !: Limitation of picophyto PP by nutrients 
     
    440438               ! ------------------------------------------------------------ 
    441439               zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 
    442                sized(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
    443440               sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 
    444441 
     
    639636         &      xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk),       & 
    640637         &      xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk),       & 
    641          &      xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk),       & 
    642638         &      xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk),       & 
    643639         &      fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk),       & 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90

    r12538 r12759  
    194194               ! ----------------------------------------------------------- 
    195195               zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 
    196                ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) 
     196               ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) / (1.0 + zdiffdn) 
    197197               ztmp2 = xpref2m * zcompames**2 
    198198               ztmp3 = xpref2c * zcompapoc**2 
    199                ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) 
     199               ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) / (1.0 + zdiffdn) 
    200200               ztmp5 = xpref2z * zcompaz**2 
    201201               ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 
  • NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/sms_pisces.F90

    r12537 r12759  
    132132      !!---------------------------------------------------------------------- 
    133133      USE lib_mpp , ONLY: ctl_stop 
    134       INTEGER ::   ierr(10)        ! Local variables 
     134      INTEGER ::   ierr(11)        ! Local variables 
    135135      !!---------------------------------------------------------------------- 
    136136      ierr(:) = 0 
     
    165165         !* Temperature dependency of SMS terms 
    166166         ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk),     & 
    167             &      tgfunc3(jpi,jpj,jpk) , STAT=ierr(6) ) 
     167            &      tgfunc3(jpi,jpj,jpk) ,                         STAT=ierr(6) ) 
    168168         ! 
    169169         !* Sinking speed 
    170          ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),     & 
    171             &                             STAT=ierr(7) )    
     170         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),   STAT=ierr(7) ) 
     171 
     172         !*  Size of phytoplankton cells 
     173         ALLOCATE( sizen (jpi,jpj,jpk), sized (jpi,jpj,jpk),        & 
     174           &       sizena(jpi,jpj,jpk), sizeda(jpi,jpj,jpk),      STAT=ierr(8) ) 
    172175         !  
    173176         !* Prognostic ligand 
    174177         IF( ln_ligand ) THEN 
    175            ALLOCATE( plig(jpi,jpj,jpk)  ,                         STAT=ierr(8) ) 
     178           ALLOCATE( plig(jpi,jpj,jpk)  ,                         STAT=ierr(9) ) 
    176179         ENDIF 
    177180      ENDIF 
     
    179182      IF( ln_p5z ) THEN 
    180183         ! PISCES-QUOTA specific part       
    181          ALLOCATE( epico(jpi,jpj,jpk)   , epicom(jpi,jpj,jpk) ,   STAT=ierr(9) )  
     184         ALLOCATE( epico(jpi,jpj,jpk)   , epicom(jpi,jpj,jpk) ,   STAT=ierr(10) )  
    182185 
    183186         !*  Size of phytoplankton cells 
    184          ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk),         & 
    185            &       sized(jpi,jpj,jpk), sizena(jpi,jpj,jpk),        & 
    186            &       sizepa(jpi,jpj,jpk), sizeda(jpi,jpj,jpk),       STAT=ierr(10) ) 
     187         ALLOCATE( sizep(jpi,jpj,jpk), sizepa(jpi,jpj,jpk),       STAT=ierr(11) ) 
    187188      ENDIF 
    188189      ! 
Note: See TracChangeset for help on using the changeset viewer.