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

Last change on this file since 3028 was 3028, checked in by cetlod, 12 years ago

branch dev_LOCEAN_2011 : minor changes in TOP component relative to the management of additional diagnostics

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