/[MITgcm]/MITgcm/verification/OpenAD/code_ad/utils.F
ViewVC logotype

Contents of /MITgcm/verification/OpenAD/code_ad/utils.F

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


Revision 1.4 - (show annotations) (download)
Wed Dec 7 04:15:05 2005 UTC (18 years, 5 months ago) by utke
Branch: MAIN
CVS Tags: checkpoint57y_pre, checkpoint58l_post, checkpoint58f_post, checkpoint58a_post, checkpoint57y_post, checkpoint58e_post, checkpoint58i_post, checkpoint58c_post, checkpoint58b_post, checkpoint58g_post, checkpoint58k_post, checkpoint58j_post, checkpoint58d_post, checkpoint57z_post, checkpoint58h_post, checkpoint58
Changes since 1.3: +3 -3 lines
fix more goof ups in the rewrite

1 C $Header: /u/gcmpack/MITgcm/verification/OpenAD/code_ad/utils.F,v 1.3 2005/12/06 06:56:00 utke 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) .GT. lDate ) then
50 WRITE(msgBuffer,'(A)')
51 &' '
52 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
53 &SQUEEZE_RIGHT,myThreadId)
54 WRITE(msgBuffer,'(A)')
55 &'*** WARNING WARNING WARNING WARNING WARNING WARNING ***'
56 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
57 &SQUEEZE_RIGHT,myThreadId)
58 WRITE(msgBuffer,'(A)')
59 &'procedure: "DATE".'
60 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
61 &SQUEEZE_RIGHT,myThreadId)
62 WRITE(msgBuffer,'(A)')
63 &'Variable passed to S/R DATE is too small.'
64 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
65 &SQUEEZE_RIGHT,myThreadId)
66 WRITE(msgBuffer,'(A)')
67 &' Argument must be at least',lDate,'characters long.'
68 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
69 &SQUEEZE_RIGHT,myThreadId)
70 WRITE(msgBuffer,'(A)')
71 &'*******************************************************'
72 CALL PRINT_MESSAGE(msgBuffer,standardMessageUnit,
73 &SQUEEZE_RIGHT,myThreadId)
74 else
75 string = ' '
76 #ifdef HAVE_FDATE
77 CALL FDATE( string )
78 #endif
79 end if
80 END
81
82 CBOP
83 C !ROUTINE: IFNBLNK
84
85 C !INTERFACE:
86 INTEGER FUNCTION IFNBLNK( string )
87 IMPLICIT NONE
88
89 C !DESCRIPTION:
90 C *==========================================================*
91 C | FUNCTION IFNBLNK |
92 C | o Find first non-blank in character string. |
93 C *==========================================================*
94 C
95 C !INPUT PARAMETERS:
96 C string :: String to find first non-blank in.
97 CHARACTER*(*) string
98
99 C !LOCAL VARIABLES:
100 C L, LS :: Temps for string locations
101 INTEGER L, LS
102 CEOP
103 C
104 LS = LEN(string)
105 IFNBLNK = 0
106 L=1
107 DO while ((L.le.LS).and.(string(L:L) .eq. ' '))
108 L=L+1
109 end do
110 IFNBLNK = L
111 END
112
113 CBOP
114 C !ROUTINE: IFNBLNK
115
116 C !INTERFACE:
117 subroutine ad_s_IFNBLNK( string, index )
118 IMPLICIT NONE
119
120 C !DESCRIPTION:
121 C *==========================================================*
122 C | FUNCTION IFNBLNK |
123 C | o Find first non-blank in character string. |
124 C *==========================================================*
125 C
126 C !INPUT PARAMETERS:
127 C string :: String to find first non-blank in.
128 CHARACTER*(*) string
129 integer index
130
131 C !LOCAL VARIABLES:
132 C L, LS :: Temps for string locations
133 INTEGER L, LS
134 CEOP
135 C
136 LS = LEN(string)
137 index = 0
138 L=1
139 DO while ((L.le.LS).and.(string(L:L) .eq. ' '))
140 L=L+1
141 end do
142 index = L
143 END
144
145 CBOP
146 C !ROUTINE: ILNBLNK
147
148 C !INTERFACE:
149 INTEGER FUNCTION ILNBLNK( string )
150 IMPLICIT NONE
151
152 C !DESCRIPTION:
153 C *==========================================================*
154 C | FUNCTION ILNBLNK |
155 C | o Find last non-blank in character string. |
156 C *==========================================================*
157
158 C !INPUT PARAMETERS:
159 C string :: string to scan
160 CHARACTER*(*) string
161
162 C !LOCAL VARIABLES:
163 C L, LS :: Temps. used in scanning string
164 INTEGER L, LS
165 CEOP
166 C
167 LS = LEN(string)
168 ILNBLNK = 0
169 L=LS
170 DO while ((L.gt.0).and.(string(L:L) .eq. ' '))
171 L=L-1
172 end do
173 ILNBLNK = L
174 END
175
176 CBOP
177 C !ROUTINE: ILNBLNK
178
179 C !INTERFACE:
180 subroutine ad_s_ILNBLNK( string, index )
181 IMPLICIT NONE
182
183 C !DESCRIPTION:
184 C *==========================================================*
185 C | FUNCTION ILNBLNK |
186 C | o Find last non-blank in character string. |
187 C *==========================================================*
188
189 C !INPUT PARAMETERS:
190 C string :: string to scan
191 CHARACTER*(*) string
192 integer index
193
194 C !LOCAL VARIABLES:
195 C L, LS :: Temps. used in scanning string
196 INTEGER L, LS
197 CEOP
198 C
199 LS = LEN(string)
200 index = 0
201 L=LS
202 DO while ((L.gt.0).and.(string(L:L) .eq. ' '))
203 L=L-1
204 end do
205 index = L
206 END
207
208 CBOP
209 C !ROUTINE: IO_ERRCOUNT
210
211 C !INTERFACE:
212 INTEGER FUNCTION IO_ERRCOUNT(myThid)
213 IMPLICIT NONE
214
215 C !DESCRIPTION:
216 C *==========================================================*
217 C | FUNCTION IO\_ERRCOUNT |
218 C | o Reads IO error counter. |
219 C *==========================================================*
220
221 C !USES:
222 C == Global variables ==
223 #include "SIZE.h"
224 #include "EEPARAMS.h"
225
226 C !INPUT PARAMETERS:
227 C == Routine arguments ==
228 C myThid :: My thread number
229 INTEGER myThid
230
231 CEOP
232
233 IO_ERRCOUNT = ioErrorCount(myThid)
234
235 RETURN
236 END
237
238 CBOP
239
240 C !ROUTINE: LCASE
241
242 C !INTERFACE:
243 SUBROUTINE LCASE ( string )
244 IMPLICIT NONE
245
246 C !DESCRIPTION:
247 C *==========================================================*
248 C | SUBROUTINE LCASE |
249 C | o Convert character string to all lower case. |
250 C *==========================================================*
251
252 C !INPUT/OUTPUT PARAMETERS:
253 CHARACTER*(*) string
254
255 C !LOCALVARIABLES:
256 CHARACTER*26 LOWER
257 DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
258 SAVE LOWER
259 CHARACTER*26 UPPER
260 DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
261 SAVE UPPER
262 INTEGER I, L
263 CEOP
264
265 C
266 DO I = 1, LEN(string)
267 L = INDEX(UPPER,string(I:I))
268 IF ( L .NE. 0 ) then
269 string(I:I) = LOWER(L:L)
270 end if
271 end do
272 END
273
274 CBOP
275 C !ROUTINE: MACHINE
276
277 C !INTERFACE:
278 SUBROUTINE MACHINE ( string )
279 IMPLICIT NONE
280
281 C !DESCRIPTION:
282 C *==========================================================*
283 C | SUBROUTINE MACHINE |
284 C | o Return computer identifier in string. |
285 C *==========================================================*
286
287 C !USES:
288 #include "SIZE.h"
289 #include "EEPARAMS.h"
290 INTEGER IFNBLNK
291 INTEGER ILNBLNK
292 EXTERNAL IFNBLNK
293 EXTERNAL ILNBLNK
294
295 C !OUTPUT PARAMETERS:
296 C string :: Machine identifier
297 CHARACTER*(*) string
298
299 C !LOCAL VARIABLES:
300 C iFirst, iLast, :: String indexing temps.
301 C iEnd, iFree, idSize
302 C strTmp, idString :: Temps. for strings.
303 INTEGER iFirst
304 INTEGER iLast
305 INTEGER iEnd
306 INTEGER iFree
307 INTEGER idSize
308 CHARACTER*1024 strTmp
309 CHARACTER*1024 idString
310 CEOP
311
312 strTmp = 'UNKNOWN'
313 iFree = 1
314 idSize = LEN(string)
315 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR) && !defined (TARGET_NEC_VECTOR))
316 IFirst = 0
317 CALL PXFGETENV('USER',iFirst,strTmp,ILast,Iend )
318 #else
319 CALL GETENV('USER',strTmp )
320 #endif
321 IF ( strTmp .NE. ' ' ) THEN
322 iFirst = IFNBLNK(strTmp)
323 iLast = ILNBLNK(strTmp)
324 iEnd = iLast-iFirst+1
325 IF (iEnd .GE. 0 ) THEN
326 idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
327 ENDIF
328 iFree = iFree+iEnd+1
329 IF ( iFree .LE. idSize ) THEN
330 idString(iFree:iFree) = '@'
331 iFree = iFree+1
332 ENDIF
333 ENDIF
334 strTmp = 'UNKNOWN'
335 #if (defined (TARGET_T3E) || defined (TARGET_CRAY_VECTOR) && !defined (TARGET_NEC_VECTOR))
336 IFirst = 0
337 CALL PXFGETENV('HOST',iFirst,strTmp,ILast,Iend )
338 #else
339 CALL GETENV('HOST',strTmp )
340 #endif
341 IF ( strTmp .NE. ' ' ) THEN
342 iFirst = IFNBLNK(strTmp)
343 iLast = ILNBLNK(strTmp)
344 iEnd = iLast-iFirst+1
345 iEnd = MIN(iEnd,idSize-iFree)
346 iEnd = iEnd-1
347 IF (iEnd .GE. 0 ) THEN
348 idString(iFree:) = strTmp(iFirst:iFirst+iEnd)
349 ENDIF
350 iFree = iFree+iEnd+1
351 ENDIF
352 C
353 string = idString
354 C
355 1000 CONTINUE
356 RETURN
357 END
358
359 CBOP
360 C !ROUTINE: UCASE
361
362 C !INTERFACE:
363 SUBROUTINE UCASE ( string )
364 IMPLICIT NONE
365
366 C !DESCRIPTION:
367 C Translate string to upper case.
368
369 C !INPUT/OUTPUT PARAMETERS:
370 CHARACTER*(*) string
371
372 C !LOCAL VARIABLES:
373 CHARACTER*26 LOWER
374 DATA LOWER /'abcdefghijklmnopqrstuvwxyz'/
375 SAVE LOWER
376 CHARACTER*26 UPPER
377 DATA UPPER /'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
378 SAVE UPPER
379 INTEGER I, L
380 CEOP
381
382 C
383 DO I = 1, LEN(string)
384 L = INDEX(LOWER,string(I:I))
385 IF ( L .NE. 0 ) then
386 string(I:I) = UPPER(L:L)
387 end if
388 end do
389 END
390 C************************************************************************

  ViewVC Help
Powered by ViewVC 1.1.22