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

source: trunk/NEMO/OPA_SRC/TRA/trabbl.F90 @ 216

Last change on this file since 216 was 216, checked in by opalod, 19 years ago

CT : UPDATE151 : New trends organization

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 20.1 KB
Line 
1MODULE trabbl
2   !!==============================================================================
3   !!                       ***  MODULE  trabbl  ***
4   !! Ocean physics :  advective and/or diffusive bottom boundary layer scheme
5   !!==============================================================================
6#if   defined key_trabbl_dif   ||   defined key_trabbl_adv   || defined key_esopa
7   !!----------------------------------------------------------------------
8   !!   'key_trabbl_dif'   or            diffusive bottom boundary layer
9   !!   'key_trabbl_adv'                 advective bottom boundary layer
10   !!----------------------------------------------------------------------
11   !!   tra_bbl_dif  : update the active tracer trends due to the bottom
12   !!                  boundary layer (diffusive only)
13   !!   tra_bbl_adv  : update the active tracer trends due to the bottom
14   !!                  boundary layer (advective and/or diffusive)
15   !!   tra_bbl_init : initialization, namlist read, parameters control
16   !!----------------------------------------------------------------------
17   !! * Modules used
18   USE oce             ! ocean dynamics and active tracers
19   USE dom_oce         ! ocean space and time domain
20   USE trdmod_oce      ! ocean variables trends
21   USE in_out_manager  ! I/O manager
22
23   IMPLICIT NONE
24   PRIVATE
25
26   !! * Routine accessibility
27   PUBLIC tra_bbl_dif    ! routine called by step.F90
28   PUBLIC tra_bbl_adv    ! routine called by step.F90
29
30   !! * Shared module variables
31   LOGICAL, PUBLIC, PARAMETER ::   &  !:
32      lk_trabbl_dif = .TRUE.          !: diffusive bottom boundary layer flag
33   REAL(wp), PUBLIC ::            &  !!: * bbl namelist *
34      atrbbl = 1.e+3                  !: lateral coeff. for bottom boundary
35      !                               !  layer scheme (m2/s)
36# if defined key_trabbl_adv
37   LOGICAL, PUBLIC, PARAMETER ::    &  !:
38      lk_trabbl_adv = .TRUE.   !: advective bottom boundary layer flag
39   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   &  !:
40       u_bbl, v_bbl,  &  !: velocity involved in exhanges in the advective BBL
41       w_bbl             !: vertical increment of velocity due to advective BBL
42       !                 !  only affect tracer vertical advection
43# else
44   LOGICAL, PUBLIC, PARAMETER ::    &  !:
45      lk_trabbl_adv = .FALSE.  !: advective bottom boundary layer flag
46# endif
47
48   !! * Module variables
49   INTEGER, DIMENSION(jpi,jpj) ::   &  !:
50      mbkt,           &   ! vertical index of the bottom ocean T-level
51      mbku, mbkv          ! vertical index of the bottom ocean U/V-level
52
53   !! * Substitutions
54#  include "domzgr_substitute.h90"
55#  include "vectopt_loop_substitute.h90"
56   !!----------------------------------------------------------------------
57   !!   OPA 9.0 , LODYC-IPSL (2003)
58   !!----------------------------------------------------------------------
59
60CONTAINS
61
62   SUBROUTINE tra_bbl_dif( kt )
63      !!----------------------------------------------------------------------
64      !!                   ***  ROUTINE tra_bbl_dif  ***
65      !!
66      !! ** Purpose :   Compute the before tracer (t & s) trend associated
67      !!      with the bottom boundary layer and add it to the general trend
68      !!      of tracer equations. The bottom boundary layer is supposed to be
69      !!      a purely diffusive bottom boundary layer.
70      !!
71      !! ** Method  :   When the product grad( rho) * grad(h) < 0 (where grad
72      !!      is an along bottom slope gradient) an additional lateral diffu-
73      !!      sive trend along the bottom slope is added to the general tracer
74      !!      trend, otherwise nothing is done.
75      !!      Second order operator (laplacian type) with variable coefficient
76      !!      computed as follow for temperature (idem on s):
77      !!         difft = 1/(e1t*e2t*e3t) { di-1[ ahbt e2u*e3u/e1u di[ztb] ]
78      !!                                 + dj-1[ ahbt e1v*e3v/e2v dj[ztb] ] }
79      !!      where ztb is a 2D array: the bottom ocean temperature and ahtb
80      !!      is a time and space varying diffusive coefficient defined by:
81      !!         ahbt = zahbp    if grad(rho).grad(h) < 0
82      !!              = 0.       otherwise.
83      !!      Note that grad(.) is the along bottom slope gradient. grad(rho)
84      !!      is evaluated using the local density (i.e. referenced at the
85      !!      local depth). Typical value of ahbt is 2000 m2/s (equivalent to
86      !!      a downslope velocity of 20 cm/s if the condition for slope
87      !!      convection is satified)
88      !!      Add this before trend to the general trend (ta,sa) of the
89      !!      botton ocean tracer point:
90      !!         ta = ta + difft
91      !!
92      !! ** Action  : - update (ta,sa) at the bottom level with the bottom
93      !!                boundary layer trend
94      !!              - save the trends in tldfbbl/sldfbbl ('key_trdtra')
95      !!
96      !! References :
97      !!     Beckmann, A., and R. Doscher, 1997, J. Phys.Oceanogr., 581-591.
98      !!
99      !! History :
100      !!   8.0  !  96-06  (L. Mortier)  Original code
101      !!   8.0  !  97-11  (G. Madec)  Optimization
102      !!   8.5  !  02-08  (G. Madec)  free form + modules
103      !!   9.0  !  04-08  (C. Talandier) New trends organization
104      !!----------------------------------------------------------------------
105      !! * Modules used     
106      USE oce, ONLY :    ztdta => ua,     & ! use ua as 3D workspace   
107                         ztdsa => va        ! use va as 3D workspace   
108
109      !! * Arguments
110      INTEGER, INTENT( in ) ::   kt         ! ocean time-step
111
112      !! * Local declarations
113      INTEGER ::   ji, jj                   ! dummy loop indices
114      INTEGER ::   ik
115      INTEGER ::   ii0, ii1, ij0, ij1       ! temporary integers
116#  if defined key_partial_steps
117      INTEGER  ::   iku1, iku2, ikv1,ikv2   ! temporary intergers
118      REAL(wp) ::   ze3u, ze3v              ! temporary scalars
119#  else
120      INTEGER ::   iku, ikv
121#  endif
122      REAL(wp) ::   &
123         zsign, zt, zs, zh, zalbet,      &  ! temporary scalars
124         zgdrho, zbtr, zta, zsa
125      REAL(wp), DIMENSION(jpi,jpj) ::    &
126        zki, zkj, zkw, zkx, zky, zkz,    &  ! temporary workspace arrays
127        ztnb, zsnb, zdep,                &
128        ztbb, zsbb, zahu, zahv
129      REAL(wp) ::   &
130         fsalbt, pft, pfs, pfh              ! statement function
131      !!----------------------------------------------------------------------
132      ! ratio alpha/beta
133      ! ================
134      !  fsalbt: ratio of thermal over saline expension coefficients
135      !       pft :  potential temperature in degrees celcius
136      !       pfs :  salinity anomaly (s-35) in psu
137      !       pfh :  depth in meters
138
139      fsalbt( pft, pfs, pfh ) =                                              &
140         ( ( ( -0.255019e-07 * pft + 0.298357e-05 ) * pft                    &
141                                   - 0.203814e-03 ) * pft                    &
142                                   + 0.170907e-01 ) * pft                    &
143                                   + 0.665157e-01                            &
144         +(-0.678662e-05 * pfs - 0.846960e-04 * pft + 0.378110e-02 ) * pfs   &
145         +  ( ( - 0.302285e-13 * pfh                                         &
146                - 0.251520e-11 * pfs                                         &
147                + 0.512857e-12 * pft * pft          ) * pfh                  &
148                                     - 0.164759e-06   * pfs                  &
149             +(   0.791325e-08 * pft - 0.933746e-06 ) * pft                  &
150                                     + 0.380374e-04 ) * pfh   
151      !!----------------------------------------------------------------------
152
153      IF( kt == nit000 )   CALL tra_bbl_init
154
155      ! Save ta and sa trends
156      IF( l_trdtra )   THEN
157         ztdta(:,:,:) = ta(:,:,:) 
158         ztdsa(:,:,:) = sa(:,:,:) 
159      ENDIF
160
161      ! 0. 2D fields of bottom temperature and salinity, and bottom slope
162      ! -----------------------------------------------------------------
163      ! mbathy= number of w-level, minimum value=1 (cf dommsk.F)
164
165#  if defined key_vectopt_loop   &&   ! defined key_autotasking
166      jj = 1
167      DO ji = 1, jpij   ! vector opt. (forced unrolling)
168#  else
169      DO jj = 1, jpj
170         DO ji = 1, jpi
171#  endif
172            ik = mbkt(ji,jj)                              ! index of the bottom ocean T-level
173            ztnb(ji,jj) = tn(ji,jj,ik) * tmask(ji,jj,1)   ! masked now T and S at ocean bottom
174            zsnb(ji,jj) = sn(ji,jj,ik) * tmask(ji,jj,1)
175            ztbb(ji,jj) = tb(ji,jj,ik) * tmask(ji,jj,1)   ! masked before T and S at ocean bottom
176            zsbb(ji,jj) = sb(ji,jj,ik) * tmask(ji,jj,1)
177            zdep(ji,jj) = fsdept(ji,jj,ik)                ! depth of the ocean bottom T-level
178#  if ! defined key_vectopt_loop   ||   defined key_autotasking
179         END DO
180#  endif
181      END DO
182
183#  if defined key_partial_steps
184      ! partial steps correction
185#   if defined key_vectopt_loop   &&   ! defined key_autotasking
186      jj = 1
187      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
188#   else
189      DO jj = 1, jpjm1
190         DO ji = 1, jpim1
191#   endif
192            iku1 = MAX( mbathy(ji+1,jj  )-1, 1 )
193            iku2 = MAX( mbathy(ji  ,jj  )-1, 1 )
194            ikv1 = MAX( mbathy(ji  ,jj+1)-1, 1 )
195            ikv2 = MAX( mbathy(ji  ,jj  )-1, 1 )
196            ze3u = MIN( fse3u(ji,jj,iku1), fse3u(ji,jj,iku2) ) 
197            ze3v = MIN( fse3v(ji,jj,ikv1), fse3v(ji,jj,ikv2) ) 
198            zahu(ji,jj) = atrbbl * e2u(ji,jj) * ze3u / e1u(ji,jj) * umask(ji,jj,1)
199            zahv(ji,jj) = atrbbl * e1v(ji,jj) * ze3v / e2v(ji,jj) * vmask(ji,jj,1)
200#   if ! defined key_vectopt_loop   ||   defined key_autotasking
201         END DO
202#   endif
203      END DO
204#  else
205#   if defined key_vectopt_loop   &&   ! defined key_autotasking
206      jj = 1
207      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
208#   else
209      DO jj = 1, jpjm1
210         DO ji = 1, jpim1
211#   endif
212            iku = mbku(ji,jj)
213            ikv = mbkv(ji,jj)
214            zahu(ji,jj) = atrbbl * e2u(ji,jj) * fse3u(ji,jj,iku) / e1u(ji,jj) * umask(ji,jj,1)
215            zahv(ji,jj) = atrbbl * e1v(ji,jj) * fse3v(ji,jj,ikv) / e2v(ji,jj) * vmask(ji,jj,1)
216#   if ! defined key_vectopt_loop   ||   defined key_autotasking
217         END DO
218#   endif
219      END DO
220#  endif
221
222      ! 1. Criteria of additional bottom diffusivity: grad(rho).grad(h)<0
223      ! --------------------------------------------
224      ! Sign of the local density gradient along the i- and j-slopes
225      ! multiplied by the slope of the ocean bottom
226
227#  if defined key_vectopt_loop   &&   ! defined key_autotasking
228      jj = 1
229      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
230#  else
231      DO jj = 1, jpjm1
232         DO ji = 1, jpim1
233#  endif
234            ! temperature, salinity anomalie and depth
235            zt = 0.5 * ( ztnb(ji,jj) + ztnb(ji+1,jj) )
236            zs = 0.5 * ( zsnb(ji,jj) + zsnb(ji+1,jj) ) - 35.0
237            zh = 0.5 * ( zdep(ji,jj) + zdep(ji+1,jj) )
238            ! masked ratio alpha/beta
239            zalbet = fsalbt( zt, zs, zh )*umask(ji,jj,1)
240            ! local density gradient along i-bathymetric slope
241            zgdrho = zalbet * ( ztnb(ji+1,jj) - ztnb(ji,jj) )   &
242                   -          ( zsnb(ji+1,jj) - zsnb(ji,jj) )
243            ! sign of local i-gradient of density multiplied by the i-slope
244            zsign = SIGN( 0.5, - zgdrho * ( zdep(ji+1,jj) - zdep(ji,jj) ) )
245            zki(ji,jj) = ( 0.5 - zsign ) * zahu(ji,jj)
246#  if ! defined key_vectopt_loop   ||   defined key_autotasking
247         END DO
248#  endif
249      END DO
250
251#  if defined key_vectopt_loop   &&   ! defined key_autotasking
252      jj = 1
253      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
254#  else
255      DO jj = 1, jpjm1
256         DO ji = 1, jpim1
257#  endif
258            ! temperature, salinity anomalie and depth
259            zt = 0.5 * ( ztnb(ji,jj+1) + ztnb(ji,jj) )
260            zs = 0.5 * ( zsnb(ji,jj+1) + zsnb(ji,jj) ) - 35.0
261            zh = 0.5 * ( zdep(ji,jj+1) + zdep(ji,jj) )
262            ! masked ratio alpha/beta
263            zalbet = fsalbt( zt, zs, zh )*vmask(ji,jj,1)
264            ! local density gradient along j-bathymetric slope
265            zgdrho = zalbet * ( ztnb(ji,jj+1) - ztnb(ji,jj) )   &
266                   -          ( zsnb(ji,jj+1) - zsnb(ji,jj) )
267            ! sign of local j-gradient of density multiplied by the j-slope
268            zsign = sign( 0.5, -zgdrho * ( zdep(ji,jj+1) - zdep(ji,jj) ) )
269            zkj(ji,jj) = ( 0.5 - zsign ) * zahv(ji,jj)
270#  if ! defined key_vectopt_loop   ||   defined key_autotasking
271         END DO
272#  endif
273      END DO
274
275
276      ! 2. Additional second order diffusive trends
277      ! -------------------------------------------
278
279      ! first derivative (gradient)
280#  if defined key_vectopt_loop   &&   ! defined key_autotasking
281      jj = 1
282      DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
283#  else
284      DO jj = 1, jpjm1
285         DO ji = 1, jpim1
286#  endif
287            zkx(ji,jj) = zki(ji,jj) * ( ztbb(ji+1,jj) - ztbb(ji,jj) )
288            zkz(ji,jj) = zki(ji,jj) * ( zsbb(ji+1,jj) - zsbb(ji,jj) )
289
290            zky(ji,jj) = zkj(ji,jj) * ( ztbb(ji,jj+1) - ztbb(ji,jj) )
291            zkw(ji,jj) = zkj(ji,jj) * ( zsbb(ji,jj+1) - zsbb(ji,jj) )
292#  if ! defined key_vectopt_loop   ||   defined key_autotasking
293         END DO
294#  endif
295      END DO
296
297      IF( cp_cfg == "orca" ) THEN
298
299         SELECT CASE ( jp_cfg )
300         !                                           ! =======================
301         CASE ( 2 )                                  !  ORCA_R2 configuration
302            !                                        ! =======================
303            ! Gibraltar enhancement of BBL
304            ij0 = 102   ;   ij1 = 102
305            ii0 = 139   ;   ii1 = 140 
306            zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
307            zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
308
309            ! Red Sea enhancement of BBL
310            ij0 =  88   ;   ij1 =  88
311            ii0 = 161   ;   ii1 = 162
312            zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
313            zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 10.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
314
315            !                                        ! =======================
316         CASE ( 4 )                                  !  ORCA_R4 configuration
317            !                                        ! =======================
318            ! Gibraltar enhancement of BBL
319            ij0 =  52   ;   ij1 =  52
320            ii0 =  70   ;   ii1 =  71 
321            zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zkx( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
322            zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) = 4.e0 * zky( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) )
323
324         END SELECT
325
326      ENDIF
327
328
329      ! second derivative (divergence) and add to the general tracer trend
330#  if defined key_vectopt_loop   &&   ! defined key_autotasking
331      jj = 1
332      DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling)
333#  else
334      DO jj = 2, jpjm1
335         DO ji = 2, jpim1
336#  endif
337            ik = max( mbathy(ji,jj)-1, 1 )
338            zbtr = 1. / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,ik) )
339            zta = (  zkx(ji,jj) - zkx(ji-1,jj  )    &
340                   + zky(ji,jj) - zky(ji  ,jj-1)  ) * zbtr
341            zsa = (  zkz(ji,jj) - zkz(ji-1,jj  )    &
342                   + zkw(ji,jj) - zkw(ji  ,jj-1)  ) * zbtr
343            ta(ji,jj,ik) = ta(ji,jj,ik) + zta
344            sa(ji,jj,ik) = sa(ji,jj,ik) + zsa
345#  if ! defined key_vectopt_loop   ||   defined key_autotasking
346         END DO
347#  endif
348      END DO
349
350      ! save the trends for diagnostic
351      ! BBL lateral diffusion tracers trends
352      IF( l_trdtra )   THEN
353#  if defined key_vectopt_loop   &&   ! defined key_autotasking
354         jj = 1
355         DO ji = jpi+2, jpij-jpi-1   ! vector opt. (forced unrolling)
356#  else
357         DO jj = 2, jpjm1
358            DO ji = 2, jpim1
359#  endif
360            ik = max( mbathy(ji,jj)-1, 1 )
361            tldfbbl(ji,jj) = ta(ji,jj,ik) - ztdta(ji,jj,ik)
362            sldfbbl(ji,jj) = sa(ji,jj,ik) - ztdsa(ji,jj,ik)
363#  if ! defined key_vectopt_loop   ||   defined key_autotasking
364            END DO
365#  endif
366         END DO
367
368      ENDIF
369
370      IF(l_ctl) THEN
371         zta = SUM( ta(2:nictl,2:njctl,1:jpkm1) * tmask(2:nictl,2:njctl,1:jpkm1) )
372         zsa = SUM( sa(2:nictl,2:njctl,1:jpkm1) * tmask(2:nictl,2:njctl,1:jpkm1) )
373         WRITE(numout,*) ' bbl  - Ta: ', zta-t_ctl, ' Sa: ', zsa-s_ctl
374         t_ctl = zta   ;   s_ctl = zsa
375      ENDIF
376
377   END SUBROUTINE tra_bbl_dif
378
379# if defined key_trabbl_adv
380   !!----------------------------------------------------------------------
381   !!   'key_trabbl_adv'                    advective bottom boundary layer
382   !!----------------------------------------------------------------------
383#  include "trabbl_adv.h90"
384# else
385   !!----------------------------------------------------------------------
386   !!   Default option :                 NO advective bottom boundary layer
387   !!----------------------------------------------------------------------
388   SUBROUTINE tra_bbl_adv (kt )              ! Empty routine
389      INTEGER, INTENT(in) :: kt
390      WRITE(*,*) 'tra_bbl_adv: You should not have seen this print! error?', kt
391   END SUBROUTINE tra_bbl_adv
392# endif
393
394   SUBROUTINE tra_bbl_init
395      !!----------------------------------------------------------------------
396      !!                  ***  ROUTINE tra_bbl_init  ***
397      !!
398      !! ** Purpose :   Initialization for the bottom boundary layer scheme.
399      !!
400      !! ** Method  :   Read the nambbl namelist and check the parameters
401      !!      called by tra_bbl at the first timestep (nit000)
402      !!
403      !! History :
404      !!    8.5  !  02-08  (G. Madec)  Original code
405      !!----------------------------------------------------------------------
406      !! * Local declarations
407      INTEGER ::   ji, jj      ! dummy loop indices
408      NAMELIST/nambbl/ atrbbl
409      !!----------------------------------------------------------------------
410
411      ! Read Namelist nambbl : bottom boundary layer scheme
412      ! --------------------
413      REWIND ( numnam )
414      READ   ( numnam, nambbl )
415
416
417      ! Parameter control and print
418      ! ---------------------------
419      IF(lwp) THEN
420         WRITE(numout,*)
421         WRITE(numout,*) 'tra_bbl_init : * Diffusive Bottom Boundary Layer'
422         WRITE(numout,*) '~~~~~~~~~~~~'
423         IF( lk_trabbl_adv ) THEN
424            WRITE(numout,*) '               * Advective Bottom Boundary Layer'
425         ENDIF
426         WRITE(numout,*) '          Namelist nambbl : set bbl parameters'
427         WRITE(numout,*)
428         WRITE(numout,*) '          bottom boundary layer coef.    atrbbl = ', atrbbl
429         WRITE(numout,*)
430      ENDIF
431 
432      DO jj = 1, jpj
433         DO ji = 1, jpi
434            mbkt(ji,jj) = MAX( mbathy(ji,jj) - 1, 1 )   ! vertical index of the bottom ocean T-level
435         END DO
436      END DO
437      DO jj = 1, jpjm1
438         DO ji = 1, jpim1
439            mbku(ji,jj) = MAX( MIN( mbathy(ji+1,jj  ), mbathy(ji,jj) ) - 1, 1 )
440            mbkv(ji,jj) = MAX( MIN( mbathy(ji  ,jj+1), mbathy(ji,jj) ) - 1, 1 )
441         END DO
442      END DO
443!!bug ???
444!!bug Caution : define the vakue of mbku & mbkv everywhere!!! but lbc mpp lnk : pb when closed (0)
445
446# if defined key_trabbl_adv
447      ! initialisation of w_bbl to zero
448      w_bbl(:,:,:) = 0.e0   
449# endif
450
451   END SUBROUTINE tra_bbl_init
452
453#else
454   !!----------------------------------------------------------------------
455   !!   Dummy module :                      No bottom boundary layer scheme
456   !!----------------------------------------------------------------------
457   LOGICAL, PUBLIC, PARAMETER ::   lk_trabbl_dif = .FALSE.   !: diff bbl flag
458   LOGICAL, PUBLIC, PARAMETER ::   lk_trabbl_adv = .FALSE.   !: adv  bbl flag
459CONTAINS
460   SUBROUTINE tra_bbl_dif (kt )              ! Empty routine
461      INTEGER, INTENT(in) :: kt
462      WRITE(*,*) 'tra_bbl_dif: You should not have seen this print! error?', kt
463   END SUBROUTINE tra_bbl_dif
464   SUBROUTINE tra_bbl_adv (kt )              ! Empty routine
465      INTEGER, INTENT(in) :: kt
466      WRITE(*,*) 'tra_bbl_adv: You should not have seen this print! error?', kt
467   END SUBROUTINE tra_bbl_adv
468#endif
469
470   !!======================================================================
471END MODULE trabbl
Note: See TracBrowser for help on using the repository browser.