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

source: branches/2015/dev_r5836_NOC3_vvl_by_default/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90 @ 5883

Last change on this file since 5883 was 5883, checked in by gm, 8 years ago

#1613: vvl by default: TRA/TRC remove optimization associated with linear free surface

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