The TELEMAC-MASCARET system  trunk
dico.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE dico
3 ! ***************
4 !
5  &( ityp , numero , ilong , chaine , motcle , motpro ,
6  & lonpro , SIZE , utindx , langue , aidlng , motign , nign ,
7  & luign , typign , lonign , nficda , nblang , nmaxr )
8 !
9 !***********************************************************************
10 ! DAMOCLES V6P0 21/08/2010
11 !***********************************************************************
12 !
13 !brief LOOKS FOR A CHARACTER STRING IN THE DICTIONARY.
14 !+
15 !+ FOR THE DICTIONARY FILE, LOOKS AMONGST THE RESERVED
16 !+ WORDS.
17 !+
18 !+ FOR THE STEERING FILE, LOOKS AMONGST THE ACTIVE KEYWORDS
19 !+ AND AMONGST THE WORDS IGNORED IN THE DICTIONARY BUT
20 !+ WRITTEN BY EDAMOX.
21 !
22 !note PORTABILITY : IBM,CRAY,HP,SUN
23 !
24 !warning ADDING A LANGUAGE MUST RESULT IN AN INCREASE IN THE
25 !+ NUMBER OF LOOPS AGAINST AVAILABLE LANGUAGES
26 !+ (2 LANGUAGES IN THIS CASE: F ANF GB)
27 !
28 !history O. QUIQUEMPOIX (LNH)
29 !+ 15/12/1993
30 !+
31 !+
32 !
33 !history J-M HERVOUET (LNH); A. YESSAYAN; L. LEGUE
34 !+ 14/01/2008
35 !+ V5P8
36 !+ JMH: DECOMPOSITION OF IF TO AVOID STRINGS LONGER THAN THEIR SIZE
37 !
38 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
39 !+ 13/07/2010
40 !+ V6P0
41 !+ Translation of French comments within the FORTRAN sources into
42 !+ English comments
43 !
44 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
45 !+ 21/08/2010
46 !+ V6P0
47 !+ Creation of DOXYGEN tags for automated documentation and
48 !+ cross-referencing of the FORTRAN sources
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| AIDLNG |<--| LOGIQUE .TRUE. SI L'AIDE EST CELLE DE LNG
52 !| CHAINE |-->| CHAINE A ANALYSER
53 !| ILONG |-->| LONGUEUR DE LA CHAINE A ANALYSER
54 !| ITYP |<--| TYPE DU MOT-CLE : 1 ENTIER
55 !| | | 2 REEL
56 !| | | 3 LOGIQUE
57 !| | | 4 CARACTERES
58 !| | | 5 MOT RESERVE
59 !| | | 0 MOT INCONNU
60 !| LANGUE |<--| LOGIQUE=.TRUE. SI LA CHAINE EST RECONNUE
61 !| LONIGN |-->| TABLEAU DES LONGUEURS DES MOTS DE MOTIGN
62 !| LONPRO |-->| LONGUEURS DES MOTS CLES DE MOTPRO
63 !| LUIGN |-->| LOGIQUE POUR LES MOTS A NE PAS CLASSER
64 !| MOTCLE |-->| TABLEAU DES MOTS CLES ACTIFS
65 !| MOTIGN |-->| TABLEAU DES MOTS CLES DUS A EDAMOX A IGNORER
66 !| MOTPRO |-->| TABLEAU DES MOTS CLES RESERVES AU PROGRAMME
67 !| NBLANG |-->| NOMBRE DE LANGUES CONNUES
68 !| NFICDA |-->| NUMERO DE CANAL DU FICHIER DES DONNEES
69 !| NIGN |-->| NOMBRE DE MOTS CLES DUS A EDAMOX A IGNORER
70 !| NMAXR |-->| TABLEAU DES INDEX MAXIMUM REELS PAR TYPES
71 !| NUMERO |<--| ORDRE DU MOT-CLE PARMI CEUX DE SON TYPE
72 !| SIZE |-->| TABLEAU DES LONGUEURS DES MOTS CLES
73 !| TYPIGN |-->| TABLEAU DES TYPES DES MOTS EDAMOX A IGNORER
74 !| UTINDX |-->| TABLEAU DE LOGIQUES D'UTILISATION DES INDEX
75 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76 !
79  IMPLICIT NONE
80 !
81  INTEGER SIZE(4,*),ITYP,NUMERO,ILONG,NBLANG,NMAXR(4)
82  INTEGER :: NIGN,NFICDA,TYPIGN(100),LONIGN(100),LONPRO(15)
83  LOGICAL UTINDX(4,*),LANGUE,LUIGN,AIDLNG
84  CHARACTER(LEN=*) MOTCLE(4,*),MOTPRO(*),CHAINE
85  CHARACTER(LEN=1) :: LNGPRO(9)
86  CHARACTER(LEN=9) :: RUBPRO(5),MOTLNG
87  CHARACTER(LEN=72) :: MOTIGN(100)
88 !
89 !
90 !-----------------------------------------------------------------------
91 !
92  INTEGER INDX2,LGRUB(5),I,K,LNGINT,VALNUM(5)
93 !
94 !-----------------------------------------------------------------------
95 !
96 !-----------------------------------------------------------------------
97 !
98  parameter( lngpro = (/'1','2','3','4','5','6','7','8','9'/) )
99  parameter( rubpro =(/
100  & 'NOM ','DEFAUT ','AIDE ','CHOIX ','RUBRIQUE '/) )
101 ! NUMBER OF LETTERS IN THE RUBPRO NAMES
102  parameter( lgrub = (/ 3,6,4,5,8 /) )
103 ! CORRESPONDENCES BETWEEN RUBPRO AND MOTPRO
104  parameter( valnum = (/ 1,5,6,7,8 /) )
105 !
106 !***********************************************************************
107 ! RCS AND SCCS MARKING
108 !
109 !***********************************************************************
110 !
111 ! LANGUE IS ONLY USED WHEN READING THE DICTIONARY.
112 ! IT IS NOT USED WHEN READING THE USER FILE.
113 !
114  langue = .false.
115  aidlng = .false.
116 !
117  lngint = lng - 1
118 !
119 !*******************************************************
120 ! 1) SEARCHES THROUGH THE USER KEYWORDS:
121 !*******************************************************
122 !
123  IF (nfic.EQ.nficda) THEN
124  DO ityp = 1,4
125  DO indx2=1,nmaxr(ityp)
126  IF (utindx(ityp,indx2)) THEN
127  k=SIZE(ityp,indx2)
128  IF(k.EQ.ilong) THEN
129  IF(chaine(1:k).EQ.motcle(ityp,indx2)(1:k)) THEN
130  numero=indx2
131  GO TO 1000
132  ENDIF
133  ENDIF
134  ENDIF
135  ENDDO ! INDX2
136  ENDDO ! ITYP
137 !
138 ! IF NOT, DETERMINES IF ITS AN EDAMOX KEYWORD OF INDEX = -1
139 !
140  DO i=1,nign
141  IF(lonign(i).EQ.ilong) THEN
142  IF(chaine(1:ilong).EQ.motign(i)(1:ilong)) THEN
143  ityp = typign(i)
144  luign = .true.
145  GO TO 1000
146  ENDIF
147  ENDIF
148  ENDDO ! I
149 !
150 ! END OF SEARCH THROUGH THE USER KEYWORDS
151  GO TO 910
152  ENDIF
153 !
154 !
155 !*********************************************
156 ! 2) SEARCHES THROUGH THE RESERVED WORDS:
157 !*********************************************
158 !
159 ! AIDLNG (LOGICAL) IS TRUE IF THE HELP IS THAT OF THE SELECTED LANGUAGE
160 !
161 ! IF IT IS AN ENGLISH WORD: NO NEED TO LOOK FOR IT AMONG THE FR
162 ! THAT SAVES 50 TESTS PER WORD FOR TELEMAC FOR EXAMPLE
163 ! (ESTIMATED 6500 TESTS FOR TELEMAC)
164  IF (chaine(ilong:ilong).EQ.'1') GOTO 125
165 !
166  DO i=1,15
167  IF (ilong.EQ.lonpro(i)) THEN
168  IF (chaine(1:ilong).EQ.motpro(i)(1:ilong)) THEN
169 ! IF 'AIDE' AND LNG=FRANCAIS, WILL EDIT THE HELP IF DOC
170  IF (i.EQ.6 .AND. lngint .EQ. 0) aidlng = .true.
171  langue = .true.
172  numero = i
173  ityp = 5
174  GO TO 1000
175  ENDIF
176  ENDIF
177  ENDDO ! I
178 !
179 ! IF NOT: LOOKS FOR IT AMONG THE RESERVED WORDS FOR LANGUAGES
180 ! OTHER THAN FRENCH. (MAX NBLANG LANGUAGES AND NBLANG<=10)
181 !
182 ! LNG IS THE EXTERNAL LANGUAGE PARAMETER (1 = FRENCH, 2 = ENGLISH ...)
183 ! LNGINT IS THE LANGUAGE PARAMETER INTERNAL TO DAMOCLE
184 ! (I.E. 0 = FRENCH, 1 = ENGLISH ...)
185 !
186 ! AIDLNG = NUMBER OF THE HELP LINE IN REQUESTED LANGUAGE
187 !
188 125 CONTINUE
189  IF (nblang.GE.2) THEN
190  DO i=1,5
191  DO k=1,nblang-1
192  IF (lgrub(i)+1.EQ.ilong) THEN
193  motlng = rubpro(i)(1:lgrub(i))//lngpro(k)(1:1)
194  IF (chaine(1:ilong).EQ.motlng(1:ilong)) THEN
195  numero=valnum(i)
196 !
197  IF (i.EQ.3 .AND. k.EQ.lngint) aidlng = .true.
198 !
199  ityp = 5
200 !
201 ! RETURNS LANGUE = .TRUE. ONLY FOR DAMOCLE KEYWORDS
202 ! EXCEPT FOR 'AIDE', IN WHICH CASE LANGUE IS NOT USED
203 ! NOT THE SAME TREATMENT DEPENDING ON THE SELECTED LANGUAGE
204  IF (k.EQ.lngint.AND.i.GE.1.AND.i.LE.3) langue = .true.
205  GO TO 1000
206  ENDIF
207  ENDIF
208  ENDDO ! K
209  ENDDO ! I
210  ENDIF
211 !
212 ! 6) ERROR : KEYWORD UNKNOWN
213 !
214  910 CONTINUE
215  erreur = .true.
216  ityp = 0
217  WRITE(lu,*)'*************************************************'
218  WRITE(lu,*)'AT LINE ',nlign,' THE KEY-WORD : ',
219  & chaine(1:ilong),' IS UNKNOWN...'
220  WRITE(lu,*)'*************************************************'
221 !
222 1000 CONTINUE
223 !
224  RETURN
225  END
subroutine dico(ITYP, NUMERO, ILONG, CHAINE, MOTCLE, MOTPRO, LONPRO, SIZE, UTINDX, LANGUE, AIDLNG, MOTIGN, NIGN, LUIGN, TYPIGN, LONIGN, NFICDA, NBLANG, NMAXR)
Definition: dico.f:9
logical erreur
Y. AUDOUIN (EDF LAB, LNHE) 09/05/2014 V7P0 First version.