258 | | 112c112 |
259 | | < REAL(wp) :: zz0 , zz1 ! - - |
260 | | --- |
261 | | > REAL(wp) :: zz0 , zz1 , ze3t, zlui ! - - |
262 | | 114,117c114,116 |
263 | | < REAL(wp) :: zlogc, zlogc2, zlogc3 |
264 | | < REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zekb, zekg, zekr |
265 | | < REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt |
266 | | < REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zetot, zchl3d |
267 | | --- |
268 | | > REAL(wp) :: zlogc |
269 | | > REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ze0, ze1, ze2, ze3 |
270 | | > REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, zetot, ztmp3d |
271 | | 162,164c161,163 |
272 | | < ALLOCATE( zekb(jpi,jpj) , zekg(jpi,jpj) , zekr (jpi,jpj) , & |
273 | | < & ze0 (jpi,jpj,jpk) , ze1 (jpi,jpj,jpk) , ze2 (jpi,jpj,jpk) , & |
274 | | < & ze3 (jpi,jpj,jpk) , zea (jpi,jpj,jpk) , zchl3d(jpi,jpj,jpk) ) |
275 | | --- |
276 | | > ALLOCATE( ze0 (jpi,jpj) , ze1 (jpi,jpj) , & |
277 | | > & ze2 (jpi,jpj) , ze3 (jpi,jpj) , & |
278 | | > & ztmp3d(jpi,jpj,nksr + 1) ) |
279 | | 167a167,193 |
280 | | > ! Separation in R-G-B depending of the surface Chl |
281 | | > DO_3D_00_00 ( 1, nksr + 1 ) |
282 | | > zchl = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) |
283 | | > zCze = 1.12 * (zchl)**0.803 |
284 | | > zCtot = 40.6 * zchl**0.459 |
285 | | > zlogc = LOG( zchl ) |
286 | | > ! |
287 | | > zCb = 0.768 + zlogc * ( 0.087 - zlogc * ( 0.179 + zlogc * 0.025 ) ) |
288 | | > zCmax = 0.299 - zlogc * ( 0.289 - zlogc * 0.579 ) |
289 | | > zpsimax = 0.6 - zlogc * ( 0.640 - zlogc * ( 0.021 + zlogc * 0.115 ) ) |
290 | | > zdelpsi = 0.710 + zlogc * ( 0.159 + zlogc * 0.021 ) |
291 | | > ! |
292 | | > zze = 568.2 * zCtot**(-0.746) |
293 | | > IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) |
294 | | > zpsi = gdepw(ji,jj,jk,Kmm) / zze |
295 | | > ! |
296 | | > ! NB. make sure zchl value is such that: zchl = MIN( 10. , MAX( 0.03, zchl ) ) |
297 | | > zchl = MIN( 10. , MAX( 0.03, zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) ) ) |
298 | | > ! Convert chlorophyll value to attenuation coefficient look-up table index |
299 | | > ztmp3d(ji,jj,jk) = 41 + 20.*LOG10(zchl) + 1.e-15 |
300 | | > END_3D |
301 | | > ELSE !* constant chlorophyll |
302 | | > zchl = 0.05 |
303 | | > ! NB. make sure constant value is such that: |
304 | | > zchl = MIN( 10. , MAX( 0.03, zchl ) ) |
305 | | > ! Convert chlorophyll value to attenuation coefficient look-up table index |
306 | | > zlui = 41 + 20.*LOG10(zchl) + 1.e-15 |
307 | | 169,189c195 |
308 | | < DO jj = 2, jpjm1 ! Separation in R-G-B depending of the surface Chl |
309 | | < DO ji = 2, jpim1 |
310 | | < zchl = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) |
311 | | < zCtot = 40.6 * zchl**0.459 |
312 | | < zze = 568.2 * zCtot**(-0.746) |
313 | | < IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) |
314 | | < zpsi = gdepw(ji,jj,jk,Kmm) / zze |
315 | | < ! |
316 | | < zlogc = LOG( zchl ) |
317 | | < zlogc2 = zlogc * zlogc |
318 | | < zlogc3 = zlogc * zlogc * zlogc |
319 | | < zCb = 0.768 + 0.087 * zlogc - 0.179 * zlogc2 - 0.025 * zlogc3 |
320 | | < zCmax = 0.299 - 0.289 * zlogc + 0.579 * zlogc2 |
321 | | < zpsimax = 0.6 - 0.640 * zlogc + 0.021 * zlogc2 + 0.115 * zlogc3 |
322 | | < zdelpsi = 0.710 + 0.159 * zlogc + 0.021 * zlogc2 |
323 | | < zCze = 1.12 * (zchl)**0.803 |
324 | | < ! |
325 | | < zchl3d(ji,jj,jk) = zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) |
326 | | < END DO |
327 | | < ! |
328 | | < END DO |
329 | | --- |
330 | | > ztmp3d(:,:,jk) = zlui |
331 | | 191,194d196 |
332 | | < ELSE !* constant chrlorophyll |
333 | | < DO jk = 1, nksr + 1 |
334 | | < zchl3d(:,:,jk) = 0.05 |
335 | | < ENDDO |
336 | | 199,203c201,207 |
337 | | < ze0(ji,jj,1) = rn_abs * qsr(ji,jj) |
338 | | < ze1(ji,jj,1) = zcoef * qsr(ji,jj) |
339 | | < ze2(ji,jj,1) = zcoef * qsr(ji,jj) |
340 | | < ze3(ji,jj,1) = zcoef * qsr(ji,jj) |
341 | | < zea(ji,jj,1) = qsr(ji,jj) |
342 | | --- |
343 | | > ze0(ji,jj) = rn_abs * qsr(ji,jj) |
344 | | > ze1(ji,jj) = zcoef * qsr(ji,jj) |
345 | | > ze2(ji,jj) = zcoef * qsr(ji,jj) |
346 | | > ze3(ji,jj) = zcoef * qsr(ji,jj) |
347 | | > ! store the surface SW radiation; re-use the surface ztmp3d array |
348 | | > ! since the surface attenuation coefficient is not used |
349 | | > ztmp3d(ji,jj,1) = qsr(ji,jj) |
350 | | 206,226c210,223 |
351 | | < DO jk = 2, nksr+1 !* interior equi-partition in R-G-B depending of vertical profile of Chl |
352 | | < DO_2D_00_00 |
353 | | < zchl = MIN( 10. , MAX( 0.03, zchl3d(ji,jj,jk) ) ) |
354 | | < irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) |
355 | | < zekb(ji,jj) = rkrgb(1,irgb) |
356 | | < zekg(ji,jj) = rkrgb(2,irgb) |
357 | | < zekr(ji,jj) = rkrgb(3,irgb) |
358 | | < END_2D |
359 | | < |
360 | | < DO_2D_00_00 |
361 | | < zc0 = ze0(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * xsi0r ) |
362 | | < zc1 = ze1(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekb(ji,jj) ) |
363 | | < zc2 = ze2(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekg(ji,jj) ) |
364 | | < zc3 = ze3(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekr(ji,jj) ) |
365 | | < ze0(ji,jj,jk) = zc0 |
366 | | < ze1(ji,jj,jk) = zc1 |
367 | | < ze2(ji,jj,jk) = zc2 |
368 | | < ze3(ji,jj,jk) = zc3 |
369 | | < zea(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) |
370 | | < END_2D |
371 | | < END DO |
372 | | --- |
373 | | > !* interior equi-partition in R-G-B depending of vertical profile of Chl |
374 | | > DO_3D_00_00 ( 2, nksr + 1 ) |
375 | | > ze3t = e3t(ji,jj,jk-1,Kmm) |
376 | | > irgb = NINT( ztmp3d(ji,jj,jk) ) |
377 | | > zc0 = ze0(ji,jj) * EXP( - ze3t * xsi0r ) |
378 | | > zc1 = ze1(ji,jj) * EXP( - ze3t * rkrgb(1,irgb) ) |
379 | | > zc2 = ze2(ji,jj) * EXP( - ze3t * rkrgb(2,irgb) ) |
380 | | > zc3 = ze3(ji,jj) * EXP( - ze3t * rkrgb(3,irgb) ) |
381 | | > ze0(ji,jj) = zc0 |
382 | | > ze1(ji,jj) = zc1 |
383 | | > ze2(ji,jj) = zc2 |
384 | | > ze3(ji,jj) = zc3 |
385 | | > ztmp3d(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) |
386 | | > END_3D |
387 | | 229c226 |
388 | | < qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) |
389 | | --- |
390 | | > qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( ztmp3d(ji,jj,jk) - ztmp3d(ji,jj,jk+1) ) |
391 | | 232c229 |
392 | | < DEALLOCATE( zekb , zekg , zekr , ze0 , ze1 , ze2 , ze3 , zea , zchl3d ) |
393 | | --- |
394 | | > DEALLOCATE( ze0 , ze1 , ze2 , ze3 , ztmp3d ) |
| 258 | --- ORG/traqsr.F90 2020-05-13 11:37:57.094258396 +0100 |
| 259 | +++ traqsr.F90 2020-05-15 14:48:00.138206859 +0100 |
| 260 | @@ -109,12 +109,11 @@ |
| 261 | REAL(wp) :: zchl, zcoef, z1_2 ! local scalars |
| 262 | REAL(wp) :: zc0 , zc1 , zc2 , zc3 ! - - |
| 263 | REAL(wp) :: zzc0, zzc1, zzc2, zzc3 ! - - |
| 264 | - REAL(wp) :: zz0 , zz1 ! - - |
| 265 | + REAL(wp) :: zz0 , zz1 , ze3t, zlui ! - - |
| 266 | REAL(wp) :: zCb, zCmax, zze, zpsi, zpsimax, zdelpsi, zCtot, zCze |
| 267 | - REAL(wp) :: zlogc, zlogc2, zlogc3 |
| 268 | - REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zekb, zekg, zekr |
| 269 | - REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt |
| 270 | - REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zetot, zchl3d |
| 271 | + REAL(wp) :: zlogc |
| 272 | + REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: ze0, ze1, ze2, ze3 |
| 273 | + REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, zetot, ztmp3d |
| 274 | !!---------------------------------------------------------------------- |
| 275 | ! |
| 276 | IF( ln_timing ) CALL timing_start('tra_qsr') |
| 277 | @@ -159,77 +158,75 @@ |
| 278 | ! |
| 279 | CASE( np_RGB , np_RGBc ) !== R-G-B fluxes ==! |
| 280 | ! |
| 281 | - ALLOCATE( zekb(jpi,jpj) , zekg(jpi,jpj) , zekr (jpi,jpj) , & |
| 282 | - & ze0 (jpi,jpj,jpk) , ze1 (jpi,jpj,jpk) , ze2 (jpi,jpj,jpk) , & |
| 283 | - & ze3 (jpi,jpj,jpk) , zea (jpi,jpj,jpk) , zchl3d(jpi,jpj,jpk) ) |
| 284 | + ALLOCATE( ze0 (jpi,jpj) , ze1 (jpi,jpj) , & |
| 285 | + & ze2 (jpi,jpj) , ze3 (jpi,jpj) , & |
| 286 | + & ztmp3d(jpi,jpj,nksr + 1) ) |
| 287 | ! |
| 288 | IF( nqsr == np_RGBc ) THEN !* Variable Chlorophyll |
| 289 | CALL fld_read( kt, 1, sf_chl ) ! Read Chl data and provides it at the current time step |
| 290 | + ! Separation in R-G-B depending of the surface Chl |
| 291 | + DO_3D_00_00 ( 1, nksr + 1 ) |
| 292 | + zchl = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) |
| 293 | + zCze = 1.12 * (zchl)**0.803 |
| 294 | + zCtot = 40.6 * zchl**0.459 |
| 295 | + zlogc = LOG( zchl ) |
| 296 | + ! |
| 297 | + zCb = 0.768 + zlogc * ( 0.087 - zlogc * ( 0.179 + zlogc * 0.025 ) ) |
| 298 | + zCmax = 0.299 - zlogc * ( 0.289 - zlogc * 0.579 ) |
| 299 | + zpsimax = 0.6 - zlogc * ( 0.640 - zlogc * ( 0.021 + zlogc * 0.115 ) ) |
| 300 | + zdelpsi = 0.710 + zlogc * ( 0.159 + zlogc * 0.021 ) |
| 301 | + ! |
| 302 | + zze = 568.2 * zCtot**(-0.746) |
| 303 | + IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) |
| 304 | + zpsi = gdepw(ji,jj,jk,Kmm) / zze |
| 305 | + ! |
| 306 | + ! NB. make sure zchl value is such that: zchl = MIN( 10. , MAX( 0.03, zchl ) ) |
| 307 | + zchl = MIN( 10. , MAX( 0.03, zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) ) ) |
| 308 | + ! Convert chlorophyll value to attenuation coefficient look-up table index |
| 309 | + ztmp3d(ji,jj,jk) = 41 + 20.*LOG10(zchl) + 1.e-15 |
| 310 | + END_3D |
| 311 | + ELSE !* constant chlorophyll |
| 312 | + zchl = 0.05 |
| 313 | + ! NB. make sure constant value is such that: |
| 314 | + zchl = MIN( 10. , MAX( 0.03, zchl ) ) |
| 315 | + ! Convert chlorophyll value to attenuation coefficient look-up table index |
| 316 | + zlui = 41 + 20.*LOG10(zchl) + 1.e-15 |
| 317 | DO jk = 1, nksr + 1 |
| 318 | - DO jj = 2, jpjm1 ! Separation in R-G-B depending of the surface Chl |
| 319 | - DO ji = 2, jpim1 |
| 320 | - zchl = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) |
| 321 | - zCtot = 40.6 * zchl**0.459 |
| 322 | - zze = 568.2 * zCtot**(-0.746) |
| 323 | - IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) |
| 324 | - zpsi = gdepw(ji,jj,jk,Kmm) / zze |
| 325 | - ! |
| 326 | - zlogc = LOG( zchl ) |
| 327 | - zlogc2 = zlogc * zlogc |
| 328 | - zlogc3 = zlogc * zlogc * zlogc |
| 329 | - zCb = 0.768 + 0.087 * zlogc - 0.179 * zlogc2 - 0.025 * zlogc3 |
| 330 | - zCmax = 0.299 - 0.289 * zlogc + 0.579 * zlogc2 |
| 331 | - zpsimax = 0.6 - 0.640 * zlogc + 0.021 * zlogc2 + 0.115 * zlogc3 |
| 332 | - zdelpsi = 0.710 + 0.159 * zlogc + 0.021 * zlogc2 |
| 333 | - zCze = 1.12 * (zchl)**0.803 |
| 334 | - ! |
| 335 | - zchl3d(ji,jj,jk) = zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) |
| 336 | - END DO |
| 337 | - ! |
| 338 | - END DO |
| 339 | + ztmp3d(:,:,jk) = zlui |
| 340 | END DO |
| 341 | - ELSE !* constant chrlorophyll |
| 342 | - DO jk = 1, nksr + 1 |
| 343 | - zchl3d(:,:,jk) = 0.05 |
| 344 | - ENDDO |
| 345 | ENDIF |
| 346 | ! |
| 347 | zcoef = ( 1. - rn_abs ) / 3._wp !* surface equi-partition in R-G-B |
| 348 | DO_2D_00_00 |
| 349 | - ze0(ji,jj,1) = rn_abs * qsr(ji,jj) |
| 350 | - ze1(ji,jj,1) = zcoef * qsr(ji,jj) |
| 351 | - ze2(ji,jj,1) = zcoef * qsr(ji,jj) |
| 352 | - ze3(ji,jj,1) = zcoef * qsr(ji,jj) |
| 353 | - zea(ji,jj,1) = qsr(ji,jj) |
| 354 | + ze0(ji,jj) = rn_abs * qsr(ji,jj) |
| 355 | + ze1(ji,jj) = zcoef * qsr(ji,jj) |
| 356 | + ze2(ji,jj) = zcoef * qsr(ji,jj) |
| 357 | + ze3(ji,jj) = zcoef * qsr(ji,jj) |
| 358 | + ! store the surface SW radiation; re-use the surface ztmp3d array |
| 359 | + ! since the surface attenuation coefficient is not used |
| 360 | + ztmp3d(ji,jj,1) = qsr(ji,jj) |
| 361 | END_2D |
| 362 | ! |
| 363 | - DO jk = 2, nksr+1 !* interior equi-partition in R-G-B depending of vertical profile of Chl |
| 364 | - DO_2D_00_00 |
| 365 | - zchl = MIN( 10. , MAX( 0.03, zchl3d(ji,jj,jk) ) ) |
| 366 | - irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) |
| 367 | - zekb(ji,jj) = rkrgb(1,irgb) |
| 368 | - zekg(ji,jj) = rkrgb(2,irgb) |
| 369 | - zekr(ji,jj) = rkrgb(3,irgb) |
| 370 | - END_2D |
| 371 | - |
| 372 | - DO_2D_00_00 |
| 373 | - zc0 = ze0(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * xsi0r ) |
| 374 | - zc1 = ze1(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekb(ji,jj) ) |
| 375 | - zc2 = ze2(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekg(ji,jj) ) |
| 376 | - zc3 = ze3(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekr(ji,jj) ) |
| 377 | - ze0(ji,jj,jk) = zc0 |
| 378 | - ze1(ji,jj,jk) = zc1 |
| 379 | - ze2(ji,jj,jk) = zc2 |
| 380 | - ze3(ji,jj,jk) = zc3 |
| 381 | - zea(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) |
| 382 | - END_2D |
| 383 | - END DO |
| 384 | + !* interior equi-partition in R-G-B depending of vertical profile of Chl |
| 385 | + DO_3D_00_00 ( 2, nksr + 1 ) |
| 386 | + ze3t = e3t(ji,jj,jk-1,Kmm) |
| 387 | + irgb = NINT( ztmp3d(ji,jj,jk) ) |
| 388 | + zc0 = ze0(ji,jj) * EXP( - ze3t * xsi0r ) |
| 389 | + zc1 = ze1(ji,jj) * EXP( - ze3t * rkrgb(1,irgb) ) |
| 390 | + zc2 = ze2(ji,jj) * EXP( - ze3t * rkrgb(2,irgb) ) |
| 391 | + zc3 = ze3(ji,jj) * EXP( - ze3t * rkrgb(3,irgb) ) |
| 392 | + ze0(ji,jj) = zc0 |
| 393 | + ze1(ji,jj) = zc1 |
| 394 | + ze2(ji,jj) = zc2 |
| 395 | + ze3(ji,jj) = zc3 |
| 396 | + ztmp3d(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) |
| 397 | + END_3D |
| 398 | ! |
| 399 | DO_3D_00_00( 1, nksr ) |
| 400 | - qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) |
| 401 | + qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( ztmp3d(ji,jj,jk) - ztmp3d(ji,jj,jk+1) ) |
| 402 | END_3D |
| 403 | ! |
| 404 | - DEALLOCATE( zekb , zekg , zekr , ze0 , ze1 , ze2 , ze3 , zea , zchl3d ) |
| 405 | + DEALLOCATE( ze0 , ze1 , ze2 , ze3 , ztmp3d ) |
| 406 | ! |
| 407 | CASE( np_2BD ) !== 2-bands fluxes ==! |
| 408 | ! |