]> SALOME platform Git repositories - modules/homard.git/blob - src/tool/Decision/derco9.F
Salome HOME
Copyright update 2022
[modules/homard.git] / src / tool / Decision / derco9.F
1       subroutine derco9 ( niveau,
2      >                    decare,
3      >                    hetare, filare,
4      >                    aretri, nivtri,
5      >                    arequa, nivqua,
6      >                    quahex, coquhe,
7      >                    facpyr, cofapy,
8      >                    facpen, cofape,
9      >                    ulsort, langue, codret )
10 c ______________________________________________________________________
11 c
12 c                             H O M A R D
13 c
14 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c
16 c Version originale enregistree le 18 juin 1996 sous le numero 96036
17 c aupres des huissiers de justice Simart et Lavoir a Clamart
18 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
19 c aupres des huissiers de justice
20 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c
22 c    HOMARD est une marque deposee d'Electricite de France
23 c
24 c Copyright EDF 1996
25 c Copyright EDF 1998
26 c Copyright EDF 2002
27 c Copyright EDF 2020
28 c ______________________________________________________________________
29 c
30 c traitement des DEcisions - Raffinement : COntamination - option 9
31 c                --          -             --                     -
32 c Application de la regle des ecarts de niveau a travers les volumes
33 c ______________________________________________________________________
34 c .        .     .        .                                            .
35 c .  nom   . e/s . taille .           description                      .
36 c .____________________________________________________________________.
37 c . niveau . e   .    1   . niveau en cours d'examen                   .
38 c . decare . es  . nbarto . decisions des aretes                       .
39 c . hetare . e   . nbarto . historique de l'etat des aretes            .
40 c . filare . e   . nbarto . premiere fille des aretes                  .
41 c . aretri . e   . nbtrto . numeros des 3 aretes des triangles         .
42 c . nivtri . e   . nbtrto . niveau des triangles                       .
43 c . arequa . e   . nbquto . numeros des 4 aretes des quadrangles       .
44 c . nivqua . e   . nbquto . niveau des quadrangles                     .
45 c . quahex . e   .nbhecf*6. numeros des 6 quadrangles des hexaedres    .
46 c . coquhe . e   .nbhecf*6. codes des 6 quadrangles des hexaedres      .
47 c . facpyr . e   .nbpycf*5. numeros des 5 faces des pyramides          .
48 c . cofapy . e   .nbpycf*5. codes des faces des pyramides              .
49 c . facpen . e   .nbpecf*5. numeros des faces des pentaedres           .
50 c . cofape . e   .nbpecf*5. code des 5 faces des pentaedres            .
51 c . ulsort . e   .   1    . numero d'unite logique de la liste standard.
52 c . langue . e   .    1   . langue des messages                        .
53 c .        .     .        . 1 : francais, 2 : anglais                  .
54 c . codret . es  .    1   . code de retour des modules                 .
55 c .        .     .        . 0 : pas de probleme                        .
56 c ______________________________________________________________________
57 c
58 c====
59 c 0. declarations et dimensionnement
60 c====
61 c
62 c 0.1. ==> generalites
63 c
64       implicit none
65       save
66 c
67       character*6 nompro
68       parameter ( nompro = 'DERCO9' )
69 c
70 #include "nblang.h"
71 c
72 c 0.2. ==> communs
73 c
74 #include "envex1.h"
75 #include "nombar.h"
76 #include "nombtr.h"
77 #include "nombqu.h"
78 #include "nombpy.h"
79 #include "nombhe.h"
80 #include "nombpe.h"
81 c
82 c 0.3. ==> arguments
83 c
84       integer niveau
85       integer decare(0:nbarto)
86       integer hetare(nbarto), filare(nbarto)
87       integer aretri(nbtrto,3), nivtri(nbtrto)
88       integer arequa(nbquto,4), nivqua(nbquto)
89       integer quahex(nbhecf,6), coquhe(nbhecf,6)
90       integer facpyr(nbpycf,5), cofapy(nbpycf,5)
91       integer facpen(nbpecf,5), cofape(nbpecf,5)
92 c
93       integer ulsort, langue, codret
94 c
95 c 0.4. ==> variables locales
96 c
97       integer iaux, jaux
98       integer larete, laret0
99       integer lehexa, lepent, lapyra
100       integer listar(12)
101 c
102       integer nbmess
103       parameter ( nbmess = 30 )
104       character*80 texte(nblang,nbmess)
105 c
106 c 0.5. ==> initialisations
107 c ______________________________________________________________________
108 c
109 c====
110 c 1. initialisations
111 c====
112 c
113 #include "impr01.h"
114 c
115 #ifdef _DEBUG_HOMARD_
116       write (ulsort,texte(langue,1)) 'Entree', nompro
117       call dmflsh (iaux)
118
119 #endif
120 c
121 #include "impr03.h"
122 c
123 #include "derco1.h"
124 c
125 #ifdef _DEBUG_HOMARD_
126       write (ulsort,texte(langue,12)) niveau
127 #endif
128 c
129 c    Transfert via les volumes ayant des quadrangles comme faces
130 c    Si une fille de l'une de ses aretes est a couper, le volume
131 c    doit l'etre entierement : on le declare par ses aretes.
132 c====
133 c 3. Les hexaedres
134 c====
135 #ifdef _DEBUG_HOMARD_
136       write(ulsort,90002) '3. Les hexaedres ; codret', codret
137 #endif
138 c
139       if ( codret.eq.0 ) then
140 c
141       do 31 , lehexa = 1 , nbheto
142 c
143         jaux = nivqua(quahex(lehexa,1)) + 1
144 c
145         if ( jaux.eq.niveau ) then
146 c
147           call utarhe ( lehexa,
148      >                  nbquto, nbhecf,
149      >                  arequa, quahex, coquhe,
150      >                  listar )
151 c
152           do 311 , iaux = 1 , 12
153 c
154             larete = listar(iaux)
155             if ( mod(hetare(larete),10).eq.2 ) then
156               if ( decare(filare(larete)  ).eq.2 .or.
157      >             decare(filare(larete)+1).eq.2 ) then
158                 do 3111 , jaux = 1 , 12
159                   laret0 = listar(jaux)
160                   if ( mod(hetare(laret0),10).eq.2 ) then
161                     if ( decare(laret0).eq.-1 ) then
162                       decare(laret0) = 0
163                     endif
164                   elseif ( mod(hetare(laret0),10).eq.0 ) then
165                     decare(laret0) = 2
166                   endif
167  3111           continue
168                 goto 31
169               endif
170             endif
171 c
172   311     continue
173 c
174         endif
175 c
176    31 continue
177 c
178       endif
179 c
180 c====
181 c 4. Les pentaedres
182 c====
183 #ifdef _DEBUG_HOMARD_
184       write(ulsort,90002) '4. Les pentaedres ; codret', codret
185 #endif
186 c
187       if ( codret.eq.0 ) then
188 c
189       do 41 , lepent = 1 , nbpeto
190 c
191         jaux = nivqua(facpen(lepent,3)) + 1
192 c
193         if ( jaux.eq.niveau ) then
194 c
195           call utarpe ( lepent,
196      >                  nbquto, nbpecf,
197      >                  arequa, facpen, cofape,
198      >                  listar )
199 c
200           do 411 , iaux = 1 , 9
201 c
202             larete = listar(iaux)
203             if ( mod(hetare(larete),10).eq.2 ) then
204               if ( decare(filare(larete)  ).eq.2 .or.
205      >             decare(filare(larete)+1).eq.2 ) then
206                 do 4111 , jaux = 1 , 12
207                   laret0 = listar(jaux)
208                   if ( mod(hetare(laret0),10).eq.2 ) then
209                     if ( decare(laret0).eq.-1 ) then
210                       decare(laret0) = 0
211                     endif
212                   elseif ( mod(hetare(laret0),10).eq.0 ) then
213                     decare(laret0) = 2
214                   endif
215  4111           continue
216                 goto 41
217               endif
218             endif
219 c
220   411     continue
221 c
222         endif
223 c
224    41 continue
225 c
226       endif
227 c
228 c====
229 c 5. Les pyramides
230 c====
231 #ifdef _DEBUG_HOMARD_
232       write(ulsort,90002) '5. Les pyramides ; codret', codret
233 #endif
234 c
235       if ( codret.eq.0 ) then
236 c
237       do 51 , lapyra = 1 , nbpyto
238 c
239         jaux = nivqua(facpyr(lapyra,5)) + 1
240 c
241         if ( jaux.eq.niveau ) then
242 c
243           call utarpy ( lapyra,
244      >                  nbtrto, nbpycf,
245      >                  aretri, facpyr, cofapy,
246      >                  listar )
247
248           do 511 , iaux = 1 , 8
249 c
250             larete = listar(iaux)
251             if ( mod(hetare(larete),10).eq.2 ) then
252               if ( decare(filare(larete)  ).eq.2 .or.
253      >             decare(filare(larete)+1).eq.2 ) then
254                 do 5111 , jaux = 1 , 12
255                   laret0 = listar(jaux)
256                   if ( mod(hetare(laret0),10).eq.2 ) then
257                     if ( decare(laret0).eq.-1 ) then
258                       decare(laret0) = 0
259                     endif
260                   elseif ( mod(hetare(laret0),10).eq.0 ) then
261                     decare(laret0) = 2
262                   endif
263  5111           continue
264                 goto 51
265               endif
266             endif
267 c
268   511     continue
269 c
270         endif
271 c
272    51 continue
273 c
274       endif
275 c
276 c====
277 c 6. la fin
278 c====
279 c
280       if ( codret.ne.0 ) then
281 c
282 #include "envex2.h"
283 c
284       write (ulsort,texte(langue,1)) 'Sortie', nompro
285       write (ulsort,texte(langue,2)) codret
286 c
287       endif
288 c
289 #ifdef _DEBUG_HOMARD_
290       write (ulsort,texte(langue,1)) 'Sortie', nompro
291       call dmflsh (iaux)
292 #endif
293 c
294       end