Changeset 12349
- Timestamp:
- 2020-01-28T17:17:13+01:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zbio.F90
r10227 r12349 105 105 IF( ln_ligand ) & 106 106 & CALL p4z_ligand( kt, knt ) 107 ! Update of the size of the organisms 108 IF (ln_p5z) THEN 109 sized(:,:,:) = sizeda(:,:,:) 110 sizen(:,:,:) = sizena(:,:,:) 111 sizep(:,:,:) = sizepa(:,:,:) 112 ENDIF 107 113 ! ! 108 114 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zint.F90
r10068 r12349 45 45 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 46 46 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) 47 tgfunc3(:,:,:) = EXP( 0.0825 * tsn(:,:,:,jp_tem) ) 47 48 48 49 ! Computation of the silicon dependant half saturation constant for silica uptake -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmeso.F90
r11536 r12349 66 66 REAL(wp) :: zfact , zfood, zfoodlim, zproport, zbeta 67 67 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 68 REAL(wp) :: zepsherf, zepshert, zepsher v, zgrarsig, zgraztotc, zgraztotn, zgraztotf68 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 69 69 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz, zgrasrat, zgrasratn 70 70 REAL(wp) :: zrespz, ztortz, zgrazd, zgrazz, zgrazpof … … 171 171 zbeta = MAX(0., (epsher2 - epsher2min) ) 172 172 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 173 zepsherv = zepsherf * zepshert 174 173 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 175 174 zgrarem2 = zgraztotc * ( 1. - zepsherv - unass2 ) & 176 175 & + ( 1. - epsher2 - unass2 ) / ( 1. - epsher2 ) * ztortz -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p4zmicro.F90
r11536 r12349 64 64 REAL(wp) :: zgraze , zdenom, zdenom2 65 65 REAL(wp) :: zfact , zfood, zfoodlim, zbeta 66 REAL(wp) :: zepsherf, zepshert, zepsher v, zgrarsig, zgraztotc, zgraztotn, zgraztotf66 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zgrarsig, zgraztotc, zgraztotn, zgraztotf 67 67 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 68 68 REAL(wp) :: zrespz, ztortz, zgrasrat, zgrasratn … … 131 131 zbeta = MAX(0., (epsher - epshermin) ) 132 132 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 133 zepsher v = zepsherf * zepshert134 133 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 134 zepsherv = zepsherf * zepshert * zepsherq 135 135 zgrafer = zgraztotc * MAX( 0. , ( 1. - unass ) * zgrasrat - ferat3 * zepsherv ) 136 136 zgrarem = zgraztotc * ( 1. - zepsherv - unass ) -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zlim.F90
r11536 r12349 26 26 27 27 !! * Shared module variables 28 REAL(wp), PUBLIC :: concpno3 !: NO3 , PO4 half saturation29 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for p hyto30 REAL(wp), PUBLIC :: concnpo4 !: NH4 half saturation for diatoms31 REAL(wp), PUBLIC :: concppo4 !: NH4 half saturation for diatoms32 REAL(wp), PUBLIC :: concdpo4 !: NH4 half saturation for diatoms33 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for nanophyto28 REAL(wp), PUBLIC :: concpno3 !: NO3 half saturation for picophyto 29 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for picophyto 30 REAL(wp), PUBLIC :: concnpo4 !: PO4 half saturation for nanophyto 31 REAL(wp), PUBLIC :: concppo4 !: PO4 half saturation for picophyto 32 REAL(wp), PUBLIC :: concdpo4 !: PO4 half saturation for diatoms 33 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for picophyto 34 34 REAL(wp), PUBLIC :: concbpo4 !: PO4 half saturation for bacteria 35 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for diatoms36 REAL(wp), PUBLIC :: xsizerp !: Size ratio for nanophytoplankton35 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for picophyto 36 REAL(wp), PUBLIC :: xsizerp !: Size ratio for picophytoplankton 37 37 REAL(wp), PUBLIC :: qfnopt !: optimal Fe quota for nanophyto 38 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for nanophyto38 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for picophyto 39 39 REAL(wp), PUBLIC :: qfdopt !: optimal Fe quota for diatoms 40 REAL(wp), PUBLIC :: qnnmin !: optimal Fe quota for diatoms41 REAL(wp), PUBLIC :: qnnmax !: optimal Fe quota for diatoms42 REAL(wp), PUBLIC :: qpnmin !: optimal Fe quota for diatoms43 REAL(wp), PUBLIC :: qpnmax !: optimal Fe quota for diatoms44 REAL(wp), PUBLIC :: qnpmin !: optimal Fe quota for diatoms45 REAL(wp), PUBLIC :: qnpmax !: optimal Fe quota for diatoms46 REAL(wp), PUBLIC :: qppmin !: optimal Fe quota for diatoms47 REAL(wp), PUBLIC :: qppmax !: optimal Fe quota for diatoms48 REAL(wp), PUBLIC :: qndmin !: optimal Fequota for diatoms49 REAL(wp), PUBLIC :: qndmax !: optimal Fequota for diatoms50 REAL(wp), PUBLIC :: qpdmin !: optimal Fequota for diatoms51 REAL(wp), PUBLIC :: qpdmax !: optimal Fequota for diatoms52 REAL(wp), PUBLIC :: qfnmax !: optimal Fe quota for diatoms53 REAL(wp), PUBLIC :: qfpmax !: optimal Fe quota for diatoms54 REAL(wp), PUBLIC :: qfdmax !: optimalFe quota for diatoms55 REAL(wp), PUBLIC :: zpsinh4 56 REAL(wp), PUBLIC :: zpsino3 57 REAL(wp), PUBLIC :: zpsiuptk 40 REAL(wp), PUBLIC :: qnnmin !: minimum N quota for nanophyto 41 REAL(wp), PUBLIC :: qnnmax !: maximum N quota for nanophyto 42 REAL(wp), PUBLIC :: qpnmin !: minimum P quota for nanophyto 43 REAL(wp), PUBLIC :: qpnmax !: maximum P quota for nanophyto 44 REAL(wp), PUBLIC :: qnpmin !: minimum N quota for nanophyto 45 REAL(wp), PUBLIC :: qnpmax !: maximum N quota for nanophyto 46 REAL(wp), PUBLIC :: qppmin !: minimum P quota for nanophyto 47 REAL(wp), PUBLIC :: qppmax !: maximum P quota for nanophyto 48 REAL(wp), PUBLIC :: qndmin !: minimum N quota for diatoms 49 REAL(wp), PUBLIC :: qndmax !: maximum N quota for diatoms 50 REAL(wp), PUBLIC :: qpdmin !: minimum P quota for diatoms 51 REAL(wp), PUBLIC :: qpdmax !: maximum P quota for diatoms 52 REAL(wp), PUBLIC :: qfnmax !: maximum Fe quota for nanophyto 53 REAL(wp), PUBLIC :: qfpmax !: maximum Fe quota for picophyto 54 REAL(wp), PUBLIC :: qfdmax !: maximum Fe quota for diatoms 55 REAL(wp), PUBLIC :: zpsinh4 !: respiration cost of NH4 assimilation 56 REAL(wp), PUBLIC :: zpsino3 !: respiration cost of NO3 assimilation 57 REAL(wp), PUBLIC :: zpsiuptk !: Mean respiration cost 58 58 59 59 !!* Allometric variations of the quotas … … 71 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: ??? 72 72 73 !!* Phytoplankton limitation terms73 !!* Phytoplankton nutrient limitation terms 74 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: ??? 75 75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: ??? … … 82 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: ??? 83 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: ??? 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpics !: ??? 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphys !: ??? 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdias !: ??? 84 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: ??? 85 88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk … … 104 107 !! 105 108 !! ** Purpose : Compute the co-limitations by the various nutrients 106 !! for the various phytoplankton species 109 !! for the various phytoplankton species. Quota based 110 !! approach. The quota model is derived from theoretical 111 !! models proposed by Pahlow and Oschlies (2009) and 112 !! Flynn (2001). Various adaptations from several publications 113 !! by these authors have been also adopted. 107 114 !! 108 !! ** Method : - ??? 115 !! ** Method : Quota based approach. The quota model is derived from 116 !! theoretical models by Pahlow and Oschlies (2009) and 117 !! Flynn (2001). Various adaptations from several publications 118 !! by these authors have been also adopted. 109 119 !!--------------------------------------------------------------------- 110 120 ! … … 114 124 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 115 125 REAL(wp) :: z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1 116 REAL(wp) :: zratio, zration, zratiof, znutlim, zfalim 126 REAL(wp) :: zratio, zration, zratiof, znutlim, zfalim, zzpsiuptk 117 127 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4 118 128 REAL(wp) :: zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe … … 122 132 REAL(wp) :: zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 123 133 REAL(wp) :: zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 134 REAL(wp) :: zlim1f, zsizetmp 135 REAL(wp), DIMENSION(jpi,jpj,jpk) :: xlimnpn, xlimnpp, xlimnpd 124 136 !!--------------------------------------------------------------------- 125 137 ! … … 127 139 ! 128 140 zratchl = 6.0 141 sizena(:,:,:) = 0.0 ; sizepa(:,:,:) = 0.0 ; sizeda(:,:,:) = 0.0 129 142 ! 130 143 DO jk = 1, jpkm1 … … 157 170 zconc0dpo4 = concdpo4 * zsized 158 171 159 zsizep = 1.172 zsizep = sizep(ji,jj,jk)**0.81 160 173 zconcpfe = concpfer * zsizep 161 174 zconc0p = concpno3 * zsizep … … 163 176 zconc0ppo4 = concppo4 * zsizep 164 177 165 zsizen = 1.178 zsizen = sizen(ji,jj,jk)**0.81 166 179 zconcnfe = concnfer * zsizen 167 180 zconc0n = concnno3 * zsizen … … 172 185 ! From Talmy et al. (2014) and Maranon et al. (2013) 173 186 ! ------------------------------------------------------- 174 xqnnmin(ji,jj,jk) = qnnmin 187 xqnnmin(ji,jj,jk) = qnnmin * sizen(ji,jj,jk)**(-0.3) 175 188 xqnnmax(ji,jj,jk) = qnnmax 176 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0. 27)189 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.3) 177 190 xqndmax(ji,jj,jk) = qndmax 178 xqnpmin(ji,jj,jk) = qnpmin 179 xqnpmax(ji,jj,jk) = qnpmax 191 xqnpmin(ji,jj,jk) = qnpmin * sizep(ji,jj,jk)**(-0.48) 192 xqnpmax(ji,jj,jk) = qnpmax * sizep(ji,jj,jk)**(-0.21) 180 193 181 194 ! Computation of the optimal allocation parameters … … 236 249 ! 237 250 zration = trb(ji,jj,jk,jpnph) * z1_trnphy 238 zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 239 fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn) & 251 zration = MIN(xqnnmax(ji,jj,jk), MAX( xqnnmin(ji,jj,jk), zration )) 252 zzpsiuptk = xqnnmin(ji,jj,jk) * rno3 / zpsiuptk**2 253 fvnuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnnmin(ji,jj,jk) / (zration + rtrn) & 240 254 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 241 255 ! 242 zlim1 = max(0., (zration - 2. *xqnnmin(ji,jj,jk) ) &243 & / (xqnnmax(ji,jj,jk) - 2. *xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) &256 zlim1 = max(0., (zration - xqnnmin(ji,jj,jk) ) & 257 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 244 258 & / (zration + rtrn) 245 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 246 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 247 xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 259 ! The value of the optimal quota in the formulation below 260 ! has been found by solving a non linear equation 261 zlim1f = max(0., ( 1.086 - xqnnmin(ji,jj,jk) ) & 262 & / (xqnnmax(ji,jj,jk) - xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) 263 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 264 xlimnfe (ji,jj,jk) = MIN( 1., zlim3 ) 265 xlimphy (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 266 xlimphys(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 267 xlimnpn (ji,jj,jk) = MIN( 1., zlim1) 248 268 ! 249 269 ! Michaelis-Menten Limitation term for nutrients picophytoplankton … … 267 287 ! 268 288 zration = trb(ji,jj,jk,jpnpi) * z1_trnpic 269 zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 270 fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn) & 289 zration = MIN(xqnpmax(ji,jj,jk), MAX( xqnpmin(ji,jj,jk), zration )) 290 zzpsiuptk = xqnpmin(ji,jj,jk) * rno3 / zpsiuptk**2 291 fvpuptk(ji,jj,jk) = 1. / zzpsiuptk * xqnpmin(ji,jj,jk) / (zration + rtrn) & 271 292 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 272 293 ! 273 zlim1 = max(0., (zration - 2. *xqnpmin(ji,jj,jk) ) &274 & / (xqnpmax(ji,jj,jk) - 2. *xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) &294 zlim1 = max(0., (zration - xqnpmin(ji,jj,jk) ) & 295 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 275 296 & / (zration + rtrn) 297 ! The value of the optimal quota in the formulation below 298 ! has been found by solving a non linear equation 299 zlim1f = max(0., (1.367 - xqnpmin(ji,jj,jk) ) & 300 & / (xqnpmax(ji,jj,jk) - xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) 276 301 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 277 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 278 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 302 xlimpfe (ji,jj,jk) = MIN( 1., zlim3 ) 303 xlimpic (ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 304 xlimnpp (ji,jj,jk) = MIN( 1., zlim1 ) 305 xlimpics(ji,jj,jk) = MIN( 1., zlim1/( zlim1f + rtrn ), zlim3 ) 279 306 ! 280 307 ! Michaelis-Menten Limitation term for nutrients Diatoms … … 298 325 ! 299 326 zration = trb(ji,jj,jk,jpndi) * z1_trndia 300 zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 301 fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn) & 327 zration = MIN(xqndmax(ji,jj,jk), MAX( xqndmin(ji,jj,jk), zration )) 328 zzpsiuptk = xqndmin(ji,jj,jk) * rno3 / zpsiuptk**2 329 fvduptk(ji,jj,jk) = 1. / zzpsiuptk * xqndmin(ji,jj,jk) / (zration + rtrn) & 302 330 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 303 331 ! 304 zlim1 = max(0., (zration - 2. *xqndmin(ji,jj,jk) ) &305 & / (xqndmax(ji,jj,jk) - 2. *xqndmin(ji,jj,jk) ) ) &332 zlim1 = max(0., (zration - xqndmin(ji,jj,jk) ) & 333 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 306 334 & * xqndmax(ji,jj,jk) / (zration + rtrn) 335 ! The value of the optimal quota in the formulation below 336 ! has been found by solving a non linear equation 337 zlim1f = max(0., (1.077 - xqndmin(ji,jj,jk) ) & 338 & / (xqndmax(ji,jj,jk) - xqndmin(ji,jj,jk) ) ) & 339 & * xqndmax(ji,jj,jk) 307 340 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 308 341 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 309 342 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 310 343 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 344 xlimdias(ji,jj,jk) = MIN (1.0, zlim1 / (zlim1f + rtrn ), zlim3, zlim4 ) 311 345 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 346 xlimnpd(ji,jj,jk) = MIN( 1., zlim1 ) 312 347 END DO 313 348 END DO … … 324 359 ! Size estimation of nanophytoplankton 325 360 ! ------------------------------------ 326 zfvn = 2. * fvnuptk(ji,jj,jk) 327 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 328 361 zcoef = trb(ji,jj,jk,jpphy) - MIN(xsizephy, trb(ji,jj,jk,jpphy) ) 362 sizena(ji,jj,jk) = 1. + ( xsizern -1.0 ) * zcoef / ( xsizephy + zcoef ) 329 363 ! N/P ratio of nanophytoplankton 330 364 ! ------------------------------ 331 zfuptk = 0.23 * zfvn 332 zrpho = 2.24 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 15. + rtrn ) 333 zrass = 1. - 0.2 - zrpho - zfuptk 334 xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 335 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) + 0.13 336 xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16. 365 zfuptk = 0.2 + 0.12 / ( 3.0 * sizen(ji,jj,jk) + rtrn ) 366 zrpho = 1.54 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 14. + rtrn ) 367 zrass = MAX(0.62/4., ( 1. - zrpho - zfuptk ) * xlimnpn(ji,jj,jk) ) 368 xqpnmin(ji,jj,jk) = ( 0.0 + 0.0078 + 0.62/4. * 0.0783 * xqnnmin(ji,jj,jk) ) * 16. 369 xqpnmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16. 370 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) & 371 & + (0.033 + 0.0078 ) * 16. 372 xqpnmax(ji,jj,jk) = MIN( qpnmax, xqpnmax(ji,jj,jk) ) 373 337 374 338 375 ! Size estimation of picophytoplankton 339 376 ! ------------------------------------ 340 z fvn = 2. * fvpuptk(ji,jj,jk)341 sizep (ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ))377 zcoef = trb(ji,jj,jk,jppic) - MIN(xsizepic, trb(ji,jj,jk,jppic) ) 378 sizepa(ji,jj,jk) = 1. + ( xsizerp -1.0 ) * zcoef / ( xsizepic + zcoef ) 342 379 343 380 ! N/P ratio of picophytoplankton 344 381 ! ------------------------------ 345 zfuptk = 0.35 * zfvn 346 zrpho = 2.24 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 15. + rtrn ) 347 zrass = 1. - 0.4 - zrpho - zfuptk 348 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16. 349 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) + 0.13 350 xqppmin(ji,jj,jk) = 0.13 382 zfuptk = 0.2 + 0.12 / ( 0.5 * sizep(ji,jj,jk) + rtrn ) 383 zrpho = 1.54 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 14. + rtrn ) 384 zrass = MAX(0.4/4., ( 1. - zrpho - zfuptk ) * xlimnpp(ji,jj,jk) ) 385 xqppmin(ji,jj,jk) = ( (0.0 + 0.0078 ) + 0.4/4. * 0.0517 * xqnpmin(ji,jj,jk) ) * 16. 386 xqppmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0517 ) * 16. 387 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) & 388 & + (0.033 + 0.0078 ) * 16 389 xqppmax(ji,jj,jk) = MIN( qppmax, xqppmax(ji,jj,jk) ) 351 390 352 391 ! Size estimation of diatoms 353 392 ! -------------------------- 354 zfvn = 2. * fvduptk(ji,jj,jk)355 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) )356 393 zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 357 sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 394 sized(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 395 sizeda(ji,jj,jk) = 1. + ( xsizerd - 1.0 ) * zcoef / ( xsizedia + zcoef ) 358 396 359 397 ! N/P ratio of diatoms 360 398 ! -------------------- 361 zfuptk = 0.2 * zfvn 362 zrpho = 2.24 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 15. + rtrn ) 363 zrass = 1. - 0.2 - zrpho - zfuptk 364 xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 365 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) + 0.13 366 xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 399 zfuptk = 0.2 + 0.12 / ( 5.0 * sized(ji,jj,jk) + rtrn ) 400 zrpho = 1.54 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 14. + rtrn ) 401 zrass = MAX(0.66/4., ( 1. - zrpho - zfuptk ) * xlimnpd(ji,jj,jk) ) 402 403 xqpdmin(ji,jj,jk) = ( ( 0.0 + 0.0078 ) + 0.66/4. * 0.0783 * xqndmin(ji,jj,jk) ) * 16. 404 xqpdmax(ji,jj,jk) = ( zrpho * 0.0128 + zrass * 0.0783 ) * 16. 405 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) & 406 & + ( 0.0078 + 0.033 ) * 16. 407 xqpdmax(ji,jj,jk) = MIN(qpdmax, xqpdmax(ji,jj,jk) ) 367 408 368 409 END DO … … 384 425 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 385 426 386 ! xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 387 xfracal(ji,jj,jk) = caco3r & 427 xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 388 428 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 ) & 389 429 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & … … 522 562 ENDIF 523 563 ! 524 zpsino3 = 2.3 * rno3525 zpsinh4 = 1.8 * rno3526 zpsiuptk = 2.3 * rno3564 zpsino3 = 2.3 * rno3 565 zpsinh4 = 1.8 * rno3 566 zpsiuptk = 1.0 / 6.625 527 567 ! 528 568 nitrfac (:,:,:) = 0._wp … … 547 587 & xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk), & 548 588 & fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk), & 589 & xlimphys(jpi,jpj,jpk), xlimdias(jpi,jpj,jpk), & 590 & xlimpics(jpi,jpj,jpk), & 549 591 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), STAT=ierr(1) ) 550 592 ! -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90
r11536 r12349 72 72 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport 73 73 REAL(wp) :: zmortzgoc, zfracc, zfracn, zfracp, zfracfe, zratio, zratio2 74 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi74 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 75 75 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 76 76 REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt … … 85 85 REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 86 86 CHARACTER (len=25) :: charout 87 REAL(wp) :: zrfact2, zmetexcess 87 REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn 88 88 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 89 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod … … 140 140 ! An active switching parameterization is used here. 141 141 ! We don't use the KTW parameterization proposed by 142 ! Vallina et al. because it tends to produce to steady biomass142 ! Vallina et al. because it tends to produce too steady biomass 143 143 ! composition and the variance of Chl is too low as it grazes 144 ! too strongly on winning organisms. Thus, instead of a square145 ! a 1.5 power value is used which decreases the pressure on the146 ! most abundant species144 ! too strongly on winning organisms. We use a generalized 145 ! switching parameterization proposed by Morozov and 146 ! Petrovskii (2013) 147 147 ! ------------------------------------------------------------ 148 ztmp1 = xpref2n * zcompaph**1.5 149 ztmp2 = xpref2m * zcompames**1.5 150 ztmp3 = xpref2c * zcompapoc**1.5 151 ztmp4 = xpref2d * zcompadi**1.5 152 ztmp5 = xpref2z * zcompaz**1.5 148 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 149 zsigma = 0.5 + 1.0 * zsigma 150 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 151 ztmp1 = xpref2n * zcompaph * ( zcompaph + zdiffdn * zcompadi ) 152 ztmp2 = xpref2m * zcompames**2 153 ztmp3 = xpref2c * zcompapoc**2 154 ztmp4 = xpref2d * zcompadi * ( zdiffdn * zcompadi + zcompaph ) 155 ztmp5 = xpref2z * zcompaz**2 153 156 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 154 157 ztmp1 = ztmp1 / ztmptot … … 238 241 zbeta = MAX(0., (epsher2 - epsher2min) ) 239 242 zepsherf = epsher2min + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 240 zepsher v = zepsherf * zepshert241 243 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 244 zepsherv = zepsherf * zepshert * zepsherq 242 245 ! Respiration of mesozooplankton 243 246 ! Excess carbon in the food is used preferentially -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmicro.F90
r11536 r12349 75 75 REAL(wp) :: zcompapi, zgraze , zdenom, zfact, zfood, zfoodlim 76 76 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot 77 REAL(wp) :: zepsherf, zepshert, zepsher v, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi77 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 78 78 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 79 79 REAL(wp) :: zgradoc, zgradon, zgradop, zgraref, zgradoct, zgradont, zgradopt, zgrareft … … 84 84 REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 85 85 REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 86 REAL(wp) :: zsigma, zdiffdn, zdiffpn, zdiffdp, zproport, zproport2 86 87 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo 87 88 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zzligprod … … 104 105 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 105 106 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 106 107 ! Proportion of nano and diatoms that are within the size range 108 ! accessible to microzooplankton. 109 zproport = min(1.0, exp(-1.1 * MAX(0., ( sized(ji,jj,jk) - 1.8 ))**0.8 )) 110 zproport2 = sizen(ji,jj,jk)**(-0.54) 107 111 ! Michaelis-Menten mortality rates of microzooplankton 108 112 ! ----------------------------------------------------- … … 118 122 ! A threshold can be specified in the namelist 119 123 ! -------------------------------------------- 120 zcompadi = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia)121 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 )124 zcompadi = zproport * MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ) 125 zcompaph = zproport2 * MAX( ( trb(ji,jj,jk,jpphy) - xthreshphy ), 0.e0 ) 122 126 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - xthreshzoo ), 0.e0 ) 123 127 zcompapi = MAX( ( trb(ji,jj,jk,jppic) - xthreshpic ), 0.e0 ) … … 140 144 ! most abundant species 141 145 ! ------------------------------------------------------------ 142 ztmp1 = xprefn * zcompaph**1.5 143 ztmp2 = xprefp * zcompapi**1.5 144 ztmp3 = xprefc * zcompapoc**1.5 145 ztmp4 = xprefd * zcompadi**1.5 146 ztmp5 = xprefz * zcompaz**1.5 146 zsigma = 1.0 - zdenom**2/(0.05**2+zdenom**2) 147 zsigma = 0.5 + 1.0*zsigma 148 zdiffpn = exp( -ABS(log(0.5 * sizep(ji,jj,jk) / (3.0 * sizen(ji,jj,jk) + rtrn )) )**2 / zsigma**2 ) 149 zdiffdn = exp( -ABS(log(3.0 * sizen(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 150 zdiffdp = exp( -ABS(log(0.5 * sizep(ji,jj,jk) / (5.0 * sized(ji,jj,jk) + rtrn )) )**2 / zsigma**2) 151 ztmp1 = xprefn * zcompaph * ( zcompaph + zdiffdn * zcompadi + zdiffpn * zcompapi ) / ( 1.0 + zdiffdn + zdiffpn ) 152 ztmp2 = xprefp * zcompapi * ( zcompapi + zdiffpn * zcompaph + zdiffdp * zcompadi ) / ( 1.0 + zdiffpn + zdiffdp ) 153 ztmp3 = xprefc * zcompapoc**2 154 ztmp4 = xprefd * zcompadi * ( zdiffdp * zcompapi + zdiffdn * zcompaph + zcompadi ) / ( 1.0 + zdiffdn + zdiffdp ) 155 ztmp5 = xprefz * zcompaz**2 147 156 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 148 157 ztmp1 = ztmp1 / ztmptot … … 192 201 zbeta = MAX( 0., (epsher - epshermin) ) 193 202 zepsherf = epshermin + zbeta / ( 1.0 + 0.04E6 * 12. * zfood * zbeta ) 194 zepsherv = zepsherf * zepshert 203 zepsherq = 0.5 + (1.0 - 0.5) * zepshert * ( 1.0 + 1.0 ) / ( zepshert + 1.0 ) 204 zepsherv = zepsherf * zepshert * zepsherq 195 205 196 206 ! Respiration of microzooplankton -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zprod.F90
r11536 r12349 71 71 INTEGER :: ji, jj, jk 72 72 REAL(wp) :: zsilfac, znanotot, zpicotot, zdiattot, zconctemp, zconctemp2 73 REAL(wp) :: zration, zratiop, zratiof, zmax, z max2, zsilim, ztn, zadap73 REAL(wp) :: zration, zratiop, zratiof, zmax, zsilim, ztn, zadap 74 74 REAL(wp) :: zpronmax, zpropmax, zprofmax, zrat 75 75 REAL(wp) :: zlim, zsilfac2, zsiborn, zprod, zprontot, zproptot, zprodtot 76 76 REAL(wp) :: zprnutmax, zdocprod, zprochln, zprochld, zprochlp 77 REAL(wp) :: zpislopen, zpislopep, zpisloped , thetannm_n, thetandm_n, thetanpm_n77 REAL(wp) :: zpislopen, zpislopep, zpisloped 78 78 REAL(wp) :: zrum, zcodel, zargu, zval, zfeup 79 REAL(wp) :: zfact, zrfact2 79 REAL(wp) :: zfact, zrfact2, zmaxsi, zratiosi, zsizetmp, zlimfac 80 80 CHARACTER (len=25) :: charout 81 81 REAL(wp), DIMENSION(jpi,jpj ) :: zmixnano, zmixpico, zmixdiat, zstrn 82 82 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zpislopeadn, zpislopeadp, zpislopeadd 83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zpr maxp, zprmaxn, zprmaxd83 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprnut, zprnutp, zprmaxp, zprmaxn, zprmaxd 84 84 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprbio, zprpic, zprdia, zysopt 85 85 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zprchln, zprchlp, zprchld … … 111 111 112 112 ! Computation of the optimal production 113 zprnut (:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 114 zprmaxn(:,:,:) = ( 0.65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 115 zprmaxp(:,:,:) = 0.5 / 0.65 * zprmaxn(:,:,:) 116 zprmaxd(:,:,:) = zprmaxn(:,:,:) 113 zprnut (:,:,:) = 0.6_wp * (1.0 + zpsino3 * qnnmax ) * r1_rday * tgfunc(:,:,:) 114 zprnutp(:,:,:) = 0.6_wp * (1. + zpsino3 * qnpmax ) * r1_rday * tgfunc3(:,:,:) 115 zprmaxn(:,:,:) = ( 0.6_wp * (1. + zpsino3 * qnnmax ) ) * r1_rday * tgfunc(:,:,:) 116 zprmaxd(:,:,:) = ( 0.6_wp * (1. + zpsino3 * qndmax ) ) * r1_rday * tgfunc(:,:,:) 117 zprmaxp(:,:,:) = ( 0.4_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc3(:,:,:) 117 118 118 119 ! compute the day length depending on latitude and the day … … 140 141 ENDIF 141 142 zmxl_chl(ji,jj,jk) = zval / 24. 142 zmxl_fac(ji,jj,jk) = 1. 5 * zval / ( 12. +zval )143 zmxl_fac(ji,jj,jk) = 1.0 - exp( -0.26 * zval ) 143 144 ENDIF 144 145 END DO … … 176 177 ! Computation of production function for Carbon 177 178 ! --------------------------------------------- 178 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )179 zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) ) )180 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )179 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) / zmxl_chl(ji,jj,jk) ) ) 180 zprpic(ji,jj,jk) = zprpic(ji,jj,jk) * ( 1.- EXP( -zpislopep * epico(ji,jj,jk) / zmxl_chl(ji,jj,jk)) ) 181 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) / zmxl_chl(ji,jj,jk)) ) 181 182 182 183 ! Computation of production function for Chlorophyll … … 197 198 DO ji = 1, jpi 198 199 199 200 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 200 201 ! Si/C of diatoms 201 202 ! ------------------------ … … 205 206 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 206 207 zsilim = MIN( zprdia(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 207 zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0208 208 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 209 209 IF (gphit(ji,jj) < -30 ) THEN 210 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 )210 zsilfac2 = 1. + 1. * zsiborn / ( zsiborn + xksi2**3 ) 211 211 ELSE 212 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 )212 zsilfac2 = 1. 213 213 ENDIF 214 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 215 ENDIF 214 zratiosi = 1.0 - trb(ji,jj,jk,jpdsi) / ( trb(ji,jj,jk,jpdia) + rtrn ) / ( zsilfac2 * grosip * 3.0 + rtrn ) 215 zratiosi = MAX(0., MIN(1.0, zratiosi) ) 216 zmaxsi = (1.0 + 0.1**4) * zratiosi**4 / ( zratiosi**4 + 0.1**4 ) 217 IF ( xlimsi(ji,jj,jk) /= xlimdia(ji,jj,jk) ) THEN 218 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zmaxsi 219 ELSE 220 zysopt(ji,jj,jk) = zlim * zsilfac2 * grosip * 1.0 * zsilim**0.75 * zmaxsi 221 ENDIF 222 ENDIF 216 223 END DO 217 224 END DO … … 226 233 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 227 234 zprnut(ji,jj,jk) = zprnut(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 235 zprnutp(ji,jj,jk) = zprnutp(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 228 236 END DO 229 237 END DO … … 237 245 ! production terms for nanophyto. 238 246 zprorcan(ji,jj,jk) = zprbio(ji,jj,jk) * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 239 ! 247 ! size computation 248 zlimfac = xlimphys(ji,jj,jk) * zprchln(ji,jj,jk) / ( zprmaxn(ji,jj,jk) + rtrn ) 249 zsizetmp = 1.0 + 1.3 * ( xsizern - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 250 sizena(ji,jj,jk) = min(xsizern, max( sizena(ji,jj,jk), zsizetmp ) ) 251 ! Nutrient uptake terms 240 252 zration = trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 241 253 zratiop = trb(ji,jj,jk,jppph) / ( trb(ji,jj,jk,jpphy) + rtrn ) … … 243 255 zprnutmax = zprnut(ji,jj,jk) * fvnuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpphy) * rfact2 244 256 ! Uptake of nitrogen 245 zrat = MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) )246 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))257 zrat = 1.0 - MIN( 1., zration / (xqnnmax(ji,jj,jk) + rtrn) ) 258 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 247 259 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpnmin(ji,jj,jk) ) & 248 260 & / ( xqpnmax(ji,jj,jk) - xqpnmin(ji,jj,jk) + rtrn ), xlimnfe(ji,jj,jk) ) ) 249 zpronewn(ji,jj,jk) = zpronmax * zdaylen(ji,jj) *xnanono3(ji,jj,jk)261 zpronewn(ji,jj,jk) = zpronmax * xnanono3(ji,jj,jk) 250 262 zproregn(ji,jj,jk) = zpronmax * xnanonh4(ji,jj,jk) 251 263 ! Uptake of phosphorus 252 zrat = MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) )253 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))254 zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) 264 zrat = 1.0 - MIN( 1., zratiop / (xqpnmax(ji,jj,jk) + rtrn) ) 265 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 266 zpropmax = zprnutmax * zmax * xlimnfe(ji,jj,jk) * 16. / 10. 255 267 zpropo4n(ji,jj,jk) = zpropmax * xnanopo4(ji,jj,jk) 256 268 zprodopn(ji,jj,jk) = zpropmax * xnanodop(ji,jj,jk) 257 269 ! Uptake of iron 258 zrat = MIN( 1., zratiof / qfnmax )259 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))260 zprofmax = zprnutmax * qfnmax * zmax 261 zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) * ( 3. - 2.4 * xlimnfe(ji,jj,jk)&262 & / ( xlimnfe(ji,jj,jk) + 0.2 ) )* (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn &270 zrat = 1.0 - MIN( 1., zratiof / qfnmax ) 271 zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 272 zprofmax = zprnutmax * qfnmax * zmax 273 zprofen(ji,jj,jk) = zprofmax * xnanofer(ji,jj,jk) & 274 & * (1. + 0.8 * xnanono3(ji,jj,jk) / ( rtrn & 263 275 & + xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) ) * (1. - xnanofer(ji,jj,jk) ) ) 264 276 ENDIF … … 274 286 ! production terms for picophyto. 275 287 zprorcap(ji,jj,jk) = zprpic(ji,jj,jk) * xlimpic(ji,jj,jk) * trb(ji,jj,jk,jppic) * rfact2 276 ! 288 ! Size computation 289 zlimfac = zprchlp(ji,jj,jk) * xlimpics(ji,jj,jk) / ( zprmaxp(ji,jj,jk) + rtrn ) 290 zsizetmp = 1.0 + 1.3 * ( xsizerp - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 291 sizepa(ji,jj,jk) = min(xsizerp, max( sizepa(ji,jj,jk), zsizetmp ) ) 292 ! Nutrient uptake 277 293 zration = trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) 278 294 zratiop = trb(ji,jj,jk,jpppi) / ( trb(ji,jj,jk,jppic) + rtrn ) 279 295 zratiof = trb(ji,jj,jk,jppfe) / ( trb(ji,jj,jk,jppic) + rtrn ) 280 zprnutmax = zprnut (ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jppic) * rfact2296 zprnutmax = zprnutp(ji,jj,jk) * fvpuptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jppic) * rfact2 281 297 ! Uptake of nitrogen 282 zrat = MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) )283 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))298 zrat = 1.0 - MIN( 1., zration / (xqnpmax(ji,jj,jk) + rtrn) ) 299 zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 284 300 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqppmin(ji,jj,jk) ) & 285 301 & / ( xqppmax(ji,jj,jk) - xqppmin(ji,jj,jk) + rtrn ), xlimpfe(ji,jj,jk) ) ) 286 zpronewp(ji,jj,jk) = zpronmax * zdaylen(ji,jj) *xpicono3(ji,jj,jk)302 zpronewp(ji,jj,jk) = zpronmax * xpicono3(ji,jj,jk) 287 303 zproregp(ji,jj,jk) = zpronmax * xpiconh4(ji,jj,jk) 288 304 ! Uptake of phosphorus 289 zrat = MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) )290 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))291 zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) 305 zrat = 1.0 - MIN( 1., zratiop / (xqppmax(ji,jj,jk) + rtrn) ) 306 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 307 zpropmax = zprnutmax * zmax * xlimpfe(ji,jj,jk) * 16./10. 292 308 zpropo4p(ji,jj,jk) = zpropmax * xpicopo4(ji,jj,jk) 293 309 zprodopp(ji,jj,jk) = zpropmax * xpicodop(ji,jj,jk) 294 310 ! Uptake of iron 295 zrat = MIN( 1., zratiof / qfpmax )296 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))311 zrat = 1.0 - MIN( 1., zratiof / qfpmax ) 312 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 297 313 zprofmax = zprnutmax * qfpmax * zmax 298 zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) * ( 3. - 2.4 * xlimpfe(ji,jj,jk)&299 & / ( xlimpfe(ji,jj,jk) + 0.2 ) )* (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn &314 zprofep(ji,jj,jk) = zprofmax * xpicofer(ji,jj,jk) & 315 & * (1. + 0.8 * xpicono3(ji,jj,jk) / ( rtrn & 300 316 & + xpicono3(ji,jj,jk) + xpiconh4(ji,jj,jk) ) * (1. - xpicofer(ji,jj,jk) ) ) 301 317 ENDIF … … 311 327 ! production terms for diatomees 312 328 zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 313 ! Computation of the respiration term according to pahlow 314 ! & oschlies (2013) 315 ! 329 ! size computation 330 zlimfac = zprchld(ji,jj,jk) * xlimdias(ji,jj,jk) / ( zprmaxd(ji,jj,jk) + rtrn ) 331 zsizetmp = 1.0 + 1.3 * ( xsizerd - 1.0 ) * zlimfac**3/(0.3 + zlimfac**3) 332 sizeda(ji,jj,jk) = min(xsizerd, max( sizeda(ji,jj,jk), zsizetmp ) ) 333 ! Nutrient uptake 316 334 zration = trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 317 335 zratiop = trb(ji,jj,jk,jppdi) / ( trb(ji,jj,jk,jpdia) + rtrn ) … … 319 337 zprnutmax = zprnut(ji,jj,jk) * fvduptk(ji,jj,jk) / rno3 * trb(ji,jj,jk,jpdia) * rfact2 320 338 ! Uptake of nitrogen 321 zrat = MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) )322 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))339 zrat = 1.0 - MIN( 1., zration / (xqndmax(ji,jj,jk) + rtrn) ) 340 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 323 341 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) ) & 324 342 & / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimdfe(ji,jj,jk) ) ) 325 zpronewd(ji,jj,jk) = zpronmax * zdaylen(ji,jj) *xdiatno3(ji,jj,jk)343 zpronewd(ji,jj,jk) = zpronmax * xdiatno3(ji,jj,jk) 326 344 zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) 327 345 ! Uptake of phosphorus 328 zrat = MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) )329 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))330 zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) 346 zrat = 1.0 - MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 347 zmax = MAX(0., MIN(1., zrat**2/ (0.05**2 + zrat**2) ) ) 348 zpropmax = zprnutmax * zmax * xlimdfe(ji,jj,jk) * 16./10. 331 349 zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 332 350 zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) 333 351 ! Uptake of iron 334 zrat = MIN( 1., zratiof / qfdmax )335 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05))352 zrat = 1.0 - MIN( 1., zratiof / qfdmax ) 353 zmax = MAX(0., MIN(1., zrat**2 / (0.05**2 + zrat**2) ) ) 336 354 zprofmax = zprnutmax * qfdmax * zmax 337 zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) * ( 3. - 2.4 * xlimdfe(ji,jj,jk)&338 & / ( xlimdfe(ji,jj,jk) + 0.2 ) )* (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn &355 zprofed(ji,jj,jk) = zprofmax * xdiatfer(ji,jj,jk) & 356 & * (1. + 0.8 * xdiatno3(ji,jj,jk) / ( rtrn & 339 357 & + xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) ) * (1. - xdiatfer(ji,jj,jk) ) ) 340 358 ENDIF … … 350 368 znanotot = enanom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 351 369 zprod = rday * (zpronewn(ji,jj,jk) + zproregn(ji,jj,jk)) * zprchln(ji,jj,jk) * xlimphy(ji,jj,jk) 352 thetannm_n = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 353 & * (1. - 1.14 / 43.4 * 20.)) 354 zprochln = thetannm_n * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 370 zprochln = thetannm * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 355 371 zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) 356 372 ! production terms for picophyto. ( chlorophyll ) 357 373 zpicotot = epicom(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 358 374 zprod = rday * (zpronewp(ji,jj,jk) + zproregp(ji,jj,jk)) * zprchlp(ji,jj,jk) * xlimpic(ji,jj,jk) 359 thetanpm_n = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 360 & * (1. - 1.14 / 43.4 * 20.)) 361 zprochlp = thetanpm_n * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 375 zprochlp = thetanpm * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 362 376 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) 363 377 ! production terms for diatomees ( chlorophyll ) 364 378 zdiattot = ediatm(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 365 379 zprod = rday * (zpronewd(ji,jj,jk) + zproregd(ji,jj,jk)) * zprchld(ji,jj,jk) * xlimdia(ji,jj,jk) 366 thetandm_n = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 367 & * (1. - 1.14 / 43.4 * 20.)) 368 zprochld = thetandm_n * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 380 zprochld = thetandm * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 369 381 zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) 370 382 ! Update the arrays TRA which contain the Chla sources and sinks … … 416 428 & + zprodopd(ji,jj,jk) * texcretd 417 429 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 418 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zpr orcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd430 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * trb(ji,jj,jk,jpdia) 419 431 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) & 420 432 & + excretp * zprorcap(ji,jj,jk) … … 430 442 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 431 443 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 432 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk)444 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - zprmaxd(ji,jj,jk) * zysopt(ji,jj,jk) * rfact2 * trb(ji,jj,jk,jpdia) 433 445 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) - zprorcap(ji,jj,jk) & 434 446 & + zpsino3 * zpronewn(ji,jj,jk) + zpsinh4 * zproregn(ji,jj,jk) & -
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/sms_pisces.F90
r10788 r12349 103 103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: consgoc !: Calcite production 104 104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: blim !: bacterial production factor 105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of diatoms106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of diatoms105 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizen !: size of nanophyto 106 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizep !: size of picophyto 107 107 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sized !: size of diatoms 108 108 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizena !: size of nanophytoplankton, after 109 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizepa !: size of picophyto, after 110 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sizeda !: size of diatomss, after 109 111 110 112 !!* Variable for chemistry of the CO2 cycle … … 120 122 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc !: Temp. dependancy of various biological rates 121 123 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 124 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc3 !: Temp. dependancy of picophytoplankton rates 122 125 123 126 !!---------------------------------------------------------------------- … … 165 168 ! 166 169 !* Temperature dependancy of SMS terms 167 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk), STAT=ierr(6) ) 170 ALLOCATE( tgfunc (jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk), & 171 & tgfunc3(jpi,jpj,jpk) , STAT=ierr(6) ) 168 172 ! 169 173 !* Sinkong speed … … 182 186 !* Size of phytoplankton cells 183 187 ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk), & 184 & sized(jpi,jpj,jpk), STAT=ierr(10) ) 188 & sized(jpi,jpj,jpk), sizena(jpi,jpj,jpk), & 189 & sizepa(jpi,jpj,jpk), sizeda(jpi,jpj,jpk), STAT=ierr(10) ) 185 190 ENDIF 186 191 !
Note: See TracChangeset
for help on using the changeset viewer.