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 @ 2715

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

First attempt to put dynamic allocation on the trunk

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