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 branches/DEV_r1879_FCM/NEMOGCM/NEMO/TOP_SRC/TRP – NEMO

source: branches/DEV_r1879_FCM/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf_iso.F90 @ 2013

Last change on this file since 2013 was 2013, checked in by smasson, 14 years ago

remove propertie svn:executabe of fortran files in DEV_r1879_FCM

  • Property svn:keywords set to Id
File size: 22.2 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 , 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) ::   &
131         ztavg,                 &  ! ???
132         zcoef0, zcoef3,        &  ! ???
133         zcoef4, zavi,          &  ! ???
134         zbtr, zmku, zmkv,      &  !
135         ztav
136      REAL(wp), DIMENSION(jpi,jpk) ::   &
137         zwd, zws, zwi,         &  ! ???
138         zwx, zwy, zwz, zwt        ! ???
139      REAL(wp), DIMENSION(jpi,jpk) ::   &
140         ztfw, zdit, zdjt, zdj1t
141#if defined key_trcldf_eiv   ||   defined key_esopa
142      REAL(wp), DIMENSION(jpi,jpk) ::   &
143         ztfwg
144
145      REAL(wp) ::         &
146         zcoeg3,          &
147         zuwk, zvwk,      &
148         zuwki, zvwki, z_hdivn_z
149#endif
150      CHARACTER (len=22) :: charout
151      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  ztrtrd_tmp
152      !!---------------------------------------------------------------------
153
154      IF( kt == nittrc000 ) THEN
155         IF(lwp) WRITE(numout,*)
156         IF(lwp) WRITE(numout,*) 'trc_zdf_iso : vertical mixing (including isopycnal component)'
157         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
158#if defined key_trcldf_eiv && defined key_diaeiv
159         w_trc_eiv(:,:,:) = 0.e0
160#endif
161      ENDIF
162
163
164      ! 0.0  Local constant initialization
165      ! --------------------------------
166      IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN
167         ! time step = 2 rdttra with Arakawa or TVD advection scheme
168         IF( neuler == 0 .AND. kt == nittrc000 ) THEN
169            rdttrc(:) =  rdttra(:) * FLOAT(ndttrc)             ! restarting with Euler time stepping
170         ELSEIF( kt <= nittrc000 + ndttrc ) THEN
171            rdttrc(:) = 2. * rdttra(:) * FLOAT(ndttrc)         ! leapfrog
172         ENDIF
173      ELSE
174         rdttrc(:) =  rdttra(:) * FLOAT(ndttrc)     
175      ENDIF
176
177
178
179      ! 0.1 Save avs in zavs to recover avs in output files
180      !---------------------------------------------------
181      zavs(:,:,:) = fstravs(:,:,:)
182
183
184      ! 0.2 Update and save of avt (and avs if double diffusive mixing)
185      ! ---------------------------
186
187     DO jj = 2, jpjm1                                 !  Vertical slab
188        !                                             ! ===============
189         DO jk = 2, jpkm1
190            DO ji = 2, jpim1
191               zavi = fsahtw(ji,jj,jk)*( wslpi(ji,jj,jk)*wslpi(ji,jj,jk)   &
192                  &                     +wslpj(ji,jj,jk)*wslpj(ji,jj,jk) )
193               ! add isopycnal vertical coeff. to avs
194               fstravs(ji,jj,jk) = fstravs(ji,jj,jk) + zavi
195            END DO
196         END DO
197       !
198     END DO
199
200
201
202     DO jn = 1, jptra
203
204         IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)          ! save trends
205
206         ztavg = 0.e0
207
208         !                                                ! ===============
209         DO jj = 2, jpjm1                                 !  Vertical slab
210            !                                             ! ===============
211
212            ! I. vertical trends associated with the lateral mixing
213            ! =====================================================
214            !  (excluding the vertical flux proportional to dk[t]
215
216
217            ! I.1 horizontal tracer gradient
218            ! ------------------------------
219
220            DO jk = 1, jpkm1
221               DO ji = 1, jpim1
222                  ! i-gradient of passive tracer at jj
223                  zdit (ji,jk) = ( trb(ji+1,jj,jk,jn)-trb(ji,jj,jk,jn) ) * umask(ji,jj,jk)
224                  ! j-gradient of passive tracer at jj
225                  zdjt (ji,jk) = ( trb(ji,jj+1,jk,jn)-trb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)
226                  ! j-gradient of passive tracer at jj+1
227                  zdj1t(ji,jk) = ( trb(ji,jj,jk,jn)-trb(ji,jj-1,jk,jn) ) * vmask(ji,jj-1,jk)
228               END DO
229            END DO
230
231            IF( ln_zps ) THEN
232               ! partial steps correction at the bottom ocean level
233               DO ji = 1, jpim1
234                  ! last ocean level
235                  iku  = MIN( mbathy(ji,jj), mbathy(ji+1,jj  ) ) - 1
236                  ikv  = MIN( mbathy(ji,jj), mbathy(ji  ,jj+1) ) - 1
237                  ikv1 = MIN( mbathy(ji,jj), mbathy(ji  ,jj-1) ) - 1
238                  ! i-gradient of of passive tracer at jj
239                  zdit (ji,iku) = gtru(ji,jj,jn)
240                  ! j-gradient of of passive tracer at jj
241                  zdjt (ji,ikv) = gtrv(ji,jj,jn) 
242                  ! j-gradient of of passive tracer at jj+1
243                  zdj1t(ji,ikv1)= gtrv(ji,jj-1,jn)
244               END DO
245            ENDIF
246
247            ! I.2 Vertical fluxes
248            ! -------------------
249
250            ! Surface and bottom vertical fluxes set to zero
251            ztfw(:, 1 ) = 0.e0
252            ztfw(:,jpk) = 0.e0
253
254#if defined key_trcldf_eiv
255            ztfwg(:, 1 ) = 0.e0
256            ztfwg(:,jpk) = 0.e0
257#endif
258
259            ! interior (2=<jk=<jpk-1)
260            DO jk = 2, jpkm1
261               DO ji = 2, jpim1
262                  zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk)
263
264                  zmku = 1./MAX( umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)   &
265                     &          +umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk), 1. )
266
267                  zmkv = 1./MAX( vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)   &
268                     &          +vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk), 1. )
269
270                  zcoef3 = zcoef0 * e2t(ji,jj) * zmku * wslpi (ji,jj,jk)
271                  zcoef4 = zcoef0 * e1t(ji,jj) * zmkv * wslpj (ji,jj,jk)
272
273                  ztfw(ji,jk) = zcoef3 * ( zdit (ji  ,jk-1) + zdit (ji-1,jk)     &
274                     &                    +zdit (ji-1,jk-1) + zdit (ji  ,jk) )   &
275                     &        + zcoef4 * ( zdjt (ji  ,jk-1) + zdj1t(ji  ,jk)     &
276                     &                    +zdj1t(ji  ,jk-1) + zdjt (ji  ,jk) )
277
278               END DO
279            END DO
280
281
282#if defined key_trcldf_eiv
283            !                              ! ---------------------------------------!
284            !                              ! Eddy induced vertical advective fluxes !
285            !                              ! ---------------------------------------!
286#if defined key_traldf_c2d || defined key_traldf_c3d || defined key_off_degrad
287            DO jk = 2, jpkm1
288               DO ji = 2, jpim1
289                  zuwki = ( wslpi(ji,jj,jk) + wslpi(ji-1,jj,jk) )   &
290                     &  * fsaeitru(ji-1,jj,jk) * e2u(ji-1,jj)*umask(ji-1,jj,jk)
291                  zuwk  = ( wslpi(ji,jj,jk) + wslpi(ji+1,jj,jk) )   &
292                     &  * fsaeitru(ji  ,jj,jk) * e2u(ji  ,jj)*umask(ji  ,jj,jk)
293                  zvwki = ( wslpj(ji,jj,jk) + wslpj(ji,jj-1,jk) )   &
294                     &  * fsaeitrv(ji,jj-1,jk) * e1v(ji,jj-1)*vmask(ji,jj-1,jk)
295                  zvwk  = ( wslpj(ji,jj,jk) + wslpj(ji,jj+1,jk) )   &
296                     &  * fsaeitrv(ji,jj  ,jk) * e1v(ji  ,jj)*vmask(ji  ,jj,jk)
297
298                  zcoeg3 = + 0.25 * tmask(ji,jj,jk) * ( zuwk - zuwki + zvwk - zvwki )
299
300                  ztfwg(ji,jk) = + zcoeg3 * ( trb(ji,jj,jk,jn) + trb(ji,jj,jk-1,jn) ) 
301                  ztfw(ji,jk) = ztfw(ji,jk) + ztfwg(ji,jk)
302
303# if defined key_diaeiv
304                  w_trc_eiv(ji,jj,jk) = -2. *  zcoeg3 / ( e1t(ji,jj)*e2t(ji,jj) )
305# endif
306               END DO
307            END DO
308
309#else
310            DO jk = 2, jpkm1
311               DO ji = 2, jpim1
312                  zuwki = ( wslpi(ji,jj,jk) + wslpi(ji-1,jj,jk) )   &
313                     &  * e2u(ji-1,jj)*umask(ji-1,jj,jk)
314                  zuwk  = ( wslpi(ji,jj,jk) + wslpi(ji+1,jj,jk) )   &
315                     &  * e2u(ji  ,jj)*umask(ji  ,jj,jk)
316                  zvwki = ( wslpj(ji,jj,jk) + wslpj(ji,jj-1,jk) )   &
317                     &  * e1v(ji,jj-1)*vmask(ji,jj-1,jk)
318                  zvwk  = ( wslpj(ji,jj,jk) + wslpj(ji,jj+1,jk) )   &
319                     &  * e1v(ji  ,jj)*vmask(ji  ,jj,jk)
320
321                  zcoeg3 = + 0.25 * tmask(ji,jj,jk) * fsaeitrw(ji,jj,jk)   &
322                     &            * ( zuwk - zuwki + zvwk - zvwki )
323
324                  ztfwg(ji,jk) = + zcoeg3 * ( trb(ji,jj,jk,jn) + trb(ji,jj,jk-1,jn) )
325                  ztfw(ji,jk) = ztfw(ji,jk) + ztfwg(ji,jk)
326
327# if defined key_diaeiv
328                  w_trc_eiv(ji,jj,jk) = -2. *  zcoeg3 / ( e1t(ji,jj)*e2t(ji,jj) )
329# endif
330               END DO
331            END DO
332#endif
333
334#endif
335
336
337            ! I.5 Divergence of vertical fluxes added to the general tracer trend
338            ! -------------------------------------------------------------------
339
340            DO jk = 1, jpkm1
341               DO ji = 2, jpim1
342                  zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )
343                  ztav = (  ztfw(ji,jk) - ztfw(ji,jk+1)  ) * zbtr
344                  tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztav
345#if defined key_trc_diatrd
346#   if defined key_trcldf_eiv
347                  ztavg = ( ztfwg(ji,jk) - ztfwg(ji,jk+1) ) * zbtr
348                  !  WARNING trtrd(ji,jj,jk,6) used for vertical gent velocity trend
349                  !                           not for damping !!!
350                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztavg
351#   endif
352                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztav - ztavg
353#endif
354
355               END DO
356            END DO
357            !                                             ! ===============
358         END DO                                           !   End of slab
359         !                                                ! ===============
360         ! II. Save the trends for diagnostics
361         ! ===================================
362         IF( l_trdtrc ) THEN
363#   if defined key_trcldf_eiv
364
365            ! II.1) Compute the eiv VERTICAL trend
366            DO jj = 2, jpjm1
367               DO jk = 1, jpkm1
368                  DO ji = 2, jpim1
369
370                     !-- Compute the eiv vertical divergence : 1/e3t ( dk[w_eiv] )
371                     !   N.B. This is only possible if key_diaeiv is switched on.
372                     !     Else, the vertical eiv is not diagnosed,
373                     !     so we can only store the flux form trend d_z ( T * w_eiv )
374                     !     instead of w_eiv * d_z( T ). Then, ONLY THE SUM of zonal,
375                     !     meridional, and vertical trends are valid.
376#       if defined key_diaeiv
377                     z_hdivn_z = ( 1. / fse3t(ji,jj,jk) ) * ( w_trc_eiv(ji,jj,jk) - w_trc_eiv(ji,jj,jk+1) )
378#       else
379                     z_hdivn_z = 0.e0
380#       endif
381                     !-- Compute the vertical advective trend associated with eiv
382                     zbtr =  1. / ( e1t(ji,jj)*e2t(ji,jj)*fse3t(ji,jj,jk) )
383                     ztrtrd_tmp(ji,jj,jk) = (  ztfwg(ji,jk) - ztfwg(ji,jk+1)  ) * zbtr   &
384                          &                 - trn(ji,jj,jk,jn) * z_hdivn_z
385                  END DO
386               END DO
387            END DO
388
389            ! II.2) Save the vertical eiv trend
390            IF (luttrd(jn)) CALL trd_mod_trc( ztrtrd_tmp, jn, jptrc_trd_zei, kt )
391
392#   endif
393
394            !-- Remove vert. eiv from the current up-to-date trend
395            !   N.B. ztrtrd_tmp is recycled for this purpose
396            ztrtrd_tmp(:,:,:) = ( tra(:,:,:,jn) - ztrtrd(:,:,:) ) - ztrtrd_tmp(:,:,:)
397
398            ! Save the new trends
399            ztrtrd(:,:,:) = tra(:,:,:,jn)
400         END IF
401
402
403      END DO
404
405      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
406         WRITE(charout, FMT="('zdf - 1')")
407         CALL prt_ctl_trc_info(charout)
408         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')
409      ENDIF
410
411      DO jn = 1, jptra
412         !                                                ! ===============
413         DO jj = 2, jpjm1                                 !  Vertical slab
414            !                                             ! ===============
415
416            ! II. Vertical trend associated with the vertical physics
417            ! =======================================================
418            !     (including the vertical flux proportional to dk[t] associated
419            !      with the lateral mixing, through the avt update)
420            !     dk[ avt dk[ (t,s) ] ] diffusive trends
421
422
423            ! Diagonal, inferior, superior
424            ! (including the bottom boundary condition via avs masked)
425            DO jk = 1, jpkm1
426               DO ji = 2, jpim1
427                  zwi(ji,jk) = - rdttrc(jk) * fstravs(ji,jj,jk  )   &
428                     /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk  ) )
429                  zws(ji,jk) = - rdttrc(jk) * fstravs(ji,jj,jk+1)   &
430                     /( fse3t(ji,jj,jk) * fse3w(ji,jj,jk+1) )
431                  zwd(ji,jk) = 1. - zwi(ji,jk) - zws(ji,jk)
432               END DO
433            END DO
434
435            ! Surface boudary conditions
436            DO ji = 2, jpim1
437               zwi(ji,1) = 0.e0
438               zwd(ji,1) = 1. - zws(ji,1)
439            END DO
440
441            ! Second member construction
442            DO jk = 1, jpkm1
443               DO ji = 2, jpim1
444                  zwy(ji,jk) = trb(ji,jj,jk,jn) + rdttrc(jk) * tra(ji,jj,jk,jn)
445               END DO
446            END DO
447
448            ! Matrix inversion from the first level
449            ikst = 1
450#   include "zdf.matrixsolver.h90"
451#if defined key_trc_diatrd
452            ! Compute and save the vertical diffusive of tracers trends
453#  if defined key_trcldf_iso
454            DO jk = 1, jpkm1
455               DO ji = 2, jpim1
456                  ztav = ( zwx(ji,jk) - trb(ji,jj,jk,jn) ) / rdttrc(jk)
457                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztav - tra(ji,jj,jk,jn) + trtrd(ji,jj,jk,ikeep(jn),6)
458               END DO
459            END DO
460#  else
461            DO jk = 1, jpkm1
462               DO ji = 2, jpim1
463                  ztav = ( zwx(ji,jk) - trb(ji,jj,jk,jn) ) / rdttrc(jk)
464                  IF (luttrd(jn)) trtrd(ji,jj,jk,ikeep(jn),6) = ztav - tra(ji,jj,jk,jn)
465               END DO
466            END DO
467#  endif
468#endif
469            ! Compute and save the vertical diffusive of tracers trends
470            ! Save the masked passive tracer after in tra
471            ! (c a u t i o n:  tracer not its trend, Leap-frog scheme done
472            !                  it will not be done in tranxt)
473            DO jk = 1, jpkm1
474               DO ji = 2, jpim1
475                  tra(ji,jj,jk,jn) = zwx(ji,jk)  * tmask(ji,jj,jk)
476               END DO
477            END DO
478            !                                             ! ===============
479         END DO                                           !   End of slab
480         !                                                ! ===============
481
482         ! IV. Save the trends for diagnostics
483         ! ===================================
484         IF( l_trdtrc ) THEN
485            ! deduce the full vertical diff. trend (except for vertical eiv advection)
486#if defined key_trcldf_iso
487            DO jk = 1, jpkm1
488               ztrtrd(:,:,jk) = ( (tra(:,:,jk,jn) - trb(:,:,jk,jn))/rdttrc(jk) ) - ztrtrd(:,:,jk) + ztrtrd_tmp(:,:,jk)
489            END DO
490#else
491            DO jk = 1, jpkm1
492               ztrtrd(:,:,jk) = ( (tra(:,:,jk,jn) - trb(:,:,jk,jn))/rdttrc(jk) ) - ztrtrd(:,:,jk)
493            END DO
494#endif
495            IF (luttrd(jn)) CALL trd_mod_trc( ztrtrd, jn, jptrc_trd_zdf, kt )
496
497         END IF
498
499      END DO
500
501
502
503      ! III. recover the avt (avs) resulting from vertical physics only
504      !---------------------------------------------------------------
505      fstravs(:,:,:) = zavs(:,:,:)
506
507     
508      IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
509         WRITE(charout, FMT="('zdf - 2')")
510         CALL prt_ctl_trc_info(charout)
511         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm,clinfo2='trd')
512      ENDIF
513
514   END SUBROUTINE trc_zdf_iso
515
516#else
517   !!----------------------------------------------------------------------
518   !!   Dummy module               NO rotation of the lateral mixing tensor
519   !!----------------------------------------------------------------------
520CONTAINS
521   SUBROUTINE trc_zdf_iso( kt )              ! empty routine
522      WRITE(*,*) 'trc_zdf_iso: You should not have seen this print! error?', kt
523   END SUBROUTINE trc_zdf_iso
524#endif
525
526   !!==============================================================================
527END MODULE trczdf_iso
Note: See TracBrowser for help on using the repository browser.