The TELEMAC-MASCARET system
trunk
sources
utils
damocles
loglu.f
Go to the documentation of this file.
1
! **********************
2
LOGICAL
FUNCTION
loglu
3
! **********************
4
!
5
&( icol , ligne )
6
!
7
!***********************************************************************
8
! DAMOCLES V6P3 21/08/2010
9
!***********************************************************************
10
!
11
!brief DECODES A LOGICAL VALUE, FROM COLUMN ICOL+1 OF THE LINE.
12
!+ IF THE STRING IS NOT COMPLETE, GOES TO THE NEXT LINE
13
!+ IF NEED BE.
14
!+ MOVES THE POINTER ICOL TO THE LAST DECODED CHARACTER.
15
!+ OR TO ICOL=0 IF THE NEXT LINE WAS READ.
16
!
17
!warning ACCEPTED VALUES ARE (UPPER OR LOWER CASE):
18
!+ VRAI OUI TRUE YES .TRUE. 1
19
!+ FAUX NON FALSE NO .FALSE. 0
20
!
21
!history N.DURAND (HRW), S.E.BOURBAN (HRW)
22
!+ 13/07/2010
23
!+ V6P0
24
!+ Translation of French comments within the FORTRAN sources into
25
!+ English comments
26
!
27
!history N.DURAND (HRW), S.E.BOURBAN (HRW)
28
!+ 21/08/2010
29
!+ V6P0
30
!+ Creation of DOXYGEN tags for automated documentation and
31
!+ cross-referencing of the FORTRAN sources
32
!
33
!history J.M. HERVOUET (EDF R&D, LNHE)
34
!+ 11/03/2013
35
!+ V6P3
36
!+ Slight modification for avoiding to read beyong the actual size
37
!+ of LIGNE.
38
!
39
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40
!| ICOL |<->| POSITION COURANTE DU POINTEUR DANS LA LIGNE
41
!| LIGNE |<->| LIGNE EN COURS DE DECODAGE
42
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43
!
44
USE
declarations_damocles
45
USE
declarations_special
46
IMPLICIT NONE
47
!
48
!+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
49
!
50
INTEGER
,
INTENT(INOUT)
:: ICOL
51
CHARACTER(LEN=*)
,
INTENT(INOUT)
:: LIGNE
52
!
53
!+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54
!
55
INTEGER
NEXT,PRECAR
56
EXTERNAL
next,precar
57
!
58
!-----------------------------------------------------------------------
59
!
60
INTEGER
I1,I2
61
CHARACTER(LEN=1)
TABUL
62
CHARACTER(LEN=7)
L
63
CHARACTER(LEN=72)
LIGNE2
64
LOGICAL
LUFIC,LISUIV
65
!
66
!-----------------------------------------------------------------------
67
!
68
INTRINSIC
char
69
!
70
!***********************************************************************
71
! RCS AND SCCS MARKING
72
!
73
!***********************************************************************
74
!
75
lufic = .false.
76
lisuiv = .false.
77
ligne2 =
' '
78
tabul = char(9)
79
!
80
i1 = next( icol+1 , ligne )
81
i2 = precar(i1,ligne,
' '
,
';'
,tabul)
82
!
83
! CASE WHERE WE MIGHT HAVE TO READ THE FOLLOWING LINE
84
!
85
IF
(i2.GT.
longli
.AND.i1+6.GT.
longli
)
THEN
86
lufic=.true.
87
READ
(
nfic
,end=900,err=998,fmt=
'(A)'
) ligne2
88
IF
(i1.LE.
longli
)
THEN
89
l(1:7)=ligne(i1:
longli
)//ligne2(1:(7-(
longli
-i1+1)))
90
ELSE
91
l(1:7)=ligne2(1:7)
92
ENDIF
93
i2 = 0
94
i2 = precar(i2+1,ligne2,
' '
,
';'
,tabul)
95
ELSEIF
(i1+6.GT.
longli
)
THEN
96
l(2:7) =
' '
97
l(1:
longli
-i1+1)= ligne(i1:
longli
)
98
ELSE
99
l(1:7) = ligne(i1:i1+6)
100
ENDIF
101
CALL
majus
(l)
102
GO TO
910
103
!
104
900
CONTINUE
105
retour
= .true.
106
!
107
910
CONTINUE
108
!
109
! ORDERED IN THE MOST PROBABLE ORDER: NON OUI NO YES 0 1 ...
110
!
111
IF
(l(1:3).EQ.
'NON'
)
THEN
112
loglu
= .false.
113
icol = i1 + 2
114
ELSEIF
(l(1:2).EQ.
'NO'
)
THEN
115
loglu
= .false.
116
icol = i1 + 1
117
ELSEIF
(l(1:3).EQ.
'OUI'
)
THEN
118
loglu
= .true.
119
icol = i1 + 2
120
ELSEIF
(l(1:3).EQ.
'YES'
)
THEN
121
loglu
= .true.
122
icol = i1 + 2
123
ELSEIF
(l(1:1).EQ.
'0'
)
THEN
124
loglu
= .false.
125
icol = i1
126
ELSEIF
(l(1:1).EQ.
'1'
)
THEN
127
loglu
= .true.
128
icol = i1
129
ELSEIF
(l(1:7).EQ.
'.FALSE.'
)
THEN
130
loglu
= .false.
131
icol = i1 + 6
132
ELSEIF
(l(1:5).EQ.
'FALSE'
)
THEN
133
loglu
= .false.
134
icol = i1 + 4
135
ELSEIF
(l(1:4).EQ.
'FAUX'
)
THEN
136
loglu
= .false.
137
icol = i1 + 3
138
ELSEIF
(l(1:6).EQ.
'.TRUE.'
)
THEN
139
loglu
= .true.
140
icol = i1 + 5
141
ELSEIF
(l(1:4).EQ.
'TRUE'
)
THEN
142
loglu
= .true.
143
icol = i1 + 3
144
ELSEIF
(l(1:4).EQ.
'VRAI'
)
THEN
145
loglu
= .true.
146
icol = i1 + 3
147
ELSE
148
!
149
! ERROR: NOT A LOGICAL VALUE
150
!
151
erreur
= .true.
152
WRITE
(
lu
,
'(1X,A)'
) ligne(1:
longli
)
153
IF
(lufic)
WRITE
(
lu
,
'(1X,A)'
) ligne2(1:
longli
)
154
WRITE
(
lu
,*)
' '
155
WRITE
(
lu
,
'(1X,A6,I4,A)'
)
'LOGLU (UTILE) : LINE: '
,
nlign
,
156
&
' WRONG LOGICAL VALUE'
157
loglu
= .false.
158
GO TO
1000
159
!
160
ENDIF
161
!
162
! //// UPDATES THE POINTER ////
163
!
164
IF
(lufic)
THEN
165
nlign
=
nlign
+ 1
166
ligne = ligne2
167
IF
(icol.GT.
longli
) lisuiv = .true.
168
IF
(lisuiv)
THEN
169
icol = i2-1
170
ELSE
171
icol = 0
172
ENDIF
173
ELSE
174
icol = i2 - 1
175
ENDIF
176
!
177
1000
CONTINUE
178
!
179
!-----------------------------------------------------------------------
180
!
181
RETURN
182
!
183
998
CONTINUE
184
WRITE
(
lu
,1999)
nfic
,
nlign
+1
185
1999
FORMAT
(1x,
'LOGICAL UNIT '
,1i2,
' ERROR LINE '
,1i6)
186
retour
= .true.
187
!
188
!-----------------------------------------------------------------------
189
!
190
RETURN
191
END
declarations_special
Definition:
declarations_special.F:3
declarations_special::lu
integer lu
Definition:
declarations_special.F:45
declarations_damocles::retour
logical retour
Definition:
declarations_damocles.f:28
declarations_damocles::nlign
integer nlign
Definition:
declarations_damocles.f:30
declarations_damocles::nfic
integer nfic
Definition:
declarations_damocles.f:33
loglu
logical function loglu(ICOL, LIGNE)
Definition:
loglu.f:7
majus
subroutine majus(CHAINE)
Definition:
majus.f:7
declarations_damocles::longli
integer longli
Definition:
declarations_damocles.f:31
declarations_damocles::erreur
logical erreur
Y. AUDOUIN (EDF LAB, LNHE) 09/05/2014 V7P0 First version.
Definition:
declarations_damocles.f:27
declarations_damocles
Definition:
declarations_damocles.f:3