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.
traadv_ubs.F90 in branches/2017/dev_r7881_no_wrk_alloc/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

source: branches/2017/dev_r7881_no_wrk_alloc/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90 @ 7910

Last change on this file since 7910 was 7910, checked in by timgraham, 7 years ago

All wrk_alloc removed

  • Property svn:keywords set to Id
File size: 20.5 KB
Line 
1MODULE traadv_ubs
2   !!==============================================================================
3   !!                       ***  MODULE  traadv_ubs  ***
4   !! Ocean active tracers:  horizontal & vertical advective trend
5   !!==============================================================================
6   !! History :  1.0  !  2006-08  (L. Debreu, R. Benshila)  Original code
7   !!            3.3  !  2010-05  (C. Ethe, G. Madec)  merge TRC-TRA + switch from velocity to transport
8   !!----------------------------------------------------------------------
9
10   !!----------------------------------------------------------------------
11   !!   tra_adv_ubs : update the tracer trend with the horizontal
12   !!                 advection trends using a third order biaised scheme 
13   !!----------------------------------------------------------------------
14   USE oce            ! ocean dynamics and active tracers
15   USE dom_oce        ! ocean space and time domain
16   USE trc_oce        ! share passive tracers/Ocean variables
17   USE trd_oce        ! trends: ocean variables
18   USE traadv_fct      ! acces to routine interp_4th_cpt
19   USE trdtra         ! trends manager: tracers
20   USE diaptr         ! poleward transport diagnostics
21   USE diaar5         ! AR5 diagnostics
22
23   !
24   USE iom
25   USE lib_mpp        ! I/O library
26   USE lbclnk         ! ocean lateral boundary condition (or mpp link)
27   USE in_out_manager ! I/O manager
28   USE timing         ! Timing
29   USE lib_fortran    ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined) 
30
31   IMPLICIT NONE
32   PRIVATE
33
34   PUBLIC   tra_adv_ubs   ! routine called by traadv module
35
36   LOGICAL :: l_trd   ! flag to compute trends
37   LOGICAL :: l_ptr   ! flag to compute poleward transport
38   LOGICAL :: l_hst   ! flag to compute heat transport
39
40
41   !! * Substitutions
42#  include "vectopt_loop_substitute.h90"
43   !!----------------------------------------------------------------------
44   !! NEMO/OPA 3.7 , NEMO Consortium (2015)
45   !! $Id$
46   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
47   !!----------------------------------------------------------------------
48CONTAINS
49
50   SUBROUTINE tra_adv_ubs( kt, kit000, cdtype, p2dt, pun, pvn, pwn,          &
51      &                                                ptb, ptn, pta, kjpt, kn_ubs_v )
52      !!----------------------------------------------------------------------
53      !!                  ***  ROUTINE tra_adv_ubs  ***
54      !!                 
55      !! ** Purpose :   Compute the now trend due to the advection of tracers
56      !!      and add it to the general trend of passive tracer equations.
57      !!
58      !! ** Method  :   The 3rd order Upstream Biased Scheme (UBS) is based on an
59      !!      upstream-biased parabolic interpolation (Shchepetkin and McWilliams 2005)
60      !!      It is only used in the horizontal direction.
61      !!      For example the i-component of the advective fluxes are given by :
62      !!                !  e2u e3u un ( mi(Tn) - zltu(i  ) )   if un(i) >= 0
63      !!          ztu = !  or
64      !!                !  e2u e3u un ( mi(Tn) - zltu(i+1) )   if un(i) < 0
65      !!      where zltu is the second derivative of the before temperature field:
66      !!          zltu = 1/e3t di[ e2u e3u / e1u di[Tb] ]
67      !!        This results in a dissipatively dominant (i.e. hyper-diffusive)
68      !!      truncation error. The overall performance of the advection scheme
69      !!      is similar to that reported in (Farrow and Stevens, 1995).
70      !!        For stability reasons, the first term of the fluxes which corresponds
71      !!      to a second order centered scheme is evaluated using the now velocity
72      !!      (centered in time) while the second term which is the diffusive part
73      !!      of the scheme, is evaluated using the before velocity (forward in time).
74      !!      Note that UBS is not positive. Do not use it on passive tracers.
75      !!                On the vertical, the advection is evaluated using a FCT scheme,
76      !!      as the UBS have been found to be too diffusive.
77      !!                kn_ubs_v argument controles whether the FCT is based on
78      !!      a 2nd order centrered scheme (kn_ubs_v=2) or on a 4th order compact
79      !!      scheme (kn_ubs_v=4).
80      !!
81      !! ** Action : - update pta  with the now advective tracer trends
82      !!             - send trends to trdtra module for further diagnostcs (l_trdtra=T)
83      !!             - htr_adv, str_adv : poleward advective heat and salt transport (ln_diaptr=T)
84      !!
85      !! Reference : Shchepetkin, A. F., J. C. McWilliams, 2005, Ocean Modelling, 9, 347-404.
86      !!             Farrow, D.E., Stevens, D.P., 1995, J. Phys. Ocean. 25, 1731Ð1741.
87      !!----------------------------------------------------------------------
88      INTEGER                              , INTENT(in   ) ::   kt              ! ocean time-step index
89      INTEGER                              , INTENT(in   ) ::   kit000          ! first time step index
90      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype          ! =TRA or TRC (tracer indicator)
91      INTEGER                              , INTENT(in   ) ::   kjpt            ! number of tracers
92      INTEGER                              , INTENT(in   ) ::   kn_ubs_v        ! number of tracers
93      REAL(wp)                             , INTENT(in   ) ::   p2dt            ! tracer time-step
94      REAL(wp), DIMENSION(jpi,jpj,jpk     ), INTENT(in   ) ::   pun, pvn, pwn   ! 3 ocean transport components
95      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb, ptn        ! before and now tracer fields
96      REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta             ! tracer trend
97      !
98      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices
99      REAL(wp) ::   ztra, zbtr, zcoef                       ! local scalars
100      REAL(wp) ::   zfp_ui, zfm_ui, zcenut, ztak, zfp_wk, zfm_wk   !   -      -
101      REAL(wp) ::   zfp_vj, zfm_vj, zcenvt, zeeu, zeev, z_hdivn    !   -      -
102      REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztu, ztv, zltu, zltv, zti, ztw
103      !!----------------------------------------------------------------------
104      !
105      IF( nn_timing == 1 )  CALL timing_start('tra_adv_ubs')
106      !
107      !
108      IF( kt == kit000 )  THEN
109         IF(lwp) WRITE(numout,*)
110         IF(lwp) WRITE(numout,*) 'tra_adv_ubs :  horizontal UBS advection scheme on ', cdtype
111         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'
112      ENDIF
113      !
114      l_trd = .FALSE.
115      l_hst = .FALSE.
116      l_ptr = .FALSE.
117      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE.
118      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE. 
119      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. &
120         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE.
121      !
122      ztw (:,:, 1 ) = 0._wp      ! surface & bottom value : set to zero for all tracers
123      zltu(:,:,jpk) = 0._wp   ;   zltv(:,:,jpk) = 0._wp
124      ztw (:,:,jpk) = 0._wp   ;   zti (:,:,jpk) = 0._wp
125      !
126      !                                                          ! ===========
127      DO jn = 1, kjpt                                            ! tracer loop
128         !                                                       ! ===========
129         !                                             
130         DO jk = 1, jpkm1        !==  horizontal laplacian of before tracer ==!
131            DO jj = 1, jpjm1              ! First derivative (masked gradient)
132               DO ji = 1, fs_jpim1   ! vector opt.
133                  zeeu = e2_e1u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk)
134                  zeev = e1_e2v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk)
135                  ztu(ji,jj,jk) = zeeu * ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) )
136                  ztv(ji,jj,jk) = zeev * ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) )
137               END DO
138            END DO
139            DO jj = 2, jpjm1              ! Second derivative (divergence)
140               DO ji = fs_2, fs_jpim1   ! vector opt.
141                  zcoef = 1._wp / ( 6._wp * e3t_n(ji,jj,jk) )
142                  zltu(ji,jj,jk) = (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)  ) * zcoef
143                  zltv(ji,jj,jk) = (  ztv(ji,jj,jk) - ztv(ji,jj-1,jk)  ) * zcoef
144               END DO
145            END DO
146            !                                   
147         END DO         
148         CALL lbc_lnk( zltu, 'T', 1. )   ;    CALL lbc_lnk( zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn)
149         !   
150         DO jk = 1, jpkm1        !==  Horizontal advective fluxes  ==!     (UBS)
151            DO jj = 1, jpjm1
152               DO ji = 1, fs_jpim1   ! vector opt.
153                  zfp_ui = pun(ji,jj,jk) + ABS( pun(ji,jj,jk) )      ! upstream transport (x2)
154                  zfm_ui = pun(ji,jj,jk) - ABS( pun(ji,jj,jk) )
155                  zfp_vj = pvn(ji,jj,jk) + ABS( pvn(ji,jj,jk) )
156                  zfm_vj = pvn(ji,jj,jk) - ABS( pvn(ji,jj,jk) )
157                  !                                                  ! 2nd order centered advective fluxes (x2)
158                  zcenut = pun(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji+1,jj  ,jk,jn) )
159                  zcenvt = pvn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji  ,jj+1,jk,jn) )
160                  !                                                  ! UBS advective fluxes
161                  ztu(ji,jj,jk) = 0.5 * ( zcenut - zfp_ui * zltu(ji,jj,jk) - zfm_ui * zltu(ji+1,jj,jk) )
162                  ztv(ji,jj,jk) = 0.5 * ( zcenvt - zfp_vj * zltv(ji,jj,jk) - zfm_vj * zltv(ji,jj+1,jk) )
163               END DO
164            END DO
165         END DO         
166         !
167         zltu(:,:,:) = pta(:,:,:,jn)      ! store the initial trends before its update
168         !
169         DO jk = 1, jpkm1        !==  add the horizontal advective trend  ==!
170            DO jj = 2, jpjm1
171               DO ji = fs_2, fs_jpim1   ! vector opt.
172                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn)                        &
173                     &             - (  ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk)    &
174                     &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)
175               END DO
176            END DO
177            !                                             
178         END DO
179         !
180         zltu(:,:,:) = pta(:,:,:,jn) - zltu(:,:,:)    ! Horizontal advective trend used in vertical 2nd order FCT case
181         !                                            ! and/or in trend diagnostic (l_trd=T)
182         !               
183         IF( l_trd ) THEN                  ! trend diagnostics
184             CALL trd_tra( kt, cdtype, jn, jptra_xad, ztu, pun, ptn(:,:,:,jn) )
185             CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pvn, ptn(:,:,:,jn) )
186         END IF
187         !     
188         !                                ! "Poleward" heat and salt transports (contribution of upstream fluxes)
189         IF( l_ptr )  CALL dia_ptr_hst( jn, 'adv', ztv(:,:,:) )
190         !                                !  heati/salt transport
191         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', ztu(:,:,:), ztv(:,:,:) )
192         !
193         !
194         !                       !== vertical advective trend  ==!
195         !
196         SELECT CASE( kn_ubs_v )       ! select the vertical advection scheme
197         !
198         CASE(  2  )                   ! 2nd order FCT
199            !         
200            IF( l_trd )   zltv(:,:,:) = pta(:,:,:,jn)          ! store pta if trend diag.
201            !
202            !                          !*  upstream advection with initial mass fluxes & intermediate update  ==!
203            DO jk = 2, jpkm1                 ! Interior value (w-masked)
204               DO jj = 1, jpj
205                  DO ji = 1, jpi
206                     zfp_wk = pwn(ji,jj,jk) + ABS( pwn(ji,jj,jk) )
207                     zfm_wk = pwn(ji,jj,jk) - ABS( pwn(ji,jj,jk) )
208                     ztw(ji,jj,jk) = 0.5_wp * (  zfp_wk * ptb(ji,jj,jk,jn) + zfm_wk * ptb(ji,jj,jk-1,jn)  ) * wmask(ji,jj,jk)
209                  END DO
210               END DO
211            END DO
212            IF( ln_linssh ) THEN             ! top ocean value (only in linear free surface as ztw has been w-masked)
213               IF( ln_isfcav ) THEN                ! top of the ice-shelf cavities and at the ocean surface
214                  DO jj = 1, jpj
215                     DO ji = 1, jpi
216                        ztw(ji,jj, mikt(ji,jj) ) = pwn(ji,jj,mikt(ji,jj)) * ptb(ji,jj,mikt(ji,jj),jn)   ! linear free surface
217                     END DO
218                  END DO   
219               ELSE                                ! no cavities: only at the ocean surface
220                  ztw(:,:,1) = pwn(:,:,1) * ptb(:,:,1,jn)
221               ENDIF
222            ENDIF
223            !
224            DO jk = 1, jpkm1           !* trend and after field with monotonic scheme
225               DO jj = 2, jpjm1
226                  DO ji = fs_2, fs_jpim1   ! vector opt.
227                     ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)
228                     pta(ji,jj,jk,jn) =   pta(ji,jj,jk,jn) +  ztak 
229                     zti(ji,jj,jk)    = ( ptb(ji,jj,jk,jn) + p2dt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk)
230                  END DO
231               END DO
232            END DO
233            CALL lbc_lnk( zti, 'T', 1. )      ! Lateral boundary conditions on zti, zsi   (unchanged sign)
234            !
235            !                          !*  anti-diffusive flux : high order minus low order
236            DO jk = 2, jpkm1        ! Interior value  (w-masked)
237               DO jj = 1, jpj
238                  DO ji = 1, jpi
239                     ztw(ji,jj,jk) = (   0.5_wp * pwn(ji,jj,jk) * ( ptn(ji,jj,jk,jn) + ptn(ji,jj,jk-1,jn) )   &
240                        &              - ztw(ji,jj,jk)   ) * wmask(ji,jj,jk)
241                  END DO
242               END DO
243            END DO
244            !                                            ! top ocean value: high order == upstream  ==>>  zwz=0
245            IF( ln_linssh )   ztw(:,:, 1 ) = 0._wp       ! only ocean surface as interior zwz values have been w-masked
246            !
247            CALL nonosc_z( ptb(:,:,:,jn), ztw, zti, p2dt )      !  monotonicity algorithm
248            !
249         CASE(  4  )                               ! 4th order COMPACT
250            CALL interp_4th_cpt( ptn(:,:,:,jn) , ztw )         ! 4th order compact interpolation of T at w-point
251            DO jk = 2, jpkm1
252               DO jj = 2, jpjm1
253                  DO ji = fs_2, fs_jpim1
254                     ztw(ji,jj,jk) = pwn(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk)
255                  END DO
256               END DO
257            END DO
258            IF( ln_linssh )   ztw(:,:, 1 ) = pwn(:,:,1) * ptn(:,:,1,jn)     !!gm ISF & 4th COMPACT doesn't work
259            !
260         END SELECT
261         !
262         DO jk = 1, jpkm1        !  final trend with corrected fluxes
263            DO jj = 2, jpjm1 
264               DO ji = fs_2, fs_jpim1   ! vector opt.   
265                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)
266               END DO
267            END DO
268         END DO
269         !
270         IF( l_trd )  THEN       ! vertical advective trend diagnostics
271            DO jk = 1, jpkm1                       ! (compute -w.dk[ptn]= -dk[w.ptn] + ptn.dk[w])
272               DO jj = 2, jpjm1
273                  DO ji = fs_2, fs_jpim1   ! vector opt.
274                     zltv(ji,jj,jk) = pta(ji,jj,jk,jn) - zltv(ji,jj,jk)                          &
275                        &           + ptn(ji,jj,jk,jn) * (  pwn(ji,jj,jk) - pwn(ji,jj,jk+1)  )   &
276                        &                              * r1_e1e2t(ji,jj) / e3t_n(ji,jj,jk)
277                  END DO
278               END DO
279            END DO
280            CALL trd_tra( kt, cdtype, jn, jptra_zad, zltv )
281         ENDIF
282         !
283      END DO
284      !
285      !
286      IF( nn_timing == 1 )  CALL timing_stop('tra_adv_ubs')
287      !
288   END SUBROUTINE tra_adv_ubs
289
290
291   SUBROUTINE nonosc_z( pbef, pcc, paft, p2dt )
292      !!---------------------------------------------------------------------
293      !!                    ***  ROUTINE nonosc_z  ***
294      !!     
295      !! **  Purpose :   compute monotonic tracer fluxes from the upstream
296      !!       scheme and the before field by a nonoscillatory algorithm
297      !!
298      !! **  Method  :   ... ???
299      !!       warning : pbef and paft must be masked, but the boundaries
300      !!       conditions on the fluxes are not necessary zalezak (1979)
301      !!       drange (1995) multi-dimensional forward-in-time and upstream-
302      !!       in-space based differencing for fluid
303      !!----------------------------------------------------------------------
304      REAL(wp), INTENT(in   )                          ::   p2dt   ! tracer time-step
305      REAL(wp),                DIMENSION (jpi,jpj,jpk) ::   pbef   ! before field
306      REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   paft   ! after field
307      REAL(wp), INTENT(inout), DIMENSION (jpi,jpj,jpk) ::   pcc    ! monotonic flux in the k direction
308      !
309      INTEGER  ::   ji, jj, jk   ! dummy loop indices
310      INTEGER  ::   ikm1         ! local integer
311      REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn   ! local scalars
312      REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbetup, zbetdo
313      !!----------------------------------------------------------------------
314      !
315      IF( nn_timing == 1 )  CALL timing_start('nonosc_z')
316      !
317      !
318      zbig  = 1.e+40_wp
319      zrtrn = 1.e-15_wp
320      zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp
321      !
322      ! Search local extrema
323      ! --------------------
324      !                    ! large negative value (-zbig) inside land
325      pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:) - zbig * ( 1.e0 - tmask(:,:,:) )
326      paft(:,:,:) = paft(:,:,:) * tmask(:,:,:) - zbig * ( 1.e0 - tmask(:,:,:) )
327      !
328      DO jk = 1, jpkm1     ! search maximum in neighbourhood
329         ikm1 = MAX(jk-1,1)
330         DO jj = 2, jpjm1
331            DO ji = fs_2, fs_jpim1   ! vector opt.
332               zbetup(ji,jj,jk) = MAX(  pbef(ji  ,jj  ,jk  ), paft(ji  ,jj  ,jk  ),   &
333                  &                     pbef(ji  ,jj  ,ikm1), pbef(ji  ,jj  ,jk+1),   &
334                  &                     paft(ji  ,jj  ,ikm1), paft(ji  ,jj  ,jk+1)  )
335            END DO
336         END DO
337      END DO
338      !                    ! large positive value (+zbig) inside land
339      pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:) + zbig * ( 1.e0 - tmask(:,:,:) )
340      paft(:,:,:) = paft(:,:,:) * tmask(:,:,:) + zbig * ( 1.e0 - tmask(:,:,:) )
341      !
342      DO jk = 1, jpkm1     ! search minimum in neighbourhood
343         ikm1 = MAX(jk-1,1)
344         DO jj = 2, jpjm1
345            DO ji = fs_2, fs_jpim1   ! vector opt.
346               zbetdo(ji,jj,jk) = MIN(  pbef(ji  ,jj  ,jk  ), paft(ji  ,jj  ,jk  ),   &
347                  &                     pbef(ji  ,jj  ,ikm1), pbef(ji  ,jj  ,jk+1),   &
348                  &                     paft(ji  ,jj  ,ikm1), paft(ji  ,jj  ,jk+1)  )
349            END DO
350         END DO
351      END DO
352      !                    ! restore masked values to zero
353      pbef(:,:,:) = pbef(:,:,:) * tmask(:,:,:)
354      paft(:,:,:) = paft(:,:,:) * tmask(:,:,:)
355      !
356      ! Positive and negative part of fluxes and beta terms
357      ! ---------------------------------------------------
358      DO jk = 1, jpkm1
359         DO jj = 2, jpjm1
360            DO ji = fs_2, fs_jpim1   ! vector opt.
361               ! positive & negative part of the flux
362               zpos = MAX( 0., pcc(ji  ,jj  ,jk+1) ) - MIN( 0., pcc(ji  ,jj  ,jk  ) )
363               zneg = MAX( 0., pcc(ji  ,jj  ,jk  ) ) - MIN( 0., pcc(ji  ,jj  ,jk+1) )
364               ! up & down beta terms
365               zbt = e1e2t(ji,jj) * e3t_n(ji,jj,jk) / p2dt
366               zbetup(ji,jj,jk) = ( zbetup(ji,jj,jk) - paft(ji,jj,jk) ) / (zpos+zrtrn) * zbt
367               zbetdo(ji,jj,jk) = ( paft(ji,jj,jk) - zbetdo(ji,jj,jk) ) / (zneg+zrtrn) * zbt
368            END DO
369         END DO
370      END DO
371      !
372      ! monotonic flux in the k direction, i.e. pcc
373      ! -------------------------------------------
374      DO jk = 2, jpkm1
375         DO jj = 2, jpjm1
376            DO ji = fs_2, fs_jpim1   ! vector opt.
377               za = MIN( 1., zbetdo(ji,jj,jk), zbetup(ji,jj,jk-1) )
378               zb = MIN( 1., zbetup(ji,jj,jk), zbetdo(ji,jj,jk-1) )
379               zc = 0.5 * ( 1.e0 + SIGN( 1.e0, pcc(ji,jj,jk) ) )
380               pcc(ji,jj,jk) = pcc(ji,jj,jk) * ( zc * za + ( 1.e0 - zc) * zb )
381            END DO
382         END DO
383      END DO
384      !
385      !
386      IF( nn_timing == 1 )  CALL timing_stop('nonosc_z')
387      !
388   END SUBROUTINE nonosc_z
389
390   !!======================================================================
391END MODULE traadv_ubs
Note: See TracBrowser for help on using the repository browser.