1 subroutine derco8 ( niveau,
4 > hettri, aretri, pertri, nivtri,
6 > hetqua, arequa, perqua, nivqua,
10 > ulsort, langue, codret )
11 c ______________________________________________________________________
15 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
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
23 c HOMARD est une marque deposee d'Electricite de France
29 c ______________________________________________________________________
31 c traitement des DEcisions - Raffinement : COntamination - option 8
33 c Complement sur la regle des ecarts de niveau pour du non-conforme
34 c a 1 noeud pendant par arete
35 c Cas ou les non-conformites sur les faces sont uniquement dans un
37 c Point de depart : un volume dont au moins une des faces est coupee,
38 c et au moins une ne l'est pas. On a donc une non conformite entre cet
39 c hexaedre et son voisin.
40 c Situation : une des faces filles de la face coupee est a couper, peu
42 c Il faut s'assurer que le volume sera coupe pour eviter que le rapport
44 c Methode : on repere le voisin de la mere de la fille a couper qui
45 c est actif (il y en a au plus 1). On impose a ce voisin que toutes
46 c ses faces soient decoupees.
47 c Attention : il faut sauter les faces du bord exterieur car le probleme
48 c de non conformite ne se pose pas
49 c ______________________________________________________________________
51 c . nom . e/s . taille . description .
52 c .____________________________________________________________________.
53 c . niveau . e . 1 . niveau en cours d'examen .
54 c . decare . es . nbarto . decisions des aretes .
55 c . decfac . es . -nbquto. decision sur les faces (quad. + tri.) .
57 c . merare . e . nbarto . mere des aretes .
58 c . posifa . e . nbarto . pointeur sur tableau facare .
59 c . facare . e . nbfaar . liste des faces contenant une arete .
60 c . hettri . e . nbtrto . historique de l'etat des triangles .
61 c . aretri . e . nbtrto . numeros des 3 aretes des triangles .
62 c . pertri . e . nbtrto . pere des triangles .
63 c . nivtri . e . nbtrto . niveau des triangles .
64 c . voltri . e .2*nbtrto. numeros des 2 volumes par triangle .
65 c . . . . voltri(i,k) definit le i-eme voisin de k .
66 c . . . . 0 : pas de voisin .
67 c . . . . j>0 : tetraedre j .
68 c . . . . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
69 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
70 c . arequa . e . nbquto . numeros des 4 aretes des quadrangles .
71 c . perqua . e . nbquto . pere des quadrangles .
72 c . nivqua . e . nbquto . niveau des quadrangles .
73 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
74 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
75 c . langue . e . 1 . langue des messages .
76 c . . . . 1 : francais, 2 : anglais .
77 c . codret . es . 1 . code de retour des modules .
78 c . . . . 0 : pas de probleme .
79 c ______________________________________________________________________
82 c 0. declarations et dimensionnement
85 c 0.1. ==> generalites
91 parameter ( nompro = 'DERCO8' )
107 integer decare(0:nbarto)
108 integer decfac(-nbquto:nbtrto)
109 integer hetare(nbarto)
110 integer hettri(nbtrto), aretri(nbtrto,3)
111 integer pertri(nbtrto), nivtri(nbtrto)
112 integer voltri(2,nbtrto)
113 integer hetqua(nbquto), arequa(nbquto,4)
114 integer perqua(nbquto), nivqua(nbquto)
115 integer volqua(2,nbquto)
116 integer hettet(nbteto), tritet(nbtecf,4)
117 integer hethex(nbheto), quahex(nbhecf,6)
119 integer ulsort, langue, codret
121 c 0.4. ==> variables locales
123 integer laface, lehexa, letetr
124 integer facdeb, facfin
127 integer jarelo, jarete, iface
129 #ifdef _DEBUG_HOMARD_
134 parameter ( nbmess = 30 )
135 character*80 texte(nblang,nbmess)
137 c 0.5. ==> initialisations
138 c ______________________________________________________________________
146 #ifdef _DEBUG_HOMARD_
147 write (ulsort,texte(langue,1)) 'Entree', nompro
151 #ifdef _DEBUG_HOMARD_
157 #ifdef _DEBUG_HOMARD_
158 write (ulsort,texte(langue,12)) niveau
163 if ( nbheto.gt.0 ) then
169 if ( nbteto.gt.0 ) then
174 cgn write (ulsort,*) facdeb, facfin
177 c 2. Complements sur la regle des ecarts de niveau
180 do 2 , laface = facdeb , facfin
181 cgn print *,'entree de ',nompro,', ',laface,' :',decfac(laface)
182 #ifdef _DEBUG_HOMARD_
183 if ( laface.eq.-215996 .or.
184 > laface.eq.-215996 ) then
189 if ( glop.eq.1 ) then
190 if ( nivqua(-laface).eq.niveau ) then
191 write (ulsort,*) ' ===================='
192 write (ulsort,*) ' quadrangle : ',-laface
193 write (ulsort,*) ' decfac : ',decfac(laface)
194 write (ulsort,*) ' etat : ',hetqua(-laface)
195 write (ulsort,*) ' niveau : ',nivqua(-laface)
196 if ( nbheto.gt.0 ) then
197 write (ulsort,*) ' volqua(*,laface) : ',
198 > volqua(1,-laface),volqua(2,-laface)
199 if ( volqua(1,-laface).gt.0 ) then
200 write (ulsort,*) ' etat du voisin 1 : ',
201 > hethex(volqua(1,-laface))
203 if ( volqua(2,-laface).gt.0 ) then
204 write (ulsort,*) ' etat du voisin 2 : ',
205 > hethex(volqua(2,-laface))
207 write(ulsort,*) ' perqua : ',perqua(-laface)
213 c 2.1. ==> on s'interesse aux faces :
214 c . du niveau courant
216 c . qui ne sont pas au bord du domaine
218 if ( decfac(laface).eq.4 ) then
222 if ( laface.gt.0 ) then
224 if ( nivtri(laface).eq.niveau ) then
228 elseif ( laface.lt.0 ) then
231 if ( nivqua(iaux).eq.niveau ) then
237 c 2.2. ==> on regarde le voisin non decoupe de la face mere
238 c attention : on ne traite que les volumes traditionnels
239 c tetra ou hexa, d'ou le codret=12
241 #ifdef _DEBUG_HOMARD_
242 if ( glop.eq.1 ) then
243 write (ulsort,*) ' afaire : ',afaire
246 if ( afaire.gt.0 ) then
248 if ( laface.gt.0 ) then
250 merefa = pertri(laface)
251 if ( merefa.gt.0 ) then
252 if ( voltri(1,merefa).lt.0 .or. voltri(2,merefa).lt.0 ) then
257 if ( voltri(1,merefa).gt.0 .and.
258 > voltri(2,merefa).gt.0 ) then
260 do 2211 , iaux = 1 , 2
261 letetr = voltri(iaux,merefa)
262 if ( mod(hettet(letetr),100).eq.0 ) then
263 do 2212 , jaux = 1 , 4
264 iface = tritet(letetr,jaux)
265 if ( mod(hettri(iface),10).eq.0 .and.
266 > decfac(iface).ne.4 ) then
268 do 2213 , jarelo = 1 , 3
269 jarete = aretri(iface,jarelo)
270 if ( mod(hetare(jarete),10).eq.0 .and.
271 > decare(jarete).ne.2 ) then
286 merefa = perqua(-laface)
287 if ( merefa.gt.0 ) then
288 #ifdef _DEBUG_HOMARD_
289 if ( glop.eq.1 ) then
290 write (ulsort,*) ' perqua : ',merefa
293 if ( volqua(1,merefa).gt.0 .and.
294 > volqua(2,merefa).gt.0 ) then
296 do 2214 , iaux = 1 , 2
297 lehexa = volqua(iaux,merefa)
298 #ifdef _DEBUG_HOMARD_
299 if ( glop.eq.1 ) then
300 write (ulsort,*) '..... lehexa : ',lehexa
301 write (ulsort,*) '..... etat : ',hethex(lehexa)
304 if ( mod(hethex(lehexa),1000).eq.0 ) then
305 do 2215 , jaux = 1 , 6
306 iface = quahex(lehexa,jaux)
307 if ( mod(hetqua(iface),100).eq.0 .and.
308 > decfac(-iface).ne.4 ) then
310 do 2216 , jarelo = 1 , 4
311 jarete = arequa(iface,jarelo)
312 if ( mod(hetare(jarete),10).eq.0 .and.
313 > decare(jarete).ne.2 ) then
334 #ifdef _DEBUG_HOMARD_
335 write (ulsort,*) 'sortie de ',nompro
336 do 1106 , iaux = 1 , nbquto
337 write (ulsort,90001) 'decision quadrangle', iaux,decfac(-iaux)
338 cgn write (ulsort,90001) 'quadrangle', iaux,
339 cgn > arequa(iaux,1), arequa(iaux,2),
340 cgn > arequa(iaux,3), arequa(iaux,4)
342 if ( nbquto.gt.0 ) then
344 write (ulsort,90001) 'quadrangle', iaux,
345 > decare(arequa(iaux,1)), decare(arequa(iaux,2)),
346 > decare(arequa(iaux,3)), decare(arequa(iaux,4))
348 write (ulsort,90001) 'quadrangle', iaux,
349 > decare(arequa(iaux,1)), decare(arequa(iaux,2)),
350 > decare(arequa(iaux,3)), decare(arequa(iaux,4))
360 if ( codret.ne.0 ) then
364 write (ulsort,texte(langue,1)) 'Sortie', nompro
365 write (ulsort,texte(langue,2)) codret
369 #ifdef _DEBUG_HOMARD_
370 write (ulsort,texte(langue,1)) 'Sortie', nompro