/[MITgcm]/MITgcm_contrib/heimbach/OpenAD/code_shallow_openad/utils.F
ViewVC logotype

Annotation of /MITgcm_contrib/heimbach/OpenAD/code_shallow_openad/utils.F

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


Revision 1.2 - (hide annotations) (download)
Wed Jan 18 23:43:11 2006 UTC (20 years, 9 months ago) by utke
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
FILE REMOVED
deal with renaming

1 utke 1.2 C $Header: /u/gcmpack/MITgcm_contrib/heimbach/OpenAD/code_shallow_openad/utils.F,v 1.1 2005/12/13 15:15:32 heimbach Exp $
2 heimbach 1.1 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