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 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90 – NEMO

Ignore:
Timestamp:
2016-01-08T10:35:19+01:00 (8 years ago)
Author:
jamesharle
Message:

Update MPP_BDY_UPDATE branch to be consistent with head of trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r4624 r6225  
    5050   REAL(wp), PUBLIC ::  grazflux     !: mesozoo flux feeding rate 
    5151 
    52    !!* Substitution 
    53 #  include "top_substitute.h90" 
    5452   !!---------------------------------------------------------------------- 
    5553   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    6058CONTAINS 
    6159 
    62    SUBROUTINE p4z_meso( kt, jnt ) 
     60   SUBROUTINE p4z_meso( kt, knt ) 
    6361      !!--------------------------------------------------------------------- 
    6462      !!                     ***  ROUTINE p4z_meso  *** 
     
    6866      !! ** Method  : - ??? 
    6967      !!--------------------------------------------------------------------- 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     68      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7169      INTEGER  :: ji, jj, jk 
    7270      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
     
    8381      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    8482      CHARACTER (len=25) :: charout 
    85       REAL(wp) :: zrfact2 
    86       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
     83      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
    8784 
    8885      !!--------------------------------------------------------------------- 
     
    9087      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    9188      ! 
    92       IF( ln_diatrc .AND. lk_iomput ) THEN 
     89      IF( lk_iomput ) THEN 
    9390         CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    9491         zgrazing(:,:,:) = 0._wp 
     
    9895         DO jj = 1, jpj 
    9996            DO ji = 1, jpi 
    100                zcompam   = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
     97               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
    10198# if defined key_degrad 
    10299               zstep     = xstep * facvol(ji,jj,jk) 
     
    108105               !  Respiration rates of both zooplankton 
    109106               !  ------------------------------------- 
    110                zrespz2   = resrat2 * zfact * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) )  & 
     107               zrespz2   = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    111108                  &      + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 
    112109 
     
    114111               !  no real reason except that it seems to be more stable and may mimic predation 
    115112               !  --------------------------------------------------------------- 
    116                ztortz2   = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 
     113               ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
    117114               ! 
    118                zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
    119                zcompaz   = MAX( ( trn(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
     115               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
     116               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
    120117               ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    121118               ! it is to predation by mesozooplankton 
    122119               ! ------------------------------------------------------------------------------- 
    123                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
     120               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
    124121                  &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    125                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
     122               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
    126123 
    127124               zfood     = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc  
     
    129126               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    130127               zdenom2   = zdenom / ( zfood + rtrn ) 
    131                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpmes)  
     128               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
    132129 
    133130               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    136133               zgrazpoc  = zgraze2  * xprefpoc * zcompapoc * zdenom2  
    137134 
    138                zgraznf   = zgrazn   * trn(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn) 
    139                zgrazf    = zgrazd   * trn(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn) 
    140                zgrazpof  = zgrazpoc * trn(ji,jj,jk,jpsfe) / ( trn(ji,jj,jk,jppoc) + rtrn) 
     135               zgraznf   = zgrazn   * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 
     136               zgrazf    = zgrazd   * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 
     137               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    141138 
    142139               !  Mesozooplankton flux feeding on GOC 
     
    145142# if ! defined key_kriest 
    146143               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    147                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 
    148                zgrazfffg = zgrazffeg * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     144               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     145               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    149146# endif 
    150147               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     & 
    151                &           * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 
    152                zgrazfffp = zgrazffep * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 
     148               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     149               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    153150              ! 
    154151# if ! defined key_kriest 
     
    159156              ! diatoms based aggregates are more prone to fractionation 
    160157              ! since they are more porous (marine snow instead of fecal pellets) 
    161               zratio    = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     158              zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    162159              zratio2   = zratio * zratio 
    163160              zfrac     = zproport * grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    164                &          * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)          & 
    165                &          * ( 0.1 + 3.9 * zratio2 / ( 1.**2 + zratio2 ) ) 
    166               zfracfe   = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 
     161               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          & 
     162               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
     163              zfracfe   = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    167164 
    168165              zgrazffep = zproport * zgrazffep 
     
    186183 
    187184              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    188               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     185              IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
    189186 
    190187              !    Mesozooplankton efficiency 
     
    216213               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 
    217214               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 
    218                tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trn(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn ) 
    219                tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trn(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    220                tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
    221                tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trn(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn ) 
     215               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     216               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     217               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     218               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    222219               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 
    223220               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
     
    232229               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    233230#if defined key_kriest 
    234               znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     231              znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    235232              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
    236233              tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
     
    249246      END DO 
    250247      ! 
    251       IF( ln_diatrc .AND. lk_iomput .AND. jnt == nrdttrc ) THEN 
    252          zrfact2 = 1.e3 * rfact2r 
    253          CALL iom_put( "GRAZ2", zgrazing(:,:,:) * zrfact2 * tmask(:,:,:) )  ! Total grazing of phyto by zooplankton 
    254          CALL iom_put( "PCAL" , prodcal(:,:,:)  * zrfact2 * tmask(:,:,:) )  ! Calcite production 
     248      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     249         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     250         IF( iom_use( "GRAZ2" ) ) THEN 
     251            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !   Total grazing of phyto by zooplankton 
     252            CALL iom_put( "GRAZ2", zw3d ) 
     253         ENDIF 
     254         IF( iom_use( "PCAL" ) ) THEN 
     255            zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)   !  Calcite production 
     256            CALL iom_put( "PCAL", zw3d )   
     257         ENDIF 
     258         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    255259      ENDIF 
    256260      ! 
     
    261265      ENDIF 
    262266      ! 
    263       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     267      IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    264268      ! 
    265269      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
     
    334338 
    335339   !!====================================================================== 
    336 END MODULE  p4zmeso 
     340END MODULE p4zmeso 
Note: See TracChangeset for help on using the changeset viewer.