1 subroutine vcmex1 ( famnoe, posnoe, inxnoe,
2 > somare, famare, posare, inxare,
4 > postri, inxtri, pentri,
5 > arequa, famqua, posqua, inxqua, hexqua,
6 > quahex, coquhe, famhex,
7 > facpen, cofape, fampen,
8 > ulsort, langue, codret )
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 aVant adaptation - Conversion de Maillage EXtrude - phase 1
31 c Memorise les informations pour l'extrusion
32 c ______________________________________________________________________
34 c . nom . e/s . taille . description .
35 c .____________________________________________________________________.
36 c . famnoe . e . nbnoto . famille des noeuds .
37 c . posnoe . e . nbnoto . position des noeuds .
38 c . . . . 0 : face avant .
39 c . . . . 1 : face arriere .
40 c . inxnoe . s .2*nbnoto. informations pour l'extrusion des noeuds .
41 c . . . . 1 : famille du noeud extrude .
42 c . . . . 2 : famille de l'arete perpendiculaire .
43 c . somare . e .2*nbarto. numeros des extremites d'arete .
44 c . famare . e . nbarto . famille des aretes .
45 c . posare . e . nbarto . position des aretes .
46 c . . . . 0 : arete avant .
47 c . . . . 1 : arete arriere .
48 c . . . . 2 : arete perpendiculaire .
49 c . inxare . s .4*nbarto. informations pour l'extrusion des aretes .
50 c . . . . 1 : famille de l'arete extrudee .
51 c . . . . 2 : famille du quadrangle perpendiculaire .
52 c . . . . 3 : code du quadrangle dans le volume .
53 c . . . . 4 : quadrangle perpendiculaire .
54 c . famtri . e . nbtrto . famille des triangles .
55 c . postri . e . nbtrto . position des triangles .
56 c . . . . 0 : face avant .
57 c . . . . 1 : face arriere .
58 c . . . . 2 : face perpendiculaire .
59 c . inxtri . s .3*nbtrto. informations pour l'extrusion des triangles.
60 c . . . . 1 : famille du triangle extrude .
61 c . . . . 2 : famille du pentaedre .
62 c . . . . 3 : code du triangle dans le pentaedre .
63 c . pentri . s . nbtrto . pentaedre sur un triangle de la face avant .
64 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
65 c . famqua . e . nbquto . famille des quadrangles .
66 c . posqua . e . nbquto . position des quadrangles .
67 c . . . . 0 : face avant .
68 c . . . . 1 : face arriere .
69 c . . . . 2 : face perpendiculaire .
70 c . inxqua . es .3*nbquto. informations pour l'extrusion des quads .
71 c . . . . Pour un quadrangle a l'avant : .
72 c . . . . 1 : famille du quadrangle extrude .
73 c . . . . 2 : famille de l'hexaedre .
74 c . . . . 3 : orientation du quadrangle dans le vol..
75 c . . . . Pour un quadrangle a l'arriere : .
76 c . . . . 1 : inutile .
77 c . . . . 2 : inutile .
78 c . . . . 3 : orientation du quadrangle dans le vol..
79 c . . . . Pour un quadrangle perpendiculaire : .
80 c . . . . 1 : sens de la 1ere compos. de la normale .
81 c . . . . 2 : sens de la 2eme compos. de la normale .
82 c . . . . 3 : orientation du quadrangle dans le vol..
83 c . hexqua . s . nbquto . hexaedre sur un quadrangle de la face avant.
84 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
85 c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres .
86 c . famhex . e . nbheto . famille des hexaedres .
87 c . facpen . e .nbpecf*5. numeros des faces des pentaedres .
88 c . cofape . e .nbpecf*5. code des 5 faces des pentaedres .
89 c . fampen . e . nbpeto . famille des pentaedres .
90 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
91 c . langue . e . 1 . langue des messages .
92 c . . . . 1 : francais, 2 : anglais .
93 c . codret . es . 1 . code de retour des modules .
94 c . . . . 0 : pas de probleme .
95 c . . . . 1 : probleme .
96 c ______________________________________________________________________
99 c 0. declarations et dimensionnement
102 c 0.1. ==> generalites
108 parameter ( nompro = 'VCMEX1' )
127 integer famnoe(nbnoto)
128 integer posnoe(nbnoto), inxnoe(2,nbnoto)
129 integer somare(2,nbarto), famare(nbarto)
130 integer posare(nbarto), inxare(4,nbarto)
131 integer famtri(nbtrto)
132 integer postri(nbtrto), inxtri(3,nbtrto), pentri(nbtrto)
133 integer arequa(nbquto,4), famqua(nbquto)
134 integer posqua(nbquto), inxqua(3,nbquto), hexqua(nbquto)
135 integer quahex(nbhecf,6), coquhe(nbhecf,6), famhex(nbheto)
136 integer facpen(nbpecf,5), cofape(nbpecf,5), fampen(nbpeto)
138 integer ulsort, langue, codret
140 c 0.4. ==> variables locales
142 integer iaux, jaux, kaux
143 integer iaux1, iaux2, iaux3, iaux4
144 integer lehexa, lepent
145 integer facear, cofaar
146 integer faceav, cofaav
148 integer aretar, aretav, aretpp
149 integer noeuar, noeuav
152 parameter ( nbmess = 10 )
153 character*80 texte(nblang,nbmess)
155 c 0.5. ==> initialisations
156 c ______________________________________________________________________
164 #ifdef _DEBUG_HOMARD_
165 write (ulsort,texte(langue,1)) 'Entree', nompro
174 c 2. Prealables : rien n'est vu
176 #ifdef _DEBUG_HOMARD_
177 write (ulsort,90002) '2. Prealables ; codret', codret
180 do 21 , iaux = 1 , nbarto
184 do 22 , iaux = 1 , nbtrto
188 do 23 , iaux = 1 , nbquto
194 c 3. Examen des hexaedres
196 #ifdef _DEBUG_HOMARD_
197 write (ulsort,90002) '3. hexaedres ; codret', codret
200 if ( codret.eq.0 ) then
202 #ifdef _DEBUG_HOMARD_
203 write (ulsort,90002) 'nbheto', nbheto
206 do 31 , lehexa = 1 , nbheto
208 c 3.1. ==> Bases quadrangulaires
210 cgn write (ulsort,90012) 'faces de l''hexa', lehexa,
211 cgn > ( quahex(lehexa,jaux) , jaux = 1 , 6)
212 cgn write (ulsort,90012) 'faces de l''hexa', lehexa,
213 cgn > ( inxqua(1,quahex(lehexa,jaux)) , jaux = 1 , 6)
214 do 311 , jaux = 1 , 6
215 iaux1 = quahex(lehexa,jaux)
216 if ( posqua(iaux1).eq.0 ) then
218 cofaav = coquhe(lehexa,jaux)
219 elseif ( posqua(iaux1).eq.1 ) then
221 cofaar = coquhe(lehexa,jaux)
224 cgn write (ulsort,90002) '.. faces de base', faceav, facear
226 cgn write (ulsort,90002) '.. quad/hexa', faceav, lehexa
227 inxqua(1,faceav) = famqua(facear)
228 inxqua(2,faceav) = famhex(lehexa)
229 inxqua(3,faceav) = cofaav
232 inxqua(3,facear) = cofaar
233 hexqua(faceav) = lehexa
235 c 3.2. ==> Faces perpendiculaires a l'extrusion
236 c Remarque : une face n'est traitee qu'une fois, inxqua(3,.)<0
238 do 312 , jaux = 1 , 6
240 facepp = quahex(lehexa,jaux)
241 if ( inxqua(3,facepp).lt.0 ) then
243 cgn write (ulsort,90002) 'quad perp', facepp
245 c 3.2.1. ==> reperage des aretes avant et arriere
247 do 3211 , kaux = 1, 4
248 if ( posare(arequa(facepp,kaux)).eq.0 ) then
252 aretav = arequa(facepp,iaux1)
253 aretar = arequa(facepp,per1a4(2,iaux1))
254 cgn write (ulsort,90002) 'aretes av/ar', aretav, aretar
256 c 3.2.2. ==> informations pour les aretes avant et arriere
258 inxare(1,aretav) = famare(aretar)
259 inxare(2,aretav) = famqua(facepp)
260 inxare(3,aretav) = coquhe(lehexa,jaux)
261 inxare(4,aretav) = facepp
263 c 3.2.3. ==> les deux aretes perpendiculaires
265 do 3213 , kaux = 1 , 2
267 c 3.2.3.1. ==> numero de l'arete perpendiculaire
269 if ( kaux.eq.1 ) then
270 iaux2 = per1a4(1,iaux1)
272 iaux2 = per1a4(3,iaux1)
274 aretpp = arequa(facepp,iaux2)
276 if ( inxare(1,aretpp).lt.0 ) then
277 cgn write (ulsort,90002) '.... arete perp 1', aretpp
279 c 3.2.3.2. ==> les deux sommets avant et arriere
281 iaux3 = somare(1,aretpp)
282 iaux4 = somare(2,aretpp)
283 if ( posnoe(iaux3).eq.0 ) then
290 cgn write (ulsort,90002) '.... noeuds av/ar', noeuav, noeuar
291 inxnoe(1,noeuav) = famnoe(noeuar)
292 inxnoe(2,noeuav) = famare(aretpp)
298 c 4.2.4. ==> Code de la face
300 inxqua(3,facepp) = coquhe(lehexa,jaux)
312 c 4. Examen des pentaedres
314 #ifdef _DEBUG_HOMARD_
315 write (ulsort,90002) '4. pentaedres ; codret', codret
318 if ( codret.eq.0 ) then
320 #ifdef _DEBUG_HOMARD_
321 write (ulsort,90002) 'nbpeto', nbpeto
324 do 41 , lepent = 1 , nbpeto
326 c 4.1. ==> Bases triangulaires
328 cgn write (ulsort,90012) 'faces du pentaedre', lepent,
329 cgn > ( facpen(lepent,jaux) , jaux = 1 , 5)
330 cgn write (ulsort,90012) 'faces du pentaedre', lepent,
331 cgn > ( inxtri(1,facpen(lepent,jaux)) , jaux = 1 , 2),
332 cgn > ( inxqua(1,facpen(lepent,jaux)) , jaux = 3 , 5)
333 iaux1 = facpen(lepent,1)
334 iaux2 = facpen(lepent,2)
335 if ( postri(iaux1) .eq.0 ) then
337 cofaav = cofape(lepent,1)
339 cofaar = cofape(lepent,2)
342 cofaav = cofape(lepent,2)
344 cofaar = cofape(lepent,1)
346 cgn write (ulsort,90002) '.. faces de base', faceav, facear
348 cgn write (ulsort,90002) '.. tria/pent', faceav, lepent
349 inxtri(1,faceav) = famtri(facear)
350 inxtri(2,faceav) = fampen(lepent)
351 inxtri(3,faceav) = cofaav
354 inxtri(3,facear) = cofaar
355 pentri(faceav) = lepent
357 c 4.2. ==> Faces perpendiculaires a l'extrusion
358 c Remarque : on ne traite qu'une seule fois, inxqua(3,.)<0
360 do 421 , jaux = 3 , 5
362 facepp = facpen(lepent,jaux)
363 if ( inxqua(3,facepp).lt.0 ) then
365 cgn write (ulsort,90002) '.. quad perp', facepp
367 c 4.2.1. ==> reperage des aretes avant et arriere
369 do 4211 , kaux = 1, 4
370 if ( posare(arequa(facepp,kaux)).eq.0 ) then
374 aretav = arequa(facepp,iaux1)
375 aretar = arequa(facepp,per1a4(2,iaux1))
376 cgn write (ulsort,90002) '.... aretes av/ar', aretav, aretar
378 c 4.2.2. ==> informations pour les aretes avant et arriere
380 inxare(1,aretav) = famare(aretar)
381 inxare(2,aretav) = famqua(facepp)
382 inxare(3,aretav) = cofape(lepent,jaux)
383 inxare(4,aretav) = facepp
385 c 4.2.3. ==> les deux aretes perpendiculaires
387 do 4213 , kaux = 1 , 2
389 c 4.2.3.1. ==> numero de l'arete perpendiculaire
391 if ( kaux.eq.1 ) then
392 iaux2 = per1a4(1,iaux1)
394 iaux2 = per1a4(3,iaux1)
396 aretpp = arequa(facepp,iaux2)
398 if ( inxare(1,aretpp).lt.0 ) then
399 cgn write (ulsort,90002) '.... arete perp 1', aretpp
401 c 4.2.3.2. ==> les deux sommets avant et arriere
403 iaux3 = somare(1,aretpp)
404 iaux4 = somare(2,aretpp)
405 if ( posnoe(iaux3).eq.0 ) then
412 cgn write (ulsort,90002) '.... noeuds av/ar', noeuav, noeuar
413 inxnoe(1,noeuav) = famnoe(noeuar)
414 inxnoe(2,noeuav) = famare(aretpp)
420 c 4.2.4. ==> Code de la face
422 inxqua(3,facepp) = cofape(lepent,jaux)
432 #ifdef _DEBUG_HOMARD_
433 49900 format(/,24x,a)
434 write(ulsort,49900) ' famille fa noe ex fa arete'
435 do 4991 , iaux = 1 , nbnoto
436 if ( posnoe(iaux).eq.0 ) then
437 write(ulsort,90012) 'noeud',iaux,famnoe(iaux),
438 > inxnoe(1,iaux),inxnoe(2,iaux)
443 > ' famille fa are ex fa quad code q/vo face perp'
444 do 4992 , iaux = 1 , nbarto
445 if ( posare(iaux).eq.0 ) then
446 write(ulsort,90012) 'arete',iaux,famare(iaux),
447 > inxare(1,iaux),inxare(2,iaux),inxare(3,iaux)
451 write(ulsort,49900) 'famille fa tri ex fa pent code t/pe'
452 do 4993 , iaux = 1 , nbtrto
453 if ( postri(iaux).eq.0 ) then
454 write(ulsort,90012) 'tria',iaux,famtri(iaux),
455 > inxtri(1,iaux),inxtri(2,iaux),inxtri(3,iaux)
460 >'famille position fa qua ex fa hexa code q/vo'
461 do 4994 , iaux = 1 , nbquto
462 write(ulsort,90012) 'quad',iaux,famqua(iaux),posqua(iaux),
463 > inxqua(1,iaux),inxqua(2,iaux),inxqua(3,iaux)
471 if ( codret.ne.0 ) then
475 write (ulsort,texte(langue,1)) 'Sortie', nompro
476 write (ulsort,texte(langue,2)) codret
480 #ifdef _DEBUG_HOMARD_
481 write (ulsort,texte(langue,1)) 'Sortie', nompro