/[MITgcm]/MITgcm/pkg/mdsio/mdsio_write_field.F
ViewVC logotype

Diff of /MITgcm/pkg/mdsio/mdsio_write_field.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.8 by jmc, Tue May 12 19:56:36 2009 UTC revision 1.10 by jmc, Mon Jun 1 14:20:31 2009 UTC
# Line 73  C Global variables / common blocks Line 73  C Global variables / common blocks
73  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
74  #include "W2_EXCH2_SIZE.h"  #include "W2_EXCH2_SIZE.h"
75  #include "W2_EXCH2_TOPOLOGY.h"  #include "W2_EXCH2_TOPOLOGY.h"
76    #include "W2_EXCH2_PARAMS.h"
77  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
78  #include "MDSIO_SCPU.h"  #include "EEBUFF_SCPU.h"
79    
80  C !INPUT PARAMETERS:  C !INPUT PARAMETERS:
81        CHARACTER*(*) fName        CHARACTER*(*) fName
# Line 106  C !LOCAL VARIABLES: Line 107  C !LOCAL VARIABLES:
107        LOGICAL fileIsOpen        LOGICAL fileIsOpen
108        LOGICAL iAmDoingIO        LOGICAL iAmDoingIO
109        LOGICAL writeMetaF        LOGICAL writeMetaF
110        LOGICAL keepBlankTileIO        LOGICAL useExch2ioLayOut
111        LOGICAL zeroBuff        LOGICAL zeroBuff
112        INTEGER xSize, ySize        INTEGER xSize, ySize
113        INTEGER irecord        INTEGER irecord
114        INTEGER iG,jG,bi,bj,i,j,k,nNz        INTEGER iG,jG,bi,bj,i,j,k,nNz
115        INTEGER irec,dUnit,IL,pIL        INTEGER irec,dUnit,IL,pIL
116        INTEGER dimList(3,3), nDims, map2gl(2)        INTEGER dimList(3,3), nDims, map2gl(2)
       INTEGER iGjLoc, jGjLoc  
117        INTEGER length_of_rec        INTEGER length_of_rec
118        Real*4 r4seg(sNx)        Real*4 r4seg(sNx)
119        Real*8 r8seg(sNx)        Real*8 r8seg(sNx)
120          Real*4 r4loc(sNx,sNy)
121          Real*8 r8loc(sNx,sNy)
122          INTEGER tNx, tNy, global_nTx
123          INTEGER tBx, tBy, iGjLoc, jGjLoc
124  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
125  c     INTEGER tGy,tGx,tNy,tNx,tN        INTEGER tN
       INTEGER tGy,tGx,    tNx,tN  
       INTEGER global_nTx  
126  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
       INTEGER tNy  
