1 subroutine derco3 ( niveau,
5 > hettri, aretri, pertri, nivtri,
7 > hetqua, arequa, perqua, nivqua,
9 > ulsort, langue, codret )
10 c ______________________________________________________________________
14 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
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
22 c HOMARD est une marque deposee d'Electricite de France
28 c ______________________________________________________________________
30 c traitement des DEcisions - Raffinement : COntamination - option 3
32 c Complement sur la regle des ecarts de niveau pour du non-conforme
33 c a 1 noeud pendant par arete
34 c Remarque : cela ne peut concerner que des niveaux au moins egal a 2
35 c ______________________________________________________________________
37 c . nom . e/s . taille . description .
38 c .____________________________________________________________________.
39 c . niveau . e . 1 . niveau en cours d'examen .
40 c . decare . es . nbarto . decisions des aretes .
41 c . decfac . es . -nbquto. decision sur les faces (quad. + tri.) .
43 c . merare . e . nbarto . mere des aretes .
44 c . posifa . e . nbarto . pointeur sur tableau facare .
45 c . facare . e . nbfaar . liste des faces contenant une arete .
46 c . hettri . e . nbtrto . historique de l'etat des triangles .
47 c . aretri . e . nbtrto . numeros des 3 aretes des triangles .
48 c . pertri . e . nbtrto . pere des triangles .
49 c . nivtri . e . nbtrto . niveau des triangles .
50 c . voltri . e .2*nbtrto. numeros des 2 volumes par triangle .
51 c . . . . voltri(i,k) definit le i-eme voisin de k .
52 c . . . . 0 : pas de voisin .
53 c . . . . j>0 : tetraedre j .
54 c . . . . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
55 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
56 c . arequa . e . nbquto . numeros des 4 aretes des quadrangles .
57 c . perqua . e . nbquto . pere des quadrangles .
58 c . nivqua . e . nbquto . niveau des quadrangles .
59 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
60 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
61 c . langue . e . 1 . langue des messages .
62 c . . . . 1 : francais, 2 : anglais .
63 c . codret . es . 1 . code de retour des modules .
64 c . . . . 0 : pas de probleme .
65 c ______________________________________________________________________
68 c 0. declarations et dimensionnement
71 c 0.1. ==> generalites
77 parameter ( nompro = 'DERCO3' )
92 integer decare(0:nbarto)
93 integer decfac(-nbquto:nbtrto)
94 integer merare(nbarto)
95 integer posifa(0:nbarto), facare(nbfaar)
96 integer hettri(nbtrto), aretri(nbtrto,3)
97 integer pertri(nbtrto), nivtri(nbtrto)
98 integer voltri(2,nbtrto)
99 integer hetqua(nbquto), arequa(nbquto,4)
100 integer perqua(nbquto), nivqua(nbquto)
101 integer tritet(nbtecf,4)
103 integer ulsort, langue, codret
105 c 0.4. ==> variables locales
107 integer laface, tetrae, nbtetr
109 integer iaux, ideb, ifin
110 integer iarelo, jarelo, ifalo, iarete, jarete, iface, itetra
111 integer etatfa, merear, merefa, grdmfa
112 integer nbare1, nbare2, liare1(4), liare2(4)
115 parameter ( nbmess = 30 )
116 character*80 texte(nblang,nbmess)
118 c 0.5. ==> initialisations
119 c ______________________________________________________________________
127 #ifdef _DEBUG_HOMARD_
128 write (ulsort,texte(langue,1)) 'Entree', nompro
132 #ifdef _DEBUG_HOMARD_
138 #ifdef _DEBUG_HOMARD_
139 write (ulsort,texte(langue,12)) niveau
144 c nombre maximum de tetraedres par triangle
146 if ( nbteto.eq.0 ) then
153 c 2. Complements sur la regle des ecarts de niveau
156 do 2 , laface = -nbquto , nbtrto
157 cgn print *,'entree de ',nompro,', ',laface,' :',decfac(laface)
159 c 2.1. ==> on s'interesse aux faces :
160 c . du niveau courant
162 c . qui ont une mere qui ne reapparait pas
163 c . qui ont une grand-mere
167 if ( laface.gt.0 ) then
169 if ( nivtri(laface).eq.niveau ) then
170 etatfa = mod( hettri(laface) , 10 )
171 if ( etatfa.eq.0 ) then
172 merefa = pertri(laface)
173 if ( merefa.gt.0 ) then
174 if ( decfac(merefa).eq.0 ) then
175 grdmfa = pertri(merefa)
181 elseif ( laface.lt.0 ) then
184 if ( nivqua(iaux).eq.niveau ) then
185 etatfa = mod( hetqua(iaux) , 100 )
186 if ( etatfa.eq.0 ) then
187 merefa = perqua(iaux)
188 if ( merefa.gt.0 ) then
189 if ( decfac(-merefa).eq.0 ) then
190 grdmfa = perqua(merefa)
198 c 2.2. ==> on regarde les aretes de la face mere
200 if ( grdmfa.gt.0 ) then
202 c 2.2.1. ==> liste de ces aretes
204 if ( laface.gt.0 ) then
207 do 2211 , iarelo = 1 , nbare2
208 liare2(iarelo) = aretri(merefa,iarelo)
214 do 2212 , iarelo = 1 , nbare2
215 liare2(iarelo) = arequa(merefa,iarelo)
221 do 2213 , iaux = 1 , nbare2
222 if ( decare(liare2(iaux)).eq.0 ) then
224 liare1(nbare1) = liare2(iaux)
228 c on parcourt les aretes retenues
230 do 220 , iarelo = 1 , nbare1
232 iarete = liare1(iarelo)
234 merear = merare(iarete)
236 if ( merear.ne.0 ) then
238 c 2.2.2. ==> l'arete iarete est sur le bord de la face grdmfa
239 c ------------------------------------------------
240 c ==> pour toutes les faces qui s'appuient sur merear,
241 c mere de cette arete iarete :
242 c . si elles sont a reactiver, on les garde
244 ideb = posifa(merear-1)+1
245 ifin = posifa(merear)
247 do 2221 , ipos = ideb , ifin
251 if ( decfac(iface).eq.-1 ) then
254 if ( iface.gt.0 ) then
255 do 2222 , jarelo = 1 , 3
256 jarete = aretri(iface,jarelo)
261 do 2223 , jarelo = 1 , 4
262 jarete = arequa(iaux,jarelo)
273 c 2.2.3. ==> l'arete iarete est interieure a la face grdmfa
274 c ----------------------------------------------
275 c ==> pour toutes les faces des tetraedres qui
276 c s'appuient sur le triangle pere grdmfa :
277 c . si elles sont a reactiver, on les garde
279 if ( laface.gt.0 ) then
281 do 2231 , itetra = 1 , nbtetr
283 c attention : on ne traite que les volumes traditionnels
284 c tetra ou hexa, d'ou le codret=12
285 if ( voltri(itetra,grdmfa).lt.0 ) then
289 tetrae = voltri(itetra,grdmfa)
290 if ( tetrae.ne.0 ) then
292 do 2232 , ifalo = 1 , 4
294 iface = tritet(tetrae,ifalo)
296 if ( decfac(iface).eq.-1 ) then
299 do 2233 , jarelo = 1 , 3
300 jarete = aretri(iface,jarelo)
322 #ifdef _DEBUG_HOMARD_
323 write (ulsort,*) 'sortie de ',nompro
324 do 1106 , iaux = 1 , nbquto
325 write (ulsort,90001) 'decision quadrangle', iaux,decfac(-iaux)
326 cgn write (ulsort,90001) 'quadrangle', iaux,
327 cgn > arequa(iaux,1), arequa(iaux,2),
328 cgn > arequa(iaux,3), arequa(iaux,4)
330 if ( nbquto.gt.0 ) then
332 write (ulsort,90001) 'quadrangle', iaux,
333 > decare(arequa(iaux,1)), decare(arequa(iaux,2)),
334 > decare(arequa(iaux,3)), decare(arequa(iaux,4))
336 write (ulsort,90001) 'quadrangle', iaux,
337 > decare(arequa(iaux,1)), decare(arequa(iaux,2)),
338 > decare(arequa(iaux,3)), decare(arequa(iaux,4))
348 if ( codret.ne.0 ) then
352 write (ulsort,texte(langue,1)) 'Sortie', nompro
353 write (ulsort,texte(langue,2)) codret
357 #ifdef _DEBUG_HOMARD_
358 write (ulsort,texte(langue,1)) 'Sortie', nompro