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

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

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


Revision 1.14 - (show annotations) (download)
Thu Nov 13 14:40:14 2003 UTC (20 years, 6 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint52l_pre, hrcube4, hrcube5, checkpoint52d_pre, checkpoint52j_pre, checkpoint52l_post, checkpoint52k_post, checkpoint52f_post, checkpoint52i_pre, hrcube_1, hrcube_2, hrcube_3, checkpoint52e_pre, checkpoint52e_post, checkpoint52b_pre, checkpoint52b_post, checkpoint52c_post, checkpoint52f_pre, checkpoint52d_post, checkpoint52i_post, checkpoint52h_pre, checkpoint52j_post, branch-netcdf, checkpoint52a_post
Branch point for: netcdf-sm0
Changes since 1.13: +3 -3 lines
o added missing header CPP_EEOPTIONS.h
o added TARGET_NEC_VECTOR
  (hurrikan.dkrz.de)

1 C $Header: /u/gcmpack/MITgcm/eesupp/src/utils.F,v 1.13 2003/11/11 20:38:26 edhill Exp $
2 C $Name: $
3
4 #include "CPP_EEOPTIONS.h"
5
6 C-- File utils.F: General purpose support routines
7 C-- Contents
8 C-- U DATE - Returns date and time.
9 C-- IFNBLNK - Returns index of first non-blank string character.
10 C-- ILNBLNK - Returns index of last non-blank string character.
11 C-- IO_ERRCOUNT - Reads IO error counter.
12 C-- LCASE - Translates to lower case.
13 C--UM MACHINE - Returns character string identifying computer.
14 C-- UCASE - Translates to upper case.
15 C-- Routines marked "M" contain specific machine dependent code.
16 C-- Routines marked "U" contain UNIX OS calls.
17
18 CBOP
19 C !ROUTINE: DATE
20
21 C !INTERFACE:
22 SUBROUTINE DATE ( string , myThreadId )
23 IMPLICIT NONE
24
25 C !DESCRIPTION:
26 C *==========================================================*
27 C | SUBROUTINE DATE |
28 C | o Return current date |
29 C *==========================================================*
30
31 C !USES:
32 #include "SIZE.h"
33 #include "EEPARAMS.h"
34
35 C !INPUT/OUTPUT PARAMETERS:
36 C string :: Date returned in string
37 C myThreadId :: My thread number
38 CHARACTER*(*) string
39 INTEGER myThreadId
40 C
41 C !LOCAL VARIABLES:
42 C lDate :: Length of date string
43 C msgBuffer :: Temp. for building error messages
44 INTEGER lDate
45 CHARACTER*(MAX_LEN_MBUF) msgBuffer
46 CEOP
47 C
48 lDate = 24
49 IF ( LEN(string) .LT. lDate ) GOTO 901
50 string = ' '
51 #ifdef HAVE_FDATE
52 CALL FDATE( string )
53 #endif
54 C
55 1000 CONTINUE
56 RETURN
57 901 CONTINUE
58 WRITE(msgBuffer,'(A)')
59 &' '
60 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
61 &SQUEEZE_RIGHT,myThreadId)
62 WRITE(msgBuffer,'(A)')
63 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
64 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
65 &SQUEEZE_RIGHT,myThreadId)
66 WRITE(msgBuffer,'(A)')
67 &'procedure: "DATE".'
68 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
69 &SQUEEZE_RIGHT,myThreadId)
70 WRITE(msgBuffer,'(A)')
71 &'Variable passed to S/R DATE is too small.'
72 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
73 &SQUEEZE_RIGHT,myThreadId)
74 WRITE(msgBuffer,'(A)')
75 &' Argument must be at least',lDate,'characters long.'
76 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
77 &SQUEEZE_RIGHT,myThreadId)
78 WRITE(msgBuffer,'(A)')
79 &'*******************************************************'
80 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
81 &SQUEEZE_RIGHT,myThreadId)
82 GOTO 1000
83 END
84
85 CBOP
86 C !ROUTINE: IFNBLNK
87
88 C !INTERFACE:
89 INTEGER FUNCTION IFNBLNK( string )
90 IMPLICIT NONE
91
92 C !DESCRIPTION:
93 C *==========================================================*
94 C | FUNCTION IFNBLNK |
95 C | o Find first non-blank in character string. |
96 C *==========================================================*
97 C
98 C !INPUT PARAMETERS:
99 C string :: String to find first non-blank in.
100 CHARACTER*(*) string
101
102 C !LOCAL VARIABLES:
103 C L, LS :: Temps for string locations
104 INTEGER L, LS
105 CEOP
106 C
107 LS = LEN(string)
108 IFNBLNK = 0
109 DO 10 L = 1, LS
110 IF ( string(L:L) .EQ. ' ' ) GOTO 10
111 IFNBLNK = L
112 GOTO 11
113 10 CONTINUE
114 11 CONTINUE
115 C
116 RETURN
117 END
118
119 CBOP
120 C !ROUTINE: ILNBLNK
121
122 C !INTERFACE:
123 INTEGER FUNCTION ILNBLNK( string )
124 IMPLICIT NONE
125
126 C !DESCRIPTION:
127 C *==========================================================*
128 C | FUNCTION ILNBLNK |
129 C | o Find last non-blank in character string. |
130 C *==========================================================*
131
132 C !INPUT PARAMETERS:
133 C string :: string to scan
134 CHARACTER*(*) string
135
136 C !LOCAL VARIABLES:
137 C L, LS :: Temps. used in scanning string
138 INTEGER L, LS
139 CEOP
140 C
141 LS = LEN(string)
142 c ILNBLNK = LS
143 ILNBLNK = 0
144 DO 10 L = LS, 1, -1
145 IF ( string(L:L) .EQ. ' ' ) GOTO 10
146 ILNBLNK = L
147 GOTO 11
148 10 CONTINUE
149 11 CONTINUE
150 C
151 RETURN
152 END
153
154 CBOP
155 C !ROUTINE: IO_ERRCOUNT
156
157 C !INTERFACE:
158 INTEGER FUNCTION IO_ERRCOUNT(myThid)
159 IMPLICIT NONE
160
161 C !DESCRIPTION:
162 C *==========================================================*
163 C | FUNCTION IO_ERRCOUNT |
164 C | o Reads IO error counter. |
165 C *==========================================================*
166
167 C !USES:
168 C == Global variables ==
169 #include "SIZE.h"
170 #include "EEPARAMS.h"
171
172 C !INPUT PARAMETERS:
173 C == Routine arguments ==
174 C myThid :: My thread number
175 INTEGER myThid
176
177 CEOP
178
179 IO_ERRCOUNT = ioErrorCount(myThid)
180
181 RETURN
182 END
183
184 CBOP
185
186 C !ROUTINE: LCASE
187
188 C !INTERFACE:
189 SUBROUTINE LCASE ( string )
190 IMPLICIT NONE
191
192 C !DESCRIPTION:
193 C *==========================================================*
194 C | SUBROUTINE LCASE |
195 C | o Convert character string to all lower case. |
196 C *==========================================================*
197
198 C !INPUT/OUTPUT PARAMETERS:
199 CHARACTER*(*) string
200
201 C !LOCALVARIABLES:
202 CHARACTER*26 LOWER
203 DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
204 SAVE LOWER
205 CHARACTER*26 UPPER
206 DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
207 SAVE UPPER
208 INTEGER I, L
209 CEOP
210
211 C
212 DO 10 I = 1, LEN(string)
213 L = INDEX(UPPER,string(I:I))
214 IF ( L .EQ. 0 ) GOTO 10
215 string(I:I) = LOWER(L:L)
216 10 CONTINUE
217 C
218 RETURN
219 END
220
221 CBOP
222 C !ROUTINE: MACHINE
223
224 C !INTERFACE:
225 SUBROUTINE MACHINE ( string )
226 IMPLICIT NONE
227
228 C !DESCRIPTION:
229 C *==========================================================*
230 C | SUBROUTINE MACHINE |
231 C | o Return computer identifier in string. |
232 C *==========================================================*
233
234 C !USES:
235 #include "SIZE.h"
236 #include "EEPARAMS.h"
237 INTEGER IFNBLNK
238 INTEGER ILNBLNK
239 EXTERNAL IFNBLNK
240 EXTERNAL ILNBLNK
241
242 C !OUTPUT PARAMETERS:
243 C string :: Machine identifier
244 CHARACTER*(*) string
245
246 C !LOCAL VARIABLES:
247 C iFirst, iLast, :: String indexing temps.
248 C iEnd, iFree, idSize
249 C strTmp, idString :: Temps. for strings.
250 INTEGER iFirst
251 INTEGER iLast
252 INTEGER iEnd
253 INTEGER iFree
254 INTEGER idSize
255 CHARACTER*1024 strTmp
256 CHARACTER*1024 idString
257 CEOP
258
259 strTmp = 'UNKNOWN'
260 iFree = 1
261 idSize = LEN(string)
262 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR) && !defined (TARGET_NEC_VECTOR))
263 IFirst = 0
264 CALL PXFGETENV('USER',iFirst,strTmp,ILast,Iend )
265 #else
266 CALL GETENV('USER',strTmp )
267 #endif
268 IF ( strTmp .NE. ' ' ) THEN
269 iFirst = IFNBLNK(strTmp)
270 iLast = ILNBLNK(strTmp)
271 iEnd = iLast-iFirst+1
272 IF (iEnd .GE. 0 ) THEN
273 idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
274 ENDIF
275 iFree = iFree+iEnd+1
276 IF ( iFree .LE. idSize ) THEN
277 idString(iFree:iFree) = '@'
278 iFree = iFree+1
279 ENDIF
280 ENDIF
281 strTmp = 'UNKNOWN'
282 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR) && !defined (TARGET_NEC_VECTOR))
283 IFirst = 0
284 CALL PXFGETENV('HOST',iFirst,strTmp,ILast,Iend )
285 #else
286 CALL GETENV('HOST',strTmp )
287 #endif
288 IF ( strTmp .NE. ' ' ) THEN
289 iFirst = IFNBLNK(strTmp)
290 iLast = ILNBLNK(strTmp)
291 iEnd = iLast-iFirst+1
292 iEnd = MIN(iEnd,idSize-iFree)
293 iEnd = iEnd-1
294 IF (iEnd .GE. 0 ) THEN
295 idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
296 ENDIF
297 iFree = iFree+iEnd+1
298 ENDIF
299 C
300 string = idString
301 C
302 1000 CONTINUE
303 RETURN
304 END
305
306 CBOP
307 C !ROUTINE: UCASE
308
309 C !INTERFACE:
310 SUBROUTINE UCASE ( string )
311 IMPLICIT NONE
312
313 C !DESCRIPTION:
314 C Translate string to upper case.
315
316 C !INPUT/OUTPUT PARAMETERS:
317 CHARACTER*(*) string
318
319 C !LOCAL VARIABLES:
320 CHARACTER*26 LOWER
321 DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
322 SAVE LOWER
323 CHARACTER*26 UPPER
324 DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
325 SAVE UPPER
326 INTEGER I, L
327 CEOP
328
329 C
330 DO 10 I = 1, LEN(string)
331 L = INDEX(LOWER,string(I:I))
332 IF ( L .EQ. 0 ) GOTO 10
333 string(I:I) = UPPER(L:L)
334 10 CONTINUE
335 C
336 RETURN
337 END
338 C************************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22