Salome HOME
Homard executable
[modules/homard.git] / src / tool / Decision / dedcon.F
1       subroutine dedcon ( tyconf, homolo,
2      >                    decare, decfac,
3      >                    posifa, facare,
4      >                    hetare, merare, arehom,
5      >                    hettri, aretri, nivtri,
6      >                    hetqua, arequa, nivqua,
7      >                    listfa,
8      >                    ulsort, langue, codret )
9 c ______________________________________________________________________
10 c
11 c                             H O M A R D
12 c
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c
21 c    HOMARD est une marque deposee d'Electricite de France
22 c
23 c Copyright EDF 1996
24 c Copyright EDF 1998
25 c Copyright EDF 2002
26 c Copyright EDF 2020
27 c ______________________________________________________________________
28 c
29 c traitement des DEcisions - Deraffinement : CONtamination
30 c                --          -               ---
31 c ______________________________________________________________________
32 c .        .     .        .                                            .
33 c .  nom   . e/s . taille .           description                      .
34 c .____________________________________________________________________.
35 c . tyconf . e   .   1    .  0 : conforme (defaut)                     .
36 c .        .     .        .  1 : non-conforme avec au minimum 2 aretes .
37 c .        .     .        .      non decoupees en 2 par face           .
38 c .        .     .        .  2 : non-conforme avec 1 seul noeud        .
39 c .        .     .        .      pendant par arete                     .
40 c .        .     .        .  3 : non-conforme fidele a l'indicateur    .
41 c .        .     .        . -1 : conforme, avec des boites pour les    .
42 c .        .     .        .      quadrangles, hexaedres et pentaedres  .
43 c .        .     .        . -2 : non-conforme avec au maximum 1 arete  .
44 c .        .     .        .      decoupee en 2 (boite pour les         .
45 c .        .     .        .      quadrangles, hexaedres et pentaedres) .
46 c . homolo . e   .   1    . presence d'homologue                       .
47 c .        .     .        . 0 : non                                    .
48 c .        .     .        . 1 : il existe des noeuds homologues        .
49 c .        .     .        . 2 : il existe des aretes homologues        .
50 c .        .     .        . 3 : il existe des faces homologues         .
51 c . decare . e/s . nbarto . decisions des aretes                       .
52 c . decfac . e/s . -nbquto. decision sur les faces (quad. + tri.)      .
53 c .        .     . :nbtrto.                                            .
54 c . posifa . e   . nbarto . pointeur sur tableau facare                .
55 c . facare . e   . nbfaar . liste des faces contenant une arete        .
56 c . hetare . e   . nbarto . historique de l'etat des aretes            .
57 c . merare . e   . nbarto . mere des aretes                            .
58 c . arehom . e   . nbarto . ensemble des aretes homologues             .
59 c . hettri . e   . nbtrto . historique de l'etat des triangles         .
60 c . aretri . e   . nbtrto . numeros des 3 aretes des triangles         .
61 c . nivtri . e   . nbtrto . niveau des triangles                       .
62 c . hetqua . e   . nbquto . historique de l'etat des quadrangles       .
63 c . arequa . e   . nbquto . numeros des 4 aretes des quadrangles       .
64 c . nivqua . e   . nbquto . niveau des quadrangles                     .
65 c . listfa . t   .   *    . liste de faces a considerer                .
66 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
67 c . langue . e   .    1   . langue des messages                        .
68 c .        .     .        . 1 : francais, 2 : anglais                  .
69 c . codret . es  .    1   . code de retour des modules                 .
70 c .        .     .        . 0 : pas de probleme                        .
71 c .        .     .        . 5 : mauvais type de code de calcul associe .
72 c ______________________________________________________________________
73 c
74 c====
75 c 0. declarations et dimensionnement
76 c====
77 c
78 c 0.1. ==> generalites
79 c
80       implicit none
81       save
82 c
83       character*6 nompro
84       parameter ( nompro = 'DEDCON' )
85 c
86 #include "nblang.h"
87 c
88 c 0.2. ==> communs
89 c
90 #include "envex1.h"
91 c
92 #include "nombar.h"
93 #include "nombtr.h"
94 #include "nombqu.h"
95 c
96 c 0.3. ==> arguments
97 c
98       integer tyconf, homolo
99       integer decare(0:nbarto)
100       integer decfac(-nbquto:nbtrto)
101       integer posifa(0:nbarto), facare(nbfaar)
102       integer hetare(nbarto), merare(nbarto), arehom(nbarto)
103       integer hettri(nbtrto), aretri(nbtrto,3), nivtri(nbtrto)
104       integer hetqua(nbquto), arequa(nbquto,4), nivqua(nbquto)
105       integer listfa(*)
106 c
107       integer ulsort, langue, codret
108 c
109 c 0.4. ==> variables locales
110 c
111       integer iaux
112 #ifdef _DEBUG_HOMARD_
113       integer jaux
114 #endif
115 c
116       integer nbmess
117       parameter ( nbmess = 30 )
118       character*80 texte(nblang,nbmess)
119 c
120 c 0.5. ==> initialisations
121 c ______________________________________________________________________
122 c
123 c====
124 c 1. messages
125 c====
126 c
127 #include "impr01.h"
128 c
129 #ifdef _DEBUG_HOMARD_
130       write (ulsort,texte(langue,1)) 'Entree', nompro
131       call dmflsh (iaux)
132 #endif
133 c
134 #include "derco1.h"
135 #include "impr03.h"
136 c
137       codret = 0
138 c
139 #ifdef _DEBUG_HOMARD_
140       write (ulsort,90002) 'tyconf', tyconf
141 #endif
142 c
143 #ifdef _DEBUG_HOMARD_
144 cgn        do 1105 , iaux = 1 , nbquto
145 cgn          write (ulsort,90001) 'quadrangle', iaux,
146 cgn     >    arequa(iaux,1), arequa(iaux,2),
147 cgn     >    arequa(iaux,3), arequa(iaux,4)
148 cgn 1105   continue
149 #endif
150 c
151 #ifdef _DEBUG_HOMARD_
152         do 1103 , iaux = 1 , nbarto
153           if ( iaux.eq.2183 .or. iaux.eq.14556
154      >   .or. iaux.eq.1658 .or. iaux.eq.1661 ) then
155             write (ulsort,90001) '.. arete e/d', iaux,
156      >    hetare(iaux), decare(iaux)
157           endif
158  1103   continue
159 #endif
160 #ifdef _DEBUG_HOMARD_
161         do 1104 , iaux = 1 , nbtrto
162         if ( iaux.eq.-830 .or. iaux.eq.-800) then
163           write (ulsort,90001) '.triangle', iaux,
164      >    aretri(iaux,1), aretri(iaux,2),
165      >    aretri(iaux,3)
166           write (ulsort,90002) 'niveau et decision',
167      >    nivtri(iaux), decfac(iaux)
168           do 11041 ,jaux=1,3
169           write (ulsort,90001) 'arete e/d', aretri(iaux,jaux),
170      >    hetare(aretri(iaux,jaux)), decare(aretri(iaux,jaux))
171 11041   continue
172          endif
173  1104   continue
174         do 1105 , iaux = 1 , nbquto
175         if ( iaux.eq.-2311 ) then
176 cgn        if ( iaux.eq.1160 .or. iaux.eq.1411 .or.
177 cgn     >       iaux.eq.333 .or. iaux.eq.1662.or.
178 cgn     >       iaux.eq.1658 .or. iaux.eq.1666 .or.
179 cgn     >       iaux.eq.729 .or. iaux.eq.721 ) then
180           write (ulsort,90001) 'quadrangle', iaux,
181      >    arequa(iaux,1), arequa(iaux,2),
182      >    arequa(iaux,3), arequa(iaux,4)
183           write (ulsort,90002) 'niveau et decision',
184      >    nivqua(iaux), decfac(-iaux)
185           do 11051 ,jaux=1,4
186           write (ulsort,90001) 'arete e/d', arequa(iaux,jaux),
187      >    hetare(arequa(iaux,jaux)), decare(arequa(iaux,jaux))
188 11051   continue
189          endif
190  1105   continue
191 #endif
192 c
193 c====
194 c 2. contamination des decisions pour le deraffinement
195 c====
196 c
197 c 2.1. ==> cas sans entites homologues, sauf eventuellement des noeuds
198 c
199       if ( homolo.le.1 ) then
200 c
201 #ifdef _DEBUG_HOMARD_
202       write (ulsort,texte(langue,3)) 'DEDCO1', nompro
203 #endif
204         call dedco1 ( tyconf,
205      >                decare, decfac,
206      >                posifa, facare,
207      >                hetare, merare,
208      >                hettri, aretri, nivtri,
209      >                hetqua, arequa, nivqua,
210      >                listfa,
211      >                ulsort, langue, codret )
212 c
213       else
214 c
215 c 2.2. ==> cas avec homologue
216 c
217 #ifdef _DEBUG_HOMARD_
218       write (ulsort,texte(langue,3)) 'DEDCO2', nompro
219 #endif
220         call dedco2 ( tyconf,
221      >                decare, decfac,
222      >                posifa, facare,
223      >                hetare, merare, arehom,
224      >                hettri, aretri, nivtri,
225      >                hetqua, arequa, nivqua,
226      >                listfa,
227      >                ulsort, langue, codret )
228 c
229       endif
230 c
231 #ifdef _DEBUG_HOMARD_
232       write (ulsort,texte(langue,1)) 'Sortie', nompro
233         do 2103 , iaux = 1 , nbarto
234           if ( iaux.eq.2183 .or. iaux.eq.14556
235      >   .or. iaux.eq.1658 .or. iaux.eq.1661 ) then
236             write (ulsort,90001) '.. arete e/d', iaux,
237      >    hetare(iaux), decare(iaux)
238           endif
239  2103   continue
240         do 2104 , iaux = 1 , nbtrto
241         if ( iaux.eq.-830 .or. iaux.eq.-833 .or. iaux.eq.-800) then
242           write (ulsort,90001) '.triangle', iaux,
243      >    aretri(iaux,1), aretri(iaux,2),
244      >    aretri(iaux,3)
245           write (ulsort,90002) '.. niveau et decision',
246      >    nivtri(iaux), decfac(iaux)
247           do 21041 ,jaux=1,3
248           write (ulsort,90001) '.. arete e/d', aretri(iaux,jaux),
249      >    hetare(aretri(iaux,jaux)), decare(aretri(iaux,jaux))
250 21041   continue
251           endif
252  2104   continue
253         do 2105 , iaux = 1 , nbquto
254         if ( iaux.eq.-2311 ) then
255 cgn        if ( iaux.eq.1160 .or. iaux.eq.1411 .or.
256 cgn     >       iaux.eq.333 .or. iaux.eq.1662 .or.
257 cgn     >       iaux.eq.1658 .or. iaux.eq.1666 .or.
258 cgn     >       iaux.eq.729 .or. iaux.eq.721 ) then
259           write (ulsort,90001) 'quadrangle', iaux,
260      >    arequa(iaux,1), arequa(iaux,2),
261      >    arequa(iaux,3), arequa(iaux,4)
262           write (ulsort,90002) 'de decision', decfac(-iaux)
263           do 21051 ,jaux=1,4
264           write (ulsort,90001) 'arete e/d', arequa(iaux,jaux),
265      >    hetare(arequa(iaux,jaux)), decare(arequa(iaux,jaux))
266 21051   continue
267          endif
268  2105   continue
269 #endif
270 c
271 c====
272 c 3. la fin
273 c====
274 c
275       if ( codret.ne.0 ) then
276 c
277 #include "envex2.h"
278 c
279       write (ulsort,texte(langue,1)) 'Sortie', nompro
280       write (ulsort,texte(langue,2)) codret
281 c
282       endif
283 c
284 #ifdef _DEBUG_HOMARD_
285       write (ulsort,texte(langue,1)) 'Sortie', nompro
286       call dmflsh (iaux)
287 #endif
288 c
289       end