127    
128  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
129  C Set dimensions:  C Set dimensions:
130        xSize = Nx        xSize = Nx
131        ySize = Ny        ySize = Ny
132        keepBlankTileIO = .FALSE.        useExch2ioLayOut = .FALSE.
133  #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)  #ifdef ALLOW_EXCH2
134        xSize = exch2_global_Nx        IF ( W2_useE2ioLayOut ) THEN
135        ySize = exch2_global_Ny          xSize = exch2_global_Nx
136        keepBlankTileIO = .TRUE.          ySize = exch2_global_Ny
137  #endif          useExch2ioLayOut = .TRUE.
138          ENDIF
139    #endif /* ALLOW_EXCH2 */
140    
141  C-    default:  C-    default:
142        iGjLoc = 0        iGjLoc = 0
# Line 198  C globalFile is too slow, then try using Line 201  C globalFile is too slow, then try using
201  C Master thread of process 0, only, opens a global file  C Master thread of process 0, only, opens a global file
202         IF ( iAmDoingIO ) THEN         IF ( iAmDoingIO ) THEN
203           WRITE(dataFName,'(2a)') fName(1:IL),'.data'           WRITE(dataFName,'(2a)') fName(1:IL),'.data'
204           length_of_rec=MDS_RECLEN(filePrec,xSize*ySize,myThid)           length_of_rec = MDS_RECLEN( filePrec, xSize*ySize, myThid )
205           IF (irecord .EQ. 1) THEN           IF (irecord .EQ. 1) THEN
206            OPEN( dUnit, file=dataFName, status=_NEW_STATUS,            OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
207       &        access='direct', recl=length_of_rec )       &        access='direct', recl=length_of_rec )
# Line 214  C Gather array and WRITE it to file, one Line 217  C Gather array and WRITE it to file, one
217  C-      copy from arr(level=k) to 2-D "local":  C-      copy from arr(level=k) to 2-D "local":
218          IF ( filePrec.EQ.precFloat32 ) THEN          IF ( filePrec.EQ.precFloat32 ) THEN
219            IF ( arrType.EQ.'RS' ) THEN            IF ( arrType.EQ.'RS' ) THEN
220              CALL MDS_PASS_R4toRS( sharedLocBuf_r4,              CALL MDS_PASS_R4toRS( sharedLocBuf_r4, arr,
221       &                            arr, k, kSize, .FALSE., myThid )       I                            k, kSize, 0,0, .FALSE., myThid )
222            ELSEIF ( arrType.EQ.'RL' ) THEN            ELSEIF ( arrType.EQ.'RL' ) THEN
223              CALL MDS_PASS_R4toRL( sharedLocBuf_r4,              CALL MDS_PASS_R4toRL( sharedLocBuf_r4, arr,
224       &                            arr, k, kSize, .FALSE., myThid )       I                            k, kSize, 0,0, .FALSE., myThid )
225            ELSE            ELSE
226              WRITE(msgBuf,'(A)')              WRITE(msgBuf,'(A)')
227       &         ' MDS_WRITE_FIELD: illegal value for arrType'       &         ' MDS_WRITE_FIELD: illegal value for arrType'
# Line 226  C-      copy from arr(level=k) to 2-D "l Line 229  C-      copy from arr(level=k) to 2-D "l
229              STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'              STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
230            ENDIF            ENDIF
231            CALL GATHER_2D_R4(            CALL GATHER_2D_R4(
232       U                       xy_buffer_r4,       O                       xy_buffer_r4,
233       O                       sharedLocBuf_r4,       I                       sharedLocBuf_r4,
234       I                       xSize, ySize,       I                       xSize, ySize,
235       I                       keepBlankTileIO, zeroBuff, myThid )       I                       useExch2ioLayOut, zeroBuff, myThid )
236          ELSEIF ( filePrec.EQ.precFloat64 ) THEN          ELSEIF ( filePrec.EQ.precFloat64 ) THEN
237            IF ( arrType.EQ.'RS' ) THEN            IF ( arrType.EQ.'RS' ) THEN
238              CALL MDS_PASS_R8toRS( sharedLocBuf_r8,              CALL MDS_PASS_R8toRS( sharedLocBuf_r8, arr,
239       &                            arr, k, kSize, .FALSE., myThid )       I                            k, kSize, 0,0, .FALSE., myThid )
240            ELSEIF ( arrType.EQ.'RL' ) THEN            ELSEIF ( arrType.EQ.'RL' ) THEN
241              CALL MDS_PASS_R8toRL( sharedLocBuf_r8,              CALL MDS_PASS_R8toRL( sharedLocBuf_r8, arr,
242       &                            arr, k, kSize, .FALSE., myThid )       I                            k, kSize, 0,0, .FALSE., myThid )
243            ELSE            ELSE
244              WRITE(msgBuf,'(A)')              WRITE(msgBuf,'(A)')
245       &         ' MDS_WRITE_FIELD: illegal value for arrType'       &         ' MDS_WRITE_FIELD: illegal value for arrType'
# Line 244  C-      copy from arr(level=k) to 2-D "l Line 247  C-      copy from arr(level=k) to 2-D "l
247              STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'              STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
248            ENDIF            ENDIF
249            CALL GATHER_2D_R8(            CALL GATHER_2D_R8(
250       U                       xy_buffer_r8,       O                       xy_buffer_r8,
251       O                       sharedLocBuf_r8,       I                       sharedLocBuf_r8,
252       I                       xSize, ySize,       I                       xSize, ySize,
253       I                       keepBlankTileIO, zeroBuff, myThid )       I                       useExch2ioLayOut, zeroBuff, myThid )
254          ELSE          ELSE
255             WRITE(msgBuf,'(A)')             WRITE(msgBuf,'(A)')
256       &       ' MDS_WRITE_FIELD: illegal value for filePrec'       &       ' MDS_WRITE_FIELD: illegal value for filePrec'
# Line 256  C-      copy from arr(level=k) to 2-D "l Line 259  C-      copy from arr(level=k) to 2-D "l
259          ENDIF          ENDIF
260    
261          IF ( iAmDoingIO ) THEN          IF ( iAmDoingIO ) THEN
262            irec=k+1-kLo+nNz*(irecord-1)            irec = 1 + k-kLo + (irecord-1)*nNz
263            IF (filePrec .EQ. precFloat32) THEN            IF (filePrec .EQ. precFloat32) THEN
264  #ifdef _BYTESWAPIO  #ifdef _BYTESWAPIO
265             CALL MDS_BYTESWAPR4( xSize*ySize, xy_buffer_r4 )             CALL MDS_BYTESWAPR4( xSize*ySize, xy_buffer_r4 )
# Line 293  C Only do I/O if I am the master thread Line 296  C Only do I/O if I am the master thread
296  C If we are writing to a global file then we open it here  C If we are writing to a global file then we open it here
297          IF (globalFile) THEN          IF (globalFile) THEN
298           WRITE(dataFName,'(2a)') fName(1:IL),'.data'           WRITE(dataFName,'(2a)') fName(1:IL),'.data'
299             length_of_rec = MDS_RECLEN( filePrec, sNx, myThid )
300           IF (irecord .EQ. 1) THEN           IF (irecord .EQ. 1) THEN
           length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )  
