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 5965 for branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90 – NEMO

Ignore:
Timestamp:
2015-12-01T16:35:30+01:00 (8 years ago)
Author:
timgraham
Message:

Upgraded branch to r5518 of trunk (v3.6 stable revision)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_r4650_UKMO14.5_SST_BIAS_CORRECTION/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r4624 r5965  
    6060CONTAINS 
    6161 
    62    SUBROUTINE p4z_meso( kt, jnt ) 
     62   SUBROUTINE p4z_meso( kt, knt ) 
    6363      !!--------------------------------------------------------------------- 
    6464      !!                     ***  ROUTINE p4z_meso  *** 
     
    6868      !! ** Method  : - ??? 
    6969      !!--------------------------------------------------------------------- 
    70       INTEGER, INTENT(in) ::   kt, jnt ! ocean time step 
     70      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    7171      INTEGER  :: ji, jj, jk 
    7272      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
     
    8383      REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 
    8484      CHARACTER (len=25) :: charout 
    85       REAL(wp) :: zrfact2 
    86       REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 
     85      REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 
    8786 
    8887      !!--------------------------------------------------------------------- 
     
    9089      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    9190      ! 
    92       IF( ln_diatrc .AND. lk_iomput ) THEN 
     91      IF( lk_iomput ) THEN 
    9392         CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    9493         zgrazing(:,:,:) = 0._wp 
     
    9897         DO jj = 1, jpj 
    9998            DO ji = 1, jpi 
    100                zcompam   = MAX( ( trn(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
     99               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
    101100# if defined key_degrad 
    102101               zstep     = xstep * facvol(ji,jj,jk) 
     
    108107               !  Respiration rates of both zooplankton 
    109108               !  ------------------------------------- 
    110                zrespz2   = resrat2 * zfact * trn(ji,jj,jk,jpmes) / ( xkmort + trn(ji,jj,jk,jpmes) )  & 
     109               zrespz2   = resrat2 * zfact * trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) )  & 
    111110                  &      + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 
    112111 
     
    114113               !  no real reason except that it seems to be more stable and may mimic predation 
    115114               !  --------------------------------------------------------------- 
    116                ztortz2   = mzrat2 * 1.e6 * zfact * trn(ji,jj,jk,jpmes) 
     115               ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
    117116               ! 
    118                zcompadi  = MAX( ( trn(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
    119                zcompaz   = MAX( ( trn(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
     117               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
     118               zcompaz   = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 
    120119               ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 
    121120               ! it is to predation by mesozooplankton 
    122121               ! ------------------------------------------------------------------------------- 
    123                zcompaph  = MAX( ( trn(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
     122               zcompaph  = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 
    124123                  &      * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 
    125                zcompapoc = MAX( ( trn(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
     124               zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 
    126125 
    127126               zfood     = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc  
     
    129128               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    130129               zdenom2   = zdenom / ( zfood + rtrn ) 
    131                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpmes)  
     130               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
    132131 
    133132               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    136135               zgrazpoc  = zgraze2  * xprefpoc * zcompapoc * zdenom2  
    137136 
    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) 
     137               zgraznf   = zgrazn   * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 
     138               zgrazf    = zgrazd   * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 
     139               zgrazpof  = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 
    141140 
    142141               !  Mesozooplankton flux feeding on GOC 
     
    145144# if ! defined key_kriest 
    146145               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) 
     146               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     147               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    149148# endif 
    150149               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) 
     150               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     151               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    153152              ! 
    154153# if ! defined key_kriest 
     
    159158              ! diatoms based aggregates are more prone to fractionation 
    160159              ! since they are more porous (marine snow instead of fecal pellets) 
    161               zratio    = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 
     160              zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    162161              zratio2   = zratio * zratio 
    163162              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) 
     163               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          & 
     164               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
     165              zfracfe   = zfrac * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    167166 
    168167              zgrazffep = zproport * zgrazffep 
     
    186185 
    187186              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    188               IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     187              IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
    189188 
    190189              !    Mesozooplankton efficiency 
     
    216215               tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 
    217216               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 ) 
     217               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
     218               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     219               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
     220               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    222221               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 
    223222               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
     
    232231               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    233232#if defined key_kriest 
    234               znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 
     233              znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    235234              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
    236235              tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
     
    249248      END DO 
    250249      ! 
    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 
     250      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     251         CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     252         IF( iom_use( "GRAZ2" ) ) THEN 
     253            zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !   Total grazing of phyto by zooplankton 
     254            CALL iom_put( "GRAZ2", zw3d ) 
     255         ENDIF 
     256         IF( iom_use( "PCAL" ) ) THEN 
     257            zw3d(:,:,:) = prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)   !  Calcite production 
     258            CALL iom_put( "PCAL", zw3d )   
     259         ENDIF 
     260         CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    255261      ENDIF 
    256262      ! 
     
    261267      ENDIF 
    262268      ! 
    263       IF( ln_diatrc .AND. lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     269      IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    264270      ! 
    265271      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
Note: See TracChangeset for help on using the changeset viewer.