/[MITgcm]/MITgcm/eesupp/src/nml_change_syntax.F
ViewVC logotype

Contents of /MITgcm/eesupp/src/nml_change_syntax.F

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


Revision 1.2 - (show annotations) (download)
Sun Dec 26 02:59:37 2010 UTC (13 years, 4 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63k, checkpoint63d, checkpoint63e, checkpoint63f, checkpoint63g, checkpoint63a, checkpoint63b, checkpoint63c, checkpoint64, checkpoint65, checkpoint63, checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65b, checkpoint65c, checkpoint65a, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, checkpoint62s, checkpoint62r, checkpoint62q, checkpoint62w, checkpoint62v, checkpoint62u, checkpoint62t, checkpoint62z, checkpoint62y, checkpoint62x, HEAD
Changes since 1.1: +9 -9 lines
avoid warnings from xmakedepend

1 C $Header: /u/gcmpack/MITgcm/eesupp/src/nml_change_syntax.F,v 1.1 2010/12/13 04:21:52 jmc Exp $
2 C $Name: $
3
4 #include "CPP_EEOPTIONS.h"
5
6 CBOP
7 C !ROUTINE: NML_CHANGE_SYNTAX
8
9 C !INTERFACE:
10 SUBROUTINE NML_CHANGE_SYNTAX(
11 U record,
12 I data_file, myThid )
13 C !DESCRIPTION:
14 C *=================================================================*
15 C | SUBROUTINE NML\_CHANGE\_SYNTAX
16 C | o Apply changes to namelist to fit compiler requirement
17 C *=================================================================*
18 C | Change trailing \& to trailing / when needed
19 C | Change array specification from F95 standard
20 C | to commonly accepted F77 form (extented F77)
21 C *=================================================================*
22
23 C !USES:
24 IMPLICIT NONE
25
26 C == Global variables ==
27 #include "EEPARAMS.h"
28
29 C !FUNCTIONS:
30 INTEGER ILNBLNK
31 EXTERNAL ILNBLNK
32 #ifdef NML_EXTENDED_F77
33 INTEGER IFNBLNK
34 EXTERNAL IFNBLNK
35 #endif /* NML_EXTENDED_F77 */
36
37 C !INPUT/OUTPUT PARAMETERS:
38 C == Routine arguments ==
39 C record :: current line record (from parameter file) to process
40 C data_file :: current parameter file which contains the current record
41 C myThid :: my Thread Id number
42 CHARACTER*(MAX_LEN_PREC) record
43 CHARACTER*(*) data_file
44 INTEGER myThid
45
46 C !LOCAL VARIABLES:
47 C == Local variables ==
48 INTEGER il
49 CHARACTER*(2) nmlEnd
50 #ifdef NML_TERMINATOR
51 PARAMETER( nmlEnd = ' /' )
52 #else
53 PARAMETER( nmlEnd = ' &' )
54 #endif
55
56 #ifdef NML_EXTENDED_F77
57 C i0 :: position of active "=" (end of variable name definition)
58 C i1 :: position of 1rst left parenthesis
59 C i2 :: position of 1rst colon
60 C i3 :: position of 1rst comma after the 1rst colon
61 C i4 :: position of right parenthesis after the 1rst left one
62 C nWd :: number of words following "=" found in this reccord
63 C msgBuf :: Informational/error message buffer
64 INTEGER i0, i1, i2, i3, i4
65 INTEGER nWd, is, ie, iUnit
66 INTEGER i, n, ii
67 c INTEGER iLf
68 LOGICAL sngQ, dblQ, comma
69 LOGICAL hasNum1, hasNum2
70 LOGICAL debugPrt
71 CHARACTER*(MAX_LEN_MBUF) msgBuf
72 #endif /* NML_EXTENDED_F77 */
73 CEOP
74
75 il = MAX(ILNBLNK(record),1)
76 IF ( il .EQ. 2 ) THEN
77 IF ( record(1:2) .EQ. ' &' ) THEN
78 record(1:2) = nmlEnd
79 ENDIF
80 ENDIF
81
82 #ifdef NML_EXTENDED_F77
83 debugPrt = .FALSE.
84 c iLf = MAX(ILNBLNK(data_file),1)
85 iUnit = errorMessageUnit
86 i0 = 0
87 i1 = 0
88 i2 = 0
89 i3 = 0
90 i4 = 0
91 C-- search for end of variable spec ('=' char) and count words that follow
92 nWd = 0
93 sngQ = .TRUE.
94 dblQ = .TRUE.
95 comma = .FALSE.
96 DO i=1,il
97 IF ( record(i:i).EQ."'" .AND. dblQ ) THEN
98 sngQ = .NOT.sngQ
99 IF ( i0.GE.1 .AND. sngQ ) nWd = nWd + 1
100 ENDIF
101 IF ( record(i:i).EQ.'"' .AND. sngQ ) THEN
102 dblQ = .NOT.dblQ
103 IF ( i0.GE.1 .AND. dblQ ) nWd = nWd + 1
104 ENDIF
105 IF ( record(i:i).EQ.'=' .AND. i0.EQ.0
106 & .AND. sngQ .AND. dblQ ) i0 = i
107 ENDDO
108 C-- find position of 1rst set of parenthesis, comma and colon
109 DO i=1,i0
110 IF ( record(i:i).EQ.'(' .AND. i1.EQ.0 ) i1 = -i
111 IF ( record(i:i).EQ.':' .AND. i1.LT.0 ) THEN
112 IF ( i2.EQ.0 ) i2 = i
113 IF ( comma ) THEN
114 WRITE(msgBuf,'(2A)') 'NML_CHANGE_SYNTAX: warning: ',
115 & 'no possible safe conversion of rec:'
116 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
117 WRITE(iUnit,'(A)') record(1:il)
118 WRITE(msgBuf,'(4A)') 'NML_CHANGE_SYNTAX: ',
119 & 'from file="', data_file, '".'
120 c & 'from file="', data_file(1:iLf), '".'
121 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
122 i1 = 1
123 ENDIF
124 ENDIF
125 IF ( record(i:i).EQ.',' .AND. i1.LT.0 ) THEN
126 comma = .TRUE.
127 IF ( i3.EQ.0 .AND. i2.GE.1 ) i3 = i
128 ENDIF
129 IF ( record(i:i).EQ.')' .AND. i1.LT.0 ) THEN
130 i1 = -i1
131 i4 = i
132 ENDIF
133 ENDDO
134 IF ( debugPrt .AND. i0.GE.1 ) THEN
135 c WRITE(iUnit,'(5A)') ' ', data_file(1:iLf),
136 c & ' , rec >', record(1:i0), '<'
137 WRITE(iUnit,'(5A)') ' ',data_file,' , rec >',record(1:i0),'<'
138 WRITE(iUnit,'(A,2I4,L5,A,4I4)')
139 & ' i0,nWd,comma =',i0,nWd,comma,' ; i1,i2,i3,i4 =',i1,i2,i3,i4
140 ENDIF
141 IF ( i4.EQ.0 .AND. i1.NE.0 ) THEN
142 i2 = 0
143 IF ( i1.NE.1 ) THEN
144 WRITE(msgBuf,'(2A)') 'NML_CHANGE_SYNTAX: ',
145 & 'error in parsing record:'
146 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
147 WRITE(iUnit,'(A)') record(1:il)
148 WRITE(msgBuf,'(4A)') 'NML_CHANGE_SYNTAX: ',
149 & 'from file="', data_file, '".'
150 c & 'from file="', data_file(1:iLf), '".'
151 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
152 ENDIF
153 ENDIF
154 C-- Only try conversion if colon found within 1rst pair of parenthesis
155 IF ( i2.NE.0 ) THEN
156 C check for index value between i1 and i2
157 IF ( i2.GT.i1+1 ) THEN
158 is = IFNBLNK(record(i1+1:i2-1))
159 ie = ILNBLNK(record(i1+1:i2-1))
160 i = i1+is
161 IF ( record(i:i).EQ.'-' .OR. record(i:i).EQ.'+' ) is = is+1
162 hasNum1 = ( is.GE.1 .AND. is.LE.ie )
163 IF ( hasNum1 ) THEN
164 DO i=i1+is,i1+ie
165 n = ICHAR(record(i:i))
166 IF ( n.LT.ICHAR('0') .OR. n.GT.ICHAR('9') ) hasNum1 = .FALSE.
167 ENDDO
168 ENDIF
169 ELSE
170 hasNum1 = .FALSE.
171 ENDIF
172 C check for index value after i2 (and before i3 or i4)
173 ii = i4
174 IF ( i3.NE.0 ) ii = i3
175 IF ( ii.GT.i2+1 ) THEN
176 is = IFNBLNK(record(i2+1:ii-1))
177 ie = ILNBLNK(record(i2+1:ii-1))
178 i = i2+is
179 IF ( record(i:i).EQ.'-' .OR. record(i:i).EQ.'+' ) is = is+1
180 hasNum2 = ( is.GE.1 .AND. is.LE.ie )
181 IF ( hasNum2 ) THEN
182 DO i=i2+is,i2+ie
183 n = ICHAR(record(i:i))
184 IF ( n.LT.ICHAR('0') .OR. n.GT.ICHAR('9') ) hasNum2 = .FALSE.
185 ENDDO
186 ENDIF
187 ELSE
188 hasNum2 = .FALSE.
189 ENDIF
190 IF ( i3.NE.0 ) THEN
191 C-- Colon applies to 1rst index of multidim array (found comma after colon)
192 C Note: safe case which cannot be confused with sub-string colon
193 IF ( hasNum1 .AND. hasNum2 ) THEN
194 IF ( debugPrt ) WRITE(iUnit,'(3A)')
195 & 'remove: "',record(i2:i3-1),'"'
196 DO i=i2,i3-1
197 record(i:i) = ' '
198 ENDDO
199 ELSE
200 WRITE(msgBuf,'(2A)') 'NML_CHANGE_SYNTAX: ',
201 & 'invalid indices for array conversion in:'
202 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
203 WRITE(iUnit,'(A)') record(1:il)
204 WRITE(msgBuf,'(4A)') 'NML_CHANGE_SYNTAX: ',
205 & 'from file="', data_file, '".'
206 c & 'from file="', data_file(1:iLf), '".'
207 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
208 ENDIF
209 ENDIF
210 IF ( i3.EQ.0 .AND. nWd.NE.1 ) THEN
211 C-- Colon applies to index of vector (single-dim array):
212 C discard the case where colon defines sub-string of character-string variable
213 C by assuming that in this case 1 and only 1 word follows the equal sign
214 IF ( hasNum1 .AND. hasNum2 ) THEN
215 IF ( debugPrt ) WRITE(iUnit,'(3A)')
216 & 'remove: "',record(i2:i4-1),'"'
217 DO i=i2,i4-1
218 record(i:i) = ' '
219 ENDDO
220 ELSE
221 WRITE(msgBuf,'(2A)') 'NML_CHANGE_SYNTAX: ',
222 & 'invalid indices for vector conversion in:'
223 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
224 WRITE(iUnit,'(A)') record(1:il)
225 WRITE(msgBuf,'(4A)') 'NML_CHANGE_SYNTAX: ',
226 & 'from file="', data_file, '".'
227 c & 'from file="', data_file(1:iLf), '".'
228 CALL PRINT_MESSAGE( msgBuf, iUnit, SQUEEZE_RIGHT, myThid )
229 ENDIF
230 ENDIF
231 C-----
232 ENDIF
233 #endif /* NML_EXTENDED_F77 */
234
235 RETURN
236 END

  ViewVC Help
Powered by ViewVC 1.1.22