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.
trczdf_iso.F90 in trunk/NEMO/TOP_SRC/TRP – NEMO

source: trunk/NEMO/TOP_SRC/TRP/trczdf_iso.F90 @ 1187

Last change on this file since 1187 was 1187, checked in by cetlod, 16 years ago

change CPP key key_trc_ldfiso to key_trcldf_iso to compute vertical diffusion trends, see ticket:248

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 22.1 KB
Line 
1MODULE trczdf_iso
2   !!==============================================================================
3   !!                    ***  MODULE  trczdf_iso  ***
4   !! Ocean passive tracers:  vertical component of the tracer mixing trend
5   !!==============================================================================
6   !! History :  7.0  !  91-11  (G. Madec)  Original code
7   !!                 !  92-06  (M. Imbard)  correction on tracer trend loops
8   !!                 !  96-01  (G. Madec)  statement function for e3
9   !!                 !  97-05  (G. Madec)  vertical component of isopycnal
10   !!                 !  97-07  (G. Madec)  geopotential diffusion in s-coord
11   !!                 !  98-03  (L. Bopp MA Foujols) passive tracer generalisation
12   !!                 !  00-05  (MA Foujols) add lbc for tracer trends
13   !!                 !  00-06  (O Aumont)  correct isopycnal scheme suppress
14   !!                 !                     avt multiple correction
15   !!                 !  00-08  (G. Madec)  double diffusive mixing
16   !!            8.5  !  02-08  (G. Madec)  F90: Free form and module
17   !!            9.0  !  04-03  (C. Ethe )  adapted for passive tracers
18   !!----------------------------------------------------------------------
19#if defined key_top  &&  ( defined key_ldfslp   ||   defined key_esopa )
20   !!----------------------------------------------------------------------
21   !!   'key_top'       and                                      TOP models
22   !!   'key_ldfslp'                  rotation of the lateral mixing tensor
23   !!----------------------------------------------------------------------
24   !!   trc_zdf_iso  : update the tracer trend with the vertical part of
25   !!                  the isopycnal or geopotential s-coord. operator and
26   !!                  the vertical diffusion
27   !!----------------------------------------------------------------------
28   !! * Modules used
29   USE oce_trc          ! ocean dynamics and tracers variables
30   USE trp_trc              ! ocean passive tracers variables
31   USE lbclnk           ! ocean lateral boundary conditions (or mpp link)
32   USE trctrp_lec       ! passive tracers transport
33   USE trdmld_trc
34   USE trdmld_trc_oce
35   USE prtctl_trc          ! Print control for debbuging
36
37   IMPLICIT NONE
38   PRIVATE
39
40   !! * Accessibility
41   PUBLIC trc_zdf_iso    ! routine called by step.F90
42
43   !! * Module variable
44   REAL(wp), DIMENSION(jpk) ::   &
45      rdttrc                     ! vertical profile of 2 x tracer time-step
46
47   !! * Substitutions
48#  include "top_substitute.h90"
49   !!----------------------------------------------------------------------
50   !!   TOP 1.0 , LOCEAN-IPSL (2005)
51   !! $Id$
52   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
53   !!----------------------------------------------------------------------
54
55CONTAINS
56
57   SUBROUTINE trc_zdf_iso( kt )
58      !!----------------------------------------------------------------------
59      !!                  ***  ROUTINE trc_zdf_iso  ***
60      !!
61      !! ** Purpose :
62      !!     Compute the trend due to the vertical tracer diffusion inclu-
63      !!     ding the vertical component of lateral mixing (only for second
64      !!     order operator, for fourth order it is already computed and
65      !!     add to the general trend in trcldf.F) and add it to the general
66      !!     trend of the tracer equations.
67      !!
68      !! ** Method :
69      !!         The vertical component of the lateral diffusive trends is
70      !!      provided by a 2nd order operator rotated along neural or geopo-
71      !!      tential surfaces to which an eddy induced advection can be added
72      !!      It is computed using before fields (forward in time) and isopyc-
73      !!      nal or geopotential slopes computed in routine ldfslp.
74      !!
75      !!      First part: vertical trends associated with the lateral mixing
76      !!      ==========  (excluding the vertical flux proportional to dk[t] )
77      !!      vertical fluxes associated with the rotated lateral mixing:
78      !!         zftw =-aht {  e2t*wslpi di[ mi(mk(trb)) ]
79      !!                     + e1t*wslpj dj[ mj(mk(trb)) ]  }
80      !!      save avt coef. resulting from vertical physics alone in zavt:
81      !!         zavt = avt
82      !!      update and save in zavt the vertical eddy viscosity coefficient:
83      !!         avt = avt + wslpi^2+wslj^2
84      !!      add vertical Eddy Induced advective fluxes ('lk_trcldf_eiv=T):
85      !!         zftw = zftw + { di[aht e2u mi(wslpi)]
86      !!                    +dj[aht e1v mj(wslpj)] } mk(trb)
87      !!      take the horizontal divergence of the fluxes:
88      !!         difft = 1/(e1t*e2t*e3t) dk[ zftw ]
89      !!      Add this trend to the general trend tra :
90      !!         tra = tra + difft
91      !!
92      !!      Second part: vertical trend associated with the vertical physics
93      !!      ===========  (including the vertical flux proportional to dk[t]
94      !!                  associated with the lateral mixing, through the
95      !!                  update of avt)
96      !!      The vertical diffusion of tracers tra  is given by:
97      !!             difft = dz( avt dz(t) ) = 1/e3t dk+1( avt/e3w dk(t) )
98      !!      It is computed using a backward time scheme, t=ta.
99      !!      Surface and bottom boundary conditions: no diffusive flux on
100      !!      both tracers (bottom, applied through the masked field avt).
101      !!      Add this trend to the general trend tra  :
102      !!         tra = tra + dz( avt dz(t) )
103      !!         (tra = tra + dz( avs dz(t) ) if lk_trc_zdfddm=T )
104      !!
105      !!      Third part: recover avt resulting from the vertical physics
106      !!      ==========  alone, for further diagnostics (for example to
107      !!                  compute the turbocline depth in diamld).
108      !!         avt = zavt
109      !!         (avs = zavs if lk_trc_zdfddm=T )
110      !!
111      !!      'key_trdmld_trc' defined: trend saved for futher diagnostics.
112      !!
113      !!      macro-tasked on vertical slab (jj-loop)
114      !!
115      !! ** Action :
116      !!         Update tra arrays with the before vertical diffusion trend
117      !!         Save in trtrd arrays the trends if 'key_trdmld_trc' defined
118      !!---------------------------------------------------------------------
119      !! * Modules used
120      USE oce_trc , ONLY :    zavs => va, ztrtrd => ua
121
122      !! * Arguments
123      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index
124
125      !! * Local declarations
126      INTEGER ::   ji, jj, jk, jn                 ! dummy loop indices
127      INTEGER ::   ikst, ikenm2, ikstp1       ! temporary integers
128      INTEGER ::   iku, ikv, ikv1             ! temporary integers
129
130      REAL(wp) ::   ztra
131      REAL(wp) ::   &
132         ztavg,                 &  ! ???
133         zcoef0, zcoef3,        &  ! ???
134         zcoef4, zavi,          &  ! ???
135         zbtr, zmku, zmkv,      &  !
136         ztav
137      REAL(wp), DIMENSION(jpi,jpk) ::   &
138         zwd, zws, zwi,         &  ! ???
139         zwx, zwy, zwz, zwt        ! ???
140      REAL(wp), DIMENSION(jpi,jpk) ::   &
141         ztfw, zdit, zdjt, zdj1t
142#if defined key_trcldf_eiv   ||   defined key_esopa
143      REAL(wp), DIMENSION(jpi,jpk) ::   &
144         ztfwg
145
146      REAL(wp) ::         &
147         zcoeg3,          &
148         zuwk, zvwk,      &
149         zuwki, zvwki, z_hdivn_z
150#endif
151      CHARACTER (len=22) :: charout
152      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  ztrtrd_tmp
153      !!---------------------------------------------------------------------
154
155      IF( kt == nittrc000 ) THEN
156         IF(lwp) WRITE(numout,*)
157         IF(lwp) WRITE(numout,*) 'trc_zdf_iso : vertical mixing (including isopycnal component)'
158         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
159#if defined key_trcldf_eiv && defined key_diaeiv
160         w_trc_eiv(:,:,:) = 0.e0
161#endif
162      ENDIF
163
164
165      ! 0.0  Local constant initialization
166      ! --------------------------------
167      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
168         ! time step = 2 rdttra with Arakawa or TVD advection scheme
169         IF( neuler == 0 .AND. kt == nittrc000 ) THEN
170            rdttrc(:) =  rdttra(:) * FLOAT(ndttrc)             ! restarting with Euler time stepping
171         ELSEIF( kt <= nittrc000 + ndttrc ) THEN
172            rdttrc(:) = 2. * rdttra(:) * FLOAT(ndttrc)         ! leapfrog
173         ENDIF
174      ELSE
175         rdttrc(:) =  rdttra(:) * FLOAT(ndttrc)     
176      ENDIF
177
178
179
180      ! 0.1 Save avs in zavs to recover avs in output files
181      !---------------------------------------------------
182      zavs(:,:,:) = fstravs(:,:,:)
183
184
185
186      DO jn = 1, jptra
187
188         IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)          ! save trends
189
190         ztavg = 0.e0
191
192         !                                                ! ===============
193         DO jj = 2, jpjm1                                 !  Vertical slab
194            !                                             ! ===============
195
196            ! I. vertical trends associated with the lateral mixing
197            ! =====================================================
198            !  (excluding the vertical flux proportional to dk[t]
199
200
201            ! I.1 horizontal tracer gradient
202            ! ------------------------------
203
204            DO jk = 1, jpkm1
205               DO ji = 1, jpim1
206                  ! i-gradient of passive tracer at jj
207                  zdit (ji,jk) = ( trb(ji+1,jj,jk,jn)-trb(ji,jj,jk,jn) ) * umask(ji,jj,jk)
208                  ! j-gradient of passive tracer at jj
209                  zdjt (ji,jk) = ( trb(ji,jj+1,jk,jn)-trb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)
210                  ! j-gradient of passive tracer at jj+1
211                  zdj1t(ji,jk) = ( trb(ji,jj,jk,jn)-trb(ji,jj-1,jk,jn) ) * vmask(ji,jj-1,jk)
212               END DO
213            END DO
214
215            IF( ln_zps ) THEN
216               ! partial steps correction at the bottom ocean level
217               DO ji = 1, jpim1
218                  ! last ocean level
219                  iku  = MIN( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1
220                  ikv  = MIN( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1
221                  ikv1 = MIN( mbathy(ji,jj), mbathy(ji  ,jj-1) ) - 1
222                  ! i-gradient of of passive tracer at jj
223                  zdit (ji,iku) = gtru(ji,jj,jn)
224                  ! j-gradient of of passive tracer at jj
225                  zdjt (ji,ikv) = gtrv(ji,jj,jn) 
226                  ! j-gradient of of passive tracer at jj+1
227                  zdj1t(ji,ikv1)= gtrv(ji,jj-1,jn)
228               END DO
229            ENDIF
230
231            ! I.2 Vertical fluxes
232            ! -------------------
233
234            ! Surface and bottom vertical fluxes set to zero
235            ztfw(:, 1 ) = 0.e0
236            ztfw(:,jpk) = 0.e0
237
238#if defined key_trcldf_eiv
239            ztfwg(:, 1 ) = 0.e0
240            ztfwg(:,jpk) = 0.e0
241#endif
242
243            ! interior (2=<jk=<jpk-1)
244            DO jk = 2, jpkm1
245               DO ji = 2, jpim1
246                  zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk)
247
248                  zmku = 1./MAX( umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)   &
249                     &          +umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk), 1. )
250
251                  zmkv = 1./MAX( vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)   &
252                     &          +vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk), 1. )
253
254                  zcoef3 = zcoef0 * e2t(ji,jj) * zmku * wslpi (ji,jj,jk)
255                  zcoef4 = zcoef0 * e1t(ji,jj) * zmkv * wslpj (ji,jj,jk)
256
257                  ztfw(ji,jk) = zcoef3 * ( zdit (ji  ,jk-1) + zdit (ji-1,jk)     &
258                     &                    +zdit (ji-1,jk-1) + zdit (ji  ,jk) )   &
259                     &        + zcoef4 * ( zdjt (ji  ,jk-1) + zdj1t(ji  ,jk)     &
260                     &                    +zdj1t(ji  ,jk-1) + zdjt (ji  ,jk) )
261
262               END DO
263            END DO
264
265
266            ! I.3  update and save of avt (and avs if double diffusive mixing)
267            ! ---------------------------
268
269            DO jk = 2, jpkm1
270               DO ji = 2, jpim1
271
272                  zavi = fsahtw(ji,jj,jk)*( wslpi(ji,jj,jk)*wslpi(ji,jj,jk)   &
273                     &                     +wslpj(ji,jj,jk)*wslpj(ji,jj,jk) )
274
275                  ! add isopycnal vertical coeff. to avs
276                  fstravs(ji,jj,jk) = fstravs(ji,jj,jk) + zavi
277
278               END DO
279            END DO
280
281#if defined key_trcldf_eiv
282            !                              ! ---------------------------------------!
283            !                              ! Eddy induced vertical advective fluxes !
284            !                              ! ---------------------------------------!
285#if defined key_traldf_c2d || defined key_traldf_c3d || defined key_off_degrad
286            DO jk = 2, jpkm1
287               DO ji = 2, jpim1
288                  zuwki = ( wslpi(ji,jj,jk) + wslpi(ji-1,jj,jk) )   &
289                     &  * fsaeitru(ji-1,jj,jk) * e2u(ji-1,jj)*umask(ji-1,jj,jk)
290                  zuwk  = ( wslpi(ji,jj,jk) + wslpi(ji+1,jj,jk) )   &
291                     &  * fsaeitru(ji  ,jj,jk) * e2u(ji  ,jj)*umask(ji  ,jj,jk)
292                  zvwki = ( wslpj(ji,jj,jk) + wslpj(ji,jj-1,jk) )   &
293                     &  * fsaeitrv(ji,jj-1,jk) * e1v(ji,jj-1)*vmask(ji,jj-1,jk)
294                  zvwk  = ( wslpj(ji,jj,jk) + wslpj(ji,jj+1,jk) )   &
295                     &  * fsaeitrv(ji,jj  ,jk) * e1v(ji  ,jj)*vmask(ji  ,jj,jk)
296
297                  zcoeg3 = + 0.25 * tmask(ji,jj,jk) * ( zuwk - zuwki + zvwk - zvwki )
298
299                  ztfwg(ji,jk) = + zcoeg3 * ( trb(ji,jj,jk,jn) + trb(ji,jj,jk-1,jn) ) 
300                  ztfw(ji,jk) = ztfw(ji,jk) + ztfwg(ji,jk)
301
302# if defined key_diaeiv
303                  w_trc_eiv(ji,jj,jk) = -2. *  zcoeg3 / ( e1t(ji,jj)*e2t(ji,jj) )
304# endif
305               END DO
306            END DO
307
308#else
309            DO jk = 2, jpkm1
310               DO ji = 2, jpim1
311                  zuwki = ( wslpi(ji,jj,jk) + wslpi(ji-1,jj,jk) )   &
312                     &  * e2u(ji-1,jj)*umask(ji-1,jj,jk)
313                  zuwk  = ( wslpi(ji,jj,jk) + wslpi(ji+1,jj,jk) )   &
314                     &  * e2u(ji  ,jj)*umask(ji  ,jj,jk)
315                  zvwki = ( wslpj(ji,jj,jk) + wslpj(ji,jj-1,jk) )   &
316                     &  * e1v(ji,jj-1)*vmask(ji,jj-1,jk)
317                  zvwk  = ( wslpj(ji,jj,jk) + wslpj(ji,jj+1,jk) )   &
318                     &  * e1v(ji  ,jj)*vmask(ji  ,jj,jk)
319
320                  zcoeg3 = + 0.25 * tmask(ji,jj,jk) * fsaeitrw(ji,jj,jk)   &
321                     &            * ( zuwk - zuwki + zvwk - zvwki )
322
323                  ztfwg(ji,jk) = + zcoeg3 * ( trb(ji,jj,jk,jn) + trb(ji,jj,jk-1,jn) )
324                  ztfw(ji,jk) = ztfw(ji,jk) + ztfwg(ji,jk)
325
326# if defined key_diaeiv
327                  w_trc_eiv(ji,jj,jk) = -2. *  zcoeg3 / ( e1t(ji,jj)*e2t(ji,jj) )
328# endif
329               END DO
330            END DO
331#endif
332
333#endif
334
335
336            ! I.5 Divergence of vertical fluxes added to the general tracer trend
337            ! -------------------------------------------------------------------
338
339            DO jk = 1, jpkm1
340               DO ji = 2, jpim1
341                  zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )
342                  ztav = (  ztfw(ji,jk) - ztfw(ji,jk+1)  ) * zbtr
343                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztav
344#if defined key_trc_diatrd
345#   if defined key_trcldf_eiv
346                  ztavg = ( ztfwg(ji,jk) - ztfwg(ji,jk+1) ) * zbtr
347                  !  WARNING trtrd(ji,jj,jk,6) used for vertical gent velocity trend
348                  !                           not for damping !!!
349                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztavg
350#   endif
351                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztav - ztavg
352#endif
353
354               END DO
355            END DO
356            !                                             ! ===============
357         END DO                                           !   End of slab
358         !                                                ! ===============
359         ! II. Save the trends for diagnostics
360         ! ===================================
361         IF( l_trdtrc ) THEN
362#   if defined key_trcldf_eiv
363
364            ! II.1) Compute the eiv VERTICAL trend
365            DO jj = 2, jpjm1
366               DO jk = 1, jpkm1
367                  DO ji = 2, jpim1
368
369                     !-- Compute the eiv vertical divergence : 1/e3t ( dk[w_eiv] )
370                     !   N.B. This is only possible if key_diaeiv is switched on.
371                     !     Else, the vertical eiv is not diagnosed,
372                     !     so we can only store the flux form trend d_z ( T * w_eiv )
373                     !     instead of w_eiv * d_z( T ). Then, ONLY THE SUM of zonal,
374                     !     meridional, and vertical trends are valid.
375#       if defined key_diaeiv
376                     z_hdivn_z = ( 1./e3t(jk) ) * ( w_trc_eiv(ji,jj,jk) - w_trc_eiv(ji,jj,jk+1) )
377#       else
378                     z_hdivn_z = 0.e0
379#       endif
380                     !-- Compute the vertical advective trend associated with eiv
381                     zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )
382                     ztrtrd_tmp(ji,jj,jk) = (  ztfwg(ji,jk) - ztfwg(ji,jk+1)  ) * zbtr   &
383                          &                 - trn(ji,jj,jk,jn) * z_hdivn_z
384                  END DO
385               END DO
386            END DO
387
388            ! II.2) Save the vertical eiv trend
389            IF (luttrd(jn)) CALL trd_mod_trc( ztrtrd_tmp, jn, jptrc_trd_zei, kt )
390
391#   endif
392
393            !-- Remove vert. eiv from the current up-to-date trend
394            !   N.B. ztrtrd_tmp is recycled for this purpose
395            ztrtrd_tmp(:,:,:) = ( tra(:,:,:,jn) - ztrtrd(:,:,:) ) - ztrtrd_tmp(:,:,:)
396
397            ! Save the new trends
398            ztrtrd(:,:,:) = tra(:,:,:,jn)
399         END IF
400
401
402      END DO
403
404      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
405         WRITE(charout, FMT="('zdf - 1')")
406         CALL prt_ctl_trc_info(charout)
407         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')
408      ENDIF
409
410      DO jn = 1, jptra
411         !                                                ! ===============
412         DO jj = 2, jpjm1                                 !  Vertical slab
413            !                                             ! ===============
414
415            ! II. Vertical trend associated with the vertical physics
416            ! =======================================================
417            !     (including the vertical flux proportional to dk[t] associated
418            !      with the lateral mixing, through the avt update)
419            !     dk[ avt dk[ (t,s) ] ] diffusive trends
420
421
422            ! Diagonal, inferior, superior
423            ! (including the bottom boundary condition via avs masked)
424            DO jk = 1, jpkm1
425               DO ji = 2, jpim1
426                  zwi(ji,jk) = - rdttrc(jk) * fstravs(ji,jj,jk  )   &
427                     /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) )
428                  zws(ji,jk) = - rdttrc(jk) * fstravs(ji,jj,jk+1)   &
429                     /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) )
430                  zwd(ji,jk) = 1. - zwi(ji,jk) - zws(ji,jk)
431               END DO
432            END DO
433
434            ! Surface boudary conditions
435            DO ji = 2, jpim1
436               zwi(ji,1) = 0.e0
437               zwd(ji,1) = 1. - zws(ji,1)
438            END DO
439
440            ! Second member construction
441            DO jk = 1, jpkm1
442               DO ji = 2, jpim1
443                  zwy(ji,jk) = trb(ji,jj,jk,jn) + rdttrc(jk) * tra(ji,jj,jk,jn)
444               END DO
445            END DO
446
447            ! Matrix inversion from the first level
448            ikst = 1
449#   include "zdf.matrixsolver.h90"
450#if defined key_trc_diatrd
451            ! Compute and save the vertical diffusive of tracers trends
452#  if defined key_trcldf_iso
453            DO jk = 1, jpkm1
454               DO ji = 2, jpim1
455                  ztra = ( zwx(ji,jk) - trb(ji,jj,jk,jn) ) / rdttrc(jk)
456                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztra - tra(ji,jj,jk,jn) + trtrd(ji,jj,jk,ikeep(jn),6)
457               END DO
458            END DO
459#  else
460            DO jk = 1, jpkm1
461               DO ji = 2, jpim1
462                  ztra = ( zwx(ji,jk) - trb(ji,jj,jk,jn) ) / rdttrc(jk)
463                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztra - tra(ji,jj,jk,jn)
464               END DO
465            END DO
466#  endif
467#endif
468            ! Compute and save the vertical diffusive of tracers trends
469            ! Save the masked passive tracer after in tra
470            ! (c a u t i o n:  tracer not its trend, Leap-frog scheme done
471            !                  it will not be done in tranxt)
472            DO jk = 1, jpkm1
473               DO ji = 2, jpim1
474                  tra(ji,jj,jk,jn) = zwx(ji,jk)  * tmask(ji,jj,jk)
475               END DO
476            END DO
477            !                                             ! ===============
478         END DO                                           !   End of slab
479         !                                                ! ===============
480
481         ! IV. Save the trends for diagnostics
482         ! ===================================
483         IF( l_trdtrc ) THEN
484            ! deduce the full vertical diff. trend (except for vertical eiv advection)
485#if defined key_trcldf_iso
486            DO jk = 1, jpkm1
487               ztrtrd(:,:,jk) = ( (tra(:,:,jk,jn) - trb(:,:,jk,jn))/rdttrc(jk) ) - ztrtrd(:,:,jk) + ztrtrd_tmp(:,:,jk)
488            END DO
489#else
490            DO jk = 1, jpkm1
491               ztrtrd(:,:,jk) = ( (tra(:,:,jk,jn) - trb(:,:,jk,jn))/rdttrc(jk) ) - ztrtrd(:,:,jk)
492            END DO
493#endif
494            IF (luttrd(jn)) CALL trd_mod_trc( ztrtrd, jn, jptrc_trd_zdf, kt )
495
496         END IF
497
498      END DO
499
500
501
502      ! III. recover the avt (avs) resulting from vertical physics only
503      !---------------------------------------------------------------
504      fstravs(:,:,:) = zavs(:,:,:)
505
506     
507      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
508         WRITE(charout, FMT="('zdf - 2')")
509         CALL prt_ctl_trc_info(charout)
510         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')
511      ENDIF
512
513   END SUBROUTINE trc_zdf_iso
514
515#else
516   !!----------------------------------------------------------------------
517   !!   Dummy module               NO rotation of the lateral mixing tensor
518   !!----------------------------------------------------------------------
519CONTAINS
520   SUBROUTINE trc_zdf_iso( kt )              ! empty routine
521      WRITE(*,*) 'trc_zdf_iso: You should not have seen this print! error?', kt
522   END SUBROUTINE trc_zdf_iso
523#endif
524
525   !!==============================================================================
526END MODULE trczdf_iso
Note: See TracBrowser for help on using the repository browser.