1 subroutine vcequ6 ( option,
4 > somare, aretri, arequa,
5 > ulsort, langue, codret )
6 c ______________________________________________________________________
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
18 c HOMARD est une marque deposee d'Electricite de France
24 c ______________________________________________________________________
26 c aVant adaptation Conversion - EQUivalence - phase 6
28 c ______________________________________________________________________
30 c . nom . e/s . taille . description .
31 c .____________________________________________________________________.
32 c . option . e . 1 . variantes .
33 c . . . . 2 : triangles .
34 c . . . . 4 : quadrangles .
35 c . noehom . es . nbnoto . liste etendue des homologues par noeuds .
36 c . arehom . es . nbarto . liste etendue des homologues par aretes .
37 c . trihom . e . nbtrto . ensemble des triangles homologues .
38 c . quahom . e . nbquto . ensemble des quadrangles homologues .
39 c . somare . e .2*nbarto. numeros des extremites d'arete .
40 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
41 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
42 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
43 c . langue . e . 1 . langue des messages .
44 c . . . . 1 : francais, 2 : anglais .
45 c . codret . es . 1 . code de retour des modules .
46 c . . . . 0 : pas de probleme .
47 c . . . . 1 : probleme .
48 c ______________________________________________________________________
51 c 0. declarations et dimensionnement
54 c 0.1. ==> generalites
60 parameter ( nompro = 'VCEQU6' )
77 integer noehom(nbnoto), arehom(nbarto)
78 integer trihom(nbtrto), quahom(nbquto)
79 integer somare(2,nbarto)
80 integer aretri(nbtrto,3), arequa(nbquto,4)
81 integer ulsort, langue, codret
83 c 0.4. ==> variables locales
85 integer entlo2, entlo1
86 integer aretea(2), areteb(2)
87 integer na(2), nb(2), nc(2)
88 integer nbento, nbaret
89 integer iaux, jaux, kaux
90 integer iaux1, iaux2, iaux3, iaux4
93 parameter ( nbmess = 10 )
94 character*80 texte(nblang,nbmess)
96 c 0.5. ==> initialisations
97 c ______________________________________________________________________
107 #ifdef _DEBUG_HOMARD_
108 write (ulsort,texte(langue,1)) 'Entree', nompro
112 texte(1,4) = '(''Cote'',i2,'' : aretes'',i10,'' et'',i10)'
113 texte(1,5) = '(''Arete'',i10,'' de'',i10,'' a'',i10)'
114 texte(1,6) = '(''Noeud'',i10,'' sans homologue ?'')'
115 texte(1,7) = '(a,i10,'' : est homologue de'',i10)'
117 > '(''Les noeuds'',i10,'' et'',i10,'' devraient etre homologues'')'
118 texte(1,9) = '(''.. Aretes du '',a,i10,'' :'',4i10)'
119 texte(1,10) = '(/,''. Analyse des '',a,i10,'' et'',i10)'
121 texte(2,4) = '(''Face'',i2,'' : edges'',i10,'' and'',i10)'
122 texte(2,5) = '(''Edge'',i10,'' from'',i10,'' to'',i10)'
123 texte(2,6) = '(''Node'',i10,'' without any homologous ?'')'
124 texte(2,7) = '(a,i10,'' : is homologous with'',i10)'
126 > '(''Nodes'',i10,'' and'',i10,'' should be homologous'')'
127 texte(2,9) = '(''.. Edges of '',a,i10,'' :'',4i10)'
128 texte(2,10) = '(/,''. Analysis of '',a,i10,'' and'',i10)'
133 c 2. enrichissement de la structure sur les aretes a partir de la
134 c donnee des faces homologues
135 c ici, on traite les faces qui sont dans un coin de maillage.
136 c Autrement dit, il doit leur rester deux aretes sans homologues et
139 c X X----------------O
147 c O-------O O----------------O
149 c on va rapprocher les aretes en comparant les noeuds homologues O.
150 c on en profitera pour enregistrer le dernier noeud X.
153 if ( option.eq.2 ) then
161 do 21 , entlo2 = 1 , nbento
163 if ( codret.eq.0 ) then
165 if ( option.eq.2 ) then
166 entlo1 = trihom(entlo2)
168 entlo1 = quahom(entlo2)
171 c on boucle uniquement sur les faces de la face periodique 2
173 if ( entlo1.gt.0 ) then
175 #ifdef _DEBUG_HOMARD_
176 write (ulsort,texte(langue,10)) mess14(langue,3,option),
180 c 2.1. ==> reperage des deux aretes non encore enregistrees, sur
183 if ( codret.eq.0 ) then
185 do 211 , iaux = 1 , 2
189 if ( iaux.eq.1 ) then
194 #ifdef _DEBUG_HOMARD_
195 if ( option.eq.2 ) then
196 write (ulsort,texte(langue,9)) mess14(langue,1,option),
197 > kaux, (aretri(kaux,jaux), jaux = 1 , nbaret)
199 write (ulsort,texte(langue,9)) mess14(langue,1,option),
200 > kaux, (arequa(kaux,jaux), jaux = 1 , nbaret)
204 do 212 , jaux = 1 , nbaret
207 if ( option.eq.2 ) then
208 if ( arehom(aretri(kaux,jaux)).eq.0 ) then
209 iaux2 = aretri(kaux,jaux)
212 if ( arehom(arequa(kaux,jaux)).eq.0 ) then
213 iaux2 = arequa(kaux,jaux)
216 if ( iaux2.ne.0 ) then
217 if ( aretea(iaux).eq.0 ) then
228 if ( areteb(1).eq.0 .and. areteb(2).eq.0 ) then
232 #ifdef _DEBUG_HOMARD_
233 write (ulsort,texte(langue,4)) 1, aretea(1), areteb(1)
234 write (ulsort,texte(langue,4)) 2, aretea(2), areteb(2)
239 c 2.2. ==> pour chaque cote, on repere les deux noeuds extremites
240 c et le noeud central
242 c 0----------------------X----------------------0
243 c NA(i) aretea(i) NB(i) areteb(i) NC(i)
245 if ( codret.eq.0 ) then
247 do 221 , iaux = 1 , 2
249 iaux1 = somare(1,aretea(iaux))
250 iaux2 = somare(2,aretea(iaux))
251 iaux3 = somare(1,areteb(iaux))
252 iaux4 = somare(2,areteb(iaux))
254 if ( iaux1.eq.iaux3 ) then
258 elseif ( iaux1.eq.iaux4 ) then
262 elseif ( iaux2.eq.iaux3 ) then
266 elseif ( iaux2.eq.iaux4 ) then
271 write (ulsort,texte(langue,5)) aretea(iaux), iaux1, iaux2
272 write (ulsort,texte(langue,5)) areteb(iaux), iaux3, iaux4
280 c 2.3. ==> on repere les homologues
282 c 0----------------------X----------------------0
283 c NA(i) aretea(i) NB(i) areteb(i) NC(i)
285 if ( codret.eq.0 ) then
287 c 2.3.1. ==> mise en equivalence des aretes
289 if ( abs(noehom(na(1))).eq.na(2) ) then
291 if ( abs(noehom(nc(1))).eq.nc(2) ) then
295 write (ulsort,texte(langue,7)) mess14(langue,2,-1),
297 write (ulsort,texte(langue,8)) nc(1), nc(2)
301 elseif ( abs(noehom(na(1))).eq.nc(2) ) then
303 if ( abs(noehom(nc(1))).eq.na(2) ) then
307 write (ulsort,texte(langue,7)) mess14(langue,2,-1),
309 write (ulsort,texte(langue,8)) nc(1), na(2)
315 write (ulsort,texte(langue,6)) na(1)
322 if ( codret.eq.0 ) then
324 arehom(aretea(1)) = -iaux1
325 arehom(areteb(1)) = -iaux2
326 arehom(iaux1) = aretea(1)
327 arehom(iaux2) = areteb(1)
329 #ifdef _DEBUG_HOMARD_
330 write (ulsort,texte(langue,7)) mess14(langue,2,1),
332 write (ulsort,texte(langue,7)) mess14(langue,2,1),
338 c 2.3.2. ==> mise en equivalence du noeud central
340 if ( codret.eq.0 ) then
342 if ( noehom(nb(1)).eq.0 .and. noehom(nb(2)).eq.0 ) then
344 noehom(nb(1)) = -nb(2)
345 noehom(nb(2)) = nb(1)
349 if ( noehom(nb(1)).ne.-nb(2) ) then
350 write (ulsort,texte(langue,7)) mess14(langue,2,-1),
351 > nb(1), noehom(nb(1))
352 write (ulsort,texte(langue,8)) nb(1), nb(2)
370 if ( codret.ne.0 ) then
374 write (ulsort,texte(langue,1)) 'Sortie', nompro
375 write (ulsort,texte(langue,2)) codret
379 #ifdef _DEBUG_HOMARD_
380 write (ulsort,texte(langue,1)) 'Sortie', nompro