1 subroutine sfbatt ( nn, sn, tridec,
3 > somare, facare, posifa,
4 > filtri, aretri, hettri )
6 c Attention : ce decoupage ne permet plus de respecter la regle
7 c de placement du fils aine d'un triangle au centre
8 c du dit triangle. Cela peut affecter les interpolations
9 c de solutions aux points de Gauss.
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 Suivi de Frontiere - BAscule d'aretes pour Triangle - Traitement
35 c ______________________________________________________________________
37 c . nom . e/s . taille . description .
38 c .____________________________________________________________________.
39 c . nn . e . 1 . noeud projete .
40 c . sn . e . 1 . noeud oppose .
41 c . tridec . e . 1 . triangle decoupe dont on va modifier les .
43 c . inloc . e . 1 . position locale de l'arete dont le noeud .
44 c . . . . est projete (i.e. arete frontiere de ) .
45 c . iploc . e . 1 . position locale d'arete .
46 c . iqloc . e . 1 . position locale d'arete .
47 c . somare . es .2*nbarto. numeros des extremites d'arete .
48 c . facare . es . nbfaar . liste des faces contenant une arete .
49 c . posifa . e . nbarto . pointeur sur tableau facare .
50 c . filtri . e . nbtrto . premier fils des triangles .
51 c . aretri . es .nbtrto*3. numeros des 3 aretes des triangles .
52 c . hettri . es . nbtrto . historique de l'etat des triangles .
53 c ______________________________________________________________________
56 c 0. declarations et dimensionnement
59 c 0.1. ==> generalites
73 integer inloc, iploc, iqloc
74 integer somare(2,nbarto), posifa(0:nbarto), facare(nbfaar)
75 integer aretri(nbtrto,3), hettri(nbtrto), filtri(nbtrto)
77 c 0.4. ==> variables locales
80 integer arebas, arnqnn, arnqsn, arnpnn
81 integer iaux, ideb, ifin
83 c 0.5. ==> initialisations
84 c ______________________________________________________________________
90 c 2.1. ==> situation initiale
95 c .-----------------------.-----------------------.
101 c . arnqnn.l l.arnpnn .
103 c iqloc . .c nf c. . iploc
107 c .---------arebas--------.
113 c arnqsn .l l. arnpsn
126 c on ne peut basculer que si le triangle de coin qui partage
127 c l'arete a basculer avec le triangle central n'est pas decoupe
128 c pour la conformite.
130 if ( mod(hettri(nfn),10).eq.0 ) then
132 arebas = aretri(nf,inloc)
134 arnqnn = aretri(nf,iploc)
135 arnpnn = aretri(nf,iqloc)
137 arnqsn = aretri(nfn,iqloc)
139 c 2.2. ==> apres basculement
141 c Attention : on ne peut pas conserver le numero local inloc a
142 c l'arete basculee, car alors l'orientation des deux
143 c triangles nf et nfn changerait. il faut donc permuter
144 c les numeros locaux de deux des trois aretes des triangles
145 c nf et nfn pour respecter cette orientation.
146 c on choisit de garder le numero local des aretes issues
147 c d'un decoupage en 2 des aretes du triangle pere.
151 c .-----------------------.-----------------------.
157 c . arnqnn.l . e . l.arnpnn .
159 c iqloc . .c a c. . iploc
169 c arnqsn .c . c. arnpsn
178 c 2.2.1. ==> description de l'arete basculee
179 c Rq : par construction, nn>sn, donc ok pour somare
181 somare(1,arebas) = sn
182 somare(2,arebas) = nn
184 c 2.2.2. ==> nouveau triangle "central"
185 c attention a l'orientation : la meme que tridec
187 aretri(nf,inloc) = arnqnn
188 aretri(nf,iploc) = arebas
189 aretri(nf,iqloc) = arnqsn
191 c 2.2.3. ==> nouveau triangle "oppose"
192 c attention a l'orientation : la meme que tridec
193 c l'arete iploc est inchangee : arnpsn
195 aretri(nfn,inloc) = arnpnn
196 aretri(nfn,iqloc) = arebas
198 c 2.2.4. ==> traingles voisins des aretes
199 c on doit examiner les 5 aretes impliquees
200 c . arete basculee : il n'y a pas de changement car elle
201 c borde toujours nf et nfn
202 c . arete arnqnn : il n'y a pas de changement car elle
203 c borde toujours nf, nfp et eventuellement
204 c une fille de nfp si nfp est coupee en 2
206 c . arete arnpsn : il n'y a pas de changement car elle
207 c borde toujours nfn, une voisine et
208 c eventuellement une fille de cette voisine
209 c si cette voisine est coupee en 2
211 c . arete arnpnn : elle bordait nf, nfq et eventuellement
212 c une fille de nfq si nfq est coupee en 2
213 c par l'arete sq-np. Pas de changement du
214 c cote de nfq, il faut remplacer nf par nfn.
215 c . arete arnqsn : elle bordait nfn, nfp et eventuellement
216 c une fille de nfp si nfp est coupee en 2
217 c par l'arete sn-nq. Pas de changement du
218 c cote de nfp, il faut remplacer nfn par nf.
220 ideb = posifa(arnpnn-1) + 1
221 ifin = posifa(arnpnn)
222 do 2241 , iaux = ideb , ifin
223 if ( facare(iaux).eq.nf ) then
228 ideb = posifa(arnqsn-1) + 1
229 ifin = posifa(arnqsn)
230 do 2242 , iaux = ideb , ifin
231 if ( facare(iaux).eq.nfn ) then
236 c 2.2.5. ==> modification de l'etat du triangle pere
238 hettri(tridec) = hettri(tridec) + 1 + inloc