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/p5zmeso.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/p5zmeso.F90

    r10070 r10368  
    2727   REAL(wp), PUBLIC ::  part2        !: part of calcite not dissolved in mesozoo guts 
    2828   REAL(wp), PUBLIC ::  xpref2c      !: mesozoo preference for POC  
    29    REAL(wp), PUBLIC ::  xpref2p      !: mesozoo preference for nanophyto 
     29   REAL(wp), PUBLIC ::  xpref2n      !: mesozoo preference for nanophyto 
    3030   REAL(wp), PUBLIC ::  xpref2z      !: mesozoo preference for zooplankton 
    3131   REAL(wp), PUBLIC ::  xpref2d      !: mesozoo preference for Diatoms  
     
    4040   REAL(wp), PUBLIC ::  mzrat2       !: microzooplankton mortality rate  
    4141   REAL(wp), PUBLIC ::  grazrat2     !: maximal mesozoo grazing rate 
    42    REAL(wp), PUBLIC ::  xkgraz2      !: non assimilated fraction of P by mesozoo 
    43    REAL(wp), PUBLIC ::  unass2c      !: Efficicency of mesozoo growth  
    44    REAL(wp), PUBLIC ::  unass2n      !: Efficicency of mesozoo growth  
    45    REAL(wp), PUBLIC ::  unass2p      !: Efficicency of mesozoo growth  
    46    REAL(wp), PUBLIC ::  epsher2      !: half sturation constant for grazing 2 
     42   REAL(wp), PUBLIC ::  xkgraz2      !: Half-saturation constant of assimilation 
     43   REAL(wp), PUBLIC ::  unass2c      !: Non-assimilated fraction of food 
     44   REAL(wp), PUBLIC ::  unass2n      !: Non-assimilated fraction of food 
     45   REAL(wp), PUBLIC ::  unass2p      !: Non-assimilated fraction of food 
     46   REAL(wp), PUBLIC ::  epsher2      !: Growth efficiency of mesozoo 
     47   REAL(wp), PUBLIC ::  epsher2min   !: Minimum growth efficiency of mesozoo 
    4748   REAL(wp), PUBLIC ::  ssigma2      !: Fraction excreted as semi-labile DOM 
    4849   REAL(wp), PUBLIC ::  srespir2     !: Active respiration 
     
    8586      CHARACTER (len=25) :: charout 
    8687      REAL(wp) :: zrfact2, zmetexcess 
    87       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 
    88       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
     88      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 
     89      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 
    8990 
    9091      !!--------------------------------------------------------------------- 
     
    9293      IF( ln_timing )   CALL timing_start('p5z_meso') 
    9394      ! 
     95 
    9496      zgrazing(:,:,:) = 0._wp 
     97      zfezoo2 (:,:,:) = 0._wp 
     98      ! 
     99      IF (ln_ligand) THEN 
     100         ALLOCATE( zz2ligprod(jpi,jpj,jpk) ) 
     101         zz2ligprod(:,:,:) = 0._wp 
     102      ENDIF 
    95103 
    96104      zmetexcess = 0.0 
     
    111119               !   no real reason except that it seems to be more stable and may mimic predation 
    112120               !   --------------------------------------------------------------- 
    113                ztortz   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
     121               ztortz   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 
    114122 
    115123               !   Computation of the abundance of the preys 
     
    124132               !   Mesozooplankton grazing 
    125133               !   ------------------------ 
    126                zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2p * zcompaph + xpref2c * zcompapoc   & 
     134               zfood     = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc   & 
    127135               &           + xpref2m * zcompames  
    128136               zfoodlim  = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 
    129137               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    130                zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
     138               zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk))  
    131139 
    132140               !   An active switching parameterization is used here. 
     
    138146               !   most abundant species 
    139147               !   ------------------------------------------------------------   
    140                ztmp1 = xpref2p * zcompaph**1.5 
     148               ztmp1 = xpref2n * zcompaph**1.5 
    141149               ztmp2 = xpref2m * zcompames**1.5 
    142150               ztmp3 = xpref2c * zcompapoc**1.5 
     
    170178               !   ---------------------------------- 
    171179               zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    172                &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     180               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)  & 
     181               &           * (1. - nitrfac(ji,jj,jk)) 
    173182               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    174183               zgrazffng = zgrazffeg * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    175184               zgrazffpg = zgrazffeg * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    176185               zgrazffep = grazflux  * xstep *  wsbio3(ji,jj,jk)     & 
    177                &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     186               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes)   & 
     187               &           * (1. - nitrfac(ji,jj,jk)) 
    178188               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    179189               zgrazffnp = zgrazffep * trb(ji,jj,jk,jppon) / (trb(ji,jj,jk,jppoc) + rtrn) 
     
    226236               !   --------------------------------------------------- 
    227237               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
    228                zbeta = 1./ (epsher2 - 0.2) 
    229                zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood *1E6 ) 
     238               zbeta     = MAX(0., (epsher2 - epsher2min) ) 
     239               zepsherf  = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
    230240               zepsherv  = zepsherf * zepshert 
    231241 
     
    290300               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    291301               ! 
    292                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     302               IF( ln_ligand ) THEN 
     303                  tra(ji,jj,jk,jplgw)  = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     304                  zz2ligprod(ji,jj,jk) = zgradoc * ldocz 
     305               ENDIF 
    293306               ! 
    294307               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
     
    296309               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 
    297310               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
     311               zfezoo2(ji,jj,jk)   = zgraref 
    298312               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 
    299313               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren 
     
    351365            CALL iom_put( "PCAL", zw3d ) 
    352366         ENDIF 
     367         IF( iom_use( "FEZOO2" ) ) THEN 
     368            zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     369            CALL iom_put( "FEZOO2", zw3d ) 
     370         ENDIF 
     371         IF( iom_use( "LPRODZ2" ) .AND. ln_ligand )  THEN 
     372            zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     373            CALL iom_put( "LPRODZ2"  , zw3d ) 
     374         ENDIF 
    353375         DEALLOCATE( zw3d ) 
    354376      ENDIF 
     
    379401      INTEGER :: ios                 ! Local integer output status for namelist read 
    380402      !! 
    381       NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2p, xpref2z, & 
     403      NAMELIST/namp5zmes/part2, bmetexc2, grazrat2, resrat2, mzrat2, xpref2c, xpref2n, xpref2z, & 
    382404         &                xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 
    383          &                xthresh2mes, xthresh2, xkgraz2, epsher2, ssigma2, unass2c, & 
     405         &                xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 
    384406         &                unass2n, unass2p, srespir2, grazflux 
    385407      !!---------------------------------------------------------------------- 
     
    399421         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    400422         WRITE(numout,*) '    part of calcite not dissolved in mesozoo guts  part2       = ', part2 
    401          WRITE(numout,*) '    mesozoo preference for nano.                   xpref2p     = ', xpref2p 
     423         WRITE(numout,*) '    mesozoo preference for nano.                   xpref2n     = ', xpref2n 
    402424         WRITE(numout,*) '    mesozoo preference for diatoms                 xpref2d     = ', xpref2d 
    403425         WRITE(numout,*) '    mesozoo preference for zoo                     xpref2z     = ', xpref2z 
     
    415437         WRITE(numout,*) '    mesozoo flux feeding rate                      grazflux    = ', grazflux 
    416438         WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2c     = ', unass2c 
    417          WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2n     = ', unass2n 
    418          WRITE(numout,*) '    C egested fraction of food by mesozoo          unass2p     = ', unass2p 
     439         WRITE(numout,*) '    N egested fraction of food by mesozoo          unass2n     = ', unass2n 
     440         WRITE(numout,*) '    P egested fraction of food by mesozoo          unass2p     = ', unass2p 
    419441         WRITE(numout,*) '    Efficicency of Mesozoo growth                  epsher2     = ', epsher2 
     442         WRITE(numout,*) '    Minimum Efficiency of Mesozoo growth           epsher2min  =', epsher2min 
    420443         WRITE(numout,*) '    Fraction excreted as semi-labile DOM           ssigma2     = ', ssigma2 
    421444         WRITE(numout,*) '    Active respiration                             srespir2    = ', srespir2 
Note: See TracChangeset for help on using the changeset viewer.