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.
dynldf_tam.F90 in branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/DYN – NEMO

source: branches/TAM_V3_0/NEMOTAM/OPATAM_SRC/DYN/dynldf_tam.F90 @ 2587

Last change on this file since 2587 was 2587, checked in by vidard, 13 years ago

refer to ticket #798

File size: 20.9 KB
Line 
1MODULE dynldf_tam
2#ifdef key_tam
3   !!======================================================================
4   !!                       ***  MODULE  dynldf_tam  ***
5   !! Ocean physics:  lateral diffusivity trends
6   !!                 Tangent and Adjoint module
7   !!=====================================================================
8   !! History of the direct module:
9   !!          9.0  !  05-11  (G. Madec)  Original code (new step architecture)
10   !! History of the TAM module
11   !!          9.0  !  08-06  (A. Vidard) Skeleton
12   !!               !  08-08  (A. Vidard) TAM of 9.0
13   !!----------------------------------------------------------------------
14
15   !!----------------------------------------------------------------------
16   !!   dyn_ldf     : update the dynamics trend with the lateral diffusion
17   !!   dyn_ldf_ctl : initialization, namelist read, and parameters control
18   !!----------------------------------------------------------------------
19   USE par_kind      , ONLY: & ! Precision variables
20      & wp
21   USE par_oce       , ONLY: & ! Ocean space and time domain variables
22      & jpi,                 &
23      & jpj,                 & 
24      & jpk,                 & 
25      & jpiglo
26   USE oce_tam       , ONLY: &
27      & ua_tl,               &
28      & va_tl,               &
29      & ua_ad,               &
30      & va_ad,               &
31      & rotb_tl,             &
32      & hdivb_tl,            &
33      & rotb_ad,             &
34      & hdivb_ad
35   USE dom_oce       , ONLY: & ! ocean space and time domain
36      & ln_zco,              &
37      & ln_sco,              &
38      & ln_zps,              &
39      & e1u,                 &
40      & e2u,                 &
41      & e1v,                 &
42      & e2v,                 &
43#if defined key_zco
44      & e3t_0,               &
45#else
46      & e3u,                 &
47      & e3v,                 &
48#endif
49      & mig,                 &
50      & mjg,                 &
51      & nldi,                &
52      & nldj,                &
53      & nlei,                &
54      & nlej,                &
55      & umask,               &
56      & vmask
57   USE ldfdyn_oce    , ONLY: & ! ocean dynamics lateral physics
58      & ln_dynldf_lap,       &     
59      & ln_dynldf_bilap,     &
60      & ln_dynldf_level,     &
61      & ln_dynldf_hor,       &
62      & ln_dynldf_iso
63   USE ldfslp        , ONLY: & ! lateral mixing: slopes of mixing orientation
64      & lk_ldfslp
65!   USE dynldf_bilapg_tam    ! lateral mixing       (dyn_ldf_bilapg routine)
66   USE dynldf_bilap_tam, ONLY: &     ! lateral mixing       (dyn_ldf_bilap  routine)
67      & dyn_ldf_bilap_tan,     &
68      & dyn_ldf_bilap_adj
69!   USE dynldf_iso_tam       ! lateral mixing       (dyn_ldf_iso    routine)
70   USE dynldf_lap_tam, ONLY: & ! lateral mixing       (dyn_ldf_lap    routine)
71      & dyn_ldf_lap_tan,     &
72      & dyn_ldf_lap_adj
73   USE in_out_manager, ONLY: & ! I/O manager
74      & ctl_stop,            &
75      & nit000,              &
76      & nitend,              &
77      & numout,              &
78      & lwp
79!   USE lib_mpp        , ONLY: & ! distribued memory computing library
80!   USE lbclnk         , ONLY: & ! ocean lateral boundary conditions (or mpp link)
81   USE gridrandom    , ONLY: & ! Random Gaussian noise on grids
82      & grid_random
83   USE dotprodfld,     ONLY: & ! Computes dot product for 3D and 2D fields
84      & dot_product
85   USE tstool_tam    , ONLY: &
86      & prntst_adj,          & !
87                               ! random field standard deviation for:
88      & stdu,                & !   u-velocity
89      & stdv,                & !   v-velocity
90      & stdr,                & !   rotb
91      & stdh                   !   hdivb
92
93   IMPLICIT NONE
94   PRIVATE
95
96   PUBLIC   dyn_ldf_tan        ! called by step_tam module
97   PUBLIC   dyn_ldf_adj        ! called by step_tam module
98   PUBLIC   dyn_ldf_adj_tst    ! called by the tst  module
99
100   INTEGER ::   nldf = 0   ! type of lateral diffusion used defined from ln_dynldf_... namlist logicals)
101
102   !! * Substitutions
103#  include "domzgr_substitute.h90"
104#  include "vectopt_loop_substitute.h90"
105   !!---------------------------------------------------------------------------------
106
107CONTAINS
108
109   SUBROUTINE dyn_ldf_tan( kt )
110      !!----------------------------------------------------------------------
111      !!                  ***  ROUTINE dyn_ldf_tan  ***
112      !!
113      !! ** Purpose of the direct routine:
114      !!            compute the lateral ocean dynamics physics.
115      !!----------------------------------------------------------------------
116      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
117      !
118      !!----------------------------------------------------------------------
119
120      IF( kt == nit000 )   CALL dyn_ldf_ctl_tam      ! initialisation & control of options
121
122      SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend
123      !
124      CASE ( 0 )   
125         CALL dyn_ldf_lap_tan    ( kt )      ! iso-level laplacian
126      CASE ( 1 )   
127         CALL ctl_stop('dyn_ldf_iso_tan not available yet')
128!         CALL dyn_ldf_iso_tan    ( kt )      ! rotated laplacian (except dk[ dk[.] ] part)
129      CASE ( 2 )   
130         CALL dyn_ldf_bilap_tan  ( kt )      ! iso-level bilaplacian
131      CASE ( 3 )
132         CALL ctl_stop('dyn_ldf_bilapg_tan not available yet')
133!         CALL dyn_ldf_bilapg_tan ( kt )      ! s-coord. horizontal bilaplacian
134      !
135      END SELECT
136      !
137   END SUBROUTINE dyn_ldf_tan
138
139   SUBROUTINE dyn_ldf_adj( kt )
140      !!----------------------------------------------------------------------
141      !!                  ***  ROUTINE dyn_ldf_adj  ***
142      !!
143      !! ** Purpose of the direct routine:
144      !!            compute the lateral ocean dynamics physics.
145      !!----------------------------------------------------------------------
146      INTEGER, INTENT(in) ::   kt   ! ocean time-step index
147      !
148      IF( kt == nitend )   CALL dyn_ldf_ctl_tam      ! initialisation & control of options
149
150      SELECT CASE ( nldf )                       ! compute lateral mixing trend and add it to the general trend
151      !
152      CASE ( 0 )   
153         CALL dyn_ldf_lap_adj    ( kt )      ! iso-level laplacian
154      CASE ( 1 ) 
155         CALL ctl_stop('dyn_ldf_iso_adj not available yet')
156!         CALL dyn_ldf_iso_adj    ( kt )      ! rotated laplacian (except dk[ dk[.] ] part)
157      CASE ( 2 )   
158         CALL dyn_ldf_bilap_adj  ( kt )      ! iso-level bilaplacian
159      CASE ( 3 )
160         CALL ctl_stop('dyn_ldf_bilapg_adj not available yet')
161!         CALL dyn_ldf_bilapg_adj ( kt )      ! s-coord. horizontal bilaplacian
162      !
163      END SELECT      !
164   END SUBROUTINE dyn_ldf_adj
165
166   SUBROUTINE dyn_ldf_ctl_tam
167      !!----------------------------------------------------------------------
168      !!                  ***  ROUTINE dyn_ldf_ctl_tam  ***
169      !!
170      !! ** Purpose of the direct routine:
171      !!            initializations of the horizontal ocean dynamics physics
172      !!----------------------------------------------------------------------
173      INTEGER ::   ioptio, ierr         ! temporary integers
174      !!----------------------------------------------------------------------
175   
176      !                                   ! Namelist nam_dynldf: already read in ldfdyn module
177
178      IF(lwp) THEN                        ! Namelist print
179         WRITE(numout,*)
180         WRITE(numout,*) 'dyn_ldf_ctl_tam : Choice of the lateral diffusive operator on dynamics'
181         WRITE(numout,*) '~~~~~~~~~~~~~~'
182         WRITE(numout,*) '       Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)'
183         WRITE(numout,*) '          laplacian operator          ln_dynldf_lap   = ', ln_dynldf_lap
184         WRITE(numout,*) '          bilaplacian operator        ln_dynldf_bilap = ', ln_dynldf_bilap
185         WRITE(numout,*) '          iso-level                   ln_dynldf_level = ', ln_dynldf_level
186         WRITE(numout,*) '          horizontal (geopotential)   ln_dynldf_hor   = ', ln_dynldf_hor
187         WRITE(numout,*) '          iso-neutral                 ln_dynldf_iso   = ', ln_dynldf_iso
188      ENDIF
189
190      !                                   ! control the consistency
191      ioptio = 0
192      IF( ln_dynldf_lap   )   ioptio = ioptio + 1
193      IF( ln_dynldf_bilap )   ioptio = ioptio + 1
194      IF( ioptio /= 1 ) CALL ctl_stop( '          use ONE of the 2 lap/bilap operator type on dynamics' )
195      ioptio = 0
196      IF( ln_dynldf_level )   ioptio = ioptio + 1
197      IF( ln_dynldf_hor   )   ioptio = ioptio + 1
198      IF( ln_dynldf_iso   )   ioptio = ioptio + 1
199      IF( ioptio /= 1 ) CALL ctl_stop( '          use only ONE direction (level/hor/iso)' )
200
201      !                                   ! Set nldf, the type of lateral diffusion, from ln_dynldf_... logicals
202      ierr = 0
203      IF ( ln_dynldf_lap ) THEN      ! laplacian operator
204         IF ( ln_zco ) THEN                ! z-coordinate
205            IF ( ln_dynldf_level )   nldf = 0      ! iso-level  (no rotation)
206            IF ( ln_dynldf_hor   )   nldf = 0      ! horizontal (no rotation)
207            IF ( ln_dynldf_iso   )   nldf = 1      ! isoneutral (   rotation)
208         ENDIF
209         IF ( ln_zps ) THEN             ! z-coordinate
210            IF ( ln_dynldf_level )   ierr = 1      ! iso-level not allowed
211            IF ( ln_dynldf_hor   )   nldf = 0      ! horizontal (no rotation)
212            IF ( ln_dynldf_iso   )   nldf = 1      ! isoneutral (   rotation)
213         ENDIF
214         IF ( ln_sco ) THEN             ! z-coordinate
215            IF ( ln_dynldf_level )   nldf = 0      ! iso-level  (no rotation)
216            IF ( ln_dynldf_hor   )   nldf = 1      ! horizontal (   rotation)
217            IF ( ln_dynldf_iso   )   nldf = 1      ! isoneutral (   rotation)
218         ENDIF
219      ENDIF
220
221      IF( ln_dynldf_bilap ) THEN      ! bilaplacian operator
222         IF ( ln_zco ) THEN                ! z-coordinate
223            IF ( ln_dynldf_level )   nldf = 2      ! iso-level  (no rotation)
224            IF ( ln_dynldf_hor   )   nldf = 2      ! horizontal (no rotation)
225            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation)
226         ENDIF
227         IF ( ln_zps ) THEN             ! z-coordinate
228            IF ( ln_dynldf_level )   ierr = 1      ! iso-level not allowed
229            IF ( ln_dynldf_hor   )   nldf = 2      ! horizontal (no rotation)
230            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation)
231         ENDIF
232         IF ( ln_sco ) THEN             ! z-coordinate
233            IF ( ln_dynldf_level )   nldf = 2      ! iso-level  (no rotation)
234            IF ( ln_dynldf_hor   )   nldf = 3      ! horizontal (   rotation)
235            IF ( ln_dynldf_iso   )   ierr = 2      ! isoneutral (   rotation)
236         ENDIF
237      ENDIF
238     
239
240      IF( ierr == 1 )   CALL ctl_stop( 'iso-level in z-coordinate - partial step, not allowed' )
241      IF( ierr == 2 )   CALL ctl_stop( 'isoneutral bilaplacian operator does not exist' )
242      IF( nldf == 1 .OR. nldf == 3 ) THEN      ! rotation
243         IF( .NOT.lk_ldfslp )   CALL ctl_stop( 'the rotation of the diffusive tensor require key_ldfslp' )
244      ENDIF
245
246      IF(lwp) THEN
247         WRITE(numout,*)
248         IF( nldf ==  0 )   WRITE(numout,*) '              laplacian operator'
249         IF( nldf ==  1 )   WRITE(numout,*) '              Rotated laplacian operator'
250         IF( nldf ==  2 )   WRITE(numout,*) '              bilaplacian operator'
251         IF( nldf ==  3 )   WRITE(numout,*) '              Rotated bilaplacian'
252      ENDIF
253      !
254   END SUBROUTINE dyn_ldf_ctl_tam
255
256   SUBROUTINE dyn_ldf_adj_tst( kumadt )
257      !!-----------------------------------------------------------------------
258      !!
259      !!                  ***  ROUTINE dyn_ldf_adj_tst ***
260      !!
261      !! ** Purpose : Test the adjoint routine.
262      !!
263      !! ** Method  : Verify the scalar product
264      !!           
265      !!                 ( L dx )^T W dy  =  dx^T L^T W dy
266      !!
267      !!              where  L   = tangent routine
268      !!                     L^T = adjoint routine
269      !!                     W   = diagonal matrix of scale factors
270      !!                     dx  = input perturbation (random field)
271      !!                     dy  = L dx
272      !!
273      !! ** Action  : Separate tests are applied for the following dx and dy:
274      !!               
275      !!              1) dx = ( SSH ) and dy = ( SSH )
276      !!                   
277      !! History :
278      !!        ! 08-08 (A. Vidard)
279      !!-----------------------------------------------------------------------
280      !! * Modules used
281
282      !! * Arguments
283      INTEGER, INTENT(IN) :: &
284         & kumadt             ! Output unit
285 
286      INTEGER :: &
287         & ji,    &        ! dummy loop indices
288         & jj,    &       
289         & jk,    &
290         & jt     
291      INTEGER, DIMENSION(jpi,jpj) :: &
292         & iseed_2d        ! 2D seed for the random number generator
293
294      !! * Local declarations
295      REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: &
296         & zua_tlin,     & ! Tangent input: after u-velocity
297         & zva_tlin,     & ! Tangent input: after u-velocity         
298         & zua_tlout,    & ! Tangent output:after u-velocity
299         & zva_tlout,    & ! Tangent output:after v-velocity
300         & zua_adin,     & ! adjoint input: after u-velocity
301         & zva_adin,     & ! adjoint input: after v-velocity
302         & zua_adout,    & ! adjoint output:after v-velocity
303         & zva_adout,    & ! adjoint output:after u-velocity
304         & zrotb_tlin,   &
305         & zhdivb_tlin,  &
306         & zrotb_adout,  &
307         & zhdivb_adout, &
308         & zrotb,        & ! 3D random field for rotb
309         & zhdivb,       & ! 3D random field for hdivb
310         & zau,          & ! 3D random field for u
311         & zav             ! 3D random field for v
312      REAL(KIND=wp) :: &
313         & zsp1,         & ! scalar product involving the tangent routine
314         & zsp1_1,       & !   scalar product components
315         & zsp1_2,       & 
316         & zsp2,         & ! scalar product involving the adjoint routine
317         & zsp2_1,       & !   scalar product components
318         & zsp2_2,       & 
319         & zsp2_3,       & 
320         & zsp2_4
321      CHARACTER(LEN=14) :: cl_name
322
323      ! Allocate memory
324
325      ALLOCATE( &
326         & zua_tlin(jpi,jpj,jpk),     &
327         & zva_tlin(jpi,jpj,jpk),     &
328         & zua_tlout(jpi,jpj,jpk),    &
329         & zva_tlout(jpi,jpj,jpk),    &
330         & zua_adin(jpi,jpj,jpk),     &
331         & zva_adin(jpi,jpj,jpk),     &
332         & zua_adout(jpi,jpj,jpk),    &
333         & zva_adout(jpi,jpj,jpk),    &
334         & zrotb_tlin(jpi,jpj,jpk),   &
335         & zhdivb_tlin(jpi,jpj,jpk),  &
336         & zrotb_adout(jpi,jpj,jpk),  &
337         & zhdivb_adout(jpi,jpj,jpk), &
338         & zrotb(jpi,jpj,jpk),        & 
339         & zhdivb(jpi,jpj,jpk),       & 
340         & zau(jpi,jpj,jpk),          & 
341         & zav(jpi,jpj,jpk)           & 
342         & )
343
344      DO jt = 1, 2
345
346         IF (jt == 1) nldf=0  ! iso-level laplacian
347         IF (jt == 2) nldf=2  ! iso-level bilaplacian
348
349      !==================================================================
350      ! 1)      dx = ( ua_tl, va_tl, rotb_tl, hdivb_tl )
351      !    and  dy = ( ua_tl, va_tl )
352      !==================================================================
353
354      !--------------------------------------------------------------------
355      ! Reset the tangent and adjoint variables
356      !--------------------------------------------------------------------
357      zua_tlin(:,:,:)     = 0.0_wp     
358      zva_tlin(:,:,:)     = 0.0_wp     
359      zrotb_tlin(:,:,:)   = 0.0_wp   
360      zhdivb_tlin(:,:,:)  = 0.0_wp 
361      zua_tlout(:,:,:)    = 0.0_wp     
362      zva_tlout(:,:,:)    = 0.0_wp     
363      zua_adin(:,:,:)     = 0.0_wp   
364      zva_adin(:,:,:)     = 0.0_wp   
365      zrotb_adout(:,:,:)  = 0.0_wp 
366      zhdivb_adout(:,:,:) = 0.0_wp 
367      zua_adout(:,:,:)    = 0.0_wp   
368      zva_adout(:,:,:)    = 0.0_wp   
369      zrotb(:,:,:)        = 0.0_wp         
370      zhdivb(:,:,:)       = 0.0_wp       
371      zau(:,:,:)          = 0.0_wp           
372      zav(:,:,:)          = 0.0_wp   
373
374      ua_tl(:,:,:)    = 0.0_wp     
375      va_tl(:,:,:)    = 0.0_wp     
376      ua_ad(:,:,:)    = 0.0_wp     
377      va_ad(:,:,:)    = 0.0_wp     
378      rotb_tl(:,:,:)  = 0.0_wp   
379      hdivb_tl(:,:,:) = 0.0_wp 
380      rotb_ad(:,:,:)  = 0.0_wp 
381      hdivb_ad(:,:,:) = 0.0_wp 
382
383      !--------------------------------------------------------------------
384      ! Initialize the tangent input with random noise: dx
385      !--------------------------------------------------------------------
386
387      DO jj = 1, jpj
388         DO ji = 1, jpi
389            iseed_2d(ji,jj) = - ( 596035 + &
390               &                  mig(ji) + ( mjg(jj) - 1 ) * jpiglo )
391         END DO
392      END DO
393      CALL grid_random( iseed_2d, zau, 'U', 0.0_wp, stdu )
394
395      DO jj = 1, jpj
396         DO ji = 1, jpi
397            iseed_2d(ji,jj) = - ( 523432 + &
398               &                  mig(ji) + ( mjg(jj) - 1 ) * jpiglo )
399         END DO
400      END DO
401      CALL grid_random( iseed_2d, zav, 'V', 0.0_wp, stdv )
402
403      DO jj = 1, jpj
404         DO ji = 1, jpi
405            iseed_2d(ji,jj) = - ( 456953 + &
406               &                  mig(ji) + ( mjg(jj) - 1 ) * jpiglo )
407         END DO
408      END DO
409      CALL grid_random( iseed_2d, zrotb, 'F', 0.0_wp, stdr )
410
411      DO jj = 1, jpj
412         DO ji = 1, jpi
413            iseed_2d(ji,jj) = - ( 432545 + &
414               &                  mig(ji) + ( mjg(jj) - 1 ) * jpiglo )
415         END DO
416      END DO
417      CALL grid_random( iseed_2d, zhdivb, 'T', 0.0_wp, stdh )
418
419      DO jk = 1, jpk
420         DO jj = nldj, nlej
421            DO ji = nldi, nlei
422               zua_tlin   (ji,jj,jk) = zau   (ji,jj,jk)
423               zva_tlin   (ji,jj,jk) = zav   (ji,jj,jk)
424               zhdivb_tlin(ji,jj,jk) = zhdivb(ji,jj,jk)
425               zrotb_tlin (ji,jj,jk) = zrotb (ji,jj,jk)
426            END DO
427         END DO
428      END DO
429      hdivb_tl(:,:,:) = zhdivb_tlin(:,:,:)
430      rotb_tl (:,:,:) = zrotb_tlin (:,:,:)
431      ua_tl   (:,:,:) = zua_tlin   (:,:,:)
432      va_tl   (:,:,:) = zva_tlin   (:,:,:)
433
434         IF (nldf == 0 )  CALL dyn_ldf_lap_tan(   nit000 )
435         IF (nldf == 2 )  CALL dyn_ldf_bilap_tan( nit000 )
436
437      zua_tlout(:,:,:) = ua_tl(:,:,:)
438      zva_tlout(:,:,:) = va_tl(:,:,:)
439
440      !--------------------------------------------------------------------
441      ! Initialize the adjoint variables: dy^* = W dy
442      !--------------------------------------------------------------------
443
444      DO jk = 1, jpk
445        DO jj = nldj, nlej
446           DO ji = nldi, nlei
447              zua_adin(ji,jj,jk) = zua_tlout(ji,jj,jk) &
448                 &               * e1u(ji,jj) * e2u(ji,jj) * fse3u(ji,jj,jk) &
449                 &               * umask(ji,jj,jk)
450              zva_adin(ji,jj,jk) = zva_tlout(ji,jj,jk) &
451                 &               * e1v(ji,jj) * e2v(ji,jj) * fse3v(ji,jj,jk) &
452                 &               * vmask(ji,jj,jk)
453            END DO
454         END DO
455      END DO
456
457      !--------------------------------------------------------------------
458      ! Compute the scalar product: ( L dx )^T W dy
459      !--------------------------------------------------------------------
460
461      zsp1_1 = DOT_PRODUCT( zua_tlout, zua_adin )
462      zsp1_2 = DOT_PRODUCT( zva_tlout, zva_adin )
463      zsp1   = zsp1_1 + zsp1_2
464
465      !--------------------------------------------------------------------
466      ! Call the adjoint routine: dx^* = L^T dy^*
467      !--------------------------------------------------------------------
468
469      ua_ad(:,:,:) = zua_adin(:,:,:)
470      va_ad(:,:,:) = zva_adin(:,:,:)
471
472         IF (nldf == 0 )  CALL dyn_ldf_lap_adj(   nit000 )
473         IF (nldf == 2 )  CALL dyn_ldf_bilap_adj( nit000 )
474
475      zua_adout   (:,:,:) = ua_ad   (:,:,:)
476      zva_adout   (:,:,:) = va_ad   (:,:,:)
477      zrotb_adout (:,:,:) = rotb_ad (:,:,:)
478      zhdivb_adout(:,:,:) = hdivb_ad(:,:,:)
479
480      !--------------------------------------------------------------------
481      ! Compute the scalar product: dx^T dx^*
482      !--------------------------------------------------------------------
483     
484      zsp2_1 = DOT_PRODUCT( zua_tlin,    zua_adout    )
485      zsp2_2 = DOT_PRODUCT( zva_tlin,    zva_adout    )
486      zsp2_3 = DOT_PRODUCT( zrotb_tlin,  zrotb_adout  )
487      zsp2_4 = DOT_PRODUCT( zhdivb_tlin, zhdivb_adout )
488      zsp2   = zsp2_1 + zsp2_2 + zsp2_3 + zsp2_4
489
490      ! Compare the scalar products
491      ! 14 char:'12345678901234'
492         IF (nldf == 0 )  cl_name = 'dynldf_adj lap'
493         IF (nldf == 2 )  cl_name = 'dynldf_adj blp'
494      CALL prntst_adj( cl_name, kumadt, zsp1, zsp2 )
495
496      END DO
497
498      DEALLOCATE( &
499         & zua_tlin,     &
500         & zva_tlin,     &
501         & zua_tlout,    &
502         & zva_tlout,    &
503         & zua_adin,     &
504         & zva_adin,     &
505         & zua_adout,    &
506         & zva_adout,    &
507         & zrotb_tlin,   &
508         & zhdivb_tlin,  &
509         & zrotb_adout,  &
510         & zhdivb_adout, &
511         & zrotb,        & 
512         & zhdivb,       & 
513         & zau,          & 
514         & zav           & 
515         & )
516   END SUBROUTINE dyn_ldf_adj_tst
517   !!======================================================================
518#endif
519END MODULE dynldf_tam
Note: See TracBrowser for help on using the repository browser.