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.
trcbbl_adv.h90 in trunk/NEMO/TOP_SRC/TRP – NEMO

source: trunk/NEMO/TOP_SRC/TRP/trcbbl_adv.h90 @ 489

Last change on this file since 489 was 403, checked in by opalod, 18 years ago

nemo_v1_bugfix_022 : CT :

  • bug correction for the BBL advection
  • remove the diffusive part in trabbl_adv.h90
  • additional code was added for the case of neos=1.
  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 19.5 KB
Line 
1   !!----------------------------------------------------------------------
2   !!                     ***  trcbbl_adv.h90  ***
3   !!----------------------------------------------------------------------
4
5   !!----------------------------------------------------------------------
6   !!   TOP 1.0 , LOCEAN-IPSL (2005)
7   !! $Header$
8   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
9   !!----------------------------------------------------------------------
10
11   SUBROUTINE trc_bbl_adv( kt )
12      !!----------------------------------------------------------------------
13      !!                  ***  ROUTINE trc_bbl_adv  ***
14      !!                   
15      !! ** Purpose :   Compute the before tracer trend associated
16      !!     with the bottom boundary layer and add it to the general trend
17      !!     of tracer equations. The bottom boundary layer is supposed to be
18      !!     both an advective and diffusive bottom boundary layer.
19      !!
20      !! ** Method  :   Computes the bottom boundary horizontal and vertical
21      !!      advection terms. Add it to the general trend : tra =tra + adv_bbl.
22      !!        When the product grad( rho) * grad(h) < 0 (where grad is a
23      !!      along bottom slope gradient) an additional lateral 2nd order
24      !!      diffusion along the bottom slope is added to the general
25      !!      tracer trend, otherwise the additional trend is set to 0.
26      !!      Second order operator (laplacian type) with variable coefficient
27      !!      computed as follow for temperature (idem on s):
28      !!         difft = 1/(e1t*e2t*e3t) { di-1[ ahbt e2u*e3u/e1u di[ztb] ]
29      !!                                 + dj-1[ ahbt e1v*e3v/e2v dj[ztb] ] }
30      !!      where ztb is a 2D array: the bottom ocean te;perature and ahtb
31      !!      is a time and space varying diffusive coefficient defined by:
32      !!         ahbt = zahbp    if grad(rho).grad(h) < 0
33      !!              = 0.       otherwise.
34      !!      Note that grad(.) is the along bottom slope gradient. grad(rho)
35      !!      is evaluated using the local density (i.e. referenced at the
36      !!      local depth). Typical value of ahbt is 2000 m2/s (equivalent to
37      !!      a downslope velocity of 20 cm/s if the condition for slope
38      !!      convection is satified)
39      !!        Add this before trend to the general trend tra of the
40      !!      botton ocean tracer point:
41      !!              tra = tra + difft
42      !!
43      !! ** Action  : - update tra at the bottom level with the bottom
44      !!                boundary layer trend
45      !!
46      !! References :
47      !!     Beckmann, A., and R. Doscher, 1997, J. Phys.Oceanogr., 581-591.
48      !!
49      !! History :
50      !!   8.5  !  02-12  (A. de Miranda, G. Madec)  Original Code
51      !!   9.0  !  04-01  (A. de Miranda, G. Madec, J.M. Molines )
52      !!   9.0  !  04-03  (C. Ethe) Adaptation for Passive tracers
53      !!----------------------------------------------------------------------     
54      !! * Modules used
55      USE lbclnk           ! ocean lateral boundary conditions (or mpp link)
56      USE eosbn2
57
58      !! * Arguments
59      INTEGER, INTENT( in ) ::   kt        ! ocean time-step
60     
61      !! * Local declarations
62      INTEGER :: ji, jj, jk, jn            ! dummy loop indices
63      INTEGER :: ik, iku, ikv              ! temporary integers
64
65      REAL(wp) ::   &
66         zsign, zt, zs, zh, zalbet,     &  ! temporary scalars
67         zgdrho, zbtr, ztra                !    "         "
68      REAL(wp), DIMENSION(jpi,jpj) ::   &
69         zki, zkj, zkw, zkx, zky, zkz,  &  ! temporary workspace arrays
70         ztnb, zsnb, zdep, ztrb,        &  !    "                  "
71         zahu, zahv                        !    "                  "
72      REAL(wp), DIMENSION(jpi,jpj) ::   &  ! temporary workspace arrays
73         zalphax, zwu, zunb,            &  !    "                  "
74         zalphay, zwv, zvnb,            &  !    "                  "
75         zwx, zwy                          !    "                  "
76      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   &
77         zhdivn                            ! temporary workspace arrays
78      REAL(wp) ::   &
79         zfui, zfvj, zbt, zsigna           ! temporary scalars
80      REAL(wp) ::   &
81         fsalbt, pft, pfs, pfh             ! statement function
82      CHARACTER (len=22) :: charout
83      !!----------------------------------------------------------------------
84      ! ratio alpha/beta
85      ! ================
86      !  fsalbt: ratio of thermal over saline expension coefficients
87      !       pft :  potential temperature in degrees celcius
88      !       pfs :  salinity anomaly (s-35) in psu
89      !       pfh :  depth in meters
90
91      fsalbt( pft, pfs, pfh ) =                                              &
92         ( ( ( -0.255019e-07 * pft + 0.298357e-05 ) * pft                    &
93                                   - 0.203814e-03 ) * pft                    &
94                                   + 0.170907e-01 ) * pft                    &
95                                   + 0.665157e-01                            &
96         +(-0.678662e-05 * pfs - 0.846960e-04 * pft + 0.378110e-02 ) * pfs   &
97         +  ( ( - 0.302285e-13 * pfh                                         &
98                - 0.251520e-11 * pfs                                         &
99                + 0.512857e-12 * pft * pft          ) * pfh                  &
100                                     - 0.164759e-06   * pfs                  &
101             +(   0.791325e-08 * pft - 0.933746e-06 ) * pft                  &
102                                     + 0.380374e-04 ) * pfh
103      !!----------------------------------------------------------------------
104
105      IF( kt == nittrc000 )   CALL trc_bbl_init    ! initialization at first time-step
106
107      ! 1. 2D fields of bottom temperature and salinity, and bottom slope
108      ! -----------------------------------------------------------------
109      ! mbathy= number of w-level, minimum value=1 (cf dommsk.F)
110
111#if defined key_vectopt_loop   &&   ! defined key_autotasking
112      jj = 1
113      DO ji = 1, jpij   ! vector opt. (forced unrolling)
114#else
115      DO jj = 1, jpj
116         DO ji = 1, jpi
117#endif
118            ik = mbkt(ji,jj)                               ! index of the bottom ocean T-level
119            ztnb(ji,jj) = tn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now T at the ocean bottom
120            zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1)    ! masked now S at the ocean bottom
121            zdep(ji,jj) = fsdept(ji,jj,ik)                 ! depth of the ocean bottom T-level
122#if ! defined key_vectopt_loop   ||   defined key_autotasking
123         END DO
124#endif
125      END DO
126#if defined key_vectopt_loop   &&   ! defined key_autotasking
127      jj = 1
128      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
129            zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1)
130            zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)   ! retirer le mask en u, v et t !
131      END DO
132#else
133      DO jj = 1, jpjm1
134         DO ji = 1, jpim1
135            zunb(ji,jj) = un(ji,jj,mbku(ji,jj)) * umask(ji,jj,1)
136            zvnb(ji,jj) = vn(ji,jj,mbkv(ji,jj)) * vmask(ji,jj,1)
137         END DO
138      END DO
139#endif
140
141      ! boundary conditions on zunb and zvnb   (changed sign)
142       CALL lbc_lnk( zunb, 'U', -1. )   ;   CALL lbc_lnk( zvnb, 'V', -1. )
143
144
145
146      ! 2. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0
147      ! --------------------------------------------
148      ! Sign of the local density gradient along the i- and j-slopes
149      ! multiplied by the slope of the ocean bottom
150
151      SELECT CASE ( neos )
152
153      CASE ( 0 )               ! Jackett and McDougall (1994) formulation
154
155      DO jj = 1, jpjm1
156        DO ji = 1, fs_jpim1   ! vector opt.
157      !   ... temperature, salinity anomalie and depth
158          zt = 0.5 * ( ztnb(ji,jj) + ztnb(ji+1,jj) )
159          zs = 0.5 * ( zsnb(ji,jj) + zsnb(ji+1,jj) ) - 35.0
160          zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) )
161      !   ... masked ratio alpha/beta
162          zalbet = fsalbt( zt, zs, zh )*umask(ji,jj,1)
163      !   ... local density gradient along i-bathymetric slope
164          zgdrho = zalbet*( ztnb(ji+1,jj) - ztnb(ji,jj) )   &
165                     -    ( zsnb(ji+1,jj) - zsnb(ji,jj) )
166          zgdrho = zgdrho * umask(ji,jj,1)
167      !   ... sign of local i-gradient of density multiplied by the i-slope
168          zsign = sign( 0.5, -zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) )
169          zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj)
170
171          zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) ))
172          zalphax(ji,jj)=(0.5+zsigna)*(0.5-zsign)*umask(ji,jj,1)
173        END DO
174      END DO
175
176      DO jj = 1, jpjm1
177        DO ji = 1, fs_jpim1   ! vector opt.
178      !   ... temperature, salinity anomalie and depth
179          zt = 0.5 * ( ztnb(ji,jj+1) + ztnb(ji,jj) )
180          zs = 0.5 * ( zsnb(ji,jj+1) + zsnb(ji,jj) ) - 35.0
181          zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) )
182      !   ... masked ratio alpha/beta
183          zalbet = fsalbt( zt, zs, zh )*vmask(ji,jj,1)
184      !   ... local density gradient along j-bathymetric slope
185          zgdrho = zalbet*( ztnb(ji,jj+1) - ztnb(ji,jj) )   &
186                     -    ( zsnb(ji,jj+1) - zsnb(ji,jj) )
187          zgdrho = zgdrho*vmask(ji,jj,1)
188      !   ... sign of local j-gradient of density multiplied by the j-slope
189          zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )
190          zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj)
191
192          zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) )
193          zalphay(ji,jj)=(0.5+zsigna)*(0.5-zsign)*vmask(ji,jj,1)
194        END DO
195      END DO
196
197
198      CASE ( 1 )               ! Linear formulation function of temperature only
199
200
201#  if defined key_vectopt_loop   &&   ! defined key_autotasking
202      jj = 1
203      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
204#  else
205      DO jj = 1, jpjm1
206         DO ji = 1, jpim1
207#  endif
208            ! temperature, salinity anomalie and depth
209            zt = 0.5 * ( ztnb(ji,jj) + ztnb(ji+1,jj) )
210            zs = 0.5 * ( zsnb(ji,jj) + zsnb(ji+1,jj) ) - 35.0
211            zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) )
212            ! masked ratio alpha/beta
213            ! local density gradient along i-bathymetric slope
214            zgdrho =  ( ztnb(ji+1,jj) - ztnb(ji,jj) )
215            ! sign of local i-gradient of density multiplied by the i-slope
216            zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) )
217            zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj)
218
219            zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) ))
220            zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1)
221#  if ! defined key_vectopt_loop   ||   defined key_autotasking
222         END DO
223#  endif
224      END DO
225
226#  if defined key_vectopt_loop   &&   ! defined key_autotasking
227      jj = 1
228      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
229#  else
230      DO jj = 1, jpjm1
231         DO ji = 1, jpim1
232#  endif
233            ! temperature, salinity anomalie and depth
234            zt = 0.5 * ( ztnb(ji,jj+1) + ztnb(ji,jj) )
235            zs = 0.5 * ( zsnb(ji,jj+1) + zsnb(ji,jj) ) - 35.0
236            zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) )
237            ! masked ratio alpha/beta
238            ! local density gradient along j-bathymetric slope
239            zgdrho =  ( ztnb(ji,jj+1) - ztnb(ji,jj) )
240            ! sign of local j-gradient of density multiplied by the j-slope
241            zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )
242            zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj)
243
244            zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) )
245            zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1)
246#  if ! defined key_vectopt_loop   ||   defined key_autotasking
247         END DO
248#  endif
249      END DO
250
251      CASE ( 2 )               ! Linear formulation function of temperature and salinity
252
253      DO jj = 1, jpjm1
254         DO ji = 1, fs_jpim1   ! vector opt.
255            ! local density gradient along i-bathymetric slope
256            zgdrho = - ( rbeta*( zsnb(ji+1,jj) - zsnb(ji,jj) )   &
257                     -  ralpha*( ztnb(ji+1,jj) - ztnb(ji,jj) ) )
258            ! sign of local i-gradient of density multiplied by the i-slope
259            zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) )
260
261            zsigna= sign(0.5, zunb(ji,jj)*(  zdep(ji+1,jj) - zdep(ji,jj) ))
262            zalphax(ji,jj)=(0.5-zsigna)*(0.5-zsign)*umask(ji,jj,1)
263         END DO
264      END DO
265
266      DO jj = 1, jpjm1
267         DO ji = 1, fs_jpim1   ! vector opt.
268             ! local density gradient along j-bathymetric slope
269             zgdrho = - ( rbeta*( zsnb(ji,jj+1) - zsnb(ji,jj) )   &
270                    -    ralpha*( ztnb(ji,jj+1) - ztnb(ji,jj) ) )
271             ! sign of local j-gradient of density multiplied by the j-slope
272             zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )
273
274             zsigna= sign(0.5, zvnb(ji,jj)*(zdep(ji,jj+1) - zdep(ji,jj) ) )
275             zalphay(ji,jj)=(0.5-zsigna)*(0.5-zsign)*vmask(ji,jj,1)
276         END DO
277      END DO
278
279
280      CASE DEFAULT
281
282         IF(lwp) WRITE(numout,cform_err)
283         IF(lwp) WRITE(numout,*) '          bad flag value for neos = ', neos
284         nstop = nstop + 1
285
286      END SELECT
287
288      ! lateral boundary conditions on zalphax and zalphay   (unchanged sign)
289       CALL lbc_lnk( zalphax, 'U', 1. )   ;   CALL lbc_lnk( zalphay, 'V', 1. )
290
291
292      ! 3. Velocities that are exchanged between ajacent bottom boxes.
293      !---------------------------------------------------------------
294      ! ... is equal to zero but where bbl will work.
295       u_trc_bbl(:,:,:) = 0.e0
296       v_trc_bbl(:,:,:) = 0.e0
297# if defined key_vectopt_loop   &&   ! defined key_autotasking
298       jj = 1
299       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
300# else
301       DO jj = 1, jpjm1
302          DO ji = 1, jpim1
303# endif
304             iku = mbku(ji,jj)
305             ikv = mbkv(ji,jj)
306             IF( MAX(iku,ikv) >  1 ) THEN
307                u_trc_bbl(ji,jj,iku) = zalphax(ji,jj) * un(ji,jj,iku) * umask(ji,jj,1)
308                v_trc_bbl(ji,jj,ikv) = zalphay(ji,jj) * vn(ji,jj,ikv) * vmask(ji,jj,1)
309             ENDIF
310# if ! defined key_vectopt_loop   ||   defined key_autotasking
311          END DO
312# endif
313       END DO
314
315       ! lateral boundary conditions on u_trc_bbl and v_trc_bbl   (changed sign)
316       CALL lbc_lnk( u_trc_bbl, 'U', -1. )   ;   CALL lbc_lnk( v_trc_bbl, 'V', -1. )
317
318
319       
320       DO jn = 1, jptra
321
322#if defined key_vectopt_loop   &&   ! defined key_autotasking
323          jj = 1
324          DO ji = 1, jpij   ! vector opt. (forced unrolling)
325#else
326          DO jj = 1, jpj
327             DO ji = 1, jpi
328#endif
329                ik = mbkt(ji,jj)                               ! index of the bottom ocean T-level
330                ztrb(ji,jj) = trb(ji,jj,ik,jn) * tmask(ji,jj,1)    ! masked now T at the ocean bottom
331#if ! defined key_vectopt_loop   ||   defined key_autotasking
332             END DO
333#endif
334          END DO
335
336
337          ! 5. Along sigma advective trend
338          ! -------------------------------
339          ! ... Second order centered tracer flux at u and v-points
340       
341# if defined key_vectopt_loop   &&   ! defined key_autotasking
342          jj = 1
343          DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
344# else
345          DO jj = 1, jpjm1
346             DO ji = 1, jpim1
347# endif
348                iku = mbku(ji,jj)
349                ikv = mbkv(ji,jj)
350                zfui = zalphax(ji,jj) *e2u(ji,jj) * fse3u(ji,jj,iku) * zunb(ji,jj)
351                zfvj = zalphay(ji,jj) *e1v(ji,jj) * fse3v(ji,jj,ikv) * zvnb(ji,jj)
352                ! upstream scheme
353                zwx(ji,jj) = ( ( zfui + ABS( zfui ) ) * ztrb(ji  ,jj  )   &
354                   &          +( zfui - ABS( zfui ) ) * ztrb(ji+1,jj  ) ) * 0.5
355                zwy(ji,jj) = ( ( zfvj + ABS( zfvj ) ) * ztrb(ji  ,jj  )   &
356                   &          +( zfvj - ABS( zfvj ) ) * ztrb(ji  ,jj+1) ) * 0.5
357#if ! defined key_vectopt_loop   ||   defined key_autotasking
358             END DO
359#endif
360          END DO
361# if defined key_vectopt_loop   &&   ! defined key_autotasking
362          jj = 1
363          DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling)
364# else
365          DO jj = 2, jpjm1
366             DO ji = 2, jpim1
367# endif
368                ik = mbkt(ji,jj)
369                zbtr = 1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,ik) )
370                ! horizontal advective trends
371                ztra = - zbtr * (  zwx(ji,jj) - zwx(ji-1,jj  )   &
372                   &             + zwy(ji,jj) - zwy(ji  ,jj-1)  )
373
374                ! add it to the general tracer trends
375                tra(ji,jj,ik,jn) = tra(ji,jj,ik,jn) + ztra
376#if ! defined key_vectopt_loop   ||   defined key_autotasking
377             END DO
378#endif
379          END DO
380
381       END DO
382
383      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
384         WRITE(charout, FMT="('bbl - adv')")
385         CALL prt_ctl_trc_info(charout)
386         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')
387      ENDIF         
388       ! 6. Vertical advection velocities
389       ! --------------------------------
390       ! ... computes divergence perturbation (velocties to be removed from upper t boxes :
391       DO jk= 1, jpkm1
392
393          DO jj=1, jpjm1
394             DO ji = 1, fs_jpim1   ! vertor opt.
395                zwu(ji,jj) = -e2u(ji,jj) * u_trc_bbl(ji,jj,jk)
396                zwv(ji,jj) = -e1v(ji,jj) * v_trc_bbl(ji,jj,jk)
397             END DO
398          END DO
399
400          ! ... horizontal divergence
401          DO jj = 2, jpjm1
402             DO ji = fs_2, fs_jpim1   ! vector opt.
403                zbt = e1t(ji,jj) * e2t(ji,jj)
404                zhdivn(ji,jj,jk) = (  zwu(ji,jj) - zwu(ji-1,jj  )   &
405                   &                + zwv(ji,jj) - zwv(ji  ,jj-1)  ) / zbt
406             END DO
407          END DO
408       END DO
409
410
411       ! ... horizontal bottom divergence
412# if defined key_vectopt_loop   &&   ! defined key_autotasking
413       jj = 1
414       DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
415# else
416       DO jj = 1, jpjm1
417          DO ji = 1, jpim1
418# endif
419             iku = mbku(ji,jj)
420             ikv = mbkv(ji,jj)
421             zwu(ji,jj) = zalphax(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,iku)
422             zwv(ji,jj) = zalphay(ji,jj) * e1v(ji,jj) * fse3v(ji,jj,ikv)
423#if ! defined key_vectopt_loop   ||   defined key_autotasking
424          END DO
425#endif
426       END DO
427
428# if defined key_vectopt_loop   &&   ! defined key_autotasking
429       jj = 1
430       DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling)
431# else
432       DO jj = 2, jpjm1
433          DO ji = 2, jpim1
434# endif
435             ik = mbkt(ji,jj)
436             zbt = e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik)
437             zhdivn(ji,jj,ik) =   &
438                &   (  zwu(ji  ,jj  ) * ( zunb(ji  ,jj  ) - un(ji  ,jj  ,ik) *umask(ji  ,jj  ,1) )   &
439                &    - zwu(ji-1,jj  ) * ( zunb(ji-1,jj  ) - un(ji-1,jj  ,ik) *umask(ji-1,jj  ,1) )   &
440                &    + zwv(ji  ,jj  ) * ( zvnb(ji  ,jj  ) - vn(ji  ,jj  ,ik) *vmask(ji  ,jj  ,1) )   &
441                &    - zwv(ji  ,jj-1) * ( zvnb(ji  ,jj-1) - vn(ji  ,jj-1,ik) *vmask(ji  ,jj-1,1) )   &
442                &   ) / zbt
443
444# if ! defined key_vectopt_loop   ||   defined key_autotasking
445          END DO
446# endif
447       END DO
448
449       ! 7. compute additional vertical velocity to be used in t boxes
450       ! -------------------------------------------------------------
451       
452       ! ... Computation from the bottom
453       ! Note that w_trc_bbl(:,:,jpk) has been set to 0 in trc_bbl_init
454       DO jk = jpkm1, 1, -1
455          DO jj= 2, jpjm1
456             DO ji = fs_2, fs_jpim1   ! vector opt.
457                w_trc_bbl(ji,jj,jk) = w_trc_bbl(ji,jj,jk+1) - fse3t(ji,jj,jk)*zhdivn(ji,jj,jk)
458             END DO
459          END DO
460       END DO
461
462      ! Boundary condition on w_bbl   (unchanged sign)
463      CALL lbc_lnk( w_trc_bbl, 'W', 1. )
464
465   END SUBROUTINE trc_bbl_adv
Note: See TracBrowser for help on using the repository browser.