Salome HOME
Updated copyright comment
[modules/homard.git] / src / tool / Suivi_Frontiere / sfcofa.F
1       subroutine sfcofa ( bilan, nbbasc, libasc,
2      >                    lenoeu, larete,
3      >                    nufade, nufafi, nbvoto,
4      >                    coonoe,
5      >                    somare, filare, np2are,
6      >                    facare,
7      >                    hettri, aretri,
8      >                    voltri,
9      >                    hetqua, arequa, filqua,
10      >                    volqua,
11      >                    ulsort, langue, codret)
12 c ______________________________________________________________________
13 c                             H O M A R D
14 c
15 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
16 c
17 c Version originale enregistree le 18 juin 1996 sous le numero 96036
18 c aupres des huissiers de justice Simart et Lavoir a Clamart
19 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
20 c aupres des huissiers de justice
21 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
22 c
23 c    HOMARD est une marque deposee d'Electricite de France
24 c
25 c Copyright EDF 1996
26 c Copyright EDF 1998
27 c Copyright EDF 2002
28 c Copyright EDF 2020
29 c ______________________________________________________________________
30 c
31 c   Suivi de Frontiere - COntroles des FAces
32 c   -        -           --            --
33 c ______________________________________________________________________
34 c .        .     .        .                                            .
35 c .  nom   . e/s . taille .           description                      .
36 c .____________________________________________________________________.
37 c . bilan  .   s .   1    . bilan du controle de l'arete               .
38 c .        .     .        . 0 : pas de probleme                        .
39 c .        .     .        . 1 : probleme                               .
40 c . nbbasc .   s .   1    . nombre de bascule a faire                  .
41 c . libasc .   s .   *    . liste des aretes a basculer                .
42 c . lenoeu . e   .   1    . noeud qui bouge                            .
43 c . larete . e   .   1    . arete a controler                          .
44 c . nufade . e   .   1    . numero face depart des voisines de larete  .
45 c . nufafi . e   .   1    . numero face fin des voisines de larete     .
46 c . nbvoto . e   .   1    . nombre de volumes total                    .
47 c . coonoe . e   . nbnoto . coordonnees des noeuds                     .
48 c .        .     . *sdim  .                                            .
49 c . somare . e   .2*nbarto. numeros des extremites d'arete             .
50 c . filare . e   . nbarto . premiere fille des aretes                  .
51 c . np2are . e   . nbarto . noeud milieux des aretes                   .
52 c . facare . es  . nbfaar . liste des faces contenant une arete        .
53 c . hettri . e   . nbtrto . historique de l'etat des triangles         .
54 c . aretri . e   .nbtrto*3. numeros des 3 aretes des triangles         .
55 c . voltri . e   .2*nbtrto. numeros des 2 volumes par triangle         .
56 c .        .     .        . voltri(i,k) definit le i-eme voisin de k   .
57 c .        .     .        .   0 : pas de voisin                        .
58 c .        .     .        . j>0 : tetraedre j                          .
59 c .        .     .        . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
60 c . hetqua . e   . nbquto . historique de l'etat des quadrangles       .
61 c . arequa . e   .nbquto*4. numeros des 4 aretes des quadrangles       .
62 c . filqua . e   . nbquto . premier fils des quadrangles               .
63 c . volqua . e   .2*nbquto. numeros des 2 volumes par quadrangle       .
64 c .        .     .        . volqua(i,k) definit le i-eme voisin de k   .
65 c .        .     .        .   0 : pas de voisin                        .
66 c .        .     .        . j>0 : hexaedre j                           .
67 c .        .     .        . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
68 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
69 c . langue . e   .    1   . langue des messages                        .
70 c .        .     .        . 1 : francais, 2 : anglais                  .
71 c . codret . es  .    1   . code de retour des modules                 .
72 c .        .     .        . 0 : pas de probleme                        .
73 c .        .     .        . x : probleme                               .
74 c ______________________________________________________________________
75 c
76 c====
77 c 0. declarations et dimensionnement
78 c====
79 c
80 c 0.1. ==> generalites
81 c
82       implicit none
83       save
84 c
85       character*6 nompro
86       parameter ( nompro = 'SFCOFA' )
87 c
88 #include "nblang.h"
89 c
90 c 0.2. ==> communs
91 c
92 #include "envex1.h"
93 c
94 #include "envca1.h"
95 #include "nombno.h"
96 #include "nombar.h"
97 #include "nombqu.h"
98 #include "nombtr.h"
99 #include "impr02.h"
100 c
101 c 0.3. ==> arguments
102 c
103       integer bilan, nbbasc, libasc(*)
104       integer lenoeu, larete
105       integer nufade, nufafi, nbvoto
106 c
107       integer somare(2,nbarto), filare(nbarto), np2are(nbarto)
108       integer facare(nbfaar)
109       integer hettri(nbtrto), aretri(nbtrto,3)
110       integer voltri(2,nbtrto)
111       integer hetqua(nbquto), arequa(nbquto,4), filqua(nbquto)
112       integer volqua(2,nbquto)
113 c
114       double precision coonoe(nbnoto,sdim)
115 c
116       integer ulsort, langue, codret
117 c
118 c 0.4. ==> variables locales
119 c
120       integer iaux
121       integer laface
122 c
123       logical bascul
124 c
125       integer nbmess
126       parameter ( nbmess = 10 )
127       character*80 texte(nblang,nbmess)
128 c
129 c 0.5. ==> initialisations
130 c ______________________________________________________________________
131 c
132 c====
133 c 1. messages
134 c====
135 c
136 #include "impr01.h"
137 c
138 #ifdef _DEBUG_HOMARD_
139       write (ulsort,texte(langue,1)) 'Entree', nompro
140       call dmflsh (iaux)
141 #endif
142 c
143       texte(1,4) = '(/,''.. Examen du '',a,i10)'
144       texte(1,5) = '(''.. Probleme.'')'
145       texte(1,6) = '(''.. Bascule a faire.'')'
146 c
147       texte(2,4) = '(/,''.. Examination of '',a,'' # '',i10)'
148       texte(2,5) = '(''. Problem.'')'
149       texte(2,6) = '(''.. Swapping.'')'
150 c
151 #ifdef _DEBUG_HOMARD_
152        write (ulsort,texte(langue,4)) mess14(langue,1,1), larete
153        write (ulsort,texte(langue,4)) mess14(langue,1,-1), lenoeu
154 #endif
155 c
156       codret = 0
157 c
158       bilan = 0
159       nbbasc = 0
160 c
161 c====
162 c 2. boucle sur les faces s'appuyant sur l'arete
163 c    On ne s'interesse qu'aux aretes qui viennent d'etre decoupees et
164 c    qui font partie d'une frontiere reconnue
165 c    On ne s'interesse qu'aux faces qui ne bordent aucun volume
166 c====
167 c
168       do 21 , iaux = nufade, nufafi
169 c
170         if ( codret.eq.0 ) then
171 c
172         bascul = .false.
173 c
174         laface = facare(iaux)
175 c
176 c 2.1. ==> si la face voisine est un triangle
177 c
178         if ( laface.gt.0 ) then
179 cgn        write (ulsort,*)'.. Face voisine : triangle ', laface
180 c
181           if ( nbvoto.eq.0 .or. voltri(1,laface).eq.0 ) then
182 c
183 #ifdef _DEBUG_HOMARD_
184       write (ulsort,texte(langue,3)) 'SFTQTR', nompro
185 #endif
186             call sftqtr ( bilan, bascul,
187      >                    lenoeu, larete, laface,
188      >                    coonoe,
189      >                    somare, filare, np2are,
190      >                    hettri, aretri,
191      >                    ulsort, langue, codret)
192 c
193           endif
194 c
195 c 2.2. ==> si la face voisine est un quadrangle
196 c
197         else
198 cgn      write(ulsort,*)'.. Face voisine : quadrangle ',-laface
199 c
200           if ( nbvoto.eq.0 .or. volqua(1,-laface).eq.0 ) then
201 c
202 #ifdef _DEBUG_HOMARD_
203       write (ulsort,texte(langue,3)) 'SFTQQU', nompro
204 #endif
205             call sftqqu ( bilan,
206      >                    lenoeu, larete, -laface,
207      >                    coonoe,
208      >                    somare, filare, np2are,
209      >                    hetqua, arequa, filqua,
210      >                    ulsort, langue, codret)
211 c
212           endif
213 c
214         endif
215 c
216 c 2.3. ==> Memorisations
217 c
218         if ( codret.eq.0 ) then
219 c
220           if ( bilan.ne.0 ) then
221             goto 30
222           endif
223 c
224           if ( bascul ) then
225             nbbasc = nbbasc + 1
226             libasc(nbbasc) = laface
227           endif
228 c
229         endif
230 c
231         endif
232 c
233    21 continue
234 c
235 c====
236 c 3. Bilan
237 c====
238 #ifdef _DEBUG_HOMARD_
239       write (ulsort,*) '3. Bilan ; codret = ', codret
240 #endif
241 c
242    30 continue
243 c
244 #ifdef _DEBUG_HOMARD_
245       if ( codret.eq.0 ) then
246       if ( bilan.ne.0 ) then
247         write (ulsort,texte(langue,4)) mess14(langue,1,1), larete
248         write (ulsort,texte(langue,5))
249       endif
250       if ( bascul ) then
251         write (ulsort,texte(langue,4)) mess14(langue,1,1), larete
252         write (ulsort,texte(langue,6))
253       endif
254       endif
255 #endif
256 c
257 c====
258 c 4. La fin
259 c====
260 c
261       if ( codret.ne.0 ) then
262 c
263 #include "envex2.h"
264 c
265       write (ulsort,texte(langue,1)) 'Sortie', nompro
266       write (ulsort,texte(langue,2)) codret
267 c
268       endif
269 c
270 #ifdef _DEBUG_HOMARD_
271       write (ulsort,texte(langue,1)) 'Sortie', nompro
272       call dmflsh (iaux)
273 #endif
274 c
275       end