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

    r10345 r10368  
    1515   USE trc             !  passive tracers common variables  
    1616   USE sms_pisces      !  PISCES Source Minus Sink variables 
     17   USE p4zlim 
    1718   USE p5zlim          !  Phytoplankton limitation terms 
    1819   USE iom             !  I/O manager 
     
    4142   REAL(wp), PUBLIC ::  mzrat       !: microzooplankton mortality rate  
    4243   REAL(wp), PUBLIC ::  grazrat     !: maximal microzoo grazing rate 
    43    REAL(wp), PUBLIC ::  xkgraz      !: non assimilated fraction of P by microzoo 
    44    REAL(wp), PUBLIC ::  unassc      !: Efficicency of microzoo growth  
    45    REAL(wp), PUBLIC ::  unassn      !: Efficicency of microzoo growth  
    46    REAL(wp), PUBLIC ::  unassp      !: Efficicency of microzoo growth  
    47    REAL(wp), PUBLIC ::  epsher      !: half sturation constant for grazing 1  
     44   REAL(wp), PUBLIC ::  xkgraz      !: Half-saturation constant of assimilation 
     45   REAL(wp), PUBLIC ::  unassc      !: Non-assimilated part of food 
     46   REAL(wp), PUBLIC ::  unassn      !: Non-assimilated part of food 
     47   REAL(wp), PUBLIC ::  unassp      !: Non-assimilated part of food 
     48   REAL(wp), PUBLIC ::  epsher      !: Growth efficiency for microzoo 
     49   REAL(wp), PUBLIC ::  epshermin   !: Minimum growth efficiency for microzoo 
    4850   REAL(wp), PUBLIC ::  srespir     !: half sturation constant for grazing 1  
    4951   REAL(wp), PUBLIC ::  ssigma      !: Fraction excreted as semi-labile DOM 
     
    8284      REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 
    8385      REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 
    85       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 
     86      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 
     87      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zzligprod 
    8688      CHARACTER (len=25) :: charout 
    8789      !!--------------------------------------------------------------------- 
    8890      ! 
    8991      IF( ln_timing )   CALL timing_start('p5z_micro') 
     92      ! 
     93      IF (ln_ligand) THEN 
     94         ALLOCATE( zzligprod(jpi,jpj,jpk) ) 
     95         zzligprod(:,:,:) = 0._wp 
     96      ENDIF 
    9097      ! 
    9198      zmetexcess = 0.0 
     
    106113               !   no real reason except that it seems to be more stable and may mimic predation. 
    107114               !   ------------------------------------------------------------------------------ 
    108                ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 
     115               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    109116 
    110117               !   Computation of the abundance of the preys 
     
    123130               zfoodlim  = MAX( 0. , zfood - min(xthresh,0.5*zfood) ) 
    124131               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
    125                zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
     132               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk))  
    126133 
    127134               !   An active switching parameterization is used here. 
     
    183190               !   --------------------------------------------------- 
    184191               zepshert  = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 
    185                zbeta = 1./ (epsher - 0.2) 
    186                zepsherf = 0.2 + 1./ (zbeta + 0.04 * 12. * zfood * 1E6 ) 
     192               zbeta     = MAX( 0., (epsher - epshermin) ) 
     193               zepsherf  = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 
    187194               zepsherv  = zepsherf * zepshert 
    188195 
     
    244251               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 
    245252               ! 
    246                IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     253               IF( ln_ligand ) THEN  
     254                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 
     255                  zzligprod(ji,jj,jk) = zgradoc * ldocz 
     256               ENDIF 
    247257               ! 
    248258               tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 
     
    250260               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem  
    251261               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 
     262               zfezoo(ji,jj,jk)    = zgraref 
    252263               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 
    253264               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 
     
    288299      END DO 
    289300      ! 
    290       IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    291          ALLOCATE( zw3d(jpi,jpj,jpk) ) 
    292          IF( iom_use( "GRAZ1" ) ) THEN 
    293             zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
    294             CALL iom_put( "GRAZ1", zw3d ) 
     301      IF( lk_iomput ) THEN 
     302         IF( knt == nrdttrc ) THEN 
     303            ALLOCATE( zw3d(jpi,jpj,jpk) ) 
     304            IF( iom_use( "GRAZ1" ) ) THEN 
     305               zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
     306               CALL iom_put( "GRAZ1", zw3d ) 
     307            ENDIF 
     308            IF( iom_use( "FEZOO" ) ) THEN 
     309               zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:)   ! 
     310               CALL iom_put( "FEZOO", zw3d ) 
     311            ENDIF 
     312            IF( iom_use( "LPRODZ" ) .AND. ln_ligand )  THEN 
     313               zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 
     314               CALL iom_put( "LPRODZ"  , zw3d ) 
     315            ENDIF 
     316            DEALLOCATE( zw3d ) 
    295317         ENDIF 
    296          DEALLOCATE( zw3d ) 
    297318      ENDIF 
    298319      ! 
     
    325346         &                xprefp, xprefd, xprefz, xthreshdia, xthreshphy, & 
    326347         &                xthreshpic, xthreshpoc, xthreshzoo, xthresh, xkgraz, & 
    327          &                epsher, ssigma, srespir, unassc, unassn, unassp 
     348         &                epsher, epshermin, ssigma, srespir, unassc, unassn, unassp 
    328349      !!---------------------------------------------------------------------- 
    329350      ! 
     
    360381         WRITE(numout,*) '    P egested fraction of fodd by microzoo          unassp      =', unassp 
    361382         WRITE(numout,*) '    Efficicency of microzoo growth                  epsher      =', epsher 
     383         WRITE(numout,*) '    Minimum Efficiency of Microzoo growth           epshermin   =', epshermin 
    362384         WRITE(numout,*) '    Fraction excreted as semi-labile DOM            ssigma      =', ssigma 
    363385         WRITE(numout,*) '    Active respiration                              srespir     =', srespir 
Note: See TracChangeset for help on using the changeset viewer.