301            OPEN( dUnit, file=dataFName, status=_NEW_STATUS,            OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
302       &            access='direct', recl=length_of_rec )       &            access='direct', recl=length_of_rec )
           fileIsOpen=.TRUE.  
303           ELSE           ELSE
           length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )  
304            OPEN( dUnit, file=dataFName, status=_OLD_STATUS,            OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
305       &            access='direct', recl=length_of_rec )       &            access='direct', recl=length_of_rec )
           fileIsOpen=.TRUE.  
306           ENDIF           ENDIF
307             fileIsOpen=.TRUE.
308          ENDIF          ENDIF
309    
310  C Loop over all tiles  C Loop over all tiles
311          DO bj=1,nSy          DO bj=1,nSy
312           DO bi=1,nSx           DO bi=1,nSx
 C If we are writing to a tiled MDS file then we open each one here  
           IF (.NOT. globalFile) THEN  
            iG=bi+(myXGlobalLo-1)/sNx ! Kludge until unstructered tiles  
            jG=bj+(myYGlobalLo-1)/sNy ! Kludge until unstructered tiles  
            WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')  
      &              pfName(1:pIL),'.',iG,'.',jG,'.data'  
            IF (irecord .EQ. 1) THEN  
             length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )  
             OPEN( dUnit, file=dataFName, status=_NEW_STATUS,  
      &            access='direct', recl=length_of_rec )  
             fileIsOpen=.TRUE.  
            ELSE  
             length_of_rec=MDS_RECLEN( filePrec, sNx, myThid )  
             OPEN( dUnit, file=dataFName, status=_OLD_STATUS,  
      &            access='direct', recl=length_of_rec )  
             fileIsOpen=.TRUE.  
            ENDIF  
           ENDIF  
