source: NEMO/trunk/src/TOP/PISCES/P2Z/p2zbio.F90 @ 13226

Last change on this file since 13226 was 13226, checked in by orioltp, 3 months ago

Merging dev_r12512_HPC-04_mcastril_Mixed_Precision_implementation into the trunk

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