1 subroutine utcnar ( somare, hetare, famare, decare,
2 > filare, merare, arehom, np2are,
5 > ancare, nouare, nounoe,
6 > nbtrre, nbqure, nbarre,
8 c ______________________________________________________________________
12 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c Version originale enregistree le 18 juin 1996 sous le numero 96036
15 c aupres des huissiers de justice Simart et Lavoir a Clamart
16 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
17 c aupres des huissiers de justice
18 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c HOMARD est une marque deposee d'Electricite de France
26 c ______________________________________________________________________
28 c UTilitaire - Compactage de la Numerotation des ARetes
30 c ______________________________________________________________________
32 c remarque hyper-importante :
33 c quelle que soit l'entite (noeud, arete, triangle ou
34 c tetraedre) son ancien numero est toujours superieur ou
35 c egal a son numero courant : ancent(i) >= i. En effet, la
36 c suppression d'entites entraine des trous dans
37 c la numerotation et tout le but des programmes utcnxx est
38 c de supprimer ces trous.
39 c donc quand on fait tab(i) = tab(ancent(i)), on est certain
40 c que tab(ancent(i)) n'a pas encore ete modifie dans
41 c la boucle sur i croissant. c'est donc bien la bonne
42 c valeur, c'est-a-dire l'ancienne, que l'on met a la
45 c ______________________________________________________________________
47 c . nom . e/s . taille . description .
48 c .____________________________________________________________________.
49 c . somare . e/s .2*nouvar. numeros des extremites d'arete .
50 c . hetare . e/s . nouvar . historique de l'etat des aretes .
51 c . decare . e/s .0:nbarto. table des decisions sur les aretes .
52 c . famare . e/s . nouvar . famille des aretes .
53 c . filare . e/s . nouvar . premiere fille des aretes .
54 c . merare . e/s . nouvar . mere des aretes .
55 c . arehom . e . nouvar . ensemble des aretes homologues .
56 c . np2are . e/s . nouvar . numero des noeuds p2 milieux d'aretes .
57 c . aretri . e/s .nouvtr*3. numeros des 3 aretes des triangles .
58 c . arequa . e/s .nouvqu*4. numeros des 4 aretes des quadrangles .
59 c . posifa . e/s .0:nbarto. pointeur sur tableau facare .
60 c . facare . e/s . nbfaar . liste des faces contenant une arete .
61 c . ancare . e . nouvar . anciens numeros des aretes conservees .
62 c . nouare . e .0:nouvar. nouveaux numeros des aretes conservees .
63 c . nounoe . e .0:nouvno. nouveaux numeros des noeuds conserves .
64 c . nbtrre . e . 1 . nombre de triangles restants .
65 c . nbqure . e . 1 . nombre de quadrangles restants .
66 c . nbarre . e . 1 . nombre d'aretes restantes .
67 c . ancfil . aux . nbarto . ancien tableau des filles .
68 c . ancmer . aux . nbarto . ancien tableau des meres .
69 c ______________________________________________________________________
72 c 0. declarations et dimensionnement
75 c 0.1. ==> generalites
88 integer nbtrre, nbqure, nbarre
90 integer somare(2,nouvar), hetare(nouvar)
91 integer famare(nouvar), decare(0:nbarto)
93 integer filare(nouvar), merare(nouvar)
94 integer arehom(nouvar)
95 integer np2are(nouvar)
97 integer aretri(nouvtr,3), arequa(nouvqu,4)
98 integer posifa(0:nbarto), facare(nbfaar)
100 integer ancare(nouvar), nouare(0:nouvar)
101 integer nounoe(0:nouvno)
103 integer ancfil(nbarto), ancmer(nbarto)
105 c 0.4. ==> variables locales
109 c 0.5. ==> initialisations
110 c ______________________________________________________________________
112 c a partir de maintenant, on travaille avec le nouveau nombre d'entites
113 c du maillage, i.e. uniquement le nombre d'entites n'ayant pas ete
114 c marquees "a disparaitre". il faut neanmoins conserver le nombre
115 c d'entites avant disparitions pour pouvoir, a la fin des remises a
116 c jours des numerotations, compacter les tableaux en memoire.
119 c 1. remise a jour des numerotations des aretes
120 c reconstruction des correspondances directes
123 c 1.1. ==> stockage des anciens tableaux de filiation
125 do 11 ,larete = 1 , nbarto
126 ancfil(larete) = filare(larete)
127 ancmer(larete) = merare(larete)
132 do 12 , larete = 1 , nbarre
134 somare(1,larete) = nounoe(somare(1,ancare(larete)))
135 somare(2,larete) = nounoe(somare(2,ancare(larete)))
137 if ( ancare(larete).ne.larete ) then
139 hetare(larete) = hetare(ancare(larete))
140 famare(larete) = famare(ancare(larete))
141 decare(larete) = decare(ancare(larete))
145 filare(larete) = nouare(ancfil(ancare(larete)))
146 merare(larete) = nouare(ancmer(ancare(larete)))
148 if ( degre .eq. 2 ) then
149 np2are(larete) = nounoe(np2are(ancare(larete)))
154 c 1.3. ==> traitement des homologues
156 if ( homolo.ge.2 ) then
158 do 13 , larete = 1 , nbarre
159 if ( arehom(ancare(larete)) .ge. 0 ) then
160 arehom(larete) = nouare(arehom(ancare(larete)))
162 arehom(larete) = - nouare(abs(arehom(ancare(larete))))
169 c 2. reconstruction des correspondances inverses
172 call utfaa1 ( nbarre, nbtrre, nbqure,
173 > nouvar, nouvtr, nouvqu,
177 call utfaa2 ( nbtrre, nbqure,
180 > nbfaar, posifa, facare )