New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
p2zbio.F90 in NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z – NEMO

source: NEMO/branches/2020/dev_r14116_HPC-04_mcastril_Mixed_Precision_implementation_final/src/TOP/PISCES/P2Z/p2zbio.F90 @ 14644

Last change on this file since 14644 was 14644, checked in by sparonuz, 3 years ago

Merge trunk -r14642:HEAD

  • Property svn:keywords set to Id
File size: 23.0 KB
RevLine 
[3443]1MODULE p2zbio
2   !!======================================================================
3   !!                         ***  MODULE p2zbio  ***
4   !! TOP :   LOBSTER
5   !!======================================================================
6   !! History :    -   !  1999-07  (M. Levy) Original code
7   !!              -   !  2000-12  (E. Kestenare) assign a parameter to name individual tracers
8   !!              -   !  2001-03  (M. Levy)  LNO3 + dia2d
9   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90
10   !!----------------------------------------------------------------------
11   !!   p2z_bio        : 
12   !!----------------------------------------------------------------------
13   USE oce_trc         !
14   USE trc             !
[9169]15   USE sms_pisces      !
16   USE p2zopt          !
17   USE trd_oce         !
18   USE trdtrc          !
19   !
[3443]20   USE lbclnk          !
[13286]21   USE prtctl          ! Print control for debbuging
[9169]22   USE iom             !
[3443]23   
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   p2z_bio         ! called in ???
28   PUBLIC   p2z_bio_init    ! called in ???
29
[4147]30   REAL(wp) ::   tmumax     ! maximal phytoplankton growth rate            [s-1]
31   REAL(wp) ::   rgamma     ! phytoplankton exudation fraction             [%]
32   REAL(wp) ::   fphylab    ! NH4 fraction of phytoplankton exsudation
33   REAL(wp) ::   tmminp     ! minimal phytoplancton mortality rate         [0.05/86400 s-1=20 days]
34   REAL(wp) ::   aki        ! light photosynthesis half saturation constant[W/m2]
[3443]35   !
[4147]36   REAL(wp) ::   akno3      ! nitrate limitation half-saturation value     [mmol/m3]
37   REAL(wp) ::   aknh4      ! ammonium limitation half-saturation value    [mmol/m3]
38   REAL(wp) ::   taunn      ! nitrification rate                           [s-1]
39   REAL(wp) ::   psinut     ! inhibition of nitrate uptake by ammonium
[3443]40   !
[4147]41   REAL(wp) ::   taudn      ! detritus breakdown rate                        [0.1/86400 s-1=10 days]
42   REAL(wp) ::   fdetlab    ! NH4 fraction of detritus dissolution
[3443]43   !
[4147]44   REAL(wp) ::   taudomn    ! DOM breakdown rate                             [s-1]
45   !                        ! slow remineralization rate of semi-labile dom to nh4 (1 month)
[3443]46   !
[4147]47   REAL(wp) ::   rppz       ! ivlev coeff for zoo mortality
48   REAL(wp) ::   taus       ! specific zooplankton maximal grazing rate              [s-1]
[3443]49   !                                     ! 0.75/86400 s-1=8.680555E-6    1/86400 = 1.15e-5
[4147]50   REAL(wp) ::   aks        ! half-saturation constant for total zooplankton grazing [mmolN.m-3]
51   REAL(wp) ::   rpnaz      ! non-assimilated phytoplankton by zooplancton           [%]
52   REAL(wp) ::   rdnaz      ! non-assimilated detritus by zooplankton                [%]
53   REAL(wp) ::   tauzn      ! zooplancton specific excretion rate                    [0.1/86400 s-1=10 days]
54   REAL(wp) ::   tmminz     ! minimal zooplankton mortality rate                     [(mmolN/m3)-1 d-1]
55   REAL(wp) ::   fzoolab    ! NH4 fraction of zooplankton excretion
56   REAL(wp) ::   fdbod      ! zooplankton mortality fraction that goes to detritus
[3443]57
[5836]58   !! * Substitutions
[12377]59#  include "do_loop_substitute.h90"
[13237]60#  include "domzgr_substitute.h90"
[14219]61#  include "single_precision_substitute.h90"
[3443]62   !!----------------------------------------------------------------------
[10067]63   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
[5215]64   !! $Id$
[10068]65   !! Software governed by the CeCILL license (see ./LICENSE)
[3443]66   !!----------------------------------------------------------------------
67CONTAINS
68
[12377]69   SUBROUTINE p2z_bio( kt, Kmm, Krhs )
[3443]70      !!---------------------------------------------------------------------
71      !!                     ***  ROUTINE p2z_bio  ***
72      !!
73      !! ** Purpose :   compute the now trend due to biogeochemical processes
74      !!              and add it to the general trend of passive tracers equations
75      !!
76      !! ** Method  :   each now biological flux is calculated in function of now
77      !!              concentrations of tracers.
78      !!              depending on the tracer, these fluxes are sources or sinks.
79      !!              the total of the sources and sinks for each tracer
80      !!              is added to the general trend.
81      !!       
[12377]82      !!                      tr(Krhs) = tr(Krhs) + zf...tr(Krhs) - zftra...
[3443]83      !!                                     |         |
84      !!                                     |         |
85      !!                                  source      sink
86      !!       
87      !!---------------------------------------------------------------------
[12377]88      INTEGER, INTENT( in ) ::   kt             ! ocean time-step index     
89      INTEGER, INTENT( in ) ::   Kmm, Krhs      ! time level indices
[9169]90      !
[3443]91      INTEGER  ::   ji, jj, jk, jl
92      REAL(wp) ::   zdet, zzoo, zphy, zno3, znh4, zdom      ! now concentrations
93      REAL(wp) ::   zlno3, zlnh4, zle, zlt                  ! limitation terms for phyto
94      REAL(wp) ::   zno3phy, znh4phy, zphynh4, zphydom
95      REAL(wp) ::   zphydet, zphyzoo, zdetzoo
96      REAL(wp) ::   zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom
97      REAL(wp) ::   znh4no3, zdomnh4, zppz, zpdz, zpppz, zppdz, zfood
98      REAL(wp) ::   zfilpz, zfildz, zphya, zzooa, zno3a
99      REAL(wp) ::   znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju
100      REAL(wp) ::   ze3t
[9169]101      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   zw2d
102      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zw3d
[3443]103      CHARACTER (len=25) :: charout
104      !!---------------------------------------------------------------------
105      !
[9124]106      IF( ln_timing )   CALL timing_start('p2z_bio')
[3443]107      !
[9169]108      IF( lk_iomput )   ALLOCATE( zw2d(jpi,jpj,17), zw3d(jpi,jpj,jpk,3) )
[3443]109
110      IF( kt == nittrc000 ) THEN
111         IF(lwp) WRITE(numout,*)
112         IF(lwp) WRITE(numout,*) ' p2z_bio: LOBSTER bio-model'
113         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
114      ENDIF
115
[3446]116      xksi(:,:) = 0.e0        ! zooplakton closure ( fbod)
[7646]117      IF( lk_iomput ) THEN
[9169]118         zw2d  (:,:,:) = 0._wp
119         zw3d(:,:,:,:) = 0._wp
[3443]120      ENDIF
121
122      !                                      ! -------------------------- !
123      DO jk = 1, jpkbm1                      !  Upper ocean (bio-layers)  !
124         !                                   ! -------------------------- !
[13295]125         DO_2D( 0, 0, 0, 0 )
[12377]126            ! trophic variables( det, zoo, phy, no3, nh4, dom)
127            ! ------------------------------------------------
[3443]128
[12377]129            ! negative trophic variables DO not contribute to the fluxes
130            zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) )
131            zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) )
132            zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) )
133            zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) )
134            znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) )
135            zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) )
[3443]136
[12377]137            ! Limitations
138            zlt   = 1.
139            zle   = 1. - EXP( -etot(ji,jj,jk) / aki / zlt )
140            ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03
141            zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 )
142            zlnh4 = znh4 / (znh4+aknh4) 
[3443]143
[12377]144            ! sinks and sources
145            !    phytoplankton production and exsudation
146            zno3phy = tmumax * zle * zlt * zlno3 * zphy
147            znh4phy = tmumax * zle * zlt * zlnh4 * zphy
[3443]148
[12377]149            !    fphylab added by asklod AS Kremeur 2005-03
150            zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy)
151            zphynh4 = rgamma * fphylab * (zno3phy + znh4phy)
152            ! zooplankton production
153            !    preferences
154            zppz = rppz
155            zpdz = 1. - rppz
156            zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
157            zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
158            zfood = zpppz * zphy + zppdz * zdet
159            !    filtration
160            zfilpz = taus * zpppz / (aks + zfood)
161            zfildz = taus * zppdz / (aks + zfood)
162            !    grazing
163            zphyzoo = zfilpz * zphy * zzoo
164            zdetzoo = zfildz * zdet * zzoo
[3443]165
[12377]166            ! fecal pellets production
167            zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
[3443]168
[12377]169            ! zooplankton liquide excretion
170            zzoonh4 = tauzn * fzoolab * zzoo 
171            zzoodom = tauzn * (1 - fzoolab) * zzoo
[3443]172
[12377]173            ! mortality
174            !    phytoplankton mortality
175            zphydet = tmminp * zphy
[3443]176
[12377]177            !    zooplankton mortality
178            !    closure : flux grazing is redistributed below level jpkbio
179            zzoobod = tmminz * zzoo * zzoo
180            xksi(ji,jj) = xksi(ji,jj) + (1-fdbod) * zzoobod * e3t(ji,jj,jk,Kmm)
181            zboddet = fdbod * zzoobod
[3443]182
[12377]183            ! detritus and dom breakdown
184            zdetnh4 = taudn * fdetlab * zdet
185            zdetdom = taudn * (1 - fdetlab) * zdet
[3443]186
[12377]187            zdomnh4 = taudomn * zdom
[3443]188
[12377]189            ! flux added to express how the excess of nitrogen from
190            ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment)
191            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
[3443]192
[12377]193            ! Nitrification
194            znh4no3 = taunn * znh4
[3443]195
[12377]196            ! determination of trends
197            !    total trend for each biological tracer
198            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
199            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
200            zno3a = - zno3phy + znh4no3
201            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
202            zdeta =   zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet
203            zdoma =   zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
[3443]204
[12377]205            ! tracer flux at totox-point added to the general trend
206            tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta
207            tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa
208            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya
209            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a
210            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a
211            tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma
[3443]212
[12377]213             IF( lk_iomput ) THEN
214               ! convert fluxes in per day
215               ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp
216               zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t
217               zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
218               zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
219               zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
220               zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
221               zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
222               zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
223               zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
224               zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
225               zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
226               zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
227               zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
228               zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
229               zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t
230               zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
231               zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
232               zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
233               !   
234               zw3d(ji,jj,jk,1) = zno3phy * 86400
235               zw3d(ji,jj,jk,2) = znh4phy * 86400     
236               zw3d(ji,jj,jk,3) = znh4no3 * 86400   
237                !
238             ENDIF
239         END_2D
[3443]240      END DO
241
242      !                                      ! -------------------------- !
243      DO jk = jpkb, jpkm1                    !  Upper ocean (bio-layers)  !
244         !                                   ! -------------------------- !
[13295]245         DO_2D( 0, 0, 0, 0 )
[12377]246            ! remineralisation of all quantities towards nitrate
[3443]247
[12377]248            !    trophic variables( det, zoo, phy, no3, nh4, dom)
249            !       negative trophic variables DO not contribute to the fluxes
250            zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) )
251            zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) )
252            zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) )
253            zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) )
254            znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) )
255            zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) )
[3443]256
[12377]257            !    Limitations
258            zlt   = 0.e0
259            zle   = 0.e0
260            zlno3 = 0.e0
261            zlnh4 = 0.e0
[3443]262
[12377]263            !    sinks and sources
264            !       phytoplankton production and exsudation
265            zno3phy = 0.e0
266            znh4phy = 0.e0
267            zphydom = 0.e0
268            zphynh4 = 0.e0
[3443]269
[12377]270            !    zooplankton production
271            zphyzoo = 0.e0      ! grazing
272            zdetzoo = 0.e0
[3443]273
[12377]274            zzoodet = 0.e0      ! fecal pellets production
[3443]275
[12377]276            zzoonh4 = tauzn * fzoolab * zzoo         ! zooplankton liquide excretion
277            zzoodom = tauzn * (1 - fzoolab) * zzoo
[3443]278
[12377]279            !    mortality
280            zphydet = tmminp * zphy      ! phytoplankton mortality
[3443]281
[12377]282            zzoobod = 0.e0               ! zooplankton mortality
283            zboddet = 0.e0               ! closure : flux fbod is redistributed below level jpkbio
[3443]284
[12377]285            !    detritus and dom breakdown
286            zdetnh4 = taudn * fdetlab * zdet
287            zdetdom = taudn * (1 - fdetlab) * zdet
[3443]288
[12377]289            zdomnh4 = taudomn * zdom
290            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
[3443]291
[12377]292            !    Nitrification
293            znh4no3 = taunn * znh4
[3443]294
295
[12377]296            ! determination of trends
297            !     total trend for each biological tracer
298            zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
299            zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
300            zno3a = - zno3phy + znh4no3 
301            znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
302            zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom + zboddet
303            zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
[3443]304
[12377]305            ! tracer flux at totox-point added to the general trend
306            tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta
307            tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa
308            tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya
309            tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a
310            tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a
311            tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma
312            !
313             IF( lk_iomput ) THEN                  ! convert fluxes in per day
314               ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp
315               zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t
316               zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
317               zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
318               zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
319               zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
320               zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
321               zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
322               zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
323               zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
324               zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
325               zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
326               zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
327               zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
328               zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t
329               zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
330               zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
331               zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
332               !   
333               zw3d(ji,jj,jk,1) = zno3phy * 86400._wp
334               zw3d(ji,jj,jk,2) = znh4phy * 86400._wp
335               zw3d(ji,jj,jk,3) = znh4no3 * 86400._wp
[3443]336               !
[12377]337            ENDIF
338         END_2D
[3443]339      END DO
[9169]340      !
[7646]341      IF( lk_iomput ) THEN
[13226]342         CALL lbc_lnk( 'p2zbio', zw2d(:,:,:),'T', 1.0_wp )
[14644]343         CALL lbc_lnk( 'p2zbio', zw3d(:,:,:,1),'T', 1.0_wp, zw3d(:,:,:,2),'T', 1.0_wp, zw3d(:,:,:,3),'T', 1.0_wp )
[9169]344         ! Save diagnostics
345         CALL iom_put( "TNO3PHY", zw2d(:,:,1) )
346         CALL iom_put( "TNH4PHY", zw2d(:,:,2) )
347         CALL iom_put( "TPHYDOM", zw2d(:,:,3) )
348         CALL iom_put( "TPHYNH4", zw2d(:,:,4) )
349         CALL iom_put( "TPHYZOO", zw2d(:,:,5) )
350         CALL iom_put( "TPHYDET", zw2d(:,:,6) )
351         CALL iom_put( "TDETZOO", zw2d(:,:,7) )
352         CALL iom_put( "TZOODET", zw2d(:,:,8) )
353         CALL iom_put( "TZOOBOD", zw2d(:,:,9) )
354         CALL iom_put( "TZOONH4", zw2d(:,:,10) )
355         CALL iom_put( "TZOODOM", zw2d(:,:,11) )
356         CALL iom_put( "TNH4NO3", zw2d(:,:,12) )
357         CALL iom_put( "TDOMNH4", zw2d(:,:,13) )
358         CALL iom_put( "TDETNH4", zw2d(:,:,14) )
359         CALL iom_put( "TPHYTOT", zw2d(:,:,15) )
360         CALL iom_put( "TZOOTOT", zw2d(:,:,16) )
[4996]361         !
[9169]362         CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )
363         CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )
364         CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )
[4996]365         !
[3443]366      ENDIF
367
[12377]368      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
[3443]369         WRITE(charout, FMT="('bio')")
[13286]370         CALL prt_ctl_info( charout, cdcomp = 'top' )
[14219]371         CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm)
[3443]372      ENDIF
373      !
[9169]374      IF( lk_iomput )   DEALLOCATE( zw2d, zw3d )
[3443]375      !
[9124]376      IF( ln_timing )  CALL timing_stop('p2z_bio')
[3443]377      !
378   END SUBROUTINE p2z_bio
379
[9124]380
[3443]381   SUBROUTINE p2z_bio_init
382      !!----------------------------------------------------------------------
383      !!                  ***  ROUTINE p2z_bio_init  ***
384      !!
[4147]385      !! ** Purpose :  biological parameters
[3443]386      !!
387      !! ** Method  :   Read namelist and check the parameters
388      !!
389      !!----------------------------------------------------------------------
[9169]390      INTEGER ::   ios   ! Local integer
391      !!
[3443]392      NAMELIST/namlobphy/ tmumax, rgamma, fphylab, tmminp, aki
393      NAMELIST/namlobnut/ akno3, aknh4, taunn, psinut
394      NAMELIST/namlobzoo/ rppz, taus, aks, rpnaz, rdnaz, tauzn, fzoolab, fdbod, tmminz
[9169]395      NAMELIST/namlobdet/ taudn, fdetlab
[3443]396      NAMELIST/namlobdom/ taudomn
397      !!----------------------------------------------------------------------
[9169]398      !
399      IF(lwp) WRITE(numout,*)
400      IF(lwp) WRITE(numout,*) ' p2z_bio_init : LOBSTER bio-model initialization'
401      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~'
402      !
[4147]403      READ  ( numnatp_ref, namlobphy, IOSTAT = ios, ERR = 901)
[11536]404901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobphy in reference namelist' )
[4147]405      READ  ( numnatp_cfg, namlobphy, IOSTAT = ios, ERR = 902 )
[11536]406902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobphy in configuration namelist' )
[4624]407      IF(lwm) WRITE ( numonp, namlobphy )
[9169]408      !
[3443]409      IF(lwp) THEN
[9169]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
[3443]416      ENDIF
417
[4147]418      READ  ( numnatp_ref, namlobnut, IOSTAT = ios, ERR = 903)
[11536]419903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobnut in reference namelist' )
[4147]420      READ  ( numnatp_cfg, namlobnut, IOSTAT = ios, ERR = 904 )
[11536]421904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobnut in configuration namelist' )
[4624]422      IF(lwm) WRITE ( numonp, namlobnut )
[4147]423
[3443]424      IF(lwp) THEN
[9169]425         WRITE(numout,*) 
426         WRITE(numout,*) '   Namelist namlobnut'
427         WRITE(numout,*) '      half-saturation nutrient for no3 uptake              akno3     =', akno3
428         WRITE(numout,*) '      half-saturation nutrient for nh4 uptake              aknh4     =', aknh4
429         WRITE(numout,*) '      nitrification rate                                   taunn     =', taunn
430         WRITE(numout,*) '      inhibition of no3 uptake by nh4                      psinut    =', psinut
[3443]431      ENDIF
432
[4147]433      READ  ( numnatp_ref, namlobzoo, IOSTAT = ios, ERR = 905)
[11536]434905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobzoo in reference namelist' )
[4147]435      READ  ( numnatp_cfg, namlobzoo, IOSTAT = ios, ERR = 906 )
[11536]436906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobzoo in configuration namelist' )
[4624]437      IF(lwm) WRITE ( numonp, namlobzoo )
[4147]438
[3443]439      IF(lwp) THEN
[9169]440         WRITE(numout,*) 
441         WRITE(numout,*) '   Namelist namlobzoo'
442         WRITE(numout,*) '      zoo preference for phyto                             rppz      =', rppz
443         WRITE(numout,*) '      maximal zoo grazing rate                             taus      =', 86400 * taus, ' d'
444         WRITE(numout,*) '      half saturation constant for zoo food                aks       =', aks
445         WRITE(numout,*) '      non-assimilated phyto by zoo                         rpnaz     =', rpnaz
446         WRITE(numout,*) '      non-assimilated detritus by zoo                      rdnaz     =', rdnaz
447         WRITE(numout,*) '      zoo specific excretion rate                          tauzn     =', 86400 * tauzn
448         WRITE(numout,*) '      minimal zoo mortality rate                           tmminz    =', 86400 * tmminz
449         WRITE(numout,*) '      NH4 fraction of zooplankton excretion                fzoolab   =', fzoolab
450         WRITE(numout,*) '      Zooplankton mortality fraction that goes to detritus fdbod     =', fdbod
[3443]451      ENDIF
452
[4147]453      READ  ( numnatp_ref, namlobdet, IOSTAT = ios, ERR = 907)
[11536]454907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdet in reference namelist' )
[4147]455      READ  ( numnatp_cfg, namlobdet, IOSTAT = ios, ERR = 908 )
[11536]456908   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdet in configuration namelist' )
[4624]457      IF(lwm) WRITE ( numonp, namlobdet )
[4147]458
[3443]459      IF(lwp) THEN
[9169]460          WRITE(numout,*) 
461          WRITE(numout,*) '   Namelist namlobdet'
462          WRITE(numout,*) '      detrital breakdown rate                              taudn     =', 86400 * taudn , ' d'
463          WRITE(numout,*) '      NH4 fraction of detritus dissolution                 fdetlab   =', fdetlab
[3443]464      ENDIF
465
[4147]466      READ  ( numnatp_ref, namlobdom, IOSTAT = ios, ERR = 909)
[11536]467909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdom in reference namelist' )
[4147]468      READ  ( numnatp_cfg, namlobdom, IOSTAT = ios, ERR = 910 )
[11536]469910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdom in configuration namelist' )
[4624]470      IF(lwm) WRITE ( numonp, namlobdom )
[4147]471
[3443]472      IF(lwp) THEN
[9169]473          WRITE(numout,*) 
474          WRITE(numout,*) '   Namelist namlobdom'
475          WRITE(numout,*) '      DOM breakdown rate                                 taudomn     =', 86400 * taudn , ' d'
[3443]476      ENDIF
477      !
478   END SUBROUTINE p2z_bio_init
479
480   !!======================================================================
[5656]481END MODULE p2zbio
Note: See TracBrowser for help on using the repository browser.