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

source: branches/2011/DEV_r2739_STFC_dCSE/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90 @ 4416

Last change on this file since 4416 was 4416, checked in by trackstand2, 10 years ago

Added debug SUMs to dyn_nxt

  • Property svn:keywords set to Id
File size: 19.3 KB
RevLine 
[3]1MODULE dynnxt
[1502]2   !!=========================================================================
[3]3   !!                       ***  MODULE  dynnxt  ***
4   !! Ocean dynamics: time stepping
[1502]5   !!=========================================================================
[1438]6   !! History :  OPA  !  1987-02  (P. Andrich, D. L Hostis)  Original code
7   !!                 !  1990-10  (C. Levy, G. Madec)
8   !!            7.0  !  1993-03  (M. Guyon)  symetrical conditions
9   !!            8.0  !  1997-02  (G. Madec & M. Imbard)  opa, release 8.0
10   !!            8.2  !  1997-04  (A. Weaver)  Euler forward step
11   !!             -   !  1997-06  (G. Madec)  lateral boudary cond., lbc routine
12   !!    NEMO    1.0  !  2002-08  (G. Madec)  F90: Free form and module
13   !!             -   !  2002-10  (C. Talandier, A-M. Treguier) Open boundary cond.
14   !!            2.0  !  2005-11  (V. Garnier) Surface pressure gradient organization
15   !!            2.3  !  2007-07  (D. Storkey) Calls to BDY routines.
[1502]16   !!            3.2  !  2009-06  (G. Madec, R.Benshila)  re-introduce the vvl option
[2528]17   !!            3.3  !  2010-09  (D. Storkey, E.O'Dea) Bug fix for BDY module
[2723]18   !!            3.3  !  2011-03  (P. Oddo) Bug fix for time-splitting+(BDY-OBC) and not VVL
[1502]19   !!-------------------------------------------------------------------------
[1438]20 
[1502]21   !!-------------------------------------------------------------------------
22   !!   dyn_nxt      : obtain the next (after) horizontal velocity
23   !!-------------------------------------------------------------------------
[3]24   USE oce             ! ocean dynamics and tracers
25   USE dom_oce         ! ocean space and time domain
[2528]26   USE sbc_oce         ! Surface boundary condition: ocean fields
27   USE phycst          ! physical constants
[1502]28   USE dynspg_oce      ! type of surface pressure gradient
29   USE dynadv          ! dynamics: vector invariant versus flux form
30   USE domvvl          ! variable volume
[367]31   USE obc_oce         ! ocean open boundary conditions
[3]32   USE obcdyn          ! open boundary condition for momentum (obc_dyn routine)
[367]33   USE obcdyn_bt       ! 2D open boundary condition for momentum (obc_dyn_bt routine)
34   USE obcvol          ! ocean open boundary condition (obc_vol routines)
[911]35   USE bdy_oce         ! unstructured open boundary conditions
36   USE bdydta          ! unstructured open boundary conditions
37   USE bdydyn          ! unstructured open boundary conditions
[1502]38   USE in_out_manager  ! I/O manager
[3]39   USE lbclnk          ! lateral boundary condition (or mpp link)
[2715]40   USE lib_mpp         ! MPP library
[258]41   USE prtctl          ! Print control
[2528]42#if defined key_agrif
43   USE agrif_opa_interp
44#endif
[3]45
46   IMPLICIT NONE
47   PRIVATE
48
[1438]49   PUBLIC    dyn_nxt   ! routine called by step.F90
50
[3211]51   !! * Control permutation of array indices
52#  include "oce_ftrans.h90"
53#  include "dom_oce_ftrans.h90"
54#  include "sbc_oce_ftrans.h90"
55#  include "domvvl_ftrans.h90"
56#  include "obc_oce_ftrans.h90"
57
[592]58   !! * Substitutions
59#  include "domzgr_substitute.h90"
[2715]60   !!----------------------------------------------------------------------
[2528]61   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
[1438]62   !! $Id$
[2715]63   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
64   !!----------------------------------------------------------------------
[3]65CONTAINS
66
67   SUBROUTINE dyn_nxt ( kt )
68      !!----------------------------------------------------------------------
69      !!                  ***  ROUTINE dyn_nxt  ***
70      !!                   
[1502]71      !! ** Purpose :   Compute the after horizontal velocity. Apply the boundary
72      !!             condition on the after velocity, achieved the time stepping
73      !!             by applying the Asselin filter on now fields and swapping
74      !!             the fields.
[3]75      !!
[1502]76      !! ** Method  : * After velocity is compute using a leap-frog scheme:
77      !!                       (ua,va) = (ub,vb) + 2 rdt (ua,va)
78      !!             Note that with flux form advection and variable volume layer
79      !!             (lk_vvl=T), the leap-frog is applied on thickness weighted
80      !!             velocity.
81      !!             Note also that in filtered free surface (lk_dynspg_flt=T),
82      !!             the time stepping has already been done in dynspg module
[3]83      !!
[1502]84      !!              * Apply lateral boundary conditions on after velocity
85      !!             at the local domain boundaries through lbc_lnk call,
86      !!             at the radiative open boundaries (lk_obc=T),
87      !!             at the relaxed   open boundaries (lk_bdy=T), and
88      !!             at the AGRIF zoom     boundaries (lk_agrif=T)
[3]89      !!
[1502]90      !!              * Apply the time filter applied and swap of the dynamics
91      !!             arrays to start the next time step:
92      !!                (ub,vb) = (un,vn) + atfp [ (ub,vb) + (ua,va) - 2 (un,vn) ]
93      !!                (un,vn) = (ua,va).
94      !!             Note that with flux form advection and variable volume layer
95      !!             (lk_vvl=T), the time filter is applied on thickness weighted
96      !!             velocity.
97      !!
98      !! ** Action :   ub,vb   filtered before horizontal velocity of next time-step
99      !!               un,vn   now horizontal velocity of next time-step
[3]100      !!----------------------------------------------------------------------
[2715]101      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released
102      USE oce     , ONLY:   ze3u_f => ta       , ze3v_f => sa       ! (ta,sa) used as 3D workspace
103      USE wrk_nemo, ONLY:   zs_t   => wrk_2d_1 , zs_u_1 => wrk_2d_2 , zs_v_1 => wrk_2d_3
[3837]104      USE arpdebugging, ONLY: dump_array
[3211]105      !! DCSE_NEMO: need additional directives for renamed module variables
106!FTRANS ze3u_f :I :I :z
107!FTRANS ze3v_f :I :I :z
[2715]108      !
[3]109      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index
[2715]110      !
[3]111      INTEGER  ::   ji, jj, jk   ! dummy loop indices
[1566]112#if ! defined key_dynspg_flt
[3]113      REAL(wp) ::   z2dt         ! temporary scalar
[1566]114#endif
[2715]115      REAL(wp) ::   zue3a, zue3n, zue3b, zuf    ! local scalars
116      REAL(wp) ::   zve3a, zve3n, zve3b, zvf    !   -      -
117      REAL(wp) ::   zec, zv_t_ij, zv_t_ip1j, zv_t_ijp1
[1502]118      !!----------------------------------------------------------------------
[3]119
[2715]120      IF( wrk_in_use(2, 1,2,3) ) THEN
121         CALL ctl_stop('dyn_nxt: requested workspace arrays unavailable')   ;   RETURN
122      ENDIF
123
[3]124      IF( kt == nit000 ) THEN
125         IF(lwp) WRITE(numout,*)
126         IF(lwp) WRITE(numout,*) 'dyn_nxt : time stepping'
127         IF(lwp) WRITE(numout,*) '~~~~~~~'
128      ENDIF
129
[3837]130!      CALL dump_array(kt, 'ua_nxt_start',ua(:,:,1),withHalos=.TRUE.)
131
[1502]132#if defined key_dynspg_flt
133      !
134      ! Next velocity :   Leap-frog time stepping already done in dynspg_flt.F routine
135      ! -------------
[3]136
[1502]137      ! Update after velocity on domain lateral boundaries      (only local domain required)
138      ! --------------------------------------------------
139      CALL lbc_lnk( ua, 'U', -1. )         ! local domain boundaries
140      CALL lbc_lnk( va, 'V', -1. ) 
141      !
142#else
143      ! Next velocity :   Leap-frog time stepping
[1438]144      ! -------------
[1502]145      z2dt = 2. * rdt                                 ! Euler or leap-frog time step
146      IF( neuler == 0 .AND. kt == nit000 )  z2dt = rdt
147      !
148      IF( ln_dynadv_vec .OR. .NOT. lk_vvl ) THEN      ! applied on velocity
[1438]149         DO jk = 1, jpkm1
[1502]150            ua(:,:,jk) = ( ub(:,:,jk) + z2dt * ua(:,:,jk) ) * umask(:,:,jk)
151            va(:,:,jk) = ( vb(:,:,jk) + z2dt * va(:,:,jk) ) * vmask(:,:,jk)
152         END DO
153      ELSE                                            ! applied on thickness weighted velocity
154         DO jk = 1, jpkm1
155            ua(:,:,jk) = (          ub(:,:,jk) * fse3u_b(:,:,jk)      &
156               &           + z2dt * ua(:,:,jk) * fse3u_n(:,:,jk)  )   &
[1438]157               &         / fse3u_a(:,:,jk) * umask(:,:,jk)
[1502]158            va(:,:,jk) = (          vb(:,:,jk) * fse3v_b(:,:,jk)      &
159               &           + z2dt * va(:,:,jk) * fse3v_n(:,:,jk)  )   &
[1438]160               &         / fse3v_a(:,:,jk) * vmask(:,:,jk)
[592]161         END DO
162      ENDIF
163
[1502]164
165      ! Update after velocity on domain lateral boundaries
166      ! --------------------------------------------------     
167      CALL lbc_lnk( ua, 'U', -1. )     !* local domain boundaries
168      CALL lbc_lnk( va, 'V', -1. ) 
169      !
[4416]170      WRITE (*,*) 'ARPDBG: dyn_nxt: after lbc update sum(ua)=',SUM(ua),' at step=',kt
[3]171# if defined key_obc
[1502]172      !                                !* OBC open boundaries
[2528]173      CALL obc_dyn( kt )
[1502]174      !
[2715]175      IF( .NOT. lk_dynspg_flt ) THEN
[1502]176         ! Flather boundary condition : - Update sea surface height on each open boundary
[2715]177         !                                       sshn   (= after ssh   ) for explicit case (lk_dynspg_exp=T)
178         !                                       sshn_b (= after ssha_b) for time-splitting case (lk_dynspg_ts=T)
[1502]179         !                              - Correct the barotropic velocities
[367]180         CALL obc_dyn_bt( kt )
[1438]181         !
[1502]182!!gm ERROR - potential BUG: sshn should not be modified at this stage !!   ssh_nxt not alrady called
183         CALL lbc_lnk( sshn, 'T', 1. )         ! Boundary conditions on sshn
[1438]184         !
185         IF( ln_vol_cst )   CALL obc_vol( kt )
186         !
187         IF(ln_ctl)   CALL prt_ctl( tab2d_1=sshn, clinfo1=' ssh      : ', mask1=tmask )
[367]188      ENDIF
[1502]189      !
[1125]190# elif defined key_bdy 
[1502]191      !                                !* BDY open boundaries
[2723]192      IF( .NOT. lk_dynspg_flt ) THEN
193         CALL bdy_dyn_frs( kt )
194#  if ! defined key_vvl
195         ua_e(:,:) = 0.e0
196         va_e(:,:) = 0.e0
197         ! Set these variables for use in bdy_dyn_fla
198         hur_e(:,:) = hur(:,:)
199         hvr_e(:,:) = hvr(:,:)
200         DO jk = 1, jpkm1   !! Vertically integrated momentum trends
201            ua_e(:,:) = ua_e(:,:) + fse3u(:,:,jk) * umask(:,:,jk) * ua(:,:,jk)
202            va_e(:,:) = va_e(:,:) + fse3v(:,:,jk) * vmask(:,:,jk) * va(:,:,jk)
203         END DO
204         ua_e(:,:) = ua_e(:,:) * hur(:,:)
205         va_e(:,:) = va_e(:,:) * hvr(:,:)
206         DO jk = 1 , jpkm1
207            ua(:,:,jk) = ua(:,:,jk) - ua_e(:,:)
208            va(:,:,jk) = va(:,:,jk) - va_e(:,:)
209         END DO
210         CALL bdy_dta_fla( kt+1, 0,2*nn_baro)
211         CALL bdy_dyn_fla( sshn_b )
212         CALL lbc_lnk( ua_e, 'U', -1. )   ! Boundary points should be updated
213         CALL lbc_lnk( va_e, 'V', -1. )   !
214         DO jk = 1 , jpkm1
215            ua(:,:,jk) = ( ua(:,:,jk) + ua_e(:,:) ) * umask(:,:,jk)
216            va(:,:,jk) = ( va(:,:,jk) + va_e(:,:) ) * vmask(:,:,jk)
217         END DO
218#  endif
219      ENDIF
[1438]220# endif
[1502]221      !
[392]222# if defined key_agrif
[1502]223      CALL Agrif_dyn( kt )             !* AGRIF zoom boundaries
[389]224# endif
[3]225#endif
[592]226
[4416]227      WRITE(*,*) 'ARPDBG: dyn_nxt b4 time filter SUM(ua)=',SUM(ua),'at step=',kt
228
[1438]229      ! Time filter and swap of dynamics arrays
230      ! ------------------------------------------
[1502]231      IF( neuler == 0 .AND. kt == nit000 ) THEN        !* Euler at first time-step: only swap
[3211]232#if defined key_z_first
233         DO jj = 1, jpj
234            DO ji = 1, jpi
235               DO jk = 1, jpkm1
236                  un(ji,jj,jk) = ua(ji,jj,jk)                ! un <-- ua
237                  vn(ji,jj,jk) = va(ji,jj,jk)
238               END DO
239            END DO
240         END DO
241#else
[1502]242         DO jk = 1, jpkm1
243            un(:,:,jk) = ua(:,:,jk)                          ! un <-- ua
[1438]244            vn(:,:,jk) = va(:,:,jk)
245         END DO
[3211]246#endif
[1502]247      ELSE                                             !* Leap-Frog : Asselin filter and swap
[2528]248         !                                ! =============!
249         IF( .NOT. lk_vvl ) THEN          ! Fixed volume !
250            !                             ! =============!
[3211]251#if defined key_z_first
252            DO jj = 1, jpj
253               DO ji = 1, jpi   
254                  DO jk = 1, jpkm1                             
255#else
[1502]256            DO jk = 1, jpkm1                             
[592]257               DO jj = 1, jpj
[1502]258                  DO ji = 1, jpi   
[3211]259#endif
[2528]260                     zuf = un(ji,jj,jk) + atfp * ( ub(ji,jj,jk) - 2.e0 * un(ji,jj,jk) + ua(ji,jj,jk) )
261                     zvf = vn(ji,jj,jk) + atfp * ( vb(ji,jj,jk) - 2.e0 * vn(ji,jj,jk) + va(ji,jj,jk) )
[1502]262                     !
263                     ub(ji,jj,jk) = zuf                      ! ub <-- filtered velocity
264                     vb(ji,jj,jk) = zvf
265                     un(ji,jj,jk) = ua(ji,jj,jk)             ! un <-- ua
266                     vn(ji,jj,jk) = va(ji,jj,jk)
267                  END DO
268               END DO
269            END DO
[2528]270            !                             ! ================!
271         ELSE                             ! Variable volume !
272            !                             ! ================!
273            ! Before scale factor at t-points
274            ! -------------------------------
[1502]275            DO jk = 1, jpkm1
[2528]276               fse3t_b(:,:,jk) = fse3t_n(:,:,jk)                                   &
277                  &              + atfp * (  fse3t_b(:,:,jk) + fse3t_a(:,:,jk)     &
278                  &                         - 2.e0 * fse3t_n(:,:,jk)            )
279            ENDDO
280            ! Add volume filter correction only at the first level of t-point scale factors
281            zec = atfp * rdt / rau0
[3211]282#if defined key_z_first
283            fse3t_b(:,:,1) = fse3t_b(:,:,1) - zec * ( emp_b(:,:) - emp(:,:) ) * tmask_1(:,:)
284#else
[2528]285            fse3t_b(:,:,1) = fse3t_b(:,:,1) - zec * ( emp_b(:,:) - emp(:,:) ) * tmask(:,:,1)
[3211]286#endif
[2528]287            ! surface at t-points and inverse surface at (u/v)-points used in surface averaging computations
288            zs_t  (:,:) =       e1t(:,:) * e2t(:,:)
[3432]289            zs_u_1(:,:) = 0.5 / ( e1u(:,:) * e2u(:,:) )
290            zs_v_1(:,:) = 0.5 / ( e1v(:,:) * e2v(:,:) )
[2528]291            !
292            IF( ln_dynadv_vec ) THEN
293               ! Before scale factor at (u/v)-points
294               ! -----------------------------------
295               ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points
[3211]296#if defined key_z_first
297               DO jj = 1, jpjm1
298                  DO ji = 1, jpim1
299                     DO jk = 1, jpkm1
300#else
[2528]301               DO jk = 1, jpkm1
302                  DO jj = 1, jpjm1
303                     DO ji = 1, jpim1
[3211]304#endif
[2528]305                        zv_t_ij           = zs_t(ji  ,jj  ) * fse3t_b(ji  ,jj  ,jk)
306                        zv_t_ip1j         = zs_t(ji+1,jj  ) * fse3t_b(ji+1,jj  ,jk)
307                        zv_t_ijp1         = zs_t(ji  ,jj+1) * fse3t_b(ji  ,jj+1,jk)
308                        fse3u_b(ji,jj,jk) = umask(ji,jj,jk) * ( zs_u_1(ji,jj) * ( zv_t_ij + zv_t_ip1j ) - fse3u_0(ji,jj,jk) )
309                        fse3v_b(ji,jj,jk) = vmask(ji,jj,jk) * ( zs_v_1(ji,jj) * ( zv_t_ij + zv_t_ijp1 ) - fse3v_0(ji,jj,jk) )
310                     END DO
[592]311                  END DO
312               END DO
[2528]313               ! lateral boundary conditions
314               CALL lbc_lnk( fse3u_b(:,:,:), 'U', 1. )
315               CALL lbc_lnk( fse3v_b(:,:,:), 'V', 1. )
316               ! Add initial scale factor to scale factor anomaly
317               fse3u_b(:,:,:) = fse3u_b(:,:,:) + fse3u_0(:,:,:)
318               fse3v_b(:,:,:) = fse3v_b(:,:,:) + fse3v_0(:,:,:)
319               ! Leap-Frog - Asselin filter and swap: applied on velocity
320               ! -----------------------------------
[3211]321#if defined key_z_first
322               DO jj = 1, jpj
323                  DO ji = 1, jpi
324                     DO jk = 1, jpkm1
325#else
[2528]326               DO jk = 1, jpkm1
327                  DO jj = 1, jpj
328                     DO ji = 1, jpi
[3211]329#endif
[2528]330                        zuf = un(ji,jj,jk) + atfp * ( ub(ji,jj,jk) - 2.e0 * un(ji,jj,jk) + ua(ji,jj,jk) )
331                        zvf = vn(ji,jj,jk) + atfp * ( vb(ji,jj,jk) - 2.e0 * vn(ji,jj,jk) + va(ji,jj,jk) )
332                        !
333                        ub(ji,jj,jk) = zuf                      ! ub <-- filtered velocity
334                        vb(ji,jj,jk) = zvf
335                        un(ji,jj,jk) = ua(ji,jj,jk)             ! un <-- ua
336                        vn(ji,jj,jk) = va(ji,jj,jk)
337                     END DO
338                  END DO
339               END DO
340               !
341            ELSE
342               ! Temporary filered scale factor at (u/v)-points (will become before scale factor)
343               !-----------------------------------------------
344               ! Scale factor anomaly at (u/v)-points: surface averaging of scale factor at t-points
[3211]345#if defined key_z_first
346               DO jj = 1, jpjm1
347                  DO ji = 1, jpim1
348                     DO jk = 1, jpkm1
349#else
[2528]350               DO jk = 1, jpkm1
351                  DO jj = 1, jpjm1
352                     DO ji = 1, jpim1
[3211]353#endif
[2528]354                        zv_t_ij          = zs_t(ji  ,jj  ) * fse3t_b(ji  ,jj  ,jk)
355                        zv_t_ip1j        = zs_t(ji+1,jj  ) * fse3t_b(ji+1,jj  ,jk)
356                        zv_t_ijp1        = zs_t(ji  ,jj+1) * fse3t_b(ji  ,jj+1,jk)
357                        ze3u_f(ji,jj,jk) = umask(ji,jj,jk) * ( zs_u_1(ji,jj) * ( zv_t_ij + zv_t_ip1j ) - fse3u_0(ji,jj,jk) )
358                        ze3v_f(ji,jj,jk) = vmask(ji,jj,jk) * ( zs_v_1(ji,jj) * ( zv_t_ij + zv_t_ijp1 ) - fse3v_0(ji,jj,jk) )
359                     END DO
360                  END DO
361               END DO
362               ! lateral boundary conditions
363               CALL lbc_lnk( ze3u_f, 'U', 1. )
364               CALL lbc_lnk( ze3v_f, 'V', 1. )
365               ! Add initial scale factor to scale factor anomaly
366               ze3u_f(:,:,:) = ze3u_f(:,:,:) + fse3u_0(:,:,:)
367               ze3v_f(:,:,:) = ze3v_f(:,:,:) + fse3v_0(:,:,:)
368               ! Leap-Frog - Asselin filter and swap: applied on thickness weighted velocity
369               ! -----------------------------------             ===========================
[3211]370#if defined key_z_first
371               DO jj = 1, jpj
372                  DO ji = 1, jpim1
373                     DO jk = 1, jpkm1
374#else
[2528]375               DO jk = 1, jpkm1
376                  DO jj = 1, jpj
377                     DO ji = 1, jpim1
[3211]378#endif
[2528]379                        zue3a = ua(ji,jj,jk) * fse3u_a(ji,jj,jk)
380                        zve3a = va(ji,jj,jk) * fse3v_a(ji,jj,jk)
381                        zue3n = un(ji,jj,jk) * fse3u_n(ji,jj,jk)
382                        zve3n = vn(ji,jj,jk) * fse3v_n(ji,jj,jk)
383                        zue3b = ub(ji,jj,jk) * fse3u_b(ji,jj,jk)
384                        zve3b = vb(ji,jj,jk) * fse3v_b(ji,jj,jk)
385                        !
386                        zuf  = ( zue3n + atfp * ( zue3b - 2.e0 * zue3n  + zue3a ) ) / ze3u_f(ji,jj,jk)
387                        zvf  = ( zve3n + atfp * ( zve3b - 2.e0 * zve3n  + zve3a ) ) / ze3v_f(ji,jj,jk)
388                        !
389                        ub(ji,jj,jk) = zuf                      ! ub <-- filtered velocity
390                        vb(ji,jj,jk) = zvf
391                        un(ji,jj,jk) = ua(ji,jj,jk)             ! un <-- ua
392                        vn(ji,jj,jk) = va(ji,jj,jk)
393                     END DO
394                  END DO
395               END DO
396               fse3u_b(:,:,:) = ze3u_f(:,:,:)                   ! e3u_b <-- filtered scale factor
397               fse3v_b(:,:,:) = ze3v_f(:,:,:)
398               CALL lbc_lnk( ub, 'U', -1. )                     ! lateral boundary conditions
399               CALL lbc_lnk( vb, 'V', -1. )
400            ENDIF
401            !
[3]402         ENDIF
[2528]403         !
[258]404      ENDIF
[3]405
[4416]406      WRITE(*,*) 'ARPDBG: dyn_nxt end SUM(un)=',SUM(un),'at step=',kt
407
[1438]408      IF(ln_ctl)   CALL prt_ctl( tab3d_1=un, clinfo1=' nxt  - Un: ', mask1=umask,   &
409         &                       tab3d_2=vn, clinfo2=' Vn: '       , mask2=vmask )
410      !
[2715]411      IF( wrk_not_released(2, 1,2,3) )   CALL ctl_stop('dyn_nxt: failed to release workspace arrays')
412      !
[3]413   END SUBROUTINE dyn_nxt
414
[1502]415   !!=========================================================================
[3]416END MODULE dynnxt
Note: See TracBrowser for help on using the repository browser.