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
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          ! 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#  include "domzgr_substitute.h90"
61#  include "single_precision_substitute.h90"
62   !!----------------------------------------------------------------------
63   !! NEMO/TOP 4.0 , NEMO Consortium (2018)
64   !! $Id$
65   !! Software governed by the CeCILL license (see ./LICENSE)
66   !!----------------------------------------------------------------------
67CONTAINS
68
69   SUBROUTINE p2z_bio( kt, Kmm, Krhs )
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      !!       
82      !!                      tr(Krhs) = tr(Krhs) + zf...tr(Krhs) - zftra...
83      !!                                     |         |
84      !!                                     |         |
85      !!                                  source      sink
86      !!       
87      !!---------------------------------------------------------------------
88      INTEGER, INTENT( in ) ::   kt             ! ocean time-step index     
89      INTEGER, INTENT( in ) ::   Kmm, Krhs      ! time level indices
90      !
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
101      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:)   ::   zw2d
102      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   zw3d
103      CHARACTER (len=25) :: charout
104      !!---------------------------------------------------------------------
105      !
106      IF( ln_timing )   CALL timing_start('p2z_bio')
107      !
108      IF( lk_iomput )   ALLOCATE( zw2d(jpi,jpj,17), zw3d(jpi,jpj,jpk,3) )
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
116      xksi(:,:) = 0.e0        ! zooplakton closure ( fbod)
117      IF( lk_iomput ) THEN
118         zw2d  (:,:,:) = 0._wp
119         zw3d(:,:,:,:) = 0._wp
120      ENDIF
121
122      !                                      ! -------------------------- !
123      DO jk = 1, jpkbm1                      !  Upper ocean (bio-layers)  !
124         !                                   ! -------------------------- !
125         DO_2D( 0, 0, 0, 0 )
126            ! trophic variables( det, zoo, phy, no3, nh4, dom)
127            ! ------------------------------------------------
128
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) )
136
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) 
143
144            ! sinks and sources
145            !    phytoplankton production and exsudation
146            zno3phy = tmumax * zle * zlt * zlno3 * zphy
147            znh4phy = tmumax * zle * zlt * zlnh4 * zphy
148
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
165
166            ! fecal pellets production
167            zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
168
169            ! zooplankton liquide excretion
170            zzoonh4 = tauzn * fzoolab * zzoo 
171            zzoodom = tauzn * (1 - fzoolab) * zzoo
172
173            ! mortality
174            !    phytoplankton mortality
175            zphydet = tmminp * zphy
176
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
182
183            ! detritus and dom breakdown
184            zdetnh4 = taudn * fdetlab * zdet
185            zdetdom = taudn * (1 - fdetlab) * zdet
186
187            zdomnh4 = taudomn * zdom
188
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)
192
193            ! Nitrification
194            znh4no3 = taunn * znh4
195
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
204
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
212
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
240      END DO
241
242      !                                      ! -------------------------- !
243      DO jk = jpkb, jpkm1                    !  Upper ocean (bio-layers)  !
244         !                                   ! -------------------------- !
245         DO_2D( 0, 0, 0, 0 )
246            ! remineralisation of all quantities towards nitrate
247
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) )
256
257            !    Limitations
258            zlt   = 0.e0
259            zle   = 0.e0
260            zlno3 = 0.e0
261            zlnh4 = 0.e0
262
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
269
270            !    zooplankton production
271            zphyzoo = 0.e0      ! grazing
272            zdetzoo = 0.e0
273
274            zzoodet = 0.e0      ! fecal pellets production
275
276            zzoonh4 = tauzn * fzoolab * zzoo         ! zooplankton liquide excretion
277            zzoodom = tauzn * (1 - fzoolab) * zzoo
278
279            !    mortality
280            zphydet = tmminp * zphy      ! phytoplankton mortality
281
282            zzoobod = 0.e0               ! zooplankton mortality
283            zboddet = 0.e0               ! closure : flux fbod is redistributed below level jpkbio
284
285            !    detritus and dom breakdown
286            zdetnh4 = taudn * fdetlab * zdet
287            zdetdom = taudn * (1 - fdetlab) * zdet
288
289            zdomnh4 = taudomn * zdom
290            zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
291
292            !    Nitrification
293            znh4no3 = taunn * znh4
294
295
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
304
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
336               !
337            ENDIF
338         END_2D
339      END DO
340      !
341      IF( lk_iomput ) THEN
342         CALL lbc_lnk( 'p2zbio', zw2d(:,:,:),'T', 1.0_wp )
343         CALL lbc_lnk( 'p2zbio', zw3d(:,:,:,1),'T', 1.0_wp, zw3d(:,:,:,2),'T', 1.0_wp, zw3d(:,:,:,3),'T', 1.0_wp )
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) )
361         !
362         CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )
363         CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )
364         CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )
365         !
366      ENDIF
367
368      IF(sn_cfctl%l_prttrc)   THEN  ! print mean trends (used for debugging)
369         WRITE(charout, FMT="('bio')")
370         CALL prt_ctl_info( charout, cdcomp = 'top' )
371         CALL prt_ctl(tab4d_1=CASTWP(tr(:,:,:,:,Krhs)), mask1=tmask, clinfo=ctrcnm)
372      ENDIF
373      !
374      IF( lk_iomput )   DEALLOCATE( zw2d, zw3d )
375      !
376      IF( ln_timing )  CALL timing_stop('p2z_bio')
377      !
378   END SUBROUTINE p2z_bio
379
380
381   SUBROUTINE p2z_bio_init
382      !!----------------------------------------------------------------------
383      !!                  ***  ROUTINE p2z_bio_init  ***
384      !!
385      !! ** Purpose :  biological parameters
386      !!
387      !! ** Method  :   Read namelist and check the parameters
388      !!
389      !!----------------------------------------------------------------------
390      INTEGER ::   ios   ! Local integer
391      !!
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
395      NAMELIST/namlobdet/ taudn, fdetlab
396      NAMELIST/namlobdom/ taudomn
397      !!----------------------------------------------------------------------
398      !
399      IF(lwp) WRITE(numout,*)
400      IF(lwp) WRITE(numout,*) ' p2z_bio_init : LOBSTER bio-model initialization'
401      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~'
402      !
403      READ  ( numnatp_ref, namlobphy, IOSTAT = ios, ERR = 901)
404901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobphy in reference namelist' )
405      READ  ( numnatp_cfg, namlobphy, IOSTAT = ios, ERR = 902 )
406902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobphy in configuration namelist' )
407      IF(lwm) WRITE ( numonp, namlobphy )
408      !
409      IF(lwp) THEN
410         WRITE(numout,*) '   Namelist namlobphy'
411         WRITE(numout,*) '      phyto max growth rate                                tmumax    =', 86400 * tmumax, ' d'
412         WRITE(numout,*) '      phytoplankton exudation fraction                     rgamma    =', rgamma
413         WRITE(numout,*) '      NH4 fraction of phytoplankton exsudation             fphylab   =', fphylab
414         WRITE(numout,*) '      minimal phyto mortality rate                         tmminp    =', 86400 * tmminp
415         WRITE(numout,*) '      light hlaf saturation constant                       aki       =', aki
416      ENDIF
417
418      READ  ( numnatp_ref, namlobnut, IOSTAT = ios, ERR = 903)
419903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobnut in reference namelist' )
420      READ  ( numnatp_cfg, namlobnut, IOSTAT = ios, ERR = 904 )
421904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobnut in configuration namelist' )
422      IF(lwm) WRITE ( numonp, namlobnut )
423
424      IF(lwp) THEN
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
431      ENDIF
432
433      READ  ( numnatp_ref, namlobzoo, IOSTAT = ios, ERR = 905)
434905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobzoo in reference namelist' )
435      READ  ( numnatp_cfg, namlobzoo, IOSTAT = ios, ERR = 906 )
436906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobzoo in configuration namelist' )
437      IF(lwm) WRITE ( numonp, namlobzoo )
438
439      IF(lwp) THEN
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
451      ENDIF
452
453      READ  ( numnatp_ref, namlobdet, IOSTAT = ios, ERR = 907)
454907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdet in reference namelist' )
455      READ  ( numnatp_cfg, namlobdet, IOSTAT = ios, ERR = 908 )
456908   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdet in configuration namelist' )
457      IF(lwm) WRITE ( numonp, namlobdet )
458
459      IF(lwp) THEN
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
464      ENDIF
465
466      READ  ( numnatp_ref, namlobdom, IOSTAT = ios, ERR = 909)
467909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdom in reference namelist' )
468      READ  ( numnatp_cfg, namlobdom, IOSTAT = ios, ERR = 910 )
469910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdom in configuration namelist' )
470      IF(lwm) WRITE ( numonp, namlobdom )
471
472      IF(lwp) THEN
473          WRITE(numout,*) 
474          WRITE(numout,*) '   Namelist namlobdom'
475          WRITE(numout,*) '      DOM breakdown rate                                 taudomn     =', 86400 * taudn , ' d'
476      ENDIF
477      !
478   END SUBROUTINE p2z_bio_init
479
480   !!======================================================================
481END MODULE p2zbio
Note: See TracBrowser for help on using the repository browser.