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

source: branches/DEV_r1784_mid_year_merge_2010/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 1953

Last change on this file since 1953 was 1953, checked in by acc, 14 years ago

ticket #684 step 3: Add in changes from the trunk between revisions 1784 and 1821. No conflicts so far

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