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

Last change on this file since 3294 was 3294, checked in by rblod, 12 years ago

Merge of 3.4beta into the trunk

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