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_grif.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_grif.F90 @ 4401

Last change on this file since 4401 was 3211, checked in by spickles2, 12 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_grif
2   !!======================================================================
3   !!                   ***  MODULE  traldf_iso_grif  ***
4   !! Ocean  tracers:  horizontal component of the lateral tracer mixing trend
5   !!======================================================================
6   !! History : 3.3  ! 2010-10  (G. Nurser, C. Harris, G. Madec) 
7   !!                !          Griffies operator version adapted from traldf_iso.F90
8   !!----------------------------------------------------------------------
9#if   defined key_ldfslp   ||   defined key_esopa
10   !!----------------------------------------------------------------------
11   !!   'key_ldfslp'               slope of the lateral diffusive direction
12   !!----------------------------------------------------------------------
13   !!   tra_ldf_iso_grif  : update the tracer trend with the horizontal component 
14   !!                       of the Griffies iso-neutral laplacian operator
15   !!----------------------------------------------------------------------
16   USE oce             ! ocean dynamics and active tracers
17   USE dom_oce         ! ocean space and time domain
18   USE phycst          ! physical constants
19   USE trc_oce         ! share passive tracers/Ocean variables
20   USE zdf_oce         ! ocean vertical physics
21   USE ldftra_oce      ! ocean active tracers: lateral physics
22   USE ldfslp          ! iso-neutral slopes
23   USE diaptr          ! poleward transport diagnostics
24   USE in_out_manager  ! I/O manager
25   USE iom             ! I/O library
26   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
27   USE lib_mpp         ! MPP library
28
29   IMPLICIT NONE
30   PRIVATE
31
32   PUBLIC   tra_ldf_iso_grif   ! routine called by traldf.F90
33
34   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   psix_eiv, psiy_eiv   !: eiv stream function (diag only)
35   REAL(wp), PUBLIC, DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   ah_wslp2             !: aeiv*w-slope^2
36   REAL(wp),         DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   zdkt                 !  atypic workspace
37
38   !! * Control permutation of array indices
39#  include "oce_ftrans.h90"
40#  include "dom_oce_ftrans.h90"
41#  include "trc_oce_ftrans.h90"
42#  include "zdf_oce_ftrans.h90"
43#  include "ldftra_oce_ftrans.h90"
44#  include "ldfslp_ftrans.h90"
45#  include "traldf_iso_grif_ftrans.h90"
46
47   !! * Substitutions
48#  include "domzgr_substitute.h90"
49#  include "ldftra_substitute.h90"
50#  include "vectopt_loop_substitute.h90"
51#  include "ldfeiv_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_grif( kt, cdtype, pgu, pgv,              &
60       &                                   ptb, pta, kjpt, pahtb0 )
61      !!----------------------------------------------------------------------
62      !!                  ***  ROUTINE tra_ldf_iso_grif  ***
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 3D workspace
102      USE wrk_nemo, ONLY:   zdit => wrk_3d_6 , zdjt => wrk_3d_7 , ztfw => wrk_3d_8   ! 3D workspace
103      USE wrk_nemo, ONLY:   z2d  => wrk_2d_1                                         ! 2D workspace
104
105      !! DCSE_NEMO: need additional directives for renamed module variables
106!FTRANS zftu zftv :I :I :z
107!FTRANS zdit zdjt ztfw :I :I :z
108
109      !
110      INTEGER                              , INTENT(in   ) ::   kt         ! ocean time-step index
111      CHARACTER(len=3)                     , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator)
112      INTEGER                              , INTENT(in   ) ::   kjpt       ! number of tracers
113      REAL(wp), DIMENSION(jpi,jpj    ,kjpt), INTENT(in   ) ::   pgu, pgv   ! tracer gradient at pstep levels
114
115      !! DCSE_NEMO: This style defeats ftrans
116!     REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in   ) ::   ptb        ! before and now tracer fields
117!     REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) ::   pta        ! tracer trend
118
119!FTRANS ptb pta :I :I :z :
120      REAL(wp), INTENT(in   ) ::   ptb(jpi,jpj,jpk,kjpt)        ! before and now tracer fields
121      REAL(wp), INTENT(inout) ::   pta(jpi,jpj,jpk,kjpt)        ! tracer trend
122
123      REAL(wp)                             , INTENT(in   ) ::   pahtb0     ! background diffusion coef
124      !
125      INTEGER  ::  ji, jj, jk,jn   ! dummy loop indices
126      INTEGER  ::  ip,jp,kp        ! dummy loop indices
127      INTEGER  ::  ierr            ! temporary integer
128      REAL(wp) ::  zmsku, zabe1, zcof1, zcoef3   ! local scalars
129      REAL(wp) ::  zmskv, zabe2, zcof2, zcoef4   !   -      -
130      REAL(wp) ::  zcoef0, zbtr                  !   -      -
131      !REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdkt           ! 2D+1 workspace
132      !
133      REAL(wp) ::   zslope_skew, zslope_iso, zslope2, zbu, zbv
134      REAL(wp) ::   ze1ur, zdxt, ze2vr, ze3wr, zdyt, zdzt
135      REAL(wp) ::   zah, zah_slp, zaei_slp
136#if defined key_diaar5
137      REAL(wp) ::   zztmp              ! local scalar
138#endif
139      !!----------------------------------------------------------------------
140
141      IF( wrk_in_use(3, 6,7,8) .OR. wrk_in_use(2, 1) ) THEN
142         CALL ctl_stop('tra_ldf_iso_grif: requested workspace arrays unavailable.')   ;   RETURN
143      ENDIF
144      ! ARP - line below uses 'bounds re-mapping' which is only defined in
145      ! Fortran 2003 and up. We would be OK if code was written to use
146      ! zdkt(:,:,1:2) instead as then wouldn't need to re-map bounds.
147      ! As it is, we make zdkt a module array and allocate it in _alloc().
148      !zdkt(1:jpi,1:jpj,0:1) => wrk_3d_9(:,:,1:2)
149
150      IF( kt == nit000 )  THEN
151         IF(lwp) WRITE(numout,*)
152         IF(lwp) WRITE(numout,*) 'tra_ldf_iso_grif : rotated laplacian diffusion operator on ', cdtype
153         IF(lwp) WRITE(numout,*) '                   WARNING: STILL UNDER TEST, NOT RECOMMENDED. USE AT YOUR OWN PERIL'
154         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'
155         ALLOCATE( ah_wslp2(jpi,jpj,jpk) , zdkt(jpi,jpj,0:1), STAT=ierr )
156         IF( lk_mpp   )   CALL mpp_sum ( ierr )
157         IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate arrays')
158         IF( ln_traldf_gdia ) THEN
159            ALLOCATE( psix_eiv(jpi,jpj,jpk) , psiy_eiv(jpi,jpj,jpk) , STAT=ierr )
160            IF( lk_mpp   )   CALL mpp_sum ( ierr )
161            IF( ierr > 0 )   CALL ctl_stop('STOP', 'tra_ldf_iso_grif: unable to allocate diagnostics')
162         ENDIF
163      ENDIF
164
165      !!----------------------------------------------------------------------
166      !!   0 - calculate  ah_wslp2, psix_eiv, psiy_eiv
167      !!----------------------------------------------------------------------
168
169!!gm Future development: consider using Ah defined at T-points and attached to the 4 t-point triads
170
171      ah_wslp2(:,:,:) = 0._wp
172      IF( ln_traldf_gdia ) THEN
173         psix_eiv(:,:,:) = 0._wp
174         psiy_eiv(:,:,:) = 0._wp
175      ENDIF
176
177      DO ip = 0, 1
178         DO kp = 0, 1
179#if defined key_z_first
180            DO jj = 1, jpjm1
181               DO ji = 1, jpim1
182                  DO jk = 1, jpkm1
183#else
184            DO jk = 1, jpkm1
185               DO jj = 1, jpjm1
186                  DO ji = 1, fs_jpim1
187#endif
188                     ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp)
189                     zbu   = 0.25_wp * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk)
190                     zah   = fsahtu(ji,jj,jk)                                  !  fsaht(ji+ip,jj,jk)
191                     zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp)
192                     zslope2 = zslope_skew - ( fsdept(ji+1,jj,jk) - fsdept(ji ,jj ,jk) ) * ze1ur * umask(ji,jj,jk+kp)
193                     zslope2 = zslope2 *zslope2
194                     ah_wslp2(ji+ip,jj,jk+kp) = ah_wslp2(ji+ip,jj,jk+kp)    &
195                        &                     + zah * ( zbu * ze3wr / ( e1t(ji+ip,jj) * e2t(ji+ip,jj) ) ) * zslope2
196                     IF( ln_traldf_gdia ) THEN
197                        zaei_slp = fsaeiw(ji+ip,jj,jk) * zslope_skew        !fsaeit(ji+ip,jj,jk)*zslope_skew
198                        psix_eiv(ji,jj,jk+kp) = psix_eiv(ji,jj,jk+kp) + 0.25_wp * zaei_slp
199                     ENDIF
200                  END DO
201               END DO
202            END DO
203         END DO
204      END DO
205      !
206      DO jp = 0, 1
207         DO kp = 0, 1
208#if defined key_z_first
209            DO jj = 1, jpjm1
210               DO ji=1, jpim1
211                  DO jk = 1, jpkm1
212#else
213            DO jk = 1, jpkm1
214               DO jj = 1, jpjm1
215                  DO ji=1,fs_jpim1
216#endif
217                     ze3wr = 1.0_wp / fse3w(ji,jj+jp,jk+kp)
218                     zbv   = 0.25_wp * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk)
219                     zah   = fsahtu(ji,jj,jk)                                       !fsaht(ji,jj+jp,jk)
220                     zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp)
221                     zslope2 = zslope_skew - ( fsdept(ji,jj+1,jk) - fsdept(ji,jj,jk) ) * ze2vr * vmask(ji,jj,jk+kp)
222                     zslope2 = zslope2 * zslope2
223                     ah_wslp2(ji,jj+jp,jk+kp) = ah_wslp2(ji,jj+jp,jk+kp)   &
224                        &                     + zah * ( zbv * ze3wr / ( e1t(ji,jj+jp) * e2t(ji,jj+jp) ) ) * zslope2
225                     IF( ln_traldf_gdia ) THEN
226                        zaei_slp = fsaeiw(ji,jj+jp,jk) * zslope_skew     !fsaeit(ji,jj+jp,jk)*zslope_skew
227                        psiy_eiv(ji,jj,jk+kp) = psiy_eiv(ji,jj,jk+kp) + 0.25_wp * zaei_slp
228                     ENDIF
229                  END DO
230               END DO
231            END DO
232         END DO
233      END DO
234      !
235      !                                                          ! ===========
236      DO jn = 1, kjpt                                            ! tracer loop
237         !                                                       ! ===========
238         ! Zero fluxes for each tracer
239         ztfw(:,:,:) = 0._wp
240         zftu(:,:,:) = 0._wp
241         zftv(:,:,:) = 0._wp
242         !                                               
243#if defined key_z_first
244         !==  before lateral T & S gradients at T-level jk  ==!
245         DO jj = 1, jpjm1
246            DO ji = 1, jpim1
247               DO jk = 1, jpkm1
248#else
249         DO jk = 1, jpkm1                          !==  before lateral T & S gradients at T-level jk  ==!
250            DO jj = 1, jpjm1
251               DO ji = 1, fs_jpim1   ! vector opt.
252#endif
253                  zdit(ji,jj,jk) = ( ptb(ji+1,jj  ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk)
254                  zdjt(ji,jj,jk) = ( ptb(ji  ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)
255               END DO
256            END DO
257         END DO
258         IF( ln_zps ) THEN                               ! partial steps: correction at the last level
259# if defined key_vectopt_loop
260            DO jj = 1, 1
261               DO ji = 1, jpij-jpi   ! vector opt. (forced unrolling)
262# else
263            DO jj = 1, jpjm1
264               DO ji = 1, jpim1
265# endif
266                  zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn)         
267                  zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn)     
268               END DO
269            END DO
270         ENDIF
271
272         !!----------------------------------------------------------------------
273         !!   II - horizontal trend  (full)
274         !!----------------------------------------------------------------------
275         !
276         DO jk = 1, jpkm1
277            !
278            !                    !==  Vertical tracer gradient at level jk and jk+1
279            zdkt(:,:,1) = ( ptb(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1)
280            !
281            !                          ! surface boundary condition: zdkt(jk=1)=zdkt(jk=2)
282            IF( jk == 1 ) THEN   ;   zdkt(:,:,0) = zdkt(:,:,1)
283            ELSE                 ;   zdkt(:,:,0) = ( ptb(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk)
284            ENDIF
285
286            IF( .NOT. l_triad_iso ) THEN
287               triadi = triadi_g
288               triadj = triadj_g
289            ENDIF
290
291            DO ip = 0, 1              !==  Horizontal & vertical fluxes
292               DO kp = 0, 1
293                  DO jj = 1, jpjm1
294                     DO ji = 1, fs_jpim1
295                        ze1ur = 1._wp / e1u(ji,jj)
296                        zdxt = zdit(ji,jj,jk) * ze1ur
297                        ze3wr = 1._wp / fse3w(ji+ip,jj,jk+kp)
298                        zdzt  = zdkt(ji+ip,jj,kp) * ze3wr
299                        zslope_skew = triadi_g(ji+ip,jj,jk,1-ip,kp)
300                        zslope_iso  = triadi(ji+ip,jj,jk,1-ip,kp)
301
302                        zbu = 0.25_wp * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk)
303                        zah = fsahtu(ji,jj,jk)   !*umask(ji,jj,jk+kp)         !fsaht(ji+ip,jj,jk)           ===>>  ????
304                        zah_slp  = zah * zslope_iso
305                        zaei_slp = fsaeiw(ji+ip,jj,jk) * zslope_skew    !fsaeit(ji+ip,jj,jk)*zslope_skew
306                        zftu(ji,jj,jk) = zftu(ji,jj,jk) - ( zah * zdxt + (zah_slp - zaei_slp) * zdzt ) * zbu * ze1ur
307                        ztfw(ji+ip,jj,jk+kp) = ztfw(ji+ip,jj,jk+kp) - (zah_slp + zaei_slp) * zdxt * zbu * ze3wr
308                     END DO
309                  END DO
310               END DO
311            END DO
312
313            DO jp = 0, 1
314               DO kp = 0, 1
315                  DO jj = 1, jpjm1
316                     DO ji = 1, fs_jpim1
317                        ze2vr = 1._wp / e2v(ji,jj)
318                        zdyt = zdjt(ji,jj,jk) * ze2vr
319                        ze3wr = 1._wp / fse3w(ji,jj+jp,jk+kp)
320                        zdzt = zdkt(ji,jj+jp,kp) * ze3wr
321                        zslope_skew = triadj_g(ji,jj+jp,jk,1-jp,kp)
322                        zslope_iso  = triadj(ji,jj+jp,jk,1-jp,kp)
323                        zbv = 0.25_wp * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk)
324                        zah = fsahtv(ji,jj,jk)        !*vmask(ji,jj,jk+kp)         !fsaht(ji,jj+jp,jk)
325                        zah_slp = zah * zslope_iso
326                        zaei_slp = fsaeiw(ji,jj+jp,jk) * zslope_skew    !fsaeit(ji,jj+jp,jk)*zslope_skew
327                        zftv(ji,jj,jk) = zftv(ji,jj,jk) - ( zah * zdyt + (zah_slp - zaei_slp) * zdzt ) * zbv * ze2vr
328                        ztfw(ji,jj+jp,jk+kp) = ztfw(ji,jj+jp,jk+kp) - (zah_slp + zaei_slp) * zdyt * zbv * ze3wr
329                     END DO
330                  END DO
331               END DO
332            END DO
333
334            !                        !==  divergence and add to the general trend  ==!
335            DO jj = 2 , jpjm1
336               DO ji = fs_2, fs_jpim1   ! vector opt.
337                  zbtr = 1._wp / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
338                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zbtr * (   zftu(ji-1,jj,jk) - zftu(ji,jj,jk)   &
339                     &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )
340               END DO
341            END DO
342            !
343         END DO
344         !
345#if defined key_z_first
346         DO jj = 2, jpjm1            !== Divergence of vertical fluxes added to the general tracer trend
347            DO ji = 2, jpim1
348               DO jk = 1, jpkm1
349#else
350         DO jk = 1, jpkm1            !== Divergence of vertical fluxes added to the general tracer trend
351            DO jj = 2, jpjm1
352               DO ji = fs_2, fs_jpim1   ! vector opt.
353#endif
354                  pta(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   &
355                     &                                / ( e1t(ji,jj) * e2t(ji,jj) * fse3t(ji,jj,jk) )
356               END DO
357            END DO
358         END DO
359         !
360         !                            ! "Poleward" diffusive heat or salt transports (T-S case only)
361         IF( cdtype == 'TRA' .AND. ln_diaptr .AND. ( MOD( kt, nn_fptr ) == 0 ) ) THEN
362            IF( jn == jp_tem)   htr_ldf(:) = ptr_vj( zftv(:,:,:) )        ! 3.3  names
363            IF( jn == jp_sal)   str_ldf(:) = ptr_vj( zftv(:,:,:) )
364         ENDIF
365
366#if defined key_diaar5
367         IF( cdtype == 'TRA' .AND. jn == jp_tem  ) THEN
368            z2d(:,:) = 0._wp 
369            zztmp = rau0 * rcp 
370#if defined key_z_first
371            DO jj = 2, jpjm1
372               DO ji = 2, jpim1
373                  DO jk = 1, jpkm1
374#else
375            DO jk = 1, jpkm1
376               DO jj = 2, jpjm1
377                  DO ji = fs_2, fs_jpim1   ! vector opt.
378#endif
379                     z2d(ji,jj) = z2d(ji,jj) + zftu(ji,jj,jk) 
380                  END DO
381               END DO
382            END DO
383            z2d(:,:) = zztmp * z2d(:,:)
384            CALL lbc_lnk( z2d, 'U', -1. )
385            CALL iom_put( "udiff_heattr", z2d )                  ! heat transport in i-direction
386            z2d(:,:) = 0._wp 
387#if defined key_z_first
388            DO jj = 2, jpjm1
389               DO ji = 2, jpim1
390                  DO jk = 1, jpkm1
391#else
392            DO jk = 1, jpkm1
393               DO jj = 2, jpjm1
394                  DO ji = fs_2, fs_jpim1   ! vector opt.
395#endif
396                     z2d(ji,jj) = z2d(ji,jj) + zftv(ji,jj,jk) 
397                  END DO
398               END DO
399            END DO
400            z2d(:,:) = zztmp * z2d(:,:)
401            CALL lbc_lnk( z2d, 'V', -1. )
402            CALL iom_put( "vdiff_heattr", z2d )                  !  heat transport in i-direction
403         END IF
404#endif
405         !
406      END DO
407      !
408      IF( wrk_not_released(3, 6,7,8) .OR.   &
409          wrk_not_released(2, 1)       )   CALL ctl_stop('tra_ldf_iso_grif: failed to release workspace arrays')
410      !
411  END SUBROUTINE tra_ldf_iso_grif
412
413#else
414   !!----------------------------------------------------------------------
415   !!   default option :   Dummy code   NO rotation of the diffusive tensor
416   !!----------------------------------------------------------------------
417CONTAINS
418   SUBROUTINE tra_ldf_iso_grif( kt, cdtype, pgu, pgv, ptb, pta, kjpt, pahtb0 )      ! Empty routine
419      CHARACTER(len=3) ::   cdtype
420      REAL, DIMENSION(:,:,:) ::   pgu, pgv   ! tracer gradient at pstep levels
421      REAL, DIMENSION(:,:,:,:) ::   ptb, pta
422      WRITE(*,*) 'tra_ldf_iso_grif: You should not have seen this print! error?', kt, cdtype,    &
423         &                  pgu(1,1,1), pgv(1,1,1), ptb(1,1,1,1), pta(1,1,1,1), kjpt, pahtb0
424   END SUBROUTINE tra_ldf_iso_grif
425#endif
426
427   !!==============================================================================
428END MODULE traldf_iso_grif
Note: See TracBrowser for help on using the repository browser.