313    
314            IF (fileIsOpen) THEN            tNx = sNx
315             tNy = sNy            tNy = sNy
316              global_nTx = xSize/sNx
317              tBx = myXGlobalLo-1 + (bi-1)*sNx
318              tBy = myYGlobalLo-1 + (bj-1)*sNy
319  #ifdef ALLOW_EXCH2  #ifdef ALLOW_EXCH2
320             tN = W2_myTileList(bi)            IF ( useExch2ioLayOut ) THEN
321             tGy = exch2_tyGlobalo(tN)              tN = W2_myTileList(bi)
322             tGx = exch2_txGlobalo(tN)  c           tNx = exch2_tNx(tN)
323             tNy = exch2_tNy(tN)  c           tNy = exch2_tNy(tN)
324             tNx = exch2_tNx(tN)  c           global_nTx = exch2_global_Nx/tNx
325             IF   ( exch2_mydNx(tN) .GT. xSize ) THEN              tBx = exch2_txGlobalo(tN) - 1
326  C-         face x-size larger than glob-size : fold it              tBy = exch2_tyGlobalo(tN) - 1
327               iGjLoc = 0              IF   ( exch2_mydNx(tN) .GT. xSize ) THEN
328               jGjLoc = exch2_mydNx(tN) / xSize  C-          face x-size larger than glob-size : fold it
329             ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN                iGjLoc = 0
330  C-         tile y-size larger than glob-size : make a long line                jGjLoc = exch2_mydNx(tN) / xSize
331               iGjLoc = exch2_mydNx(tN)              ELSEIF ( exch2_tNy(tN) .GT. ySize ) THEN
332               jGjLoc = 0  C-          tile y-size larger than glob-size : make a long line
333             ELSE                iGjLoc = exch2_mydNx(tN)
334  C-         default (face fit into global-IO-array)                jGjLoc = 0
335               iGjLoc = 0              ELSE
336               jGjLoc = 1  C-          default (face fit into global-IO-array)
337             ENDIF                iGjLoc = 0
338             global_nTx = exch2_global_Nx/tNx                jGjLoc = 1
339                ENDIF
340              ENDIF
341  #endif /* ALLOW_EXCH2 */  #endif /* ALLOW_EXCH2 */
342             DO k=1,nNz  
343              IF (globalFile) THEN
344    C--- Case of 1 Global file:
345    
346               DO k=kLo,kHi
347              DO j=1,tNy              DO j=1,tNy
348               IF (globalFile) THEN               irec = 1 + ( tBx + (j-1)*iGjLoc )/tNx
349  #ifdef ALLOW_EXCH2       &                + ( tBy + (j-1)*jGjLoc )*global_nTx
350                irec = 1 + ( tGx-1 + (j-1)*iGjLoc )/tNx       &            +( k-kLo + (irecord-1)*nNz )*global_nTx*ySize
      &                 + ( tGy-1 + (j-1)*jGjLoc )*global_nTx  
      &                 + ( k-kLo + (irecord-1)*nNz  
      &                   )*ySize*global_nTx  
 #else /* ALLOW_EXCH2 */  
               iG = myXGlobalLo-1 + (bi-1)*sNx  
               jG = myYGlobalLo-1 + (bj-1)*sNy  
               irec= 1 + INT(iG/sNx) + nSx*nPx*(jG+j-1)  
      &                + nSx*nPx*Ny*(k-kLo)  
      &                + nSx*nPx*Ny*nNz*(irecord-1)  
 #endif /* ALLOW_EXCH2 */  
              ELSE  
               irec=j + sNy*(k-kLo) + sNy*nNz*(irecord-1)  
              ENDIF  
