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 tags/nemo_v3_2/nemo_v3_2/NEMO/TOP_SRC/TRP – NEMO

source: tags/nemo_v3_2/nemo_v3_2/NEMO/TOP_SRC/TRP/trczdf_iso.F90 @ 1878

Last change on this file since 1878 was 1878, checked in by flavoni, 14 years ago

initial test for nemogcm

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