The TELEMAC-MASCARET system  trunk
classe.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE classe
3 ! *****************
4 !
5  &(dimens , SIZE , motcle , utindx , nmax ,
6  & offset , adress , indic , luign ,
7  & motint , motrea , motlog , motcar , motatt ,
8  & defcar , defint , deflog , defrea , defatt )
9 !
10 !***********************************************************************
11 ! DAMOCLES V7P1
12 !***********************************************************************
13 !
14 !brief STORES IN ARRAYS MOTINT, MOTREA, MOTLOG, MOTCAR AND
15 !+ MOTATT THE VALUES READ FOR A KEYWORD.
16 !+
17 !+ DISCARDS THE WORDS RETURNED BY EDAMOX IN THE DATA FILE.
18 !
19 !note PORTABILITY : IBM,CRAY,HP,SUN
20 !
21 !history O. QUIQUEMPOIX (LNH)
22 !+ 14/12/1993
23 !+
24 !+
25 !
26 !history L. LEGUE
27 !+ 16/08/1994
28 !+ V5P1
29 !+
30 !
31 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
32 !+ 13/07/2010
33 !+ V6P0
34 !+ Translation of French comments within the FORTRAN sources into
35 !+ English comments
36 !
37 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
38 !+ 21/08/2010
39 !+ V6P0
40 !+ Creation of DOXYGEN tags for automated documentation and
41 !+ cross-referencing of the FORTRAN sources
42 !
43 !history J-M HERVOUET (EDF LAB, LNHE)
44 !+ 20/11/2015
45 !+ V7P1
46 !+ An error message was printing the wrong line number. Now printing
47 !+ the correct keyword instead.
48 !
49 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
50 !| ADRESS |<->| TABLEAU DES ADRESSES DES MOTS CLES
51 !| DEFATT |<->| TABLEAU DES SUBMITS PAR DEFAUT
52 !| DEFCAR |<->| TABLEAU DES VALEURS CARACTERES PAR DEFAUT
53 !| DEFINT |<->| TABLEAU DES VALEURS ENTIERES PAR DEFAUT
54 !| DEFLOG |<->| TABLEAU DES VALEURS LOGIQUES PAR DEFAUT
55 !| DEFREA |<->| TABLEAU DES VALEURS REELLES PAR DEFAUT
56 !| DIMENS |<->| TABLEAU DES DIMENSIONS DES MOTS CLES
57 !| INDIC |<->| TABLEAU D'INDICATEURS D'ETAT DES MOTS CLES
58 !| | | = 0 : PAS DE SUBMIT & NON TABLEAU
59 !| | | = 1 : PAS DE SUBMIT & TABLEAU
60 !| | | = 2 : AVEC SUBMIT & NON TABLEAU
61 !| | | = 3 : AVEC SUBMIT & NON TABLEAU
62 !| LUIGN |-->| LOGIQUE POUR LES MOTS A NE PAS CLASSER
63 !| MOTATT |<->| TABLEAU DES SUBMITS
64 !| MOTCAR |<->| TABLEAU DES VALEURS CARACTERES
65 !| MOTCLE |-->| TABLEAU DES MOTS CLES ACTIFS
66 !| MOTINT |<->| TABLEAU DES VALEURS ENTIERES
67 !| MOTLOG |<->| TABLEAU DES VALEURS LOGIQUES
68 !| MOTREA |<->| TABLEAU DES VALEURS REELLES
69 !| NMAX |-->| TAILLE MAXIMALE AUTORISEE POUR LES TABLEAUX
70 !| OFFSET |<->| TABLEAUX DES PROCHAINES ADRESSES LIBRES
71 !| SIZE |<->| TABLEAU DES LONGUEURS DES MOTS CLES
72 !| UTINDX |<->| TABLEAU DE LOGIQUES D'UTILISATION DES INDEX
73 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76  IMPLICIT NONE
77 !
78  INTEGER NMAX,MOTINT(*),ADRESS(4,*),DIMENS(4,*)
79  INTEGER SIZE(4,*),OFFSET(4),DEFINT(*),INDIC(4,*)
80  LOGICAL UTINDX(4,*),DEFLOG(*),MOTLOG(*),LUIGN
81  CHARACTER(LEN=72) MOTCLE(4,*)
82  CHARACTER(LEN=PATH_LEN) MOTCAR(*),DEFCAR(*)
83  CHARACTER(LEN=PATH_LEN) MOTATT(4,*),DEFATT(*)
84  DOUBLE PRECISION MOTREA(*),DEFREA(*)
85 !
86 !-----------------------------------------------------------------------
87 !
88  INTEGER I
89 !
90 !-----------------------------------------------------------------------
91 !
92 !
93 !***********************************************************************
94 ! RCS AND SCCS MARKING
95 !
96 !***********************************************************************
97 !
98  IF (luign) GO TO 1600
99 !
100 ! GLOBAL TREATMENT OF THE KEYWORD
101 !
102  IF (indx .GT. nmax) THEN
103  WRITE(lu,*) '****************************************'
104  WRITE(lu,*) 'ERROR AT LINE:',nlign,
105  & ' OF THE DICTIONARY'
106  WRITE(lu,*) 'INVALID INDEX: ',indx,' MAX = ',nmax
107  WRITE(lu,*) '****************************************'
108  CALL plante(1)
109  stop
110  ENDIF
111 !
112  IF (nmot(ntyp) .GT. nmax) THEN
113  WRITE(lu,*)'*****************************************'
114  WRITE(lu,*) 'ERROR AT LINE:',nlign,
115  & ' OF THE DICTIONARY'
116  WRITE(lu,*) 'TOO MANY KEY-WORDS, MAXIMUM : ',nmax
117  WRITE(lu,*)'*****************************************'
118  CALL plante(1)
119  stop
120  ENDIF
121 !
122 ! REDUNDANT WITH LUIGN? KEPT BY DEFAULT - TO BE CHECKED
123  IF (indx .LE. 0) GO TO 1600
124 !
125  IF (utindx(ntyp,indx)) THEN
126  WRITE(lu,*)'*****************************'
127  WRITE(lu,*) 'ERROR AT LINE: ',nlign
128  WRITE(lu,*) 'THE INDEX: ',indx,
129  & ' IS USED TWO TIMES FOR THE TYPE : ',ntyp
130  WRITE(lu,*)'*****************************'
131  CALL plante(1)
132  stop
133  ELSE
134  utindx(ntyp,indx) = .true.
135  ENDIF
136 !
137  IF(itai.LE.0) THEN
138  itai = 1
139  ELSE
140 ! PREVENTS DYNAMIC ALLOCATION FOR SOMETHING ELSE THAN AN ARRAY
141  indic(ntyp,indx)=indic(ntyp,indx)+1
142  ENDIF
143 !
144 ! ISSUES A WARNING WHEN THE DEFAULT VALUES ARE DEFINED
145 ! IN INSUFFICIENT NUMBER COMPARED TO THE DIMENSIONS
146 !
147  IF(deflu.GT.0.AND.deflu.NE.itai) THEN
148  WRITE(lu,*) ' '
149  WRITE(lu,*) 'WARNING IN DICTIONARY:'
150  WRITE(lu,*) 'FOR KEYWORD: ',param(1:longu)
151  WRITE(lu,*) 'THE NUMBER OF DEFAULT VALUES ',deflu,
152  & ' IS DIFFERENT FROM THE DECLARED SIZE ',itai
153  WRITE(lu,*) ' '
154  ENDIF
155 !
156  IF(deflu .EQ. 0) THEN
157  IF (ntyp .EQ. 1) THEN
158  defint(1) = 0
159  ELSEIF (ntyp .EQ. 2) THEN
160  defrea(1) = 0.0
161  ELSEIF (ntyp .EQ. 3)THEN
162  deflog(1) = .false.
163  ELSEIF (ntyp .EQ. 4) THEN
164  defcar(1) = ' '
165  ENDIF
166  ENDIF
167 !
168  IF (itai .NE. deflu) THEN
169  IF (itai .GT. deflu) THEN
170  DO i = deflu + 1 , itai
171  IF (ntyp .EQ. 1) THEN
172  defint(i) = defint(max(1,deflu))
173  ELSEIF (ntyp .EQ. 2) THEN
174  defrea(i) = defrea(max(1,deflu))
175  ELSEIF (ntyp .EQ. 3) THEN
176  deflog(i) = deflog(max(1,deflu))
177  ELSEIF (ntyp .EQ. 4) THEN
178  defcar(i) = defcar(max(1,deflu))
179  ENDIF
180 ! DEFATT(NYTP,I) = DEFATT(NYTP,MAX(1,DEFLU))
181  ENDDO ! I
182  ENDIF
183  deflu = itai
184  ENDIF
185 !
186 ! STORES THE KEYWORD ATTRIBUTES IN THE ARRAYS
187 ! NUMBER OF KEYWORDS OF TYPE NTYP
188 !
189  nmot(ntyp) = nmot(ntyp) + 1
190 !
191 ! NEXT FREE ADDRESS FOR THE KEYWORD OF TYPE NTYP
192 !
193  adress(ntyp,indx) = offset(ntyp)
194 !
195 ! STORED KEYWORD
196 !
197  motcle(ntyp,indx) = param(1:longu)
198 !
199 ! NUNBER OF VALUES ASSOCIATED WITH THE KEYWORD OF TYPE NTYP
200 !
201  dimens(ntyp,indx) = itai
202 !
203 ! LENGTH OF THE KEYWORD (CHARACTERS)
204 !
205  SIZE(ntyp,indx) = longu
206 !
207 ! STORES THE VALUES IN THE ARRAYS
208 !
209  IF (((adress(ntyp,indx)+itai-1) .GT. nmax)
210  & .OR. (offset(ntyp) .GT. nmax)) THEN
211  WRITE(lu,*) 'ADRESS GREATER THAN NMAX = ',nmax
212  WRITE(lu,*) 'TOO MANY VALUES OF TYPE : ',ntyp
213  & ,' DECLARED.'
214  WRITE(lu,*) 'STOP AT KEY-WORD OF INDEX: ',indx
215  CALL plante(1)
216  stop
217  ENDIF
218 !
219  DO i = 1 , itai
220  IF (ntyp .EQ. 1) THEN
221  motint(adress(ntyp,indx)+i-1) = defint(i)
222  ELSE IF (ntyp .EQ. 2) THEN
223  motrea(adress(ntyp,indx)+i-1) = defrea(i)
224  ELSE IF (ntyp .EQ. 3) THEN
225  motlog(adress(ntyp,indx)+i-1) = deflog(i)
226  ELSE IF (ntyp .EQ. 4) THEN
227  motcar(adress(ntyp,indx)+i-1) = defcar(i)
228  ENDIF
229  IF (indic(ntyp,indx).GE.2)
230  & motatt(ntyp,adress(ntyp,indx)+i-1) = defatt(i)
231  ENDDO ! I
232 !
233 ! UPDATES THE NEXT FREE ADDRESS
234 !
235  offset(ntyp) = offset(ntyp) + itai
236 !
237 ! INITIALISES THE TEMPORARY VARIABLES
238 !
239 1600 CONTINUE
240  param = ' '
241  longu = 0
242  ntyp = -100
243  indx = 123456
244  itai = -100
245  deflu = 0
246 !
247 !-----------------------------------------------------------------------
248 !
249  RETURN
250  END
251 
integer function dimens(IELM)
Definition: dimens.f:7
subroutine classe(DIMENS, SIZE, MOTCLE, UTINDX, NMAX, OFFSET, ADRESS, INDIC, LUIGN, MOTINT, MOTREA, MOTLOG, MOTCAR, MOTATT, DEFCAR, DEFINT, DEFLOG, DEFREA, DEFATT)
Definition: classe.f:10
integer, dimension(4) nmot