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.
trcbio.F90 in trunk/NEMOGCM/NEMO/TOP_SRC/LOBSTER – NEMO

source: trunk/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 2528

Last change on this file since 2528 was 2528, checked in by rblod, 13 years ago

Update NEMOGCM from branch nemo_v3_3_beta

  • Property svn:keywords set to Id
File size: 22.4 KB
Line 
1MODULE trcbio
2   !!======================================================================
3   !!                         ***  MODULE trcbio  ***
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#if defined key_lobster
12   !!----------------------------------------------------------------------
13   !!   'key_lobster'                                     LOBSTER bio-model
14   !!----------------------------------------------------------------------
15   !!   trc_bio        : 
16   !!----------------------------------------------------------------------
17   USE oce_trc         !
18   USE trc             !
19   USE sms_lobster     !
20   USE lbclnk          !
21   USE prtctl_trc      ! Print control for debbuging
22   USE trdmod_oce
23   USE trdmod_trc
24   USE iom
25   
26   IMPLICIT NONE
27   PRIVATE
28
29   PUBLIC   trc_bio    ! called in ???
30
31   !!* Substitution
32#  include "top_substitute.h90"
33   !!----------------------------------------------------------------------
34   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
35   !! $Id$
36   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
37   !!----------------------------------------------------------------------
38
39CONTAINS
40
41   SUBROUTINE trc_bio( kt )
42      !!---------------------------------------------------------------------
43      !!                     ***  ROUTINE trc_bio  ***
44      !!
45      !! ** Purpose :   compute the now trend due to biogeochemical processes
46      !!              and add it to the general trend of passive tracers equations
47      !!
48      !! ** Method  :   each now biological flux is calculated in function of now
49      !!              concentrations of tracers.
50      !!              depending on the tracer, these fluxes are sources or sinks.
51      !!              the total of the sources and sinks for each tracer
52      !!              is added to the general trend.
53      !!       
54      !!                      tra = tra + zf...tra - zftra...
55      !!                                     |         |
56      !!                                     |         |
57      !!                                  source      sink
58      !!       
59      !!              IF 'key_diabio' defined , the biogeochemical trends
60      !!              for passive tracers are saved for futher diagnostics.
61      !!---------------------------------------------------------------------
62      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index     
63      !!
64      INTEGER  ::   ji, jj, jk, jl
65      REAL(wp) ::   zdet, zzoo, zphy, zno3, znh4, zdom      ! now concentrations
66      REAL(wp) ::   zlno3, zlnh4, zle, zlt                  ! limitation terms for phyto
67      REAL(wp) ::   zno3phy, znh4phy, zphynh4, zphydom
68      REAL(wp) ::   zphydet, zphyzoo, zdetzoo
69      REAL(wp) ::   zzoonh4, zzoodom, zzoodet, zdetnh4, zdetdom
70      REAL(wp) ::   znh4no3, zdomnh4, zppz, zpdz, zpppz, zppdz, zfood
71      REAL(wp) ::   zfilpz, zfildz, zphya, zzooa, zno3a
72      REAL(wp) ::   znh4a, zdeta, zdoma, zzoobod, zboddet, zdomaju
73#if defined key_diatrc
74      REAL(wp) ::   ze3t
75#endif
76#if defined key_diatrc && defined key_iomput
77      REAL(wp), DIMENSION(jpi,jpj,17)     :: zw2d
78      REAL(wp), DIMENSION(jpi,jpj,jpk,3) :: zw3d
79#endif
80      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   ztrbio
81      CHARACTER (len=25) :: charout
82      !!---------------------------------------------------------------------
83
84      IF( kt == nit000 ) THEN
85         IF(lwp) WRITE(numout,*)
86         IF(lwp) WRITE(numout,*) ' trc_bio: LOBSTER bio-model'
87         IF(lwp) WRITE(numout,*) ' ~~~~~~~'
88      ENDIF
89
90      fbod(:,:) = 0.e0
91#if defined key_diatrc && ! defined key_iomput
92      DO jl = jp_lob0_2d, jp_lob1_2d
93         trc2d(:,:,jl) = 0.e0
94      END DO 
95#endif
96#if defined key_diatrc && defined key_iomput
97      zw2d(:,:,:) = 0.e0
98      zw3d(:,:,:,:) = 0.e0
99#endif
100
101      IF( l_trdtrc )THEN
102         ALLOCATE( ztrbio(jpi,jpj,jpk,jp_lobster_trd) )
103         ztrbio(:,:,:,:) = 0.
104      ENDIF
105
106      !                                      ! -------------------------- !
107      DO jk = 1, jpkbm1                      !  Upper ocean (bio-layers)  !
108         !                                   ! -------------------------- !
109         DO jj = 2, jpjm1
110            DO ji = fs_2, fs_jpim1 
111               ! trophic variables( det, zoo, phy, no3, nh4, dom)
112               ! ------------------------------------------------
113
114               ! negative trophic variables DO not contribute to the fluxes
115               zdet = MAX( 0.e0, trn(ji,jj,jk,jp_lob_det) )
116               zzoo = MAX( 0.e0, trn(ji,jj,jk,jp_lob_zoo) )
117               zphy = MAX( 0.e0, trn(ji,jj,jk,jp_lob_phy) )
118               zno3 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_no3) )
119               znh4 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_nh4) )
120               zdom = MAX( 0.e0, trn(ji,jj,jk,jp_lob_dom) )
121
122               ! Limitations
123               zlt   = 1.
124               zle   = 1. - EXP( -xpar(ji,jj,jk) / aki / zlt )
125               ! psinut,akno3,aknh4 added by asklod AS Kremeur 2005-03
126               zlno3 = zno3 * EXP( -psinut * znh4 ) / ( akno3 + zno3 )
127               zlnh4 = znh4 / (znh4+aknh4) 
128
129               ! sinks and sources
130               !    phytoplankton production and exsudation
131               zno3phy = tmumax * zle * zlt * zlno3 * zphy
132               znh4phy = tmumax * zle * zlt * zlnh4 * zphy
133
134               !    fphylab added by asklod AS Kremeur 2005-03
135               zphydom = rgamma * (1 - fphylab) * (zno3phy + znh4phy)
136               zphynh4 = rgamma * fphylab * (zno3phy + znh4phy)
137
138               ! zooplankton production
139               !    preferences
140               zppz = rppz
141               zpdz = 1. - rppz
142               zpppz = ( zppz * zphy ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
143               zppdz = ( zpdz * zdet ) / ( ( zppz * zphy + zpdz * zdet ) + 1.e-13 )
144               zfood = zpppz * zphy + zppdz * zdet
145               !    filtration
146               zfilpz = taus * zpppz / (aks + zfood)
147               zfildz = taus * zppdz / (aks + zfood)
148               !    grazing
149               zphyzoo = zfilpz * zphy * zzoo
150               zdetzoo = zfildz * zdet * zzoo
151
152               ! fecal pellets production
153               zzoodet = rpnaz * zphyzoo + rdnaz * zdetzoo
154 
155               ! zooplankton liquide excretion
156               zzoonh4 = tauzn * fzoolab * zzoo 
157               zzoodom = tauzn * (1 - fzoolab) * zzoo
158
159               ! mortality
160               !    phytoplankton mortality
161               zphydet = tmminp * zphy
162
163               !    zooplankton mortality
164               !    closure : flux fbod is redistributed below level jpkbio
165               zzoobod = tmminz * zzoo * zzoo
166               fbod(ji,jj) = fbod(ji,jj) + (1-fdbod) * zzoobod * fse3t(ji,jj,jk)
167               zboddet = fdbod * zzoobod
168
169               ! detritus and dom breakdown
170               zdetnh4 = taudn * fdetlab * zdet
171               zdetdom = taudn * (1 - fdetlab) * zdet 
172
173               zdomnh4 = taudomn * zdom
174
175               ! flux added to express how the excess of nitrogen from
176               ! PHY, ZOO and DET to DOM goes directly to NH4 (flux of ajustment)
177               zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
178
179               ! Nitrification
180               znh4no3 = taunn * znh4
181
182               ! determination of trends
183               !    total trend for each biological tracer
184               zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
185               zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
186               zno3a = - zno3phy + znh4no3
187               znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
188               zdeta =   zphydet + zzoodet - zdetzoo - zdetnh4 - zdetdom + zboddet
189               zdoma =   zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
190
191               ! tracer flux at totox-point added to the general trend
192               tra(ji,jj,jk,jp_lob_det) = tra(ji,jj,jk,jp_lob_det) + zdeta
193               tra(ji,jj,jk,jp_lob_zoo) = tra(ji,jj,jk,jp_lob_zoo) + zzooa
194               tra(ji,jj,jk,jp_lob_phy) = tra(ji,jj,jk,jp_lob_phy) + zphya
195               tra(ji,jj,jk,jp_lob_no3) = tra(ji,jj,jk,jp_lob_no3) + zno3a
196               tra(ji,jj,jk,jp_lob_nh4) = tra(ji,jj,jk,jp_lob_nh4) + znh4a
197               tra(ji,jj,jk,jp_lob_dom) = tra(ji,jj,jk,jp_lob_dom) + zdoma
198
199#if defined key_diabio
200               trbio(ji,jj,jk,jp_lob0_trd     ) = zno3phy
201               trbio(ji,jj,jk,jp_lob0_trd +  1) = znh4phy
202               trbio(ji,jj,jk,jp_lob0_trd +  2) = zphynh4
203               trbio(ji,jj,jk,jp_lob0_trd +  3) = zphydom
204               trbio(ji,jj,jk,jp_lob0_trd +  4) = zphyzoo
205               trbio(ji,jj,jk,jp_lob0_trd +  5) = zphydet
206               trbio(ji,jj,jk,jp_lob0_trd +  6) = zdetzoo
207               trbio(ji,jj,jk,jp_lob0_trd +  8) = zzoodet
208               trbio(ji,jj,jk,jp_lob0_trd +  9) = zzoobod
209               trbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4
210               trbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom
211               trbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3
212               trbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4
213               trbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4
214               trbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom
215#endif
216               IF( l_trdtrc ) THEN
217                  ztrbio(ji,jj,jk,jp_lob0_trd     ) = zno3phy
218                  ztrbio(ji,jj,jk,jp_lob0_trd +  1) = znh4phy
219                  ztrbio(ji,jj,jk,jp_lob0_trd +  2) = zphynh4
220                  ztrbio(ji,jj,jk,jp_lob0_trd +  3) = zphydom
221                  ztrbio(ji,jj,jk,jp_lob0_trd +  4) = zphyzoo
222                  ztrbio(ji,jj,jk,jp_lob0_trd +  5) = zphydet
223                  ztrbio(ji,jj,jk,jp_lob0_trd +  6) = zdetzoo
224                  !  trend number 8 in trcsed
225                  ztrbio(ji,jj,jk,jp_lob0_trd +  8) = zzoodet
226                  ztrbio(ji,jj,jk,jp_lob0_trd +  9) = zzoobod
227                  ztrbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4
228                  ztrbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom
229                  ztrbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3
230                  ztrbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4
231                  ztrbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4
232                  ztrbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom
233                  !  trend number 17 in trcexp
234                ENDIF
235
236#if defined key_diatrc
237               ! convert fluxes in per day
238               ze3t = fse3t(ji,jj,jk) * 86400.
239#if ! defined key_iomput
240               trc2d(ji,jj,jp_lob0_2d    ) = trc2d(ji,jj, jp_lob0_2d    ) + zno3phy * ze3t 
241               trc2d(ji,jj,jp_lob0_2d + 1) = trc2d(ji,jj, jp_lob0_2d + 1) + znh4phy * ze3t
242               trc2d(ji,jj,jp_lob0_2d + 2) = trc2d(ji,jj, jp_lob0_2d + 2) + zphydom * ze3t
243               trc2d(ji,jj,jp_lob0_2d + 3) = trc2d(ji,jj, jp_lob0_2d + 3) + zphynh4 * ze3t
244               trc2d(ji,jj,jp_lob0_2d + 4) = trc2d(ji,jj, jp_lob0_2d + 4) + zphyzoo * ze3t
245               trc2d(ji,jj,jp_lob0_2d + 5) = trc2d(ji,jj, jp_lob0_2d + 5) + zphydet * ze3t
246               trc2d(ji,jj,jp_lob0_2d + 6) = trc2d(ji,jj, jp_lob0_2d + 6) + zdetzoo * ze3t
247               ! trend number 8 is in trcsed.F           
248               trc2d(ji,jj,jp_lob0_2d +  8) = trc2d(ji,jj,jp_lob0_2d +  8) + zzoodet * ze3t
249               trc2d(ji,jj,jp_lob0_2d +  9) = trc2d(ji,jj,jp_lob0_2d +  9) + zzoobod * ze3t
250               trc2d(ji,jj,jp_lob0_2d + 10) = trc2d(ji,jj,jp_lob0_2d + 10) + zzoonh4 * ze3t
251               trc2d(ji,jj,jp_lob0_2d + 11) = trc2d(ji,jj,jp_lob0_2d + 11) + zzoodom * ze3t
252               trc2d(ji,jj,jp_lob0_2d + 12) = trc2d(ji,jj,jp_lob0_2d + 12) + znh4no3 * ze3t
253               trc2d(ji,jj,jp_lob0_2d + 13) = trc2d(ji,jj,jp_lob0_2d + 13) + zdomnh4 * ze3t
254               trc2d(ji,jj,jp_lob0_2d + 14) = trc2d(ji,jj,jp_lob0_2d + 14) + zdetnh4 * ze3t             
255               trc2d(ji,jj,jp_lob0_2d + 15) = trc2d(ji,jj,jp_lob0_2d + 15) + (  zno3phy + znh4phy - zphynh4   &
256                  &                                 - zphydom - zphyzoo - zphydet ) * ze3t
257               trc2d(ji,jj,jp_lob0_2d + 16) = trc2d(ji,jj,jp_lob0_2d + 16) + (  zphyzoo + zdetzoo - zzoodet   &
258                  &                                 - zzoobod - zzoonh4 - zzoodom ) * ze3t
259               trc2d(ji,jj,jp_lob0_2d + 17) = trc2d(ji,jj,jp_lob0_2d + 17) + zdetdom * ze3t
260               ! trend number 19 is in trcexp.F
261#else
262               zw2d(ji,jj,1)  = zw2d(ji,jj,1)  + zno3phy * ze3t 
263               zw2d(ji,jj,2)  = zw2d(ji,jj,2)  + znh4phy * ze3t
264               zw2d(ji,jj,3)  = zw2d(ji,jj,3)  + zphydom * ze3t
265               zw2d(ji,jj,4)  = zw2d(ji,jj,4)  + zphynh4 * ze3t
266               zw2d(ji,jj,5)  = zw2d(ji,jj,5)  + zphyzoo * ze3t
267               zw2d(ji,jj,6)  = zw2d(ji,jj,6)  + zphydet * ze3t
268               zw2d(ji,jj,7)  = zw2d(ji,jj,7)  + zdetzoo * ze3t
269               zw2d(ji,jj,8)  = zw2d(ji,jj,8)  + zzoodet * ze3t
270               zw2d(ji,jj,9)  = zw2d(ji,jj,9)  + zzoobod * ze3t
271               zw2d(ji,jj,10) = zw2d(ji,jj,10) + zzoonh4 * ze3t
272               zw2d(ji,jj,11) = zw2d(ji,jj,11) + zzoodom * ze3t
273               zw2d(ji,jj,12) = zw2d(ji,jj,12) + znh4no3 * ze3t
274               zw2d(ji,jj,13) = zw2d(ji,jj,13) + zdomnh4 * ze3t
275               zw2d(ji,jj,14) = zw2d(ji,jj,14) + zdetnh4 * ze3t             
276               zw2d(ji,jj,15) = zw2d(ji,jj,15) + ( zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet ) * ze3t
277               zw2d(ji,jj,16) = zw2d(ji,jj,16) + ( zphyzoo + zdetzoo - zzoodet - zzoobod - zzoonh4 - zzoodom ) * ze3t
278               zw2d(ji,jj,17) = zw2d(ji,jj,17) + zdetdom * ze3t
279#endif
280#if defined key_diatrc 
281# if ! defined key_iomput
282               trc3d(ji,jj,jk,jp_lob0_3d    ) = zno3phy * 86400     
283               trc3d(ji,jj,jk,jp_lob0_3d + 1) = znh4phy * 86400     
284               trc3d(ji,jj,jk,jp_lob0_3d + 2) = znh4no3 * 86400   
285# else
286               zw3d(ji,jj,jk,1) = zno3phy * 86400     
287               zw3d(ji,jj,jk,2) = znh4phy * 86400     
288               zw3d(ji,jj,jk,3) = znh4no3 * 86400   
289# endif
290#endif 
291#endif
292            END DO
293         END DO
294      END DO
295
296      !                                      ! -------------------------- !
297      DO jk = jpkb, jpkm1                    !  Upper ocean (bio-layers)  !
298         !                                   ! -------------------------- !
299         DO jj = 2, jpjm1
300            DO ji = fs_2, fs_jpim1 
301               ! remineralisation of all quantities towards nitrate
302
303               !    trophic variables( det, zoo, phy, no3, nh4, dom)
304               !       negative trophic variables DO not contribute to the fluxes
305               zdet = MAX( 0.e0, trn(ji,jj,jk,jp_lob_det) )
306               zzoo = MAX( 0.e0, trn(ji,jj,jk,jp_lob_zoo) )
307               zphy = MAX( 0.e0, trn(ji,jj,jk,jp_lob_phy) )
308               zno3 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_no3) )
309               znh4 = MAX( 0.e0, trn(ji,jj,jk,jp_lob_nh4) )
310               zdom = MAX( 0.e0, trn(ji,jj,jk,jp_lob_dom) )
311
312               !    Limitations
313               zlt   = 0.e0
314               zle   = 0.e0
315               zlno3 = 0.e0
316               zlnh4 = 0.e0
317
318               !    sinks and sources
319               !       phytoplankton production and exsudation
320               zno3phy = 0.e0
321               znh4phy = 0.e0
322               zphydom = 0.e0
323               zphynh4 = 0.e0
324
325               !    zooplankton production
326               zphyzoo = 0.e0      ! grazing
327               zdetzoo = 0.e0
328
329               zzoodet = 0.e0      ! fecal pellets production
330
331               zzoonh4 = tauzn * fzoolab * zzoo         ! zooplankton liquide excretion
332               zzoodom = tauzn * (1 - fzoolab) * zzoo
333
334               !    mortality
335               zphydet = tmminp * zphy      ! phytoplankton mortality
336
337               zzoobod = 0.e0               ! zooplankton mortality
338               zboddet = 0.e0               ! closure : flux fbod is redistributed below level jpkbio
339
340               !    detritus and dom breakdown
341               zdetnh4 = taudn * fdetlab * zdet
342               zdetdom = taudn * (1 - fdetlab) * zdet 
343
344               zdomnh4 = taudomn * zdom
345               zdomaju = (1 - redf/reddom) * (zphydom + zzoodom + zdetdom)
346
347               !    Nitrification
348               znh4no3 = taunn * znh4
349
350
351               ! determination of trends
352               !     total trend for each biological tracer
353               zphya =   zno3phy + znh4phy - zphynh4 - zphydom - zphyzoo - zphydet
354               zzooa =   zphyzoo + zdetzoo - zzoodet - zzoodom - zzoonh4 - zzoobod
355               zno3a = - zno3phy + znh4no3
356               znh4a = - znh4phy - znh4no3 + zphynh4 + zzoonh4 + zdomnh4 + zdetnh4 + zdomaju
357               zdeta = zphydet + zzoodet  - zdetzoo - zdetnh4 - zdetdom + zboddet
358               zdoma = zphydom + zzoodom + zdetdom - zdomnh4 - zdomaju
359
360               ! tracer flux at totox-point added to the general trend
361               tra(ji,jj,jk,jp_lob_det) = tra(ji,jj,jk,jp_lob_det) + zdeta
362               tra(ji,jj,jk,jp_lob_zoo) = tra(ji,jj,jk,jp_lob_zoo) + zzooa
363               tra(ji,jj,jk,jp_lob_phy) = tra(ji,jj,jk,jp_lob_phy) + zphya
364               tra(ji,jj,jk,jp_lob_no3) = tra(ji,jj,jk,jp_lob_no3) + zno3a
365               tra(ji,jj,jk,jp_lob_nh4) = tra(ji,jj,jk,jp_lob_nh4) + znh4a
366               tra(ji,jj,jk,jp_lob_dom) = tra(ji,jj,jk,jp_lob_dom) + zdoma
367               !
368#if defined key_diabio
369               trbio(ji,jj,jk,jp_lob0_trd     ) = zno3phy
370               trbio(ji,jj,jk,jp_lob0_trd +  1) = znh4phy
371               trbio(ji,jj,jk,jp_lob0_trd +  2) = zphynh4
372               trbio(ji,jj,jk,jp_lob0_trd +  3) = zphydom
373               trbio(ji,jj,jk,jp_lob0_trd +  4) = zphyzoo
374               trbio(ji,jj,jk,jp_lob0_trd +  5) = zphydet
375               trbio(ji,jj,jk,jp_lob0_trd +  6) = zdetzoo
376               trbio(ji,jj,jk,jp_lob0_trd +  8) = zzoodet
377               trbio(ji,jj,jk,jp_lob0_trd +  9) = zzoobod
378               trbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4
379               trbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom
380               trbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3
381               trbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4
382               trbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4
383               trbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom
384#endif
385               IF( l_trdtrc ) THEN
386                  ztrbio(ji,jj,jk,jp_lob0_trd     ) = zno3phy
387                  ztrbio(ji,jj,jk,jp_lob0_trd +  1) = znh4phy
388                  ztrbio(ji,jj,jk,jp_lob0_trd +  2) = zphynh4
389                  ztrbio(ji,jj,jk,jp_lob0_trd +  3) = zphydom
390                  ztrbio(ji,jj,jk,jp_lob0_trd +  4) = zphyzoo
391                  ztrbio(ji,jj,jk,jp_lob0_trd +  5) = zphydet
392                  ztrbio(ji,jj,jk,jp_lob0_trd +  6) = zdetzoo
393                  !  trend number 8 in trcsed
394                  ztrbio(ji,jj,jk,jp_lob0_trd +  8) = zzoodet
395                  ztrbio(ji,jj,jk,jp_lob0_trd +  9) = zzoobod
396                  ztrbio(ji,jj,jk,jp_lob0_trd + 10) = zzoonh4
397                  ztrbio(ji,jj,jk,jp_lob0_trd + 11) = zzoodom
398                  ztrbio(ji,jj,jk,jp_lob0_trd + 12) = znh4no3
399                  ztrbio(ji,jj,jk,jp_lob0_trd + 13) = zdomnh4
400                  ztrbio(ji,jj,jk,jp_lob0_trd + 14) = zdetnh4
401                  ztrbio(ji,jj,jk,jp_lob0_trd + 15) = zdetdom
402                  !  trend number 17 in trcexp
403                ENDIF
404#if defined key_diatrc
405# if ! defined key_iomput
406               trc3d(ji,jj,jk,jp_lob0_3d    ) =  zno3phy * 86400     
407               trc3d(ji,jj,jk,jp_lob0_3d + 1) =  znh4phy * 86400     
408               trc3d(ji,jj,jk,jp_lob0_3d + 2) =  znh4no3 * 86400     
409# else
410               zw3d(ji,jj,jk,1) = zno3phy * 86400     
411               zw3d(ji,jj,jk,2) = znh4phy * 86400     
412               zw3d(ji,jj,jk,3) = znh4no3 * 86400   
413# endif
414#endif
415            END DO
416         END DO
417      END DO
418
419#if defined key_diatrc
420      ! Lateral boundary conditions
421# if ! defined key_iomput
422      DO jl = jp_lob0_2d, jp_lob1_2d
423          CALL lbc_lnk( trc2d(:,:,jl),'T', 1. )
424      END DO 
425# else
426      DO jl = 1, 17 
427          CALL lbc_lnk( zw2d(:,:,jl),'T', 1. )
428      END DO
429      ! Save diagnostics
430      CALL iom_put( "TNO3PHY", zw2d(:,:,1) )
431      CALL iom_put( "TNH4PHY", zw2d(:,:,2) )
432      CALL iom_put( "TPHYDOM", zw2d(:,:,3) )
433      CALL iom_put( "TPHYNH4", zw2d(:,:,4) )
434      CALL iom_put( "TPHYZOO", zw2d(:,:,5) )
435      CALL iom_put( "TPHYDET", zw2d(:,:,6) )
436      CALL iom_put( "TDETZOO", zw2d(:,:,7) )
437      CALL iom_put( "TZOODET", zw2d(:,:,8) )
438      CALL iom_put( "TZOOBOD", zw2d(:,:,9) )
439      CALL iom_put( "TZOONH4", zw2d(:,:,10) )
440      CALL iom_put( "TZOODOM", zw2d(:,:,11) )
441      CALL iom_put( "TNH4NO3", zw2d(:,:,12) )
442      CALL iom_put( "TDOMNH4", zw2d(:,:,13) )
443      CALL iom_put( "TDETNH4", zw2d(:,:,14) )
444      CALL iom_put( "TPHYTOT", zw2d(:,:,15) )
445      CALL iom_put( "TZOOTOT", zw2d(:,:,16) )
446      CALL iom_put( "TDETDOM", zw2d(:,:,17) )
447# endif
448#endif
449
450#if defined key_diatrc
451      ! Lateral boundary conditions
452# if ! defined key_iomput
453      DO jl = jp_lob0_3d, jp_lob1_3d
454          CALL lbc_lnk( trc3d(:,:,1,jl),'T', 1. )
455      END DO 
456# else
457      DO jl = 1, 3
458          CALL lbc_lnk( zw3d(:,:,:,jl),'T', 1. )
459      END DO
460      ! save diagnostics
461      CALL iom_put( "FNO3PHY", zw3d(:,:,:,1) )
462      CALL iom_put( "FNH4PHY", zw3d(:,:,:,2) )
463      CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) )
464# endif 
465#endif
466
467#if defined key_diabio
468      ! Lateral boundary conditions on trcbio
469      DO jl = jp_lob0_trd, jp_lob1_trd
470          CALL lbc_lnk( trbio(:,:,1,jl),'T', 1. )
471      END DO 
472#endif
473      !
474      IF( l_trdtrc ) THEN
475         DO jl = jp_lob0_trd, jp_lob1_trd
476            CALL trd_mod_trc( ztrbio(:,:,:,jl), jl, kt )   ! handle the trend
477         END DO
478      ENDIF
479
480      IF( l_trdtrc ) DEALLOCATE( ztrbio )
481
482      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
483         WRITE(charout, FMT="('bio')")
484         CALL prt_ctl_trc_info(charout)
485         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
486      ENDIF
487
488   END SUBROUTINE trc_bio
489
490#else
491   !!======================================================================
492   !!  Dummy module :                                   No PISCES bio-model
493   !!======================================================================
494CONTAINS
495   SUBROUTINE trc_bio( kt )                   ! Empty routine
496      INTEGER, INTENT( in ) ::   kt
497      WRITE(*,*) 'trc_bio: You should not have seen this print! error?', kt
498   END SUBROUTINE trc_bio
499#endif 
500
501   !!======================================================================
502END MODULE  trcbio
Note: See TracBrowser for help on using the repository browser.