The TELEMAC-MASCARET system  trunk
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 !
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
logical function loglu(ICOL, LIGNE)
Definition: loglu.f:7
subroutine majus(CHAINE)
Definition: majus.f:7
logical erreur
Y. AUDOUIN (EDF LAB, LNHE) 09/05/2014 V7P0 First version.