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_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

source: branches/2017/dev_CNRS_2017/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90 @ 8882

Last change on this file since 8882 was 8882, checked in by flavoni, 6 years ago

dev_CNRS_2017 branch: merged dev_r7881_ENHANCE09_RK3 with trunk r8864

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