/[MITgcm]/MITgcm/pkg/mnc/mnc_dim.F
ViewVC logotype

Diff of /MITgcm/pkg/mnc/mnc_dim.F

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

revision 1.3 by edhill, Sun Jan 25 00:22:57 2004 UTC revision 1.16 by mlosch, Thu May 22 12:21:19 2008 UTC
# Line 3  C $Name$ Line 3  C $Name$
3                
4  #include "MNC_OPTIONS.h"  #include "MNC_OPTIONS.h"
5                
6  C==================================================================  C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7    CBOP 0
8    C     !ROUTINE: MNC_DIM_INIT
9    
10    C     !INTERFACE:
11        SUBROUTINE MNC_DIM_INIT(        SUBROUTINE MNC_DIM_INIT(
      I     myThid,  
12       I     fname,       I     fname,
13       I     dname,       I     dname,
14       I     dlen )       I     dlen,
15         I     myThid )
16    
17    C     !DESCRIPTION:
18    C     Create a dimension within the MNC look-up tables.
19    
20  C     Arguments  C     !INPUT PARAMETERS:
21        integer myThid, dlen        integer myThid, dlen
22        character*(*) fname, dname        character*(*) fname, dname
23    CEOP
24    
25        CALL MNC_DIM_INIT_ALL(myThid, fname, dname, dlen, 'Y')        CALL MNC_DIM_INIT_ALL(fname, dname, dlen, 'Y', myThid)
26    
27        RETURN        RETURN
28        END        END
29    
30    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
31    CBOP 1
32    C     !ROUTINE: MNC_DIM_INIT_ALL
33    
34  C==================================================================  C     !INTERFACE:
   
35        SUBROUTINE MNC_DIM_INIT_ALL(        SUBROUTINE MNC_DIM_INIT_ALL(
      I     myThid,  
36       I     fname,       I     fname,
37       I     dname,       I     dname,
38       I     dlen,       I     dlen,
39       I     doWrite )       I     doWrite,
40         I     myThid )
41    
42    C     !DESCRIPTION:
43    C     Create a dimension within the MNC look-up tables.
44    
45    C     !USES:
46          implicit none
47    
48    C     !INPUT PARAMETERS:
49          integer myThid, dlen
50          character*(*) fname, dname
51          character*(1) doWrite
52    CEOP
53    
54          CALL MNC_DIM_INIT_ALL_CV(fname,dname,dlen,doWrite,-1,-1,myThid)
55          
56          RETURN
57          END
58    
59    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
60    CBOP 1
61    C     !ROUTINE: MNC_DIM_INIT_ALL_CV
62    
63    C     !INTERFACE:
64          SUBROUTINE MNC_DIM_INIT_ALL_CV(
65         I     fname,
66         I     dname,
67         I     dlen,
68         I     doWrite,
69         I     bi,bj,
70         I     myThid )
71    
72    C     !DESCRIPTION:
73    C     Create a dimension within the MNC look-up tables.
74    
75    C     !USES:
76        implicit none        implicit none
77  #include "netcdf.inc"  #include "netcdf.inc"
78  #include "mnc_common.h"  #include "MNC_COMMON.h"
79  #include "EEPARAMS.h"  #include "EEPARAMS.h"
80    
81  C     Arguments  C     !INPUT PARAMETERS:
82        integer myThid, dlen        integer myThid, dlen, bi,bj
83        character*(*) fname, dname        character*(*) fname, dname
84        character*(1) doWrite        character*(1) doWrite
85    CEOP
86    
87    C     !LOCAL VARIABLES:
88          integer i,j, indf,indd, n,nf, dnf,dnl
89          integer ntmp, idd, err, tlen
90          character*(MAX_LEN_MBUF) msgbuf
91    
92  C     Functions  C     Functions
93        integer ILNBLNK, IFNBLNK        integer ILNBLNK, IFNBLNK
94    
 C     Local Variables  
       integer i,j, indf,indd, n,nf, dnf,dnl, ntmp, idd, err, tlen  
       character*(MAX_LEN_MBUF) msgbuf  
   
95        nf = ILNBLNK(fname)        nf = ILNBLNK(fname)
96    
97        dnf = IFNBLNK(dname)        dnf = IFNBLNK(dname)
98        dnl = ILNBLNK(dname)        dnl = ILNBLNK(dname)
99    
100  C     Verify that the file exists  C     Verify that the file exists
101        CALL MNC_GET_IND(myThid, MNC_MAX_ID, fname, mnc_f_names, indf)        CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, indf, myThid)
102        IF ( indf .LT. 1 ) THEN        IF ( indf .LT. 1 ) THEN
103          write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname(1:nf),          write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname(1:nf),
104       &       ''' does not exist'       &       ''' does not exist'
# Line 64  C     Verify that the file exists Line 109  C     Verify that the file exists
109  C     Verify that the dim is not currently defined within the file  C     Verify that the dim is not currently defined within the file
110        n = mnc_f_alld(indf,1)        n = mnc_f_alld(indf,1)
111        DO i = 1,n        DO i = 1,n
         ntmp = ILNBLNK(mnc_d_names(j))  
