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

source: branches/2012/dev_r3309_LOCEAN12_Ediag/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcbio.F90 @ 3318

Last change on this file since 3318 was 3318, checked in by gm, 12 years ago

Ediag branche: #927 split TRA/DYN trd computation

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