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/NEMO/TOP_SRC/LOBSTER – NEMO

source: trunk/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 1284

Last change on this file since 1284 was 1264, checked in by cetlod, 15 years ago

clean TOP model routines to avoid warning when compiling, see ticket:303

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