1 subroutine infovo ( typmes, nufade, nufafi, volint,
4 > hettet, hetpyr, hethex, hetpen,
7 > ulsort, langue, codret )
8 c ______________________________________________________________________
12 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c Version originale enregistree le 18 juin 1996 sous le numero 96036
15 c aupres des huissiers de justice Simart et Lavoir a Clamart
16 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
17 c aupres des huissiers de justice
18 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c HOMARD est une marque deposee d'Electricite de France
26 c ______________________________________________________________________
28 c INFOrmation : VOisins
30 c ______________________________________________________________________
32 c . nom . e/s . taille . description .
33 c .____________________________________________________________________.
34 c . typmes . e . 1 . 0 : message pour les faces .
35 c . . . . 40 : message pour les tetra-penta-hexaedres.
36 c . . . . 50 : message pour les pyramides .
37 c . nufade . e . 1 . numero initial de la liste des faces .
38 c . nufafi . e . 1 . numero final de la liste des faces .
39 c . volint . e . 4** . i,0 : nombre de volumes interdits .
40 c . . . . i,j>0 : numeros des volumes interdits .
41 c . . . . i=1 : tetr, i=2 : hexa, i=3 : pyra, .
42 c . . . . i=4 : pent .
43 c . voltri . e .2*nbtrto. numeros des 2 volumes par triangle .
44 c . . . . voltri(i,k) definit le i-eme voisin de k .
45 c . . . . 0 : pas de voisin .
46 c . . . . j>0 : tetraedre j .
47 c . . . . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
48 c . pypetr . e .2*lgpype. pypetr(1,j) = numero de la pyramide voisine.
49 c . . . . du triangle k tel que voltri(1/2,k) = -j .
50 c . . . . pypetr(2,j) = numero du pentaedre voisin .
51 c . . . . du triangle k tel que voltri(1/2,k) = -j .
52 c . volqua . e .2*nbquto. numeros des 2 volumes par quadrangle .
53 c . . . . volqua(i,k) definit le i-eme voisin de k .
54 c . . . . 0 : pas de voisin .
55 c . . . . j>0 : hexaedre j .
56 c . . . . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
57 c . pypequ . e .2*lgpype. pypequ(1,j) = numero de la pyramide voisine.
58 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
59 c . . . . pypequ(2,j) = numero du pentaedre voisin .
60 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
61 c . hettet . e . nbteto . historique de l'etat des tetraedres .
62 c . hetpyr . e . nbpyto . historique de l'etat des pyramides .
63 c . hethex . e . nbheto . historique de l'etat des hexaedres .
64 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
65 c . trav1a . a . * . tableau de travail numero 1 .
66 c . trav2a . a . * . liste des faces a examiner .
67 c . . . . . numero positif si triangle .
68 c . . . . . numero negatif si quadrangle .
69 c . ulecr . e . 1 . unite logique pour l'ecriture .
70 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
71 c . langue . e . 1 . langue des messages .
72 c . . . . 1 : francais, 2 : anglais .
73 c . codret . es . 1 . code de retour des modules .
74 c . . . . 0 : pas de probleme .
75 c . . . . non nul : probleme .
76 c ______________________________________________________________________
79 c 0. declarations et dimensionnement
82 c 0.1. ==> generalites
88 parameter ( nompro = 'INFOVO' )
111 integer nufade, nufafi
112 integer volint(4,0:*)
113 integer voltri(2,nbtrto), pypetr(2,*)
114 integer volqua(2,nbquto), pypequ(2,*)
115 integer hettet(nbteto)
116 integer hetpyr(nbpyto)
117 integer hethex(nbheto)
118 integer hetpen(nbpeto)
120 integer trav1a(tbdim), trav2a(tbdim)
123 integer ulsort, langue, codret
125 c 0.4. ==> variables locales
127 integer iaux, jaux, kaux
128 integer nument, decafv
130 integer letetr, lehexa, lapyra, lepent
131 integer nbtetr, nbhexa, nbpyra, nbpent
132 integer nbtevr, nbhevr, nbpyvr, nbpevr
133 integer inditv (0:2,0:2,0:2,0:2)
138 parameter ( nbmess = 10 )
139 character*80 texte(nblang,nbmess)
140 c ______________________________________________________________________
150 #ifdef _DEBUG_HOMARD_
151 write (ulsort,texte(langue,1)) 'Entree', nompro
155 texte(1,4) = '(''Examen de'',i10,'' face(s).'')'
156 texte(1,5) = '(''Nombre de '',a,'' interdits :'',i10)'
157 texte(1,6) = '(''.. '',a,''numero'',i10)'
158 texte(1,7) = '(''Nombre de '',a,'' :'',i10)'
160 texte(2,4) = '(''Examination of'',i10,'' face(s).'')'
161 texte(2,5) = '(''Number of '',,a,'' which are forbiden :'',i10)'
162 texte(2,6) = '(''.. '',a,''#'',i10)'
163 texte(2,7) = '(''Number of '',,a,'':'',i10)'
169 #ifdef _DEBUG_HOMARD_
170 write (ulsort,texte(langue,4)) nufafi-nufade+1
171 write (ulsort,90002) 'Numeros',(trav2a(jaux),jaux=nufade,nufafi)
174 c 1.2. ==> indirections dans les messages
176 inditv(1,0,0,0) = 1 + typmes
177 inditv(2,0,0,0) = 2 + typmes
178 inditv(0,1,0,0) = 3 + typmes
179 inditv(0,2,0,0) = 4 + typmes
180 inditv(0,0,1,0) = 5 + typmes
181 inditv(0,0,2,0) = 6 + typmes
182 inditv(0,0,0,1) = 7 + typmes
183 inditv(0,0,0,2) = 8 + typmes
185 cgn print *,(volint(1,iaux), iaux = 0 , volint(1,0) )
186 cgn print *,(volint(2,iaux), iaux = 0 , volint(2,0) )
187 cgn print *,(volint(3,iaux), iaux = 0 , volint(3,0) )
188 cgn print *,(volint(4,iaux), iaux = 0 , volint(4,0) )
191 c 2. decompte des elements de volumes voisins
194 #ifdef _DEBUG_HOMARD_
195 write (ulsort,texte(langue,3)) 'UTVGVA', nompro
197 call utvgv1 ( nufade, nufafi,
200 > nbtetr, nbhexa, nbpyra, nbpent,
202 > ulsort, langue, codret )
205 c 3. filtrage des elements interdits
207 #ifdef _DEBUG_HOMARD_
208 write (ulsort,*) '3. filtrage ; codret = ', codret
211 if ( codret.eq.0 ) then
213 c 3.0. ==> decalage dans le tableau face/volumes (trav1a)
215 decafv = 2 * ( nufafi - nufade + 1 )
217 c 3.1. ==> tetraedres
219 if ( volint(1,0).gt.0 ) then
221 #ifdef _DEBUG_HOMARD_
222 write (ulsort,texte(langue,5)) mess14(langue,3,3), volint(1,0)
223 write (ulsort,90002) 'Numeros',(volint(1,jaux),jaux=1,volint(1,0))
227 do 31 , nument = 1 , nbtetr
228 letetr = trav1a(nument)
229 do 311 , jaux = 1 , volint(1,0)
230 if ( volint(1,jaux).eq.letetr ) then
249 if ( volint(2,0).gt.0 ) then
251 #ifdef _DEBUG_HOMARD_
252 write (ulsort,texte(langue,5)) mess14(langue,3,6), volint(2,0)
253 write (ulsort,90002) 'Numeros',(volint(2,jaux),jaux=1,volint(2,0))
257 do 32 , nument = 1 , nbhexa
258 lehexa = trav1a(decafv+nument)
259 do 321 , jaux = 1 , volint(2,0)
260 if ( volint(2,jaux).eq.lehexa ) then
279 if ( volint(3,0).gt.0 ) then
281 #ifdef _DEBUG_HOMARD_
282 write (ulsort,texte(langue,5)) mess14(langue,3,5), volint(3,0)
283 write (ulsort,90002) 'Numeros',(volint(3,jaux),jaux=1,volint(3,0))
287 do 33 , nument = 1 , nbpyra
288 lapyra = trav1a(2*decafv+nument)
289 do 331 , jaux = 1 , volint(3,0)
290 if ( volint(3,jaux).eq.lapyra ) then
291 iaux = 2*decafv+nument
307 c 3.4. ==> pentaedres
309 if ( volint(4,0).gt.0 ) then
311 #ifdef _DEBUG_HOMARD_
312 write (ulsort,texte(langue,5)) mess14(langue,3,7), volint(4,0)
313 write (ulsort,90002) 'Numeros',(volint(4,jaux),jaux=1,volint(4,0))
317 do 34 , nument = 1 , nbpent
318 lepent = trav1a(3*decafv+nument)
319 do 341 , jaux = 1 , volint(4,0)
320 if ( volint(4,jaux).eq.lepent ) then
321 iaux = 3*decafv+nument
341 c 4.1. ==> tetraedres
343 if ( nbtevr.ne.0 ) then
345 #ifdef _DEBUG_HOMARD_
346 write (ulsort,texte(langue,7)) mess14(langue,3,3), nbtevr
349 write (ulecr,40002) textvo(inditv(iaux,0,0,0))
350 do 41 , nument = 1 , nbtetr
352 letetr = trav1a(iaux)
353 if ( letetr.gt.0 ) then
354 etat = mod(hettet(letetr),100)
355 taux40 = textte(etat)
356 write (ulecr,46000) letetr, taux40
363 if ( nbhevr.ne.0 ) then
365 #ifdef _DEBUG_HOMARD_
366 write (ulsort,texte(langue,7)) mess14(langue,3,6), nbhevr
367 write (ulsort,texte(langue,7)) mess14(langue,3,6), nbhexa
370 write (ulecr,40002) textvo(inditv(0,iaux,0,0))
371 do 42 , nument = 1 , nbhexa
373 lehexa = trav1a(iaux)
374 if ( lehexa.gt.0 ) then
375 etat = mod(hethex(lehexa),1000)
376 if ( etat.le.10 ) then
377 taux40 = texthe(etat)
378 write (ulecr,46000) lehexa, taux40
380 bindec = chbiet(etat)
381 if ( etat.le.22 ) then
382 write (ulecr,46031) lehexa, charde(bindec)(1:3)
383 elseif ( ( etat.ge.285 ) .and. ( etat.le.290 ) ) then
384 taux40 = texthe(etat-244)
385 write (ulecr,46000) lehexa, taux40
387 write (ulecr,46030) lehexa, charde(bindec)(1:27)
396 if ( nbpyvr.ne.0 ) then
398 #ifdef _DEBUG_HOMARD_
399 write (ulsort,texte(langue,7)) mess14(langue,3,5), nbpyvr
402 write (ulecr,40002) textvo(inditv(0,0,iaux,0))
403 do 43 , nument = 1 , nbpyra
404 iaux = 2*decafv+nument
405 lapyra = trav1a(iaux)
406 if ( lapyra.gt.0 ) then
407 etat = mod(hetpyr(lapyra),100)
408 taux40 = textpy(etat)
409 write (ulecr,46000) lapyra, taux40
414 c 4.4. ==> pentaedres
416 if ( nbpevr.ne.0 ) then
418 #ifdef _DEBUG_HOMARD_
419 write (ulsort,texte(langue,7)) mess14(langue,3,7), nbpevr
422 write (ulecr,40002) textvo(inditv(0,0,0,iaux))
423 do 44 , nument = 1 , nbpent
424 iaux = 3*decafv+nument
425 lepent = trav1a(iaux)
426 if ( lepent.gt.0 ) then
427 etat = mod(hetpen(lepent),100)
428 taux40 = textpe(etat)
429 write (ulecr,46000) lepent, taux40
440 if ( codret.ne.0 ) then
444 write (ulsort,texte(langue,1)) 'Sortie', nompro
445 write (ulsort,texte(langue,2)) codret
449 #ifdef _DEBUG_HOMARD_
450 write (ulsort,texte(langue,1)) 'Sortie', nompro