Changeset 9169 for branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES
- Timestamp:
- 2017-12-26T17:32:56+01:00 (7 years ago)
- Location:
- branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 18 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 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsed.F90
r9125 r9169 11 11 !!---------------------------------------------------------------------- 12 12 USE oce_trc ! 13 USE trc 14 USE sms_pisces 15 USE lbclnk 16 USE trd_oce 17 USE trdtrc 18 USE iom 13 USE trd_oce ! 14 USE trdtrc ! 15 USE trc ! 16 USE sms_pisces ! 17 ! 18 USE lbclnk ! 19 USE iom ! 19 20 USE prtctl_trc ! Print control for debbuging 20 21 … … 26 27 27 28 REAL(wp), PUBLIC :: sedlam !: time coefficient of POC remineralization in sediments 28 REAL(wp), PUBLIC :: sedlostpoc ! mass of POC lost in sediments29 REAL(wp), PUBLIC :: vsed ! detritus sedimentation speed [m/s]30 REAL(wp), PUBLIC :: xhr ! coeff for martin''s remineralisation profile29 REAL(wp), PUBLIC :: sedlostpoc !: mass of POC lost in sediments 30 REAL(wp), PUBLIC :: vsed !: detritus sedimentation speed [m/s] 31 REAL(wp), PUBLIC :: xhr !: coeff for martin''s remineralisation profile 31 32 32 33 !!---------------------------------------------------------------------- … … 126 127 !! 127 128 !!---------------------------------------------------------------------- 129 INTEGER :: ios ! Local integer 130 !! 128 131 NAMELIST/namlobsed/ sedlam, sedlostpoc, vsed, xhr 129 INTEGER :: ios ! Local integer output status for namelist read130 132 !!---------------------------------------------------------------------- 133 ! 131 134 REWIND( numnatp_ref ) ! Namelist namlobsed in reference namelist : Lobster sediments 132 135 READ ( numnatp_ref, namlobsed, IOSTAT = ios, ERR = 901) 133 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlosed in reference namelist', lwp ) 134 136 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namlosed in reference namelist', lwp ) 135 137 REWIND( numnatp_cfg ) ! Namelist namlobsed in configuration namelist : Lobster sediments 136 138 READ ( numnatp_cfg, namlobsed, IOSTAT = ios, ERR = 902 ) 137 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'namlobsed in configuration namelist', lwp )139 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namlobsed in configuration namelist', lwp ) 138 140 IF(lwm) WRITE ( numonp, namlobsed ) 139 141 ! 140 142 IF(lwp) THEN 141 WRITE(numout,*) ' Namelist namlobsed'142 WRITE(numout,*) ' time coeff of POC in sedimentssedlam =', sedlam143 WRITE(numout,*) ' Sediment geol loss for POCsedlostpoc=', sedlostpoc144 WRITE(numout,*) ' detritus sedimentation speedvsed =', 86400 * vsed , ' d'145 WRITE(numout,*) ' coeff for martin''s remineralistionxhr =', xhr143 WRITE(numout,*) ' Namelist namlobsed' 144 WRITE(numout,*) ' time coeff of POC in sediments sedlam =', sedlam 145 WRITE(numout,*) ' Sediment geol loss for POC sedlostpoc=', sedlostpoc 146 WRITE(numout,*) ' detritus sedimentation speed vsed =', 86400 * vsed , ' d' 147 WRITE(numout,*) ' coeff for martin''s remineralistion xhr =', xhr 146 148 WRITE(numout,*) ' ' 147 149 ENDIF -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r9125 r9169 7 7 !! 3.6 ! 2015-05 (O. Aumont) PISCES quota 8 8 !!---------------------------------------------------------------------- 9 !! p4z_fechem : 10 !! p4z_fechem_init : 11 !! p4z_fechem_alloc : 9 !! p4z_fechem : Compute remineralization/scavenging of iron 10 !! p4z_fechem_init : Initialisation of parameters for remineralisation 11 !! p4z_fechem_alloc : Allocate remineralisation variables 12 12 !!---------------------------------------------------------------------- 13 USE oce_trc ! 14 USE trc ! 15 USE sms_pisces ! 16 USE p4zche ! 17 USE p4zsbc ! 18 USE prtctl_trc ! 19 USE iom ! 13 USE oce_trc ! shared variables between ocean and passive tracers 14 USE trc ! passive tracers common variables 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zche ! chemical model 17 USE p4zsbc ! Boundary conditions from sediments 18 USE prtctl_trc ! print control for debugging 19 USE iom ! I/O manager 20 20 21 21 IMPLICIT NONE 22 22 PRIVATE 23 23 24 PUBLIC p4z_fechem ! called in p4zbio.F90 25 PUBLIC p4z_fechem_init ! called in trcsms_pisces.F90 26 27 !! * Shared module variables 28 LOGICAL :: ln_fechem !: boolean for complex iron chemistry following Tagliabue and voelker 29 LOGICAL :: ln_ligvar !: boolean for variable ligand concentration following Tagliabue and voelker 30 LOGICAL :: ln_fecolloid !: boolean for variable colloidal fraction 31 REAL(wp), PUBLIC :: xlam1 !: scavenging rate of Iron 32 REAL(wp), PUBLIC :: xlamdust !: scavenging rate of Iron by dust 33 REAL(wp), PUBLIC :: ligand !: ligand concentration in the ocean 34 REAL(wp), PUBLIC :: kfep !: rate constant for nanoparticle formation 35 36 REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth 24 PUBLIC p4z_fechem ! called in p4zbio.F90 25 PUBLIC p4z_fechem_init ! called in trcsms_pisces.F90 26 27 LOGICAL :: ln_fechem !: boolean for complex iron chemistry following Tagliabue and voelker 28 LOGICAL :: ln_ligvar !: boolean for variable ligand concentration following Tagliabue and voelker 29 LOGICAL :: ln_fecolloid !: boolean for variable colloidal fraction 30 REAL(wp), PUBLIC :: xlam1 !: scavenging rate of Iron 31 REAL(wp), PUBLIC :: xlamdust !: scavenging rate of Iron by dust 32 REAL(wp), PUBLIC :: ligand !: ligand concentration in the ocean 33 REAL(wp), PUBLIC :: kfep !: rate constant for nanoparticle formation 34 35 REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth !!gm <<<== DOCTOR names SVP !!! 37 36 38 37 !!---------------------------------------------------------------------- … … 56 55 !! and one particulate form (ln_fechem) 57 56 !!--------------------------------------------------------------------- 58 ! 59 INTEGER, INTENT(in) :: kt, knt ! ocean time step 57 INTEGER, INTENT(in) :: kt, knt ! ocean time step 60 58 ! 61 59 INTEGER :: ji, jj, jk, jic, jn … … 67 65 REAL(wp) :: zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2 68 66 REAL(wp) :: zrum, zcodel, zargu, zlight 69 REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand70 REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za271 REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq272 REAL(wp) :: ztfe, zoxy, zhplus73 REAL(wp) :: zaggliga, zaggligb74 REAL(wp) :: dissol, zligco67 REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand 68 REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2 69 REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 70 REAL(wp) :: ztfe, zoxy, zhplus 71 REAL(wp) :: zaggliga, zaggligb 72 REAL(wp) :: dissol, zligco 75 73 CHARACTER (len=25) :: charout 76 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL177 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zFeL2, zTL2, zFe2, zFeP78 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zstrn, zstrn274 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zTL1, zFe3, ztotlig, precip, zFeL1 75 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zFeL2, zTL2, zFe2, zFeP 76 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zstrn, zstrn2 79 77 !!--------------------------------------------------------------------- 80 78 ! … … 384 382 NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep 385 383 !!---------------------------------------------------------------------- 386 387 REWIND( numnatp_ref ) ! Namelist nampisfer in reference namelist : Pisces iron chemistry 384 ! 385 IF(lwp) THEN 386 WRITE(numout,*) 387 WRITE(numout,*) 'p4z_rem_init : Initialization of iron chemistry parameters' 388 WRITE(numout,*) '~~~~~~~~~~~~' 389 ENDIF 390 ! 391 REWIND( numnatp_ref ) ! Namelist nampisfer in reference namelist : Pisces iron chemistry 388 392 READ ( numnatp_ref, nampisfer, IOSTAT = ios, ERR = 901) 389 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp ) 390 391 REWIND( numnatp_cfg ) ! Namelist nampisfer in configuration namelist : Pisces iron chemistry 393 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisfer in reference namelist', lwp ) 394 REWIND( numnatp_cfg ) ! Namelist nampisfer in configuration namelist : Pisces iron chemistry 392 395 READ ( numnatp_cfg, nampisfer, IOSTAT = ios, ERR = 902 ) 393 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp ) 394 IF(lwm) WRITE ( numonp, nampisfer ) 395 396 IF(lwp) THEN ! control print 397 WRITE(numout,*) ' ' 398 WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer' 399 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 400 WRITE(numout,*) ' enable complex iron chemistry scheme ln_fechem =', ln_fechem 401 WRITE(numout,*) ' variable concentration of ligand ln_ligvar =', ln_ligvar 402 WRITE(numout,*) ' Variable colloidal fraction of Fe3+ ln_fecolloid =', ln_fecolloid 403 WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1 404 WRITE(numout,*) ' scavenging rate of Iron by dust xlamdust =', xlamdust 405 WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand 406 WRITE(numout,*) ' rate constant for nanoparticle formation kfep =', kfep 407 ENDIF 408 ! 409 IF( ln_fechem ) THEN 410 ! initialization of some constants used by the complexe chemistry scheme 411 ! ---------------------------------------------------------------------- 396 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisfer in configuration namelist', lwp ) 397 IF(lwm) WRITE( numonp, nampisfer ) 398 399 IF(lwp) THEN ! control print 400 WRITE(numout,*) ' Namelist : nampisfer' 401 WRITE(numout,*) ' enable complex iron chemistry scheme ln_fechem =', ln_fechem 402 WRITE(numout,*) ' variable concentration of ligand ln_ligvar =', ln_ligvar 403 WRITE(numout,*) ' Variable colloidal fraction of Fe3+ ln_fecolloid =', ln_fecolloid 404 WRITE(numout,*) ' scavenging rate of Iron xlam1 =', xlam1 405 WRITE(numout,*) ' scavenging rate of Iron by dust xlamdust =', xlamdust 406 WRITE(numout,*) ' ligand concentration in the ocean ligand =', ligand 407 WRITE(numout,*) ' rate constant for nanoparticle formation kfep =', kfep 408 ENDIF 409 ! 410 IF( ln_fechem ) THEN ! set some constants used by the complexe chemistry scheme 411 ! 412 412 spd = 3600. * 24. 413 413 con = 1.E9 -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r9125 r9169 4 4 !! TOP : PISCES CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 5 5 !!====================================================================== 6 !! History : 7 !! 8 !! 9 !! 10 !! 11 !! 6 !! History : - ! 1988-07 (E. MAIER-REIMER) Original code 7 !! - ! 1998 (O. Aumont) additions 8 !! - ! 1999 (C. Le Quere) modifications 9 !! 1.0 ! 2004 (O. Aumont) modifications 10 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 11 !! ! 2011-02 (J. Simeon, J. Orr) Include total atm P correction 12 12 !!---------------------------------------------------------------------- 13 13 !! p4z_flx : CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE … … 15 15 !! p4z_patm : Read sfc atm pressure [atm] for each grid cell 16 16 !!---------------------------------------------------------------------- 17 USE oce_trc 18 USE trc 19 USE sms_pisces 20 USE p4zche 21 USE prtctl_trc 22 USE iom 23 USE fldread 17 USE oce_trc ! shared variables between ocean and passive tracers 18 USE trc ! passive tracers common variables 19 USE sms_pisces ! PISCES Source Minus Sink variables 20 USE p4zche ! Chemical model 21 USE prtctl_trc ! print control for debugging 22 USE iom ! I/O manager 23 USE fldread ! read input fields 24 24 25 25 IMPLICIT NONE … … 30 30 PUBLIC p4z_flx_alloc 31 31 32 ! !!** Namelist nampisext **33 REAL(wp) :: atcco2!: pre-industrial atmospheric [co2] (ppm)34 LOGICAL :: ln_co2int!: flag to read in a file and interpolate atmospheric pco2 or not35 CHARACTER(len=34) :: clname!: filename of pco2 values36 INTEGER :: nn_offset!: Offset model-data start year (default = 0)32 ! !!** Namelist nampisext ** 33 REAL(wp) :: atcco2 !: pre-industrial atmospheric [co2] (ppm) 34 LOGICAL :: ln_co2int !: flag to read in a file and interpolate atmospheric pco2 or not 35 CHARACTER(len=34) :: clname !: filename of pco2 values 36 INTEGER :: nn_offset !: Offset model-data start year (default = 0) 37 37 38 38 !! Variables related to reading atmospheric CO2 time history 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: atcco2h, years40 INTEGER :: nmaxrec, numco241 42 ! !!* nampisatm namelist (Atmospheric PRessure) *39 INTEGER :: nmaxrec, numco2 ! 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: atcco2h, years ! 41 42 ! !!* nampisatm namelist (Atmospheric PRessure) * 43 43 LOGICAL, PUBLIC :: ln_presatm !: ref. pressure: global mean Patm (F) or a constant (F) 44 44 LOGICAL, PUBLIC :: ln_presatmco2 !: accounting for spatial atm CO2 in the compuation of carbon flux (T) or not (F) 45 45 46 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: patm ! atmospheric pressure at kt [N/m2]47 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_patm ! structure of input fields (file informations, fields read)48 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_atmco2 ! structure of input fields (file informations, fields read)49 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco251 52 REAL(wp) :: xconv = 0.01_wp / 3600._wp!: coefficients for conversion46 REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) :: patm ! atmospheric pressure at kt [N/m2] 47 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_patm ! structure of input fields (file informations, fields read) 48 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_atmco2 ! structure of input fields (file informations, fields read) 49 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco2 51 52 REAL(wp) :: xconv = 0.01_wp / 3600._wp !: coefficients for conversion 53 53 54 54 !!---------------------------------------------------------------------- … … 70 70 !! - Add option for time-interpolation of atcco2.txt 71 71 !!--------------------------------------------------------------------- 72 !73 72 INTEGER, INTENT(in) :: kt, knt ! 74 73 ! … … 79 78 REAL(wp) :: zph, zdic, zsch_o2, zsch_co2 80 79 REAL(wp) :: zyr_dec, zdco2dt 81 CHARACTER (len=25) :: charout82 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3, zoflx, zpco2atm83 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d80 CHARACTER (len=25) :: charout 81 REAL(wp), DIMENSION(jpi,jpj) :: zkgco2, zkgo2, zh2co3, zoflx, zpco2atm 82 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zw2d 84 83 !!--------------------------------------------------------------------- 85 84 ! 86 85 IF( ln_timing ) CALL timing_start('p4z_flx') 87 86 ! 88 89 87 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN 90 88 ! SURFACE LAYER); THE RESULT OF THIS CALCULATION 91 89 ! IS USED TO COMPUTE AIR-SEA FLUX OF CO2 92 90 93 IF( kt /= nit000 .AND. .NOT.l_co2cpl .AND. knt == 1 ) CALL p4z_patm( kt )! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs91 IF( kt /= nit000 .AND. .NOT.l_co2cpl .AND. knt == 1 ) CALL p4z_patm( kt ) ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 94 92 95 93 IF( ln_co2int .AND. .NOT.ln_presatmco2 .AND. .NOT.l_co2cpl ) THEN … … 226 224 !! ** Method : Read the nampisext namelist and check the parameters 227 225 !! called at the first timestep (nittrc000) 226 !! 228 227 !! ** input : Namelist nampisext 229 228 !!---------------------------------------------------------------------- 230 INTEGER :: jm 231 INTEGER :: ios ! Local integer 232 ! 229 INTEGER :: jm, ios ! Local integer 230 !! 233 231 NAMELIST/nampisext/ln_co2int, atcco2, clname, nn_offset 234 232 !!---------------------------------------------------------------------- 235 ! 236 233 IF(lwp) THEN 234 WRITE(numout,*) 235 WRITE(numout,*) ' p4z_flx_init : atmospheric conditions for air-sea flux calculation' 236 WRITE(numout,*) ' ~~~~~~~~~~~~' 237 ENDIF 238 ! 237 239 REWIND( numnatp_ref ) ! Namelist nampisext in reference namelist : Pisces atm. conditions 238 240 READ ( numnatp_ref, nampisext, IOSTAT = ios, ERR = 901) 239 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisext in reference namelist', lwp ) 240 241 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisext in reference namelist', lwp ) 241 242 REWIND( numnatp_cfg ) ! Namelist nampisext in configuration namelist : Pisces atm. conditions 242 243 READ ( numnatp_cfg, nampisext, IOSTAT = ios, ERR = 902 ) 243 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisext in configuration namelist', lwp )244 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisext in configuration namelist', lwp ) 244 245 IF(lwm) WRITE ( numonp, nampisext ) 245 246 ! 246 247 IF(lwp) THEN ! control print 247 WRITE(numout,*) ' ' 248 WRITE(numout,*) ' Namelist parameters for air-sea exchange, nampisext' 249 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 250 WRITE(numout,*) ' Choice for reading in the atm pCO2 file or constant value, ln_co2int =', ln_co2int 251 WRITE(numout,*) ' ' 252 ENDIF 248 WRITE(numout,*) ' Namelist : nampisext --- parameters for air-sea exchange' 249 WRITE(numout,*) ' reading in the atm pCO2 file or constant value ln_co2int =', ln_co2int 250 ENDIF 251 252 !!gm BUG !!! ===>>> ln_presatm and ln_presatmco2 are used below, but read in namelist 253 !!gm at the end of the routine via a CALL to CALL p4z_patm( nit000 ) 254 253 255 IF( .NOT.ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 254 256 IF(lwp) THEN ! control print 255 WRITE(numout,*) ' Constant Atmospheric pCO2 value atcco2 =', atcco2 256 WRITE(numout,*) ' ' 257 WRITE(numout,*) ' Constant Atmospheric pCO2 value atcco2 =', atcco2 257 258 ENDIF 258 259 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 259 260 ELSEIF( ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 260 261 IF(lwp) THEN 261 WRITE(numout,*) ' Atmospheric pCO2 value from file clname =', TRIM( clname )262 WRITE(numout,*) ' Offset model-data start year nn_offset =', nn_offset263 WRITE(numout,*) ' '262 WRITE(numout,*) ' Constant Atmospheric pCO2 value atcco2 =', atcco2 263 WRITE(numout,*) ' Atmospheric pCO2 value from file clname =', TRIM( clname ) 264 WRITE(numout,*) ' Offset model-data start year nn_offset =', nn_offset 264 265 ENDIF 265 266 CALL ctl_opn( numco2, TRIM( clname) , 'OLD', 'FORMATTED', 'SEQUENTIAL', -1 , numout, lwp ) … … 270 271 END DO 271 272 100 nmaxrec = jm - 1 272 ALLOCATE( years (nmaxrec) ) ;years (:) = 0._wp273 ALLOCATE( atcco2h(nmaxrec) ) ;atcco2h(:) = 0._wp274 273 ALLOCATE( years (nmaxrec) ) ; years (:) = 0._wp 274 ALLOCATE( atcco2h(nmaxrec) ) ; atcco2h(:) = 0._wp 275 ! 275 276 REWIND(numco2) 276 277 DO jm = 1, nmaxrec ! get xCO2 data … … 282 283 IF(lwp) THEN 283 284 WRITE(numout,*) ' Spatialized Atmospheric pCO2 from an external file' 284 WRITE(numout,*) ' '285 285 ENDIF 286 286 ELSE 287 287 IF(lwp) THEN 288 288 WRITE(numout,*) ' Spatialized Atmospheric pCO2 from an external file' 289 WRITE(numout,*) ' '290 289 ENDIF 291 290 ENDIF … … 304 303 !! *** ROUTINE p4z_atm *** 305 304 !! 306 !! ** Purpose : Read and interpolate the external atmospheric sea-lev l pressure305 !! ** Purpose : Read and interpolate the external atmospheric sea-level pressure 307 306 !! ** Method : Read the files and interpolate the appropriate variables 308 307 !! 309 308 !!---------------------------------------------------------------------- 310 INTEGER, INTENT( in ) :: kt ! ocean time step 311 ! 312 INTEGER :: ierr 313 INTEGER :: ios ! Local integer output status for namelist read 314 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 315 TYPE(FLD_N) :: sn_patm ! informations about the fields to be read 316 TYPE(FLD_N) :: sn_atmco2 ! informations about the fields to be read 309 INTEGER, INTENT(in) :: kt ! ocean time step 310 ! 311 INTEGER :: ierr, ios ! Local integer 312 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 313 TYPE(FLD_N) :: sn_patm ! informations about the fields to be read 314 TYPE(FLD_N) :: sn_atmco2 ! informations about the fields to be read 317 315 !! 318 316 NAMELIST/nampisatm/ ln_presatm, ln_presatmco2, sn_patm, sn_atmco2, cn_dir 319 317 !!---------------------------------------------------------------------- 320 321 ! ! ----------------------- ! 322 IF( kt == nit000 ) THEN ! First call kt=nittrc000 ! 323 318 ! 319 IF( kt == nit000 ) THEN !== First call kt=nittrc000 ==! 320 ! 321 IF(lwp) THEN 322 WRITE(numout,*) 323 WRITE(numout,*) ' p4z_patm : sea-level atmospheric pressure' 324 WRITE(numout,*) ' ~~~~~~~~' 325 ENDIF 326 ! 324 327 REWIND( numnatp_ref ) ! Namelist nampisatm in reference namelist : Pisces atm. sea level pressure file 325 328 READ ( numnatp_ref, nampisatm, IOSTAT = ios, ERR = 901) 326 329 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisatm in reference namelist', lwp ) 327 328 330 REWIND( numnatp_cfg ) ! Namelist nampisatm in configuration namelist : Pisces atm. sea level pressure file 329 331 READ ( numnatp_cfg, nampisatm, IOSTAT = ios, ERR = 902 ) 330 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'nampisatm in configuration namelist', lwp )332 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisatm in configuration namelist', lwp ) 331 333 IF(lwm) WRITE ( numonp, nampisatm ) 332 334 ! 333 335 ! 334 336 IF(lwp) THEN !* control print 335 WRITE(numout,*) 336 WRITE(numout,*) ' Namelist nampisatm : Atmospheric Pressure as external forcing' 337 WRITE(numout,*) ' constant atmopsheric pressure (F) or from a file (T) ln_presatm = ', ln_presatm 338 WRITE(numout,*) ' spatial atmopsheric CO2 for flux calcs ln_presatmco2 = ', ln_presatmco2 339 WRITE(numout,*) 337 WRITE(numout,*) ' Namelist : nampisatm --- Atmospheric Pressure as external forcing' 338 WRITE(numout,*) ' constant atmopsheric pressure (F) or from a file (T) ln_presatm = ', ln_presatm 339 WRITE(numout,*) ' spatial atmopsheric CO2 for flux calcs ln_presatmco2 = ', ln_presatmco2 340 340 ENDIF 341 341 ! … … 358 358 ENDIF 359 359 ! 360 IF( .NOT.ln_presatm ) patm(:,:) = 1. e0! Initialize patm if no reading from a file360 IF( .NOT.ln_presatm ) patm(:,:) = 1._wp ! Initialize patm if no reading from a file 361 361 ! 362 362 ENDIF -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zligand.F90
r9124 r9169 6 6 !! History : 3.6 ! 2016-03 (O. Aumont, A. Tagliabue) Quota model and reorganization 7 7 !!---------------------------------------------------------------------- 8 !! p4z_ligand 9 !! p4z_ligand_init 8 !! p4z_ligand : Compute remineralization/dissolution of organic ligands 9 !! p4z_ligand_init: Initialisation of parameters for remineralisation 10 10 !!---------------------------------------------------------------------- 11 USE oce_trc ! 12 USE trc ! 13 USE sms_pisces ! 14 USE prtctl_trc ! 11 USE oce_trc ! shared variables between ocean and passive tracers 12 USE trc ! passive tracers common variables 13 USE sms_pisces ! PISCES Source Minus Sink variables 14 USE prtctl_trc ! print control for debugging 15 15 16 16 IMPLICIT NONE … … 20 20 PUBLIC p4z_ligand_init ! called in trcsms_pisces.F90 21 21 22 !! * Shared module variables23 22 REAL(wp), PUBLIC :: rlgw !: lifetime (years) of weak ligands 24 23 REAL(wp), PUBLIC :: rlgs !: lifetime (years) of strong ligands … … 39 38 !! 40 39 !! ** Purpose : Compute remineralization/scavenging of organic ligands 41 !!42 !! ** Method : - ???43 40 !!--------------------------------------------------------------------- 44 !45 41 INTEGER, INTENT(in) :: kt, knt ! ocean time step 46 42 ! 47 43 INTEGER :: ji, jj, jk 48 44 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw, zrfepa, zfepr 49 CHARACTER (len=25) :: charout45 CHARACTER (len=25) :: charout 50 46 !!--------------------------------------------------------------------- 51 47 ! 52 48 IF( ln_timing ) CALL timing_start('p4z_ligand') 53 49 ! 54 ! ------------------------------------------------------------------55 ! Remineralization of iron ligands56 ! ------------------------------------------------------------------57 50 DO jk = 1, jpkm1 58 51 DO jj = 1, jpj 59 52 DO ji = 1, jpi 53 ! 54 ! ------------------------------------------------------------------ 55 ! Remineralization of iron ligands 56 ! ------------------------------------------------------------------ 60 57 ! production from remineralisation of organic matter 61 58 zlgwp = orem(ji,jj,jk) * rlig … … 68 65 zlgwpr = prlgw * xstep * etot(ji,jj,jk) * trb(ji,jj,jk,jplgw) * (1. - fr_i(ji,jj)) 69 66 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zlgwp - zlgwr - zlgwpr 70 END DO 71 END DO 72 END DO 73 74 ! ---------------------------------------------------------- 75 ! Dissolution of nanoparticle Fe 76 ! ---------------------------------------------------------- 77 DO jk = 1, jpkm1 78 DO jj = 1, jpj 79 DO ji = 1, jpi 67 ! 68 ! ---------------------------------------------------------- 69 ! Dissolution of nanoparticle Fe 70 ! ---------------------------------------------------------- 80 71 ! dissolution rate is maximal in the presence of light and 81 72 ! lower in the aphotici zone … … 86 77 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) - zfepr 87 78 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zfepr 79 ! 88 80 END DO 89 81 END DO 90 82 END DO 91 83 ! 92 84 IF(ln_ctl) THEN ! print mean trends (used for debugging) 93 85 WRITE(charout, FMT="('ligand1')") 94 86 CALL prt_ctl_trc_info(charout) 95 87 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 96 88 ENDIF 97 89 ! 98 90 IF( ln_timing ) CALL timing_stop('p4z_ligand') … … 108 100 !! 109 101 !! ** Method : Read the nampislig namelist and check the parameters 110 !! called at the first timestep111 102 !! 112 103 !! ** input : Namelist nampislig 113 !!114 104 !!---------------------------------------------------------------------- 115 105 INTEGER :: ios ! Local integer … … 117 107 NAMELIST/nampislig/ rlgw, prlgw, rlgs, rfep, rlig 118 108 !!---------------------------------------------------------------------- 119 109 ! 110 IF(lwp) THEN 111 WRITE(numout,*) 112 WRITE(numout,*) 'p4z_ligand_init : remineralization/scavenging of organic ligands' 113 WRITE(numout,*) '~~~~~~~~~~~~~~~' 114 ENDIF 120 115 REWIND( numnatp_ref ) ! Namelist nampislig in reference namelist : Pisces remineralization 121 116 READ ( numnatp_ref, nampislig, IOSTAT = ios, ERR = 901) 122 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislig in reference namelist', lwp ) 123 117 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislig in reference namelist', lwp ) 124 118 REWIND( numnatp_cfg ) ! Namelist nampislig in configuration namelist : Pisces remineralization 125 119 READ ( numnatp_cfg, nampislig, IOSTAT = ios, ERR = 902 ) 126 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'nampislig in configuration namelist', lwp )120 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampislig in configuration namelist', lwp ) 127 121 IF(lwm) WRITE ( numonp, nampislig ) 128 122 ! 129 123 IF(lwp) THEN ! control print 130 WRITE(numout,*) ' ' 131 WRITE(numout,*) ' Namelist parameters for ligands, nampislig' 132 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 133 WRITE(numout,*) ' Dissolution rate of FeP rfep =', rfep 134 WRITE(numout,*) ' Lifetime (years) of weak ligands rlgw =', rlgw 135 WRITE(numout,*) ' Remin ligand production per unit C rlig =', rlig 136 WRITE(numout,*) ' Photolysis of weak ligand prlgw =', prlgw 137 WRITE(numout,*) ' Lifetime (years) of strong ligands rlgs =', rlgs 124 WRITE(numout,*) ' Namelist : nampislig' 125 WRITE(numout,*) ' Dissolution rate of FeP rfep =', rfep 126 WRITE(numout,*) ' Lifetime (years) of weak ligands rlgw =', rlgw 127 WRITE(numout,*) ' Remin ligand production per unit C rlig =', rlig 128 WRITE(numout,*) ' Photolysis of weak ligand prlgw =', prlgw 129 WRITE(numout,*) ' Lifetime (years) of strong ligands rlgs =', rlgs 138 130 ENDIF 139 131 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r9124 r9169 215 215 ! 216 216 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 217 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht218 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term219 IF( iom_use( "LDnut" ) ) CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term220 IF( iom_use( "LNFe" ) ) CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term221 IF( iom_use( "LDFe" ) ) CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term217 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 218 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 219 IF( iom_use( "LDnut" ) ) CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 220 IF( iom_use( "LNFe" ) ) CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 221 IF( iom_use( "LDFe" ) ) CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 222 222 ENDIF 223 223 ! … … 246 246 !!---------------------------------------------------------------------- 247 247 ! 248 IF(lwp) THEN 249 WRITE(numout,*) 250 WRITE(numout,*) 'p4z_lim_init : initialization of nutrient limitations' 251 WRITE(numout,*) '~~~~~~~~~~~~' 252 ENDIF 253 ! 248 254 REWIND( numnatp_ref ) ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 249 255 READ ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 250 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist', lwp ) 251 ! 256 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist', lwp ) 252 257 REWIND( numnatp_cfg ) ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters 253 258 READ ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 254 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist', lwp )255 IF(lwm) WRITE 259 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist', lwp ) 260 IF(lwm) WRITE( numonp, namp4zlim ) 256 261 ! 257 262 IF(lwp) THEN ! control print 258 WRITE(numout,*) ' ' 259 WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp4zlim' 260 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 261 WRITE(numout,*) ' mean rainratio caco3r = ', caco3r 262 WRITE(numout,*) ' NO3 half saturation of nanophyto concnno3 = ', concnno3 263 WRITE(numout,*) ' NO3 half saturation of diatoms concdno3 = ', concdno3 264 WRITE(numout,*) ' NH4 half saturation for phyto concnnh4 = ', concnnh4 265 WRITE(numout,*) ' NH4 half saturation for diatoms concdnh4 = ', concdnh4 266 WRITE(numout,*) ' half saturation constant for Si uptake xksi1 = ', xksi1 267 WRITE(numout,*) ' half saturation constant for Si/C xksi2 = ', xksi2 268 WRITE(numout,*) ' half-sat. of DOC remineralization xkdoc = ', xkdoc 269 WRITE(numout,*) ' Iron half saturation for nanophyto concnfer = ', concnfer 270 WRITE(numout,*) ' Iron half saturation for diatoms concdfer = ', concdfer 271 WRITE(numout,*) ' size ratio for nanophytoplankton xsizern = ', xsizern 272 WRITE(numout,*) ' size ratio for diatoms xsizerd = ', xsizerd 273 WRITE(numout,*) ' NO3 half saturation of bacteria concbno3 = ', concbno3 274 WRITE(numout,*) ' NH4 half saturation for bacteria concbnh4 = ', concbnh4 275 WRITE(numout,*) ' Minimum size criteria for diatoms xsizedia = ', xsizedia 276 WRITE(numout,*) ' Minimum size criteria for nanophyto xsizephy = ', xsizephy 277 WRITE(numout,*) ' Fe half saturation for bacteria concbfe = ', concbfe 278 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =' , oxymin 279 WRITE(numout,*) ' optimal Fe quota for nano. qnfelim = ', qnfelim 280 WRITE(numout,*) ' Optimal Fe quota for diatoms qdfelim = ', qdfelim 263 WRITE(numout,*) ' Namelist : namp4zlim' 264 WRITE(numout,*) ' mean rainratio caco3r = ', caco3r 265 WRITE(numout,*) ' NO3 half saturation of nanophyto concnno3 = ', concnno3 266 WRITE(numout,*) ' NO3 half saturation of diatoms concdno3 = ', concdno3 267 WRITE(numout,*) ' NH4 half saturation for phyto concnnh4 = ', concnnh4 268 WRITE(numout,*) ' NH4 half saturation for diatoms concdnh4 = ', concdnh4 269 WRITE(numout,*) ' half saturation constant for Si uptake xksi1 = ', xksi1 270 WRITE(numout,*) ' half saturation constant for Si/C xksi2 = ', xksi2 271 WRITE(numout,*) ' half-sat. of DOC remineralization xkdoc = ', xkdoc 272 WRITE(numout,*) ' Iron half saturation for nanophyto concnfer = ', concnfer 273 WRITE(numout,*) ' Iron half saturation for diatoms concdfer = ', concdfer 274 WRITE(numout,*) ' size ratio for nanophytoplankton xsizern = ', xsizern 275 WRITE(numout,*) ' size ratio for diatoms xsizerd = ', xsizerd 276 WRITE(numout,*) ' NO3 half saturation of bacteria concbno3 = ', concbno3 277 WRITE(numout,*) ' NH4 half saturation for bacteria concbnh4 = ', concbnh4 278 WRITE(numout,*) ' Minimum size criteria for diatoms xsizedia = ', xsizedia 279 WRITE(numout,*) ' Minimum size criteria for nanophyto xsizephy = ', xsizephy 280 WRITE(numout,*) ' Fe half saturation for bacteria concbfe = ', concbfe 281 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =' , oxymin 282 WRITE(numout,*) ' optimal Fe quota for nano. qnfelim = ', qnfelim 283 WRITE(numout,*) ' Optimal Fe quota for diatoms qdfelim = ', qdfelim 281 284 ENDIF 282 285 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r9125 r9169 29 29 PUBLIC p4z_lys_init ! called in trcsms_pisces.F90 30 30 31 !! * Shared module variables 32 REAL(wp), PUBLIC :: kdca !: diss. rate constant calcite 33 REAL(wp), PUBLIC :: nca !: order of reaction for calcite dissolution 31 REAL(wp), PUBLIC :: kdca !: diss. rate constant calcite 32 REAL(wp), PUBLIC :: nca !: order of reaction for calcite dissolution 34 33 35 !! * Module variables36 REAL(wp) :: calcon = 1.03E-2 !:mean calcite concentration [Ca2+] in sea water [mole/kg solution]34 INTEGER :: rmtss ! number of seconds per month 35 REAL(wp) :: calcon = 1.03E-2 ! mean calcite concentration [Ca2+] in sea water [mole/kg solution] 37 36 38 INTEGER :: rmtss !: number of seconds per month39 40 37 !!---------------------------------------------------------------------- 41 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 56 53 !! ** Method : - ??? 57 54 !!--------------------------------------------------------------------- 55 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 58 56 ! 59 INTEGER, INTENT(in) :: kt, knt ! ocean time step60 57 INTEGER :: ji, jj, jk, jn 61 58 REAL(wp) :: zdispot, zfact, zcalcon 62 59 REAL(wp) :: zomegaca, zexcess, zexcess0 63 CHARACTER (len=25) :: charout64 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zco3, zcaldiss, zhinit, zhi, zco3sat60 CHARACTER (len=25) :: charout 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zco3, zcaldiss, zhinit, zhi, zco3sat 65 62 !!--------------------------------------------------------------------- 66 63 ! … … 69 66 zco3 (:,:,:) = 0. 70 67 zcaldiss(:,:,:) = 0. 71 zhinit(:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 68 zhinit (:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 69 ! 72 70 ! ------------------------------------------- 73 71 ! COMPUTE [CO3--] and [H+] CONCENTRATIONS 74 72 ! ------------------------------------------- 75 73 76 CALL solve_at_general( zhinit, zhi)74 CALL solve_at_general( zhinit, zhi ) 77 75 78 76 DO jk = 1, jpkm1 … … 80 78 DO ji = 1, jpi 81 79 zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2 & 82 &+ ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn )83 hi (ji,jj,jk)= zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000.80 & + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 81 hi (ji,jj,jk) = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 84 82 END DO 85 83 END DO … … 158 156 NAMELIST/nampiscal/ kdca, nca 159 157 !!---------------------------------------------------------------------- 158 IF(lwp) THEN 159 WRITE(numout,*) 160 WRITE(numout,*) 'p4z_lys_init : initialization of CaCO3 dissolution' 161 WRITE(numout,*) '~~~~~~~~~~~~' 162 ENDIF 160 163 ! 161 164 REWIND( numnatp_ref ) ! Namelist nampiscal in reference namelist : Pisces CaCO3 dissolution 162 165 READ ( numnatp_ref, nampiscal, IOSTAT = ios, ERR = 901) 163 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiscal in reference namelist', lwp ) 164 ! 166 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiscal in reference namelist', lwp ) 165 167 REWIND( numnatp_cfg ) ! Namelist nampiscal in configuration namelist : Pisces CaCO3 dissolution 166 168 READ ( numnatp_cfg, nampiscal, IOSTAT = ios, ERR = 902 ) 167 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampiscal in configuration namelist', lwp )168 IF(lwm) WRITE 169 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampiscal in configuration namelist', lwp ) 170 IF(lwm) WRITE( numonp, nampiscal ) 169 171 ! 170 172 IF(lwp) THEN ! control print 171 WRITE(numout,*) ' ' 172 WRITE(numout,*) ' Namelist parameters for CaCO3 dissolution, nampiscal' 173 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 174 WRITE(numout,*) ' diss. rate constant calcite (per month) kdca =', kdca 175 WRITE(numout,*) ' order of reaction for calcite dissolution nca =', nca 173 WRITE(numout,*) ' Namelist : nampiscal' 174 WRITE(numout,*) ' diss. rate constant calcite (per month) kdca =', kdca 175 WRITE(numout,*) ' order of reaction for calcite dissolution nca =', nca 176 176 ENDIF 177 177 ! … … 180 180 ! 181 181 END SUBROUTINE p4z_lys_init 182 182 183 !!====================================================================== 183 184 END MODULE p4zlys -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r9125 r9169 8 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 9 !!---------------------------------------------------------------------- 10 !! p4z_meso : 11 !! p4z_meso_init : 12 !!---------------------------------------------------------------------- 13 USE oce_trc ! 14 USE trc ! 15 USE sms_pisces ! 16 USE p4zprod ! 17 USE prtctl_trc ! 18 USE iom ! 10 !! p4z_meso : Compute the sources/sinks for mesozooplankton 11 !! p4z_meso_init : Initialization of the parameters for mesozooplankton 12 !!---------------------------------------------------------------------- 13 USE oce_trc ! shared variables between ocean and passive tracers 14 USE trc ! passive tracers common variables 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zprod ! production 17 USE prtctl_trc ! print control for debugging 18 USE iom ! I/O manager 19 19 20 20 IMPLICIT NONE … … 24 24 PUBLIC p4z_meso_init ! called in trcsms_pisces.F90 25 25 26 !! * Shared module variables27 26 REAL(wp), PUBLIC :: part2 !: part of calcite not dissolved in mesozoo guts 28 27 REAL(wp), PUBLIC :: xprefc !: mesozoo preference for POC … … 49 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 49 !!---------------------------------------------------------------------- 51 52 50 CONTAINS 53 51 … … 60 58 !! ** Method : - ??? 61 59 !!--------------------------------------------------------------------- 62 INTEGER, INTENT(in) :: kt, knt ! ocean time step 60 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 61 ! 63 62 INTEGER :: ji, jj, jk 64 63 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam … … 73 72 CHARACTER (len=25) :: charout 74 73 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zgrazing 75 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 76 74 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zw3d 77 75 !!--------------------------------------------------------------------- 78 76 ! … … 122 120 123 121 ! Mesozooplankton flux feeding on GOC 124 ! ----------------------------------125 122 ! ---------------------------------- 126 123 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & … … 253 250 !! 254 251 !! ** input : Namelist nampismes 255 !!256 252 !!---------------------------------------------------------------------- 257 253 INTEGER :: ios ! Local integer … … 262 258 !!---------------------------------------------------------------------- 263 259 ! 260 IF(lwp) THEN 261 WRITE(numout,*) 262 WRITE(numout,*) 'p4z_meso_init : Initialization of mesozooplankton parameters' 263 WRITE(numout,*) '~~~~~~~~~~~~~' 264 ENDIF 265 ! 264 266 REWIND( numnatp_ref ) ! Namelist nampismes in reference namelist : Pisces mesozooplankton 265 267 READ ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 266 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist', lwp ) 267 ! 268 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist', lwp ) 268 269 REWIND( numnatp_cfg ) ! Namelist nampismes in configuration namelist : Pisces mesozooplankton 269 270 READ ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 270 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist', lwp )271 IF(lwm) WRITE 271 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist', lwp ) 272 IF(lwm) WRITE( numonp, namp4zmes ) 272 273 ! 273 274 IF(lwp) THEN ! control print 274 WRITE(numout,*) ' ' 275 WRITE(numout,*) ' Namelist parameters for mesozooplankton, namp4zmes' 276 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 277 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 =', part2 278 WRITE(numout,*) ' mesozoo preference for phyto xprefc =', xprefc 279 WRITE(numout,*) ' mesozoo preference for POC xprefp =', xprefp 280 WRITE(numout,*) ' mesozoo preference for zoo xprefz =', xprefz 281 WRITE(numout,*) ' mesozoo preference for poc xprefpoc =', xprefpoc 282 WRITE(numout,*) ' microzoo feeding threshold for mesozoo xthresh2zoo =', xthresh2zoo 283 WRITE(numout,*) ' diatoms feeding threshold for mesozoo xthresh2dia =', xthresh2dia 284 WRITE(numout,*) ' nanophyto feeding threshold for mesozoo xthresh2phy =', xthresh2phy 285 WRITE(numout,*) ' poc feeding threshold for mesozoo xthresh2poc =', xthresh2poc 286 WRITE(numout,*) ' feeding threshold for mesozooplankton xthresh2 =', xthresh2 287 WRITE(numout,*) ' exsudation rate of mesozooplankton resrat2 =', resrat2 288 WRITE(numout,*) ' mesozooplankton mortality rate mzrat2 =', mzrat2 289 WRITE(numout,*) ' maximal mesozoo grazing rate grazrat2 =', grazrat2 290 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 291 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 292 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 293 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 294 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 275 WRITE(numout,*) ' Namelist : namp4zmes' 276 WRITE(numout,*) ' part of calcite not dissolved in mesozoo guts part2 =', part2 277 WRITE(numout,*) ' mesozoo preference for phyto xprefc =', xprefc 278 WRITE(numout,*) ' mesozoo preference for POC xprefp =', xprefp 279 WRITE(numout,*) ' mesozoo preference for zoo xprefz =', xprefz 280 WRITE(numout,*) ' mesozoo preference for poc xprefpoc =', xprefpoc 281 WRITE(numout,*) ' microzoo feeding threshold for mesozoo xthresh2zoo =', xthresh2zoo 282 WRITE(numout,*) ' diatoms feeding threshold for mesozoo xthresh2dia =', xthresh2dia 283 WRITE(numout,*) ' nanophyto feeding threshold for mesozoo xthresh2phy =', xthresh2phy 284 WRITE(numout,*) ' poc feeding threshold for mesozoo xthresh2poc =', xthresh2poc 285 WRITE(numout,*) ' feeding threshold for mesozooplankton xthresh2 =', xthresh2 286 WRITE(numout,*) ' exsudation rate of mesozooplankton resrat2 =', resrat2 287 WRITE(numout,*) ' mesozooplankton mortality rate mzrat2 =', mzrat2 288 WRITE(numout,*) ' maximal mesozoo grazing rate grazrat2 =', grazrat2 289 WRITE(numout,*) ' mesozoo flux feeding rate grazflux =', grazflux 290 WRITE(numout,*) ' non assimilated fraction of P by mesozoo unass2 =', unass2 291 WRITE(numout,*) ' Efficicency of Mesozoo growth epsher2 =', epsher2 292 WRITE(numout,*) ' Fraction of mesozoo excretion as DOM sigma2 =', sigma2 293 WRITE(numout,*) ' half sturation constant for grazing 2 xkgraz2 =', xkgraz2 295 294 ENDIF 296 295 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r9125 r9169 8 8 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Quota model for iron 9 9 !!---------------------------------------------------------------------- 10 !! p4z_micro :Compute the sources/sinks for microzooplankton11 !! p4z_micro_init :Initialize and read the appropriate namelist12 !!---------------------------------------------------------------------- 13 USE oce_trc ! 14 USE trc ! 15 USE sms_pisces ! 16 USE p4zlim ! 17 USE p4zprod ! 18 USE iom ! 19 USE prtctl_trc ! 10 !! p4z_micro : Compute the sources/sinks for microzooplankton 11 !! p4z_micro_init : Initialize and read the appropriate namelist 12 !!---------------------------------------------------------------------- 13 USE oce_trc ! shared variables between ocean and passive tracers 14 USE trc ! passive tracers common variables 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p4zlim ! Co-limitations 17 USE p4zprod ! production 18 USE iom ! I/O manager 19 USE prtctl_trc ! print control for debugging 20 20 21 21 IMPLICIT NONE … … 25 25 PUBLIC p4z_micro_init ! called in trcsms_pisces.F90 26 26 27 !! * Shared module variables 28 REAL(wp), PUBLIC :: part !: part of calcite not dissolved in microzoo guts 29 REAL(wp), PUBLIC :: xpref2c !: microzoo preference for POC 30 REAL(wp), PUBLIC :: xpref2p !: microzoo preference for nanophyto 31 REAL(wp), PUBLIC :: xpref2d !: microzoo preference for diatoms 32 REAL(wp), PUBLIC :: xthreshdia !: diatoms feeding threshold for microzooplankton 33 REAL(wp), PUBLIC :: xthreshphy !: nanophyto threshold for microzooplankton 34 REAL(wp), PUBLIC :: xthreshpoc !: poc threshold for microzooplankton 35 REAL(wp), PUBLIC :: xthresh !: feeding threshold for microzooplankton 36 REAL(wp), PUBLIC :: resrat !: exsudation rate of microzooplankton 37 REAL(wp), PUBLIC :: mzrat !: microzooplankton mortality rate 38 REAL(wp), PUBLIC :: grazrat !: maximal microzoo grazing rate 39 REAL(wp), PUBLIC :: xkgraz !: non assimilated fraction of P by microzoo 40 REAL(wp), PUBLIC :: unass !: Efficicency of microzoo growth 41 REAL(wp), PUBLIC :: sigma1 !: Fraction of microzoo excretion as DOM 42 REAL(wp), PUBLIC :: epsher !: half sturation constant for grazing 1 27 REAL(wp), PUBLIC :: part !: part of calcite not dissolved in microzoo guts 28 REAL(wp), PUBLIC :: xpref2c !: microzoo preference for POC 29 REAL(wp), PUBLIC :: xpref2p !: microzoo preference for nanophyto 30 REAL(wp), PUBLIC :: xpref2d !: microzoo preference for diatoms 31 REAL(wp), PUBLIC :: xthreshdia !: diatoms feeding threshold for microzooplankton 32 REAL(wp), PUBLIC :: xthreshphy !: nanophyto threshold for microzooplankton 33 REAL(wp), PUBLIC :: xthreshpoc !: poc threshold for microzooplankton 34 REAL(wp), PUBLIC :: xthresh !: feeding threshold for microzooplankton 35 REAL(wp), PUBLIC :: resrat !: exsudation rate of microzooplankton 36 REAL(wp), PUBLIC :: mzrat !: microzooplankton mortality rate 37 REAL(wp), PUBLIC :: grazrat !: maximal microzoo grazing rate 38 REAL(wp), PUBLIC :: xkgraz !: non assimilated fraction of P by microzoo 39 REAL(wp), PUBLIC :: unass !: Efficicency of microzoo growth 40 REAL(wp), PUBLIC :: sigma1 !: Fraction of microzoo excretion as DOM 41 REAL(wp), PUBLIC :: epsher !: half sturation constant for grazing 1 43 42 44 43 !!---------------------------------------------------------------------- … … 57 56 !! ** Method : - ??? 58 57 !!--------------------------------------------------------------------- 59 INTEGER, INTENT(in) :: kt! ocean time step60 INTEGER, INTENT(in) :: knt58 INTEGER, INTENT(in) :: kt ! ocean time step 59 INTEGER, INTENT(in) :: knt ! ??? 61 60 ! 62 61 INTEGER :: ji, jj, jk … … 185 184 ENDIF 186 185 ! 187 IF(ln_ctl) THEN! print mean trends (used for debugging)186 IF(ln_ctl) THEN ! print mean trends (used for debugging) 188 187 WRITE(charout, FMT="('micro')") 189 188 CALL prt_ctl_trc_info(charout) … … 215 214 !!---------------------------------------------------------------------- 216 215 ! 216 IF(lwp) THEN 217 WRITE(numout,*) 218 WRITE(numout,*) 'p4z_micro_init : Initialization of microzooplankton parameters' 219 WRITE(numout,*) '~~~~~~~~~~~~~~' 220 ENDIF 221 ! 217 222 REWIND( numnatp_ref ) ! Namelist nampiszoo in reference namelist : Pisces microzooplankton 218 223 READ ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 219 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist', lwp ) 220 ! 224 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist', lwp ) 221 225 REWIND( numnatp_cfg ) ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 222 226 READ ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 223 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist', lwp )224 IF(lwm) WRITE 227 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist', lwp ) 228 IF(lwm) WRITE( numonp, namp4zzoo ) 225 229 ! 226 230 IF(lwp) THEN ! control print 227 WRITE(numout,*) ' ' 228 WRITE(numout,*) ' Namelist parameters for microzooplankton, namp4zzoo' 229 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 230 WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part 231 WRITE(numout,*) ' microzoo preference for POC xpref2c =', xpref2c 232 WRITE(numout,*) ' microzoo preference for nano xpref2p =', xpref2p 233 WRITE(numout,*) ' microzoo preference for diatoms xpref2d =', xpref2d 234 WRITE(numout,*) ' diatoms feeding threshold for microzoo xthreshdia =', xthreshdia 235 WRITE(numout,*) ' nanophyto feeding threshold for microzoo xthreshphy =', xthreshphy 236 WRITE(numout,*) ' poc feeding threshold for microzoo xthreshpoc =', xthreshpoc 237 WRITE(numout,*) ' feeding threshold for microzooplankton xthresh =', xthresh 238 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 239 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 240 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 241 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 242 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 243 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 244 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 231 WRITE(numout,*) ' Namelist : namp4zzoo' 232 WRITE(numout,*) ' part of calcite not dissolved in microzoo guts part =', part 233 WRITE(numout,*) ' microzoo preference for POC xpref2c =', xpref2c 234 WRITE(numout,*) ' microzoo preference for nano xpref2p =', xpref2p 235 WRITE(numout,*) ' microzoo preference for diatoms xpref2d =', xpref2d 236 WRITE(numout,*) ' diatoms feeding threshold for microzoo xthreshdia =', xthreshdia 237 WRITE(numout,*) ' nanophyto feeding threshold for microzoo xthreshphy =', xthreshphy 238 WRITE(numout,*) ' poc feeding threshold for microzoo xthreshpoc =', xthreshpoc 239 WRITE(numout,*) ' feeding threshold for microzooplankton xthresh =', xthresh 240 WRITE(numout,*) ' exsudation rate of microzooplankton resrat =', resrat 241 WRITE(numout,*) ' microzooplankton mortality rate mzrat =', mzrat 242 WRITE(numout,*) ' maximal microzoo grazing rate grazrat =', grazrat 243 WRITE(numout,*) ' non assimilated fraction of P by microzoo unass =', unass 244 WRITE(numout,*) ' Efficicency of microzoo growth epsher =', epsher 245 WRITE(numout,*) ' Fraction of microzoo excretion as DOM sigma1 =', sigma1 246 WRITE(numout,*) ' half sturation constant for grazing 1 xkgraz =', xkgraz 245 247 ENDIF 246 248 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r9124 r9169 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 8 !!---------------------------------------------------------------------- 9 !! p4z_mort : 10 !! p4z_mort_init : 11 !!---------------------------------------------------------------------- 12 USE oce_trc ! 13 USE trc ! 14 USE sms_pisces ! 15 USE p4zprod ! 16 USE p4zlim ! 17 USE prtctl_trc ! 9 !! p4z_mort : Compute the mortality terms for phytoplankton 10 !! p4z_mort_init : Initialize the mortality params for phytoplankton 11 !!---------------------------------------------------------------------- 12 USE oce_trc ! shared variables between ocean and passive tracers 13 USE trc ! passive tracers common variables 14 USE sms_pisces ! PISCES Source Minus Sink variables 15 USE p4zprod ! Primary productivity 16 USE p4zlim ! Phytoplankton limitation terms 17 USE prtctl_trc ! print control for debugging 18 18 19 19 IMPLICIT NONE … … 23 23 PUBLIC p4z_mort_init 24 24 25 !! * Shared module variables 26 REAL(wp), PUBLIC :: wchl !: 27 REAL(wp), PUBLIC :: wchld !: 28 REAL(wp), PUBLIC :: wchldm !: 29 REAL(wp), PUBLIC :: mprat !: 30 REAL(wp), PUBLIC :: mprat2 !: 25 REAL(wp), PUBLIC :: wchl !: 26 REAL(wp), PUBLIC :: wchld !: 27 REAL(wp), PUBLIC :: wchldm !: 28 REAL(wp), PUBLIC :: mprat !: 29 REAL(wp), PUBLIC :: mprat2 !: 31 30 32 31 !!---------------------------------------------------------------------- … … 35 34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 35 !!---------------------------------------------------------------------- 37 38 36 CONTAINS 39 37 … … 49 47 INTEGER, INTENT(in) :: kt ! ocean time step 50 48 !!--------------------------------------------------------------------- 51 49 ! 52 50 CALL p4z_nano ! nanophytoplankton 53 51 ! 54 52 CALL p4z_diat ! diatoms 55 53 ! 56 54 END SUBROUTINE p4z_mort 57 55 … … 65 63 !! ** Method : - ??? 66 64 !!--------------------------------------------------------------------- 67 INTEGER :: ji, jj, jk68 REAL(wp) :: zsizerat, zcompaph69 REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal70 REAL(wp) :: ztortp , zrespp , zmortp71 CHARACTER (len=25) :: charout65 INTEGER :: ji, jj, jk 66 REAL(wp) :: zsizerat, zcompaph 67 REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 68 REAL(wp) :: ztortp , zrespp , zmortp 69 CHARACTER (len=25) :: charout 72 70 !!--------------------------------------------------------------------- 73 71 ! 74 72 IF( ln_timing ) CALL timing_start('p4z_nano') 75 73 ! 76 prodcal(:,:,:) = 0. !:calcite production variable set to zero74 prodcal(:,:,:) = 0._wp ! calcite production variable set to zero 77 75 DO jk = 1, jpkm1 78 76 DO jj = 1, jpj … … 139 137 !! ** Method : - ??? 140 138 !!--------------------------------------------------------------------- 141 INTEGER :: ji, jj, jk142 REAL(wp) :: zfactfe,zfactsi,zfactch, zcompadi143 REAL(wp) :: zrespp2, ztortp2, zmortp2144 REAL(wp) :: zlim2, zlim1145 CHARACTER (len=25) :: charout139 INTEGER :: ji, jj, jk 140 REAL(wp) :: zfactfe,zfactsi,zfactch, zcompadi 141 REAL(wp) :: zrespp2, ztortp2, zmortp2 142 REAL(wp) :: zlim2, zlim1 143 CHARACTER (len=25) :: charout 146 144 !!--------------------------------------------------------------------- 147 145 ! 148 146 IF( ln_timing ) CALL timing_start('p4z_diat') 149 147 ! 150 151 148 ! Aggregation term for diatoms is increased in case of nutrient 152 149 ! stress as observed in reality. The stressed cells become more … … 196 193 END DO 197 194 ! 198 IF(ln_ctl) THEN! print mean trends (used for debugging)195 IF(ln_ctl) THEN ! print mean trends (used for debugging) 199 196 WRITE(charout, FMT="('diat')") 200 197 CALL prt_ctl_trc_info(charout) … … 214 211 !! 215 212 !! ** Method : Read the nampismort namelist and check the parameters 216 !! called at the first timestep213 !! called at the first timestep 217 214 !! 218 215 !! ** input : Namelist nampismort … … 224 221 !!---------------------------------------------------------------------- 225 222 ! 223 IF(lwp) THEN 224 WRITE(numout,*) 225 WRITE(numout,*) 'p4z_mort_init : Initialization of phytoplankton mortality parameters' 226 WRITE(numout,*) '~~~~~~~~~~~~~' 227 ENDIF 228 ! 226 229 REWIND( numnatp_ref ) ! Namelist nampismort in reference namelist : Pisces phytoplankton 227 230 READ ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 228 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist', lwp ) 229 ! 231 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist', lwp ) 230 232 REWIND( numnatp_cfg ) ! Namelist nampismort in configuration namelist : Pisces phytoplankton 231 233 READ ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 232 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist', lwp )233 IF(lwm) WRITE 234 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist', lwp ) 235 IF(lwm) WRITE( numonp, namp4zmort ) 234 236 ! 235 237 IF(lwp) THEN ! control print 236 WRITE(numout,*) ' ' 237 WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, namp4zmort' 238 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 239 WRITE(numout,*) ' quadratic mortality of phytoplankton wchl =', wchl 240 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchld =', wchld 241 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchldm =', wchldm 242 WRITE(numout,*) ' phytoplankton mortality rate mprat =', mprat 243 WRITE(numout,*) ' Diatoms mortality rate mprat2 =', mprat2 238 WRITE(numout,*) ' Namelist : namp4zmort' 239 WRITE(numout,*) ' quadratic mortality of phytoplankton wchl =', wchl 240 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchld =', wchld 241 WRITE(numout,*) ' maximum quadratic mortality of diatoms wchldm =', wchldm 242 WRITE(numout,*) ' phytoplankton mortality rate mprat =', mprat 243 WRITE(numout,*) ' Diatoms mortality rate mprat2 =', mprat2 244 244 ENDIF 245 245 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r9125 r9169 4 4 !! TOP - PISCES : Compute the light availability in the water column 5 5 !!====================================================================== 6 !! History : 7 !! 8 !! 9 !! 6 !! History : 1.0 ! 2004 (O. Aumont) Original code 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 !! 3.2 ! 2009-04 (C. Ethe, G. Madec) optimisation 9 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Improve light availability of nano & diat 10 10 !!---------------------------------------------------------------------- 11 11 !! p4z_opt : light availability in the water column … … 15 15 USE sms_pisces ! Source Minus Sink of PISCES 16 16 USE iom ! I/O manager 17 USE fldread 18 USE prtctl_trc 17 USE fldread ! time interpolation 18 USE prtctl_trc ! print control for debugging 19 19 20 20 IMPLICIT NONE … … 27 27 !! * Shared module variables 28 28 29 LOGICAL :: ln_varpar !:boolean for variable PAR fraction30 REAL(wp) :: parlux !:Fraction of shortwave as PAR31 REAL(wp) :: xparsw !:parlux/332 REAL(wp) :: xsi0r !:1. /rn_si029 LOGICAL :: ln_varpar ! boolean for variable PAR fraction 30 REAL(wp) :: parlux ! Fraction of shortwave as PAR 31 REAL(wp) :: xparsw ! parlux/3 32 REAL(wp) :: xsi0r ! 1. /rn_si0 33 33 34 34 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_par ! structure of input par 35 35 INTEGER , PARAMETER :: nbtimes = 366 !: maximum number of times record in a file 36 36 INTEGER :: ntimes_par ! number of time steps in a file 37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: par_varsw !:PAR fraction of shortwave38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr !:wavelength (Red-Green-Blue)37 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: par_varsw ! PAR fraction of shortwave 38 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr ! wavelength (Red-Green-Blue) 39 39 40 40 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m) 41 41 42 REAL(wp), DIMENSION(3,61) :: xkrgb ! :tabulated attenuation coefficients for RGB absorption42 REAL(wp), DIMENSION(3,61) :: xkrgb ! tabulated attenuation coefficients for RGB absorption 43 43 44 44 !!---------------------------------------------------------------------- … … 70 70 !!--------------------------------------------------------------------- 71 71 ! 72 IF( ln_timing ) CALL timing_start('p4z_opt') 73 ! 74 ! Allocate temporary workspace 75 IF( ln_p5z ) ALLOCATE( zetmp5(jpi,jpj) ) 76 77 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 72 IF( ln_timing ) CALL timing_start('p4z_opt') 73 IF( ln_p5z ) ALLOCATE( zetmp5(jpi,jpj) ) 74 75 IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 78 76 79 77 ! Initialisation of variables used to compute PAR … … 84 82 ! 85 83 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 86 87 zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch)88 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:)+ trb(:,:,:,jppch)84 ! ! -------------------------------------------------------- 85 zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 86 IF( ln_p5z ) zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 89 87 ! 90 88 DO jk = 1, jpkm1 … … 105 103 IF( l_trcdm2dc ) THEN ! diurnal cycle 106 104 ! 107 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1. -fr_i(:,:) + rtrn )105 zqsr_corr(:,:) = qsr_mean(:,:) / ( 1.-fr_i(:,:) + rtrn ) 108 106 ! 109 107 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) … … 120 118 ENDIF 121 119 ! 122 zqsr_corr(:,:) = qsr(:,:) / ( 1. -fr_i(:,:) + rtrn )120 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 123 121 ! 124 122 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3 ) … … 130 128 ELSE 131 129 ! 132 zqsr_corr(:,:) = qsr(:,:) / ( 1. -fr_i(:,:) + rtrn )130 zqsr_corr(:,:) = qsr(:,:) / ( 1.-fr_i(:,:) + rtrn ) 133 131 ! 134 132 CALL p4z_opt_par( kt, zqsr_corr, ze1, ze2, ze3, pqsr100 = zqsr100 ) … … 240 238 ENDIF 241 239 ! 242 IF( ln_p5z ) DEALLOCATE( zetmp5 ) 243 ! 244 IF( ln_timing ) CALL timing_stop('p4z_opt') 240 IF( ln_p5z ) DEALLOCATE( zetmp5 ) 241 IF( ln_timing ) CALL timing_stop('p4z_opt') 245 242 ! 246 243 END SUBROUTINE p4z_opt … … 255 252 !! 256 253 !!---------------------------------------------------------------------- 257 !! * arguments 258 INTEGER, INTENT(in) :: kt ! ocean time-step 259 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in) :: pqsr ! shortwave 260 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe1 , pe2 , pe3 ! PAR ( R-G-B) 261 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL :: pe0 262 REAL(wp), DIMENSION(jpi,jpj) , INTENT(out) , OPTIONAL :: pqsr100 263 !! * local variables 254 INTEGER , INTENT(in) :: kt ! ocean time-step 255 REAL(wp), DIMENSION(jpi,jpj) , INTENT(in ) :: pqsr ! shortwave 256 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pe1 , pe2 , pe3 ! PAR ( R-G-B) 257 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout), OPTIONAL :: pe0 ! 258 REAL(wp), DIMENSION(jpi,jpj) , INTENT( out), OPTIONAL :: pqsr100 ! 259 ! 264 260 INTEGER :: ji, jj, jk ! dummy loop indices 265 REAL(wp), DIMENSION(jpi,jpj) :: zqsr !shortwave261 REAL(wp), DIMENSION(jpi,jpj) :: zqsr ! shortwave 266 262 !!---------------------------------------------------------------------- 267 263 … … 272 268 273 269 ! Light at the euphotic depth 274 IF( PRESENT( pqsr100 ) ) pqsr100(:,:) = 0.01 * 3. * zqsr(:,:)270 IF( PRESENT( pqsr100 ) ) pqsr100(:,:) = 0.01 * 3. * zqsr(:,:) 275 271 276 272 IF( PRESENT( pe0 ) ) THEN ! W-level … … 285 281 DO ji = 1, jpi 286 282 pe0(ji,jj,jk) = pe0(ji,jj,jk-1) * EXP( -e3t_n(ji,jj,jk-1) * xsi0r ) 287 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb (ji,jj,jk-1 ))288 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg (ji,jj,jk-1 ))289 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr (ji,jj,jk-1 ))283 pe1(ji,jj,jk) = pe1(ji,jj,jk-1) * EXP( -ekb (ji,jj,jk-1 ) ) 284 pe2(ji,jj,jk) = pe2(ji,jj,jk-1) * EXP( -ekg (ji,jj,jk-1 ) ) 285 pe3(ji,jj,jk) = pe3(ji,jj,jk-1) * EXP( -ekr (ji,jj,jk-1 ) ) 290 286 END DO 291 287 ! … … 327 323 !! 328 324 !!---------------------------------------------------------------------- 329 INTEGER , INTENT(in) :: kt! ocean time step325 INTEGER, INTENT(in) :: kt ! ocean time step 330 326 ! 331 327 INTEGER :: ji,jj … … 357 353 !! ** Input : external ascii and netcdf files 358 354 !!---------------------------------------------------------------------- 359 INTEGER :: numpar 360 INTEGER :: ierr 361 INTEGER :: ios ! Local integer output status for namelist read 362 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 355 INTEGER :: numpar, ierr, ios ! Local integer 356 REAL(wp), DIMENSION(nbtimes) :: zsteps ! times records 363 357 ! 364 358 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files … … 367 361 NAMELIST/nampisopt/cn_dir, sn_par, ln_varpar, parlux 368 362 !!---------------------------------------------------------------------- 369 363 IF(lwp) THEN 364 WRITE(numout,*) 365 WRITE(numout,*) 'p4z_opt_init : ' 366 WRITE(numout,*) '~~~~~~~~~~~~ ' 367 ENDIF 370 368 REWIND( numnatp_ref ) ! Namelist nampisopt in reference namelist : Pisces attenuation coef. and PAR 371 369 READ ( numnatp_ref, nampisopt, IOSTAT = ios, ERR = 901) 372 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisopt in reference namelist', lwp ) 373 370 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisopt in reference namelist', lwp ) 374 371 REWIND( numnatp_cfg ) ! Namelist nampisopt in configuration namelist : Pisces attenuation coef. and PAR 375 372 READ ( numnatp_cfg, nampisopt, IOSTAT = ios, ERR = 902 ) 376 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'nampisopt in configuration namelist', lwp )373 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisopt in configuration namelist', lwp ) 377 374 IF(lwm) WRITE ( numonp, nampisopt ) 378 375 379 376 IF(lwp) THEN 380 WRITE(numout,*) ' ' 381 WRITE(numout,*) ' namelist : nampisopt ' 382 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~ ' 383 WRITE(numout,*) ' PAR as a variable fraction of SW ln_varpar = ', ln_varpar 384 WRITE(numout,*) ' Default value for the PAR fraction parlux = ', parlux 377 WRITE(numout,*) ' Namelist : nampisopt ' 378 WRITE(numout,*) ' PAR as a variable fraction of SW ln_varpar = ', ln_varpar 379 WRITE(numout,*) ' Default value for the PAR fraction parlux = ', parlux 385 380 ENDIF 386 381 ! … … 391 386 ! ---------------------------------------- 392 387 IF( ln_varpar ) THEN 393 IF(lwp) WRITE(numout,*) ' initialize variable par fraction '394 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'388 IF(lwp) WRITE(numout,*) 389 IF(lwp) WRITE(numout,*) ' ==>>> initialize variable par fraction (ln_varpar=T)' 395 390 ! 396 391 ALLOCATE( par_varsw(jpi,jpj) ) -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zpoc.F90
r9125 r9169 23 23 PUBLIC p4z_poc ! called in p4zbio.F90 24 24 PUBLIC p4z_poc_init ! called in trcsms_pisces.F90 25 PUBLIC alngam 26 PUBLIC gamain 27 28 !! * Shared module variables 29 REAL(wp), PUBLIC :: xremip !: remineralisation rate of DOC 30 REAL(wp), PUBLIC :: xremipc !: remineralisation rate of DOC 31 REAL(wp), PUBLIC :: xremipn !: remineralisation rate of DON 32 REAL(wp), PUBLIC :: xremipp !: remineralisation rate of DOP 33 INTEGER , PUBLIC :: jcpoc !: number of lability classes 34 REAL(wp), PUBLIC :: rshape !: shape factor of the gamma distribution 35 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap 25 PUBLIC alngam ! 26 PUBLIC gamain ! 27 28 REAL(wp), PUBLIC :: xremip !: remineralisation rate of DOC 29 REAL(wp), PUBLIC :: xremipc !: remineralisation rate of DOC 30 REAL(wp), PUBLIC :: xremipn !: remineralisation rate of DON 31 REAL(wp), PUBLIC :: xremipp !: remineralisation rate of DOP 32 INTEGER , PUBLIC :: jcpoc !: number of lability classes 33 REAL(wp), PUBLIC :: rshape !: shape factor of the gamma distribution 34 35 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: alphan, reminp !: 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: alphap !: 38 37 39 38 … … 53 52 !! ** Method : - ??? 54 53 !!--------------------------------------------------------------------- 55 ! 56 INTEGER, INTENT(in) :: kt, knt ! ocean time step 54 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 57 55 ! 58 56 INTEGER :: ji, jj, jk, jn … … 187 185 END DO 188 186 189 IF( ln_p4z ) THEN ; zremigoc(:,:,:) = MIN( xremip , ztremint(:,:,:) )190 ELSE ; zremigoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) )187 IF( ln_p4z ) THEN ; zremigoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) 188 ELSE ; zremigoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) ) 191 189 ENDIF 192 190 … … 260 258 ! ------------------------------------------------------------------- 261 259 ! 262 totprod (:,:) = 0.260 totprod (:,:) = 0. 263 261 totthick(:,:) = 0. 264 totcons (:,:) = 0.262 totcons (:,:) = 0. 265 263 ! intregrated production and consumption of POC in the mixed layer 266 264 ! ---------------------------------------------------------------- … … 396 394 END DO 397 395 398 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) )399 ELSE ; zremipoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) )396 IF( ln_p4z ) THEN ; zremipoc(:,:,:) = MIN( xremip , ztremint(:,:,:) ) 397 ELSE ; zremipoc(:,:,:) = MIN( xremipc, ztremint(:,:,:) ) 400 398 ENDIF 401 399 … … 473 471 !! 474 472 !! ** Method : Read the nampispoc namelist and check the parameters 475 !! called at the first timestep473 !! called at the first timestep 476 474 !! 477 475 !! ** input : Namelist nampispoc 478 !!479 476 !!---------------------------------------------------------------------- 477 INTEGER :: jn ! dummy loop index 480 478 INTEGER :: ios, ifault ! Local integer 481 INTEGER :: jn 482 REAL(wp) :: remindelta, reminup, remindown 479 REAL(wp):: remindelta, reminup, remindown 483 480 !! 484 481 NAMELIST/nampispoc/ xremip , jcpoc , rshape, & 485 482 & xremipc, xremipn, xremipp 486 483 !!---------------------------------------------------------------------- 487 484 ! 485 IF(lwp) THEN 486 WRITE(numout,*) 487 WRITE(numout,*) 'p4z_poc_init : Initialization of remineralization parameters' 488 WRITE(numout,*) '~~~~~~~~~~~~' 489 ENDIF 490 ! 488 491 REWIND( numnatp_ref ) ! Namelist nampisrem in reference namelist : Pisces remineralization 489 492 READ ( numnatp_ref, nampispoc, IOSTAT = ios, ERR = 901) 490 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampispoc in reference namelist', lwp ) 491 493 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampispoc in reference namelist', lwp ) 492 494 REWIND( numnatp_cfg ) ! Namelist nampisrem in configuration namelist : Pisces remineralization 493 495 READ ( numnatp_cfg, nampispoc, IOSTAT = ios, ERR = 902 ) 494 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampispoc in configuration namelist', lwp )495 IF(lwm) WRITE 496 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampispoc in configuration namelist', lwp ) 497 IF(lwm) WRITE( numonp, nampispoc ) 496 498 497 499 IF(lwp) THEN ! control print 498 WRITE(numout,*) ' ' 499 WRITE(numout,*) ' Namelist parameters for remineralization, nampispoc' 500 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 500 WRITE(numout,*) ' Namelist : nampispoc' 501 501 IF( ln_p4z ) THEN 502 WRITE(numout,*) ' remineralisation rate of POC xremip =', xremip502 WRITE(numout,*) ' remineralisation rate of POC xremip =', xremip 503 503 ELSE 504 WRITE(numout,*) ' remineralisation rate of POC xremipc =', xremipc505 WRITE(numout,*) ' remineralisation rate of PON xremipn =', xremipn506 WRITE(numout,*) ' remineralisation rate of POP xremipp =', xremipp504 WRITE(numout,*) ' remineralisation rate of POC xremipc =', xremipc 505 WRITE(numout,*) ' remineralisation rate of PON xremipn =', xremipn 506 WRITE(numout,*) ' remineralisation rate of POP xremipp =', xremipp 507 507 ENDIF 508 WRITE(numout,*) ' Number of lability classes for POC jcpoc =', jcpoc509 WRITE(numout,*) ' Shape factor of the gamma distribution rshape =', rshape508 WRITE(numout,*) ' Number of lability classes for POC jcpoc =', jcpoc 509 WRITE(numout,*) ' Shape factor of the gamma distribution rshape =', rshape 510 510 ENDIF 511 511 ! … … 513 513 ! --------------------------------------- 514 514 ! 515 ALLOCATE( alphan(jcpoc), reminp(jcpoc) ) 516 ALLOCATE( alphap(jpi,jpj,jpk,jcpoc) ) 515 ALLOCATE( alphan(jcpoc) , reminp(jcpoc) , alphap(jpi,jpj,jpk,jcpoc) ) 517 516 ! 518 517 IF (jcpoc > 1) THEN … … 551 550 END SUBROUTINE p4z_poc_init 552 551 552 553 553 REAL FUNCTION alngam( xvalue, ifault ) 554 555 !*****************************************************************************80 556 ! 557 !! ALNGAM computes the logarithm of the gamma function. 558 ! 559 ! Modified: 560 ! 561 ! 13 January 2008 562 ! 563 ! Author: 564 ! 565 ! Allan Macleod 566 ! FORTRAN90 version by John Burkardt 567 ! 568 ! Reference: 569 ! 570 ! Allan Macleod, 571 ! Algorithm AS 245, 572 ! A Robust and Reliable Algorithm for the Logarithm of the Gamma Function, 573 ! Applied Statistics, 574 ! Volume 38, Number 2, 1989, pages 397-402. 575 ! 576 ! Parameters: 577 ! 578 ! Input, real ( kind = 8 ) XVALUE, the argument of the Gamma function. 579 ! 580 ! Output, integer ( kind = 4 ) IFAULT, error flag. 581 ! 0, no error occurred. 582 ! 1, XVALUE is less than or equal to 0. 583 ! 2, XVALUE is too big. 584 ! 585 ! Output, real ( kind = 8 ) ALNGAM, the logarithm of the gamma function of X. 586 ! 554 !*****************************************************************************80 555 ! 556 !! ALNGAM computes the logarithm of the gamma function. 557 ! 558 ! Modified: 13 January 2008 559 ! 560 ! Author : Allan Macleod 561 ! FORTRAN90 version by John Burkardt 562 ! 563 ! Reference: 564 ! Allan Macleod, Algorithm AS 245, 565 ! A Robust and Reliable Algorithm for the Logarithm of the Gamma Function, 566 ! Applied Statistics, 567 ! Volume 38, Number 2, 1989, pages 397-402. 568 ! 569 ! Parameters: 570 ! 571 ! Input, real ( kind = 8 ) XVALUE, the argument of the Gamma function. 572 ! 573 ! Output, integer ( kind = 4 ) IFAULT, error flag. 574 ! 0, no error occurred. 575 ! 1, XVALUE is less than or equal to 0. 576 ! 2, XVALUE is too big. 577 ! 578 ! Output, real ( kind = 8 ) ALNGAM, the logarithm of the gamma function of X. 579 !*****************************************************************************80 587 580 implicit none 588 581 … … 746 739 END FUNCTION alngam 747 740 741 748 742 REAL FUNCTION gamain( x, p, ifault ) 749 750 743 !*****************************************************************************80 751 744 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r9125 r9169 8 8 !! 3.4 ! 2011-05 (O. Aumont, C. Ethe) New parameterization of light limitation 9 9 !!---------------------------------------------------------------------- 10 !! p4z_prod : 11 !! p4z_prod_init : 12 !! p4z_prod_alloc : 10 !! p4z_prod : Compute the growth Rate of the two phytoplanktons groups 11 !! p4z_prod_init : Initialization of the parameters for growth 12 !! p4z_prod_alloc : Allocate variables for growth 13 13 !!---------------------------------------------------------------------- 14 USE oce_trc ! 15 USE trc ! 16 USE sms_pisces ! 17 USE p4zlim ! 18 USE prtctl_trc ! 19 USE iom ! 14 USE oce_trc ! shared variables between ocean and passive tracers 15 USE trc ! passive tracers common variables 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE p4zlim ! Co-limitations of differents nutrients 18 USE prtctl_trc ! print control for debugging 19 USE iom ! I/O manager 20 20 21 21 IMPLICIT NONE … … 26 26 PUBLIC p4z_prod_alloc 27 27 28 !! * Shared module variables 29 LOGICAL , PUBLIC :: ln_newprod !: 30 REAL(wp), PUBLIC :: pislopen !: 31 REAL(wp), PUBLIC :: pisloped !: 32 REAL(wp), PUBLIC :: xadap !: 33 REAL(wp), PUBLIC :: excretn !: 34 REAL(wp), PUBLIC :: excretd !: 35 REAL(wp), PUBLIC :: bresp !: 36 REAL(wp), PUBLIC :: chlcnm !: 37 REAL(wp), PUBLIC :: chlcdm !: 38 REAL(wp), PUBLIC :: chlcmin !: 39 REAL(wp), PUBLIC :: fecnm !: 40 REAL(wp), PUBLIC :: fecdm !: 41 REAL(wp), PUBLIC :: grosip !: 28 LOGICAL , PUBLIC :: ln_newprod !: 29 REAL(wp), PUBLIC :: pislopen !: 30 REAL(wp), PUBLIC :: pisloped !: 31 REAL(wp), PUBLIC :: xadap !: 32 REAL(wp), PUBLIC :: excretn !: 33 REAL(wp), PUBLIC :: excretd !: 34 REAL(wp), PUBLIC :: bresp !: 35 REAL(wp), PUBLIC :: chlcnm !: 36 REAL(wp), PUBLIC :: chlcdm !: 37 REAL(wp), PUBLIC :: chlcmin !: 38 REAL(wp), PUBLIC :: fecnm !: 39 REAL(wp), PUBLIC :: fecdm !: 40 REAL(wp), PUBLIC :: grosip !: 42 41 43 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: optimal production = f(temperature) … … 45 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatomee 46 45 47 REAL(wp) :: r1_rday !:1 / rday48 REAL(wp) :: texcretn !:1 - excretn49 REAL(wp) :: texcretd !:1 - excretd46 REAL(wp) :: r1_rday ! 1 / rday 47 REAL(wp) :: texcretn ! 1 - excretn 48 REAL(wp) :: texcretd ! 1 - excretd 50 49 51 50 !!---------------------------------------------------------------------- … … 65 64 !! ** Method : - ??? 66 65 !!--------------------------------------------------------------------- 67 INTEGER, INTENT(in) :: kt, knt66 INTEGER, INTENT(in) :: kt, knt ! 68 67 ! 69 68 INTEGER :: ji, jj, jk … … 475 474 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 476 475 ENDIF 477 !478 IF( ln_timing ) CALL timing_stop('p4z_prod')479 !476 ! 477 IF( ln_timing ) CALL timing_stop('p4z_prod') 478 ! 480 479 END SUBROUTINE p4z_prod 481 480 … … 492 491 !! ** input : Namelist nampisprod 493 492 !!---------------------------------------------------------------------- 494 INTEGER :: ios ! Local integer output status for namelist read493 INTEGER :: ios ! Local integer 495 494 ! 496 495 NAMELIST/namp4zprod/ pislopen, pisloped, xadap, ln_newprod, bresp, excretn, excretd, & 497 496 & chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 498 497 !!---------------------------------------------------------------------- 499 498 ! 499 IF(lwp) THEN ! control print 500 WRITE(numout,*) 501 WRITE(numout,*) 'p4z_prod_init : phytoplankton growth' 502 WRITE(numout,*) '~~~~~~~~~~~~~' 503 ENDIF 504 ! 500 505 REWIND( numnatp_ref ) ! Namelist nampisprod in reference namelist : Pisces phytoplankton production 501 506 READ ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 502 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist', lwp ) 503 507 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist', lwp ) 504 508 REWIND( numnatp_cfg ) ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 505 509 READ ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 506 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist', lwp )507 IF(lwm) WRITE 510 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist', lwp ) 511 IF(lwm) WRITE( numonp, namp4zprod ) 508 512 509 513 IF(lwp) THEN ! control print 510 WRITE(numout,*) ' ' 511 WRITE(numout,*) ' Namelist parameters for phytoplankton growth, namp4zprod' 512 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 513 WRITE(numout,*) ' Enable new parame. of production (T/F) ln_newprod =', ln_newprod 514 WRITE(numout,*) ' mean Si/C ratio grosip =', grosip 515 WRITE(numout,*) ' P-I slope pislopen =', pislopen 516 WRITE(numout,*) ' Acclimation factor to low light xadap =', xadap 517 WRITE(numout,*) ' excretion ratio of nanophytoplankton excretn =', excretn 518 WRITE(numout,*) ' excretion ratio of diatoms excretd =', excretd 514 WRITE(numout,*) ' Namelist : namp4zprod' 515 WRITE(numout,*) ' Enable new parame. of production (T/F) ln_newprod =', ln_newprod 516 WRITE(numout,*) ' mean Si/C ratio grosip =', grosip 517 WRITE(numout,*) ' P-I slope pislopen =', pislopen 518 WRITE(numout,*) ' Acclimation factor to low light xadap =', xadap 519 WRITE(numout,*) ' excretion ratio of nanophytoplankton excretn =', excretn 520 WRITE(numout,*) ' excretion ratio of diatoms excretd =', excretd 519 521 IF( ln_newprod ) THEN 520 WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp521 WRITE(numout,*) ' Maximum Chl/C in phytoplankton chlcmin =', chlcmin522 WRITE(numout,*) ' basal respiration in phytoplankton bresp =', bresp 523 WRITE(numout,*) ' Maximum Chl/C in phytoplankton chlcmin =', chlcmin 522 524 ENDIF 523 WRITE(numout,*) ' P-I slope for diatoms pisloped =', pisloped524 WRITE(numout,*) ' Minimum Chl/C in nanophytoplankton chlcnm =', chlcnm525 WRITE(numout,*) ' Minimum Chl/C in diatoms chlcdm =', chlcdm526 WRITE(numout,*) ' Maximum Fe/C in nanophytoplankton fecnm =', fecnm527 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm525 WRITE(numout,*) ' P-I slope for diatoms pisloped =', pisloped 526 WRITE(numout,*) ' Minimum Chl/C in nanophytoplankton chlcnm =', chlcnm 527 WRITE(numout,*) ' Minimum Chl/C in diatoms chlcdm =', chlcdm 528 WRITE(numout,*) ' Maximum Fe/C in nanophytoplankton fecnm =', fecnm 529 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 528 530 ENDIF 529 531 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r9125 r9169 29 29 PUBLIC p4z_rem_alloc 30 30 31 !! * Shared module variables 32 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC 33 REAL(wp), PUBLIC :: xremikn !: remineralisation rate of DON 34 REAL(wp), PUBLIC :: xremikp !: remineralisation rate of DOP 35 REAL(wp), PUBLIC :: xremik !: remineralisation rate of POC 36 REAL(wp), PUBLIC :: nitrif !: NH4 nitrification rate 37 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of POC 38 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of POC 39 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 40 REAL(wp), PUBLIC :: feratb !: Fe/C quota in bacteria 41 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacteria Fe/C 42 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 31 REAL(wp), PUBLIC :: xremikc !: remineralisation rate of DOC 32 REAL(wp), PUBLIC :: xremikn !: remineralisation rate of DON 33 REAL(wp), PUBLIC :: xremikp !: remineralisation rate of DOP 34 REAL(wp), PUBLIC :: xremik !: remineralisation rate of POC 35 REAL(wp), PUBLIC :: nitrif !: NH4 nitrification rate 36 REAL(wp), PUBLIC :: xsirem !: remineralisation rate of POC 37 REAL(wp), PUBLIC :: xsiremlab !: fast remineralisation rate of POC 38 REAL(wp), PUBLIC :: xsilab !: fraction of labile biogenic silica 39 REAL(wp), PUBLIC :: feratb !: Fe/C quota in bacteria 40 REAL(wp), PUBLIC :: xkferb !: Half-saturation constant for bacteria Fe/C 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr !: denitrification array 44 43 45 44 !!---------------------------------------------------------------------- … … 303 302 INTEGER :: ios ! Local integer output status for namelist read 304 303 !!---------------------------------------------------------------------- 305 304 ! 305 IF(lwp) THEN 306 WRITE(numout,*) 307 WRITE(numout,*) 'p4z_rem_init : Initialization of remineralization parameters' 308 WRITE(numout,*) '~~~~~~~~~~~~' 309 ENDIF 310 ! 306 311 REWIND( numnatp_ref ) ! Namelist nampisrem in reference namelist : Pisces remineralization 307 312 READ ( numnatp_ref, nampisrem, IOSTAT = ios, ERR = 901) 308 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisrem in reference namelist', lwp ) 309 313 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisrem in reference namelist', lwp ) 310 314 REWIND( numnatp_cfg ) ! Namelist nampisrem in configuration namelist : Pisces remineralization 311 315 READ ( numnatp_cfg, nampisrem, IOSTAT = ios, ERR = 902 ) 312 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisrem in configuration namelist', lwp )313 IF(lwm) WRITE 316 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisrem in configuration namelist', lwp ) 317 IF(lwm) WRITE( numonp, nampisrem ) 314 318 315 319 IF(lwp) THEN ! control print 316 WRITE(numout,*) ' ' 317 WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 318 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 320 WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 319 321 IF( ln_p4z ) THEN 320 WRITE(numout,*) ' remineralization rate of DOC xremik =', xremik322 WRITE(numout,*) ' remineralization rate of DOC xremik =', xremik 321 323 ELSE 322 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc323 WRITE(numout,*) ' remineralization rate of DON xremikn =', xremikn324 WRITE(numout,*) ' remineralization rate of DOP xremikp =', xremikp324 WRITE(numout,*) ' remineralization rate of DOC xremikc =', xremikc 325 WRITE(numout,*) ' remineralization rate of DON xremikn =', xremikn 326 WRITE(numout,*) ' remineralization rate of DOP xremikp =', xremikp 325 327 ENDIF 326 WRITE(numout,*) ' remineralization rate of Si xsirem =', xsirem327 WRITE(numout,*) ' fast remineralization rate of Si xsiremlab =', xsiremlab328 WRITE(numout,*) ' fraction of labile biogenic silica xsilab =', xsilab329 WRITE(numout,*) ' NH4 nitrification rate nitrif =', nitrif330 WRITE(numout,*) ' Bacterial Fe/C ratio feratb =', feratb331 WRITE(numout,*) ' Half-saturation constant for bact. Fe/C xkferb =', xkferb328 WRITE(numout,*) ' remineralization rate of Si xsirem =', xsirem 329 WRITE(numout,*) ' fast remineralization rate of Si xsiremlab =', xsiremlab 330 WRITE(numout,*) ' fraction of labile biogenic silica xsilab =', xsilab 331 WRITE(numout,*) ' NH4 nitrification rate nitrif =', nitrif 332 WRITE(numout,*) ' Bacterial Fe/C ratio feratb =', feratb 333 WRITE(numout,*) ' Half-saturation constant for bact. Fe/C xkferb =', xkferb 332 334 ENDIF 333 335 ! 334 denitr 336 denitr(:,:,:) = 0._wp 335 337 ! 336 338 END SUBROUTINE p4z_rem_init -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r9124 r9169 21 21 PUBLIC p4z_sbc_init 22 22 23 LOGICAL , PUBLIC :: ln_dust !: boolean for dust input from the atmosphere 24 LOGICAL , PUBLIC :: ln_solub !: boolean for variable solubility of atmospheric iron 25 LOGICAL , PUBLIC :: ln_river !: boolean for river input of nutrients 26 LOGICAL , PUBLIC :: ln_ndepo !: boolean for atmospheric deposition of N 27 LOGICAL , PUBLIC :: ln_ironsed !: boolean for Fe input from sediments 28 LOGICAL , PUBLIC :: ln_hydrofe !: boolean for Fe input from hydrothermal vents 29 LOGICAL , PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 30 REAL(wp), PUBLIC :: sedfeinput !: Coastal release of Iron 31 REAL(wp), PUBLIC :: dustsolub !: Solubility of the dust 32 REAL(wp), PUBLIC :: mfrac !: Mineral Content of the dust 33 REAL(wp), PUBLIC :: icefeinput !: Iron concentration in sea ice 34 REAL(wp), PUBLIC :: wdust !: Sinking speed of the dust 35 REAL(wp), PUBLIC :: nitrfix !: Nitrogen fixation rate 36 REAL(wp), PUBLIC :: diazolight !: Nitrogen fixation sensitivty to light 37 REAL(wp), PUBLIC :: concfediaz !: Fe half-saturation Cste for diazotrophs 38 REAL(wp) :: hratio !: Fe:3He ratio assumed for vent iron supply 39 REAL(wp), PUBLIC :: fep_rats !: Fep/Fer ratio from sed sources 40 REAL(wp), PUBLIC :: fep_rath !: Fep/Fer ratio from hydro sources 41 REAL(wp), PUBLIC :: lgw_rath !: Weak ligand ratio from hydro sources 42 43 44 LOGICAL , PUBLIC :: ll_sbc 45 46 LOGICAL :: ll_solub 23 LOGICAL , PUBLIC :: ln_dust !: boolean for dust input from the atmosphere 24 LOGICAL , PUBLIC :: ln_solub !: boolean for variable solubility of atmospheric iron 25 LOGICAL , PUBLIC :: ln_river !: boolean for river input of nutrients 26 LOGICAL , PUBLIC :: ln_ndepo !: boolean for atmospheric deposition of N 27 LOGICAL , PUBLIC :: ln_ironsed !: boolean for Fe input from sediments 28 LOGICAL , PUBLIC :: ln_hydrofe !: boolean for Fe input from hydrothermal vents 29 LOGICAL , PUBLIC :: ln_ironice !: boolean for Fe input from sea ice 30 REAL(wp), PUBLIC :: sedfeinput !: Coastal release of Iron 31 REAL(wp), PUBLIC :: dustsolub !: Solubility of the dust 32 REAL(wp), PUBLIC :: mfrac !: Mineral Content of the dust 33 REAL(wp), PUBLIC :: icefeinput !: Iron concentration in sea ice 34 REAL(wp), PUBLIC :: wdust !: Sinking speed of the dust 35 REAL(wp), PUBLIC :: nitrfix !: Nitrogen fixation rate 36 REAL(wp), PUBLIC :: diazolight !: Nitrogen fixation sensitivty to light 37 REAL(wp), PUBLIC :: concfediaz !: Fe half-saturation Cste for diazotrophs 38 REAL(wp) :: hratio !: Fe:3He ratio assumed for vent iron supply 39 REAL(wp), PUBLIC :: fep_rats !: Fep/Fer ratio from sed sources 40 REAL(wp), PUBLIC :: fep_rath !: Fep/Fer ratio from hydro sources 41 REAL(wp), PUBLIC :: lgw_rath !: Weak ligand ratio from hydro sources 42 43 LOGICAL , PUBLIC :: ll_sbc 44 LOGICAL :: ll_solub 47 45 48 46 INTEGER , PARAMETER :: jpriv = 7 !: Maximum number of river input fields … … 55 53 INTEGER , PARAMETER :: jr_dsi = 7 !: index of dissolved silicate 56 54 57 58 55 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_dust ! structure of input dust 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_solub 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_river ! structure of input riverdic56 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_solub ! structure of input dust 57 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_river ! structure of input riverdic 61 58 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_ndepo ! structure of input nitrogen deposition 62 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_ironsed ! structure of input iron from sediment 63 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_hydrofe ! structure of input iron from hydrothermal vents 64 61 65 INTEGER , PARAMETER :: nbtimes = 365 !:maximum number of times record in a file66 INTEGER :: ntimes_dust, ntimes_riv, ntimes_ndep! number of time steps in a file67 INTEGER :: ntimes_solub, ntimes_hydro! number of time steps in a file68 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dust, solub!: dust fields70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdic, rivalk!: river input fields71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdin, rivdip!: river input fields72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdon, rivdop!: river input fields73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdoc!: river input fields74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdsi!: river input fields75 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nitdep!: atmospheric N deposition76 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ironsed!: Coastal supply of iron77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hydrofe!: Hydrothermal vent supply of iron78 79 REAL(wp), PUBLIC :: sumdepsi, rivalkinput, rivdicinput, nitdepinput80 REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput62 INTEGER , PARAMETER :: nbtimes = 365 ! maximum number of times record in a file 63 INTEGER :: ntimes_dust, ntimes_riv, ntimes_ndep ! number of time steps in a file 64 INTEGER :: ntimes_solub, ntimes_hydro ! number of time steps in a file 65 66 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: dust , solub !: dust fields 67 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdic, rivalk !: river input fields 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdin, rivdip !: river input fields 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdon, rivdop !: river input fields 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdoc !: river input fields 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: rivdsi !: river input fields 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: nitdep !: atmospheric N deposition 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ironsed !: Coastal supply of iron 74 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hydrofe !: Hydrothermal vent supply of iron 75 76 REAL(wp), PUBLIC :: rivalkinput, rivdicinput, nitdepinput, sumdepsi 77 REAL(wp), PUBLIC :: rivdininput, rivdipinput, rivdsiinput 81 78 82 79 !! * Substitutions … … 100 97 !! 101 98 !!---------------------------------------------------------------------- 102 !! * arguments 103 INTEGER, INTENT( in ) :: kt ! ocean time step 104 105 !! * local declarations 106 INTEGER :: ji,jj 107 REAL(wp) :: zcoef, zyyss 99 INTEGER, INTENT(in) :: kt ! ocean time step 100 ! 101 INTEGER :: ji, jj 102 REAL(wp) :: zcoef, zyyss 108 103 !!--------------------------------------------------------------------- 109 104 ! 110 IF( ln_timing ) CALL timing_start('p4z_sbc')105 IF( ln_timing ) CALL timing_start('p4z_sbc') 111 106 ! 112 107 ! Compute dust at nit000 or only if there is more than 1 time record in dust file … … 114 109 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_dust > 1 ) ) THEN 115 110 CALL fld_read( kt, 1, sf_dust ) 116 IF( nn_ice_tr == -1 .AND. .NOT. ln_ironice ) THEN 117 dust(:,:) = sf_dust(1)%fnow(:,:,1) 118 ELSE 119 dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.0 - fr_i(:,:) ) 111 IF( nn_ice_tr == -1 .AND. .NOT.ln_ironice ) THEN ; dust(:,:) = sf_dust(1)%fnow(:,:,1) 112 ELSE ; dust(:,:) = sf_dust(1)%fnow(:,:,1) * ( 1.-fr_i(:,:) ) 120 113 ENDIF 121 114 ENDIF 122 115 ENDIF 123 116 ! 124 117 IF( ll_solub ) THEN 125 118 IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_solub > 1 ) ) THEN … … 205 198 !! 206 199 !!---------------------------------------------------------------------- 207 !208 200 INTEGER :: ji, jj, jk, jm, ifpr 209 201 INTEGER :: ii0, ii1, ij0, ij1 … … 224 216 TYPE(FLD_N) :: sn_riverdoc, sn_riverdic, sn_riverdsi ! informations about the fields to be read 225 217 TYPE(FLD_N) :: sn_riverdin, sn_riverdon, sn_riverdip, sn_riverdop 226 ! 218 !! 227 219 NAMELIST/nampissbc/cn_dir, sn_dust, sn_solub, sn_riverdic, sn_riverdoc, sn_riverdin, sn_riverdon, & 228 220 & sn_riverdip, sn_riverdop, sn_riverdsi, sn_ndepo, sn_ironsed, sn_hydrofe, & … … 232 224 !!---------------------------------------------------------------------- 233 225 ! 226 IF(lwp) THEN 227 WRITE(numout,*) 228 WRITE(numout,*) 'p4z_sbc_init : initialization of the external sources of nutrients ' 229 WRITE(numout,*) '~~~~~~~~~~~~ ' 230 ENDIF 234 231 ! !* set file information 235 232 REWIND( numnatp_ref ) ! Namelist nampissbc in reference namelist : Pisces external sources of nutrients 236 233 READ ( numnatp_ref, nampissbc, IOSTAT = ios, ERR = 901) 237 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in reference namelist', lwp ) 238 234 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampissbc in reference namelist', lwp ) 239 235 REWIND( numnatp_cfg ) ! Namelist nampissbc in configuration namelist : Pisces external sources of nutrients 240 236 READ ( numnatp_cfg, nampissbc, IOSTAT = ios, ERR = 902 ) 241 902 IF( ios /= 0 )CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp )237 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampissbc in configuration namelist', lwp ) 242 238 IF(lwm) WRITE ( numonp, nampissbc ) 243 239 244 IF ( ( nn_ice_tr >= 0 ) .AND. ln_ironice ) THEN 240 IF(lwp) THEN 241 WRITE(numout,*) ' Namelist : nampissbc ' 242 WRITE(numout,*) ' dust input from the atmosphere ln_dust = ', ln_dust 243 WRITE(numout,*) ' Variable solubility of iron input ln_solub = ', ln_solub 244 WRITE(numout,*) ' river input of nutrients ln_river = ', ln_river 245 WRITE(numout,*) ' atmospheric deposition of n ln_ndepo = ', ln_ndepo 246 WRITE(numout,*) ' Fe input from sediments ln_ironsed = ', ln_ironsed 247 WRITE(numout,*) ' Fe input from seaice ln_ironice = ', ln_ironice 248 WRITE(numout,*) ' fe input from hydrothermal vents ln_hydrofe = ', ln_hydrofe 249 WRITE(numout,*) ' coastal release of iron sedfeinput = ', sedfeinput 250 WRITE(numout,*) ' solubility of the dust dustsolub = ', dustsolub 251 WRITE(numout,*) ' Mineral Fe content of the dust mfrac = ', mfrac 252 WRITE(numout,*) ' Iron concentration in sea ice icefeinput = ', icefeinput 253 WRITE(numout,*) ' sinking speed of the dust wdust = ', wdust 254 WRITE(numout,*) ' nitrogen fixation rate nitrfix = ', nitrfix 255 WRITE(numout,*) ' nitrogen fixation sensitivty to light diazolight = ', diazolight 256 WRITE(numout,*) ' Fe half-saturation cste for diazotrophs concfediaz = ', concfediaz 257 WRITE(numout,*) ' Fe to 3He ratio assumed for vent iron supply hratio = ', hratio 258 IF( ln_ligand ) THEN 259 WRITE(numout,*) ' Fep/Fer ratio from sed sources fep_rats = ', fep_rats 260 WRITE(numout,*) ' Fep/Fer ratio from sed hydro sources fep_rath = ', fep_rath 261 WRITE(numout,*) ' Weak ligand ratio from sed hydro sources lgw_rath = ', lgw_rath 262 ENDIF 263 END IF 264 265 IF( nn_ice_tr >= 0 .AND. ln_ironice ) THEN 245 266 IF(lwp) THEN 246 WRITE(numout,*) ' ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 247 WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 248 WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 249 ln_ironice = .FALSE. 250 ENDIF 251 ENDIF 252 253 IF(lwp) THEN 254 WRITE(numout,*) ' ' 255 WRITE(numout,*) ' namelist : nampissbc ' 256 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~ ' 257 WRITE(numout,*) ' dust input from the atmosphere ln_dust = ', ln_dust 258 WRITE(numout,*) ' Variable solubility of iron input ln_solub = ', ln_solub 259 WRITE(numout,*) ' river input of nutrients ln_river = ', ln_river 260 WRITE(numout,*) ' atmospheric deposition of n ln_ndepo = ', ln_ndepo 261 WRITE(numout,*) ' Fe input from sediments ln_ironsed = ', ln_ironsed 262 WRITE(numout,*) ' Fe input from seaice ln_ironice = ', ln_ironice 263 WRITE(numout,*) ' fe input from hydrothermal vents ln_hydrofe = ', ln_hydrofe 264 WRITE(numout,*) ' coastal release of iron sedfeinput = ', sedfeinput 265 WRITE(numout,*) ' solubility of the dust dustsolub = ', dustsolub 266 WRITE(numout,*) ' Mineral Fe content of the dust mfrac = ', mfrac 267 WRITE(numout,*) ' Iron concentration in sea ice icefeinput = ', icefeinput 268 WRITE(numout,*) ' sinking speed of the dust wdust = ', wdust 269 WRITE(numout,*) ' nitrogen fixation rate nitrfix = ', nitrfix 270 WRITE(numout,*) ' nitrogen fixation sensitivty to light diazolight = ', diazolight 271 WRITE(numout,*) ' fe half-saturation cste for diazotrophs concfediaz = ', concfediaz 272 WRITE(numout,*) ' Fe to 3He ratio assumed for vent iron supply hratio = ', hratio 273 IF( ln_ligand ) THEN 274 WRITE(numout,*) ' Fep/Fer ratio from sed sources fep_rats = ', fep_rats 275 WRITE(numout,*) ' Fep/Fer ratio from sed hydro sources fep_rath = ', fep_rath 276 WRITE(numout,*) ' Weak ligand ratio from sed hydro sources lgw_rath = ', lgw_rath 277 ENDIF 278 END IF 279 280 IF( ln_dust .OR. ln_river .OR. ln_ndepo ) THEN ; ll_sbc = .TRUE. 281 ELSE ; ll_sbc = .FALSE. 282 ENDIF 283 284 IF( ln_dust .AND. ln_solub ) THEN ; ll_solub = .TRUE. 285 ELSE ; ll_solub = .FALSE. 267 WRITE(numout,*) ' ==>>> ln_ironice incompatible with nn_ice_tr = ', nn_ice_tr 268 WRITE(numout,*) ' Specify your sea ice iron concentration in nampisice instead ' 269 WRITE(numout,*) ' ln_ironice is forced to .FALSE. ' 270 ENDIF 271 ln_ironice = .FALSE. 272 ENDIF 273 274 IF( ln_dust .OR. ln_river .OR. ln_ndepo ) THEN ; ll_sbc = .TRUE. 275 ELSE ; ll_sbc = .FALSE. 276 ENDIF 277 278 IF( ln_dust .AND. ln_solub ) THEN ; ll_solub = .TRUE. 279 ELSE ; ll_solub = .FALSE. 286 280 ENDIF 287 281 … … 322 316 DO jm = 1, ntimes_dust 323 317 sumdepsi = sumdepsi + glob_sum( zdust(:,:,jm) * e1e2t(:,:) * tmask(:,:,1) * ztimes_dust ) 324 END DO318 END DO 325 319 sumdepsi = sumdepsi / ( nyear_len(1) * rday ) * 12. * 8.8 * 0.075 * mfrac / 28.1 326 320 DEALLOCATE( zdust) … … 335 329 IF( ll_solub ) THEN 336 330 ! 337 IF(lwp) WRITE(numout,*) ' initialize variable solubility of Fe '338 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'331 IF(lwp) WRITE(numout,*) 332 IF(lwp) WRITE(numout,*) ' ==>>> ll_solub=T , initialize variable solubility of Fe ' 339 333 ! 340 334 ALLOCATE( solub(jpi,jpj) ) ! allocation … … 356 350 IF( ln_river ) THEN 357 351 ! 358 slf_river(jr_dic) = sn_riverdic ; slf_river(jr_doc) = sn_riverdoc ;slf_river(jr_din) = sn_riverdin359 slf_river(jr_don) = sn_riverdon ; slf_river(jr_dip) = sn_riverdip ;slf_river(jr_dop) = sn_riverdop352 slf_river(jr_dic) = sn_riverdic ; slf_river(jr_doc) = sn_riverdoc ; slf_river(jr_din) = sn_riverdin 353 slf_river(jr_don) = sn_riverdon ; slf_river(jr_dip) = sn_riverdip ; slf_river(jr_dop) = sn_riverdop 360 354 slf_river(jr_dsi) = sn_riverdsi 361 355 ! … … 363 357 IF( ln_p5z ) ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj), rivdoc(jpi,jpj) ) 364 358 ! 365 ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 ) 366 rivinput(:) = 0. 0359 ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 ) !* allocate and fill sf_river (forcing structure) with sn_river_ 360 rivinput(:) = 0._wp 367 361 368 362 IF( ierr1 > 0 ) CALL ctl_stop( 'STOP', 'p4z_sed_init: unable to allocate sf_irver structure' ) … … 409 403 IF( ln_ndepo ) THEN 410 404 ! 411 IF(lwp) WRITE(numout,*) ' initialize the nutrient input by dust from ndeposition.orca.nc'412 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'405 IF(lwp) WRITE(numout,*) 406 IF(lwp) WRITE(numout,*) ' ==>>> ln_ndepo=T , initialize the nutrient input by dust from NetCDF file' 413 407 ! 414 408 ALLOCATE( nitdep(jpi,jpj) ) ! allocation … … 446 440 IF( ln_ironsed ) THEN 447 441 ! 448 IF(lwp) WRITE(numout,*) ' computation of an island mask to enhance coastal supply of iron'449 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'442 IF(lwp) WRITE(numout,*) 443 IF(lwp) WRITE(numout,*) ' ==>>> ln_ironsed=T , computation of an island mask to enhance coastal supply of iron' 450 444 ! 451 445 ALLOCATE( ironsed(jpi,jpj,jpk) ) ! allocation … … 458 452 ik50 = 5 ! last level where depth less than 50 m 459 453 DO jk = jpkm1, 1, -1 460 IF( gdept_1d(jk) > 50. ) ik50 = jk - 1454 IF( gdept_1d(jk) > 50. ) ik50 = jk - 1 461 455 END DO 462 IF (lwp) WRITE(numout,*) 463 IF (lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 464 IF (lwp) WRITE(numout,*) 456 IF(lwp) WRITE(numout,*) 457 IF(lwp) WRITE(numout,*) ' Level corresponding to 50m depth ', ik50,' ', gdept_1d(ik50+1) 465 458 DO jk = 1, ik50 466 459 DO jj = 2, jpjm1 … … 499 492 IF( ln_hydrofe ) THEN 500 493 ! 501 IF(lwp) WRITE(numout,*) ' Input of iron from hydrothermal vents '502 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'494 IF(lwp) WRITE(numout,*) 495 IF(lwp) WRITE(numout,*) ' ==>>> ln_hydrofe=T , Input of iron from hydrothermal vents' 503 496 ! 504 497 ALLOCATE( hydrofe(jpi,jpj,jpk) ) ! allocation … … 521 514 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 522 515 WRITE(numout,*) ' N Supply : ', rivdininput*rno3*1E3/1E12*14.,' TgN/yr' 523 WRITE(numout,*) ' Si Supply : ', rivdsiinput*1E3/1E12*28.1 ,' TgSi/yr'516 WRITE(numout,*) ' Si Supply : ', rivdsiinput*1E3/1E12*28.1 ,' TgSi/yr' 524 517 WRITE(numout,*) ' P Supply : ', rivdipinput*1E3*po4r/1E12*31.,' TgP/yr' 525 WRITE(numout,*) ' Alk Supply : ', rivalkinput*1E3/1E12 ,' Teq/yr'526 WRITE(numout,*) ' DIC Supply : ', rivdicinput*1E3*12./1E12 ,'TgC/yr'518 WRITE(numout,*) ' Alk Supply : ', rivalkinput*1E3/1E12 ,' Teq/yr' 519 WRITE(numout,*) ' DIC Supply : ', rivdicinput*1E3*12./1E12 ,' TgC/yr' 527 520 WRITE(numout,*) 528 521 WRITE(numout,*) ' Total input of elements from atmospheric supply' -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r9125 r9169 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 8 !!---------------------------------------------------------------------- 9 !! p4z sms :Time loop of passive tracers sms9 !! p4z_sms : Time loop of passive tracers sms 10 10 !!---------------------------------------------------------------------- 11 USE oce_trc ! 12 USE trc ! 13 USE trcdta 14 USE sms_pisces ! 15 USE p4zbio ! 16 USE p4zche ! 17 USE p4zlys ! 18 USE p4zflx ! 19 USE p4zsbc ! 20 USE p4zsed ! 21 USE p4zint ! 22 USE p4zrem ! 23 USE iom ! 24 USE trd_oce ! 25 USE trdtrc ! 26 USE sedmodel ! 27 USE prtctl_trc ! 11 USE oce_trc ! shared variables between ocean and passive tracers 12 USE trc ! passive tracers common variables 13 USE trcdta ! 14 USE sms_pisces ! PISCES Source Minus Sink variables 15 USE p4zbio ! Biological model 16 USE p4zche ! Chemical model 17 USE p4zlys ! Calcite saturation 18 USE p4zflx ! Gas exchange 19 USE p4zsbc ! External source of nutrients 20 USE p4zsed ! Sedimentation 21 USE p4zint ! time interpolation 22 USE p4zrem ! remineralisation 23 USE iom ! I/O manager 24 USE trd_oce ! Ocean trends variables 25 USE trdtrc ! TOP trends variables 26 USE sedmodel ! Sediment model 27 USE prtctl_trc ! print control for debugging 28 28 29 29 IMPLICIT NONE … … 33 33 PUBLIC p4z_sms ! called in p4zsms.F90 34 34 35 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 36 REAL(wp) :: xfact1, xfact2, xfact3 37 INTEGER :: numco2, numnut, numnit !: logical unit for co2 budget 38 39 !!* Array used to indicate negative tracer values 40 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr !: ??? 35 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 37 REAL(wp) :: xfact1, xfact2, xfact3 38 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr ! Array used to indicate negative tracer values 41 40 42 41 !!---------------------------------------------------------------------- … … 45 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 45 !!---------------------------------------------------------------------- 47 48 46 CONTAINS 49 47 … … 197 195 NAMELIST/nampismass/ ln_check_mass 198 196 !!---------------------------------------------------------------------- 197 ! 198 IF(lwp) THEN 199 WRITE(numout,*) 200 WRITE(numout,*) 'p4z_sms_init : PISCES initialization' 201 WRITE(numout,*) '~~~~~~~~~~~~' 202 ENDIF 199 203 200 204 REWIND( numnatp_ref ) ! Namelist nampisbio in reference namelist : Pisces variables 201 205 READ ( numnatp_ref, nampisbio, IOSTAT = ios, ERR = 901) 202 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in reference namelist', lwp ) 203 206 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisbio in reference namelist', lwp ) 204 207 REWIND( numnatp_cfg ) ! Namelist nampisbio in configuration namelist : Pisces variables 205 208 READ ( numnatp_cfg, nampisbio, IOSTAT = ios, ERR = 902 ) 206 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisbio in configuration namelist', lwp )207 IF(lwm) WRITE 208 209 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisbio in configuration namelist', lwp ) 210 IF(lwm) WRITE( numonp, nampisbio ) 211 ! 209 212 IF(lwp) THEN ! control print 210 WRITE(numout,*) ' Namelist : nampisbio'211 WRITE(numout,*) ' frequence pour la biologie nrdttrc=', nrdttrc212 WRITE(numout,*) ' POC sinking speed wsbio=', wsbio213 WRITE(numout,*) ' half saturation constant for mortality xkmort=', xkmort213 WRITE(numout,*) ' Namelist : nampisbio' 214 WRITE(numout,*) ' frequency for the biology nrdttrc =', nrdttrc 215 WRITE(numout,*) ' POC sinking speed wsbio =', wsbio 216 WRITE(numout,*) ' half saturation constant for mortality xkmort =', xkmort 214 217 IF( ln_p5z ) THEN 215 WRITE(numout,*) ' N/C in zooplankton no3rat3=', no3rat3216 WRITE(numout,*) ' P/C in zooplankton po4rat3=', po4rat3217 ENDIF 218 WRITE(numout,*) ' Fe/C in zooplankton ferat3=', ferat3219 WRITE(numout,*) ' Big particles sinking speed wsbio2=', wsbio2220 WRITE(numout,*) ' Big particles maximum sinking speed wsbio2max=', wsbio2max221 WRITE(numout,*) ' Big particles sinking speed length scale wsbio2scale =', wsbio2scale222 WRITE(numout,*) ' Maximum number of iterations for POC niter1max=', niter1max223 WRITE(numout,*) ' Maximum number of iterations for GOC niter2max=', niter2max218 WRITE(numout,*) ' N/C in zooplankton no3rat3 =', no3rat3 219 WRITE(numout,*) ' P/C in zooplankton po4rat3 =', po4rat3 220 ENDIF 221 WRITE(numout,*) ' Fe/C in zooplankton ferat3 =', ferat3 222 WRITE(numout,*) ' Big particles sinking speed wsbio2 =', wsbio2 223 WRITE(numout,*) ' Big particles maximum sinking speed wsbio2max =', wsbio2max 224 WRITE(numout,*) ' Big particles sinking speed length scale wsbio2scale =', wsbio2scale 225 WRITE(numout,*) ' Maximum number of iterations for POC niter1max =', niter1max 226 WRITE(numout,*) ' Maximum number of iterations for GOC niter2max =', niter2max 224 227 IF( ln_ligand ) THEN 225 WRITE(numout,*) ' FeP sinking speedwfep =', wfep228 WRITE(numout,*) ' FeP sinking speed wfep =', wfep 226 229 IF( ln_p4z ) THEN 227 WRITE(numout,*) ' Phyto ligand production per unit docldocp =', ldocp228 WRITE(numout,*) ' Zoo ligand production per unit docldocz =', ldocz229 WRITE(numout,*) ' Proportional loss of ligands due to Fe uptakelthet =', lthet230 WRITE(numout,*) ' Phyto ligand production per unit doc ldocp =', ldocp 231 WRITE(numout,*) ' Zoo ligand production per unit doc ldocz =', ldocz 232 WRITE(numout,*) ' Proportional loss of ligands due to Fe uptake lthet =', lthet 230 233 ENDIF 231 234 ENDIF … … 235 238 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping 236 239 READ ( numnatp_ref, nampisdmp, IOSTAT = ios, ERR = 905) 237 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in reference namelist', lwp ) 238 240 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdmp in reference namelist', lwp ) 239 241 REWIND( numnatp_cfg ) ! Namelist nampisdmp in configuration namelist : Pisces damping 240 242 READ ( numnatp_cfg, nampisdmp, IOSTAT = ios, ERR = 906 ) 241 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisdmp in configuration namelist', lwp )242 IF(lwm) WRITE 243 243 906 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampisdmp in configuration namelist', lwp ) 244 IF(lwm) WRITE( numonp, nampisdmp ) 245 ! 244 246 IF(lwp) THEN ! control print 245 247 WRITE(numout,*) 246 WRITE(numout,*) ' Namelist : nampisdmp' 247 WRITE(numout,*) ' Relaxation of tracer to glodap mean value ln_pisdmp =', ln_pisdmp 248 WRITE(numout,*) ' Frequency of Relaxation nn_pisdmp =', nn_pisdmp 249 WRITE(numout,*) ' ' 248 WRITE(numout,*) ' Namelist : nampisdmp --- relaxation to GLODAP' 249 WRITE(numout,*) ' Relaxation of tracer to glodap mean value ln_pisdmp =', ln_pisdmp 250 WRITE(numout,*) ' Frequency of Relaxation nn_pisdmp =', nn_pisdmp 250 251 ENDIF 251 252 252 253 REWIND( numnatp_ref ) ! Namelist nampismass in reference namelist : Pisces mass conservation check 253 254 READ ( numnatp_ref, nampismass, IOSTAT = ios, ERR = 907) 254 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in reference namelist', lwp ) 255 255 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismass in reference namelist', lwp ) 256 256 REWIND( numnatp_cfg ) ! Namelist nampismass in configuration namelist : Pisces mass conservation check 257 257 READ ( numnatp_cfg, nampismass, IOSTAT = ios, ERR = 908 ) 258 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismass in configuration namelist', lwp )259 IF(lwm) WRITE 258 908 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismass in configuration namelist', lwp ) 259 IF(lwm) WRITE( numonp, nampismass ) 260 260 261 261 IF(lwp) THEN ! control print 262 WRITE(numout,*) ' ' 263 WRITE(numout,*) ' Namelist parameter for mass conservation checking' 264 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 265 WRITE(numout,*) ' Flag to check mass conservation of NO3/Si/TALK ln_check_mass = ', ln_check_mass 262 WRITE(numout,*) 263 WRITE(numout,*) ' Namelist : nampismass --- mass conservation checking' 264 WRITE(numout,*) ' Flag to check mass conservation of NO3/Si/TALK ln_check_mass = ', ln_check_mass 266 265 ENDIF 267 266 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r7753 r9169 37 37 !! ** Purpose : Initialisation of the PISCES biochemical model 38 38 !!---------------------------------------------------------------------- 39 40 39 ! 41 40 CALL trc_nam_pisces … … 46 45 47 46 END SUBROUTINE trc_ini_pisces 47 48 48 49 49 SUBROUTINE p4z_ini … … 53 53 !! ** Purpose : Initialisation of the PISCES biochemical model 54 54 !!---------------------------------------------------------------------- 55 !56 55 USE p4zsms ! Main P4Z routine 57 56 USE p4zche ! Chemical model … … 76 75 USE p5zmeso ! Sources and sinks of mesozooplankton 77 76 USE p5zmort ! Mortality terms for phytoplankton 78 79 ! 80 REAL(wp), SAVE :: sco2 = 2.312e-3_wp 81 REAL(wp), SAVE :: alka0 = 2.426e-3_wp 82 REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp 83 REAL(wp), SAVE :: po4 = 2.165e-6_wp 84 REAL(wp), SAVE :: bioma0 = 1.000e-8_wp 85 REAL(wp), SAVE :: silic1 = 91.51e-6_wp 86 REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp 77 ! 78 REAL(wp), SAVE :: sco2 = 2.312e-3_wp 79 REAL(wp), SAVE :: alka0 = 2.426e-3_wp 80 REAL(wp), SAVE :: oxyg0 = 177.6e-6_wp 81 REAL(wp), SAVE :: po4 = 2.165e-6_wp 82 REAL(wp), SAVE :: bioma0 = 1.000e-8_wp 83 REAL(wp), SAVE :: silic1 = 91.51e-6_wp 84 REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp 87 85 ! 88 86 INTEGER :: ji, jj, jk, jn, ierr … … 90 88 REAL(wp) :: ztmas, ztmas1 91 89 CHARACTER(len = 20) :: cltra 92 93 !!---------------------------------------------------------------------- 94 90 !!---------------------------------------------------------------------- 91 ! 95 92 IF(lwp) THEN 96 93 WRITE(numout,*) 97 94 IF( ln_p4z ) THEN 98 WRITE(numout,*) ' p4z_ini : PISCES biochemical model initialisation' 95 WRITE(numout,*) 'p4z_ini : PISCES biochemical model initialisation' 96 WRITE(numout,*) '~~~~~~~' 99 97 ELSE 100 WRITE(numout,*) ' 101 WRITE(numout,*) ' 98 WRITE(numout,*) 'p5z_ini : PISCES biochemical model initialisation' 99 WRITE(numout,*) '~~~~~~~ With variable stoichiometry' 102 100 ENDIF 103 WRITE(numout,*) ' ~~~~~~~~~~~~~~'104 101 ENDIF 105 102 ! … … 170 167 IF( cltra == 'LGW' ) jplgw = jn !: Weak ligands 171 168 IF( cltra == 'LFe' ) jpfep = jn !: Fe nanoparticle 172 END DO169 END DO 173 170 174 171 CALL p4z_sms_init ! Maint routine 175 ! ! Time-step172 ! 176 173 177 174 ! Set biological ratios … … 275 272 276 273 IF(lwp) WRITE(numout,*) 277 IF(lwp) WRITE(numout,*) ' Initialization of PISCES tracers done'274 IF(lwp) WRITE(numout,*) ' ==>>> Initialization of PISCES tracers done' 278 275 IF(lwp) WRITE(numout,*) 279 276 ! 280 277 END SUBROUTINE p4z_ini 278 281 279 282 280 SUBROUTINE p2z_ini … … 298 296 IF(lwp) WRITE(numout,*) 299 297 IF(lwp) WRITE(numout,*) ' p2z_ini : LOBSTER biochemical model initialisation' 300 IF(lwp) WRITE(numout,*) ' ~~~~~~~ ~~~~~~~'298 IF(lwp) WRITE(numout,*) ' ~~~~~~~' 301 299 302 300 ierr = sms_pisces_alloc() … … 346 344 ! 347 345 IF(lwp) WRITE(numout,*) 348 IF(lwp) WRITE(numout,*) ' Initialization of LOBSTER tracers done'346 IF(lwp) WRITE(numout,*) ' ==>>> Initialization of LOBSTER tracers done' 349 347 IF(lwp) WRITE(numout,*) 350 348 ! -
branches/2017/dev_merge_2017/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90
r9124 r9169 9 9 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) from trcnam.pisces.h90 10 10 !!---------------------------------------------------------------------- 11 !! trc_nam_pisces 11 !! trc_nam_pisces : PISCES model namelist read 12 12 !!---------------------------------------------------------------------- 13 13 USE oce_trc ! Ocean variables … … 40 40 !!---------------------------------------------------------------------- 41 41 INTEGER :: jl, jn 42 INTEGER :: ios, ioptio ! Local integer output status for namelist read43 CHARACTER(LEN=20) 42 INTEGER :: ios, ioptio ! Local integer 43 CHARACTER(LEN=20):: clname 44 44 !! 45 45 NAMELIST/nampismod/ln_p2z, ln_p4z, ln_p5z, ln_ligand … … 49 49 clname = 'namelist_pisces' 50 50 51 IF(lwp) WRITE(numout,*) ' 52 IF(lwp) WRITE(numout,*) ' 51 IF(lwp) WRITE(numout,*) 'trc_nam_pisces : read PISCES namelist' 52 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~' 53 53 CALL ctl_opn( numnatp_ref, TRIM( clname )//'_ref', 'OLD' , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 54 54 CALL ctl_opn( numnatp_cfg, TRIM( clname )//'_cfg', 'OLD' , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 55 55 IF(lwm) CALL ctl_opn( numonp , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 56 56 ! 57 58 57 REWIND( numnatp_ref ) ! Namelist nampisbio in reference namelist : Pisces variables 59 58 READ ( numnatp_ref, nampismod, IOSTAT = ios, ERR = 901) 60 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in reference namelist', lwp ) 61 59 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in reference namelist', lwp ) 62 60 REWIND( numnatp_cfg ) ! Namelist nampisbio in configuration namelist : Pisces variables 63 61 READ ( numnatp_cfg, nampismod, IOSTAT = ios, ERR = 902 ) 64 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in configuration namelist', lwp ) 65 IF(lwm) WRITE ( numonp, nampismod ) 66 67 IF(lwp) THEN ! control print 68 WRITE(numout,*) ' ' 69 WRITE(numout,*) ' Flag to use LOBSTER model ln_p2z = ', ln_p2z 70 WRITE(numout,*) ' Flag to use PISCES standard model ln_p4z = ', ln_p4z 71 WRITE(numout,*) ' Flag to use PISCES quota model ln_p5z = ', ln_p5z 72 WRITE(numout,*) ' Flag to ligand ln_ligand = ', ln_ligand 73 WRITE(numout,*) ' ' 62 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampismod in configuration namelist', lwp ) 63 IF(lwm) WRITE( numonp, nampismod ) 64 ! 65 IF(lwp) THEN ! control print 66 WRITE(numout,*) ' Namelist : nampismod ' 67 WRITE(numout,*) ' Flag to use LOBSTER model ln_p2z = ', ln_p2z 68 WRITE(numout,*) ' Flag to use PISCES standard model ln_p4z = ', ln_p4z 69 WRITE(numout,*) ' Flag to use PISCES quota model ln_p5z = ', ln_p5z 70 WRITE(numout,*) ' Flag to ligand ln_ligand = ', ln_ligand 74 71 ENDIF 75 72 ! 76 73 IF(lwp) THEN ! control print 77 WRITE(numout,*) ' ' 78 IF( ln_p5z ) WRITE(numout,*) ' PISCES QUOTA model is used' 79 IF( ln_p4z ) WRITE(numout,*) ' PISCES STANDARD model is used' 80 IF( ln_p2z ) WRITE(numout,*) ' LOBSTER model is used' 81 IF( ln_ligand ) WRITE(numout,*) ' Compute remineralization/dissolution of organic ligands' 82 WRITE(numout,*) ' ' 74 WRITE(numout,*) 75 IF( ln_p5z ) WRITE(numout,*) ' ==>>> PISCES QUOTA model is used' 76 IF( ln_p4z ) WRITE(numout,*) ' ==>>> PISCES STANDARD model is used' 77 IF( ln_p2z ) WRITE(numout,*) ' ==>>> LOBSTER model is used' 78 IF( ln_ligand ) WRITE(numout,*) ' ==>>> Compute remineralization/dissolution of organic ligands' 83 79 ENDIF 84 80
Note: See TracChangeset
for help on using the changeset viewer.