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

source: branches/DEV_r2006_merge_TRA_TRC/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 2038

Last change on this file since 2038 was 2038, checked in by cetlod, 14 years ago

Apply the merge to passive tracers, see ticket:693

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