1 subroutine cmhoma ( noehom, arehom,
2 > somare, filare, hetare,
3 > ulsort, langue, codret )
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c Creation du Maillage - HOMologues - les Aretes
26 c ______________________________________________________________________
28 c . nom . e/s . taille . description .
29 c .____________________________________________________________________.
30 c . noehom . es . nbnoto . ensemble des noeuds homologues .
31 c . arehom . es . nbarto . ensemble des aretes homologues .
32 c . somare . e .2*nbarto. numeros des extremites d'arete .
33 c . filare . e . nbarto . premiere fille des aretes .
34 c . hetare . e . nbarto . historique de l'etat des aretes .
35 c . ulsort . e . 1 . unite logique de la sortie generale .
36 c . langue . e . 1 . langue des messages .
37 c . . . . 1 : francais, 2 : anglais .
38 c . codret . es . 1 . code de retour des modules .
39 c . . . . 0 : pas de probleme .
40 c ______________________________________________________________________
43 c 0. declarations et dimensionnement
46 c 0.1. ==> generalites
52 parameter ( nompro = 'CMHOMA' )
66 integer noehom(nbnoto), arehom(nbarto)
67 integer somare(2,nbarto), filare(nbarto), hetare(nbarto)
69 integer ulsort, langue, codret
71 c 0.4. ==> variables locales
74 integer a21, a22, a11, a12, s11, s12, s21, s22, s2m, s1m
79 parameter ( nbmess = 10 )
80 character*80 texte(nblang,nbmess)
82 c 0.5. ==> initialisations
83 c ______________________________________________________________________
92 write (ulsort,texte(langue,1)) 'Entree', nompro
96 texte(1,4) = '(''Le noeud'',i10,'' est homologue du noeud'',i10)'
98 > '(''Le '',a,i10,'' devrait etre homologue du '',a,i10)'
99 texte(1,6) = '(''alors que les tables indiquent que :'')'
100 texte(1,7) = '(''Arete'',i10,'' de sommets'',2i10)'
102 texte(2,4) = '(''Node #'',i10,'' is homologous of node #'',i10)'
104 >'(''The '',a,''#'',i10,'' should be homologous of '',a,''#'',i10)'
105 texte(2,6) = '(''but tables indicate that :'')'
106 texte(2,7) = '(''Edge #'',i10,'' with vertices #'',2i10)'
109 c 2. on boucle uniquement sur les aretes de la face periodique 2
110 c qui viennent d'etre decoupees en 2
113 do 21, larete = 1 , nbarpe
115 cgn print *,'larete = ',larete
117 if ( arehom(larete).gt.0 ) then
119 c larete est sur la face periodique 2
121 if ( hetare(larete).eq.2 ) then
122 cgn print *,'.. larete est coupee en 2'
124 c 2.1. ==> les entites liees a l'arete courante, larete :
125 c . sommets de l'arete mere
126 c . les aretes filles
128 c . l'arete homologue de la mere
131 c x-----------.-----------x
134 s21 = somare(1,larete)
135 s22 = somare(2,larete)
142 areh = arehom(larete)
143 cgn if ( larete.eq.50)then
144 cgn print *,'.. sommets de larete : ',s21,s22
145 cgn print *,'.. filles de larete : ',a21,a22
146 cgn print *,'.. homologue de larete : ',arehom(larete)
149 if ( larete.eq.areh ) then
151 c 2.2. ==> si on est sur l'axe : les deux aretes filles et le nouveau
152 c noeud sont homologues d'eux memes
153 c par convention, ils sont notes positifs.
155 if ( noehom(s2m).ne.0 ) then
156 if ( abs(noehom(s2m)).ne.s2m ) then
157 c il y a un probleme : la table est deja remplie
158 write (ulsort,texte(langue,5)) mess14(langue,1,-1),
159 > s2m, mess14(langue,1,-1), s2m
160 write (ulsort,texte(langue,6))
161 write (ulsort,texte(langue,4)) s2m, noehom(s2m)
173 c 2.3. ==> on n'est pas sur l'axe : il faut les entites liees a l'arete
175 c . sommets de l'arete mere
176 c . les aretes filles
180 c x-----------.-----------x
191 c les 2 nouveaux noeuds sommets doivent etre homologues
192 c s2m est sur la meme face que "larete" c'est-a-dire la face 2
193 c donc noehom(s2m) est positif.
194 c s1m est sur l'autre face, donc noehom(s1m) est negatif
196 if ( noehom(s2m).ne.0 ) then
197 if ( abs(noehom(s2m)).ne.s1m ) then
198 c il y a un probleme : la table est deja remplie
199 write (ulsort,texte(langue,5)) mess14(langue,1,-1),
200 > s1m, mess14(langue,1,-1), s2m
201 write (ulsort,texte(langue,6))
202 write (ulsort,texte(langue,4)) s1m, noehom(s1m)
203 write (ulsort,texte(langue,4)) s2m, noehom(s2m)
211 c on repere les homologues des aretes
212 c on utilise le fait que noehom(s21) > 0 car s21 est
215 if ( noehom(s21).eq.s11 ) then
217 c la premiere fille de larete est homologue a
218 c la premiere fille de areh
225 elseif ( noehom(s21).eq.s12 ) then
227 c la premiere fille de larete est homologue a
228 c la deuxieme fille de areh
236 c il y a un probleme : la correspondance sur les noeuds
237 c n'est pas coherente avec la correspondance sur les aretes
238 write (ulsort,texte(langue,5)) mess14(langue,1,1),
239 > larete, mess14(langue,1,1), areh
240 write (ulsort,texte(langue,7)) larete, s21, s22
241 write (ulsort,texte(langue,7)) areh, s11, s12
242 write (ulsort,texte(langue,4)) s21, noehom(s21)
243 write (ulsort,texte(langue,4)) s22, noehom(s22)
244 write (ulsort,texte(langue,4)) s11, noehom(s11)
245 write (ulsort,texte(langue,4)) s12, noehom(s12)
261 if ( codret.ne.0 ) then
265 write (ulsort,texte(langue,1)) 'Sortie', nompro
266 write (ulsort,texte(langue,2)) codret
270 #ifdef _DEBUG_HOMARD_
271 write (ulsort,texte(langue,1)) 'Sortie', nompro