Changeset 9450
- Timestamp:
- 2018-03-30T18:08:29+02:00 (7 years ago)
- Location:
- branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90
r7753 r9450 20 20 USE p4zmicro ! Sources and sinks of microzooplankton 21 21 USE p4zmeso ! Sources and sinks of mesozooplankton 22 USE p5zlim ! Co-limitations of differents nutrients23 22 USE p5zprod ! Growth rate of the 2 phyto groups 24 23 USE p5zmort ! Mortality terms for phytoplankton -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r7753 r9450 73 73 REAL(wp) :: zaggliga, zaggligb 74 74 REAL(wp) :: dissol, zligco 75 REAL(wp) :: zrfact2 75 76 CHARACTER (len=25) :: charout 76 77 REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip 77 78 REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 79 REAL(wp), POINTER, DIMENSION(:,:,:) :: zcoll3d, zscav3d, zlcoll3d 78 80 REAL(wp), POINTER, DIMENSION(:,: ) :: zstrn, zstrn2 79 81 !!--------------------------------------------------------------------- … … 83 85 ! Allocate temporary workspace 84 86 CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 87 CALL wrk_alloc( jpi, jpj, jpk, zcoll3d, zscav3d ) 88 IF( ln_ligand ) THEN 89 CALL wrk_alloc( jpi, jpj, jpk, zlcoll3d ) 90 ENDIF 85 91 zFe3 (:,:,:) = 0. 86 92 zFeL1(:,:,:) = 0. … … 301 307 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 302 308 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 309 zscav3d(ji,jj,jk) = zscave 310 zcoll3d(ji,jj,jk) = zaggdfea + zaggdfeb 303 311 ! 304 312 END DO … … 321 329 ! 322 330 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 323 zligco = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) ) 331 IF ( ln_fecolloid) THEN 332 zligco = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) ) 333 ELSE 334 zligco = 0.5 * trn(ji,jj,jk,jplgw) 335 ENDIF 324 336 zaggliga = zlam1a * xstep * zligco 325 337 zaggligb = zlam1b * xstep * zligco 326 338 tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 327 339 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 340 zlcoll3d(ji,jj,jk) = zaggliga + zaggligb 328 341 END DO 329 342 END DO … … 340 353 IF( lk_iomput ) THEN 341 354 IF( knt == nrdttrc ) THEN 355 zrfact2 = 1.e3 * rfact2r ! conversion from mol/L/timestep into mol/m3/s 342 356 IF( iom_use("Fe3") ) CALL iom_put("Fe3" , zFe3 (:,:,:) * tmask(:,:,:) ) ! Fe3+ 343 357 IF( iom_use("FeL1") ) CALL iom_put("FeL1" , zFeL1 (:,:,:) * tmask(:,:,:) ) ! FeL1 … … 345 359 IF( iom_use("Totlig") ) CALL iom_put("Totlig" , ztotlig(:,:,:) * tmask(:,:,:) ) ! TL 346 360 IF( iom_use("Biron") ) CALL iom_put("Biron" , biron (:,:,:) * 1e9 * tmask(:,:,:) ) ! biron 361 IF( iom_use("FESCAV") ) CALL iom_put("FESCAV" , zscav3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 362 IF( iom_use("FECOLL") ) CALL iom_put("FECOLL" , zcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 363 IF( iom_use("LGWCOLL")) CALL iom_put("LGWCOLL", zlcoll3d(:,:,:) * 1e9 * tmask(:,:,:) * zrfact2 ) 347 364 IF( ln_fechem ) THEN 348 365 IF( iom_use("Fe2") ) CALL iom_put("Fe2" , zFe2 (:,:,:) * tmask(:,:,:) ) ! Fe2+ … … 361 378 ! 362 379 CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 380 CALL wrk_dealloc( jpi, jpj, jpk, zscav3d, zcoll3d ) 363 381 IF( ln_fechem ) THEN 364 382 CALL wrk_dealloc( jpi, jpj, zstrn, zstrn2 ) 365 383 CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 384 ENDIF 385 IF ( ln_ligand ) THEN 386 CALL wrk_dealloc( jpi, jpj, jpk, zlcoll3d ) 366 387 ENDIF 367 388 ! -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zligand.F90
r7646 r9450 13 13 USE sms_pisces ! PISCES Source Minus Sink variables 14 14 USE prtctl_trc ! print control for debugging 15 USE iom ! I/O manager 15 16 16 17 IMPLICIT NONE … … 47 48 INTEGER :: ji, jj, jk 48 49 REAL(wp) :: zlgwp, zlgwpr, zlgwr, zlablgw, zrfepa, zfepr 50 REAL(wp), POINTER, DIMENSION(:,:,:) :: zligrem, zligpr, zrligprod 49 51 CHARACTER (len=25) :: charout 50 52 !!--------------------------------------------------------------------- 51 53 ! 52 54 IF( nn_timing == 1 ) CALL timing_start('p4z_ligand') 55 ! 56 CALL wrk_alloc( jpi, jpj, jpk, zligrem, zligpr, zrligprod ) 53 57 ! 54 58 ! ------------------------------------------------------------------ … … 68 72 zlgwpr = prlgw * xstep * etot(ji,jj,jk) * trb(ji,jj,jk,jplgw) * (1. - fr_i(ji,jj)) 69 73 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zlgwp - zlgwr - zlgwpr 74 zligrem(ji,jj,jk) = zlgwr 75 zligpr(ji,jj,jk) = zlgwpr 76 zrligprod(ji,jj,jk) = zlgwp 70 77 END DO 71 78 END DO … … 90 97 END DO 91 98 END DO 99 100 ! Output of some diagnostics variables 101 ! --------------------------------- 102 IF( lk_iomput ) THEN 103 IF( knt == nrdttrc ) THEN 104 IF( iom_use( "LIGREM" ) ) CALL iom_put("LIGREM" , zligrem(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 105 IF( iom_use( "LIGPR" ) ) CALL iom_put("LIGPR" , zligpr(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 106 IF( iom_use( "LIGPRODR" ) ) CALL iom_put("LPRODR" , zrligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ) 107 ENDIF 108 ENDIF 109 ! 110 CALL wrk_dealloc( jpi, jpj, jpk, zligrem, zligpr, zrligprod ) 92 111 93 112 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90
r8533 r9450 20 20 21 21 PUBLIC p4z_lim 22 PUBLIC p5z_lim 22 23 PUBLIC p4z_lim_init 24 PUBLIC p5z_lim_init 23 25 PUBLIC p4z_lim_alloc 24 26 25 27 !! * Shared module variables 26 28 REAL(wp), PUBLIC :: concnno3 !: NO3, PO4 half saturation 29 REAL(wp), PUBLIC :: concpno3 !: NO3, PO4 half saturation 27 30 REAL(wp), PUBLIC :: concdno3 !: Phosphate half saturation for diatoms 28 31 REAL(wp), PUBLIC :: concnnh4 !: NH4 half saturation for phyto 32 REAL(wp), PUBLIC :: concpnh4 !: NH4 half saturation for phyto 29 33 REAL(wp), PUBLIC :: concdnh4 !: NH4 half saturation for diatoms 34 REAL(wp), PUBLIC :: concnpo4 !: NH4 half saturation for diatoms 35 REAL(wp), PUBLIC :: concppo4 !: NH4 half saturation for diatoms 36 REAL(wp), PUBLIC :: concdpo4 !: NH4 half saturation for diatoms 30 37 REAL(wp), PUBLIC :: concnfer !: Iron half saturation for nanophyto 38 REAL(wp), PUBLIC :: concpfer !: Iron half saturation for nanophyto 31 39 REAL(wp), PUBLIC :: concdfer !: Iron half saturation for diatoms 32 40 REAL(wp), PUBLIC :: concbno3 !: NO3 half saturation for bacteria 33 41 REAL(wp), PUBLIC :: concbnh4 !: NH4 half saturation for bacteria 42 REAL(wp), PUBLIC :: concbpo4 !: PO4 half saturation for bacteria 34 43 REAL(wp), PUBLIC :: xsizedia !: Minimum size criteria for diatoms 44 REAL(wp), PUBLIC :: xsizepic !: Minimum size criteria for diatoms 35 45 REAL(wp), PUBLIC :: xsizephy !: Minimum size criteria for nanophyto 36 46 REAL(wp), PUBLIC :: xsizern !: Size ratio for nanophytoplankton 47 REAL(wp), PUBLIC :: xsizerp !: Size ratio for nanophytoplankton 37 48 REAL(wp), PUBLIC :: xsizerd !: Size ratio for diatoms 38 49 REAL(wp), PUBLIC :: xksi1 !: half saturation constant for Si uptake … … 41 52 REAL(wp), PUBLIC :: concbfe !: Fe half saturation for bacteria 42 53 REAL(wp), PUBLIC :: oxymin !: half saturation constant for anoxia 54 REAL(wp), PUBLIC :: qfnopt !: optimal Fe quota for nanophyto 55 REAL(wp), PUBLIC :: qfpopt !: optimal Fe quota for nanophyto 56 REAL(wp), PUBLIC :: qfdopt !: optimal Fe quota for diatoms 57 REAL(wp), PUBLIC :: qnnmin !: optimal Fe quota for diatoms 58 REAL(wp), PUBLIC :: qnnmax !: optimal Fe quota for diatoms 59 REAL(wp), PUBLIC :: qpnmin !: optimal Fe quota for diatoms 60 REAL(wp), PUBLIC :: qpnmax !: optimal Fe quota for diatoms 61 REAL(wp), PUBLIC :: qnpmin !: optimal Fe quota for diatoms 62 REAL(wp), PUBLIC :: qnpmax !: optimal Fe quota for diatoms 63 REAL(wp), PUBLIC :: qppmin !: optimal Fe quota for diatoms 64 REAL(wp), PUBLIC :: qppmax !: optimal Fe quota for diatoms 65 REAL(wp), PUBLIC :: qndmin !: optimal Fe quota for diatoms 66 REAL(wp), PUBLIC :: qndmax !: optimal Fe quota for diatoms 67 REAL(wp), PUBLIC :: qpdmin !: optimal Fe quota for diatoms 68 REAL(wp), PUBLIC :: qpdmax !: optimal Fe quota for diatoms 69 REAL(wp), PUBLIC :: qfnmax !: optimal Fe quota for diatoms 70 REAL(wp), PUBLIC :: qfpmax !: optimal Fe quota for diatoms 71 REAL(wp), PUBLIC :: qfdmax !: optimal Fe quota for diatoms 43 72 REAL(wp), PUBLIC :: qnfelim !: optimal Fe quota for nanophyto 44 73 REAL(wp), PUBLIC :: qdfelim !: optimal Fe quota for diatoms 45 74 REAL(wp), PUBLIC :: caco3r !: mean rainratio 75 REAL(wp), PUBLIC :: zpsinh4 76 REAL(wp), PUBLIC :: zpsino3 77 REAL(wp), PUBLIC :: zpsiuptk 46 78 47 79 !!* Phytoplankton limitation terms 48 80 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanono3 !: ??? 81 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicono3 !: ??? 49 82 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatno3 !: ??? 50 83 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanonh4 !: ??? 84 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpiconh4 !: ??? 51 85 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatnh4 !: ??? 52 86 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanopo4 !: ??? 87 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicopo4 !: ??? 53 88 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatpo4 !: ??? 89 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanodop !: ??? 90 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicodop !: ??? 91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatdop !: ??? 92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnanofer !: ??? 93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpicofer !: ??? 94 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiatfer !: ??? 54 95 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimphy !: ??? 96 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpic !: ??? 55 97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdia !: ??? 56 98 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimnfe !: ??? 99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimpfe !: ??? 57 100 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimdfe !: ??? 58 101 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi !: ??? 102 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimsi2 !: ??? 59 103 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbac !: ?? 60 104 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xlimbacl !: ?? 61 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concdfe !: ??? 62 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: concnfe !: ??? 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvnuptk 108 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvpuptk 109 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fvduptk 110 111 !!* Allometric variations of the quotas 112 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmin !: ??? 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnnmax !: ??? 114 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmin !: ??? 115 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpnmax !: ??? 116 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmin !: ??? 117 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqnpmax !: ??? 118 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmin !: ??? 119 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqppmax !: ??? 120 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmin !: ??? 121 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqndmax !: ??? 122 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmin !: ??? 123 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xqpdmax !: ? 63 124 64 125 ! Coefficient for iron limitation 65 REAL(wp) :: xcoef1 = 0.0016 / 55.85126 REAL(wp) :: xcoef1 = 0.00167 / 55.85 66 127 REAL(wp) :: xcoef2 = 1.21E-5 * 14. / 55.85 / 7.625 * 0.5 * 1.5 67 128 REAL(wp) :: xcoef3 = 1.15E-4 * 14. / 55.85 / 7.625 * 0.5 … … 227 288 ! 228 289 END SUBROUTINE p4z_lim 290 291 292 SUBROUTINE p5z_lim( kt, knt ) 293 !!--------------------------------------------------------------------- 294 !! *** ROUTINE p5z_lim *** 295 !! 296 !! ** Purpose : Compute the co-limitations by the various nutrients 297 !! for the various phytoplankton species 298 !! 299 !! ** Method : - ??? 300 !!--------------------------------------------------------------------- 301 ! 302 INTEGER, INTENT(in) :: kt, knt 303 ! 304 INTEGER :: ji, jj, jk 305 REAL(wp) :: zlim1, zlim2, zlim3, zlim4, zno3, zferlim 306 REAL(wp) :: z1_trndia, z1_trnpic, z1_trnphy, ztem1, ztem2, zetot1 307 REAL(wp) :: zratio, zration, zratiof, znutlim, zfalim 308 REAL(wp) :: zconc1d, zconc1dnh4, zconc0n, zconc0nnh4, zconc0npo4, zconc0dpo4 309 REAL(wp) :: zconc0p, zconc0pnh4, zconc0ppo4, zconcpfe, zconcnfe, zconcdfe 310 REAL(wp) :: fanano, fananop, fananof, fadiat, fadiatp, fadiatf 311 REAL(wp) :: fapico, fapicop, fapicof 312 REAL(wp) :: zrpho, zrass, zcoef, zfuptk, zratchl 313 REAL(wp) :: zfvn, zfvp, zfvf, zsizen, zsizep, zsized, znanochl, zpicochl, zdiatchl 314 REAL(wp) :: zqfemn, zqfemp, zqfemd, zbactno3, zbactnh4 315 !!--------------------------------------------------------------------- 316 ! 317 !!--------------------------------------------------------------------- 318 ! 319 IF( nn_timing == 1 ) CALL timing_start('p5z_lim') 320 ! 321 zratchl = 6.0 322 ! 323 DO jk = 1, jpkm1 324 DO jj = 1, jpj 325 DO ji = 1, jpi 326 ! 327 ! Tuning of the iron concentration to a minimum level that is set to the detection limit 328 !------------------------------------- 329 zno3 = trb(ji,jj,jk,jpno3) / 40.e-6 330 zferlim = MAX( 3e-11 * zno3 * zno3, 5e-12 ) 331 zferlim = MIN( zferlim, 7e-11 ) 332 trb(ji,jj,jk,jpfer) = MAX( trb(ji,jj,jk,jpfer), zferlim ) 333 334 ! Computation of the mean relative size of each community 335 ! ------------------------------------------------------- 336 z1_trnphy = 1. / ( trb(ji,jj,jk,jpphy) + rtrn ) 337 z1_trnpic = 1. / ( trb(ji,jj,jk,jppic) + rtrn ) 338 z1_trndia = 1. / ( trb(ji,jj,jk,jpdia) + rtrn ) 339 znanochl = trb(ji,jj,jk,jpnch) * z1_trnphy 340 zpicochl = trb(ji,jj,jk,jppch) * z1_trnpic 341 zdiatchl = trb(ji,jj,jk,jpdch) * z1_trndia 342 343 ! Computation of a variable Ks for iron on diatoms taking into account 344 ! that increasing biomass is made of generally bigger cells 345 !------------------------------------------------ 346 zsized = sized(ji,jj,jk)**0.81 347 zconcdfe = concdfer * zsized 348 zconc1d = concdno3 * zsized 349 zconc1dnh4 = concdnh4 * zsized 350 zconc0dpo4 = concdpo4 * zsized 351 352 zsizep = 1. 353 zconcpfe = concpfer * zsizep 354 zconc0p = concpno3 * zsizep 355 zconc0pnh4 = concpnh4 * zsizep 356 zconc0ppo4 = concppo4 * zsizep 357 358 zsizen = 1. 359 zconcnfe = concnfer * zsizen 360 zconc0n = concnno3 * zsizen 361 zconc0nnh4 = concnnh4 * zsizen 362 zconc0npo4 = concnpo4 * zsizen 363 364 ! Allometric variations of the minimum and maximum quotas 365 ! From Talmy et al. (2014) and Maranon et al. (2013) 366 ! ------------------------------------------------------- 367 xqnnmin(ji,jj,jk) = qnnmin 368 xqnnmax(ji,jj,jk) = qnnmax 369 xqndmin(ji,jj,jk) = qndmin * sized(ji,jj,jk)**(-0.27) 370 xqndmax(ji,jj,jk) = qndmax 371 xqnpmin(ji,jj,jk) = qnpmin 372 xqnpmax(ji,jj,jk) = qnpmax 373 374 ! Computation of the optimal allocation parameters 375 ! Based on the different papers by Pahlow et al., and Smith et al. 376 ! ----------------------------------------------------------------- 377 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0nnh4, & 378 & trb(ji,jj,jk,jpno3) / zconc0n) 379 fanano = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 380 znutlim = trb(ji,jj,jk,jppo4) / zconc0npo4 381 fananop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 382 znutlim = biron(ji,jj,jk) / zconcnfe 383 fananof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 384 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc0pnh4, & 385 & trb(ji,jj,jk,jpno3) / zconc0p) 386 fapico = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 387 znutlim = trb(ji,jj,jk,jppo4) / zconc0ppo4 388 fapicop = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 389 znutlim = biron(ji,jj,jk) / zconcpfe 390 fapicof = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 391 znutlim = MAX( trb(ji,jj,jk,jpnh4) / zconc1dnh4, & 392 & trb(ji,jj,jk,jpno3) / zconc1d ) 393 fadiat = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 394 znutlim = trb(ji,jj,jk,jppo4) / zconc0dpo4 395 fadiatp = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 396 znutlim = biron(ji,jj,jk) / zconcdfe 397 fadiatf = MAX(0.01, MIN(0.99, 1. / ( SQRT(znutlim) + 1.) ) ) 398 ! 399 ! Michaelis-Menten Limitation term for nutrients Small bacteria 400 ! ------------------------------------------------------------- 401 zbactnh4 = trb(ji,jj,jk,jpnh4) / ( concbnh4 + trb(ji,jj,jk,jpnh4) ) 402 zbactno3 = trb(ji,jj,jk,jpno3) / ( concbno3 + trb(ji,jj,jk,jpno3) ) * (1. - zbactnh4) 403 ! 404 zlim1 = zbactno3 + zbactnh4 405 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concbpo4) 406 zlim3 = biron(ji,jj,jk) / ( concbfe + biron(ji,jj,jk) ) 407 zlim4 = trb(ji,jj,jk,jpdoc) / ( xkdoc + trb(ji,jj,jk,jpdoc) ) 408 xlimbacl(ji,jj,jk) = MIN( zlim1, zlim2, zlim3 ) 409 xlimbac (ji,jj,jk) = xlimbacl(ji,jj,jk) * zlim4 410 ! 411 ! Michaelis-Menten Limitation term for nutrients Small flagellates 412 ! ----------------------------------------------- 413 zfalim = (1.-fanano) / fanano 414 xnanonh4(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0nnh4 + trb(ji,jj,jk,jpnh4) ) 415 xnanono3(ji,jj,jk) = (1. - fanano) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0n + trb(ji,jj,jk,jpno3) ) & 416 & * (1. - xnanonh4(ji,jj,jk)) 417 ! 418 zfalim = (1.-fananop) / fananop 419 xnanopo4(ji,jj,jk) = (1. - fananop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0npo4 ) 420 xnanodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 421 & * ( 1.0 - xnanopo4(ji,jj,jk) ) 422 xnanodop(ji,jj,jk) = 0. 423 ! 424 zfalim = (1.-fananof) / fananof 425 xnanofer(ji,jj,jk) = (1. - fananof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcnfe ) 426 ! 427 zratiof = trb(ji,jj,jk,jpnfe) * z1_trnphy 428 zqfemn = xcoef1 * znanochl + xcoef2 + xcoef3 * xnanono3(ji,jj,jk) 429 ! 430 zration = trb(ji,jj,jk,jpnph) * z1_trnphy 431 zration = MIN(xqnnmax(ji,jj,jk), MAX( 2. * xqnnmin(ji,jj,jk), zration )) 432 fvnuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnnmin(ji,jj,jk) / (zration + rtrn) & 433 & * MAX(0., (1. - zratchl * znanochl / 12. ) ) 434 ! 435 zlim1 = max(0., (zration - 2. * xqnnmin(ji,jj,jk) ) & 436 & / (xqnnmax(ji,jj,jk) - 2. * xqnnmin(ji,jj,jk) ) ) * xqnnmax(ji,jj,jk) & 437 & / (zration + rtrn) 438 zlim3 = MAX( 0.,( zratiof - zqfemn ) / qfnopt ) 439 xlimnfe(ji,jj,jk) = MIN( 1., zlim3 ) 440 xlimphy(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 441 ! 442 ! Michaelis-Menten Limitation term for nutrients picophytoplankton 443 ! ---------------------------------------------------------------- 444 zfalim = (1.-fapico) / fapico 445 xpiconh4(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc0pnh4 + trb(ji,jj,jk,jpnh4) ) 446 xpicono3(ji,jj,jk) = (1. - fapico) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc0p + trb(ji,jj,jk,jpno3) ) & 447 & * (1. - xpiconh4(ji,jj,jk)) 448 ! 449 zfalim = (1.-fapicop) / fapicop 450 xpicopo4(ji,jj,jk) = (1. - fapicop) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0ppo4 ) 451 xpicodop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 452 & * ( 1.0 - xpicopo4(ji,jj,jk) ) 453 xpicodop(ji,jj,jk) = 0. 454 ! 455 zfalim = (1.-fapicof) / fapicof 456 xpicofer(ji,jj,jk) = (1. - fapicof) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcpfe ) 457 ! 458 zratiof = trb(ji,jj,jk,jppfe) * z1_trnpic 459 zqfemp = xcoef1 * zpicochl + xcoef2 + xcoef3 * xpicono3(ji,jj,jk) 460 ! 461 zration = trb(ji,jj,jk,jpnpi) * z1_trnpic 462 zration = MIN(xqnpmax(ji,jj,jk), MAX( 2. * xqnpmin(ji,jj,jk), zration )) 463 fvpuptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqnpmin(ji,jj,jk) / (zration + rtrn) & 464 & * MAX(0., (1. - zratchl * zpicochl / 12. ) ) 465 ! 466 zlim1 = max(0., (zration - 2. * xqnpmin(ji,jj,jk) ) & 467 & / (xqnpmax(ji,jj,jk) - 2. * xqnpmin(ji,jj,jk) ) ) * xqnpmax(ji,jj,jk) & 468 & / (zration + rtrn) 469 zlim3 = MAX( 0.,( zratiof - zqfemp ) / qfpopt ) 470 xlimpfe(ji,jj,jk) = MIN( 1., zlim3 ) 471 xlimpic(ji,jj,jk) = MIN( 1., zlim1, zlim3 ) 472 ! 473 ! Michaelis-Menten Limitation term for nutrients Diatoms 474 ! ------------------------------------------------------ 475 zfalim = (1.-fadiat) / fadiat 476 xdiatnh4(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpnh4) / ( zfalim * zconc1dnh4 + trb(ji,jj,jk,jpnh4) ) 477 xdiatno3(ji,jj,jk) = (1. - fadiat) * trb(ji,jj,jk,jpno3) / ( zfalim * zconc1d + trb(ji,jj,jk,jpno3) ) & 478 & * (1. - xdiatnh4(ji,jj,jk)) 479 ! 480 zfalim = (1.-fadiatp) / fadiatp 481 xdiatpo4(ji,jj,jk) = (1. - fadiatp) * trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + zfalim * zconc0dpo4 ) 482 xdiatdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdop) + xkdoc ) & 483 & * ( 1.0 - xdiatpo4(ji,jj,jk) ) 484 xdiatdop(ji,jj,jk) = 0. 485 ! 486 zfalim = (1.-fadiatf) / fadiatf 487 xdiatfer(ji,jj,jk) = (1. - fadiatf) * biron(ji,jj,jk) / ( biron(ji,jj,jk) + zfalim * zconcdfe ) 488 ! 489 zratiof = trb(ji,jj,jk,jpdfe) * z1_trndia 490 zqfemd = xcoef1 * zdiatchl + xcoef2 + xcoef3 * xdiatno3(ji,jj,jk) 491 ! 492 zration = trb(ji,jj,jk,jpndi) * z1_trndia 493 zration = MIN(xqndmax(ji,jj,jk), MAX( 2. * xqndmin(ji,jj,jk), zration )) 494 fvduptk(ji,jj,jk) = 1. / zpsiuptk * rno3 * 2. * xqndmin(ji,jj,jk) / (zration + rtrn) & 495 & * MAX(0., (1. - zratchl * zdiatchl / 12. ) ) 496 ! 497 zlim1 = max(0., (zration - 2. * xqndmin(ji,jj,jk) ) & 498 & / (xqndmax(ji,jj,jk) - 2. * xqndmin(ji,jj,jk) ) ) & 499 & * xqndmax(ji,jj,jk) / (zration + rtrn) 500 zlim3 = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi(ji,jj) ) 501 zlim4 = MAX( 0., ( zratiof - zqfemd ) / qfdopt ) 502 xlimdfe(ji,jj,jk) = MIN( 1., zlim4 ) 503 xlimdia(ji,jj,jk) = MIN( 1., zlim1, zlim3, zlim4 ) 504 xlimsi(ji,jj,jk) = MIN( 1., zlim3, zlim4 ) 505 xlimsi2(ji,jj,jk) = MIN( 1., zlim1, zlim4 ) 506 END DO 507 END DO 508 END DO 509 ! 510 ! Compute the phosphorus quota values. It is based on Litchmann et al., 2004 and Daines et al, 2013. 511 ! The relative contribution of three fonctional pools are computed: light harvesting apparatus, 512 ! nutrient uptake pool and assembly machinery. DNA is assumed to represent 1% of the dry mass of 513 ! phytoplankton (see Daines et al., 2013). 514 ! -------------------------------------------------------------------------------------------------- 515 DO jk = 1, jpkm1 516 DO jj = 1, jpj 517 DO ji = 1, jpi 518 ! Size estimation of nanophytoplankton 519 ! ------------------------------------ 520 zfvn = zpsiuptk / rno3 * fvnuptk(ji,jj,jk) 521 sizen(ji,jj,jk) = MAX(1., MIN(xsizern, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 522 523 ! N/P ratio of nanophytoplankton 524 ! ------------------------------ 525 zfuptk = 0.23 * zfvn 526 zrpho = 2.24 * trb(ji,jj,jk,jpnch) / ( trb(ji,jj,jk,jpnph) * rno3 * 15. + rtrn ) 527 zrass = 1. - 0.2 - zrpho - zfuptk 528 xqpnmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. + 0.13 529 xqpnmax(ji,jj,jk) = xqpnmax(ji,jj,jk) * trb(ji,jj,jk,jpnph) / ( trb(ji,jj,jk,jpphy) + rtrn ) 530 xqpnmin(ji,jj,jk) = qpnmin 531 532 ! Size estimation of picophytoplankton 533 ! ------------------------------------ 534 zfvn = zpsiuptk / rno3 * fvpuptk(ji,jj,jk) 535 sizep(ji,jj,jk) = MAX(1., MIN(xsizerp, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 536 537 ! N/P ratio of picophytoplankton 538 ! ------------------------------ 539 zfuptk = 0.35 * zfvn 540 zrpho = 2.24 * trb(ji,jj,jk,jppch) / ( trb(ji,jj,jk,jpnpi) * rno3 * 15. + rtrn ) 541 zrass = 1. - 0.4 - zrpho - zfuptk 542 xqppmax(ji,jj,jk) = (zrpho + zfuptk) * 0.0128 * 16. + zrass * 1./ 10.9 * 16. + 0.13 543 xqppmax(ji,jj,jk) = xqppmax(ji,jj,jk) * trb(ji,jj,jk,jpnpi) / ( trb(ji,jj,jk,jppic) + rtrn ) 544 xqppmin(ji,jj,jk) = qppmin 545 546 ! Size estimation of diatoms 547 ! -------------------------- 548 zfvn = zpsiuptk / rno3 * fvduptk(ji,jj,jk) 549 sized(ji,jj,jk) = MAX(1., MIN(xsizerd, 1.0 / ( MAX(rtrn, zfvn) ) ) ) 550 ! zcoef = trb(ji,jj,jk,jpdia) - MIN(xsizedia, trb(ji,jj,jk,jpdia) ) 551 ! sized(ji,jj,jk) = 1. + xsizerd * zcoef *1E6 / ( 1. + zcoef * 1E6 ) 552 553 ! N/P ratio of diatoms 554 ! -------------------- 555 zfuptk = 0.2 * zfvn 556 zrpho = 2.24 * trb(ji,jj,jk,jpdch) / ( trb(ji,jj,jk,jpndi) * rno3 * 15. + rtrn ) 557 zrass = 1. - 0.2 - zrpho - zfuptk 558 xqpdmax(ji,jj,jk) = ( zfuptk + zrpho ) * 0.0128 * 16. + zrass * 1./ 7.2 * 16. + 0.13 559 xqpdmax(ji,jj,jk) = xqpdmax(ji,jj,jk) * trb(ji,jj,jk,jpndi) / ( trb(ji,jj,jk,jpdia) + rtrn ) 560 xqpdmin(ji,jj,jk) = qpdmin * sized(ji,jj,jk)**(-0.27) 561 562 END DO 563 END DO 564 END DO 565 566 ! Compute the fraction of nanophytoplankton that is made of calcifiers 567 ! -------------------------------------------------------------------- 568 DO jk = 1, jpkm1 569 DO jj = 1, jpj 570 DO ji = 1, jpi 571 zlim1 = trb(ji,jj,jk,jpnh4) / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) + trb(ji,jj,jk,jpno3) & 572 & / ( trb(ji,jj,jk,jpno3) + concnno3 ) * ( 1.0 - trb(ji,jj,jk,jpnh4) & 573 & / ( trb(ji,jj,jk,jpnh4) + concnnh4 ) ) 574 zlim2 = trb(ji,jj,jk,jppo4) / ( trb(ji,jj,jk,jppo4) + concnpo4 ) 575 zlim3 = trb(ji,jj,jk,jpfer) / ( trb(ji,jj,jk,jpfer) + 1.E-10 ) 576 ztem1 = MAX( 0., tsn(ji,jj,jk,jp_tem) ) 577 ztem2 = tsn(ji,jj,jk,jp_tem) - 10. 578 zetot1 = MAX( 0., etot(ji,jj,jk) - 1.) / ( 4. + etot(ji,jj,jk) ) * 20. / ( 20. + etot(ji,jj,jk) ) 579 580 ! xfracal(ji,jj,jk) = caco3r * MIN( zlim1, zlim2, zlim3 ) & 581 xfracal(ji,jj,jk) = caco3r * xlimphy(ji,jj,jk) & 582 & * ztem1 / ( 1. + ztem1 ) * MAX( 1., trb(ji,jj,jk,jpphy)*1E6 ) & 583 & * ( 1. + EXP(-ztem2 * ztem2 / 25. ) ) & 584 & * zetot1 * MIN( 1., 50. / ( hmld(ji,jj) + rtrn ) ) 585 xfracal(ji,jj,jk) = MAX( 0.02, MIN( 0.8 , xfracal(ji,jj,jk) ) ) 586 END DO 587 END DO 588 END DO 589 ! 590 DO jk = 1, jpkm1 591 DO jj = 1, jpj 592 DO ji = 1, jpi 593 ! denitrification factor computed from O2 levels 594 nitrfac(ji,jj,jk) = MAX( 0.e0, 0.4 * ( 6.e-6 - trb(ji,jj,jk,jpoxy) ) & 595 & / ( oxymin + trb(ji,jj,jk,jpoxy) ) ) 596 nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 597 END DO 598 END DO 599 END DO 600 ! 601 IF( lk_iomput .AND. knt == nrdttrc ) THEN ! save output diagnostics 602 IF( iom_use( "xfracal" ) ) CALL iom_put( "xfracal", xfracal(:,:,:) * tmask(:,:,:) ) ! euphotic layer deptht 603 IF( iom_use( "LNnut" ) ) CALL iom_put( "LNnut" , xlimphy(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 604 IF( iom_use( "LPnut" ) ) CALL iom_put( "LPnut" , xlimpic(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 605 IF( iom_use( "LDnut" ) ) CALL iom_put( "LDnut" , xlimdia(:,:,:) * tmask(:,:,:) ) ! Nutrient limitation term 606 IF( iom_use( "LNFe" ) ) CALL iom_put( "LNFe" , xlimnfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 607 IF( iom_use( "LPFe" ) ) CALL iom_put( "LPFe" , xlimpfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 608 IF( iom_use( "LDFe" ) ) CALL iom_put( "LDFe" , xlimdfe(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 609 IF( iom_use( "SIZEN" ) ) CALL iom_put( "SIZEN" , sizen(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 610 IF( iom_use( "SIZEP" ) ) CALL iom_put( "SIZEP" , sizep(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 611 IF( iom_use( "SIZED" ) ) CALL iom_put( "SIZED" , sized(:,:,:) * tmask(:,:,:) ) ! Iron limitation term 612 ENDIF 613 ! 614 IF( nn_timing == 1 ) CALL timing_stop('p5z_lim') 615 ! 616 END SUBROUTINE p5z_lim 229 617 230 618 SUBROUTINE p4z_lim_init … … 286 674 END SUBROUTINE p4z_lim_init 287 675 676 SUBROUTINE p5z_lim_init 677 678 !!---------------------------------------------------------------------- 679 !! *** ROUTINE p5z_lim_init *** 680 !! 681 !! ** Purpose : Initialization of nutrient limitation parameters 682 !! 683 !! ** Method : Read the nampislim and nampisquota namelists and check 684 !! the parameters called at the first timestep (nittrc000) 685 !! 686 !! ** input : Namelist nampislim 687 !! 688 !!---------------------------------------------------------------------- 689 690 NAMELIST/namp5zlim/ concnno3, concpno3, concdno3, concnnh4, concpnh4, concdnh4, & 691 & concnfer, concpfer, concdfer, concbfe, concnpo4, concppo4, & 692 & concdpo4, concbno3, concbnh4, concbpo4, xsizedia, xsizepic, & 693 & xsizephy, xsizern, xsizerp, xsizerd, xksi1, xksi2, xkdoc, & 694 & caco3r, oxymin 695 696 NAMELIST/namp5zquota/ qnnmin, qnnmax, qpnmin, qpnmax, qnpmin, qnpmax, qppmin, & 697 & qppmax, qndmin, qndmax, qpdmin, qpdmax, qfnmax, qfpmax, qfdmax, & 698 & qfnopt, qfpopt, qfdopt 699 700 701 INTEGER :: ios ! Local integer output status for namelist read 702 703 REWIND( numnatp_ref ) ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 704 READ ( numnatp_ref, namp5zlim, IOSTAT = ios, ERR = 901) 705 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist', lwp ) 706 707 REWIND( numnatp_cfg ) ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters 708 READ ( numnatp_cfg, namp5zlim, IOSTAT = ios, ERR = 902 ) 709 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist', lwp ) 710 IF(lwm) WRITE ( numonp, namp5zlim ) 711 712 IF(lwp) THEN ! control print 713 WRITE(numout,*) ' ' 714 WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zlim' 715 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 716 WRITE(numout,*) ' mean rainratio caco3r = ', caco3r 717 WRITE(numout,*) ' NO3 half saturation of nanophyto concnno3 = ', concnno3 718 WRITE(numout,*) ' NO3 half saturation of picophyto concpno3 = ', concpno3 719 WRITE(numout,*) ' NO3 half saturation of diatoms concdno3 = ', concdno3 720 WRITE(numout,*) ' NH4 half saturation for phyto concnnh4 = ', concnnh4 721 WRITE(numout,*) ' NH4 half saturation for pico concpnh4 = ', concpnh4 722 WRITE(numout,*) ' NH4 half saturation for diatoms concdnh4 = ', concdnh4 723 WRITE(numout,*) ' PO4 half saturation for phyto concnpo4 = ', concnpo4 724 WRITE(numout,*) ' PO4 half saturation for pico concppo4 = ', concppo4 725 WRITE(numout,*) ' PO4 half saturation for diatoms concdpo4 = ', concdpo4 726 WRITE(numout,*) ' half saturation constant for Si uptake xksi1 = ', xksi1 727 WRITE(numout,*) ' half saturation constant for Si/C xksi2 = ', xksi2 728 WRITE(numout,*) ' half-sat. of DOC remineralization xkdoc = ', xkdoc 729 WRITE(numout,*) ' Iron half saturation for nanophyto concnfer = ', concnfer 730 WRITE(numout,*) ' Iron half saturation for picophyto concpfer = ', concpfer 731 WRITE(numout,*) ' Iron half saturation for diatoms concdfer = ', concdfer 732 WRITE(numout,*) ' size ratio for nanophytoplankton xsizern = ', xsizern 733 WRITE(numout,*) ' size ratio for picophytoplankton xsizerp = ', xsizerp 734 WRITE(numout,*) ' size ratio for diatoms xsizerd = ', xsizerd 735 WRITE(numout,*) ' NO3 half saturation of bacteria concbno3 = ', concbno3 736 WRITE(numout,*) ' NH4 half saturation for bacteria concbnh4 = ', concbnh4 737 WRITE(numout,*) ' Minimum size criteria for diatoms xsizedia = ', xsizedia 738 WRITE(numout,*) ' Minimum size criteria for picophyto xsizepic = ', xsizepic 739 WRITE(numout,*) ' Minimum size criteria for nanophyto xsizephy = ', xsizephy 740 WRITE(numout,*) ' Fe half saturation for bacteria concbfe = ', concbfe 741 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =' , oxymin 742 ENDIF 743 744 REWIND( numnatp_ref ) ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 745 READ ( numnatp_ref, namp5zquota, IOSTAT = ios, ERR = 903) 746 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in reference namelist', lwp ) 747 748 REWIND( numnatp_cfg ) ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters 749 READ ( numnatp_cfg, namp5zquota, IOSTAT = ios, ERR = 904 ) 750 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisquota in configuration namelist', lwp ) 751 IF(lwm) WRITE ( numonp, namp5zquota ) 752 753 IF(lwp) THEN ! control print 754 WRITE(numout,*) ' ' 755 WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp5zquota' 756 WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 757 WRITE(numout,*) ' optimal Fe quota for nano. qfnopt = ', qfnopt 758 WRITE(numout,*) ' optimal Fe quota for pico. qfpopt = ', qfpopt 759 WRITE(numout,*) ' Optimal Fe quota for diatoms qfdopt = ', qfdopt 760 WRITE(numout,*) ' Minimal N quota for nano qnnmin = ', qnnmin 761 WRITE(numout,*) ' Maximal N quota for nano qnnmax = ', qnnmax 762 WRITE(numout,*) ' Minimal P quota for nano qpnmin = ', qpnmin 763 WRITE(numout,*) ' Maximal P quota for nano qpnmax = ', qpnmax 764 WRITE(numout,*) ' Minimal N quota for pico qnpmin = ', qnpmin 765 WRITE(numout,*) ' Maximal N quota for pico qnpmax = ', qnpmax 766 WRITE(numout,*) ' Minimal P quota for pico qppmin = ', qppmin 767 WRITE(numout,*) ' Maximal P quota for pico qppmax = ', qppmax 768 WRITE(numout,*) ' Minimal N quota for diatoms qndmin = ', qndmin 769 WRITE(numout,*) ' Maximal N quota for diatoms qndmax = ', qndmax 770 WRITE(numout,*) ' Minimal P quota for diatoms qpdmin = ', qpdmin 771 WRITE(numout,*) ' Maximal P quota for diatoms qpdmax = ', qpdmax 772 WRITE(numout,*) ' Maximal Fe quota for nanophyto. qfnmax = ', qfnmax 773 WRITE(numout,*) ' Maximal Fe quota for picophyto. qfpmax = ', qfpmax 774 WRITE(numout,*) ' Maximal Fe quota for diatoms qfdmax = ', qfdmax 775 ENDIF 776 777 zpsino3 = 2.3 * rno3 778 zpsinh4 = 1.8 * rno3 779 zpsiuptk = 2.3 * rno3 780 ! 781 nitrfac (:,:,:) = 0._wp 782 ! 783 END SUBROUTINE p5z_lim_init 784 288 785 INTEGER FUNCTION p4z_lim_alloc() 289 786 !!---------------------------------------------------------------------- … … 291 788 !!---------------------------------------------------------------------- 292 789 USE lib_mpp , ONLY: ctl_warn 790 INTEGER :: ierr(3) ! Local variables 293 791 !!---------------------------------------------------------------------- 792 ierr(:) = 0 294 793 295 794 !* Biological arrays for phytoplankton growth … … 301 800 & xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk), & 302 801 & concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), & 303 & xlimsi (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 802 & xlimsi (jpi,jpj,jpk), STAT=ierr(1) ) 803 804 IF (ln_p5z) THEN 805 !* Biological arrays for phytoplankton growth 806 ALLOCATE( xpicono3(jpi,jpj,jpk), xpiconh4(jpi,jpj,jpk), & 807 & xpicopo4(jpi,jpj,jpk), xpicodop(jpi,jpj,jpk), & 808 & xnanodop(jpi,jpj,jpk), xdiatdop(jpi,jpj,jpk), & 809 & xnanofer(jpi,jpj,jpk), xdiatfer(jpi,jpj,jpk), & 810 & xpicofer(jpi,jpj,jpk), xlimpfe (jpi,jpj,jpk), & 811 & fvnuptk (jpi,jpj,jpk), fvduptk (jpi,jpj,jpk), & 812 & fvpuptk (jpi,jpj,jpk), xlimpic (jpi,jpj,jpk), & 813 & xlimsi2 (jpi,jpj,jpk), STAT=ierr(2) ) 814 815 !* Minimum/maximum quotas of phytoplankton 816 ALLOCATE( xqnnmin (jpi,jpj,jpk), xqnnmax(jpi,jpj,jpk), & 817 & xqpnmin (jpi,jpj,jpk), xqpnmax(jpi,jpj,jpk), & 818 & xqnpmin (jpi,jpj,jpk), xqnpmax(jpi,jpj,jpk), & 819 & xqppmin (jpi,jpj,jpk), xqppmax(jpi,jpj,jpk), & 820 & xqndmin (jpi,jpj,jpk), xqndmax(jpi,jpj,jpk), & 821 & xqpdmin (jpi,jpj,jpk), xqpdmax(jpi,jpj,jpk), STAT=ierr(3) ) 822 ENDIF 823 ! 824 825 p4z_lim_alloc = MAXVAL( ierr ) 304 826 ! 305 827 IF( p4z_lim_alloc /= 0 ) CALL ctl_warn('p4z_lim_alloc : failed to allocate arrays.') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r7753 r9450 131 131 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) 132 132 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 133 IF( iom_use( "AOU" ) ) CALL iom_put( "AOU" , MAX(0., (chemo2(:,:,:) - trb(:,:,:,jpoxy) ) ) * 1.E6 * tmask(:,:,:) ) 133 134 ENDIF 134 135 ! -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r8533 r9450 72 72 REAL(wp) :: zgrazfffp, zgrazfffg, zgrazffep, zgrazffeg 73 73 CHARACTER (len=25) :: charout 74 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 74 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2 75 REAL(wp), POINTER, DIMENSION(:,:,:) :: zz2ligprod 75 76 76 77 !!--------------------------------------------------------------------- … … 78 79 IF( nn_timing == 1 ) CALL timing_start('p4z_meso') 79 80 ! 80 CALL wrk_alloc( jpi, jpj, jpk, zgrazing )81 CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 81 82 zgrazing(:,:,:) = 0._wp 83 zfezoo2 (:,:,:) = 0._wp 84 ! 85 IF (ln_ligand) THEN 86 CALL wrk_alloc( jpi, jpj, jpk, zz2ligprod ) 87 zz2ligprod(:,:,:) = 0._wp 88 ENDIF 82 89 83 90 DO jk = 1, jpkm1 … … 176 183 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 177 184 ! 178 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 185 IF( ln_ligand ) THEN 186 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 187 zz2ligprod(ji,jj,jk) = (zgrarem2 - zgrarsig) * ldocz 188 ENDIF 179 189 ! 180 190 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 181 191 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 192 zfezoo2(ji,jj,jk) = zgrafer2 182 193 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 183 194 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig … … 229 240 CALL iom_put( "PCAL", zw3d ) 230 241 ENDIF 242 IF( iom_use( "FEZOO2" ) ) THEN 243 zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 244 CALL iom_put( "FEZOO2", zw3d ) 245 ENDIF 246 IF( iom_use( "LPRODZ2" ) .AND. ln_ligand ) THEN 247 zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 248 CALL iom_put( "LPRODZ2" , zw3d ) 249 ENDIF 231 250 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 232 251 ENDIF … … 238 257 ENDIF 239 258 ! 240 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 259 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 260 IF ( ln_ligand ) CALL wrk_dealloc( jpi, jpj, jpk, zz2ligprod ) 241 261 ! 242 262 IF( nn_timing == 1 ) CALL timing_stop('p4z_meso') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r8533 r9450 71 71 REAL(wp) :: zgrazp, zgrazm, zgrazsd 72 72 REAL(wp) :: zgrazmf, zgrazsf, zgrazpf 73 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 73 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo 74 REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod 74 75 CHARACTER (len=25) :: charout 75 76 !!--------------------------------------------------------------------- … … 77 78 IF( nn_timing == 1 ) CALL timing_start('p4z_micro') 78 79 ! 79 CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 80 CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo ) 81 IF (ln_ligand) THEN 82 CALL wrk_alloc( jpi, jpj, jpk, zzligprod ) 83 zzligprod(:,:,:) = 0._wp 84 ENDIF 80 85 ! 81 86 DO jk = 1, jpkm1 … … 139 144 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 140 145 ! 141 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 146 IF( ln_ligand ) THEN 147 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 148 zzligprod(ji,jj,jk) = (zgrarem - zgrarsig) * ldocz 149 ENDIF 142 150 ! 143 151 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 144 152 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 153 zfezoo(ji,jj,jk) = zgrafer 145 154 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 146 155 prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc … … 184 193 CALL iom_put( "GRAZ1", zw3d ) 185 194 ENDIF 195 IF( iom_use( "FEZOO" ) ) THEN 196 zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 197 CALL iom_put( "FEZOO", zw3d ) 198 ENDIF 199 IF( iom_use( "LPRODZ" ) .AND. ln_ligand ) THEN 200 zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 201 CALL iom_put( "LPRODZ" , zw3d ) 202 ENDIF 186 203 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 187 204 ENDIF … … 194 211 ENDIF 195 212 ! 196 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 213 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo ) 214 IF (ln_ligand) CALL wrk_dealloc( jpi, jpj, jpk, zzligprod ) 197 215 ! 198 216 IF( nn_timing == 1 ) CALL timing_stop('p4z_micro') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zpoc.F90
r7753 r9450 67 67 REAL(wp), POINTER, DIMENSION(:,:,:) :: zremipoc, zremigoc, zorem3, ztremint 68 68 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: alphag 69 REAL(wp), POINTER, DIMENSION(:,:,:) :: zfolimi 69 70 !!--------------------------------------------------------------------- 70 71 ! … … 74 75 CALL wrk_alloc( jpi, jpj, totprod, totthick, totcons ) 75 76 CALL wrk_alloc( jpi, jpj, jpk, zremipoc, zremigoc, zorem3, ztremint ) 77 CALL wrk_alloc( jpi, jpj, jpk, zfolimi ) 76 78 ALLOCATE( alphag(jpi,jpj,jpk,jcpoc) ) 77 79 … … 98 100 orem (:,:,:) = 0. 99 101 ztremint(:,:,:) = 0. 102 zfolimi(:,:,:) = 0. 100 103 101 104 DO jn = 1, jcpoc … … 217 220 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem2 218 221 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer2 222 zfolimi(ji,jj,jk) = zofer2 219 223 END DO 220 224 END DO … … 247 251 tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) - zopop2 * (1. + solgoc) 248 252 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 * (1. + solgoc) 253 zfolimi(ji,jj,jk) = zofer2 249 254 END DO 250 255 END DO … … 422 427 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 423 428 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 429 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 424 430 ENDIF 425 431 END DO … … 447 453 tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + zopop 448 454 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 455 zfolimi(ji,jj,jk) = zfolimi(ji,jj,jk) + zofer 449 456 END DO 450 457 END DO … … 457 464 CALL iom_put( "REMINP" , zremipoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 458 465 CALL iom_put( "REMING" , zremigoc(:,:,:) * tmask(:,:,:) ) ! Remineralisation rate 466 CALL iom_put( "REMINF" , zfolimi(:,:,:) * tmask(:,:,:) * 1.e+9 * zrfact2 ) ! Remineralisation rate 459 467 ENDIF 460 468 ENDIF … … 468 476 CALL wrk_dealloc( jpi, jpj, totprod, totthick, totcons ) 469 477 CALL wrk_dealloc( jpi, jpj, jpk, zremipoc, zremigoc, zorem3, ztremint ) 478 CALL wrk_dealloc( jpi, jpj, jpk, zfolimi ) 470 479 DEALLOCATE( alphag ) 471 480 ! -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r7753 r9450 41 41 REAL(wp), PUBLIC :: grosip !: 42 42 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: optimal production = f(temperature)43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmaxn !: optimal production = f(temperature) 44 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotan !: proxy of N quota in Nanophyto 45 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: quotad !: proxy of N quota in diatomee … … 83 83 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewd 84 84 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 85 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpligprod1, zpligprod2 85 86 !!--------------------------------------------------------------------- 86 87 ! … … 92 93 CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 93 94 CALL wrk_alloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 95 IF( ln_ligand ) THEN 96 CALL wrk_alloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 97 ENDIF 94 98 ! 95 99 zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp … … 100 104 101 105 ! Computation of the optimal production 102 prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 106 prmaxn(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 107 108 ! Assign the reference growth rate that is used in implicit 109 ! biological processes 110 prmax(:,:,:) = prmaxn(:,:,:) 103 111 104 112 ! compute the day length depending on latitude and the day … … 132 140 END DO 133 141 134 zprbio(:,:,:) = prmax (:,:,:) * zmxl_fac(:,:,:)142 zprbio(:,:,:) = prmaxn(:,:,:) * zmxl_fac(:,:,:) 135 143 zprdia(:,:,:) = zprbio(:,:,:) 136 144 … … 173 181 ! Computation of production function for Chlorophyll 174 182 !-------------------------------------------------- 175 zpislopen = zpislopeadn(ji,jj,jk) / ( prmax (ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn )176 zpisloped = zpislopeadd(ji,jj,jk) / ( prmax (ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn )177 zprnch(ji,jj,jk) = prmax (ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )178 zprdch(ji,jj,jk) = prmax (ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )183 zpislopen = zpislopeadn(ji,jj,jk) / ( prmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 184 zpisloped = zpislopeadd(ji,jj,jk) / ( prmaxn(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 185 zprnch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 186 zprdch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 179 187 ENDIF 180 188 END DO … … 196 204 zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 197 205 zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 198 zprnch(ji,jj,jk) = prmax (ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) )199 zprdch(ji,jj,jk) = prmax (ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) )206 zprnch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 207 zprdch(ji,jj,jk) = prmaxn(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 200 208 ENDIF 201 209 END DO … … 210 218 DO ji = 1, jpi 211 219 zval = MIN( xnanopo4(ji,jj,jk), ( xnanonh4(ji,jj,jk) + xnanono3(ji,jj,jk) ) ) & 212 & * prmax (ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn )220 & * prmaxn(ji,jj,jk) / ( zprbio(ji,jj,jk) + rtrn ) 213 221 quotan(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 214 222 zval = MIN( xdiatpo4(ji,jj,jk), ( xdiatnh4(ji,jj,jk) + xdiatno3(ji,jj,jk) ) ) & 215 & * prmax (ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn )223 & * prmaxn(ji,jj,jk) / ( zprdia(ji,jj,jk) + rtrn ) 216 224 quotad(ji,jj,jk) = MIN( 1., 0.2 + 0.8 * zval ) 217 225 END DO … … 231 239 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 232 240 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 233 zsilim = MIN( zprdia(ji,jj,jk) / ( prmax (ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) )241 zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxn(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 234 242 zsilfac = 4.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 235 243 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) … … 253 261 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 254 262 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 255 zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) )256 zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) )257 263 END DO 258 264 END DO … … 270 276 zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 271 277 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 272 zprofen(ji,jj,jk) = fecnm * prmax (ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) &278 zprofen(ji,jj,jk) = fecnm * prmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 273 279 & * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) ) & 274 280 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) ) & … … 280 286 zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 281 287 zmax = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) ) 282 zprofed(ji,jj,jk) = fecdm * prmax (ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) &288 zprofed(ji,jj,jk) = fecdm * prmaxn(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 283 289 & * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) ) & 284 290 & * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) ) & … … 355 361 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 356 362 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 363 zpligprod1(ji,jj,jk) = zdocprod * ldocp 364 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 357 365 ENDIF 358 366 END DO … … 398 406 ENDIF 399 407 IF( iom_use( "Mumax" ) ) THEN 400 zw3d(:,:,:) = prmax (:,:,:) * tmask(:,:,:) ! Maximum growth rate408 zw3d(:,:,:) = prmaxn(:,:,:) * tmask(:,:,:) ! Maximum growth rate 401 409 CALL iom_put( "Mumax" , zw3d ) 402 410 ENDIF … … 409 417 ENDIF 410 418 IF( iom_use( "LNlight" ) .OR. iom_use( "LDlight" ) ) THEN 411 zw3d(:,:,:) = zprbio (:,:,:) / (prmax (:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term419 zw3d(:,:,:) = zprbio (:,:,:) / (prmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 412 420 CALL iom_put( "LNlight" , zw3d ) 413 421 ! 414 zw3d(:,:,:) = zprdia (:,:,:) / (prmax (:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term422 zw3d(:,:,:) = zprdia (:,:,:) / (prmaxn(:,:,:) + rtrn) * tmask(:,:,:) ! light limitation term 415 423 CALL iom_put( "LDlight" , zw3d ) 416 424 ENDIF … … 426 434 zw3d(:,:,:) = ( zprofen(:,:,:) + zprofed(:,:,:) ) * zfact * tmask(:,:,:) ! total biogenic iron production 427 435 CALL iom_put( "TPBFE" , zw3d ) 436 ENDIF 437 IF( iom_use( "LPRODP" ) ) THEN 438 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 439 CALL iom_put( "LPRODP" , zw3d ) 440 ENDIF 441 IF( iom_use( "LDETP" ) ) THEN 442 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 443 CALL iom_put( "LDETP" , zw3d ) 428 444 ENDIF 429 445 IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN … … 485 501 CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 486 502 CALL wrk_dealloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 503 IF( ln_ligand ) THEN 504 CALL wrk_dealloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 505 ENDIF 487 506 ! 488 507 IF( nn_timing == 1 ) CALL timing_stop('p4z_prod') … … 550 569 !! *** ROUTINE p4z_prod_alloc *** 551 570 !!---------------------------------------------------------------------- 552 ALLOCATE( prmax (jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc )571 ALLOCATE( prmaxn(jpi,jpj,jpk), quotan(jpi,jpj,jpk), quotad(jpi,jpj,jpk), STAT = p4z_prod_alloc ) 553 572 ! 554 573 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r8533 r9450 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 17 USE p4zche ! chemical model 18 USE p4zprod ! Growth rate of the 2 phyto groups19 18 USE p4zlim 20 19 USE prtctl_trc ! print control for debugging … … 70 69 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac 71 70 REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zfacsi, zw3d, zfacsib 71 REAL(wp), POINTER, DIMENSION(:,:,:) :: zfebact, zdepeff 72 72 !!--------------------------------------------------------------------- 73 73 ! … … 76 76 ! Allocate temporary workspace 77 77 CALL wrk_alloc( jpi, jpj, ztempbac ) 78 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib )78 CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib, zfebact, zdepeff ) 79 79 80 80 ! Initialisation of temprary arrys 81 81 zdepprod(:,:,:) = 1._wp 82 zdepeff (:,:,:) = 0.3_wp 82 83 ztempbac(:,:) = 0._wp 84 zfebact (:,:,:) = 0._wp 83 85 zfacsib(:,:,:) = xsilab / ( 1.0 - xsilab ) 84 86 zfacsi(:,:,:) = xsilab … … 100 102 zdepbac (ji,jj,jk) = zdepmin**0.683 * ztempbac(ji,jj) 101 103 zdepprod(ji,jj,jk) = zdepmin**0.273 104 zdepeff (ji,jj,jk) = 0.3 * zdepmin**0.3 102 105 ENDIF 103 106 END DO … … 220 223 zbactfer = feratb * rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk) & 221 224 & * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) ) & 222 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 223 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 224 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.12 225 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.04 225 & * zdepprod(ji,jj,jk) * zdepeff(ji,jj,jk) * zdepbac(ji,jj,jk) 226 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.33 227 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.25 228 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.08 229 zfebact(ji,jj,jk) = zbactfer * 0.33 226 230 END DO 227 231 END DO … … 283 287 ENDIF 284 288 ! 289 IF( iom_use( "BACT" ) ) THEN 290 zw3d(:,:,:) = zdepbac(:,:,:) * 1.E6 * tmask(:,:,:) ! Bacterial biomass 291 CALL iom_put( "BACT", zw3d ) 292 ENDIF 293 IF( iom_use( "FEBACT" ) ) THEN 294 zw3d(:,:,:) = zfebact(:,:,:) * 1E9 * tmask(:,:,:) * zrfact2 ! Bacterial iron consumption 295 CALL iom_put( "FEBACT" , zw3d ) 296 ENDIF 285 297 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 286 298 ENDIF 287 299 ! 288 300 CALL wrk_dealloc( jpi, jpj, ztempbac ) 289 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib )301 CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib, zfebact, zdepeff ) 290 302 ! 291 303 IF( nn_timing == 1 ) CALL timing_stop('p4z_rem') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90
r7753 r9450 170 170 rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 171 171 & * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 172 rivdsi(ji,jj) = sf_river(jr_dsi)%fnow(ji,jj,1) & 173 & * 1.E3 / ( 28.1 * zcoef + rtrn ) 172 174 END DO 173 175 END DO -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmeso.F90
r7646 r9450 85 85 CHARACTER (len=25) :: charout 86 86 REAL(wp) :: zrfact2, zmetexcess 87 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 87 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo2 88 REAL(wp), POINTER, DIMENSION(:,:,:) :: zz2ligprod 88 89 89 90 !!--------------------------------------------------------------------- … … 91 92 IF( nn_timing == 1 ) CALL timing_start('p5z_meso') 92 93 ! 93 CALL wrk_alloc( jpi, jpj, jpk, zgrazing )94 CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 94 95 zgrazing(:,:,:) = 0._wp 96 zfezoo2 (:,:,:) = 0._wp 97 ! 98 IF (ln_ligand) THEN 99 CALL wrk_alloc( jpi, jpj, jpk, zz2ligprod ) 100 zz2ligprod(:,:,:) = 0._wp 101 ENDIF 95 102 96 103 zmetexcess = 0.0 … … 138 145 ! most abundant species 139 146 ! ------------------------------------------------------------ 140 ztmp1 = xpref2p * zcompaph **1.5141 ztmp2 = xpref2m * zcompames** 1.5142 ztmp3 = xpref2c * zcompapoc** 1.5143 ztmp4 = xpref2d * zcompadi **1.5144 ztmp5 = xpref2z * zcompaz** 1.5147 ztmp1 = xpref2p * zcompaph * (0.75 * zcompaph + 0.25 * zcompadi) 148 ztmp2 = xpref2m * zcompames**2 149 ztmp3 = xpref2c * zcompapoc**2 150 ztmp4 = xpref2d * zcompadi * (0.75 * zcompadi + 0.25 * zcompaph) 151 ztmp5 = xpref2z * zcompaz**2 145 152 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 146 153 ztmp1 = ztmp1 / ztmptot … … 290 297 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 291 298 ! 292 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 299 IF( ln_ligand ) THEN 300 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 301 zz2ligprod(ji,jj,jk) = zgradoc * ldocz 302 ENDIF 293 303 ! 294 304 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon … … 296 306 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 297 307 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 308 zfezoo2(ji,jj,jk) = zgraref 298 309 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarem 299 310 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgraren … … 351 362 CALL iom_put( "PCAL", zw3d ) 352 363 ENDIF 364 IF( iom_use( "FEZOO2" ) ) THEN 365 zw3d(:,:,:) = zfezoo2(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 366 CALL iom_put( "FEZOO2", zw3d ) 367 ENDIF 368 IF( iom_use( "LPRODZ2" ) .AND. ln_ligand ) THEN 369 zw3d(:,:,:) = zz2ligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 370 CALL iom_put( "LPRODZ2" , zw3d ) 371 ENDIF 353 372 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 354 373 ENDIF … … 360 379 ENDIF 361 380 ! 362 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 381 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo2 ) 382 IF ( ln_ligand ) CALL wrk_dealloc( jpi, jpj, jpk, zz2ligprod ) 363 383 ! 364 384 IF( nn_timing == 1 ) CALL timing_stop('p5z_meso') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmicro.F90
r7646 r9450 15 15 USE trc ! passive tracers common variables 16 16 USE sms_pisces ! PISCES Source Minus Sink variables 17 USE p 5zlim ! Phytoplankton limitation terms17 USE p4zlim ! Phytoplankton limitation terms 18 18 USE iom ! I/O manager 19 19 USE prtctl_trc ! print control for debugging … … 82 82 REAL(wp) :: zgrazdc, zgrazdn, zgrazdp, zgrazdf, zgraznf, zgrazz 83 83 REAL(wp) :: zgrazpc, zgrazpn, zgrazpp, zgrazpf, zbeta, zrfact2, zmetexcess 84 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d 84 REAL(wp), POINTER, DIMENSION(:,:,:) :: zgrazing, zw3d, zfezoo 85 REAL(wp), POINTER, DIMENSION(:,:,:) :: zzligprod 85 86 CHARACTER (len=25) :: charout 86 87 !!--------------------------------------------------------------------- … … 88 89 IF( nn_timing == 1 ) CALL timing_start('p5z_micro') 89 90 ! 90 CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 91 CALL wrk_alloc( jpi, jpj, jpk, zgrazing, zfezoo ) 92 ! 93 IF (ln_ligand) THEN 94 CALL wrk_alloc( jpi, jpj, jpk, zzligprod ) 95 zzligprod(:,:,:) = 0._wp 96 ENDIF 91 97 ! 92 98 zmetexcess = 0.0 … … 134 140 ! most abundant species 135 141 ! ------------------------------------------------------------ 136 ztmp1 = xprefn * zcompaph **1.5137 ztmp2 = xprefp * zcompapi **1.5138 ztmp3 = xprefc * zcompapoc **1.5139 ztmp4 = xprefd * zcompadi **1.5140 ztmp5 = xprefz * zcompaz **1.5142 ztmp1 = xprefn * zcompaph * ( 0.75 * zcompaph + 0.25 * zcompadi ) 143 ztmp2 = xprefp * zcompapi * zcompapi 144 ztmp3 = xprefc * zcompapoc * zcompapoc 145 ztmp4 = xprefd * zcompadi * ( 0.75 * zcompadi + 0.25 * zcompaph ) 146 ztmp5 = xprefz * zcompaz * zcompaz 141 147 ztmptot = ztmp1 + ztmp2 + ztmp3 + ztmp4 + ztmp5 + rtrn 142 148 ztmp1 = ztmp1 / ztmptot … … 245 251 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgradoc 246 252 ! 247 IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 253 IF( ln_ligand ) THEN 254 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zgradoc * ldocz 255 zzligprod(ji,jj,jk) = zgradoc * ldocz 256 ENDIF 248 257 ! 249 258 tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zgradon … … 251 260 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarem 252 261 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgraref 262 zfezoo(ji,jj,jk) = zgraref 253 263 tra(ji,jj,jk,jpzoo) = tra(ji,jj,jk,jpzoo) + zepsherv * zgraztotc - zrespirc - ztortz - zgrazz 254 264 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) - zgraznc … … 295 305 CALL iom_put( "GRAZ1", zw3d ) 296 306 ENDIF 307 IF( iom_use( "FEZOO" ) ) THEN 308 zw3d(:,:,:) = zfezoo(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) ! 309 CALL iom_put( "FEZOO", zw3d ) 310 ENDIF 311 IF( iom_use( "LPRODZ" ) .AND. ln_ligand ) THEN 312 zw3d(:,:,:) = zzligprod(:,:,:) * 1e9 * 1.e+3 * rfact2r * tmask(:,:,:) 313 CALL iom_put( "LPRODZ" , zw3d ) 314 ENDIF 297 315 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 298 316 ENDIF … … 304 322 ENDIF 305 323 ! 306 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 324 CALL wrk_dealloc( jpi, jpj, jpk, zgrazing, zfezoo ) 325 IF (ln_ligand) CALL wrk_dealloc( jpi, jpj, jpk, zzligprod ) 307 326 ! 308 327 IF( nn_timing == 1 ) CALL timing_stop('p5z_micro') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zmort.F90
r7646 r9450 14 14 USE trc ! passive tracers common variables 15 15 USE sms_pisces ! PISCES Source Minus Sink variables 16 USE p 5zlim ! Phytoplankton limitation terms16 USE p4zlim ! Phytoplankton limitation terms 17 17 USE prtctl_trc ! print control for debugging 18 18 -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p5zprod.F90
r7646 r9450 16 16 USE trc ! passive tracers common variables 17 17 USE sms_pisces ! PISCES Source Minus Sink variables 18 USE p 5zlim ! Co-limitations of differents nutrients18 USE p4zlim ! Co-limitations of differents nutrients 19 19 USE prtctl_trc ! print control for debugging 20 20 USE iom ! I/O manager … … 78 78 REAL(wp) :: zprnutmax, zdocprod, zprochln, zprochld, zprochlp 79 79 REAL(wp) :: zpislopen, zpislopep, zpisloped, thetannm_n, thetandm_n, thetanpm_n 80 REAL(wp) :: zratiosi, zquotasi, grosip2 80 81 REAL(wp) :: zrum, zcodel, zargu, zval, zfeup 81 82 REAL(wp) :: zfact, zrfact2 … … 94 95 REAL(wp), POINTER, DIMENSION(:,:,:) :: zcroissn, zcroissp, zcroissd 95 96 REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 97 REAL(wp), POINTER, DIMENSION(:,:,:) :: zpligprod1, zpligprod2 96 98 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 97 99 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d … … 110 112 CALL wrk_alloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd ) 111 113 CALL wrk_alloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd ) 114 IF( ln_ligand ) THEN 115 CALL wrk_alloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 116 ENDIF 112 117 ! 113 118 zprorcan(:,:,:) = 0._wp ; zprorcap(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp … … 121 126 122 127 ! Computation of the optimal production 123 prmaxn(:,:,:) = ( 0. 65_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:)124 prmaxp(:,:,:) = 0.5 / 0. 65* prmaxn(:,:,:)128 prmaxn(:,:,:) = ( 0.8_wp * (1. + zpsino3 * qnpmax ) ) * r1_rday * tgfunc(:,:,:) 129 prmaxp(:,:,:) = 0.5 / 0.8 * prmaxn(:,:,:) 125 130 prmaxd(:,:,:) = prmaxn(:,:,:) 126 zprnut(:,:,:) = 0.65_wp * r1_rday * tgfunc(:,:,:) 131 zprnut(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:) 132 133 ! Assign the reference growth rate used in implicit formulations 134 prmax(:,:,:) = zprnut(:,:,:) 127 135 128 136 ! compute the day length depending on latitude and the day … … 213 221 ! Si/C is arbitrariliy increased for very high Si concentrations 214 222 ! to mimic the very high ratios observed in the Southern Ocean (silpot2) 223 IF (gphit(ji,jj) < -30 ) THEN 224 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 ) 225 ELSE 226 zsilfac2 = 1. 227 ENDIF 228 zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi2(ji,jj,jk) ) 229 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 215 230 zlim = trb(ji,jj,jk,jpsil) / ( trb(ji,jj,jk,jpsil) + xksi1 ) 216 zsilim = MIN( zprdia(ji,jj,jk) / ( prmaxd(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) 217 zsilfac = 3.4 * EXP( -4.23 * zsilim ) * MAX( 0.e0, MIN( 1., 2.2 * ( zlim - 0.5 ) ) ) + 1.e0 218 zsiborn = trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) * trb(ji,jj,jk,jpsil) 219 IF (gphit(ji,jj) < -30 ) THEN 220 zsilfac2 = 1. + 2. * zsiborn / ( zsiborn + xksi2**3 ) 221 ELSE 222 zsilfac2 = 1. + zsiborn / ( zsiborn + xksi2**3 ) 223 ENDIF 224 zysopt(ji,jj,jk) = grosip * zlim * zsilfac * zsilfac2 231 zratiosi = trb(ji,jj,jk,jpndi) 232 grosip2 = zsilfac2 * grosip 233 zquotasi = MIN( grosip2, trn(ji,jj,jk,jpdsi) / (zratiosi + rtrn ) ) 234 zysopt(ji,jj,jk) = 1./3. * zratiosi * zlim * MAX(0.0, grosip2 - zquotasi) 235 zysopt(ji,jj,jk) = zysopt(ji,jj,jk) * 1.005 * zsilim**3 / (0.005 + zsilim**3 ) 225 236 ENDIF 226 237 END DO … … 332 343 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 333 344 zpronmax = zprnutmax * zmax * MAX(0., MIN(1., ( zratiop - xqpdmin(ji,jj,jk) ) & 334 & / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlim dfe(ji,jj,jk) ) )345 & / ( xqpdmax(ji,jj,jk) - xqpdmin(ji,jj,jk) + rtrn ), xlimsi(ji,jj,jk) ) ) 335 346 zpronewd(ji,jj,jk) = zpronmax * zdaylen(ji,jj) * xdiatno3(ji,jj,jk) 336 347 zproregd(ji,jj,jk) = zpronmax * xdiatnh4(ji,jj,jk) … … 338 349 zrat = MIN( 1., zratiop / (xqpdmax(ji,jj,jk) + rtrn) ) 339 350 zmax = MAX(0., MIN(1., (1. - zrat)/ (1.05 - zrat) * 1.05)) 340 zpropmax = zprnutmax * zmax * xlim dfe(ji,jj,jk)351 zpropmax = zprnutmax * zmax * xlimsi(ji,jj,jk) 341 352 zpropo4d(ji,jj,jk) = zpropmax * xdiatpo4(ji,jj,jk) 342 353 zprodopd(ji,jj,jk) = zpropmax * xdiatdop(ji,jj,jk) … … 362 373 thetannm_n = MIN ( thetannm, ( thetannm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 363 374 & * (1. - 1.14 / 43.4 * 20.)) 375 thetannm_n = thetannm 364 376 zprochln = thetannm_n * zprod / ( zpislopeadn(ji,jj,jk) * znanotot + rtrn ) 365 377 zprochln = MAX(zprochln, chlcmin * 12. * zprorcan (ji,jj,jk) ) … … 369 381 thetanpm_n = MIN ( thetanpm, ( thetanpm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 370 382 & * (1. - 1.14 / 43.4 * 20.)) 383 thetanpm_n = thetanpm 371 384 zprochlp = thetanpm_n * zprod / ( zpislopeadp(ji,jj,jk) * zpicotot + rtrn ) 372 385 zprochlp = MAX(zprochlp, chlcmin * 12. * zprorcap(ji,jj,jk) ) … … 376 389 thetandm_n = MIN ( thetandm, ( thetandm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) & 377 390 & * (1. - 1.14 / 43.4 * 20.)) 391 thetandm_n = thetandm 378 392 zprochld = thetandm_n * zprod / ( zpislopeadd(ji,jj,jk) * zdiattot + rtrn ) 379 393 zprochld = MAX(zprochld, chlcmin * 12. * zprorcad(ji,jj,jk) ) … … 460 474 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) + texcretp * zprofep(ji,jj,jk) 461 475 tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 476 zpligprod1(ji,jj,jk) = zdocprod * ldocp 477 zpligprod2(ji,jj,jk) = zfeup * plig(ji,jj,jk) * lthet 462 478 END DO 463 479 END DO … … 547 563 ! 548 564 ENDIF 549 565 IF( iom_use( "LPRODP" ) ) THEN 566 zw3d(:,:,:) = zpligprod1(:,:,:) * 1e9 * zfact * tmask(:,:,:) 567 CALL iom_put( "LPRODP" , zw3d ) 568 ENDIF 569 IF( iom_use( "LDETP" ) ) THEN 570 zw3d(:,:,:) = zpligprod2(:,:,:) * 1e9 * zfact * tmask(:,:,:) 571 CALL iom_put( "LDETP" , zw3d ) 572 ENDIF 573 ! 550 574 IF( iom_use( "tintpp" ) ) CALL iom_put( "tintpp" , tpp * zfact ) ! global total integrated primary production molC/s 551 575 ! … … 570 594 CALL wrk_dealloc( jpi, jpj, jpk, zprchln, zprchlp, zprchld, zprodopn, zprodopp, zprodopd ) 571 595 CALL wrk_dealloc( jpi, jpj, jpk, zcroissp, zcroissn, zcroissd ) 596 IF( ln_ligand ) THEN 597 CALL wrk_dealloc( jpi, jpj, jpk, zpligprod1, zpligprod2 ) 598 ENDIF 572 599 ! 573 600 IF( nn_timing == 1 ) CALL timing_stop('p5z_prod') -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r8533 r9450 100 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: orem !: ?? 101 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xdiss !: ?? 102 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: Reference maximum growth rate 102 103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodcal !: Calcite production 103 104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prodpoc !: Calcite production … … 164 165 & prodcal(jpi,jpj,jpk) , xdiss (jpi,jpj,jpk), & 165 166 & prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) , & 166 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , STAT=ierr(4) ) 167 & prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) , & 168 & prmax (jpi,jpj,jpk) , STAT=ierr(4) ) 167 169 168 170 !* Variable for chemistry of the CO2 cycle -
branches/CNRS/dev_r8832_PISCO/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r7753 r9450 71 71 USE p4zpoc ! Remineralization of organic particles 72 72 USE p4zligand ! Remineralization of organic ligands 73 USE p 5zlim ! Co-limitations of differents nutrients73 USE p4zlim ! Co-limitations of differents nutrients 74 74 USE p5zprod ! Growth rate of the 2 phyto groups 75 75 USE p5zmicro ! Sources and sinks of microzooplankton … … 112 112 ierr = ierr + p4z_sed_alloc() 113 113 ierr = ierr + p4z_rem_alloc() 114 ierr = ierr + p4z_lim_alloc() 114 115 IF( ln_p4z ) THEN 115 ierr = ierr + p4z_lim_alloc()116 116 ierr = ierr + p4z_prod_alloc() 117 117 ELSE 118 ierr = ierr + p5z_lim_alloc()119 118 ierr = ierr + p5z_prod_alloc() 120 119 ENDIF … … 167 166 IF( cltra == 'PICN' ) jpnpi = jn !: Picophytoplankton N biomass 168 167 IF( cltra == 'PICP' ) jpppi = jn !: Picophytoplankton P biomass 168 IF( cltra == 'PCHL' ) jppch = jn !: Diatoms Chlorophyll Concentration 169 169 IF( cltra == 'PFe' ) jppfe = jn !: Picophytoplankton Fe biomass 170 170 IF( cltra == 'LGW' ) jplgw = jn !: Weak ligands … … 240 240 xksi(:,:) = 2.e-6 241 241 xksimax(:,:) = xksi(:,:) 242 ! 243 IF( ln_p5z ) THEN 244 sizep(:,:,:) = 1. 245 sizen(:,:,:) = 1. 246 sized(:,:,:) = 1. 247 ENDIF 242 248 END IF 243 249
Note: See TracChangeset
for help on using the changeset viewer.