/[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.2 by edhill, Sat Jan 17 13:55:49 2004 UTC revision 1.15 by edhill, Fri Mar 10 22:01:53 2006 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     dunits,       I     dlen,
15       I     dlen )       I     myThid )
16    
17    C     !DESCRIPTION:
18    C     Create a dimension within the MNC look-up tables.
19    
20    C     !INPUT PARAMETERS:
21          integer myThid, dlen
22          character*(*) fname, dname
23    CEOP
24    
25          CALL MNC_DIM_INIT_ALL(fname, dname, dlen, 'Y', myThid)
26    
27          RETURN
28          END
29    
30    C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
31    CBOP 1
32    C     !ROUTINE: MNC_DIM_INIT_ALL
33    
34    C     !INTERFACE:
35          SUBROUTINE MNC_DIM_INIT_ALL(
36         I     fname,
37         I     dname,
38         I     dlen,
39         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        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
77    #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        integer myThid, dlen, bi,bj
83        character*(*) fname, dname, dunits        character*(*) fname, dname
84        integer dlen        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        integer ILNBLNK, IFNBLNK
   
 C     Local Variables  
       integer i,j, indf,indd, n,nf,ndn,ndu  
       character*(MAX_LEN_MBUF) msgbuf  
94    
95        nf = ILNBLNK(fname)        nf = ILNBLNK(fname)
96        ndn = ILNBLNK(dname)  
97        ndu = ILNBLNK(dunits)        dnf = IFNBLNK(dname)
98          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 45  C     Verify that the dim is not current Line 110  C     Verify that the dim is not current
110        n = mnc_f_alld(indf,1)        n = mnc_f_alld(indf,1)
111        DO i = 1,n        DO i = 1,n
112          j = mnc_f_alld(indf,i+1)          j = mnc_f_alld(indf,i+1)
113          IF (dname(1:ndn) .EQ. mnc_d_names(j)(1:ndn)) THEN          ntmp = ILNBLNK(mnc_d_names(j))
114            write(msgbuf,'(5a)') 'MNC ERROR: dimension ''', dname(1:ndn),          IF ((ntmp .EQ. (dnl-dnf+1))
115       &         ''' already exists within file ''', fname(1:nf),       &       .AND. (dname(dnf:dnl) .EQ. mnc_d_names(j)(1:ntmp))) THEN
116       &         ''' and cannot be re-initalized'            IF (mnc_d_size(j) .NE. dlen) THEN
117            CALL print_error( msgbuf, mythid )              IF ((mnc_d_size(j) .GT. 0) .OR. (dlen .GT. 0)) THEN
118            stop 'ABNORMAL END: S/R MNC_DIM_INIT'                write(msgbuf,'(5a)') 'MNC ERROR: dimension ''',
119         &             dname(dnf:dnl), ''' already exists within file ''',
120         &             fname(1:nf), ''' and its size cannot be changed'
121                  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
139          IF (doWrite(1:1) .EQ. 'Y') THEN
140    
141            tlen = dlen
142            IF (dlen .LT. 1)  tlen = NF_UNLIMITED
143    
144            CALL MNC_FILE_REDEF(fname, myThid)
145            err = NF_DEF_DIM(mnc_f_info(indf,2), dname(dnf:dnl), tlen, idd)
146            write(msgbuf,'(5a)') 'MNC_DIM_INIT ERROR: cannot create ',
147         &       'dim ''', dname(dnf:dnl), ''' in file ''', fname(1:nf)
148            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    
 C     Check that the dimension name fits in the table  
       IF ( ndn .GT. MNC_MAX_CHAR) THEN  
         ndn = MNC_MAX_CHAR  
         write(msgbuf,'(a)') 'MNC WARNING: dimension name too long'  
         CALL print_error(msgbuf, mythid)  
       ENDIF  
       IF ( ndu .GT. MNC_MAX_CHAR) THEN  
         ndu = MNC_MAX_CHAR  
         write(msgbuf,'(a)') 'MNC WARNING: dimension units too long'  
         CALL print_error(msgbuf, mythid)  
157        ENDIF        ENDIF
158    
159  C     Add to tables  C     Add to tables
160        mnc_d_names(indd)(1:ndn) = dname(1:ndn)        mnc_d_names(indd)(1:(dnl-dnf+1)) = dname(dnf:dnl)
       mnc_d_units(indd)(1:ndu) = dunits(1:ndu)  
161        mnc_d_size(indd) = dlen        mnc_d_size(indd) = dlen
162          mnc_d_ids(indd) = idd
163        mnc_f_alld(indf,1) = n + 1        mnc_f_alld(indf,1) = n + 1
164        mnc_f_alld(indf,n+2) = indd        mnc_f_alld(indf,n+2) = indd
165    
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.2  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.22