- Timestamp:
- 2020-01-27T15:31:53+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p5zlim.F90
r12258 r12340 91 91 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 92 92 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 93 !! * Substitutions 94 # include "do_loop_substitute.h90" 93 95 !!---------------------------------------------------------------------- 94 96 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 129 131 zratchl = 6.0 130 132 ! 131 DO jk = 1, jpkm1 132 DO jj = 1, jpj 133 DO ji = 1, jpi 134 ! 135 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 136 !------------------------------------- 137 zno3 = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 138 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 139 zferlim = MIN( zferlim, 7e-11 ) 140 tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 141 142 ! Computation of the mean relative size of each community 143 ! ------------------------------------------------------- 144 z1_trnphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 145 z1_trnpic = 1. / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) 146 z1_trndia = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 147 znanochl = tr(ji,jj,jk,jpnch,Kbb) * z1_trnphy 148 zpicochl = tr(ji,jj,jk,jppch,Kbb) * z1_trnpic 149 zdiatchl = tr(ji,jj,jk,jpdch,Kbb) * z1_trndia 150 151 ! Computation of a variable Ks for iron on diatoms taking into account 152 ! that increasing biomass is made of generally bigger cells 153 !------------------------------------------------ 154 zsized = sized(ji,jj,jk)**0.81 155 zconcdfe = concdfer * zsized 156 zconc1d = concdno3 * zsized 157 zconc1dnh4 = concdnh4 * zsized 158 zconc0dpo4 = concdpo4 * zsized 159 160 zsizep = 1. 161 zconcpfe = concpfer * zsizep 162 zconc0p = concpno3 * zsizep 163 zconc0pnh4 = concpnh4 * zsizep 164 zconc0ppo4 = concppo4 * zsizep 165 166 zsizen = 1. 167 zconcnfe = concnfer * zsizen 168 zconc0n = concnno3 * zsizen 169 zconc0nnh4 = concnnh4 * zsizen 170 zconc0npo4 = concnpo4 * zsizen 171 172 ! Allometric variations of the minimum and maximum quotas 173 ! From Talmy et al. (2014) and Maranon et al. (2013) 174 ! ------------------------------------------------------- 175 xqnnmin(ji,jj,jk) = qnnmin 176 xqnnmax(ji,jj,jk) = qnnmax 177 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 178 xqndmax(ji,jj,jk) = qndmax 179 xqnpmin(ji,jj,jk) = qnpmin 180 xqnpmax(ji,jj,jk) = qnpmax 181 182 ! Computation of the optimal allocation parameters 183 ! Based on the different papers by Pahlow et al., and Smith et al. 184 ! ----------------------------------------------------------------- 185 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4, & 186 & tr(ji,jj,jk,jpno3,Kbb) / zconc0n) 187 fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 188 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4 189 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 190 znutlim = biron(ji,jj,jk) / zconcnfe 191 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 192 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4, & 193 & tr(ji,jj,jk,jpno3,Kbb) / zconc0p) 194 fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 195 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4 196 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 197 znutlim = biron(ji,jj,jk) / zconcpfe 198 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 199 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4, & 200 & tr(ji,jj,jk,jpno3,Kbb) / zconc1d ) 201 fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 202 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4 203 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 204 znutlim = biron(ji,jj,jk) / zconcdfe 205 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 206 ! 207 ! Michaelis-Menten Limitation term for nutrients Small bacteria 208 ! ------------------------------------------------------------- 209 zbactnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 210 zbactno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - zbactnh4) 211 ! 212 zlim1 = zbactno3 + zbactnh4 213 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbpo4) 214 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 215 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 216 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 217 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 218 ! 219 ! Michaelis-Menten Limitation term for nutrients Small flagellates 220 ! ----------------------------------------------- 221 zfalim = (1.-fanano) / fanano 222 xnanonh4(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0nnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 223 xnanono3(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) & 224 & * (1. - xnanonh4(ji,jj,jk)) 225 ! 226 zfalim = (1.-fananop) / fananop 227 xnanopo4(ji,jj,jk) = (1. - fananop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0npo4 ) 228 xnanodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 229 & * ( 1.0 - xnanopo4(ji,jj,jk) ) 230 xnanodop(ji,jj,jk) = 0. 231 ! 232 zfalim = (1.-fananof) / fananof 233 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 234 ! 235 zratiof = tr(ji,jj,jk,jpnfe,Kbb) * z1_trnphy 236 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 237 ! 238 zration = tr(ji,jj,jk,jpnph,Kbb) * z1_trnphy 239 zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 240 fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn) & 241 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 242 ! 243 zlim1 = max(0., (zration - 2. * xqnnmin(ji,jj,jk) ) & 244 & / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 245 & / (zration + rtrn) 246 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 247 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 248 xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 249 ! 250 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 251 ! ---------------------------------------------------------------- 252 zfalim = (1.-fapico) / fapico 253 xpiconh4(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0pnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 254 xpicono3(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) & 255 & * (1. - xpiconh4(ji,jj,jk)) 256 ! 257 zfalim = (1.-fapicop) / fapicop 258 xpicopo4(ji,jj,jk) = (1. - fapicop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0ppo4 ) 259 xpicodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 260 & * ( 1.0 - xpicopo4(ji,jj,jk) ) 261 xpicodop(ji,jj,jk) = 0. 262 ! 263 zfalim = (1.-fapicof) / fapicof 264 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 265 ! 266 zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 267 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 268 ! 269 zration = tr(ji,jj,jk,jpnpi,Kbb) * z1_trnpic 270 zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 271 fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn) & 272 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 273 ! 274 zlim1 = max(0., (zration - 2. * xqnpmin(ji,jj,jk) ) & 275 & / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 276 & / (zration + rtrn) 277 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 278 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 279 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 280 ! 281 ! Michaelis-Menten Limitation term for nutrients Diatoms 282 ! ------------------------------------------------------ 283 zfalim = (1.-fadiat) / fadiat 284 xdiatnh4(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc1dnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 285 xdiatno3(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) & 286 & * (1. - xdiatnh4(ji,jj,jk)) 287 ! 288 zfalim = (1.-fadiatp) / fadiatp 289 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0dpo4 ) 290 xdiatdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 291 & * ( 1.0 - xdiatpo4(ji,jj,jk) ) 292 xdiatdop(ji,jj,jk) = 0. 293 ! 294 zfalim = (1.-fadiatf) / fadiatf 295 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 296 ! 297 zratiof = tr(ji,jj,jk,jpdfe,Kbb) * z1_trndia 298 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 299 ! 300 zration = tr(ji,jj,jk,jpndi,Kbb) * z1_trndia 301 zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 302 fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn) & 303 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 304 ! 305 zlim1 = max(0., (zration - 2. * xqndmin(ji,jj,jk) ) & 306 & / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) ) & 307 & * xqndmax(ji,jj,jk) / (zration + rtrn) 308 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 309 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 310 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 311 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 312 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 313 END DO 314 END DO 315 END DO 133 DO_3D_11_11( 1, jpkm1 ) 134 ! 135 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 136 !------------------------------------- 137 zno3 = tr(ji,jj,jk,jpno3,Kbb) / 40.e-6 138 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 139 zferlim = MIN( zferlim, 7e-11 ) 140 tr(ji,jj,jk,jpfer,Kbb) = MAX( tr(ji,jj,jk,jpfer,Kbb), zferlim ) 141 142 ! Computation of the mean relative size of each community 143 ! ------------------------------------------------------- 144 z1_trnphy = 1. / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) 145 z1_trnpic = 1. / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) 146 z1_trndia = 1. / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) 147 znanochl = tr(ji,jj,jk,jpnch,Kbb) * z1_trnphy 148 zpicochl = tr(ji,jj,jk,jppch,Kbb) * z1_trnpic 149 zdiatchl = tr(ji,jj,jk,jpdch,Kbb) * z1_trndia 150 151 ! Computation of a variable Ks for iron on diatoms taking into account 152 ! that increasing biomass is made of generally bigger cells 153 !------------------------------------------------ 154 zsized = sized(ji,jj,jk)**0.81 155 zconcdfe = concdfer * zsized 156 zconc1d = concdno3 * zsized 157 zconc1dnh4 = concdnh4 * zsized 158 zconc0dpo4 = concdpo4 * zsized 159 160 zsizep = 1. 161 zconcpfe = concpfer * zsizep 162 zconc0p = concpno3 * zsizep 163 zconc0pnh4 = concpnh4 * zsizep 164 zconc0ppo4 = concppo4 * zsizep 165 166 zsizen = 1. 167 zconcnfe = concnfer * zsizen 168 zconc0n = concnno3 * zsizen 169 zconc0nnh4 = concnnh4 * zsizen 170 zconc0npo4 = concnpo4 * zsizen 171 172 ! Allometric variations of the minimum and maximum quotas 173 ! From Talmy et al. (2014) and Maranon et al. (2013) 174 ! ------------------------------------------------------- 175 xqnnmin(ji,jj,jk) = qnnmin 176 xqnnmax(ji,jj,jk) = qnnmax 177 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 178 xqndmax(ji,jj,jk) = qndmax 179 xqnpmin(ji,jj,jk) = qnpmin 180 xqnpmax(ji,jj,jk) = qnpmax 181 182 ! Computation of the optimal allocation parameters 183 ! Based on the different papers by Pahlow et al., and Smith et al. 184 ! ----------------------------------------------------------------- 185 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0nnh4, & 186 & tr(ji,jj,jk,jpno3,Kbb) / zconc0n) 187 fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 188 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0npo4 189 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 190 znutlim = biron(ji,jj,jk) / zconcnfe 191 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 192 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc0pnh4, & 193 & tr(ji,jj,jk,jpno3,Kbb) / zconc0p) 194 fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 195 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0ppo4 196 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 197 znutlim = biron(ji,jj,jk) / zconcpfe 198 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 199 znutlim = MAX( tr(ji,jj,jk,jpnh4,Kbb) / zconc1dnh4, & 200 & tr(ji,jj,jk,jpno3,Kbb) / zconc1d ) 201 fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 202 znutlim = tr(ji,jj,jk,jppo4,Kbb) / zconc0dpo4 203 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 204 znutlim = biron(ji,jj,jk) / zconcdfe 205 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 206 ! 207 ! Michaelis-Menten Limitation term for nutrients Small bacteria 208 ! ------------------------------------------------------------- 209 zbactnh4 = tr(ji,jj,jk,jpnh4,Kbb) / ( concbnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 210 zbactno3 = tr(ji,jj,jk,jpno3,Kbb) / ( concbno3 + tr(ji,jj,jk,jpno3,Kbb) ) * (1. - zbactnh4) 211 ! 212 zlim1 = zbactno3 + zbactnh4 213 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concbpo4) 214 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 215 zlim4 = tr(ji,jj,jk,jpdoc,Kbb) / ( xkdoc + tr(ji,jj,jk,jpdoc,Kbb) ) 216 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 217 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 218 ! 219 ! Michaelis-Menten Limitation term for nutrients Small flagellates 220 ! ----------------------------------------------- 221 zfalim = (1.-fanano) / fanano 222 xnanonh4(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0nnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 223 xnanono3(ji,jj,jk) = (1. - fanano) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0n + tr(ji,jj,jk,jpno3,Kbb) ) & 224 & * (1. - xnanonh4(ji,jj,jk)) 225 ! 226 zfalim = (1.-fananop) / fananop 227 xnanopo4(ji,jj,jk) = (1. - fananop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0npo4 ) 228 xnanodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 229 & * ( 1.0 - xnanopo4(ji,jj,jk) ) 230 xnanodop(ji,jj,jk) = 0. 231 ! 232 zfalim = (1.-fananof) / fananof 233 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 234 ! 235 zratiof = tr(ji,jj,jk,jpnfe,Kbb) * z1_trnphy 236 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 237 ! 238 zration = tr(ji,jj,jk,jpnph,Kbb) * z1_trnphy 239 zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 240 fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn) & 241 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 242 ! 243 zlim1 = max(0., (zration - 2. * xqnnmin(ji,jj,jk) ) & 244 & / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 245 & / (zration + rtrn) 246 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 247 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 248 xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 249 ! 250 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 251 ! ---------------------------------------------------------------- 252 zfalim = (1.-fapico) / fapico 253 xpiconh4(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc0pnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 254 xpicono3(ji,jj,jk) = (1. - fapico) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc0p + tr(ji,jj,jk,jpno3,Kbb) ) & 255 & * (1. - xpiconh4(ji,jj,jk)) 256 ! 257 zfalim = (1.-fapicop) / fapicop 258 xpicopo4(ji,jj,jk) = (1. - fapicop) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0ppo4 ) 259 xpicodop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 260 & * ( 1.0 - xpicopo4(ji,jj,jk) ) 261 xpicodop(ji,jj,jk) = 0. 262 ! 263 zfalim = (1.-fapicof) / fapicof 264 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 265 ! 266 zratiof = tr(ji,jj,jk,jppfe,Kbb) * z1_trnpic 267 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 268 ! 269 zration = tr(ji,jj,jk,jpnpi,Kbb) * z1_trnpic 270 zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 271 fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn) & 272 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 273 ! 274 zlim1 = max(0., (zration - 2. * xqnpmin(ji,jj,jk) ) & 275 & / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 276 & / (zration + rtrn) 277 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 278 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 279 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 280 ! 281 ! Michaelis-Menten Limitation term for nutrients Diatoms 282 ! ------------------------------------------------------ 283 zfalim = (1.-fadiat) / fadiat 284 xdiatnh4(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpnh4,Kbb) / ( zfalim * zconc1dnh4 + tr(ji,jj,jk,jpnh4,Kbb) ) 285 xdiatno3(ji,jj,jk) = (1. - fadiat) * tr(ji,jj,jk,jpno3,Kbb) / ( zfalim * zconc1d + tr(ji,jj,jk,jpno3,Kbb) ) & 286 & * (1. - xdiatnh4(ji,jj,jk)) 287 ! 288 zfalim = (1.-fadiatp) / fadiatp 289 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + zfalim * zconc0dpo4 ) 290 xdiatdop(ji,jj,jk) = tr(ji,jj,jk,jpdop,Kbb) / ( tr(ji,jj,jk,jpdop,Kbb) + xkdoc ) & 291 & * ( 1.0 - xdiatpo4(ji,jj,jk) ) 292 xdiatdop(ji,jj,jk) = 0. 293 ! 294 zfalim = (1.-fadiatf) / fadiatf 295 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 296 ! 297 zratiof = tr(ji,jj,jk,jpdfe,Kbb) * z1_trndia 298 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 299 ! 300 zration = tr(ji,jj,jk,jpndi,Kbb) * z1_trndia 301 zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 302 fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn) & 303 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 304 ! 305 zlim1 = max(0., (zration - 2. * xqndmin(ji,jj,jk) ) & 306 & / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) ) & 307 & * xqndmax(ji,jj,jk) / (zration + rtrn) 308 zlim3 = tr(ji,jj,jk,jpsil,Kbb) / ( tr(ji,jj,jk,jpsil,Kbb) + xksi(ji,jj) ) 309 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 310 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 311 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 312 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 313 END_3D 316 314 ! 317 315 ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. … … 320 318 ! phytoplankton (see Daines et al., 2013). 321 319 ! -------------------------------------------------------------------------------------------------- 322 DO jk = 1, jpkm1 323 DO jj = 1, jpj 324 DO ji = 1, jpi 325 ! Size estimation of nanophytoplankton 326 ! ------------------------------------ 327 zfvn = 2. * fvnuptk(ji,jj,jk) 328 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 329 330 ! N/P ratio of nanophytoplankton 331 ! ------------------------------ 332 zfuptk = 0.23 * zfvn 333 zrpho = 2.24 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpnph,Kbb) * rno3 * 15. + rtrn ) 334 zrass = 1. - 0.2 - zrpho - zfuptk 335 xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 336 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) + 0.13 337 xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16. 338 339 ! Size estimation of picophytoplankton 340 ! ------------------------------------ 341 zfvn = 2. * fvpuptk(ji,jj,jk) 342 sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 343 344 ! N/P ratio of picophytoplankton 345 ! ------------------------------ 346 zfuptk = 0.35 * zfvn 347 zrpho = 2.24 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jpnpi,Kbb) * rno3 * 15. + rtrn ) 348 zrass = 1. - 0.4 - zrpho - zfuptk 349 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16. 350 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) + 0.13 351 xqppmin(ji,jj,jk) = 0.13 352 353 ! Size estimation of diatoms 354 ! -------------------------- 355 zfvn = 2. * fvduptk(ji,jj,jk) 356 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 357 zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 358 sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 359 360 ! N/P ratio of diatoms 361 ! -------------------- 362 zfuptk = 0.2 * zfvn 363 zrpho = 2.24 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * rno3 * 15. + rtrn ) 364 zrass = 1. - 0.2 - zrpho - zfuptk 365 xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 366 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) + 0.13 367 xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 368 369 END DO 370 END DO 371 END DO 320 DO_3D_11_11( 1, jpkm1 ) 321 ! Size estimation of nanophytoplankton 322 ! ------------------------------------ 323 zfvn = 2. * fvnuptk(ji,jj,jk) 324 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 325 326 ! N/P ratio of nanophytoplankton 327 ! ------------------------------ 328 zfuptk = 0.23 * zfvn 329 zrpho = 2.24 * tr(ji,jj,jk,jpnch,Kbb) / ( tr(ji,jj,jk,jpnph,Kbb) * rno3 * 15. + rtrn ) 330 zrass = 1. - 0.2 - zrpho - zfuptk 331 xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 332 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * tr(ji,jj,jk,jpnph,Kbb) / ( tr(ji,jj,jk,jpphy,Kbb) + rtrn ) + 0.13 333 xqpnmin(ji,jj,jk) = 0.13 + 0.23 * 0.0128 * 16. 334 335 ! Size estimation of picophytoplankton 336 ! ------------------------------------ 337 zfvn = 2. * fvpuptk(ji,jj,jk) 338 sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 339 340 ! N/P ratio of picophytoplankton 341 ! ------------------------------ 342 zfuptk = 0.35 * zfvn 343 zrpho = 2.24 * tr(ji,jj,jk,jppch,Kbb) / ( tr(ji,jj,jk,jpnpi,Kbb) * rno3 * 15. + rtrn ) 344 zrass = 1. - 0.4 - zrpho - zfuptk 345 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 9. * 16. 346 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * tr(ji,jj,jk,jpnpi,Kbb) / ( tr(ji,jj,jk,jppic,Kbb) + rtrn ) + 0.13 347 xqppmin(ji,jj,jk) = 0.13 348 349 ! Size estimation of diatoms 350 ! -------------------------- 351 zfvn = 2. * fvduptk(ji,jj,jk) 352 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 353 zcoef = tr(ji,jj,jk,jpdia,Kbb) - MIN(xsizedia, tr(ji,jj,jk,jpdia,Kbb) ) 354 sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 355 356 ! N/P ratio of diatoms 357 ! -------------------- 358 zfuptk = 0.2 * zfvn 359 zrpho = 2.24 * tr(ji,jj,jk,jpdch,Kbb) / ( tr(ji,jj,jk,jpndi,Kbb) * rno3 * 15. + rtrn ) 360 zrass = 1. - 0.2 - zrpho - zfuptk 361 xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. 362 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * tr(ji,jj,jk,jpndi,Kbb) / ( tr(ji,jj,jk,jpdia,Kbb) + rtrn ) + 0.13 363 xqpdmin(ji,jj,jk) = 0.13 + 0.2 * 0.0128 * 16. 364 365 END_3D 372 366 373 367 ! Compute the fraction of nanophytoplankton that is made of calcifiers 374 368 ! -------------------------------------------------------------------- 375 DO jk = 1, jpkm1 376 DO jj = 1, jpj 377 DO ji = 1, jpi 378 zlim1 = tr(ji,jj,jk,jpnh4,Kbb) / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) + tr(ji,jj,jk,jpno3,Kbb) & 379 & / ( tr(ji,jj,jk,jpno3,Kbb) + concnno3 ) * ( 1.0 - tr(ji,jj,jk,jpnh4,Kbb) & 380 & / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) ) 381 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnpo4 ) 382 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 5.E-11 ) 383 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) ) 384 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 385 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 369 DO_3D_11_11( 1, jpkm1 ) 370 zlim1 = tr(ji,jj,jk,jpnh4,Kbb) / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) + tr(ji,jj,jk,jpno3,Kbb) & 371 & / ( tr(ji,jj,jk,jpno3,Kbb) + concnno3 ) * ( 1.0 - tr(ji,jj,jk,jpnh4,Kbb) & 372 & / ( tr(ji,jj,jk,jpnh4,Kbb) + concnnh4 ) ) 373 zlim2 = tr(ji,jj,jk,jppo4,Kbb) / ( tr(ji,jj,jk,jppo4,Kbb) + concnpo4 ) 374 zlim3 = tr(ji,jj,jk,jpfer,Kbb) / ( tr(ji,jj,jk,jpfer,Kbb) + 5.E-11 ) 375 ztem1 = MAX( 0., ts(ji,jj,jk,jp_tem,Kmm) ) 376 ztem2 = ts(ji,jj,jk,jp_tem,Kmm) - 10. 377 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 386 378 387 379 ! xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 388 xfracal(ji,jj,jk) = caco3r & 389 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 ) & 390 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 391 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 392 xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 393 END DO 394 END DO 395 END DO 396 ! 397 DO jk = 1, jpkm1 398 DO jj = 1, jpj 399 DO ji = 1, jpi 400 ! denitrification factor computed from O2 levels 401 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) & 402 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 403 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 404 END DO 405 END DO 406 END DO 380 xfracal(ji,jj,jk) = caco3r & 381 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., tr(ji,jj,jk,jpphy,Kbb)*1E6 ) & 382 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 383 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 384 xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 385 END_3D 386 ! 387 DO_3D_11_11( 1, jpkm1 ) 388 ! denitrification factor computed from O2 levels 389 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - tr(ji,jj,jk,jpoxy,Kbb) ) & 390 & / ( oxymin + tr(ji,jj,jk,jpoxy,Kbb) ) ) 391 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 392 END_3D 407 393 ! 408 394 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics
Note: See TracChangeset
for help on using the changeset viewer.