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

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

CL : Add CVS Header and CeCILL licence information

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