112          j = mnc_f_alld(indf,i+1)          j = mnc_f_alld(indf,i+1)
113            ntmp = ILNBLNK(mnc_d_names(j))
114          IF ((ntmp .EQ. (dnl-dnf+1))          IF ((ntmp .EQ. (dnl-dnf+1))
115       &       .AND. (dname(dnf:dnl) .EQ. mnc_d_names(j)(1:n))) THEN       &       .AND. (dname(dnf:dnl) .EQ. mnc_d_names(j)(1:ntmp))) THEN
116            write(msgbuf,'(5a)') 'MNC ERROR: dimension ''',            IF (mnc_d_size(j) .NE. dlen) THEN
117       &         dname(dnf:dnl),              IF ((mnc_d_size(j) .GT. 0) .OR. (dlen .GT. 0)) THEN
118       &         ''' already exists within file ''', fname(1:nf),                write(msgbuf,'(5a)') 'MNC ERROR: dimension ''',
119       &         ''' and cannot be re-initalized'       &             dname(dnf:dnl), ''' already exists within file ''',
120            CALL print_error( msgbuf, mythid )       &             fname(1:nf), ''' and its size cannot be changed'
121            stop 'ABNORMAL END: S/R MNC_DIM_INIT'                CALL print_error(msgbuf, mythid)
122                  stop 'ABNORMAL END: S/R MNC_DIM_INIT'
123                ELSE
124    C             Its OK, the names are the same and both are specifying the
125    C             unlimited dimension
126                  RETURN
127                ENDIF
128              ELSE
129    C           Its OK, the names and sizes are identical
130                RETURN
131              ENDIF
132          ENDIF          ENDIF
133        ENDDO        ENDDO
134    
135        CALL MNC_GET_NEXT_EMPTY_IND(myThid, MNC_MAX_ID, mnc_d_names, indd)        CALL MNC_GET_NEXT_EMPTY_IND(MNC_MAX_ID, mnc_d_names,
136         &     'mnc_d_names', indd, myThid)
137    
138  C     Create the dim within the file  C     Create the dim within the file
139        IF (doWrite(1:1) .EQ. 'Y') THEN        IF (doWrite(1:1) .EQ. 'Y') THEN
# Line 85  C     Create the dim within the file Line 141  C     Create the dim within the file
141          tlen = dlen          tlen = dlen
142          IF (dlen .LT. 1)  tlen = NF_UNLIMITED          IF (dlen .LT. 1)  tlen = NF_UNLIMITED
143    
144          CALL MNC_FILE_REDEF(myThid, fname)          CALL MNC_FILE_REDEF(fname, myThid)
145          err = NF_DEF_DIM(mnc_f_info(indf,2), dname(dnf:dnl), tlen, idd)          err = NF_DEF_DIM(mnc_f_info(indf,2), dname(dnf:dnl), tlen, idd)
146          write(msgbuf,'(5a)') 'MNC_DIM_INIT ERROR: cannot create ',          write(msgbuf,'(5a)') 'MNC_DIM_INIT ERROR: cannot create ',
147       &       'dim ''', dname(dnf:dnl), ''' in file ''', fname(1:nf)       &       'dim ''', dname(dnf:dnl), ''' in file ''', fname(1:nf)
148          CALL MNC_HANDLE_ERR(myThid, err, msgbuf)          CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
149    
150    C       Create and write the associated CF-convention
151    C       coordinate variable
152            IF (bi .GT. -1) THEN
153              CALL MNC_CW_WRITE_CVAR(fname, dname(dnf:dnl),
154         &         mnc_f_info(indf,2), idd, bi, bj, myThid)
155            ENDIF
156    
157        ENDIF        ENDIF
158    
# Line 103  C     Add to tables Line 166  C     Add to tables
166        RETURN        RETURN
167        END        END
168    
169    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
170    CBOP 1
171    C     !ROUTINE: MNC_DIM_UNLIM_SIZE
172    
173    C     !INTERFACE:
174          SUBROUTINE MNC_DIM_UNLIM_SIZE(
175         I     fname,
176         I     unlim_sz,
177         I     myThid )
178    
179    C     !DESCRIPTION:
180    C     Get the size of the unlimited dimension.
181          
182    C     !USES:
183          implicit none
184    #include "netcdf.inc"
185    #include "MNC_COMMON.h"
186    #include "EEPARAMS.h"
187    
188    C     !INPUT PARAMETERS:
189          integer myThid, unlim_sz
190          character*(*) fname
191    CEOP
192    
193    C     !LOCAL VARIABLES:
194          integer i,j, nf, indf, fid, unlimid, err
195          character*(MAX_LEN_MBUF) msgbuf
196    
197    C     Functions
198          integer ILNBLNK
199    
200          nf = ILNBLNK(fname)
201    
202    C     Verify that the file exists
203          CALL MNC_GET_IND(MNC_MAX_FID, fname, mnc_f_names, indf, myThid)
204          IF (indf .LT. 1) THEN
205            write(msgbuf,'(3a)') 'MNC ERROR: file ''', fname(1:nf),
206         &       ''' does not exist'
207            CALL print_error(msgbuf, mythid)
208            stop 'ABNORMAL END: S/R MNC_DIM_UNLIM_SIZE'
209          ENDIF
210          fid = mnc_f_info(indf,2)
211    
212    C     Find the unlimited dim and its current size
213          unlim_sz = -1
214          DO i = 1,mnc_f_alld(indf,1)
215            j = mnc_f_alld(indf,i+1)
216            IF (mnc_d_size(j) .EQ. -1) THEN
217              unlimid = mnc_d_ids(j)
218              err = NF_INQ_DIMLEN(fid, unlimid, unlim_sz)
219              write(msgbuf,'(3a)') 'MNC_DIM_UNLIM_SIZE ERROR: cannot ',
220         &         'determine unlimited dim size in file ''', fname(1:nf)
221              CALL MNC_HANDLE_ERR(err, msgbuf, myThid)
222              RETURN
223            ENDIF
224          ENDDO
225    
226          RETURN
227          END
228    
229    
230    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
231    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.22