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 10368 for NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zmicro.F90 – NEMO

Ignore:
Timestamp:
2018-12-03T12:45:01+01:00 (5 years ago)
Author:
smasson
Message:

dev_r10164_HPC09_ESIWACE_PREP_MERGE: merge with trunk@10365, see #2133

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/TOP/PISCES/P4Z/p4zmicro.F90

    r10345 r10368  
    2626 
    2727   REAL(wp), PUBLIC ::   part        !: part of calcite not dissolved in microzoo guts 
    28    REAL(wp), PUBLIC ::   xpref2c     !: microzoo preference for POC  
    29    REAL(wp), PUBLIC ::   xpref2p     !: microzoo preference for nanophyto 
    30    REAL(wp), PUBLIC ::   xpref2d     !: microzoo preference for diatoms 
     28   REAL(wp), PUBLIC ::   xprefc      !: microzoo preference for POC  
     29   REAL(wp), PUBLIC ::   xprefn      !: microzoo preference for nanophyto 
     30   REAL(wp), PUBLIC ::   xprefd      !: microzoo preference for diatoms 
    3131   REAL(wp), PUBLIC ::   xthreshdia  !: diatoms feeding threshold for microzooplankton  
    3232   REAL(wp), PUBLIC ::   xthreshphy  !: nanophyto threshold for microzooplankton  
     
    3636   REAL(wp), PUBLIC ::   mzrat       !: microzooplankton mortality rate  
    3737   REAL(wp), PUBLIC ::   grazrat     !: maximal microzoo grazing rate 
    38    REAL(wp), PUBLIC ::   xkgraz      !: non assimilated fraction of P by microzoo  
    39    REAL(wp), PUBLIC ::   unass       !: Efficicency of microzoo growth  
     38   REAL(wp), PUBLIC ::   xkgraz      !: Half-saturation constant of assimilation 
     39   REAL(wp), PUBLIC ::   unass       !: Non-assimilated part of food 
    4040   REAL(wp), PUBLIC ::   sigma1      !: Fraction of microzoo excretion as DOM  
    41    REAL(wp), PUBLIC ::   epsher      !: half sturation constant for grazing 1  
     41   REAL(wp), PUBLIC ::   epsher      !: growth efficiency for grazing 1  
     42   REAL(wp), PUBLIC ::   epshermin   !: minimum growth efficiency for grazing 1 
    4243 
    4344   !!---------------------------------------------------------------------- 
     
    6263      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 
    6364      REAL(wp) :: zgraze  , zdenom, zdenom2 
    64       REAL(wp) :: zfact   , zfood, zfoodlim 
    65       REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 
     65      REAL(wp) :: zfact   , zfood, zfoodlim, zbeta 
     66      REAL(wp) :: zepsherf, zepshert, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 
    6667      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 
    6768      REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn 
    6869      REAL(wp) :: zgrazp, zgrazm, zgrazsd 
    6970      REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 
    70       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing  
    71       REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d 
     71      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 
     72      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: zw3d, zzligprod 
    7273      CHARACTER (len=25) :: charout 
    7374      !!--------------------------------------------------------------------- 
    7475      ! 
    7576      IF( ln_timing )   CALL timing_start('p4z_micro') 
     77      ! 
     78      IF (ln_ligand) THEN 
     79         ALLOCATE( zzligprod(jpi,jpj,jpk) ) 
     80         zzligprod(:,:,:) = 0._wp 
     81      ENDIF 
    7682      ! 
    7783      DO jk = 1, jpkm1 
     
    97103               !     Microzooplankton grazing 
    98104               !     ------------------------ 
    99                zfood     = xpref2p * zcompaph + xpref2c * zcompapoc + xpref2d * zcompadi 
     105               zfood     = xprefn * zcompaph + xprefc * zcompapoc + xprefd * zcompadi 
    100106               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 
    101107               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
     
    103109               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    104110 
    105                zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2  
    106                zgrazm    = zgraze  * xpref2c * zcompapoc * zdenom2  
    107                zgrazsd   = zgraze  * xpref2d * zcompadi  * zdenom2  
     111               zgrazp    = zgraze  * xprefn * zcompaph  * zdenom2  
     112               zgrazm    = zgraze  * xprefc * zcompapoc * zdenom2  
     113               zgrazsd   = zgraze  * xprefd * zcompadi  * zdenom2  
    108114 
    109115               zgrazpf   = zgrazp  * trb(ji,jj,jk,jpnfe) / (trb(ji,jj,jk,jpphy) + rtrn) 
     
    111117               zgrazsf   = zgrazsd * trb(ji,jj,jk,jpdfe) / (trb(ji,jj,jk,jpdia) + rtrn) 
    112118               ! 
    113                zgraztot  = zgrazp  + zgrazm  + zgrazsd  
     119               zgraztotc = zgrazp  + zgrazm  + zgrazsd  
    114120               zgraztotf = zgrazpf + zgrazsf + zgrazmf  
    115121               zgraztotn = zgrazp * quotan(ji,jj,jk) + zgrazm + zgrazsd * quotad(ji,jj,jk) 
    116122 
    117123               ! Grazing by microzooplankton 
    118                zgrazing(ji,jj,jk) = zgraztot 
     124               zgrazing(ji,jj,jk) = zgraztotc 
    119125 
    120126               !    Various remineralization and excretion terms 
    121127               !    -------------------------------------------- 
    122                zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztot + rtrn ) 
    123                zgrasratn = ( zgraztotn + rtrn ) / ( zgraztot + rtrn ) 
     128               zgrasrat  = ( zgraztotf + rtrn ) / ( zgraztotc + rtrn ) 
     129               zgrasratn = ( zgraztotn + rtrn ) / ( zgraztotc + rtrn ) 
    124130               zepshert  =  MIN( 1., zgrasratn, zgrasrat / ferat3) 
    125                zepsherv  = zepshert * MIN( epsher, (1. - unass) * zgrasrat / ferat3, (1. - unass) * zgrasratn ) 
    126                zgrafer   = zgraztot * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv )  
    127                zgrarem   = zgraztot * ( 1. - zepsherv - unass ) 
    128                zgrapoc   = zgraztot * unass 
     131               zbeta     = MAX(0., (epsher - epshermin) ) 
     132               zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
     133               zepsherv  = zepsherf * zepshert  
     134 
     135               zgrafer   = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv )  
     136               zgrarem   = zgraztotc * ( 1. - zepsherv - unass ) 
     137               zgrapoc   = zgraztotc * unass 
    129138 
    130139               !  Update of the TRA arrays 
     
    135144               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 
    136145               ! 
    137                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     146               IF( ln_ligand ) THEN 
     147                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     148                  zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 
     149               ENDIF 
    138150               ! 
    139151               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    140152               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
     153               zfezoo(ji,jj,jk)    = zgrafer 
    141154               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 
    142                prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 
     155               prodpoc(ji,jj,jk)   = prodpoc(ji,jj,jk) + zgrapoc 
    143156               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 
    144157               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
     
    147160               !   -------------------------------------------------------------------- 
    148161               zmortz = ztortz + zrespz 
    149                tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztot  
     162               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zmortz + zepsherv * zgraztotc  
    150163               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazp 
    151164               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazsd 
     
    180193              CALL iom_put( "GRAZ1", zw3d ) 
    181194           ENDIF 
     195           IF( iom_use( "FEZOO" ) ) THEN 
     196              zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     197              CALL iom_put( "FEZOO", zw3d ) 
     198           ENDIF 
     199           IF( iom_use( "LPRODZ" ) .AND. ln_ligand )  THEN 
     200              zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     201              CALL iom_put( "LPRODZ"  , zw3d ) 
     202           ENDIF 
    182203           DEALLOCATE( zw3d ) 
    183204         ENDIF 
     
    209230      INTEGER ::   ios   ! Local integer 
    210231      ! 
    211       NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
    212          &                xpref2d,  xthreshdia,  xthreshphy,  xthreshpoc, & 
    213          &                xthresh, xkgraz, epsher, sigma1, unass 
     232      NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xprefn, xprefc, & 
     233         &                xprefd,  xthreshdia,  xthreshphy,  xthreshpoc, & 
     234         &                xthresh, xkgraz, epsher, epshermin, sigma1, unass 
    214235      !!---------------------------------------------------------------------- 
    215236      ! 
     
    231252         WRITE(numout,*) '   Namelist : namp4zzoo' 
    232253         WRITE(numout,*) '      part of calcite not dissolved in microzoo guts  part        =', part 
    233          WRITE(numout,*) '      microzoo preference for POC                     xpref2c     =', xpref2c 
    234          WRITE(numout,*) '      microzoo preference for nano                    xpref2p     =', xpref2p 
    235          WRITE(numout,*) '      microzoo preference for diatoms                 xpref2d     =', xpref2d 
     254         WRITE(numout,*) '      microzoo preference for POC                     xprefc      =', xprefc 
     255         WRITE(numout,*) '      microzoo preference for nano                    xprefn      =', xprefn 
     256         WRITE(numout,*) '      microzoo preference for diatoms                 xprefd      =', xprefd 
    236257         WRITE(numout,*) '      diatoms feeding threshold  for microzoo         xthreshdia  =', xthreshdia 
    237258         WRITE(numout,*) '      nanophyto feeding threshold for microzoo        xthreshphy  =', xthreshphy 
     
    243264         WRITE(numout,*) '      non assimilated fraction of P by microzoo       unass       =', unass 
    244265         WRITE(numout,*) '      Efficicency of microzoo growth                  epsher      =', epsher 
     266         WRITE(numout,*) '      Minimum efficicency of microzoo growth          epshermin   =', epshermin 
    245267         WRITE(numout,*) '      Fraction of microzoo excretion as DOM           sigma1      =', sigma1 
    246268         WRITE(numout,*) '      half sturation constant for grazing 1           xkgraz      =', xkgraz 
Note: See TracChangeset for help on using the changeset viewer.