351               IF (filePrec .EQ. precFloat32) THEN               IF (filePrec .EQ. precFloat32) THEN
352                IF (arrType .EQ. 'RS') THEN                IF (arrType .EQ. 'RS') THEN
353                 CALL MDS_SEG4toRS( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )                 CALL MDS_SEG4toRS( j,bi,bj,k,kSize, r4seg,.FALSE.,arr )
# Line 409  C End of j loop Line 388  C End of j loop
388              ENDDO              ENDDO
389  C End of k loop  C End of k loop
390             ENDDO             ENDDO
391    
392            ELSE            ELSE
393  C fileIsOpen=F  C--- Case of 1 file per tile (globalFile=F):
394             WRITE(msgBuf,'(A)')  
395       &       ' MDS_WRITE_FIELD: I should never get to this point'  C If we are writing to a tiled MDS file then we open each one here
396             CALL PRINT_ERROR( msgBuf, myThid )             iG=bi+(myXGlobalLo-1)/sNx
397             STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'             jG=bj+(myYGlobalLo-1)/sNy
398            ENDIF             WRITE(dataFName,'(2A,I3.3,A,I3.3,A)')
399  C If we were writing to a tiled MDS file then we close it here       &              pfName(1:pIL),'.',iG,'.',jG,'.data'
400            IF (fileIsOpen .AND. (.NOT. globalFile)) THEN             length_of_rec = MDS_RECLEN( filePrec, sNx*sNy, myThid )
401             CLOSE( dUnit )             IF (irecord .EQ. 1) THEN
402             fileIsOpen = .FALSE.              OPEN( dUnit, file=dataFName, status=_NEW_STATUS,
403         &            access='direct', recl=length_of_rec )
404               ELSE
405                OPEN( dUnit, file=dataFName, status=_OLD_STATUS,
406         &            access='direct', recl=length_of_rec )
407               ENDIF
408               fileIsOpen=.TRUE.
409    
410               DO k=kLo,kHi
411    
412                 irec = 1 + k-kLo + (irecord-1)*nNz
413                 IF (filePrec .EQ. precFloat32) THEN
414                  IF ( arrType.EQ.'RS' ) THEN
415                   CALL MDS_PASS_R4toRS( r4loc, arr,
416         I                           k, kSize, bi,bj,.FALSE., myThid )
417                  ELSEIF ( arrType.EQ.'RL' ) THEN
418                   CALL MDS_PASS_R4toRL( r4loc, arr,
419         I                           k, kSize, bi,bj,.FALSE., myThid )
420                  ELSE
421                   WRITE(msgBuf,'(A)')
422         &           ' MDS_WRITE_FIELD: illegal value for arrType'
423                   CALL PRINT_ERROR( msgBuf, myThid )
424                   STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
425                  ENDIF
426    #ifdef _BYTESWAPIO
427                  CALL MDS_BYTESWAPR4( sNx*sNy, r4loc )
428    #endif
429                  WRITE(dUnit,rec=irec) r4loc
430                 ELSEIF (filePrec .EQ. precFloat64) THEN
431                  IF ( arrType.EQ.'RS' ) THEN
432                   CALL MDS_PASS_R8toRS( r8loc, arr,
433         I                           k, kSize, bi,bj,.FALSE., myThid )
434                  ELSEIF ( arrType.EQ.'RL' ) THEN
435                   CALL MDS_PASS_R8toRL( r8loc, arr,
436         I                           k, kSize, bi,bj,.FALSE., myThid )
437                  ELSE
438                   WRITE(msgBuf,'(A)')
439         &           ' MDS_WRITE_FIELD: illegal value for arrType'
440                   CALL PRINT_ERROR( msgBuf, myThid )
441                   STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
442                  ENDIF
443    #ifdef _BYTESWAPIO
444                  CALL MDS_BYTESWAPR8( sNx*sNy, r8loc )
445    #endif
446                  WRITE(dUnit,rec=irec) r8loc
447                 ELSE
448                  WRITE(msgBuf,'(A)')
449         &          ' MDS_WRITE_FIELD: illegal value for filePrec'
450                  CALL PRINT_ERROR( msgBuf, myThid )
451                  STOP 'ABNORMAL END: S/R MDS_WRITE_FIELD'
452                 ENDIF
453    
454    C End of k loop
455               ENDDO
456    
457    C here We close the tiled MDS file
458               IF ( fileIsOpen ) THEN
459                CLOSE( dUnit )
460                fileIsOpen = .FALSE.
461               ENDIF
462    
463    C--- End Global File / tile-file cases
464            ENDIF            ENDIF
465    
466  C Create meta-file for each tile if we are tiling  C Create meta-file for each tile if we are tiling
467            IF ( .NOT.globalFile .AND. writeMetaF ) THEN            IF ( .NOT.globalFile .AND. writeMetaF ) THEN
468             iG=bi+(myXGlobalLo-1)/sNx             iG=bi+(myXGlobalLo-1)/sNx
469             jG=bj+(myYGlobalLo-1)/sNy             jG=bj+(myYGlobalLo-1)/sNy
470             WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')             WRITE(metaFname,'(2A,I3.3,A,I3.3,A)')
471       &              pfName(1:pIL),'.',iG,'.',jG,'.meta'       &              pfName(1:pIL),'.',iG,'.',jG,'.meta'
 #if defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO)  
            tN = W2_myTileList(bi)  
