Changeset 12524 for NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90
- Timestamp:
- 2020-03-09T14:42:03+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11708_aumont_PISCES_QUOTA/src/TOP/PISCES/P4Z/p5zmeso.F90
r12349 r12524 23 23 PUBLIC p5z_meso ! called in p5zbio.F90 24 24 PUBLIC p5z_meso_init ! called in trcsms_pisces.F90 25 PUBLIC p5z_meso_alloc 25 26 26 27 !! * Shared module variables … … 49 50 REAL(wp), PUBLIC :: srespir2 !: Active respiration 50 51 REAL(wp), PUBLIC :: grazflux !: mesozoo flux feeding rate 52 REAL(wp), PUBLIC :: xfracmig !: Fractional biomass of meso that performs DVM 51 53 LOGICAL, PUBLIC :: bmetexc2 !: Use of excess carbon for respiration 54 LOGICAL , PUBLIC :: ln_dvm_meso !: Boolean to activate DVM of mesozooplankton 55 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: depmig 56 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: kmig 57 52 58 53 59 !!---------------------------------------------------------------------- … … 68 74 !!--------------------------------------------------------------------- 69 75 INTEGER, INTENT(in) :: kt, knt ! ocean time step 70 INTEGER :: ji, jj, jk 76 INTEGER :: ji, jj, jk, jkt 71 77 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam, zcompames 72 78 REAL(wp) :: zgraze2, zdenom, zfact, zfood, zfoodlim, zproport … … 74 80 REAL(wp) :: zepsherf, zepshert, zepsherq, zepsherv, zrespirc, zrespirn, zrespirp, zbasresb, zbasresi 75 81 REAL(wp) :: zgraztotc, zgraztotn, zgraztotp, zgraztotf, zbasresn, zbasresp, zbasresf 76 REAL(wp) :: zgradoc, zgradon, zgradop, zgratmp, zgradoct, zgradont, zgrareft, zgradopt 77 REAL(wp) :: zgrapoc, zgrapon, zgrapop, zgrapof, zprcaca, zmortz 78 REAL(wp) :: zexcess, zgrarem, zgraren, zgrarep, zgraref 82 REAL(wp) :: zgratmp, zgradoct, zgradont, zgrareft, zgradopt 83 REAL(wp) :: zprcaca, zmortz, zexcess 79 84 REAL(wp) :: zbeta, zrespz, ztortz, zgrasratp, zgrasratn, zgrasratf 80 85 REAL(wp) :: ztmp1, ztmp2, ztmp3, ztmp4, ztmp5, ztmptot … … 84 89 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 85 90 REAL(wp) :: zgrazffnp, zgrazffng, zgrazffpp, zgrazffpg 91 REAL(wp) :: zmigreltime, zrum, zcodel, zargu, zval 86 92 CHARACTER (len=25) :: charout 87 93 REAL(wp) :: zrfact2, zmetexcess, zsigma, zdiffdn 88 94 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing, zfezoo2 89 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 95 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarem, zgraref, zgrapoc, zgrapof 96 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrarep, zgraren, zgrapon, zgrapop 97 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgradoc, zgradon, zgradop 98 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrem, zgramigref, zgramigpoc, zgramigpof, zstrn 99 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigrep, zgramigren, zgramigpop, zgramigpon 100 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zgramigdoc, zgramigdop, zgramigdon 101 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d, zz2ligprod 90 102 91 103 !!--------------------------------------------------------------------- … … 93 105 IF( ln_timing ) CALL timing_start('p5z_meso') 94 106 ! 95 96 107 zgrazing(:,:,:) = 0._wp 97 108 zfezoo2 (:,:,:) = 0._wp … … 101 112 zz2ligprod(:,:,:) = 0._wp 102 113 ENDIF 114 115 ! 116 ! Diurnal vertical migration of mesozooplankton 117 ! --------------------------------------------- 118 IF (ln_dvm_meso) CALL p5z_meso_depmig 103 119 104 120 zmetexcess = 0.0 … … 268 284 zgrareft = (1. - unass2c) * zgraztotf - zepsherv * ferat3 * zgraztotc - zbasresf 269 285 ztmp1 = ( 1. - epsher2 - unass2c ) /( 1. - 0.8 * epsher2 ) * ztortz 270 zgradoc = (zgradoct + ztmp1) * ssigma2271 zgradon = (zgradont + no3rat3 * ztmp1) * ssigma2272 zgradop = (zgradopt + po4rat3 * ztmp1) * ssigma2286 zgradoc(ji,jj,jk) = (zgradoct + ztmp1) * ssigma2 287 zgradon(ji,jj,jk) = (zgradont + no3rat3 * ztmp1) * ssigma2 288 zgradop(ji,jj,jk) = (zgradopt + po4rat3 * ztmp1) * ssigma2 273 289 zgratmp = 0.2 * epsher2 /( 1. - 0.8 * epsher2 ) * ztortz 274 290 … … 277 293 ! as dissolved inorganic compounds (ssigma2) 278 294 ! -------------------------------------------------- 279 zgrarem = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2)280 zgraren = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2)281 zgrarep = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2)282 zgraref = zgrareft + ferat3 * ( ztmp1 + zgratmp )295 zgrarem(ji,jj,jk) = zgratmp + ( zgradoct + ztmp1 ) * (1.0 - ssigma2) 296 zgraren(ji,jj,jk) = no3rat3 * zgratmp + ( zgradont + no3rat3 * ztmp1 ) * (1.0 - ssigma2) 297 zgrarep(ji,jj,jk) = po4rat3 * zgratmp + ( zgradopt + po4rat3 * ztmp1 ) * (1.0 - ssigma2) 298 zgraref(ji,jj,jk) = zgrareft + ferat3 * ( ztmp1 + zgratmp ) 283 299 284 300 ! Defecation as a result of non assimilated products 285 301 ! -------------------------------------------------- 286 zgrapoc = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz287 zgrapon = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz288 zgrapop = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz289 zgrapof = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz302 zgrapoc(ji,jj,jk) = zgraztotc * unass2c + unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 303 zgrapon(ji,jj,jk) = zgraztotn * unass2n + no3rat3 * unass2n / ( 1. - 0.8 * epsher2 ) * ztortz 304 zgrapop(ji,jj,jk) = zgraztotp * unass2p + po4rat3 * unass2p / ( 1. - 0.8 * epsher2 ) * ztortz 305 zgrapof(ji,jj,jk) = zgraztotf * unass2c + ferat3 * unass2c / ( 1. - 0.8 * epsher2 ) * ztortz 290 306 291 307 ! Addition of respiration to the release of inorganic nutrients 292 308 ! ------------------------------------------------------------- 293 zgrarem = zgrarem+ zbasresi + zrespirc294 zgraren = zgraren+ zbasresn + zrespirc * no3rat3295 zgrarep = zgrarep+ zbasresp + zrespirc * po4rat3296 zgraref = zgraref+ zbasresf + zrespirc * ferat3309 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) + zbasresi + zrespirc 310 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) + zbasresn + zrespirc * no3rat3 311 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) + zbasresp + zrespirc * po4rat3 312 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) + zbasresf + zrespirc * ferat3 297 313 298 314 ! Update the arrays TRA which contain the biological sources and 299 315 ! sinks 300 316 ! -------------------------------------------------------------- 301 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep302 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren303 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc304 !305 IF( ln_ligand ) THEN306 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz307 zz2ligprod(ji,jj,jk) = zgradoc * ldocz308 ENDIF309 !310 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon311 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop312 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem313 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref314 zfezoo2(ji,jj,jk) = zgraref315 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem316 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren317 317 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) + zepsherv * zgraztotc - zrespirc & 318 318 & - ztortz - zgrazm … … 332 332 333 333 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfracc 334 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc335 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep334 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfracc 335 conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 336 336 tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) - zgrazpon - zgrazffnp + zfracn 337 337 tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) - zgrazpop - zgrazffpp + zfracp 338 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zgrazffeg + zgrapoc - zfracc 339 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc 340 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 341 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) - zgrazffng + zgrapon - zfracn 342 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zgrazffpg + zgrapop - zfracp 338 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zgrazffeg - zfracc 339 consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfracc 340 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) - zgrazffng - zfracn 341 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zgrazffpg - zfracp 343 342 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 344 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg + zgrapof- zfracfe343 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zgrazfffg - zfracfe 345 344 zfracal = trb(ji,jj,jk,jpcal) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 346 345 zgrazcal = zgrazffeg * (1. - part2) * zfracal 347 348 346 ! calcite production 349 347 ! ------------------ … … 354 352 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * ( zgrazcal - zprcaca ) 355 353 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 354 END DO 355 END DO 356 END DO 357 358 IF (ln_dvm_meso) THEN 359 ALLOCATE( zgramigrem(jpi,jpj), zgramigref(jpi,jpj), zgramigpoc(jpi,jpj), zgramigpof(jpi,jpj) ) 360 ALLOCATE( zgramigrep(jpi,jpj), zgramigren(jpi,jpj), zgramigpop(jpi,jpj), zgramigpon(jpi,jpj) ) 361 ALLOCATE( zgramigdoc(jpi,jpj), zgramigdon(jpi,jpj), zgramigdop(jpi,jpj) ) 362 363 ALLOCATE( zstrn(jpi,jpj) ) 364 zgramigrem(:,:) = 0.0 ; zgramigref(:,:) = 0.0 365 zgramigrep(:,:) = 0.0 ; zgramigren(:,:) = 0.0 366 zgramigpoc(:,:) = 0.0 ; zgramigpof(:,:) = 0.0 367 zgramigpop(:,:) = 0.0 ; zgramigpon(:,:) = 0.0 368 zgramigdoc(:,:) = 0.0 ; zgramigdon(:,:) = 0.0 369 zgramigdop(:,:) = 0.0 370 371 ! compute the day length depending on latitude and the day 372 zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 373 zcodel = ASIN( SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp ) ) 374 375 ! day length in hours 376 zstrn(:,:) = 0. 377 DO jj = 1, jpj 378 DO ji = 1, jpi 379 zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 380 zargu = MAX( -1., MIN( 1., zargu ) ) 381 zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 382 zstrn(ji,jj) = MIN(0.75, MAX( 0.25, zstrn(ji,jj) / 24.) ) 383 END DO 384 END DO 385 386 387 DO jk = 1, jpk 388 DO jj = 1, jpj 389 DO ji = 1, jpi 390 391 ! Compute the amount of materials that will go into vertical migration 392 zmigreltime = (1. - zstrn(ji,jj)) 393 IF ( gdept_n(ji,jj,jk) <= heup(ji,jj) ) THEN 394 zgramigrem(ji,jj) = zgramigrem(ji,jj) + xfracmig * zgrarem(ji,jj,jk) * (1. - zmigreltime ) & 395 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 396 zgramigrep(ji,jj) = zgramigrep(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime ) & 397 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 398 zgramigrep(ji,jj) = zgramigren(ji,jj) + xfracmig * zgrarep(ji,jj,jk) * (1. - zmigreltime ) & 399 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 400 zgramigref(ji,jj) = zgramigref(ji,jj) + xfracmig * zgraref(ji,jj,jk) * (1. - zmigreltime ) & 401 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 402 zgramigpoc(ji,jj) = zgramigpoc(ji,jj) + xfracmig * zgrapoc(ji,jj,jk) * (1. - zmigreltime ) & 403 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 404 zgramigpop(ji,jj) = zgramigpop(ji,jj) + xfracmig * zgrapop(ji,jj,jk) * (1. - zmigreltime ) & 405 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 406 zgramigpon(ji,jj) = zgramigpon(ji,jj) + xfracmig * zgrapon(ji,jj,jk) * (1. - zmigreltime ) & 407 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 408 zgramigpof(ji,jj) = zgramigpof(ji,jj) + xfracmig * zgrapof(ji,jj,jk) * (1. - zmigreltime ) & 409 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 410 zgramigdoc(ji,jj) = zgramigdoc(ji,jj) + xfracmig * zgradoc(ji,jj,jk) * (1. - zmigreltime ) & 411 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 412 zgramigdop(ji,jj) = zgramigdop(ji,jj) + xfracmig * zgradop(ji,jj,jk) * (1. - zmigreltime ) & 413 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 414 zgramigdon(ji,jj) = zgramigdon(ji,jj) + xfracmig * zgradon(ji,jj,jk) * (1. - zmigreltime ) & 415 & * e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 416 417 zgrarem(ji,jj,jk) = zgrarem(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 418 zgrarep(ji,jj,jk) = zgrarep(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 419 zgraren(ji,jj,jk) = zgraren(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 420 zgraref(ji,jj,jk) = zgraref(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 421 zgrapoc(ji,jj,jk) = zgrapoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 422 zgrapop(ji,jj,jk) = zgrapop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 423 zgrapon(ji,jj,jk) = zgrapon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 424 zgrapof(ji,jj,jk) = zgrapof(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 425 zgradoc(ji,jj,jk) = zgradoc(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 426 zgradop(ji,jj,jk) = zgradop(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 427 zgradon(ji,jj,jk) = zgradon(ji,jj,jk) * ( (1.0 - xfracmig) + xfracmig * zmigreltime ) 428 ENDIF 429 END DO 430 END DO 431 END DO 432 433 DO jj = 1, jpj 434 DO ji = 1, jpi 435 IF (tmask(ji,jj,1) == 1.) THEN 436 jkt = kmig(ji,jj) 437 zgrarem(ji,jj,jkt) = zgrarem(ji,jj,jkt) + zgramigrem(ji,jj) / e3t_n(ji,jj,jkt) 438 zgrarep(ji,jj,jkt) = zgrarep(ji,jj,jkt) + zgramigrep(ji,jj) / e3t_n(ji,jj,jkt) 439 zgraren(ji,jj,jkt) = zgraren(ji,jj,jkt) + zgramigren(ji,jj) / e3t_n(ji,jj,jkt) 440 zgraref(ji,jj,jkt) = zgraref(ji,jj,jkt) + zgramigref(ji,jj) / e3t_n(ji,jj,jkt) 441 zgrapoc(ji,jj,jkt) = zgrapoc(ji,jj,jkt) + zgramigpoc(ji,jj) / e3t_n(ji,jj,jkt) 442 zgrapop(ji,jj,jkt) = zgrapop(ji,jj,jkt) + zgramigpop(ji,jj) / e3t_n(ji,jj,jkt) 443 zgrapon(ji,jj,jkt) = zgrapon(ji,jj,jkt) + zgramigpon(ji,jj) / e3t_n(ji,jj,jkt) 444 zgrapof(ji,jj,jkt) = zgrapof(ji,jj,jkt) + zgramigpof(ji,jj) / e3t_n(ji,jj,jkt) 445 zgradoc(ji,jj,jkt) = zgradoc(ji,jj,jkt) + zgramigdoc(ji,jj) / e3t_n(ji,jj,jkt) 446 zgradop(ji,jj,jkt) = zgradop(ji,jj,jkt) + zgramigdop(ji,jj) / e3t_n(ji,jj,jkt) 447 zgradon(ji,jj,jkt) = zgradon(ji,jj,jkt) + zgramigdon(ji,jj) / e3t_n(ji,jj,jkt) 448 ENDIF 449 END DO 450 END DO 451 ! 452 ! Deallocate temporary variables 453 ! ------------------------------ 454 DEALLOCATE( zgramigrem, zgramigref, zgramigpoc, zgramigpof ) 455 DEALLOCATE( zgramigrep, zgramigren, zgramigpop, zgramigpon ) 456 DEALLOCATE( zgramigdoc, zgramigdon, zgramigdop ) 457 DEALLOCATE( zstrn ) 458 459 ENDIF 460 461 DO jk = 1, jpk 462 DO jj = 1, jpj 463 DO ji = 1, jpi 464 ! Update the arrays TRA which contain the biological sources and sinks 465 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zgrarep(ji,jj,jk) 466 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgraren(ji,jj,jk) 467 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc(ji,jj,jk) 468 ! 469 IF( ln_ligand ) THEN 470 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc(ji,jj,jk) * ldocz 471 zz2ligprod(ji,jj,jk) = zgradoc(ji,jj,jk) * ldocz 472 ENDIF 473 ! 474 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon(ji,jj,jk) 475 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zgradop(ji,jj,jk) 476 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem(ji,jj,jk) 477 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref(ji,jj,jk) 478 zfezoo2(ji,jj,jk) = zgraref(ji,jj,jk) 479 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem(ji,jj,jk) 480 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren(ji,jj,jk) 481 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc(ji,jj,jk) 482 prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zgrapoc(ji,jj,jk) 483 tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zgrapon(ji,jj,jk) 484 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + zgrapop(ji,jj,jk) 485 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zgrapof(ji,jj,jk) 356 486 END DO 357 487 END DO … … 407 537 & xpref2m, xpref2d, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 408 538 & xthresh2mes, xthresh2, xkgraz2, epsher2, epsher2min, ssigma2, unass2c, & 409 & unass2n, unass2p, srespir2, grazflux 539 & unass2n, unass2p, srespir2, grazflux, ln_dvm_meso, xfracmig 410 540 !!---------------------------------------------------------------------- 411 541 ! … … 448 578 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 = ', xkgraz2 449 579 WRITE(numout,*) ' Use excess carbon for respiration bmetexc2 = ', bmetexc2 580 WRITE(numout,*) ' Diurnal vertical migration of mesozoo. ln_dvm_meso =', ln_dvm_meso 581 WRITE(numout,*) ' Fractional biomass of meso that performs DVM xfracmig =', xfracmig 450 582 ENDIF 451 583 ! 452 584 END SUBROUTINE p5z_meso_init 585 586 SUBROUTINE p5z_meso_depmig 587 !!---------------------------------------------------------------------- 588 !! *** ROUTINE p5z_meso_depmig *** 589 !! 590 !! ** Purpose : Computation the migration depth of mesozooplankton 591 !! 592 !! ** Method : Computes the DVM depth of mesozooplankton from oxygen 593 !! temperature and chlorophylle following the parameterization 594 !! proposed by Bianchi et al. (2013) 595 !! 596 !! ** input : 597 !!---------------------------------------------------------------------- 598 INTEGER :: ji, jj, jk 599 ! 600 REAL(wp) :: totchl 601 REAL(wp), DIMENSION(jpi,jpj) :: oxymoy, tempmoy, zdepmoy 602 603 !!--------------------------------------------------------------------- 604 ! 605 IF( ln_timing == 1 ) CALL timing_start('p5z_meso_zdepmig') 606 ! 607 oxymoy(:,:) = 0. 608 tempmoy(:,:) = 0. 609 zdepmoy(:,:) = 0. 610 depmig (:,:) = 5. 611 kmig (:,:) = 1 612 ! 613 ! Compute the averaged values of oxygen, temperature over the domain 614 ! 150m to 500 m depth. 615 ! 616 DO jk =1, jpk 617 DO jj = 1, jpj 618 DO ji = 1, jpi 619 IF (tmask(ji,jj,jk) == 1.) THEN 620 IF (gdept_n(ji,jj,jk) >= 150. .AND. gdept_n(ji,jj,jk) <= 500.) THEN 621 oxymoy(ji,jj) = oxymoy(ji,jj) + trb(ji,jj,jk,jpoxy)*e3t_n(ji,jj,jk)*1E6 622 tempmoy(ji,jj) = tempmoy(ji,jj) + tsn(ji,jj,jk,jp_tem)*e3t_n(ji,jj,jk) 623 zdepmoy(ji,jj) = zdepmoy(ji,jj) + e3t_n(ji,jj,jk) 624 ENDIF 625 ENDIF 626 END DO 627 END DO 628 END DO 629 630 DO jj = 1, jpj 631 DO ji = 1, jpi 632 oxymoy(ji,jj) = trb(ji,jj,1,jpoxy)*1E6 - oxymoy(ji,jj) / (zdepmoy(ji,jj) + rtrn) 633 tempmoy(ji,jj) = tsn(ji,jj,1,jp_tem)-tempmoy(ji,jj) / (zdepmoy(ji,jj) + rtrn) 634 END DO 635 END DO 636 ! 637 ! Computation of the migration depth based on the parameterization of 638 ! 639 DO jj = 1, jpj 640 DO ji = 1, jpi 641 IF (tmask(ji,jj,1) == 1.) THEN 642 totchl = (trb(ji,jj,1,jppch)+trb(ji,jj,1,jpnch)+trb(ji,jj,1,jpdch))*1E6 643 depmig(ji,jj) = 398. - 0.56 * oxymoy(ji,jj) -115. * log10(totchl) + 0.36 * hmld(ji,jj) -2.4 * tempmoy(ji,jj) 644 ENDIF 645 END DO 646 END DO 647 ! 648 ! Computation of the corresponding jk indice 649 ! ------------------------------------------ 650 ! 651 DO jk = 1, jpk-1 652 DO jj = 1, jpj 653 DO ji = 1, jpi 654 IF (depmig(ji,jj) .GE. gdepw_n(ji,jj,jk) .AND. depmig(ji,jj) .LT. gdepw_n(ji,jj,jk+1) ) THEN 655 kmig(ji,jj) = jk 656 ENDIF 657 END DO 658 END DO 659 END DO 660 ! 661 ! Correction of the migration depth and indice based on O2 levels 662 ! If O2 is too low, imposing a migration depth at this low O2 levels 663 ! would lead to negative O2 concentrations (respiration while O2 is close 664 ! to 0. Thus, to avoid that problem, the migration depth is adjusted so 665 ! that it falls above the OMZ 666 ! ----------------------------------------------------------------------- 667 ! 668 DO ji =1, jpi 669 DO jj = 1, jpj 670 IF (trb(ji,jj,kmig(ji,jj),jpoxy) < 5E-6) THEN 671 DO jk = kmig(ji,jj),1,-1 672 IF (trb(ji,jj,jk,jpoxy) >= 5E-6 .AND. trb(ji,jj,jk+1,jpoxy) < 5E-6) THEN 673 kmig(ji,jj) = jk 674 depmig(ji,jj) = gdept_n(ji,jj,jk) 675 ENDIF 676 END DO 677 ENDIF 678 END DO 679 END DO 680 ! 681 IF( ln_timing ) CALL timing_stop('p5z_meso_depmig') 682 ! 683 END SUBROUTINE p5z_meso_depmig 684 685 INTEGER FUNCTION p5z_meso_alloc() 686 !!---------------------------------------------------------------------- 687 !! *** ROUTINE p4z_meso_alloc *** 688 !!---------------------------------------------------------------------- 689 ! 690 ALLOCATE( depmig(jpi,jpj), kmig(jpi,jpj), STAT= p5z_meso_alloc ) 691 ! 692 IF( p5z_meso_alloc /= 0 ) CALL ctl_stop( 'STOP', 'p5z_meso_alloc : failed to allocate arrays.' ) 693 ! 694 END FUNCTION p5z_meso_alloc 453 695 454 696 !!======================================================================
Note: See TracChangeset
for help on using the changeset viewer.