1 subroutine vcequ5 ( entlo1, entlo2,
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 5
28 c ______________________________________________________________________
30 c . nom . e/s . taille . description .
31 c .____________________________________________________________________.
32 c . entlo1 . e . 1 . numero de l'arete sur la face 1 .
33 c . entlo2 . e . 1 . numero de l'arete sur la face 2 .
34 c . noehom . es . nbnoto . liste etendue des homologues par noeuds .
35 c . arehom . es . nbarto . liste etendue des homologues par aretes .
36 c . somare . e .2*nbarto. numeros des extremites d'arete .
37 c . np2are . e . nbarto . numero du noeud milieu de l'arete .
38 c . povoso . e .0:nbnoto. pointeur des voisins par sommet .
39 c . voisom . e . nvosom . elements 1d, 2d ou 3d voisins par sommet .
40 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
41 c . langue . e . 1 . langue des messages .
42 c . . . . 1 : francais, 2 : anglais .
43 c . codret . es . 1 . code de retour des modules .
44 c . . . . 0 : pas de probleme .
45 c . . . . 1 : probleme .
46 c ______________________________________________________________________
49 c 0. declarations et dimensionnement
52 c 0.1. ==> generalites
58 parameter ( nompro = 'VCEQU5' )
74 integer entlo1, entlo2
75 integer noehom(nbnoto), arehom(nbarto)
76 integer somare(2,nbarto), np2are(nbarto)
77 integer povoso(0:nbnoto), voisom(nvosom)
78 integer ulsort, langue, codret
80 c 0.4. ==> variables locales
83 integer iaux, jaux, nbrhom, ndaux
87 parameter ( nbmess = 10 )
88 character*80 texte(nblang,nbmess)
90 c 0.5. ==> initialisations
91 c ______________________________________________________________________
101 #ifdef _DEBUG_HOMARD_
102 write (ulsort,texte(langue,1)) 'Entree', nompro
106 texte(1,4) = '(''Il devrait l''''etre aussi de'',i10,'' ?'')'
107 texte(1,5) = '(''Infos donnees en numerotation HOMARD :'')'
108 texte(1,6) = '(a,i10,'' : est homologue de'',i10)'
110 > '(''. Noeuds homologues de l''''arete'',i10,'' :'',i2,''/2'')'
112 texte(2,4) = '(''It also should be with #'',i10)'
113 texte(2,5) = '(''Infos given with HOMARD # :'')'
114 texte(2,6) = '(a,i10,'' : is homologous with'',i10)'
116 > '(''. Homologous nodes of edge'',i10,'' :'',i2,''/2'')'
121 c 2. definir ou completer les relations d'equivalence entre les noeuds
122 c lies a une paire d'aretes
127 c 2.1. ==> decompte du nombre de noeuds homologues eventuels deja
130 if ( codret.eq.0 ) then
133 do 211 , iaux = 1 , 2
134 ndaux = abs(noehom(somare(iaux,entlo1)))
135 do 212 , jaux = 1 , 2
137 if ( ndaux.eq.somare(jaux,entab2) ) then
144 #ifdef _DEBUG_HOMARD_
145 write (ulsort,texte(langue,7)) entlo1, nbrhom
150 c 2.2. ==> si aucun noeud n'a d'homologue : on met en relation celui qui
151 c limite une autre arete homologue avec celui qui lui
152 c correspond dans l'arete homologue.
153 c le second noeud est traite en 2.3.
155 if ( codret.eq.0 ) then
157 if ( nbrhom.eq.0 ) then
159 call vcequn ( entlo1, entlo2,
161 > somare, povoso, voisom,
162 > ulsort, langue, codret)
170 c 2.3. ==> s'il reste un seul noeud sans homologue : on le met
171 c en equivalence avec son semblable sur l'autre arete
173 if ( codret.eq.0 ) then
175 if ( nbrhom.le.1 ) then
179 do 231 , iaux = 1 , 2
180 if ( noehom(somare(iaux,entlo1)).eq.0 ) then
183 if ( noehom(somare(iaux,entab2)).eq.0 ) then
188 if ( iaux1.ne.0 .and. iaux2.ne.0 ) then
189 noehom(somare(iaux1,entlo1)) = - somare(iaux2,entab2)
190 noehom(somare(iaux2,entab2)) = somare(iaux1,entlo1)
199 c 2.4. ==> on verifie qu'il ne reste plus aucun noeud sans son
202 if ( codret.eq.0 ) then
204 if ( nbrhom.ne.2 ) then
207 do 241 , iaux = 1 , 2
208 ndaux = abs(noehom(somare(iaux,entlo1)))
209 do 242 , jaux = 1 , 2
211 if ( ndaux.eq.somare(jaux,entab2) ) then
218 if ( nbrhom.ne.2 ) then
226 c 2.5. ==> en degre 2, on associe les deux noeuds milieux si ce n'est
229 if ( codret.eq.0 ) then
231 if ( degre.eq.2 ) then
233 if ( noehom(np2are(entlo1)).eq.0 ) then
234 noehom(np2are(entlo1)) = np2are(entab2)
236 if ( abs(noehom(np2are(entlo1))).ne.np2are(entab2) ) then
237 write (ulsort,texte(langue,6)) mess14(langue,2,-1),
238 > np2are(entlo1), noehom(np2are(entlo1))
239 write (ulsort,texte(langue,4)) np2are(entab2)
240 write (ulsort,texte(langue,5))
245 if ( noehom(np2are(entab2)).eq.0 ) then
246 noehom(np2are(entab2)) = np2are(entlo1)
248 if ( abs(noehom(np2are(entab2))).ne.np2are(entlo1) ) then
249 write (ulsort,texte(langue,6)) mess14(langue,2,-1),
250 > np2are(entab2), noehom(np2are(entab2))
251 write (ulsort,texte(langue,4)) np2are(entlo1)
252 write (ulsort,texte(langue,5))
265 if ( codret.ne.0 ) then
269 write (ulsort,texte(langue,1)) 'Sortie', nompro
270 write (ulsort,texte(langue,2)) codret
274 #ifdef _DEBUG_HOMARD_
275 write (ulsort,texte(langue,1)) 'Sortie', nompro