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

source: branches/2011/dev_LOCEAN_2011/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 3010

Last change on this file since 3010 was 3010, checked in by cetlod, 13 years ago

branch dev_LOCEAN_2011 : bug correction in LOBSTER

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