Changeset 6225 for branches/2014/dev_r4704_NOC5_MPP_BDY_UPDATE/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
- Timestamp:
- 2016-01-08T10:35:19+01:00 (8 years ago)
- 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 50 50 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 51 51 52 !!* Substitution53 # include "top_substitute.h90"54 52 !!---------------------------------------------------------------------- 55 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 60 58 CONTAINS 61 59 62 SUBROUTINE p4z_meso( kt, jnt )60 SUBROUTINE p4z_meso( kt, knt ) 63 61 !!--------------------------------------------------------------------- 64 62 !! *** ROUTINE p4z_meso *** … … 68 66 !! ** Method : - ??? 69 67 !!--------------------------------------------------------------------- 70 INTEGER, INTENT(in) :: kt, jnt ! ocean time step68 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 69 INTEGER :: ji, jj, jk 72 70 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 83 81 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 84 82 CHARACTER (len=25) :: charout 85 REAL(wp) :: zrfact2 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 87 84 88 85 !!--------------------------------------------------------------------- … … 90 87 IF( nn_timing == 1 ) CALL timing_start('p4z_meso') 91 88 ! 92 IF( l n_diatrc .AND. lk_iomput ) THEN89 IF( lk_iomput ) THEN 93 90 CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 94 91 zgrazing(:,:,:) = 0._wp … … 98 95 DO jj = 1, jpj 99 96 DO ji = 1, jpi 100 zcompam = MAX( ( tr n(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 )97 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 101 98 # if defined key_degrad 102 99 zstep = xstep * facvol(ji,jj,jk) … … 108 105 ! Respiration rates of both zooplankton 109 106 ! ------------------------------------- 110 zrespz2 = resrat2 * zfact * tr n(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) ) & 111 108 & + resrat2 * zfact * 3. * nitrfac(ji,jj,jk) 112 109 … … 114 111 ! no real reason except that it seems to be more stable and may mimic predation 115 112 ! --------------------------------------------------------------- 116 ztortz2 = mzrat2 * 1.e6 * zfact * tr n(ji,jj,jk,jpmes)113 ztortz2 = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 117 114 ! 118 zcompadi = MAX( ( tr n(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 )119 zcompaz = MAX( ( tr n(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 ) 120 117 ! Size effect of nanophytoplankton on grazing : the smaller it is, the less prone 121 118 ! it is to predation by mesozooplankton 122 119 ! ------------------------------------------------------------------------------- 123 zcompaph = MAX( ( tr n(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) &120 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) & 124 121 & * MIN(1., MAX( 0., ( quotan(ji,jj,jk) - 0.2) / 0.3 ) ) 125 zcompapoc = MAX( ( tr n(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 )122 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 126 123 127 124 zfood = xprefc * zcompadi + xprefz * zcompaz + xprefp * zcompaph + xprefpoc * zcompapoc … … 129 126 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 130 127 zdenom2 = zdenom / ( zfood + rtrn ) 131 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpmes)128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 132 129 133 130 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 136 133 zgrazpoc = zgraze2 * xprefpoc * zcompapoc * zdenom2 137 134 138 zgraznf = zgrazn * tr n(ji,jj,jk,jpnfe) / ( trn(ji,jj,jk,jpphy) + rtrn)139 zgrazf = zgrazd * tr n(ji,jj,jk,jpdfe) / ( trn(ji,jj,jk,jpdia) + rtrn)140 zgrazpof = zgrazpoc * tr n(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) 141 138 142 139 ! Mesozooplankton flux feeding on GOC … … 145 142 # if ! defined key_kriest 146 143 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 147 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes)148 zgrazfffg = zgrazffeg * tr n(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) 149 146 # endif 150 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 151 & * tgfunc2(ji,jj,jk) * tr n(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes)152 zgrazfffp = zgrazffep * tr n(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) 153 150 ! 154 151 # if ! defined key_kriest … … 159 156 ! diatoms based aggregates are more prone to fractionation 160 157 ! since they are more porous (marine snow instead of fecal pellets) 161 zratio = tr n(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn )158 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 162 159 zratio2 = zratio * zratio 163 160 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 164 & * tr n(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) &165 & * ( 0. 1 + 3.9* zratio2 / ( 1.**2 + zratio2 ) )166 zfracfe = zfrac * tr n(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) 167 164 168 165 zgrazffep = zproport * zgrazffep … … 186 183 187 184 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 188 IF( l n_diatrc .AND. lk_iomput ) zgrazing(ji,jj,jk) = zgraztot185 IF( lk_iomput ) zgrazing(ji,jj,jk) = zgraztot 189 186 190 187 ! Mesozooplankton efficiency … … 216 213 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 217 214 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgrazn 218 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgrazn * tr n(ji,jj,jk,jpnch) / ( trn(ji,jj,jk,jpphy) + rtrn )219 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazd * tr n(ji,jj,jk,jpdch) / ( trn(ji,jj,jk,jpdia) + rtrn )220 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazd * tr n(ji,jj,jk,jpdsi) / ( trn(ji,jj,jk,jpdia) + rtrn )221 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazd * tr n(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 ) 222 219 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 223 220 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf … … 232 229 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 233 230 #if defined key_kriest 234 znumpoc = tr n(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn )231 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 235 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 236 233 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & … … 249 246 END DO 250 247 ! 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 ) 255 259 ENDIF 256 260 ! … … 261 265 ENDIF 262 266 ! 263 IF( l n_diatrc .AND. lk_iomput ) CALL wrk_dealloc( jpi, jpj, jpk, zgrazing )267 IF( lk_iomput ) CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 264 268 ! 265 269 IF( nn_timing == 1 ) CALL timing_stop('p4z_meso') … … 334 338 335 339 !!====================================================================== 336 END MODULE 340 END MODULE p4zmeso
Note: See TracChangeset
for help on using the changeset viewer.