1 subroutine vcme22 ( typenh, nument, cofxeo,
2 > nbinfx, nctfen, nbenti,
3 > notfen, nofaen, cofaen,
4 > nbfae0, nbfaen, cfaent,
5 > fament, posent, inxent,
6 > ulsort, langue, codret )
7 c ______________________________________________________________________
11 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
13 c Version originale enregistree le 18 juin 1996 sous le numero 96036
14 c aupres des huissiers de justice Simart et Lavoir a Clamart
15 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
16 c aupres des huissiers de justice
17 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
19 c HOMARD est une marque deposee d'Electricite de France
25 c ______________________________________________________________________
27 c aVant adaptation - Conversion de Maillage Extrude - phase 22
29 c Determine les familles pour un type de mailles de la face avant
30 c ______________________________________________________________________
32 c . nom . e/s . taille . description .
33 c .____________________________________________________________________.
34 c . typenh . e . 1 . type d'entites .
35 c . . . . -1 : noeuds .
36 c . . . . 0 : mailles-points .
37 c . . . . 1 : segments .
38 c . . . . 2 : triangles .
39 c . . . . 3 : tetraedres .
40 c . . . . 4 : quadrangles .
41 c . . . . 5 : pyramides .
42 c . . . . 6 : hexaedres .
43 c . . . . 7 : pentaedres .
44 c . nument . es . 1 . numero de la derniere entite traitee .
45 c . cofxeo . e . 1 . orientation de l'entite comme face/volume .
46 c . nbinfx . e . 1 . nombre d'informations pour inxent .
47 c . nctfen . e . 1 . nombre de caracteristique des f. entite .
48 c . nbenti . e . 1 . nombre d'entites .
49 c . notfen . e . 1 . nombre d'origine des carac. des f. entite .
50 c . nofaen . e . 1 . nombre d'origine de familles de l'entite .
51 c . cofaen . e . notfen*. codes d'origine des familles de l'entite .
53 c . fament . e . nbenti . famille des entites .
54 c . posent . e . nbenti . position des entites .
55 c . . . . 0 : face avant .
56 c . . . . 1 : face arriere .
57 c . . . . 2 : perpendiculaire .
58 c . inxent . e . nbinfx*. informations pour l'extrusion des entites .
59 c . . . nbenti . 1 : famille de l'entite extrudee .
60 c . . . . 2 : famille de l'entite perpendiculaire .
61 c . . . . Si triangle ou quadrangle : .
62 c . . . . 3 : code de la face dans le volume .
63 c . nbfae0 . e . 1 . nombre de familles pour le dimensionnement .
64 c . nbfaen . es . 1 . nombre de familles enregistrees .
65 c . cfaent . es . nctfen*. codes des familles d'entites .
66 c . . . nbfaen . 1 : famille MED .
67 c . . . . si maille-point : .
68 c . . . . 2 : type de maille-point .
69 c . . . . 3 : famille des sommets .
70 c . . . . si arete : .
71 c . . . . 2 : type de segment .
72 c . . . . 3 : orientation .
73 c . . . . 4 : famille d'orientation inverse .
74 c . . . . 5 : numero de ligne de frontiere .
75 c . . . . > 0 si concernee par le suivi de frontiere.
76 c . . . . <= 0 si non concernee .
77 c . . . . 6 : famille frontiere active/inactive .
78 c . . . . 7 : numero de surface de frontiere .
79 c . . . . + l : appartenance a l'equivalence l .
80 c . . . . si triangle : .
81 c . . . . 2 : type de triangle .
82 c . . . . 3 : numero de surface de frontiere .
83 c . . . . 4 : famille des aretes internes apres raf.
84 c . . . . + l : appartenance a l'equivalence l .
85 c . . . . si quadrangle : .
86 c . . . . 2 : type de quadrangle .
87 c . . . . 3 : numero de surface de frontiere .
88 c . . . . 4 : famille des aretes internes apres raf.
89 c . . . . 5 : famille des triangles de conformite .
90 c . . . . 6 : famille de sf active/inactive .
91 c . . . . + l : appartenance a l'equivalence l .
92 c . . . . si extrusion et noeud/arete/tria/quad : .
93 c . . . . n+1 : famille de l'entite extrudee .
94 c . . . . n+2 : famille de l'entite perpendiculaire .
95 c . . . . si extrusion et triangle ou quadrangle : .
96 c . . . . n+3 : code de la face dans le volume .
97 c . . . . si extrusion : .
98 c . . . . n+3/4 : position de l'entite .
99 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
100 c . langue . e . 1 . langue des messages .
101 c . . . . 1 : francais, 2 : anglais .
102 c . codret . e . 1 . code de retour des modules .
103 c . . . . 0 : pas de probleme .
104 c . . . . 1 : probleme .
105 c ______________________________________________________________________
108 c 0. declarations et dimensionnement
111 c 0.1. ==> generalites
117 parameter ( nompro = 'VCME22' )
131 integer typenh, nument
133 integer nbinfx, nctfen, nbenti
134 integer notfen, nofaen, cofaen(notfen,nofaen)
135 integer nbfae0, nbfaen, cfaent(nctfen,nbfae0)
137 integer fament(nbenti), posent(nbenti), inxent(nbinfx,nbenti)
139 integer ulsort, langue, codret
141 c 0.4. ==> variables locales
143 integer iaux, jaux, kaux
144 integer lentit, entdeb
150 parameter ( nbmess = 10 )
151 character*80 texte(nblang,nbmess)
153 c 0.5. ==> initialisations
154 c ______________________________________________________________________
162 #ifdef _DEBUG_HOMARD_
163 write (ulsort,texte(langue,1)) 'Entree', nompro
169 texte(1,4) = '(''Familles d''''extrusion des '',a)'
171 texte(2,4) = '(''Description of families of extruded '',a)'
173 #ifdef _DEBUG_HOMARD_
174 write (ulsort,texte(langue,4)) mess14(langue,3,typenh)
175 write (ulsort,90002) 'nument', nument
176 write (ulsort,90002) 'nbinfx', nbinfx
177 write (ulsort,90002) 'nctfen', nctfen
178 write (ulsort,90002) 'nbenti', nbenti
179 write (ulsort,90002) 'notfen', notfen
180 write (ulsort,90002) 'nofaen', nofaen
181 write (ulsort,90002) 'nbfae0', nbfae0
182 write (ulsort,90002) 'nbfaen', nbfaen
185 #ifdef _DEBUG_HOMARD_
188 > 'Informations d''extrusion des ', mess14(langue,3,typenh)
189 if ( typenh.eq.-1 ) then
190 write(ulsort,49900) ' famille fa noe ex fa arete'
191 elseif ( typenh.eq.1 ) then
193 > ' famille fa are ex fa quad code q/vo face perp'
194 elseif ( typenh.eq.2 ) then
195 write(ulsort,49900) 'famille fa tri ex fa pent code t/pe'
198 > 'famille position fa qua ex fa hexa code q/vo'
200 do 4991 , lentit = 1 , nbenti
201 if ( posent(lentit).eq.0 ) then
203 > mess14(langue,2,typenh),lentit,fament(lentit),
204 > (inxent(jaux,lentit),jaux=1,nbinfx)
207 write (ulsort,*) 'Codes des familles d''origine des ',
208 > mess14(langue,3,typenh)
209 do 5991 , iaux = 1 , nofaen
210 write(ulsort,90012) 'Famille origine', iaux,
211 > (cofaen(jaux,iaux),jaux=1,notfen)
218 c 2. Creation des premieres familles, libres
219 c Dans l'ordre : famille a l'avant, a l'arriere, perpendiculaire
221 #ifdef _DEBUG_HOMARD_
222 write (ulsort,90002) '2. famille libre ; codret', codret
225 if ( nbfaen.eq.0 ) then
227 if ( typenh.eq.-1 .or. typenh.eq.2 ) then
233 do 21 , iaux = 1 , kaux
235 c 2.1. ==> La famille libre de base
238 do 211 , jaux = 1 , notfen
239 cfaent(jaux,nbfaen) = cofaen(jaux,1)
242 if ( iaux.eq.1 ) then
243 do 2121 , jaux = notfen+1 , nctfen-1
244 cfaent(jaux,nbfaen) = 1
247 do 2122 , jaux = notfen+1 , nctfen-1
248 cfaent(jaux,nbfaen) = 0
252 c Pour les faces, on met un code 1 pour la relation
254 if ( typenh.ge.2 ) then
255 cfaent(cofxeo,nbfaen) = 1
258 c Pour les quadrangles, on met un code 1 pour la 1ere
259 c composante de la normale
260 if ( typenh.ge.4 ) then
261 cfaent(cofxqt,nbfaen) = 1
265 cfaent(nctfen,nbfaen) = iaux-1
266 cgn write (ulsort,90002) '.. Creation de la famille libre', nbfaen
267 cgn write (ulsort,90005) '.. avec',
268 cgn > (cfaent(jaux,nbfaen),jaux=1,nctfen)
275 c 3. Parcours des entites
277 #ifdef _DEBUG_HOMARD_
278 write (ulsort,90002) '3. parcours ; codret', codret
281 if ( typenh.le.1 ) then
283 elseif ( typenh.eq.2 ) then
288 cgn write (ulsort,90002) 'posmax', posmax
291 do 30 , lentit = entdeb, nbenti
293 if ( posent(lentit).le.posmax ) then
294 cgn write (ulsort,90012) '. Famille du '//mess14(langue,1,typenh),
295 cgn > lentit, fament(lentit)
296 cgn write (ulsort,90002) '.. position', posent(lentit)
298 c 3.1. ==> Les caracteristiques de l'entite courante
299 c 3.1.1. ==> On commence par les caracteristiques d'origine
300 c de la famille de l'entite courante
302 do 311 , iaux = 1 , notfen
303 caract(iaux) = cofaen(iaux,fament(lentit))
306 c 3.1.2. ==> On complete par les proprietes de l'extrusion
307 c Remarque : dans le cas des aretes, la derniere information,
308 c code de la face perpendiculaire dans le volume,
309 c est ecrasee par la position. Elle sera utilisee
312 do 312 , iaux = 1 , nbinfx
313 caract(notfen+iaux) = inxent(iaux,lentit)
316 c 3.1.3. ==> Position de l'entite
318 caract(nctfen) = posent(lentit)
319 cgn write (ulsort,90005) 'Caract.',(caract(iaux),iaux=1,nctfen)
321 c 3.2. ==> Recherche d'une situation analogue
323 do 32 , iaux = 1 , nbfaen
325 do 321 , jaux = 1 , nctfen
326 if ( cfaent(jaux,iaux).ne.caract(jaux) ) then
332 cgn write (ulsort,90002) '.. Correspond a la famille', nufaex
337 c 3.3. ==> Creation d'une nouvelle famille
338 c 3.3.1. ==> S'il n'y a plus de places, on sort et on recommencera
341 if ( nbfaen.ge.nbfae0-1 ) then
347 c 3.3.2. ==> Creation
351 c 3.3.2.1. ==> La famille avec les memes caracteristiques
354 cgn write (ulsort,90002) '.. Creation de la famille', nbfaen
355 cgn write (ulsort,90005) '.. avec',(caract(iaux),iaux=1,nctfen)
356 do 3321 , iaux = 1 , nctfen
357 cfaent(iaux,nbfaen) = caract(iaux)
361 c 3.3.2.2. ==> Pour les aretes, la famille avec l'orientation inverse
363 if ( typenh.eq.1 ) then
365 if ( cfaent(coorfa,nbfaen).ne.0 ) then
368 cgn write (ulsort,90015) '.. Creation de la famille', nbfaen,
369 cgn > ' d''orientation opposee'
370 do 3322 , iaux = 1 , nctfen
371 cfaent(iaux,nbfaen) = caract(iaux)
373 cfaent(coorfa,nbfaen) = -cfaent(coorfa,nbfaen-1)
374 cfaent(cofifa,nbfaen ) = nbfaen-1
375 cfaent(cofifa,nbfaen-1) = nbfaen
379 cfaent(cofifa,nbfaen) = nbfaen
387 c 3.4. ==> Enregistrement de la nouvelle famille pour l'entite
391 fament(lentit) = nufaex
399 #ifdef _DEBUG_HOMARD_
400 write (ulsort,90002) 'A la sortie de '//nompro//', nbfaen', nbfaen
401 if ( typenh.eq.4 ) then
402 write (ulsort,*) '... Codes des familles des ',
403 > mess14(langue,3,typenh)
404 do 5992 , iaux = 1 , abs(nbfaen)
405 write(ulsort,90022) 'Famille', iaux,
406 > (cfaent(jaux,iaux),jaux=1,nctfen)
415 if ( codret.ne.0 ) then
419 write (ulsort,texte(langue,1)) 'Sortie', nompro
420 write (ulsort,texte(langue,2)) codret
424 #ifdef _DEBUG_HOMARD_
425 write (ulsort,texte(langue,1)) 'Sortie', nompro