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.
trabbl_adv.h90 in trunk/NEMO/OPA_SRC/TRA – NEMO

source: trunk/NEMO/OPA_SRC/TRA/trabbl_adv.h90 @ 1517

Last change on this file since 1517 was 1482, checked in by smasson, 15 years ago

distribution of iom_put + cleaning of LIM2 outputs, see ticket:437

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