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.
traldf_iso.F90 in branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

source: branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90 @ 3211

Last change on this file since 3211 was 3211, checked in by spickles2, 13 years ago

Stephen Pickles, 11 Dec 2011

Commit to bring the rest of the DCSE NEMO development branch
in line with the latest development version. This includes
array index re-ordering of all OPA_SRC/.

  • Property svn:keywords set to Id
File size: 20.1 KB
Line 
1MODULE traldf_iso
2   !!======================================================================
3   !!                   ***  MODULE  traldf_iso  ***
4   !! Ocean  tracers:  horizontal component of the lateral tracer mixing trend
5   !!======================================================================
6   !! History :  OPA  !  1994-08  (G. Madec, M. Imbard)
7   !!            8.0  !  1997-05  (G. Madec)  split into traldf and trazdf
8   !!            NEMO !  2002-08  (G. Madec)  Free form, F90
9   !!            1.0  !  2005-11  (G. Madec)  merge traldf and trazdf :-)
10   !!            3.3  !  2010-09  (C. Ethe, G. Madec) Merge TRA-TRC
11   !!----------------------------------------------------------------------
12#if   defined key_ldfslp   ||   defined key_esopa
13   !!----------------------------------------------------------------------
14   !!   'key_ldfslp'               slope of the lateral diffusive direction
15   !!----------------------------------------------------------------------
16   !!   tra_ldf_iso  : update the tracer trend with the horizontal
17   !!                  component of a iso-neutral laplacian operator
18   !!                  and with the vertical part of
19   !!                  the isopycnal or geopotential s-coord. operator
20   !!----------------------------------------------------------------------
21   USE oce             ! ocean dynamics and active tracers
22   USE dom_oce         ! ocean space and time domain
23   USE trc_oce         ! share passive tracers/Ocean variables
24   USE zdf_oce         ! ocean vertical physics
25   USE ldftra_oce      ! ocean active tracers: lateral physics
26   USE ldfslp          ! iso-neutral slopes
27   USE diaptr          ! poleward transport diagnostics
28   USE in_out_manager  ! I/O manager
29   USE iom             ! I/O library
30#if defined key_diaar5
31   USE phycst          ! physical constants
32   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
33#endif
34
35   IMPLICIT NONE
36   PRIVATE
37
38   PUBLIC   tra_ldf_iso   ! routine called by step.F90
39
40   !! * Control permutation of array indices
41#  include "oce_ftrans.h90"
42#  include "dom_oce_ftrans.h90"
43#  include "trc_oce_ftrans.h90"
44#  include "zdf_oce_ftrans.h90"
45#  include "ldftra_oce_ftrans.h90"
46#  include "ldfslp_ftrans.h90"
47
48   !! * Substitutions
49#  include "domzgr_substitute.h90"
50#  include "ldftra_substitute.h90"
51#  include "vectopt_loop_substitute.h90"
52   !!----------------------------------------------------------------------
53   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
54   !! $Id$
55   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
56   !!----------------------------------------------------------------------
57CONTAINS
58
59   SUBROUTINE tra_ldf_iso( kt, cdtype, pgu, pgv,              &
60      &                                ptb, pta, kjpt, pahtb0 )
61      !!----------------------------------------------------------------------
62      !!                  ***  ROUTINE tra_ldf_iso  ***
63      !!
64      !! ** Purpose :   Compute the before horizontal tracer (t & s) diffusive
65      !!      trend for a laplacian tensor (ezxcept the dz[ dz[.] ] term) and
66      !!      add it to the general trend of tracer equation.
67      !!
68      !! ** Method  :   The horizontal component of the lateral diffusive trends
69      !!      is provided by a 2nd order operator rotated along neural or geopo-
70      !!      tential surfaces to which an eddy induced advection can be added
71      !!      It is computed using before fields (forward in time) and isopyc-
72      !!      nal or geopotential slopes computed in routine ldfslp.
73      !!
74      !!      1st part :  masked horizontal derivative of T  ( di[ t ] )
75      !!      ========    with partial cell update if ln_zps=T.
76      !!
77      !!      2nd part :  horizontal fluxes of the lateral mixing operator
78      !!      ========   
79      !!         zftu = (aht+ahtb0) e2u*e3u/e1u di[ tb ]
80      !!               - aht       e2u*uslp    dk[ mi(mk(tb)) ]
81      !!         zftv = (aht+ahtb0) e1v*e3v/e2v dj[ tb ]
82      !!               - aht       e2u*vslp    dk[ mj(mk(tb)) ]
83      !!      take the horizontal divergence of the fluxes:
84      !!         difft = 1/(e1t*e2t*e3t) {  di-1[ zftu ] +  dj-1[ zftv ]  }
85      !!      Add this trend to the general trend (ta,sa):
86      !!         ta = ta + difft
87      !!
88      !!      3rd part: vertical trends of the lateral mixing operator
89      !!      ========  (excluding the vertical flux proportional to dk[t] )
90      !!      vertical fluxes associated with the rotated lateral mixing:
91      !!         zftw =-aht {  e2t*wslpi di[ mi(mk(tb)) ]
92      !!                     + e1t*wslpj dj[ mj(mk(tb)) ]  }
93      !!      take the horizontal divergence of the fluxes:
94      !!         difft = 1/(e1t*e2t*e3t) dk[ zftw ]
95      !!      Add this trend to the general trend (ta,sa):
96      !!         pta = pta + difft
97      !!
98      !! ** Action :   Update pta arrays with the before rotated diffusion
99      !!----------------------------------------------------------------------
100      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released
101      USE oce     , ONLY:   zftu => ua       , zftv  => va         ! (ua,va) used as workspace
102      !! DCSE_NEMO: need additional directives for renamed module variables
103!FTRANS zftu zftv :I :I :z
104#if defined key_z_first
105      USE wrk_nemo, ONLY:   wdkt => wrk_3d_9 , wdk1t => wrk_3d_10  ! 3D workspace
106!FTRANS wdkt wdk1t :I :I :z
107#else
108      USE wrk_nemo, ONLY:   zdkt => wrk_2d_1 , zdk1t => wrk_2d_2
109#endif
110      USE wrk_nemo, ONLY:   z2d  => wrk_2d_3                       ! 2D workspace
111      USE wrk_nemo, ONLY:   zdit => wrk_3d_6 , zdjt  => wrk_3d_7 , ztfw => wrk_3d_8   ! 3D workspace
112!FTRANS zdit zdjt ztfw :I :I :z
113
114      !
115      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index
116      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator)
117      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers
118      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels
119
120      !! DCSE_NEMO: This style defeats ftrans
121!     REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! before and now tracer fields
122!     REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend
123!FTRANS ptb pta :I :I :z :
124      REAL(wp), INTENT(in   ) ::   ptb(jpi,jpj,jpk,kjpt)        ! before and now tracer fields
125      REAL(wp), INTENT(inout) ::   pta(jpi,jpj,jpk,kjpt)        ! tracer trend
126
127      REAL(wp)                             , INTENT(in   ) ::   pahtb0     ! background diffusion coef
128      !
129      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices
130      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3   ! local scalars
131      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      -
132      REAL(wp) ::  zcoef0, zbtr, ztra            !   -      -
133#if defined key_diaar5
134      REAL(wp)                         ::   zztmp               ! local scalar
135#endif
136      !!----------------------------------------------------------------------
137
138#if defined key_z_first
139      IF( wrk_in_use(3, 6,7,8,9,10) .OR. wrk_in_use(2, 3) ) THEN
140#else
141      IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1,2,3) ) THEN
142#endif
143          CALL ctl_stop('tra_ldf_iso : requested workspace array unavailable')   ;   RETURN
144      ENDIF
145
146      IF( kt == nit000 )  THEN
147         IF(lwp) WRITE(numout,*)
148         IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype
149         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
150      ENDIF
151      !
152      !                                                          ! ===========
153      DO jn = 1, kjpt                                            ! tracer loop
154         !                                                       ! ===========
155         !                                               
156         !!----------------------------------------------------------------------
157         !!   I - masked horizontal derivative
158         !!----------------------------------------------------------------------
159         !!bug ajout.... why?   ( 1,jpj,:) and (jpi,1,:) should be sufficient....
160         zdit (1,:,:) = 0.e0     ;     zdit (jpi,:,:) = 0.e0
161         zdjt (1,:,:) = 0.e0     ;     zdjt (jpi,:,:) = 0.e0
162         !!end
163
164         ! Horizontal tracer gradient
165#if defined key_z_first
166         DO jj = 1, jpjm1
167            DO ji = 1, jpim1
168               DO jk = 1, jpkm1
169#else
170         DO jk = 1, jpkm1
171            DO jj = 1, jpjm1
172               DO ji = 1, fs_jpim1   ! vector opt.
173#endif
174                  zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk)
175                  zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)
176               END DO
177            END DO
178         END DO
179         IF( ln_zps ) THEN      ! partial steps correction at the last ocean level
180            DO jj = 1, jpjm1
181               DO ji = 1, fs_jpim1   ! vector opt.
182                  zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn)         
183                  zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn)     
184               END DO
185            END DO
186         ENDIF
187
188         !!----------------------------------------------------------------------
189         !!   II - horizontal trend  (full)
190         !!----------------------------------------------------------------------
191#if defined key_z_first
192            ! 1. Vertical tracer gradient at level jk and jk+1
193            ! ------------------------------------------------
194            ! surface boundary condition: wdkt(jk=1)=wdkt(jk=2)
195
196         DO jj = 1, jpj
197            DO ji = 1, jpi
198               DO jk = 1, jpkm1
199                  wdk1t(ji,jj,jk) = ( ptb(ji,jj,jk,jn) - ptb(ji,jj,jk+1,jn) ) * tmask(ji,jj,jk+1)
200               END DO
201               wdkt(ji,jj,1) = wdk1t(ji,jj,1)
202               DO jk = 2, jpkm1
203                  wdkt(ji,jj,jk) =  ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk)
204               END DO
205            END DO
206         END DO
207
208            ! 2. Horizontal fluxes
209            ! --------------------   
210         DO jj = 1 , jpjm1
211            DO ji = 1, jpim1
212               DO jk = 1, jpkm1
213                  zabe1 = ( fsahtu(ji,jj,jk) + pahtb0 ) * e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj)
214                  zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj)
215                  zmsku = 1. / MAX(  tmask(ji+1,jj,jk  ) + tmask(ji,jj,jk+1)   &
216                     &             + tmask(ji+1,jj,jk+1) + tmask(ji,jj,jk  ), 1. )
217                  zmskv = 1. / MAX(  tmask(ji,jj+1,jk  ) + tmask(ji,jj,jk+1)   &
218                     &             + tmask(ji,jj+1,jk+1) + tmask(ji,jj,jk  ), 1. )
219                  zcof1 = - fsahtu(ji,jj,jk) * e2u(ji,jj) * uslp(ji,jj,jk) * zmsku
220                  zcof2 = - fsahtv(ji,jj,jk) * e1v(ji,jj) * vslp(ji,jj,jk) * zmskv
221                  zftu(ji,jj,jk ) = ( zabe1 * zdit(ji,jj,jk)   &
222                     &              + zcof1 * (  wdkt (ji+1,jj,jk) + wdk1t(ji,jj,jk)      &
223                     &                         + wdk1t(ji+1,jj,jk) + wdkt (ji,jj,jk)  )  ) * umask(ji,jj,jk)
224                  zftv(ji,jj,jk) = (  zabe2 * zdjt(ji,jj,jk)   &
225                     &              + zcof2 * (  wdkt (ji,jj+1,jk) + wdk1t(ji,jj,jk)      &
226                     &                         + wdk1t(ji,jj+1,jk) + wdkt (ji,jj,jk)  )  ) * vmask(ji,jj,jk)                 
227               END DO
228            END DO
229         END DO
230
231            ! II.4 Second derivative (divergence) and add to the general trend
232            ! ----------------------------------------------------------------
233         DO jj = 2 , jpjm1
234            DO ji = 2, jpim1
235               DO jk = 1, jpkm1
236                  zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
237                  ztra = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )
238                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra
239               END DO
240            END DO
241         END DO
242#else
243!CDIR PARALLEL DO PRIVATE( zdk1t )
244         !                                                ! ===============
245         DO jk = 1, jpkm1                                 ! Horizontal slab
246            !                                             ! ===============
247            ! 1. Vertical tracer gradient at level jk and jk+1
248            ! ------------------------------------------------
249            ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2)
250            zdk1t(:,:) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1)
251            !
252            IF( jk == 1 ) THEN   ;   zdkt(:,:) = zdk1t(:,:)
253            ELSE                 ;   zdkt(:,:) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk)
254            ENDIF
255
256            ! 2. Horizontal fluxes
257            ! --------------------   
258            DO jj = 1 , jpjm1
259               DO ji = 1, fs_jpim1   ! vector opt.
260                  zabe1 = ( fsahtu(ji,jj,jk) + pahtb0 ) * e2u(ji,jj) * fse3u(ji,jj,jk) / e1u(ji,jj)
261                  zabe2 = ( fsahtv(ji,jj,jk) + pahtb0 ) * e1v(ji,jj) * fse3v(ji,jj,jk) / e2v(ji,jj)
262                  !
263                  zmsku = 1. / MAX(  tmask(ji+1,jj,jk  ) + tmask(ji,jj,jk+1)   &
264                     &             + tmask(ji+1,jj,jk+1) + tmask(ji,jj,jk  ), 1. )
265                  !
266                  zmskv = 1. / MAX(  tmask(ji,jj+1,jk  ) + tmask(ji,jj,jk+1)   &
267                     &             + tmask(ji,jj+1,jk+1) + tmask(ji,jj,jk  ), 1. )
268                  !
269                  zcof1 = - fsahtu(ji,jj,jk) * e2u(ji,jj) * uslp(ji,jj,jk) * zmsku
270                  zcof2 = - fsahtv(ji,jj,jk) * e1v(ji,jj) * vslp(ji,jj,jk) * zmskv
271                  !
272                  zftu(ji,jj,jk ) = (  zabe1 * zdit(ji,jj,jk)   &
273                     &              + zcof1 * (  zdkt (ji+1,jj) + zdk1t(ji,jj)      &
274                     &                         + zdk1t(ji+1,jj) + zdkt (ji,jj)  )  ) * umask(ji,jj,jk)
275                  zftv(ji,jj,jk) = (  zabe2 * zdjt(ji,jj,jk)   &
276                     &              + zcof2 * (  zdkt (ji,jj+1) + zdk1t(ji,jj)      &
277                     &                         + zdk1t(ji,jj+1) + zdkt (ji,jj)  )  ) * vmask(ji,jj,jk)                 
278               END DO
279            END DO
280
281            ! II.4 Second derivative (divergence) and add to the general trend
282            ! ----------------------------------------------------------------
283            DO jj = 2 , jpjm1
284               DO ji = fs_2, fs_jpim1   ! vector opt.
285                  zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
286                  ztra = zbtr * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )
287                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra
288               END DO
289            END DO
290            !                                          ! ===============
291         END DO                                        !   End of slab 
292         !                                             ! ===============
293#endif
294         !
295         ! "Poleward" diffusive heat or salt transports (T-S case only)
296         IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nn_fptr ) == 0 ) ) THEN
297            IF( jn == jp_tem)   htr_ldf(:) = ptr_vj( zftv(:,:,:) )
298            IF( jn == jp_sal)   str_ldf(:) = ptr_vj( zftv(:,:,:) )
299         ENDIF
300 
301#if defined key_diaar5
302         IF( cdtype == 'TRA' .AND. jn == jp_tem  ) THEN
303            z2d(:,:) = 0._wp 
304            zztmp = rau0 * rcp 
305#if defined key_z_first
306            DO jj = 2, jpjm1
307               DO ji = 2, jpim1
308                  DO jk = 1, jpkm1
309#else
310            DO jk = 1, jpkm1
311               DO jj = 2, jpjm1
312                  DO ji = fs_2, fs_jpim1   ! vector opt.
313#endif
314                     z2d(ji,jj) = z2d(ji,jj) + zftu(ji,jj,jk) 
315                  END DO
316               END DO
317            END DO
318            z2d(:,:) = zztmp * z2d(:,:)
319            CALL lbc_lnk( z2d, 'U', -1. )
320            CALL iom_put( "udiff_heattr", z2d )                  ! heat transport in i-direction
321            z2d(:,:) = 0._wp 
322#if defined key_z_first
323            DO jj = 2, jpjm1
324               DO ji = 2, jpim1
325                  DO jk = 1, jpkm1
326#else
327            DO jk = 1, jpkm1
328               DO jj = 2, jpjm1
329                  DO ji = fs_2, fs_jpim1   ! vector opt.
330#endif
331                     z2d(ji,jj) = z2d(ji,jj) + zftv(ji,jj,jk) 
332                  END DO
333               END DO
334            END DO
335            z2d(:,:) = zztmp * z2d(:,:)
336            CALL lbc_lnk( z2d, 'V', -1. )
337            CALL iom_put( "vdiff_heattr", z2d )                  !  heat transport in i-direction
338         END IF
339#endif
340
341         !!----------------------------------------------------------------------
342         !!   III - vertical trend of T & S (extra diagonal terms only)
343         !!----------------------------------------------------------------------
344         
345         ! Local constant initialization
346         ! -----------------------------
347         ztfw(1,:,:) = 0.e0     ;     ztfw(jpi,:,:) = 0.e0
348         
349         ! Vertical fluxes
350         ! ---------------
351         
352         ! Surface and bottom vertical fluxes set to zero
353         ztfw(:,:, 1 ) = 0.e0      ;      ztfw(:,:,jpk) = 0.e0
354         
355         ! interior (2=<jk=<jpk-1)
356#if defined key_z_first
357         DO jj = 2, jpjm1
358            DO ji = 2, jpim1
359               DO jk = 2, jpkm1
360#else
361         DO jk = 2, jpkm1
362            DO jj = 2, jpjm1
363               DO ji = fs_2, fs_jpim1   ! vector opt.
364#endif
365                  zcoef0 = - fsahtw(ji,jj,jk) * tmask(ji,jj,jk)
366                  !
367                  zmsku = 1./MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)      &
368                     &            + umask(ji-1,jj,jk-1) + umask(ji  ,jj,jk), 1.  )
369                  zmskv = 1./MAX(   vmask(ji,jj  ,jk-1) + vmask(ji,jj-1,jk)      &
370                     &            + vmask(ji,jj-1,jk-1) + vmask(ji,jj  ,jk), 1.  )
371                  !
372                  zcoef3 = zcoef0 * e2t(ji,jj) * zmsku * wslpi (ji,jj,jk)
373                  zcoef4 = zcoef0 * e1t(ji,jj) * zmskv * wslpj (ji,jj,jk)
374                  !
375                  ztfw(ji,jj,jk) = zcoef3 * (   zdit(ji  ,jj  ,jk-1) + zdit(ji-1,jj  ,jk)      &
376                     &                        + zdit(ji-1,jj  ,jk-1) + zdit(ji  ,jj  ,jk)  )   &
377                     &           + zcoef4 * (   zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk)      &
378                     &                        + zdjt(ji  ,jj-1,jk-1) + zdjt(ji  ,jj  ,jk)  )
379               END DO
380            END DO
381         END DO
382         
383         
384         ! I.5 Divergence of vertical fluxes added to the general tracer trend
385         ! -------------------------------------------------------------------
386#if defined key_z_first
387         DO jj = 2, jpjm1
388            DO ji = 2, jpim1
389               DO jk = 1, jpkm1
390#else
391         DO jk = 1, jpkm1
392            DO jj = 2, jpjm1
393               DO ji = fs_2, fs_jpim1   ! vector opt.
394#endif
395                  zbtr = 1.0 / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
396                  ztra = (  ztfw(ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * zbtr
397                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ztra
398               END DO
399            END DO
400         END DO
401         !
402      END DO
403      !
404#if defined key_z_first
405      IF( wrk_not_released(3, 6,7,8,9,10) .OR.   &
406          wrk_not_released(2, 3) )       CALL ctl_stop('tra_ldf_iso: failed to release workspace arrays')
407#else
408      IF( wrk_not_released(3, 6,7,8) .OR.   &
409          wrk_not_released(2, 1,2,3) )   CALL ctl_stop('tra_ldf_iso: failed to release workspace arrays')
410#endif
411      !
412   END SUBROUTINE tra_ldf_iso
413
414#else
415   !!----------------------------------------------------------------------
416   !!   default option :   Dummy code   NO rotation of the diffusive tensor
417   !!----------------------------------------------------------------------
418CONTAINS
419   SUBROUTINE tra_ldf_iso( kt, cdtype, pgu, pgv, ptb, pta, kjpt, pahtb0 )      ! Empty routine
420      CHARACTER(len=3) ::   cdtype
421      REAL, DIMENSION(:,:,:) ::   pgu, pgv   ! tracer gradient at pstep levels
422      REAL, DIMENSION(:,:,:,:) ::   ptb, pta
423      WRITE(*,*) 'tra_ldf_iso: You should not have seen this print! error?', kt, cdtype, pgu(1,1,1), pgv(1,1,1),   &
424         &                                                             ptb(1,1,1,1), pta(1,1,1,1), kjpt, pahtb0
425   END SUBROUTINE tra_ldf_iso
426#endif
427
428   !!==============================================================================
429END MODULE traldf_iso
Note: See TracBrowser for help on using the repository browser.