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/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z – NEMO

source: NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zbio.F90 @ 10975

Last change on this file since 10975 was 10975, checked in by acc, 5 years ago

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Finish converting all TOP routines and knock-on effects of these conversions. Fully SETTE tested (SETTE tests 1-6 and 9). This completes the first stage conversion of TRA and TOP but need to revisit and pass ts and tr arrays through the argument lists where appropriate.

  • Property svn:keywords set to Id
File size: 24.7 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 "vectopt_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 jj = 2, jpjm1
124            DO ji = fs_2, fs_jpim1 
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 DO
239         END DO
240      END DO
241
242      !                                      ! -------------------------- !
243      DO jk = jpkb, jpkm1                    !  Upper ocean (bio-layers)  !
244         !                                   ! -------------------------- !
245         DO jj = 2, jpjm1
246            DO ji = fs_2, fs_jpim1 
247               ! remineralisation of all quantities towards nitrate
248
249               !    trophic variables( det, zoo, phy, no3, nh4, dom)
250               !       negative trophic variables DO not contribute to the fluxes
251               zdet = MAX( 0.e0, tr(ji,jj,jk,jpdet,Kmm) )
252               zzoo = MAX( 0.e0, tr(ji,jj,jk,jpzoo,Kmm) )
253               zphy = MAX( 0.e0, tr(ji,jj,jk,jpphy,Kmm) )
254               zno3 = MAX( 0.e0, tr(ji,jj,jk,jpno3,Kmm) )
255               znh4 = MAX( 0.e0, tr(ji,jj,jk,jpnh4,Kmm) )
256               zdom = MAX( 0.e0, tr(ji,jj,jk,jpdom,Kmm) )
257
258               !    Limitations
259               zlt   = 0.e0
260               zle   = 0.e0
261               zlno3 = 0.e0
262               zlnh4 = 0.e0
263
264               !    sinks and sources
265               !       phytoplankton production and exsudation
266               zno3phy = 0.e0
267               znh4phy = 0.e0
268               zphydom = 0.e0
269               zphynh4 = 0.e0
270
271               !    zooplankton production
272               zphyzoo = 0.e0      ! grazing
273               zdetzoo = 0.e0
274
275               zzoodet = 0.e0      ! fecal pellets production
276
277               zzoonh4 = tauzn * fzoolab * zzoo         ! zooplankton liquide excretion
278               zzoodom = tauzn * (1 - fzoolab) * zzoo
279
280               !    mortality
281               zphydet = tmminp * zphy      ! phytoplankton mortality
282
283               zzoobod = 0.e0               ! zooplankton mortality
284               zboddet = 0.e0               ! closure : flux fbod is redistributed below level jpkbio
285
286               !    detritus and dom breakdown
287               zdetnh4 = taudn * fdetlab * zdet
288               zdetdom = taudn * (1 - fdetlab) * zdet
289
290               zdomnh4 = taudomn * zdom
291               zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
292
293               !    Nitrification
294               znh4no3 = taunn * znh4
295
296
297               ! determination of trends
298               !     total trend for each biological tracer
299               zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
300               zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
301               zno3a = - zno3phy + znh4no3 
302               znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
303               zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom + zboddet
304               zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
305
306               ! tracer flux at totox-point added to the general trend
307               tr(ji,jj,jk,jpdet,Krhs) = tr(ji,jj,jk,jpdet,Krhs) + zdeta
308               tr(ji,jj,jk,jpzoo,Krhs) = tr(ji,jj,jk,jpzoo,Krhs) + zzooa
309               tr(ji,jj,jk,jpphy,Krhs) = tr(ji,jj,jk,jpphy,Krhs) + zphya
310               tr(ji,jj,jk,jpno3,Krhs) = tr(ji,jj,jk,jpno3,Krhs) + zno3a
311               tr(ji,jj,jk,jpnh4,Krhs) = tr(ji,jj,jk,jpnh4,Krhs) + znh4a
312               tr(ji,jj,jk,jpdom,Krhs) = tr(ji,jj,jk,jpdom,Krhs) + zdoma
313               !
314                IF( lk_iomput ) THEN                  ! convert fluxes in per day
315                  ze3t = e3t(ji,jj,jk,Kmm) * 86400._wp
316                  zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t
317                  zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
318                  zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
319                  zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
320                  zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
321                  zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
322                  zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
323                  zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
324                  zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
325                  zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
326                  zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
327                  zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
328                  zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
329                  zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t
330                  zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
331                  zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
332                  zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
333                  !   
334                  zw3d(ji,jj,jk,1) = zno3phy * 86400._wp
335                  zw3d(ji,jj,jk,2) = znh4phy * 86400._wp
336                  zw3d(ji,jj,jk,3) = znh4no3 * 86400._wp
337                  !
338               ENDIF
339            END DO
340         END DO
341      END DO
342      !
343      IF( lk_iomput ) THEN
344         CALL lbc_lnk( 'p2zbio', zw2d(:,:,:),'T', 1. )
345         CALL lbc_lnk_multi( 'p2zbio', zw3d(:,:,:,1),'T', 1., zw3d(:,:,:,2),'T', 1., zw3d(:,:,:,3),'T', 1. )
346         ! Save diagnostics
347         CALL iom_put( "TNO3PHY", zw2d(:,:,1) )
348         CALL iom_put( "TNH4PHY", zw2d(:,:,2) )
349         CALL iom_put( "TPHYDOM", zw2d(:,:,3) )
350         CALL iom_put( "TPHYNH4", zw2d(:,:,4) )
351         CALL iom_put( "TPHYZOO", zw2d(:,:,5) )
352         CALL iom_put( "TPHYDET", zw2d(:,:,6) )
353         CALL iom_put( "TDETZOO", zw2d(:,:,7) )
354         CALL iom_put( "TZOODET", zw2d(:,:,8) )
355         CALL iom_put( "TZOOBOD", zw2d(:,:,9) )
356         CALL iom_put( "TZOONH4", zw2d(:,:,10) )
357         CALL iom_put( "TZOODOM", zw2d(:,:,11) )
358         CALL iom_put( "TNH4NO3", zw2d(:,:,12) )
359         CALL iom_put( "TDOMNH4", zw2d(:,:,13) )
360         CALL iom_put( "TDETNH4", zw2d(:,:,14) )
361         CALL iom_put( "TPHYTOT", zw2d(:,:,15) )
362         CALL iom_put( "TZOOTOT", zw2d(:,:,16) )
363         !
364         CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )
365         CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )
366         CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )
367         !
368      ENDIF
369
370      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
371         WRITE(charout, FMT="('bio')")
372         CALL prt_ctl_trc_info(charout)
373         CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm)
374      ENDIF
375      !
376      IF( lk_iomput )   DEALLOCATE( zw2d, zw3d )
377      !
378      IF( ln_timing )  CALL timing_stop('p2z_bio')
379      !
380   END SUBROUTINE p2z_bio
381
382
383   SUBROUTINE p2z_bio_init
384      !!----------------------------------------------------------------------
385      !!                  ***  ROUTINE p2z_bio_init  ***
386      !!
387      !! ** Purpose :  biological parameters
388      !!
389      !! ** Method  :   Read namelist and check the parameters
390      !!
391      !!----------------------------------------------------------------------
392      INTEGER ::   ios   ! Local integer
393      !!
394      NAMELIST/namlobphy/ tmumax, rgamma, fphylab, tmminp, aki
395      NAMELIST/namlobnut/ akno3, aknh4, taunn, psinut
396      NAMELIST/namlobzoo/ rppz, taus, aks, rpnaz, rdnaz, tauzn, fzoolab, fdbod, tmminz
397      NAMELIST/namlobdet/ taudn, fdetlab
398      NAMELIST/namlobdom/ taudomn
399      !!----------------------------------------------------------------------
400      !
401      IF(lwp) WRITE(numout,*)
402      IF(lwp) WRITE(numout,*) ' p2z_bio_init : LOBSTER bio-model initialization'
403      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~'
404      !
405      REWIND( numnatp_ref )              ! Namelist namlobphy in reference namelist : Lobster biological parameters
406      READ  ( numnatp_ref, namlobphy, IOSTAT = ios, ERR = 901)
407901   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobphy in reference namelist', lwp )
408      REWIND( numnatp_cfg )              ! Namelist namlobphy in configuration namelist : Lobster biological parameters
409      READ  ( numnatp_cfg, namlobphy, IOSTAT = ios, ERR = 902 )
410902   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobphy in configuration namelist', lwp )
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      REWIND( numnatp_ref )              ! Namelist namlobnut in reference namelist : Lobster nutriments parameters
423      READ  ( numnatp_ref, namlobnut, IOSTAT = ios, ERR = 903)
424903   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobnut in reference namelist', lwp )
425      REWIND( numnatp_cfg )              ! Namelist namlobnut in configuration namelist : Lobster nutriments parameters
426      READ  ( numnatp_cfg, namlobnut, IOSTAT = ios, ERR = 904 )
427904   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobnut in configuration namelist', lwp )
428      IF(lwm) WRITE ( numonp, namlobnut )
429
430      IF(lwp) THEN
431         WRITE(numout,*) 
432         WRITE(numout,*) '   Namelist namlobnut'
433         WRITE(numout,*) '      half-saturation nutrient for no3 uptake              akno3     =', akno3
434         WRITE(numout,*) '      half-saturation nutrient for nh4 uptake              aknh4     =', aknh4
435         WRITE(numout,*) '      nitrification rate                                   taunn     =', taunn
436         WRITE(numout,*) '      inhibition of no3 uptake by nh4                      psinut    =', psinut
437      ENDIF
438
439      REWIND( numnatp_ref )              ! Namelist namlobzoo in reference namelist : Lobster zooplankton parameters
440      READ  ( numnatp_ref, namlobzoo, IOSTAT = ios, ERR = 905)
441905   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobzoo in reference namelist', lwp )
442      REWIND( numnatp_cfg )              ! Namelist namlobzoo in configuration namelist : Lobster zooplankton parameters
443      READ  ( numnatp_cfg, namlobzoo, IOSTAT = ios, ERR = 906 )
444906   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobzoo in configuration namelist', lwp )
445      IF(lwm) WRITE ( numonp, namlobzoo )
446
447      IF(lwp) THEN
448         WRITE(numout,*) 
449         WRITE(numout,*) '   Namelist namlobzoo'
450         WRITE(numout,*) '      zoo preference for phyto                             rppz      =', rppz
451         WRITE(numout,*) '      maximal zoo grazing rate                             taus      =', 86400 * taus, ' d'
452         WRITE(numout,*) '      half saturation constant for zoo food                aks       =', aks
453         WRITE(numout,*) '      non-assimilated phyto by zoo                         rpnaz     =', rpnaz
454         WRITE(numout,*) '      non-assimilated detritus by zoo                      rdnaz     =', rdnaz
455         WRITE(numout,*) '      zoo specific excretion rate                          tauzn     =', 86400 * tauzn
456         WRITE(numout,*) '      minimal zoo mortality rate                           tmminz    =', 86400 * tmminz
457         WRITE(numout,*) '      NH4 fraction of zooplankton excretion                fzoolab   =', fzoolab
458         WRITE(numout,*) '      Zooplankton mortality fraction that goes to detritus fdbod     =', fdbod
459      ENDIF
460
461      REWIND( numnatp_ref )              ! Namelist namlobdet in reference namelist : Lobster detritus parameters
462      READ  ( numnatp_ref, namlobdet, IOSTAT = ios, ERR = 907)
463907   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdet in reference namelist', lwp )
464      REWIND( numnatp_cfg )              ! Namelist namlobdet in configuration namelist : Lobster detritus parameters
465      READ  ( numnatp_cfg, namlobdet, IOSTAT = ios, ERR = 908 )
466908   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdet in configuration namelist', lwp )
467      IF(lwm) WRITE ( numonp, namlobdet )
468
469      IF(lwp) THEN
470          WRITE(numout,*) 
471          WRITE(numout,*) '   Namelist namlobdet'
472          WRITE(numout,*) '      detrital breakdown rate                              taudn     =', 86400 * taudn , ' d'
473          WRITE(numout,*) '      NH4 fraction of detritus dissolution                 fdetlab   =', fdetlab
474      ENDIF
475
476      REWIND( numnatp_ref )              ! Namelist namlobdom in reference namelist : Lobster DOM breakdown rate
477      READ  ( numnatp_ref, namlobdom, IOSTAT = ios, ERR = 909)
478909   IF( ios /= 0 )   CALL ctl_nam ( ios , 'namlobdom in reference namelist', lwp )
479      REWIND( numnatp_cfg )              ! Namelist namlobdom in configuration namelist : Lobster DOM breakdown rate
480      READ  ( numnatp_cfg, namlobdom, IOSTAT = ios, ERR = 910 )
481910   IF( ios >  0 )   CALL ctl_nam ( ios , 'namlobdom in configuration namelist', lwp )
482      IF(lwm) WRITE ( numonp, namlobdom )
483
484      IF(lwp) THEN
485          WRITE(numout,*) 
486          WRITE(numout,*) '   Namelist namlobdom'
487          WRITE(numout,*) '      DOM breakdown rate                                 taudomn     =', 86400 * taudn , ' d'
488      ENDIF
489      !
490   END SUBROUTINE p2z_bio_init
491
492   !!======================================================================
493END MODULE p2zbio
Note: See TracBrowser for help on using the repository browser.