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

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, ...)

File:
1 edited

Legend:

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