1 subroutine mmagr6 ( nbduno, nbduar, nbdutr,
2 > tbaux1, tbau30, tbau40,
3 > tbaux2, tbaux5, tbaux6,
6 > aretri, famtri, arequa,
11 > nbtrtn, nbartn, nbnotn,
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 Modification de Maillage - AGRegat - phase 6
35 c Suppression des noeuds, aretes et triangles dupliques
36 c ______________________________________________________________________
38 c . nom . e/s . taille . description .
39 c .____________________________________________________________________.
40 c . nbduno . e . 1 . nombre de duplications de noeuds .
41 c . nbduar . e . 1 . nombre de duplications d'aretes .
42 c . nbdutr . e . 1 . nombre de duplications de triangles .
43 c . tbaux1 . e .4*nbpejs. Pour le i-eme pentaedre de joint simple : .
44 c . . . . (1,i) : numero du triangle a dupliquer .
45 c . . . . (2,i) : numero du joint simple cree .
46 c . . . . (3,i) : tetraedre du cote min(fammed) .
47 c . . . . (4,i) : tetraedre du cote max(fammed) .
48 c . tbau30 . e .8*nbduno. Pour la i-eme duplication de noeud : .
49 c . . . . (1,i) : noeud a dupliquer .
50 c . . . . (2,i) : arete construite sur le noeud .
51 c . . . . (3,i) : noeud cree cote min(fammed) .
52 c . . . . (4,i) : noeud cree cote max(fammed) .
53 c . . . . (5,i) : numero du joint simple cree .
54 c . . . . (6,i) : arete entrant dans le cote 1 .
55 c . . . . (7,i) : arete entrant dans le cote 2 .
56 c . . . . (8,i) : ordre de multiplicite .
57 c . tbau40 . e .6*nbduar. Pour la i-eme duplication d'arete : .
58 c . . . . (1,i) : arete a dupliquer .
59 c . . . . (2,i) : arete creee cote min(fammed) .
60 c . . . . (3,i) : arete creee cote max(fammed) .
61 c . . . . (4,i) : numero du joint simple cree .
62 c . . . . (5,i) : ordre de multiplicite .
63 c . . . . (6,i) : arete d'orientation de joint .
64 c . tbaux2 . -- . nbnoto . auxiliaire .
65 c . tbaux5 . -- . nbarto . auxiliaire .
66 c . tbaux6 . -- . nbtrto . auxiliaire .
67 c . coonoe . es .nbnoto*3. coordonnees des noeuds .
68 c . famnoe . es . nbnoto . famille des noeuds .
69 c . somare . es .2*nbarto. numeros des extremites d'arete .
70 c . famare . es . nbarto . famille des aretes .
71 c . aretri . es .nbtrto*3. numeros des 3 aretes des triangles .
72 c . famtri . es . nbtrto . famille des triangles .
73 c . arequa . es .nbquto*4. numeros des 4 aretes des quadrangle .
74 c . tritet . e/s .nbtecf*4. numeros des 4 triangles des tetraedres .
75 c . facpen . e/s .nbpecf*5. numeros des 5 faces des pentaedres .
76 c . nbnotn . s . 1 . nombre de noeuds total nouveau .
77 c . nbartn . s . 1 . nombre d'aretes total nouveau .
78 c . nbtrtn . s . 1 . nombre de triangles total nouveau .
79 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
80 c . langue . e . 1 . langue des messages .
81 c . . . . 1 : francais, 2 : anglais .
82 c . codret . es . 1 . code de retour des modules .
83 c . . . . 0 : pas de probleme .
84 c ______________________________________________________________________
87 c 0. declarations et dimensionnement
90 c 0.1. ==> generalites
96 parameter ( nompro = 'MMAGR6' )
116 integer nbduno, nbduar, nbdutr
117 integer tbaux1(4,nbdutr), tbau30(8,nbduno), tbau40(6,nbduar)
118 integer tbaux2(nbnoto), tbaux5(nbarto), tbaux6(nbtrto)
119 integer famnoe(nbnoto)
120 integer somare(2,nbarto), famare(nbarto)
121 integer aretri(nbtrto,3), famtri(nbtrto)
122 integer arequa(nbquto,4)
123 integer tritet(nbtecf,4)
124 integer facpen(nbpecf,5)
125 integer anctri(nbtrto), noutri(0:nbtrto)
126 integer ancare(nbarto), nouare(0:nbarto)
127 integer ancnoe(nbnoto), nounoe(0:nbnoto)
128 integer nbtrtn, nbartn, nbnotn
130 double precision coonoe(nbnoto,sdim)
132 integer ulsort, langue, codret
134 c 0.4. ==> variables locales
137 integer lepent, letetr, letria, lequad, larete
139 integer nbarmu, nbnomu
142 parameter ( nbmess = 40 )
143 character*80 texte(nblang,nbmess)
145 c 0.5. ==> initialisations
146 c ______________________________________________________________________
155 #ifdef _DEBUG_HOMARD_
156 write (ulsort,texte(langue,1)) 'Entree', nompro
162 texte(1,31) = '(a,'' Traitement du '',a,i8,'', ordre'',i3)'
164 texte(2,31) = '(a,'' Treatment of the '',a,i8,'', order'',i3)'
166 #ifdef _DEBUG_HOMARD_
167 write (ulsort,texte(langue,8)) mess14(langue,3,-1), nbduno
168 write (ulsort,texte(langue,8)) mess14(langue,3,1), nbduar
169 write (ulsort,texte(langue,8)) mess14(langue,3,2), nbdutr
179 do 211 , iaux = 1 , nbtrto
183 do 212 , iaux = 1 , nbdutr
184 letria = tbaux1(1,iaux)
186 #ifdef _DEBUG_HOMARD_
187 write (ulsort,texte(langue,31)) '.', mess14(langue,1,2),
188 > letria, tbaux6(letria)
194 do 221 , iaux = 1 , nbarto
199 do 222 , iaux = 1 , nbduar
200 larete = tbau40(1,iaux)
201 if ( tbaux5(larete).ge.1 ) then
203 cgn write (ulsort,*)'LARETE',larete
205 tbaux5(larete) = tbaux5(larete) + 1
206 #ifdef _DEBUG_HOMARD_
207 write (ulsort,texte(langue,31)) '.', mess14(langue,1,1),
208 > larete, tbaux5(larete)
214 do 231 , iaux = 1 , nbnoto
219 do 232 , iaux = 1 , nbduno
220 lenoeu = tbau30(1,iaux)
221 if ( tbaux2(lenoeu).ge.1 ) then
223 cgn write (ulsort,*)'LENOEU',lenoeu
225 tbaux2(lenoeu) = tbaux2(lenoeu) +1
226 #ifdef _DEBUG_HOMARD_
227 write (ulsort,texte(langue,31)) '.', mess14(langue,1,-1),
228 > lenoeu, tbaux2(lenoeu)
233 c 3. suppression des entites
235 c 3.1. ==> suppression des triangles
236 #ifdef _DEBUG_HOMARD_
237 write (ulsort,*) '3.1. suppression tria ; codret =', codret
240 if ( codret.eq.0 ) then
245 do 31 , letria = 1 , nbtrto
247 if ( tbaux6(letria).gt.0 ) then
254 anctri(nbtrtn) = letria
255 noutri(letria) = nbtrtn
261 if ( nbtrtn+nbdutr.ne.nbtrto ) then
264 cgn print*,nbtrtn,nbdutr,nbtrto
268 c 3.2. ==> suppression des aretes
269 #ifdef _DEBUG_HOMARD_
270 write (ulsort,*) '3.2. suppression aret ; codret =', codret
273 if ( codret.eq.0 ) then
278 do 32 , larete = 1 , nbarto
280 if ( tbaux5(larete).gt.0 ) then
287 ancare(nbartn) = larete
288 nouare(larete) = nbartn
291 cgn write (ulsort,*) larete,tbaux5(larete),nbartn
295 if ( nbartn+nbduar-nbarmu.ne.nbarto ) then
297 write (ulsort,*) nbartn,nbduar,nbarmu,nbarto
299 cgn write (ulsort,*) nbartn,nbduar,nbarmu,nbarto
303 c 3.3. ==> suppression des noeuds
304 #ifdef _DEBUG_HOMARD_
305 write (ulsort,*) '3.3. suppression noeuds ; codret =', codret
308 if ( codret.eq.0 ) then
313 do 33 , lenoeu = 1 , nbnoto
315 if ( tbaux2(lenoeu).gt.0 ) then
322 ancnoe(nbnotn) = lenoeu
323 nounoe(lenoeu) = nbnotn
329 if ( nbnotn+nbduno-nbnomu.ne.nbnoto ) then
331 write (ulsort,*) nbnotn,nbduno,nbnomu,nbnoto
333 cgn write (ulsort,*) nbnotn,nbduno,nbnomu,nbnoto
338 c 4. compactage des numerotations
340 c 4.1. ==> compactage des triangles
341 #ifdef _DEBUG_HOMARD_
342 write (ulsort,*) '4.1 compactage tria ; codret =', codret
345 if ( codret.eq.0 ) then
347 c 4.1.1. ==> Impact sur la definition des tetraedres
349 do 411 , letetr = 1 , nbteto
351 do 4111 , iaux = 1 , 4
352 tritet(letetr,iaux) = noutri(tritet(letetr,iaux))
357 c 4.1.2. ==> Impact sur la definition des pentaedres
359 do 412 , lepent = 1 , nbpeto
361 do 4121 , iaux = 1 , 2
362 facpen(lepent,iaux) = noutri(facpen(lepent,iaux))
367 c 4.1.3. ==> Dans les tableaux des triangles, on ne traite pas :
368 c hettri : toujours = 0
369 c mertri : toujours = 0
370 c filtri : toujours = 0
372 do 413 , letria = 1 , nbtrtn
374 do 4131, iaux = 1 , 3
375 aretri(letria,iaux) = aretri(anctri(letria),iaux)
378 famtri(letria) = famtri(anctri(letria))
384 c 4.2. ==> compactage des aretes
385 #ifdef _DEBUG_HOMARD_
386 write (ulsort,*) '4.2 compactage aret ; codret =', codret
389 if ( codret.eq.0 ) then
391 c 4.2.1. ==> Impact sur la definition des triangles
393 do 421 , letria = 1 , nbtrtn
395 cgn write (ulsort,*) (nouare(aretri(letria,iaux)), iaux = 1 , 3)
396 do 4211, iaux = 1 , 3
397 aretri(letria,iaux) = nouare(aretri(letria,iaux))
402 c 4.2.2. ==> Impact sur la definition des quadrangles
404 do 422 , lequad = 1 , nbquto
406 cgn write (ulsort,*) lequad,(arequa(lequad,iaux), iaux = 1,4)
407 cgn write (ulsort,*) lequad,(nouare(arequa(lequad,iaux)), iaux = 1,4)
408 do 4221, iaux = 1 , 4
409 arequa(lequad,iaux) = nouare(arequa(lequad,iaux))
414 c 4.2.3. ==> Dans les tableaux des aretes, on ne traite pas :
415 c hetare : toujours = 0
416 c merare : toujours = 0
417 c filare : toujours = 0
419 do 423 , larete = 1 , nbartn
421 cgn write (ulsort,*) larete
422 cgn write (ulsort,*) ancare(larete)
423 somare(1,larete) = somare(1,ancare(larete))
424 somare(2,larete) = somare(2,ancare(larete))
426 famare(larete) = famare(ancare(larete))
432 c 4.3 ==> compactage des noeuds
433 #ifdef _DEBUG_HOMARD_
434 write (ulsort,*) '4.3. compactage noeuds ; codret =', codret
437 c 4.3.1. ==> Impact sur la definition des aretes
439 if ( codret.eq.0 ) then
441 do 431 , larete = 1 , nbartn
443 #ifdef _DEBUG_HOMARD_
444 write (ulsort,texte(langue,4)) ' ', mess14(langue,1,1), larete
446 iaux = nounoe(somare(1,larete))
447 jaux = nounoe(somare(2,larete))
448 somare(1,larete) = min(iaux,jaux)
449 somare(2,larete) = max(iaux,jaux)
453 c 4.3.2. ==> Dans les tableaux des noeuds, on ne traite pas :
454 c hetnoe : toujours = 1
455 c arenoe : toujours = 0
457 do 432 , lenoeu = 1 , nbnotn
458 #ifdef _DEBUG_HOMARD_
459 write (ulsort,texte(langue,4)) ' ', mess14(langue,1,-1), lenoeu
462 if ( ancnoe(lenoeu).ne.lenoeu ) then
464 do 4321, iaux = 1 , sdim
465 coonoe(lenoeu,iaux) = coonoe(ancnoe(lenoeu),iaux)
468 famnoe(lenoeu) = famnoe(ancnoe(lenoeu))
480 if ( codret.ne.0 ) then
484 write (ulsort,texte(langue,1)) 'Sortie', nompro
485 write (ulsort,texte(langue,2)) codret
489 #ifdef _DEBUG_HOMARD_
490 write (ulsort,texte(langue,1)) 'Sortie', nompro