1 subroutine vcmex2 ( maconf,
2 > nhnofa, famnoe, notfno, nofano, cofano,
3 > posnoe, inxnoe, pcfano,
4 > nharfa, famare, notfar, nofaar, cofaar,
5 > posare, inxare, pcfaar,
6 > nhtrfa, famtri, notftr, nofatr, cofatr,
7 > postri, inxtri, pcfatr,
8 > nhqufa, famqua, notfqu, nofaqu, cofaqu,
9 > posqua, inxqua, pcfaqu,
12 > ulsort, langue, codret )
13 c ______________________________________________________________________
17 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
19 c Version originale enregistree le 18 juin 1996 sous le numero 96036
20 c aupres des huissiers de justice Simart et Lavoir a Clamart
21 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
22 c aupres des huissiers de justice
23 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
25 c HOMARD est une marque deposee d'Electricite de France
31 c ______________________________________________________________________
33 c aVant adaptation - Conversion de Maillage EXtrude - phase 2
35 c Determine les nouvelles familles pour les mailles du maillage 2D
36 c ______________________________________________________________________
38 c . nom . e/s . taille . description .
39 c .____________________________________________________________________.
40 c . maconf . e . 1 . conformite du maillage .
42 c . . . . 1 : non-conforme avec au minimum 2 aretes .
43 c . . . . non decoupees en 2 par face .
44 c . . . . 2 : non-conforme avec 1 seul noeud .
45 c . . . . pendant par arete .
46 c . . . . 3 : non-conforme fidele a l'indicateur .
47 c . . . . 10 : non-conforme sans autre connaissance .
48 c . . . . -1 : conforme, avec des boites pour les .
49 c . . . . quadrangles, hexaedres et pentaedres .
50 c . . . . -2 : non-conforme avec au maximum 1 arete .
51 c . . . . decoupee en 2 (boite pour les .
52 c . . . . quadrangles, hexaedres et pentaedres) .
53 c . . . . 10 : non-conforme sans autre connaissance .
54 c . nhnofa . e . char8 . objet decrivant les familles des noeuds .
55 c . famnoe . es . nbnoto . famille des noeuds .
56 c . notfno . e . 1 . nombre d'origine des carac. des f. noeuds .
57 c . nofano . e . 1 . nombre d'origine de familles de noeuds .
58 c . cofano . e . notfno*. codes d'origine des familles des noeuds .
59 c . . . nofano . 1 : famille MED .
60 c . posnoe . e . nbnoto . position des noeuds .
61 c . . . . 0 : face avant .
62 c . . . . 1 : face arriere .
63 c . inxnoe . e .2*nbnoto. informations pour l'extrusion des noeuds .
64 c . . . . 1 : famille du noeud extrude .
65 c . . . . 2 : famille de l'arete perpendiculaire .
66 c . pcfano . s . 1 . familles pour l'extrusion des noeuds .
67 c . nharfa . e . char8 . objet decrivant les familles des aretes .
68 c . famare . es . nbarto . famille des aretes .
69 c . notfar . e . 1 . nombre d'origine des carac. des f. aretes .
70 c . nofaar . e . 1 . nombre d'origine de familles d'aretes .
71 c . cofaar . e . notfar*. codes d'origine des familles des aretes .
72 c . . . nofaar . 1 : famille MED .
73 c . . . . 2 : type de segment .
74 c . . . . 3 : orientation .
75 c . . . . 4 : famille d'orientation inverse .
76 c . . . . 5 : numero de ligne de frontiere .
77 c . . . . > 0 si concernee par le suivi de frontiere.
78 c . . . . <= 0 si non concernee .
79 c . . . . 6 : famille frontiere active/inactive .
80 c . . . . 7 : numero de surface de frontiere .
81 c . posare . e . nbarto . position des aretes .
82 c . . . . 0 : arete avant .
83 c . . . . 1 : arete arriere .
84 c . . . . 2 : arete perpendiculaire .
85 c . inxare . e .4*nbarto. informations pour l'extrusion des aretes .
86 c . . . . 1 : famille de l'arete extrudee .
87 c . . . . 2 : famille du quadrangle perpendiculaire .
88 c . . . . 3 : code du quadrangle dans le volume .
89 c . . . . 4 : quadrangle perpendiculaire .
90 c . pcfaar . s . 1 . familles pour l'extrusion des aretes .
91 c . nhtrfa . e . char8 . objet decrivant les familles des triangles .
92 c . famtri . es . nbtrto . famille des triangles .
93 c . notftr . e . 1 . nombre d'origine des carac. des f. tria. .
94 c . nofatr . e . 1 . nombre d'origine de familles de triangles .
95 c . cofatr . e . notftr*. codes d'origine des familles des triangles .
96 c . . . nofatr . 1 : famille MED .
97 c . . . . 2 : type de triangle .
98 c . . . . 3 : numero de surface de frontiere .
99 c . . . . 4 : famille des aretes internes apres raf.
100 c . postri . e . nbtrto . position des triangles .
101 c . . . . 0 : face avant .
102 c . . . . 1 : face arriere .
103 c . . . . 2 : face perpendiculaire .
104 c . inxtri . e .3*nbtrto. informations pour l'extrusion des triangles.
105 c . . . . 1 : famille du triangle extrude .
106 c . . . . 2 : famille du pentaedre .
107 c . . . . 3 : code du triangle dans le pentaedre .
108 c . pcfatr . s . 1 . familles pour l'extrusion des triangles .
109 c . nhqufa . e . char8 . objet decrivant les familles des quad. .
110 c . famqua . es . nbquto . famille des quadrangles .
111 c . notfqu . e . 1 . nombre d'origine des carac. des f. quad. .
112 c . nofaqu . e . 1 . nombre d'origine de familles de quad. .
113 c . cofaqu . e . notfqu*. codes d'origine des familles des quad. .
114 c . . . nofaqu . 1 : famille MED .
115 c . . . . 2 : type de quadrangle .
116 c . . . . 3 : numero de surface de frontiere .
117 c . . . . 4 : famille des aretes internes apres raf.
118 c . . . . 5 : famille des triangles de conformite .
119 c . . . . 6 : famille de sf active/inactive .
120 c . posqua . e . nbquto . position des quadrangles .
121 c . . . . 0 : face avant .
122 c . . . . 1 : face arriere .
123 c . . . . 2 : face perpendiculaire .
124 c . inxqua . e .3*nbquto. informations pour l'extrusion des quads .
125 c . . . . Pour un quadrangle a l'avant : .
126 c . . . . 1 : famille du quadrangle extrude .
127 c . . . . 2 : famille de l'hexaedre .
128 c . . . . 3 : orientation du quadrangle dans le vol..
129 c . . . . Pour un quadrangle a l'arriere : .
130 c . . . . 1 : inutile .
131 c . . . . 2 : inutile .
132 c . . . . 3 : orientation du quadrangle dans le vol..
133 c . . . . Pour un quadrangle perpendiculaire : .
134 c . . . . 1 : sens de la 1ere compos. de la normale .
135 c . . . . 2 : sens de la 2eme compos. de la normale .
136 c . . . . 3 : orientation du quadrangle dans le vol..
137 c . pcfaqu . s . 1 . familles pour l'extrusion des quadrangles .
138 c . pcfahe . es . 1 . codes des familles des hexaedres .
139 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
140 c . langue . e . 1 . langue des messages .
141 c . . . . 1 : francais, 2 : anglais .
142 c . codret . e . 1 . code de retour des modules .
143 c . . . . 0 : pas de probleme .
144 c . . . . 1 : probleme .
145 c ______________________________________________________________________
148 c 0. declarations et dimensionnement
151 c 0.1. ==> generalites
157 parameter ( nompro = 'VCMEX2' )
189 integer famnoe(nbnoto), notfno, nofano, cofano(notfno,nofano)
190 integer posnoe(nbnoto), inxnoe(2,nbnoto)
191 integer famare(nbarto), notfar, nofaar, cofaar(notfar,nofaar)
192 integer posare(nbarto), inxare(4,nbarto)
193 integer famtri(nbtrto), notftr, nofatr, cofatr(notftr,nofatr)
194 integer postri(nbtrto), inxtri(3,nbtrto)
195 integer famqua(nbquto), notfqu, nofaqu, cofaqu(notfqu,nofaqu)
196 integer posqua(nbquto), inxqua(3,nbquto)
199 character*8 nhnofa, nharfa, nhtrfa, nhqufa
202 integer ulsort, langue, codret
204 c 0.4. ==> variables locales
206 integer iaux, jaux, kaux
209 parameter ( nbmess = 10 )
210 character*80 texte(nblang,nbmess)
212 c 0.5. ==> initialisations
213 c ______________________________________________________________________
221 #ifdef _DEBUG_HOMARD_
222 write (ulsort,texte(langue,1)) 'Entree', nompro
230 #ifdef _DEBUG_HOMARD_
231 49900 format(/,24x,a)
232 write(ulsort,49900) ' famille fa noe ex fa arete'
233 do 4991 , iaux = 1 , nbnoto
234 if ( posnoe(iaux).eq.0 ) then
235 write(ulsort,90012) 'noeud',iaux,famnoe(iaux),
236 > inxnoe(1,iaux),inxnoe(2,iaux)
241 > ' famille fa are ex fa quad code q/vo face perp'
242 do 4992 , iaux = 1 , nbarto
243 if ( posare(iaux).eq.0 ) then
244 write(ulsort,90012) 'arete',iaux,famare(iaux),
245 > inxare(1,iaux),inxare(2,iaux),inxare(3,iaux),inxare(4,iaux)
249 if ( nbtrto.ne.0 ) then
250 write(ulsort,49900) 'famille fa tri ex fa pent code t/pe'
251 do 4993 , iaux = 1 , nbtrto
252 if ( postri(iaux).eq.0 ) then
253 write(ulsort,90012) 'tria',iaux,famtri(iaux),
254 > inxtri(1,iaux),inxtri(2,iaux),inxtri(3,iaux)
260 >'famille position fa qua ex fa hexa code q/vo'
261 do 4994 , iaux = 1 , nbquto
262 write(ulsort,90012) 'quad',iaux,famqua(iaux),posqua(iaux),
263 > inxqua(1,iaux),inxqua(2,iaux),inxqua(3,iaux)
268 c 2. Phase 1 : famille des entites sur la face avant
270 c 2.1. ==> Traitement des noeuds
272 #ifdef _DEBUG_HOMARD_
273 write (ulsort,90002) '2.1. noeuds ; codret', codret
276 if ( codret.eq.0 ) then
281 nctfno = nctfno + ncxfno
282 #ifdef _DEBUG_HOMARD_
283 write (ulsort,texte(langue,3)) 'VCME21-noe', nompro
285 call vcme21 ( iaux, jaux,
286 > kaux, nctfno, nbnoto,
287 > notfno, nofano, cofano,
288 > nhnofa, famnoe, posnoe, inxnoe,
290 > ulsort, langue, codret )
294 c 2.2. ==> Traitement des aretes
296 #ifdef _DEBUG_HOMARD_
297 write (ulsort,90002) '2.2. aretes ; codret', codret
300 if ( codret.eq.0 ) then
305 nctfar = nctfar + ncxfar
306 #ifdef _DEBUG_HOMARD_
307 write (ulsort,texte(langue,3)) 'VCME21-are', nompro
309 call vcme21 ( iaux, jaux,
310 > kaux, nctfar, nbarto,
311 > notfar, nofaar, cofaar,
312 > nharfa, famare, posare, inxare,
314 > ulsort, langue, codret )
318 c 2.3. ==> Traitement des triangles
320 #ifdef _DEBUG_HOMARD_
321 write (ulsort,90002) '2.3. triangles ; codret', codret
324 if ( nbtrto.ne.0 ) then
326 if ( codret.eq.0 ) then
331 nctftr = nctftr + ncxftr
332 #ifdef _DEBUG_HOMARD_
333 write (ulsort,texte(langue,3)) 'VCME21-tri', nompro
335 call vcme21 ( iaux, jaux,
336 > kaux, nctftr, nbtrto,
337 > notftr, nofatr, cofatr,
338 > nhtrfa, famtri, postri, inxtri,
340 > ulsort, langue, codret )
346 c 2.4. ==> Traitement des quadrangles
348 #ifdef _DEBUG_HOMARD_
349 write (ulsort,90002) '2.4. quadrangles ; codret', codret
352 if ( codret.eq.0 ) then
357 nctfqu = nctfqu + ncxfqu
358 #ifdef _DEBUG_HOMARD_
359 write (ulsort,texte(langue,3)) 'VCME21-qua', nompro
361 call vcme21 ( iaux, jaux,
362 > kaux, nctfqu, nbquto,
363 > notfqu, nofaqu, cofaqu,
364 > nhqufa, famqua, posqua, inxqua,
366 > ulsort, langue, codret )
370 cgn call gmprsx(nompro//' - apres Phase 1, noeuds', nhnofa//'.Codes' )
371 cgn call gmprsx(nompro//' - apres Phase 1, aretes', nharfa//'.Codes' )
372 cgn call gmprsx(nompro//' - apres Phase 1, trias', nhtrfa//'.Codes' )
373 cgn call gmprsx(nompro//' - apres Phase 1, quads', nhqufa//'.Codes' )
376 c 3. Phase 2 : Traitement des relations hexaedres/pentaedres
379 #ifdef _DEBUG_HOMARD_
380 write (ulsort,90002) '3. hexa/pent ; codret', codret
383 if ( ( ( maconf.eq.0 ) .or. ( maconf.eq.-1 ) ) .and.
386 if ( codret.eq.0 ) then
388 #ifdef _DEBUG_HOMARD_
389 write (ulsort,texte(langue,3)) 'VCME23', nompro
391 call vcme23 ( nhpefa,
395 > ulsort, langue, codret )
401 cgn call gmprsx(nompro//' - apres Phase 2, quads', nhqufa//'.Codes' )
402 cgn call gmprsx(nompro//' - apres Phase 2, aretes', nhpefa//'.Codes' )
405 c 4. Phase 3 : relation face avant / face arriere
407 c 4.1. ==> Traitement des noeuds
409 #ifdef _DEBUG_HOMARD_
410 write (ulsort,90002) '4.1. noeuds ; codret', codret
413 if ( codret.eq.0 ) then
418 #ifdef _DEBUG_HOMARD_
419 write (ulsort,texte(langue,3)) 'VCME25-noe', nompro
422 > nctfno, ncffno, jaux, kaux,
423 > notfno, nofano, cofano,
426 > ulsort, langue, codret )
430 c 4.2. ==> Traitement des aretes
432 #ifdef _DEBUG_HOMARD_
433 write (ulsort,90002) '4.2. aretes ; codret', codret
436 if ( codret.eq.0 ) then
441 #ifdef _DEBUG_HOMARD_
442 write (ulsort,texte(langue,3)) 'VCME25-are', nompro
445 > nctfar, ncffar, jaux, kaux,
446 > notfar, nofaar, cofaar,
449 > ulsort, langue, codret )
453 c 4.3. ==> Traitement des triangles
455 #ifdef _DEBUG_HOMARD_
456 write (ulsort,90002) '4.3. triangles ; codret', codret
459 if ( nbtrto.ne.0 ) then
461 if ( codret.eq.0 ) then
466 #ifdef _DEBUG_HOMARD_
467 write (ulsort,texte(langue,3)) 'VCME25-tri', nompro
470 > nctftr, ncfftr, jaux, kaux,
471 > notftr, nofatr, cofatr,
474 > ulsort, langue, codret )
480 c 4.4. ==> Traitement des quadrangles
482 #ifdef _DEBUG_HOMARD_
483 write (ulsort,90002) '4.4. quadrangles ; codret', codret
486 if ( nbquto.gt.0 ) then
488 if ( codret.eq.0 ) then
493 #ifdef _DEBUG_HOMARD_
494 write (ulsort,texte(langue,3)) 'VCME25-qua', nompro
497 > nctfqu, ncffqu, jaux, kaux,
498 > notfqu, nofaqu, cofaqu,
501 > ulsort, langue, codret )
507 cgn call gmprsx(nompro//' - apres Phase 3, noeuds', nhnofa//'.Codes' )
508 cgn call gmprsx(nompro//' - apres Phase 3, aretes', nharfa//'.Codes' )
509 cgn call gmprsx(nompro//' - apres Phase 3, trias', nhtrfa//'.Codes' )
510 cgn call gmprsx(nompro//' - apres Phase 3, quads', nhqufa//'.Codes' )
513 c 5. Phase 4 : Traitement des relations quadrangles/triangles
516 #ifdef _DEBUG_HOMARD_
517 write (ulsort,90002) '5. quad/tria ; codret', codret
520 if ( ( maconf.eq.0 ) .or. ( maconf.eq.-1 ) ) then
522 if ( codret.eq.0 ) then
524 #ifdef _DEBUG_HOMARD_
525 write (ulsort,texte(langue,3)) 'VCME27', nompro
527 call vcme27 ( notftr, nofatr, cofatr,
532 > ulsort, langue, codret )
538 cgn call gmprsx(nompro//' - apres Phase 4, trias', nhtrfa//'.Codes' )
539 cgn call gmprsx(nompro//' - apres Phase 4, quads', nhqufa//'.Codes' )
542 c 6. Phase 5 : relation face avant / face perpendiculaire
544 c 6.1. ==> Traitement de l'extrusion des noeuds
546 #ifdef _DEBUG_HOMARD_
547 write (ulsort,90002) '6.1. noeuds ; codret', codret
550 if ( codret.eq.0 ) then
552 #ifdef _DEBUG_HOMARD_
553 write (ulsort,texte(langue,3)) 'VCME29', nompro
555 call vcme29 ( nofaar, cofaar,
559 > ulsort, langue, codret )
563 c 6.2. ==> Traitement de l'extrusion des aretes
565 #ifdef _DEBUG_HOMARD_
566 write (ulsort,90002) '6.2. aretes ; codret', codret
569 if ( codret.eq.0 ) then
571 #ifdef _DEBUG_HOMARD_
572 write (ulsort,texte(langue,3)) 'VCME31', nompro
574 call vcme31 ( nofaqu, cofaqu,
575 > nharfa, pcfaar, famare, posare, inxare,
576 > nhqufa, pcfaqu, inxqua,
577 > ulsort, langue, codret )
585 if ( codret.ne.0 ) then
589 write (ulsort,texte(langue,1)) 'Sortie', nompro
590 write (ulsort,texte(langue,2)) codret
594 #ifdef _DEBUG_HOMARD_
595 write (ulsort,texte(langue,1)) 'Sortie', nompro