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_r13296_HPC-07_mocavero_mpi3/src/TOP/PISCES/P2Z – NEMO

source: NEMO/branches/2020/dev_r13296_HPC-07_mocavero_mpi3/src/TOP/PISCES/P2Z/p2zbio.F90 @ 13630

Last change on this file since 13630 was 13630, checked in by mocavero, 4 years ago

Add neighborhood collectives calls in the NEMO src - ticket #2496

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