472             dimList(1,1) = xSize             dimList(1,1) = xSize
473             dimList(2,1) = exch2_txGlobalo(tN)             dimList(2,1) = tBx + 1
474             dimList(3,1) = exch2_txGlobalo(tN)+sNx-1             dimList(3,1) = tBx + tNx
475             dimList(1,2) = ySize             dimList(1,2) = ySize
476             dimList(2,2) = exch2_tyGlobalo(tN)             dimList(2,2) = tBy + 1
477             dimList(3,2) = exch2_tyGlobalo(tN)+sNy-1             dimList(3,2) = tBy + tNy
 #else /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  
 C- jmc: if MISSING_TILE_IO, keep meta files unchanged  
 C       to stay consistent with global file structure  
            dimList(1,1) = Nx  
            dimList(2,1) = myXGlobalLo+(bi-1)*sNx  
            dimList(3,1) = myXGlobalLo+bi*sNx-1  
            dimList(1,2) = Ny  
            dimList(2,2) = myYGlobalLo+(bj-1)*sNy  
            dimList(3,2) = myYGlobalLo+bj*sNy-1  
 #endif /* defined(ALLOW_EXCH2) && !defined(MISSING_TILE_IO) */  
478             dimList(1,3) = nNz             dimList(1,3) = nNz
479             dimList(2,3) = 1             dimList(2,3) = 1
480             dimList(3,3) = nNz             dimList(3,3) = nNz
481    c          dimList(1,3) = kSize
482    c          dimList(2,3) = kLo
483    c          dimList(3,3) = kHi
484             nDims = 3             nDims = 3
485             IF ( nNz.EQ.1 ) nDims = 2             IF ( nNz.EQ.1 ) nDims = 2
486             map2gl(1) = iGjLoc             map2gl(1) = iGjLoc
# Line 457  C       to stay consistent with global f Line 490  C       to stay consistent with global f
490       I              filePrec, nDims,dimList,map2gl, 0,  ' ',       I              filePrec, nDims,dimList,map2gl, 0,  ' ',
491       I              0, UNSET_RL, irecord, myIter, myThid )       I              0, UNSET_RL, irecord, myIter, myThid )
492            ENDIF            ENDIF
493    
494  C End of bi,bj loops  C End of bi,bj loops
495           ENDDO           ENDDO
496          ENDDO          ENDDO
# Line 486  C Create meta-file for the global-file ( Line 520  C Create meta-file for the global-file (
520           dimList(1,3) = nNz           dimList(1,3) = nNz
521           dimList(2,3) = 1           dimList(2,3) = 1
522           dimList(3,3) = nNz           dimList(3,3) = nNz
523    c        dimList(1,3) = kSize
524    c        dimList(2,3) = kLo
525    c        dimList(3,3) = kHi
526           nDims = 3           nDims = 3
527           IF ( nNz.EQ.1 ) nDims = 2           IF ( nNz.EQ.1 ) nDims = 2
528           map2gl(1) = 0           map2gl(1) = 0

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.10

  ViewVC Help
Powered by ViewVC 1.1.22