Changeset 12377 for NEMO/trunk/src/TOP/PISCES/P4Z/p5zlim.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/p5zlim.F90
r12277 r12377 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) … … 99 101 CONTAINS 100 102 101 SUBROUTINE p5z_lim( kt, knt )103 SUBROUTINE p5z_lim( kt, knt, Kbb, Kmm ) 102 104 !!--------------------------------------------------------------------- 103 105 !! *** ROUTINE p5z_lim *** … … 110 112 ! 111 113 INTEGER, INTENT(in) :: kt, knt 114 INTEGER, INTENT(in) :: Kbb, Kmm ! time level indices 112 115 ! 113 116 INTEGER :: ji, jj, jk … … 128 131 zratchl = 6.0 129 132 ! 130 DO jk = 1, jpkm1 131 DO jj = 1, jpj 132 DO ji = 1, jpi 133 ! 134 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 135 !------------------------------------- 136 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 137 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 138 zferlim = MIN( zferlim, 7e-11 ) 139 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 140 141 ! Computation of the mean relative size of each community 142 ! ------------------------------------------------------- 143 z1_trnphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 144 z1_trnpic = 1. / ( trb(ji,jj,jk,jppic) + rtrn ) 145 z1_trndia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 146 znanochl = trb(ji,jj,jk,jpnch) * z1_trnphy 147 zpicochl = trb(ji,jj,jk,jppch) * z1_trnpic 148 zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia 149 150 ! Computation of a variable Ks for iron on diatoms taking into account 151 ! that increasing biomass is made of generally bigger cells 152 !------------------------------------------------ 153 zsized = sized(ji,jj,jk)**0.81 154 zconcdfe = concdfer * zsized 155 zconc1d = concdno3 * zsized 156 zconc1dnh4 = concdnh4 * zsized 157 zconc0dpo4 = concdpo4 * zsized 158 159 zsizep = 1. 160 zconcpfe = concpfer * zsizep 161 zconc0p = concpno3 * zsizep 162 zconc0pnh4 = concpnh4 * zsizep 163 zconc0ppo4 = concppo4 * zsizep 164 165 zsizen = 1. 166 zconcnfe = concnfer * zsizen 167 zconc0n = concnno3 * zsizen 168 zconc0nnh4 = concnnh4 * zsizen 169 zconc0npo4 = concnpo4 * zsizen 170 171 ! Allometric variations of the minimum and maximum quotas 172 ! From Talmy et al. (2014) and Maranon et al. (2013) 173 ! ------------------------------------------------------- 174 xqnnmin(ji,jj,jk) = qnnmin 175 xqnnmax(ji,jj,jk) = qnnmax 176 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 177 xqndmax(ji,jj,jk) = qndmax 178 xqnpmin(ji,jj,jk) = qnpmin 179 xqnpmax(ji,jj,jk) = qnpmax 180 181 ! Computation of the optimal allocation parameters 182 ! Based on the different papers by Pahlow et al., and Smith et al. 183 ! ----------------------------------------------------------------- 184 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4, & 185 & trb(ji,jj,jk,jpno3) / zconc0n) 186 fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 187 znutlim = trb(ji,jj,jk,jppo4) / zconc0npo4 188 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 189 znutlim = biron(ji,jj,jk) / zconcnfe 190 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 191 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4, & 192 & trb(ji,jj,jk,jpno3) / zconc0p) 193 fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 194 znutlim = trb(ji,jj,jk,jppo4) / zconc0ppo4 195 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 196 znutlim = biron(ji,jj,jk) / zconcpfe 197 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 198 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4, & 199 & trb(ji,jj,jk,jpno3) / zconc1d ) 200 fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 201 znutlim = trb(ji,jj,jk,jppo4) / zconc0dpo4 202 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 203 znutlim = biron(ji,jj,jk) / zconcdfe 204 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 205 ! 206 ! Michaelis-Menten Limitation term for nutrients Small bacteria 207 ! ------------------------------------------------------------- 208 zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 209 zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) 210 ! 211 zlim1 = zbactno3 + zbactnh4 212 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbpo4) 213 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 214 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 215 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 216 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 217 ! 218 ! Michaelis-Menten Limitation term for nutrients Small flagellates 219 ! ----------------------------------------------- 220 zfalim = (1.-fanano) / fanano 221 xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) 222 xnanono3(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trb(ji,jj,jk,jpno3) ) & 223 & * (1. - xnanonh4(ji,jj,jk)) 224 ! 225 zfalim = (1.-fananop) / fananop 226 xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) 227 xnanodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 228 & * ( 1.0 - xnanopo4(ji,jj,jk) ) 229 xnanodop(ji,jj,jk) = 0. 230 ! 231 zfalim = (1.-fananof) / fananof 232 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 233 ! 234 zratiof = trb(ji,jj,jk,jpnfe) * z1_trnphy 235 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 236 ! 237 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) & 240 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 241 ! 242 zlim1 = max(0., (zration - 2. * xqnnmin(ji,jj,jk) ) & 243 & / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 244 & / (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 ) 248 ! 249 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 250 ! ---------------------------------------------------------------- 251 zfalim = (1.-fapico) / fapico 252 xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) 253 xpicono3(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trb(ji,jj,jk,jpno3) ) & 254 & * (1. - xpiconh4(ji,jj,jk)) 255 ! 256 zfalim = (1.-fapicop) / fapicop 257 xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) 258 xpicodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 259 & * ( 1.0 - xpicopo4(ji,jj,jk) ) 260 xpicodop(ji,jj,jk) = 0. 261 ! 262 zfalim = (1.-fapicof) / fapicof 263 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 264 ! 265 zratiof = trb(ji,jj,jk,jppfe) * z1_trnpic 266 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 267 ! 268 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) & 271 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 272 ! 273 zlim1 = max(0., (zration - 2. * xqnpmin(ji,jj,jk) ) & 274 & / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 275 & / (zration + rtrn) 276 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 277 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 278 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 279 ! 280 ! Michaelis-Menten Limitation term for nutrients Diatoms 281 ! ------------------------------------------------------ 282 zfalim = (1.-fadiat) / fadiat 283 xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) 284 xdiatno3(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trb(ji,jj,jk,jpno3) ) & 285 & * (1. - xdiatnh4(ji,jj,jk)) 286 ! 287 zfalim = (1.-fadiatp) / fadiatp 288 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) 289 xdiatdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 290 & * ( 1.0 - xdiatpo4(ji,jj,jk) ) 291 xdiatdop(ji,jj,jk) = 0. 292 ! 293 zfalim = (1.-fadiatf) / fadiatf 294 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 295 ! 296 zratiof = trb(ji,jj,jk,jpdfe) * z1_trndia 297 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 298 ! 299 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) & 302 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 303 ! 304 zlim1 = max(0., (zration - 2. * xqndmin(ji,jj,jk) ) & 305 & / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) ) & 306 & * xqndmax(ji,jj,jk) / (zration + rtrn) 307 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 308 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 309 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 310 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 311 xlimsi(ji,jj,jk) = MIN( zlim1, zlim4 ) 312 END DO 313 END DO 314 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 315 314 ! 316 315 ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. … … 319 318 ! phytoplankton (see Daines et al., 2013). 320 319 ! -------------------------------------------------------------------------------------------------- 321 DO jk = 1, jpkm1 322 DO jj = 1, jpj 323 DO ji = 1, jpi 324 ! Size estimation of nanophytoplankton 325 ! ------------------------------------ 326 zfvn = 2. * fvnuptk(ji,jj,jk) 327 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 328 329 ! N/P ratio of nanophytoplankton 330 ! ------------------------------ 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. 337 338 ! Size estimation of picophytoplankton 339 ! ------------------------------------ 340 zfvn = 2. * fvpuptk(ji,jj,jk) 341 sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 342 343 ! N/P ratio of picophytoplankton 344 ! ------------------------------ 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 351 352 ! Size estimation of diatoms 353 ! -------------------------- 354 zfvn = 2. * fvduptk(ji,jj,jk) 355 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 356 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 ) 358 359 ! N/P ratio of diatoms 360 ! -------------------- 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. 367 368 END DO 369 END DO 370 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 371 366 372 367 ! Compute the fraction of nanophytoplankton that is made of calcifiers 373 368 ! -------------------------------------------------------------------- 374 DO jk = 1, jpkm1 375 DO jj = 1, jpj 376 DO ji = 1, jpi 377 zlim1 = trb(ji,jj,jk,jpnh4) / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) + trb(ji,jj,jk,jpno3) & 378 & / ( trb(ji,jj,jk,jpno3) + concnno3 ) * ( 1.0 - trb(ji,jj,jk,jpnh4) & 379 & / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) ) 380 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnpo4 ) 381 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 5.E-11 ) 382 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 383 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 384 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) ) 385 378 386 379 ! xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 387 xfracal(ji,jj,jk) = caco3r & 388 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 ) & 389 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 390 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 391 xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 392 END DO 393 END DO 394 END DO 395 ! 396 DO jk = 1, jpkm1 397 DO jj = 1, jpj 398 DO ji = 1, jpi 399 ! denitrification factor computed from O2 levels 400 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 401 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 402 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 403 END DO 404 END DO 405 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 406 393 ! 407 394 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics … … 448 435 !!---------------------------------------------------------------------- 449 436 ! 450 REWIND( numnatp_ref )451 437 READ ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 452 438 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist' ) 453 439 ! 454 REWIND( numnatp_cfg )455 440 READ ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 456 441 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist' ) … … 489 474 ENDIF 490 475 491 REWIND( numnatp_ref )492 476 READ ( numnatp_ref, namp5zquota, IOSTAT = ios, ERR = 903) 493 477 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in reference namelist' ) 494 478 ! 495 REWIND( numnatp_cfg )496 479 READ ( numnatp_cfg, namp5zquota, IOSTAT = ios, ERR = 904 ) 497 480 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisquota in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.