1 subroutine uthcai ( lehexa, bindec,
4 > quahex, coquhe, arehex,
6 > tritet, cotrte, aretet,
7 > facpyr, cofapy, arepyr,
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
29 c UTilitaire : Hexaedre coupe par Conformite - Aretes Internes
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . lehexa . e . 1 . numero de l'hexaedre a examiner .
36 c . bindec . e . 1 . binaire du decoupage .
37 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
38 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
39 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
40 c . cotrte . e .nbtecf*4. code des 4 triangles des tetraedres .
41 c . aretet . e .nbteca*6. numeros des 6 aretes des tetraedres .
42 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
43 c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres .
44 c . arehex . e .nbheca12. numeros des 12 aretes des hexaedres .
45 c . filhex . e . nbheto . premier fils des hexaedres .
46 c . fhpyte . e .2*nbheco. fhpyte(1,j) = numero de la 1ere pyramide .
47 c . . . . fille de l'hexaedre k tel que filhex(k) =-j.
48 c . . . . fhpyte(2,j) = numero du 1er tetraedre .
49 c . . . . fils de l'hexaedre k tel que filhex(k) = -j.
50 c . facpyr . e .nbpycf*5. numeros des 5 faces des pyramides .
51 c . cofapy . e .nbpycf*5. codes des faces des pyramides .
52 c . arepyr . e .nbpyca*8. numeros des 8 aretes des pyramides .
53 c . areint . s . nbarhi . les aretes internes a l'hexaedre .
54 c .____________________________________________________________________.
57 c 0. declarations et dimensionnement
60 c 0.1. ==> generalites
77 integer lehexa, bindec
78 integer aretri(nbtrto,3)
79 integer arequa(nbquto,4)
80 integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12)
81 integer filhex(nbheto), fhpyte(2,nbheco)
82 integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
83 integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
86 c 0.4. ==> variables locales
88 integer iaux, jaux, kaux
90 integer listar(12), listaf(12)
91 integer nbarmx, nbarhi
92 integer nbfipy, filspy
93 integer nbfite, filste
94 integer nbfihe, filshe
99 c 1. Les aretes externes de l'hexaedre
102 call utarhe ( lehexa,
104 > arequa, quahex, coquhe,
108 c 2. Les aretes internes de l'hexaedre
109 c On examine les aretes de chaque fils. Si elle est interne, on
110 c l'ajoute a la liste. On s'arrete quand le compte est bon
113 nbarmx = nbarto - nbarin
116 c 2.1. ==> nombre de fils
118 nbfihe = chnhe(bindec)
119 nbfipy = chnpy(bindec)
120 nbfite = chnte(bindec)
121 #ifdef _DEBUG_HOMARD_
122 write (*,90002) 'bindec', bindec
123 write (*,90002) 'nbfihe', nbfihe
124 write (*,90002) 'nbfipy', nbfipy
125 write (*,90002) 'nbfite', nbfite
128 f1hp = filhex(lehexa)
129 cgn write (*,90002) 'f1hp', f1hp
131 c 2.2. ==> Examen des pyramides
133 if ( nbfipy.ne.0 ) then
135 filspy = fhpyte(1,-f1hp)
136 cgn write (*,90002) 'filspy', bindec
137 do 22 , kaux = 1 , nbfipy
138 #ifdef _DEBUG_HOMARD_
139 write (*,90002) '. Pyramide', filspy
141 if ( filspy.le.nbpycf ) then
142 call utarpy ( filspy,
144 > aretri, facpyr, cofapy,
147 do 221 , iaux = 1 , 8
148 listaf(iaux) = arepyr(filspy-nbpycf,iaux)
152 do 222 , iaux = 1 , 8
153 if ( listaf(iaux).gt.nbarmx ) then
154 do 2221 , jaux = 1 , nbarhi
155 if ( listaf(iaux).eq.areint(jaux) ) then
160 areint(nbarhi) = listaf(iaux)
161 if ( nbarhi.eq.chnar(bindec) ) then
173 c 2.3. ==> Examen des tetraedres
175 if ( nbfite.ne.0 ) then
177 filste = fhpyte(2,-f1hp)
178 do 23 , kaux = 1 , nbfite
179 #ifdef _DEBUG_HOMARD_
180 write (*,90002) '. Tetraedre', filste
182 if ( filste.le.nbtecf ) then
183 call utarte ( filste,
185 > aretri, tritet, cotrte,
188 do 231 , iaux = 1 , 4
189 listaf(iaux) = aretet(filste-nbtecf,iaux)
193 do 232 , iaux = 1 , 4
194 if ( listaf(iaux).gt.nbarmx ) then
195 do 2321 , jaux = 1 , nbarhi
196 if ( listaf(iaux).eq.areint(jaux) ) then
201 areint(nbarhi) = listaf(iaux)
202 if ( nbarhi.eq.chnar(bindec) ) then
214 c 2.4. ==> Examen des hexaedres
215 c 2.4.1. ==> Cas du decoupage en 8
217 if ( bindec.eq.4095 ) then
218 #ifdef _DEBUG_HOMARD_
219 write (*,*) '. Hexaedre coupe en 8'
222 do 241 , iaux = 1 , 6
225 lequad = quahex(f1hp,5)
226 elseif ( iaux.eq.2) then
227 lequad = quahex(f1hp,4)
228 elseif ( iaux.eq.3) then
229 lequad = quahex(f1hp,6)
230 elseif ( iaux.eq.4) then
231 lequad = quahex(f1hp+7,1)
232 elseif ( iaux.eq.5) then
233 lequad = quahex(f1hp+7,3)
235 lequad = quahex(f1hp+7,2)
238 areint(nbarhi) = arequa(lequad,2)
242 c 2.4.2. ==> Cas du decoupage de conformite
247 do 242 , kaux = 1 , nbfihe
248 #ifdef _DEBUG_HOMARD_
249 write (*,90002) '. Hexaedre', filshe
251 if ( filshe.le.nbhecf ) then
252 call utarhe ( filshe,
254 > arequa, quahex, coquhe,
257 do 2421 , iaux = 1 , 12
258 listaf(iaux) = arehex(filshe-nbhecf,iaux)
262 do 2422 , iaux = 1 , 12
263 if ( listaf(iaux).gt.nbarmx ) then
264 do 24221 , jaux = 1 , nbarhi
265 if ( listaf(iaux).eq.areint(jaux) ) then
270 areint(nbarhi) = listaf(iaux)
271 if ( nbarhi.eq.chnar(bindec) ) then
284 #ifdef _DEBUG_HOMARD_
285 write (*,90002) '. Nombre d''aretes internes', nbarhi