Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
- Timestamp:
- 2020-02-12T15:39:06+01:00 (4 years ago)
- Location:
- NEMO/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEAD ext/AGRIF5 ^/vendors/AGRIF/dev_r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL
-
- Property svn:externals
-
NEMO/trunk/src/TOP/PISCES/P4Z/p5zmeso.F90
r12276 r12377 51 51 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 52 52 53 !! * Substitutions 54 # include "do_loop_substitute.h90" 53 55 !!---------------------------------------------------------------------- 54 56 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 59 61 CONTAINS 60 62 61 SUBROUTINE p5z_meso( kt, knt )63 SUBROUTINE p5z_meso( kt, knt, Kbb, Krhs ) 62 64 !!--------------------------------------------------------------------- 63 65 !! *** ROUTINE p5z_meso *** … … 67 69 !! ** Method : - ??? 68 70 !!--------------------------------------------------------------------- 69 INTEGER, INTENT(in) :: kt, knt ! ocean time step 71 INTEGER, INTENT(in) :: kt, knt ! ocean time step 72 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 70 73 INTEGER :: ji, jj, jk 71 74 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames … … 86 89 CHARACTER (len=25) :: charout 87 90 REAL(wp) :: zrfact2, zmetexcess 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 2, zfezoo2,zz2ligprod91 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2, zz2ligprod 89 92 90 93 !!--------------------------------------------------------------------- … … 92 95 IF( ln_timing ) CALL timing_start('p5z_meso') 93 96 ! 94 95 97 zmetexcess = 0.0 96 98 IF ( bmetexc2 ) zmetexcess = 1.0 97 99 98 DO jk = 1, jpkm1 99 DO jj = 1, jpj 100 DO ji = 1, jpi 101 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 102 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 103 104 ! Michaelis-Menten mortality rates of mesozooplankton 105 ! --------------------------------------------------- 106 zrespz = resrat2 * zfact * ( trb(ji,jj,jk,jpmes) / ( xkmort + trb(ji,jj,jk,jpmes) ) & 107 & + 3. * nitrfac(ji,jj,jk) ) 108 109 ! Zooplankton mortality. A square function has been selected with 110 ! no real reason except that it seems to be more stable and may mimic predation 111 ! --------------------------------------------------------------- 112 ztortz = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 113 114 ! Computation of the abundance of the preys 115 ! A threshold can be specified in the namelist 116 ! -------------------------------------------- 117 zcompadi = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 118 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthresh2zoo ), 0.e0 ) 119 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthresh2phy ), 0.e0 ) 120 zcompapoc = MAX( ( trb(ji,jj,jk,jppoc) - xthresh2poc ), 0.e0 ) 121 zcompames = MAX( ( trb(ji,jj,jk,jpmes) - xthresh2mes ), 0.e0 ) 122 123 ! Mesozooplankton grazing 124 ! ------------------------ 125 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 126 & + xpref2m * zcompames 127 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 128 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk)) 130 131 ! An active switching parameterization is used here. 132 ! We don't use the KTW parameterization proposed by 133 ! Vallina et al. because it tends to produce to steady biomass 134 ! composition and the variance of Chl is too low as it grazes 135 ! too strongly on winning organisms. Thus, instead of a square 136 ! a 1.5 power value is used which decreases the pressure on the 137 ! most abundant species 138 ! ------------------------------------------------------------ 139 ztmp1 = xpref2n * zcompaph**1.5 140 ztmp2 = xpref2m * zcompames**1.5 141 ztmp3 = xpref2c * zcompapoc**1.5 142 ztmp4 = xpref2d * zcompadi**1.5 143 ztmp5 = xpref2z * zcompaz**1.5 144 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 145 ztmp1 = ztmp1 / ztmptot 146 ztmp2 = ztmp2 / ztmptot 147 ztmp3 = ztmp3 / ztmptot 148 ztmp4 = ztmp4 / ztmptot 149 ztmp5 = ztmp5 / ztmptot 150 151 ! Mesozooplankton regular grazing on the different preys 152 ! ------------------------------------------------------ 153 zgrazdc = zgraze2 * ztmp4 * zdenom 154 zgrazdn = zgrazdc * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn) 155 zgrazdp = zgrazdc * trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn) 156 zgrazdf = zgrazdc * trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn) 157 zgrazz = zgraze2 * ztmp5 * zdenom 158 zgrazm = zgraze2 * ztmp2 * zdenom 159 zgraznc = zgraze2 * ztmp1 * zdenom 160 zgraznn = zgraznc * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn) 161 zgraznp = zgraznc * trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn) 162 zgraznf = zgraznc * trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn) 163 zgrazpoc = zgraze2 * ztmp3 * zdenom 164 zgrazpon = zgrazpoc * trb(ji,jj,jk,jppon) / ( trb(ji,jj,jk,jppoc) + rtrn) 165 zgrazpop = zgrazpoc * trb(ji,jj,jk,jppop) / ( trb(ji,jj,jk,jppoc) + rtrn) 166 zgrazpof = zgrazpoc * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn) 167 168 ! Mesozooplankton flux feeding on GOC 169 ! ---------------------------------- 170 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 171 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 172 & * (1. - nitrfac(ji,jj,jk)) 173 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 174 zgrazffng = zgrazffeg * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn) 175 zgrazffpg = zgrazffeg * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 176 zgrazffep = grazflux * xstep * wsbio3(ji,jj,jk) & 177 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) & 178 & * (1. - nitrfac(ji,jj,jk)) 179 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 180 zgrazffnp = zgrazffep * trb(ji,jj,jk,jppon) / (trb(ji,jj,jk,jppoc) + rtrn) 181 zgrazffpp = zgrazffep * trb(ji,jj,jk,jppop) / (trb(ji,jj,jk,jppoc) + rtrn) 182 ! 183 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 184 185 ! Compute the proportion of filter feeders 186 ! ---------------------------------------- 187 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 188 189 ! Compute fractionation of aggregates. It is assumed that 190 ! diatoms based aggregates are more prone to fractionation 191 ! since they are more porous (marine snow instead of fecal pellets) 192 ! ---------------------------------------------------------------- 193 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 194 zratio2 = zratio * zratio 195 zfracc = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 196 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 197 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 198 zfracfe = zfracc * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 199 zfracn = zfracc * trb(ji,jj,jk,jpgon) / (trb(ji,jj,jk,jpgoc) + rtrn) 200 zfracp = zfracc * trb(ji,jj,jk,jpgop) / (trb(ji,jj,jk,jpgoc) + rtrn) 201 202 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 203 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 204 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 205 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 206 207 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 208 zgraztotf = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3 + zgrazpof & 209 & + zgrazfffp + zgrazfffg 210 zgraztotn = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon & 211 & + zgrazffnp + zgrazffng 212 zgraztotp = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop & 213 & + zgrazffpp + zgrazffpg 214 215 216 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 217 zgrazing2(ji,jj,jk) = zgraztotc 218 219 ! Stoichiometruc ratios of the food ingested by zooplanton 220 ! -------------------------------------------------------- 221 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 222 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 223 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 224 225 ! Growth efficiency is made a function of the quality 226 ! and the quantity of the preys 227 ! --------------------------------------------------- 228 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 229 zbeta = MAX(0., (epsher2 - epsher2min) ) 230 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 231 zepsherv = zepsherf * zepshert 232 233 ! Respiration of mesozooplankton 234 ! Excess carbon in the food is used preferentially 235 ! ---------------- ------------------------------ 236 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 237 zbasresb = MAX(0., zrespz - zexcess) 238 zbasresi = zexcess + MIN(0., zrespz - zexcess) 239 zrespirc = srespir2 * zepsherv * zgraztotc + zbasresb 240 241 ! When excess carbon is used, the other elements in excess 242 ! are also used proportionally to their abundance 243 ! -------------------------------------------------------- 244 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 245 zbasresn = zbasresi * zexcess * zgrasratn 246 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 247 zbasresp = zbasresi * zexcess * zgrasratp 248 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 249 zbasresf = zbasresi * zexcess * zgrasratf 250 251 ! Voiding of the excessive elements as organic matter 252 ! -------------------------------------------------------- 253 zgradoct = (1. - unass2c - zepsherv) * zgraztotc - zbasresi 254 zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 255 zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 256 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 257 ztmp1 = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 258 zgradoc = (zgradoct + ztmp1) * ssigma2 259 zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2 260 zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2 261 zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 262 263 ! Since only semilabile DOM is represented in PISCES 264 ! part of DOM is in fact labile and is then released 265 ! as dissolved inorganic compounds (ssigma2) 266 ! -------------------------------------------------- 267 zgrarem = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 268 zgraren = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 269 zgrarep = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 270 zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 271 272 ! Defecation as a result of non assimilated products 273 ! -------------------------------------------------- 274 zgrapoc = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 275 zgrapon = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 276 zgrapop = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 277 zgrapof = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 278 279 ! Addition of respiration to the release of inorganic nutrients 280 ! ------------------------------------------------------------- 281 zgrarem = zgrarem + zbasresi + zrespirc 282 zgraren = zgraren + zbasresn + zrespirc * no3rat3 283 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 284 zgraref = zgraref + zbasresf + zrespirc * ferat3 285 286 ! Update the arrays TRA which contain the biological sources and 287 ! sinks 288 ! -------------------------------------------------------------- 289 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep 290 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren 291 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 292 ! 293 IF( ln_ligand ) THEN 294 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 295 zz2ligprod(ji,jj,jk) = zgradoc * ldocz 296 ENDIF 297 ! 298 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon 299 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop 300 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 301 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 302 zfezoo2(ji,jj,jk) = zgraref 303 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 304 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren 305 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) + zepsherv * zgraztotc - zrespirc & 306 & - ztortz - zgrazm 307 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazdc 308 tra(ji,jj,jk,jpndi) = tra(ji,jj,jk,jpndi) - zgrazdn 309 tra(ji,jj,jk,jppdi) = tra(ji,jj,jk,jppdi) - zgrazdp 310 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazdf 311 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) - zgrazz 312 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc 313 tra(ji,jj,jk,jpnph) = tra(ji,jj,jk,jpnph) - zgraznn 314 tra(ji,jj,jk,jppph) = tra(ji,jj,jk,jppph) - zgraznp 315 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) - zgraznf 316 tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) - zgraznc * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpphy) + rtrn ) 317 tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) - zgrazdc * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpdia) + rtrn ) 318 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zgrazdc * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 319 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zgrazdc * trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 320 321 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfracc 322 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc 323 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 324 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zgrazpon - zgrazffnp + zfracn 325 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zgrazpop - zgrazffpp + zfracp 326 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zgrazffeg + zgrapoc - zfracc 327 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc 328 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 329 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) - zgrazffng + zgrapon - zfracn 330 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zgrazffpg + zgrapop - zfracp 331 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 332 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg + zgrapof - zfracfe 333 zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 334 zgrazcal = zgrazffeg * (1. - part2) * zfracal 335 336 ! calcite production 337 ! ------------------ 338 zprcaca = xfracal(ji,jj,jk) * zgraznc 339 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 340 zprcaca = part2 * zprcaca 341 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 342 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * ( zgrazcal - zprcaca ) 343 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 344 END DO 345 END DO 346 END DO 347 ! 348 IF( lk_iomput .AND. knt == nrdttrc ) THEN 349 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 350 IF( iom_use("GRAZ2") ) THEN ! Total grazing of phyto by zooplankton 351 zgrazing2(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ2" , zgrazing2(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 100 DO_3D_11_11( 1, jpkm1 ) 101 zcompam = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - 1.e-9 ), 0.e0 ) 102 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 103 104 ! Michaelis-Menten mortality rates of mesozooplankton 105 ! --------------------------------------------------- 106 zrespz = resrat2 * zfact * ( tr(ji,jj,jk,jpmes,Kbb) / ( xkmort + tr(ji,jj,jk,jpmes,Kbb) ) & 107 & + 3. * nitrfac(ji,jj,jk) ) 108 109 ! Zooplankton mortality. A square function has been selected with 110 ! no real reason except that it seems to be more stable and may mimic predation 111 ! --------------------------------------------------------------- 112 ztortz = mzrat2 * 1.e6 * zfact * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 113 114 ! Computation of the abundance of the preys 115 ! A threshold can be specified in the namelist 116 ! -------------------------------------------- 117 zcompadi = MAX( ( tr(ji,jj,jk,jpdia,Kbb) - xthresh2dia ), 0.e0 ) 118 zcompaz = MAX( ( tr(ji,jj,jk,jpzoo,Kbb) - xthresh2zoo ), 0.e0 ) 119 zcompaph = MAX( ( tr(ji,jj,jk,jpphy,Kbb) - xthresh2phy ), 0.e0 ) 120 zcompapoc = MAX( ( tr(ji,jj,jk,jppoc,Kbb) - xthresh2poc ), 0.e0 ) 121 zcompames = MAX( ( tr(ji,jj,jk,jpmes,Kbb) - xthresh2mes ), 0.e0 ) 122 123 ! Mesozooplankton grazing 124 ! ------------------------ 125 zfood = xpref2d * zcompadi + xpref2z * zcompaz + xpref2n * zcompaph + xpref2c * zcompapoc & 126 & + xpref2m * zcompames 127 zfoodlim = MAX( 0., zfood - MIN( 0.5 * zfood, xthresh2 ) ) 128 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 129 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpmes,Kbb) * (1. - nitrfac(ji,jj,jk)) 130 131 ! An active switching parameterization is used here. 132 ! We don't use the KTW parameterization proposed by 133 ! Vallina et al. because it tends to produce to steady biomass 134 ! composition and the variance of Chl is too low as it grazes 135 ! too strongly on winning organisms. Thus, instead of a square 136 ! a 1.5 power value is used which decreases the pressure on the 137 ! most abundant species 138 ! ------------------------------------------------------------ 139 ztmp1 = xpref2n * zcompaph**1.5 140 ztmp2 = xpref2m * zcompames**1.5 141 ztmp3 = xpref2c * zcompapoc**1.5 142 ztmp4 = xpref2d * zcompadi**1.5 143 ztmp5 = xpref2z * zcompaz**1.5 144 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 145 ztmp1 = ztmp1 / ztmptot 146 ztmp2 = ztmp2 / ztmptot 147 ztmp3 = ztmp3 / ztmptot 148 ztmp4 = ztmp4 / ztmptot 149 ztmp5 = ztmp5 / ztmptot 150 151 ! Mesozooplankton regular grazing on the different preys 152 ! ------------------------------------------------------ 153 zgrazdc = zgraze2 * ztmp4 * zdenom 154 zgrazdn = zgrazdc * tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 155 zgrazdp = zgrazdc * tr(ji,jj,jk,jppdi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 156 zgrazdf = zgrazdc * tr(ji,jj,jk,jpdfe,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn) 157 zgrazz = zgraze2 * ztmp5 * zdenom 158 zgrazm = zgraze2 * ztmp2 * zdenom 159 zgraznc = zgraze2 * ztmp1 * zdenom 160 zgraznn = zgraznc * tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 161 zgraznp = zgraznc * tr(ji,jj,jk,jppph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 162 zgraznf = zgraznc * tr(ji,jj,jk,jpnfe,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn) 163 zgrazpoc = zgraze2 * ztmp3 * zdenom 164 zgrazpon = zgrazpoc * tr(ji,jj,jk,jppon,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 165 zgrazpop = zgrazpoc * tr(ji,jj,jk,jppop,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 166 zgrazpof = zgrazpoc * tr(ji,jj,jk,jpsfe,Kbb) / ( tr(ji,jj,jk,jppoc,Kbb) + rtrn) 167 168 ! Mesozooplankton flux feeding on GOC 169 ! ---------------------------------- 170 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 171 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 172 & * (1. - nitrfac(ji,jj,jk)) 173 zgrazfffg = zgrazffeg * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 174 zgrazffng = zgrazffeg * tr(ji,jj,jk,jpgon,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 175 zgrazffpg = zgrazffeg * tr(ji,jj,jk,jpgop,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 176 zgrazffep = grazflux * xstep * wsbio3(ji,jj,jk) & 177 & * tgfunc2(ji,jj,jk) * tr(ji,jj,jk,jppoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 178 & * (1. - nitrfac(ji,jj,jk)) 179 zgrazfffp = zgrazffep * tr(ji,jj,jk,jpsfe,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 180 zgrazffnp = zgrazffep * tr(ji,jj,jk,jppon,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 181 zgrazffpp = zgrazffep * tr(ji,jj,jk,jppop,Kbb) / (tr(ji,jj,jk,jppoc,Kbb) + rtrn) 182 ! 183 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 184 185 ! Compute the proportion of filter feeders 186 ! ---------------------------------------- 187 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztotc) 188 189 ! Compute fractionation of aggregates. It is assumed that 190 ! diatoms based aggregates are more prone to fractionation 191 ! since they are more porous (marine snow instead of fecal pellets) 192 ! ---------------------------------------------------------------- 193 zratio = tr(ji,jj,jk,jpgsi,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 194 zratio2 = zratio * zratio 195 zfracc = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 196 & * tr(ji,jj,jk,jpgoc,Kbb) * tr(ji,jj,jk,jpmes,Kbb) & 197 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 198 zfracfe = zfracc * tr(ji,jj,jk,jpbfe,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 199 zfracn = zfracc * tr(ji,jj,jk,jpgon,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 200 zfracp = zfracc * tr(ji,jj,jk,jpgop,Kbb) / (tr(ji,jj,jk,jpgoc,Kbb) + rtrn) 201 202 zgrazffep = zproport * zgrazffep ; zgrazffeg = zproport * zgrazffeg 203 zgrazfffp = zproport * zgrazfffp ; zgrazfffg = zproport * zgrazfffg 204 zgrazffnp = zproport * zgrazffnp ; zgrazffng = zproport * zgrazffng 205 zgrazffpp = zproport * zgrazffpp ; zgrazffpg = zproport * zgrazffpg 206 207 zgraztotc = zgrazdc + zgrazz + zgraznc + zgrazm + zgrazpoc + zgrazffep + zgrazffeg 208 zgraztotf = zgrazdf + zgraznf + ( zgrazz + zgrazm ) * ferat3 + zgrazpof & 209 & + zgrazfffp + zgrazfffg 210 zgraztotn = zgrazdn + (zgrazm + zgrazz) * no3rat3 + zgraznn + zgrazpon & 211 & + zgrazffnp + zgrazffng 212 zgraztotp = zgrazdp + (zgrazz + zgrazm) * po4rat3 + zgraznp + zgrazpop & 213 & + zgrazffpp + zgrazffpg 214 215 216 ! Total grazing ( grazing by microzoo is already computed in p5zmicro ) 217 zgrazing(ji,jj,jk) = zgraztotc 218 219 ! Stoichiometruc ratios of the food ingested by zooplanton 220 ! -------------------------------------------------------- 221 zgrasratf = (zgraztotf + rtrn) / ( zgraztotc + rtrn ) 222 zgrasratn = (zgraztotn + rtrn) / ( zgraztotc + rtrn ) 223 zgrasratp = (zgraztotp + rtrn) / ( zgraztotc + rtrn ) 224 225 ! Growth efficiency is made a function of the quality 226 ! and the quantity of the preys 227 ! --------------------------------------------------- 228 zepshert = MIN( 1., zgrasratn/ no3rat3, zgrasratp/ po4rat3, zgrasratf / ferat3) 229 zbeta = MAX(0., (epsher2 - epsher2min) ) 230 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 231 zepsherv = zepsherf * zepshert 232 233 ! Respiration of mesozooplankton 234 ! Excess carbon in the food is used preferentially 235 ! ---------------- ------------------------------ 236 zexcess = zgraztotc * zepsherf * (1.0 - zepshert) * zmetexcess 237 zbasresb = MAX(0., zrespz - zexcess) 238 zbasresi = zexcess + MIN(0., zrespz - zexcess) 239 zrespirc = srespir2 * zepsherv * zgraztotc + zbasresb 240 241 ! When excess carbon is used, the other elements in excess 242 ! are also used proportionally to their abundance 243 ! -------------------------------------------------------- 244 zexcess = ( zgrasratn/ no3rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 245 zbasresn = zbasresi * zexcess * zgrasratn 246 zexcess = ( zgrasratp/ po4rat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 247 zbasresp = zbasresi * zexcess * zgrasratp 248 zexcess = ( zgrasratf/ ferat3 - zepshert ) / ( 1.0 - zepshert + rtrn) 249 zbasresf = zbasresi * zexcess * zgrasratf 250 251 ! Voiding of the excessive elements as organic matter 252 ! -------------------------------------------------------- 253 zgradoct = (1. - unass2c - zepsherv) * zgraztotc - zbasresi 254 zgradont = (1. - unass2n) * zgraztotn - zepsherv * no3rat3 * zgraztotc - zbasresn 255 zgradopt = (1. - unass2p) * zgraztotp - zepsherv * po4rat3 * zgraztotc - zbasresp 256 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 257 ztmp1 = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 258 zgradoc = (zgradoct + ztmp1) * ssigma2 259 zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2 260 zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2 261 zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 262 263 ! Since only semilabile DOM is represented in PISCES 264 ! part of DOM is in fact labile and is then released 265 ! as dissolved inorganic compounds (ssigma2) 266 ! -------------------------------------------------- 267 zgrarem = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 268 zgraren = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 269 zgrarep = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 270 zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 271 272 ! Defecation as a result of non assimilated products 273 ! -------------------------------------------------- 274 zgrapoc = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 275 zgrapon = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 276 zgrapop = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 277 zgrapof = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 278 279 ! Addition of respiration to the release of inorganic nutrients 280 ! ------------------------------------------------------------- 281 zgrarem = zgrarem + zbasresi + zrespirc 282 zgraren = zgraren + zbasresn + zrespirc * no3rat3 283 zgrarep = zgrarep + zbasresp + zrespirc * po4rat3 284 zgraref = zgraref + zbasresf + zrespirc * ferat3 285 286 ! Update the arrays TRA which contain the biological sources and 287 ! sinks 288 ! -------------------------------------------------------------- 289 tr(ji,jj,jk,jppo4,Krhs) = tr(ji,jj,jk,jppo4,Krhs) + zgrarep 290 tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + zgraren 291 tr(ji,jj,jk,jpdoc,Krhs) = tr(ji,jj,jk,jpdoc,Krhs) + zgradoc 292 ! 293 IF( ln_ligand ) THEN 294 tr(ji,jj,jk,jplgw,Krhs) = tr(ji,jj,jk,jplgw,Krhs) + zgradoc * ldocz 295 zz2ligprod(ji,jj,jk) = zgradoc * ldocz 296 ENDIF 297 ! 298 tr(ji,jj,jk,jpdon,Krhs) = tr(ji,jj,jk,jpdon,Krhs) + zgradon 299 tr(ji,jj,jk,jpdop,Krhs) = tr(ji,jj,jk,jpdop,Krhs) + zgradop 300 tr(ji,jj,jk,jpoxy,Krhs) = tr(ji,jj,jk,jpoxy,Krhs) - o2ut * zgrarem 301 tr(ji,jj,jk,jpfer,Krhs) = tr(ji,jj,jk,jpfer,Krhs) + zgraref 302 zfezoo2(ji,jj,jk) = zgraref 303 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrarem 304 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + rno3 * zgraren 305 tr(ji,jj,jk,jpmes,Krhs) = tr(ji,jj,jk,jpmes,Krhs) + zepsherv * zgraztotc - zrespirc & 306 & - ztortz - zgrazm 307 tr(ji,jj,jk,jpdia,Krhs) = tr(ji,jj,jk,jpdia,Krhs) - zgrazdc 308 tr(ji,jj,jk,jpndi,Krhs) = tr(ji,jj,jk,jpndi,Krhs) - zgrazdn 309 tr(ji,jj,jk,jppdi,Krhs) = tr(ji,jj,jk,jppdi,Krhs) - zgrazdp 310 tr(ji,jj,jk,jpdfe,Krhs) = tr(ji,jj,jk,jpdfe,Krhs) - zgrazdf 311 tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) - zgrazz 312 tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) - zgraznc 313 tr(ji,jj,jk,jpnph,Krhs) = tr(ji,jj,jk,jpnph,Krhs) - zgraznn 314 tr(ji,jj,jk,jppph,Krhs) = tr(ji,jj,jk,jppph,Krhs) - zgraznp 315 tr(ji,jj,jk,jpnfe,Krhs) = tr(ji,jj,jk,jpnfe,Krhs) - zgraznf 316 tr(ji,jj,jk,jpnch,Krhs) = tr(ji,jj,jk,jpnch,Krhs) - zgraznc * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 317 tr(ji,jj,jk,jpdch,Krhs) = tr(ji,jj,jk,jpdch,Krhs) - zgrazdc * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 318 tr(ji,jj,jk,jpdsi,Krhs) = tr(ji,jj,jk,jpdsi,Krhs) - zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 319 tr(ji,jj,jk,jpgsi,Krhs) = tr(ji,jj,jk,jpgsi,Krhs) + zgrazdc * tr(ji,jj,jk,jpdsi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 320 321 tr(ji,jj,jk,jppoc,Krhs) = tr(ji,jj,jk,jppoc,Krhs) - zgrazpoc - zgrazffep + zfracc 322 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc 323 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 324 tr(ji,jj,jk,jppon,Krhs) = tr(ji,jj,jk,jppon,Krhs) - zgrazpon - zgrazffnp + zfracn 325 tr(ji,jj,jk,jppop,Krhs) = tr(ji,jj,jk,jppop,Krhs) - zgrazpop - zgrazffpp + zfracp 326 tr(ji,jj,jk,jpgoc,Krhs) = tr(ji,jj,jk,jpgoc,Krhs) - zgrazffeg + zgrapoc - zfracc 327 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc 328 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 329 tr(ji,jj,jk,jpgon,Krhs) = tr(ji,jj,jk,jpgon,Krhs) - zgrazffng + zgrapon - zfracn 330 tr(ji,jj,jk,jpgop,Krhs) = tr(ji,jj,jk,jpgop,Krhs) - zgrazffpg + zgrapop - zfracp 331 tr(ji,jj,jk,jpsfe,Krhs) = tr(ji,jj,jk,jpsfe,Krhs) - zgrazpof - zgrazfffp + zfracfe 332 tr(ji,jj,jk,jpbfe,Krhs) = tr(ji,jj,jk,jpbfe,Krhs) - zgrazfffg + zgrapof - zfracfe 333 zfracal = tr(ji,jj,jk,jpcal,Kbb) / ( tr(ji,jj,jk,jpgoc,Kbb) + rtrn ) 334 zgrazcal = zgrazffeg * (1. - part2) * zfracal 335 336 ! calcite production 337 ! ------------------ 338 zprcaca = xfracal(ji,jj,jk) * zgraznc 339 prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 340 zprcaca = part2 * zprcaca 341 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zgrazcal - zprcaca 342 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + 2. * ( zgrazcal - zprcaca ) 343 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zgrazcal + zprcaca 344 END_3D 345 ! 346 IF( lk_iomput .AND. knt == nrdttrc ) THEN 347 CALL iom_put( "PCAL" , prodcal(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) ! Calcite production 348 IF( iom_use("GRAZ2") ) THEN ! Total grazing of phyto by zooplankton 349 zgrazing(:,:,jpk) = 0._wp ; CALL iom_put( "GRAZ2" , zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 352 350 ENDIF 353 351 IF( iom_use("FEZOO2") ) THEN … … 359 357 ENDIF 360 358 ! 361 IF( ln_ctl) THEN ! print mean trends (used for debugging)359 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 362 360 WRITE(charout, FMT="('meso')") 363 361 CALL prt_ctl_trc_info(charout) 364 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)362 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 365 363 ENDIF 366 364 ! … … 390 388 !!---------------------------------------------------------------------- 391 389 ! 392 REWIND( numnatp_ref )393 390 READ ( numnatp_ref, namp5zmes, IOSTAT = ios, ERR = 901) 394 391 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in reference namelist' ) 395 392 ! 396 REWIND( numnatp_cfg )397 393 READ ( numnatp_cfg, namp5zmes, IOSTAT = ios, ERR = 902 ) 398 394 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismes in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.