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

source: branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 2636

Last change on this file since 2636 was 2633, checked in by trackstand2, 13 years ago

Renamed wrk_use => wrk_in_use and wrk_release => wrk_not_released

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