1 subroutine vcequn ( laret1, laret2,
3 > somare, povoso, voisom,
4 > ulsort, langue, codret)
5 c ______________________________________________________________________
9 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
11 c Version originale enregistree le 18 juin 1996 sous le numero 96036
12 c aupres des huissiers de justice Simart et Lavoir a Clamart
13 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
14 c aupres des huissiers de justice
15 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
17 c HOMARD est une marque deposee d'Electricite de France
23 c ______________________________________________________________________
25 c aVant adaptation Conversion - EQUivalence - Noeud
27 c Cela permet de mettre en association les noeuds lies a une
29 c ______________________________________________________________________
31 c . nom . e/s . taille . description .
32 c .____________________________________________________________________.
33 c . laret1 . e . 1 . numero global de l'arete de depart .
34 c . laret2 . e . 1 . numero global de l'arete d'arrivee .
35 c . noehom . es . nbnoto . liste etendue des homologues par noeuds .
36 c . arehom . e . nbarto . liste etendue des homologues par aretes .
37 c . somare . e .2*nbarto. numeros des extremites d'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 = 'VCEQUN' )
73 integer noehom(nbnoto)
74 integer laret1, laret2
75 integer arehom(nbarto)
76 integer somare(2,nbarto), povoso(0:nbnoto), voisom(nvosom)
77 integer ulsort, langue, codret
79 c 0.4. ==> variables locales
81 integer larete, noeud, ndaux
82 integer noeud1, noeud2
84 integer iaux, jaux, kaux, laux
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
107 >'(''Impossible de trouver l''''homologue du noeud'',i10)'
108 #ifdef _DEBUG_HOMARD_
109 texte(1,5) = '(''. Recherche de l''''homologue du noeud'',i10)'
110 texte(1,6) = '(''Aretes'',i10,'' et'',i10)'
112 > '(''.. Examen de l''''arete'',i10,'' (homologue'',i10,'')'')'
113 texte(1,8) = '(''... Noeud'',i10,'' (ndaux)'')'
114 texte(1,9) = '(''.... Noeud'',i10,'' (somare)'')'
116 texte(1,10) = '(a,i10,'' : est homologue de'',i10)'
119 > '(''Homologous for node #'',i10,''cannot be found.'')'
120 #ifdef _DEBUG_HOMARD_
121 texte(2,5) = '(''. Search for the homologous for node # '',i10)'
122 texte(2,6) = '(''Edges'',i10,'' and'',i10)'
124 > '(''.. Check for edge #'',i10,'' (homologous'',i10,'')'')'
125 texte(2,8) = '(''... Node'',i10,'' (ndaux)'')'
126 texte(2,9) = '(''.... Node'',i10,'' (somare)'')'
128 texte(2,10) = '(a,i10,'' : is homologous with'',i10)'
132 c en entre, nous avons deux aretes (laret1 et laret2) dont on sait
133 c qu'elles sont homologues l'une de l'autre, mais dont aucune des 2
134 c paires de noeuds n'a ete declaree homologue. Le but de ce programme
135 c est de trouver une de ces deux paires.
138 c O-----------------O
140 c O-----------------O
143 c On part du premier noeud de l'arete laret1. On passe en revue
144 c toutes les aretes dont il est un des sommets.
145 c Quand on tombe sur une arete differente de laret1 et qui possede
146 c une homologue (aaa sur le croquis ci-dessous), on est bon. On
147 c cherche quel est le noeud commun a son homologue (bbb) et laret2.
148 c Logiquement, ce noeud commun (noeud2) est l'homologue du noeud de
150 c Si cela echoue, c'est que le noeud de depart etait l'extremite de
151 c la zone en equivalence. On recommence avec l'autre noeud de
153 c Si cela echoue encore, c'est un probleme. Vraisemblablement parce
154 c que l'arete en equivalence est seule dans son coin. On ne peut rien
155 c faire ! Il faut que la donnee des noeuds homologues soit presente
156 c dans le maillage de depart.
163 c O-----------------O--------------------0
166 c O-----------------O--------------------0
169 c A la sortie, on aura donc repere une paire de noeuds homologues
170 c pour la paire d'aretes desirees. La seconde paire sera reperee
171 c dans l'algorithme suivant dans le programme appelant.
174 if ( codret.eq.0 ) then
176 #ifdef _DEBUG_HOMARD_
177 write (ulsort,texte(langue,6)) laret1, laret2
184 noeud = somare(iaux,laret1)
186 #ifdef _DEBUG_HOMARD_
187 write (ulsort,texte(langue,5)) noeud
190 ideb = povoso(noeud-1)+1
193 do 211 , jaux = ideb , ifin
195 larete = voisom(jaux)
197 #ifdef _DEBUG_HOMARD_
198 write (ulsort,texte(langue,7)) larete, arehom(larete)
201 if ( larete.ne.laret1 .and. arehom(larete).ne.0 ) then
203 do 212 , kaux = 1 , 2
204 ndaux = somare(kaux,abs(arehom(larete)))
205 #ifdef _DEBUG_HOMARD_
206 write (ulsort,texte(langue,8)) ndaux
208 do 213 , laux = 1 , 2
210 #ifdef _DEBUG_HOMARD_
211 write (ulsort,texte(langue,9)) somare(laux,abs(laret2))
213 if ( ndaux.eq.somare(laux,abs(laret2)) ) then
215 noeud2 = somare(laux,abs(laret2))
230 c 2.2. ==> enregistrement
234 if ( noeud1.ne.0 ) then
235 noehom(noeud1) = - noeud2
236 noehom(noeud2) = noeud1
245 if ( codret.ne.0 ) then
249 #ifdef _DEBUG_HOMARD_
250 write (ulsort,texte(langue,1)) 'Sortie', nompro
251 write (ulsort,texte(langue,2)) codret
252 write (ulsort,texte(langue,10)) mess14(langue,2,1),
254 write (ulsort,texte(langue,4)) noeud
257 #ifdef _DEBUG_HOMARD_
258 write (ulsort,texte(langue,1)) 'Sortie', nompro