Salome HOME
Updated copyright comment
[modules/homard.git] / src / tool / Suivi_Frontiere / sfbatt.F
1       subroutine sfbatt ( nn, sn, tridec,
2      >                    inloc, iploc, iqloc,
3      >                    somare, facare, posifa,
4      >                    filtri, aretri, hettri )
5 c
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.
10 c
11 c  GN 23.01.98
12 c
13 c ______________________________________________________________________
14 c
15 c                             H O M A R D
16 c
17 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
18 c
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
24 c
25 c    HOMARD est une marque deposee d'Electricite de France
26 c
27 c Copyright EDF 1996
28 c Copyright EDF 1998
29 c Copyright EDF 2002
30 c Copyright EDF 2020
31 c ______________________________________________________________________
32 c
33 c   Suivi de Frontiere - BAscule d'aretes pour Triangle - Traitement
34 c   -        -           --                    -          -
35 c ______________________________________________________________________
36 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   .
42 c .        .     .        . fils                                       .
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 ______________________________________________________________________
54 c
55 c====
56 c 0. declarations et dimensionnement
57 c====
58 c
59 c 0.1. ==> generalites
60 c
61       implicit none
62       save
63 c
64 c 0.2. ==> communs
65 c
66 #include "nombar.h"
67 #include "nombtr.h"
68 c
69 c 0.3. ==> arguments
70 c
71       integer nn,sn
72       integer tridec
73       integer inloc, iploc, iqloc
74       integer somare(2,nbarto), posifa(0:nbarto), facare(nbfaar)
75       integer aretri(nbtrto,3), hettri(nbtrto), filtri(nbtrto)
76 c
77 c 0.4. ==> variables locales
78 c
79       integer nf, nfn
80       integer arebas, arnqnn, arnqsn, arnpnn
81       integer iaux, ideb, ifin
82 c
83 c 0.5. ==> initialisations
84 c ______________________________________________________________________
85 c
86 c====
87 c 2. traitement
88 c====
89 c
90 c 2.1. ==> situation initiale
91 c
92 c
93 c                             inloc
94 c       sp                       nn                      sq
95 c        .-----------------------.-----------------------.
96 c         .                     . .                     .
97 c          .                   .   .                   .
98 c           .   nfp           .     .     nfq         .
99 c            .               .i     i.               .
100 c             .             .p       q.             .
101 c              .     arnqnn.l         l.arnpnn     .
102 c               .         .o           o.         .
103 c       iqloc    .       .c     nf      c.       .    iploc
104 c                 .     .                 .     .
105 c                  .   .                   .   . 
106 c                   . .        inloc        . . 
107 c                    .---------arebas--------.
108 c                 nq  .        inloc        . np
109 c                      .                   .
110 c                       .                 .
111 c                        .i     nfn     i.
112 c                         .q           p.
113 c                   arnqsn .l         l. arnpsn
114 c                           .o       o.
115 c                            .c     c.
116 c                             .     .
117 c                              .   .
118 c                               . .
119 c                                .
120 c                               sn
121 c
122       nf  = filtri(tridec)
123 c
124       nfn = nf + inloc
125 c
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.
129 c
130       if ( mod(hettri(nfn),10).eq.0 ) then
131 c
132       arebas = aretri(nf,inloc)
133 c
134       arnqnn = aretri(nf,iploc)
135       arnpnn = aretri(nf,iqloc)
136 c
137       arnqsn = aretri(nfn,iqloc)
138 c
139 c 2.2. ==> apres basculement
140 c
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.
148 c
149 c                             inloc
150 c       sp                       nn                      sq
151 c        .-----------------------.-----------------------.
152 c         .                     ...                     .
153 c          .                   . . .                   .
154 c           .   nfp           .  .  .     nfq         .
155 c            .               .i  a  i.               .
156 c             .             .n   r   n.             .
157 c              .     arnqnn.l . e   . l.arnpnn     .
158 c               .         .o     b     o.         .
159 c       iqloc    .       .c      a      c.       .    iploc
160 c                 .     .      .  s  .    .     .
161 c                  .   .         .         .   .
162 c                   . .          .          . .
163 c                    .    nf    i.i    nfn   .
164 c                 nq  .         p.q         . np
165 c                      .i       l.l       i.
166 c                       .q      o.o      p.
167 c                        .l     c.c     l.
168 c                         .o     .     o.
169 c                   arnqsn .c    .    c. arnpsn
170 c                           .    .    .
171 c                            .   .   .
172 c                             .  .  .
173 c                              . . .
174 c                               ...
175 c                                .
176 c                               sn
177 c
178 c 2.2.1. ==> description de l'arete basculee
179 c            Rq : par construction, nn>sn, donc ok pour somare
180 c
181       somare(1,arebas) = sn
182       somare(2,arebas) = nn
183 c
184 c 2.2.2. ==> nouveau triangle "central"
185 c            attention a l'orientation : la meme que tridec
186 c
187       aretri(nf,inloc) = arnqnn
188       aretri(nf,iploc) = arebas
189       aretri(nf,iqloc) = arnqsn
190 c
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
194 c
195       aretri(nfn,inloc) = arnpnn
196       aretri(nfn,iqloc) = arebas
197 c
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
205 c                             par l'arete sp-nq.
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
210 c                             par l'arete sn-np.
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.
219 c
220       ideb = posifa(arnpnn-1) + 1
221       ifin = posifa(arnpnn)
222       do 2241 , iaux = ideb , ifin
223         if ( facare(iaux).eq.nf ) then
224           facare(iaux) = nfn
225         endif
226  2241 continue
227 c
228       ideb = posifa(arnqsn-1) + 1
229       ifin = posifa(arnqsn) 
230       do 2242 , iaux = ideb , ifin
231         if ( facare(iaux).eq.nfn ) then
232           facare(iaux) = nf
233         endif
234  2242 continue
235 c
236 c 2.2.5. ==> modification de l'etat du triangle pere
237 c
238       hettri(tridec) = hettri(tridec) + 1 + inloc
239 c
240       endif
241 c
242       end