- Timestamp:
- 2017-12-26T17:32:56+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zbio.F90
r9125 r9169 13 13 USE oce_trc ! 14 14 USE trc ! 15 USE sms_pisces 16 USE p2zopt 15 USE sms_pisces ! 16 USE p2zopt ! 17 USE trd_oce ! 18 USE trdtrc ! 19 ! 17 20 USE lbclnk ! 18 21 USE prtctl_trc ! Print control for debbuging 19 USE trd_oce 20 USE trdtrc 21 USE iom 22 USE iom ! 22 23 23 24 IMPLICIT NONE … … 83 84 !! 84 85 !!--------------------------------------------------------------------- 85 !!86 86 INTEGER, INTENT( in ) :: kt ! ocean time-step index 87 ! !87 ! 88 88 INTEGER :: ji, jj, jk, jl 89 89 REAL(wp) :: zdet, zzoo, zphy, zno3, znh4, zdom ! now concentrations … … 96 96 REAL(wp) :: znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju 97 97 REAL(wp) :: ze3t 98 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::zw2d99 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zw3d98 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw2d 99 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: zw3d 100 100 CHARACTER (len=25) :: charout 101 101 !!--------------------------------------------------------------------- … … 103 103 IF( ln_timing ) CALL timing_start('p2z_bio') 104 104 ! 105 IF( lk_iomput ) ALLOCATE( zw2d(jpi,jpj,17), zw3d(jpi,jpj,jpk,3) )105 IF( lk_iomput ) ALLOCATE( zw2d(jpi,jpj,17), zw3d(jpi,jpj,jpk,3) ) 106 106 107 107 IF( kt == nittrc000 ) THEN … … 113 113 xksi(:,:) = 0.e0 ! zooplakton closure ( fbod) 114 114 IF( lk_iomput ) THEN 115 zw2d (:,:,:) = 0. e0116 zw3d(:,:,:,:) = 0. e0115 zw2d (:,:,:) = 0._wp 116 zw3d(:,:,:,:) = 0._wp 117 117 ENDIF 118 118 … … 311 311 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 312 312 ! 313 IF( lk_iomput ) THEN 314 ! convert fluxes in per day 313 IF( lk_iomput ) THEN ! convert fluxes in per day 315 314 ze3t = e3t_n(ji,jj,jk) * 86400._wp 316 315 zw2d(ji,jj,1) = zw2d(ji,jj,1) + zno3phy * ze3t … … 335 334 zw3d(ji,jj,jk,2) = znh4phy * 86400._wp 336 335 zw3d(ji,jj,jk,3) = znh4no3 * 86400._wp 337 338 336 ! 337 ENDIF 339 338 END DO 340 339 END DO 341 340 END DO 342 341 ! 343 342 IF( lk_iomput ) THEN 344 CALL lbc_lnk( zw2d(:,:,:),'T', 1. )345 CALL lbc_lnk_multi( zw3d(:,:,:,1),'T', 1., zw3d(:,:,:,2),'T', 1., zw3d(:,:,:,3),'T', 1. )346 ! Save diagnostics347 CALL iom_put( "TNO3PHY", zw2d(:,:,1) )348 CALL iom_put( "TNH4PHY", zw2d(:,:,2) )349 CALL iom_put( "TPHYDOM", zw2d(:,:,3) )350 CALL iom_put( "TPHYNH4", zw2d(:,:,4) )351 CALL iom_put( "TPHYZOO", zw2d(:,:,5) )352 CALL iom_put( "TPHYDET", zw2d(:,:,6) )353 CALL iom_put( "TDETZOO", zw2d(:,:,7) )354 CALL iom_put( "TZOODET", zw2d(:,:,8) )355 CALL iom_put( "TZOOBOD", zw2d(:,:,9) )356 CALL iom_put( "TZOONH4", zw2d(:,:,10) )357 CALL iom_put( "TZOODOM", zw2d(:,:,11) )358 CALL iom_put( "TNH4NO3", zw2d(:,:,12) )359 CALL iom_put( "TDOMNH4", zw2d(:,:,13) )360 CALL iom_put( "TDETNH4", zw2d(:,:,14) )361 CALL iom_put( "TPHYTOT", zw2d(:,:,15) )362 CALL iom_put( "TZOOTOT", zw2d(:,:,16) )343 CALL lbc_lnk( zw2d(:,:,:),'T', 1. ) 344 CALL lbc_lnk_multi( zw3d(:,:,:,1),'T', 1., zw3d(:,:,:,2),'T', 1., zw3d(:,:,:,3),'T', 1. ) 345 ! Save diagnostics 346 CALL iom_put( "TNO3PHY", zw2d(:,:,1) ) 347 CALL iom_put( "TNH4PHY", zw2d(:,:,2) ) 348 CALL iom_put( "TPHYDOM", zw2d(:,:,3) ) 349 CALL iom_put( "TPHYNH4", zw2d(:,:,4) ) 350 CALL iom_put( "TPHYZOO", zw2d(:,:,5) ) 351 CALL iom_put( "TPHYDET", zw2d(:,:,6) ) 352 CALL iom_put( "TDETZOO", zw2d(:,:,7) ) 353 CALL iom_put( "TZOODET", zw2d(:,:,8) ) 354 CALL iom_put( "TZOOBOD", zw2d(:,:,9) ) 355 CALL iom_put( "TZOONH4", zw2d(:,:,10) ) 356 CALL iom_put( "TZOODOM", zw2d(:,:,11) ) 357 CALL iom_put( "TNH4NO3", zw2d(:,:,12) ) 358 CALL iom_put( "TDOMNH4", zw2d(:,:,13) ) 359 CALL iom_put( "TDETNH4", zw2d(:,:,14) ) 360 CALL iom_put( "TPHYTOT", zw2d(:,:,15) ) 361 CALL iom_put( "TZOOTOT", zw2d(:,:,16) ) 363 362 ! 364 CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )365 CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )366 CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )363 CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) ) 364 CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) ) 365 CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) ) 367 366 ! 368 367 ENDIF … … 374 373 ENDIF 375 374 ! 376 IF( lk_iomput ) DEALLOCATE( zw2d, zw3d )375 IF( lk_iomput ) DEALLOCATE( zw2d, zw3d ) 377 376 ! 378 377 IF( ln_timing ) CALL timing_stop('p2z_bio') … … 390 389 !! 391 390 !!---------------------------------------------------------------------- 391 INTEGER :: ios ! Local integer 392 !! 392 393 NAMELIST/namlobphy/ tmumax, rgamma, fphylab, tmminp, aki 393 394 NAMELIST/namlobnut/ akno3, aknh4, taunn, psinut 394 395 NAMELIST/namlobzoo/ rppz, taus, aks, rpnaz, rdnaz, tauzn, fzoolab, fdbod, tmminz 395 NAMELIST/namlobdet/ 396 NAMELIST/namlobdet/ taudn, fdetlab 396 397 NAMELIST/namlobdom/ taudomn 397 INTEGER :: ios ! Local integer output status for namelist read398 398 !!---------------------------------------------------------------------- 399 399 ! 400 IF(lwp) WRITE(numout,*) 401 IF(lwp) WRITE(numout,*) ' p2z_bio_init : LOBSTER bio-model initialization' 402 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~' 403 ! 400 404 REWIND( numnatp_ref ) ! Namelist namlobphy in reference namelist : Lobster biological parameters 401 405 READ ( numnatp_ref, namlobphy, IOSTAT = ios, ERR = 901) 402 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobphy in reference namelist', lwp ) 403 406 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobphy in reference namelist', lwp ) 404 407 REWIND( numnatp_cfg ) ! Namelist namlobphy in configuration namelist : Lobster biological parameters 405 408 READ ( numnatp_cfg, namlobphy, IOSTAT = ios, ERR = 902 ) 406 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobphy in configuration namelist', lwp )409 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobphy in configuration namelist', lwp ) 407 410 IF(lwm) WRITE ( numonp, namlobphy ) 408 411 ! 409 412 IF(lwp) THEN 410 WRITE(numout,*) ' Namelist namlobphy' 411 WRITE(numout,*) ' phyto max growth rate tmumax =', 86400 * tmumax, ' d' 412 WRITE(numout,*) ' phytoplankton exudation fraction rgamma =', rgamma 413 WRITE(numout,*) ' NH4 fraction of phytoplankton exsudation fphylab =', fphylab 414 WRITE(numout,*) ' minimal phyto mortality rate tmminp =', 86400 * tmminp 415 WRITE(numout,*) ' light hlaf saturation constant aki =', aki 416 WRITE(numout,*) ' ' 413 WRITE(numout,*) ' Namelist namlobphy' 414 WRITE(numout,*) ' phyto max growth rate tmumax =', 86400 * tmumax, ' d' 415 WRITE(numout,*) ' phytoplankton exudation fraction rgamma =', rgamma 416 WRITE(numout,*) ' NH4 fraction of phytoplankton exsudation fphylab =', fphylab 417 WRITE(numout,*) ' minimal phyto mortality rate tmminp =', 86400 * tmminp 418 WRITE(numout,*) ' light hlaf saturation constant aki =', aki 417 419 ENDIF 418 420 419 421 REWIND( numnatp_ref ) ! Namelist namlobnut in reference namelist : Lobster nutriments parameters 420 422 READ ( numnatp_ref, namlobnut, IOSTAT = ios, ERR = 903) 421 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobnut in reference namelist', lwp ) 422 423 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobnut in reference namelist', lwp ) 423 424 REWIND( numnatp_cfg ) ! Namelist namlobnut in configuration namelist : Lobster nutriments parameters 424 425 READ ( numnatp_cfg, namlobnut, IOSTAT = ios, ERR = 904 ) 425 904 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobnut in configuration namelist', lwp )426 904 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobnut in configuration namelist', lwp ) 426 427 IF(lwm) WRITE ( numonp, namlobnut ) 427 428 428 429 IF(lwp) THEN 429 WRITE(numout,*) ' Namelist namlobnut'430 WRITE(numout,*) ' half-saturation nutrient for no3 uptake akno3 =', akno3431 WRITE(numout,*) ' half-saturation nutrient for nh4 uptake aknh4 =', aknh4432 WRITE(numout,*) ' nitrification rate taunn =', taunn433 WRITE(numout,*) ' inhibition of no3 uptake by nh4 psinut =', psinut434 WRITE(numout,*) ' '430 WRITE(numout,*) 431 WRITE(numout,*) ' Namelist namlobnut' 432 WRITE(numout,*) ' half-saturation nutrient for no3 uptake akno3 =', akno3 433 WRITE(numout,*) ' half-saturation nutrient for nh4 uptake aknh4 =', aknh4 434 WRITE(numout,*) ' nitrification rate taunn =', taunn 435 WRITE(numout,*) ' inhibition of no3 uptake by nh4 psinut =', psinut 435 436 ENDIF 436 437 437 438 REWIND( numnatp_ref ) ! Namelist namlobzoo in reference namelist : Lobster zooplankton parameters 438 439 READ ( numnatp_ref, namlobzoo, IOSTAT = ios, ERR = 905) 439 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobzoo in reference namelist', lwp ) 440 440 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobzoo in reference namelist', lwp ) 441 441 REWIND( numnatp_cfg ) ! Namelist namlobzoo in configuration namelist : Lobster zooplankton parameters 442 442 READ ( numnatp_cfg, namlobzoo, IOSTAT = ios, ERR = 906 ) 443 906 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobzoo in configuration namelist', lwp )443 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobzoo in configuration namelist', lwp ) 444 444 IF(lwm) WRITE ( numonp, namlobzoo ) 445 445 446 446 IF(lwp) THEN 447 WRITE(numout,*) ' Namelist namlobzoo'448 WRITE(numout,*) ' zoo preference for phyto rppz =', rppz449 WRITE(numout,*) ' maximal zoo grazing rate taus =', 86400 * taus, ' d'450 WRITE(numout,*) ' half saturation constant for zoo food aks =', aks451 WRITE(numout,*) ' non-assimilated phyto by zoo rpnaz =', rpnaz452 WRITE(numout,*) ' non-assimilated detritus by zoo rdnaz =', rdnaz453 WRITE(numout,*) ' zoo specific excretion rate tauzn =', 86400 * tauzn454 WRITE(numout,*) ' minimal zoo mortality rate tmminz =', 86400 * tmminz455 WRITE(numout,*) ' NH4 fraction of zooplankton excretion fzoolab =', fzoolab456 WRITE(numout,*) ' Zooplankton mortality fraction that goes to detritus fdbod =', fdbod457 WRITE(numout,*) ' '447 WRITE(numout,*) 448 WRITE(numout,*) ' Namelist namlobzoo' 449 WRITE(numout,*) ' zoo preference for phyto rppz =', rppz 450 WRITE(numout,*) ' maximal zoo grazing rate taus =', 86400 * taus, ' d' 451 WRITE(numout,*) ' half saturation constant for zoo food aks =', aks 452 WRITE(numout,*) ' non-assimilated phyto by zoo rpnaz =', rpnaz 453 WRITE(numout,*) ' non-assimilated detritus by zoo rdnaz =', rdnaz 454 WRITE(numout,*) ' zoo specific excretion rate tauzn =', 86400 * tauzn 455 WRITE(numout,*) ' minimal zoo mortality rate tmminz =', 86400 * tmminz 456 WRITE(numout,*) ' NH4 fraction of zooplankton excretion fzoolab =', fzoolab 457 WRITE(numout,*) ' Zooplankton mortality fraction that goes to detritus fdbod =', fdbod 458 458 ENDIF 459 459 460 460 REWIND( numnatp_ref ) ! Namelist namlobdet in reference namelist : Lobster detritus parameters 461 461 READ ( numnatp_ref, namlobdet, IOSTAT = ios, ERR = 907) 462 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobdet in reference namelist', lwp ) 463 462 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobdet in reference namelist', lwp ) 464 463 REWIND( numnatp_cfg ) ! Namelist namlobdet in configuration namelist : Lobster detritus parameters 465 464 READ ( numnatp_cfg, namlobdet, IOSTAT = ios, ERR = 908 ) 466 908 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobdet in configuration namelist', lwp )465 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobdet in configuration namelist', lwp ) 467 466 IF(lwm) WRITE ( numonp, namlobdet ) 468 467 469 468 IF(lwp) THEN 470 WRITE(numout,*) ' Namelist namlobdet'471 WRITE(numout,*) ' detrital breakdown rate taudn =', 86400 * taudn , ' d'472 WRITE(numout,*) ' NH4 fraction of detritus dissolution fdetlab =', fdetlab473 WRITE(numout,*) ' '469 WRITE(numout,*) 470 WRITE(numout,*) ' Namelist namlobdet' 471 WRITE(numout,*) ' detrital breakdown rate taudn =', 86400 * taudn , ' d' 472 WRITE(numout,*) ' NH4 fraction of detritus dissolution fdetlab =', fdetlab 474 473 ENDIF 475 474 476 475 REWIND( numnatp_ref ) ! Namelist namlobdom in reference namelist : Lobster DOM breakdown rate 477 476 READ ( numnatp_ref, namlobdom, IOSTAT = ios, ERR = 909) 478 909 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobdom in reference namelist', lwp ) 479 477 909 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlobdom in reference namelist', lwp ) 480 478 REWIND( numnatp_cfg ) ! Namelist namlobdom in configuration namelist : Lobster DOM breakdown rate 481 479 READ ( numnatp_cfg, namlobdom, IOSTAT = ios, ERR = 910 ) 482 910 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobdom in configuration namelist', lwp )480 910 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobdom in configuration namelist', lwp ) 483 481 IF(lwm) WRITE ( numonp, namlobdom ) 484 482 485 483 IF(lwp) THEN 486 WRITE(numout,*) ' Namelist namlobdom'487 WRITE(numout,*) ' DOM breakdown rate taudomn =', 86400 * taudn , ' d'488 WRITE(numout,*) ' '484 WRITE(numout,*) 485 WRITE(numout,*) ' Namelist namlobdom' 486 WRITE(numout,*) ' DOM breakdown rate taudomn =', 86400 * taudn , ' d' 489 487 ENDIF 490 488 !
Note: See TracChangeset
for help on using the changeset viewer.