The TELEMAC-MASCARET system  trunk
influ.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE influ
3 ! ****************
4 !
5  &( icol , ligne , defatt , trouve , luign , motcle , SIZE,
6  & motign , lonign , nmaxr , nficda , gestd )
7 !
8 !***********************************************************************
9 ! DAMOCLES V6P0 21/08/2010
10 !***********************************************************************
11 !
12 !brief DECODES THE SUBMIT FIELD FROM COLUMN ICOL+1 OF THE
13 !+ CURRENT LINE. TESTS THE PRESENCE OF THE 4 FIELDS.
14 !+ RECOGNISES CHAMP2.
15 !+ MOVES THE POINTER ICOL TO THE LAST DECODED CHARACTER.
16 !
17 !note PORTABILITY : IBM,CRAY,HP,SUN
18 !
19 !warning IF THE 1ST FIELD IS NOT KNOWN, THERE ARE NO CHECKS OTHER
20 !+ THAN ON THE 2ND FIELD, WHICH CHARACTERISES THE BEHAVIOUR
21 !+ OF THE KEYWORD FOR DAMOCLES. THIS EXTENDS THE
22 !+ COMPATIBILITY OF DAMOCLES WITHOUT DIRECT MODIFICATIONS
23 !+ TO THE FORTRAN
24 !
25 !history O. QUIQUEMPOIX (LNH)
26 !+ 16/08/1994
27 !+
28 !+
29 !
30 !history J-M HERVOUET (LNH)
31 !+ 14/01/2008
32 !+ V5P8
33 !+ CORRECTION: IN MOTCH1(1:LCAR), LCAR SHOULD NOT EXCEED 10
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 13/07/2010
37 !+ V6P0
38 !+ Translation of French comments within the FORTRAN sources into
39 !+ English comments
40 !
41 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
42 !+ 21/08/2010
43 !+ V6P0
44 !+ Creation of DOXYGEN tags for automated documentation and
45 !+ cross-referencing of the FORTRAN sources
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !| DEFATT |<--| TABLEAU DES SUBMITS PAR DEFAUT
49 !| GESTD |-->| LOGIQUE D'APPEL PAR LE GESTIONNAIRE D'ETUDES
50 !| ICOL |<->| POSITION COURANTE DU POINTEUR DANS LA LIGNE
51 !| LIGNE |<->| LIGNE EN COURS DE DECODAGE
52 !| LONIGN |-->| TABLEAU DES LONGUEURS DES MOTS EDAMOX
53 !| LUIGN |-->| LOGIQUE POUR LES MOTS A NE PAS CLASSER
54 !| MOTCLE |-->| TABLEAU DES MOTS CLES ACTIFS
55 !| MOTIGN |-->| TABLEAU DES MOTS CLES DUS A EDAMOX A IGNORER
56 !| NFICDA |-->| NUMERO DE CANAL DU FICHIER DES DONNEES
57 !| NMAXR |-->| TABLEAU DES INDEX MAXIMUM REELS PAR TYPES
58 !| SIZE |-->| TABLEAU DES LONGUEURS DES MOTS CLES
59 !| TROUVE |<->| INDICATEUR D'ETAT DES MOTS CLES
60 !| | | = 0 : AUCUNE VALEUR TROUVEE
61 !| | | = 1 : VALEUR PAR DEFAUT TROUVEE
62 !| | | = 2 : VALEUR TROUVEE (FICHIER DE DONNEES)
63 !| | | = 3 : AUCUNE VALEUR TROUVEE (OPTIONNELLE)
64 !| | | = 5 : TABLEAU DE MOTS A SUBMIT COMPACTE
65 !| | | = 6 : MOT CLE A SUBMIT FORCE NON AFFECTE
66 !| | | = 7 : MOT CLE A SUBMIT FORCE AFFECTE (DICO)
67 !| | | = 8 : MOT CLE A SUBMIT FORCE AFFECTE (CAS)
68 !| | | = 9 : FICHIER DICO : SUBMIT + VALEUR LANCEUR
69 !| | | =10 : FICHIER CAS : SUBMIT + VALEUR LANCEUR
70 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71 !
74  IMPLICIT NONE
75 !
76  EXTERNAL next,precar,carlu,longlu
77 !
78  INTEGER TROUVE(4,*),ICOL,NMAXR(4),NFICDA,SIZE(4,*)
79  INTEGER LONIGN(100)
80  LOGICAL LUIGN,GESTD
81  CHARACTER(LEN=72) MOTIGN(100),MOTCLE(4,*)
82  CHARACTER(LEN=PATH_LEN) DEFATT(*)
83  CHARACTER(LEN=*) LIGNE
84 !
85  INTEGER NEXT,PRECAR,LONGLU
86  CHARACTER(LEN=PATH_LEN) CARLU
87 !
88 !-----------------------------------------------------------------------
89 !
90  INTEGER :: NBCHP1
91  parameter(nbchp1=12)
92 !
93  INTEGER I,LCAR,ICOLA,JCOLA,CHAMP(4),LGA,II
94  INTEGER :: LGMOTG(nbchp1),GECHP1(nbchp1)
95  CHARACTER(LEN=1) PTVIRG,QUOTE,GUILLT
96  CHARACTER(LEN=53) :: MESERR(2*nbchp1)
97  CHARACTER(LEN=10) :: MOTCH1(nbchp1)
98  CHARACTER(LEN=PATH_LEN) NULATT,ANALYS,FIELD,FIELD0
99 !
100 !-----------------------------------------------------------------------
101 !
102 ! ******************* DATABASE FOR THE SUBROUTINE **********************
103 !
104 ! DEFINITION OF FIELDS 1
105  parameter( motch1 = (/
106  & 'IN ','OUT ','CAS ','DIC ',
107  & 'QSUB ','LIB ','FORTRAN ','DIROUT ',
108  & 'USER ','ACCT ','PRE ','POST ' /) )
109 ! LENGTHS OF THE STRINGS FOR FIELDS 1 DEFINED ABOVE
110  parameter( lgmotg = (/ 2,3,3,3,4,3,7,6,4,4,3,4 /) )
111 ! CHANGE TO 'NUL;FOR' IF GESTD=.TRUE. ? : 1-YES, 0-NO
112  parameter( gechp1 = (/ 1,1,0,0,0,0,1,1,0,0,0,0 /) )
113 ! NUMBER OF THE FIELDS TO BE GIVEN TO THESE WORDS --> ERROR MESSAGES
114 ! DATA NOCHMP /1,2,3,4,5,6,7,8,9,10,11,12/
115 ! ERROR MESSAGES ASSOCIATED WITH THE FIELD NUMBERS
116  parameter( meserr = (/
117  & 'PAS D''ALLOCATION DE FICHIER D''ENTREE !! ',
118  & 'NO ALLOCATION FOR INPUT FILE !! ',
119  & 'PAS D''ALLOCATION DE FICHIER DE SORTIE !! ',
120  & 'NO ALLOCATION FOR OUTPUT FILE !! ',
121  & 'PAS D''ALLOCATION POUR LE FICHIER CAS !! ',
122  & 'NO ALLOCATION FOR THE STEERING FILE !! ',
123  & 'PAS D''ALLOCATION POUR LE DICTIONNAIRE !! ',
124  & 'NO ALLOCATION FOR THE DICTIONARY !! ',
125  & 'PAS DE COMMANDE CRAY !! ',
126  & 'NO INSTRUCTION FOR CRAY !! ',
127  & 'PAS DE LIBRAIRIE !! ',
128  & 'NO LIBRARY !! ',
129  & 'PAS DE VALEUR POUR LE REPERTOIRE FORTRAN !! ',
130  & 'NO VALUE FOR THE FORTRAN DIRECTORY !! ',
131  & 'PAS DE VALEUR POUR LE REPERTOIRE DE SORTIE !! ',
132  & 'NO VALUE FOR THE OUTPUT DIRECTORY !! ',
133  & 'PAS DE COMMANDE CRAY !! ',
134  & 'NO INSTRUCTION FOR CRAY !! ',
135  & 'PAS DE COMMANDE CRAY !! ',
136  & 'NO INSTRUCTION FOR CRAY !! ',
137  & 'PAS DE COMMANDE PRE !! ',
138  & 'NO INSTRUCTION FOR PRE !! ',
139  & 'PAS DE COMMANDE POST !! ',
140  & 'NO INSTRUCTION FOR POST !! ' /) )
141 !
142 !***********************************************************************
143 ! RCS AND SCCS MARKING
144 !
145 !***********************************************************************
146 !
147 ! INITIALISES
148 !
149  ptvirg = ';'
150  quote = ''''
151  guillt = '"'
152  deflu = 0
153 !
154 100 deflu = deflu +1
155  IF(.NOT.(luign)) THEN
156  defatt(deflu)=carlu(lcar,icol,ligne,quote,motcle,SIZE,motign,
157  & lonign,nmaxr,nficda,len(defatt(deflu)))
158  ELSE
159  nulatt = carlu(lcar,icol,ligne,quote,motcle,SIZE,motign,
160  & lonign,nmaxr,nficda,len(nulatt))
161  ENDIF
162 !
163  icol = next(icol+1,ligne)
164 !
165  IF (ligne(icol:icol) .EQ. ptvirg) GO TO 100
166 !
167 ! NO ANALYSIS IF TO BE IGNORED ...
168  IF (luign) GO TO 1300
169 !
170  IF (deflu .LT. itai) THEN
171  erreur = .true.
172  WRITE(lu,*)'FOR THE KEY-WORD : ', param(1:longu)
173  WRITE(lu,*)'NOT ENOUGH DATAS DEFINED FOR SUBMIT...'
174  WRITE(lu,*)' '
175  GO TO 1300
176  ENDIF
177 !
178 ! EXAMINES THE SUBMIT FIELDS
179 !
180  DO i = 1 , deflu
181  200 icola = 0
182  analys = defatt(i)
183 !
184 ! *** FIELD 1 ***
185 !
186  lga = max(longlu(analys),1)
187  IF (analys(icola+1:icola+1).EQ.';') THEN
188  lcar = 0
189  ELSE
190  jcola = precar(icola+1,analys,';',';',';')
191  lcar = longlu(analys(icola+1:jcola-1))
192  IF (lcar.GT.0) THEN
193  field0 = carlu(lcar,icola,analys,guillt,motcle,SIZE,motign,
194  & lonign,nmaxr,nficda,len(field0))
195  lcar = longlu(field0(1:lcar))
196  ENDIF
197  ENDIF
198  IF (lcar.LE.0) THEN
199  WRITE(lu,*)'FOR THE KEY-WORD : ', param(1:longu)
200  WRITE(lu,*)'INVALID SUBMIT : ',analys(1:lga)
201  WRITE(lu,*)'NO FIRST FIELD !!'
202  erreur = .true.
203  GO TO 1300
204  ENDIF
205  IF (erreur) GO TO 1300
206  field = field0
207  CALL majus(field)
208 !
209  champ(1)=100
210  DO ii=1,nbchp1
211  IF (lcar.EQ.lgmotg(ii).AND.
212  & field(1:min(lcar,10)).EQ.motch1(ii)(1:min(lcar,10))) THEN
213  IF (gestd.AND.gechp1(ii).EQ.1) THEN
214  defatt(i) = 'NUL;FOR'//defatt(i)(jcola+4:max(lga,jcola+4))
215  GO TO 200
216  ELSE
217 ! CHAMP(1)=NOCHMP(II)
218  champ(1)=ii
219  GOTO 400
220  ENDIF
221  ENDIF
222  ENDDO ! II
223 !
224 ! *** FIELD 2 ***
225 !
226 400 icola = jcola
227  IF (icola.GE.longli) THEN
228  lcar = 0
229  ELSEIF (analys(icola+1:icola+1).EQ.';') THEN
230  lcar = 0
231  ELSE
232  jcola = precar(icola+1,analys,';',';',';')
233  lcar = longlu(analys(icola+1:jcola-1))
234  IF (lcar.GT.0) THEN
235  field0 = carlu(lcar,icola,analys,guillt,motcle,SIZE,motign,
236  & lonign,nmaxr,nficda,len(field0))
237  lcar = longlu(field0(1:lcar))
238  ENDIF
239  ENDIF
240  IF (lcar.LE.0) THEN
241  WRITE(lu,*)'FOR THE KEY-WORD : ', param(1:longu)
242  WRITE(lu,*)'INVALID SUBMIT : ',analys(1:lga)
243  WRITE(lu,*)'NO SECOND FIELD !! '
244  erreur = .true.
245  GO TO 1300
246  ENDIF
247 !
248  IF (erreur) GO TO 1300
249  field = field0
250  CALL majus(field)
251 !
252 ! SUPPRESSION OF AN OBSOLETE CONTROL
253 ! THE 2ND SUBMIT FIELD CAN BE DIFFERENT FROM FOR...
254 ! (CASE OF SUBIEF)
255 !
256  IF (field(1:3).EQ.'OPT') THEN
257  champ(2) = 1
258  ELSEIF (field(1:3).EQ.'REQ') THEN
259  champ(2) = 2
260  ELSE
261  champ(2) = 3
262  ENDIF
263 !
264 ! ASSIGNS THE INITIAL VALUE TO TROUVE ACCORDING TO CHAMP(1)
265  IF (itai.LE.1.AND.i.LE.max(itai,1)) THEN
266  IF (champ(2) .EQ. 1) trouve(ntyp,indx)=3
267  IF (champ(2) .EQ. 3) trouve(ntyp,indx)=6
268  IF (champ(1) .EQ. 4) trouve(ntyp,indx)=9
269  ENDIF
270 !
271 ! IF THE 1ST FIELD IS NOT KNOWN, IGNORES THE REST
272 ! TO BE COMPATIBLE WITH EVOLUTIONS OF THE LAUNCHER
273  IF (champ(1).EQ.100) cycle
274 !
275 ! *** FIELD 3 ***
276 !
277  icola = jcola
278  IF (jcola.GE.longli) THEN
279  WRITE(lu,*)'FOR THE KEY-WORD : ', param(1:longu)
280  WRITE(lu,*)'INVALID SUBMIT : ',analys(1:lga)
281  WRITE(lu,*)'NO THIRD FIELD !! '
282  erreur = .true.
283  GO TO 1300
284  ENDIF
285  jcola = precar(icola+1,analys,';',';',';')
286 !
287 ! *** FIELD 4 ***
288 !
289  icola = jcola
290  IF (icola.GE.longli) THEN
291  lcar = 0
292  ELSEIF (analys(icola+1:icola+1).EQ.';') THEN
293  lcar = 0
294  ELSE
295  jcola = precar(icola+1,analys,';',';',';')
296  lcar = longlu(analys(icola+1:jcola-1))
297  ENDIF
298  IF (lcar.LE.0) THEN
299  WRITE(lu,*)'FOR THE KEY-WORD : ', param(1:longu)
300  WRITE(lu,*)'INVALID SUBMIT : ',analys(1:lga)
301  erreur = .true.
302 !
303 ! WRITES THE CORRESPONDING ERROR MESSAGE
304  WRITE(lu,*) meserr(2*(champ(1)-1)+lng)
305  GO TO 1300
306  ENDIF
307  ENDDO ! I
308 !
309 !-----------------------------------------------------------------------
310 !
311 1300 CONTINUE
312  RETURN
313  END
subroutine influ(ICOL, LIGNE, DEFATT, TROUVE, LUIGN, MOTCLE, SIZE, MOTIGN, LONIGN, NMAXR, NFICDA, GESTD)
Definition: influ.f:8
integer function precar(ICOL, LIGNE, CAR1, CAR2, CAR3)
Definition: precar.f:7
character(len=path_len) function carlu(LCAR, ICOL, LIGNE, EXTREM, MOTCLE, SIZE, MOTIGN, LONIGN, NMAXR, NFICDA, LGVAR)
Definition: carlu.f:8
integer function next(ICOL, LIGNE)
Definition: next.f:7
integer function longlu(LIGNE)
Definition: longlu.f:7
subroutine majus(CHAINE)
Definition: majus.f:7
logical erreur
Y. AUDOUIN (EDF LAB, LNHE) 09/05/2014 V7P0 First version.