1 subroutine cmhomq ( noehom, arehom, trihom, quahom,
3 > arequa, filqua, hetqua,
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 Creation du Maillage - HOMologues - les Quadrangles
27 c ______________________________________________________________________
29 c . nom . e/s . taille . description .
30 c .____________________________________________________________________.
31 c . noehom . es . nbnoto . ensemble des noeuds homologues .
32 c . arehom . es . nbarto . ensemble des aretes homologues .
33 c . trihom . es . nbtrto . ensemble des triangles homologues .
34 c . quahom . es . nbquto . ensemble des quadrangles homologues .
35 c . somare . e .2*nbarto. numeros des extremites d'arete .
36 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
37 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
38 c . filqua . e . nbquto . premier fils des quadrangles .
39 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
40 c . ulsort . e . 1 . unite logique de la sortie generale .
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 ______________________________________________________________________
48 c 0. declarations et dimensionnement
51 c 0.1. ==> generalites
57 parameter ( nompro = 'CMHOMQ' )
74 integer noehom(nbnoto), arehom(nbarto)
75 integer trihom(nbtrto), quahom(nbquto)
76 integer somare(2,nbarto), aretri(nbtrto,3)
77 integer arequa(nbquto,4), filqua(nbquto), hetqua(nbquto)
79 integer ulsort, langue, codret
81 c 0.4. ==> variables locales
87 integer a2(4), n2f1(4), a2nin0(4), n20
88 integer a1(4), n1f1(4), a1nin0(4), n10
89 integer perma1, perma2
92 parameter ( nbmess = 10 )
93 character*80 texte(nblang,nbmess)
95 c 0.5. ==> initialisations
96 c ______________________________________________________________________
104 #ifdef _DEBUG_HOMARD_
105 write (ulsort,texte(langue,1)) 'Entree', nompro
109 texte(1,4) = '(''Etat du '',a,i10,'' : '',i4)'
110 texte(1,5) = '(/,''Les deux '',a,'' homologues'',2i10)'
111 texte(1,6) = '(''devraient etre coupes en 3.'')'
112 texte(1,7) = '(''Il faudrait l''''arete'',i10,'' ou '',i10)'
113 texte(1,9) = '(''Arete'',i10,'' de sommets'',2i10)'
114 texte(1,10) = '(5x,''Erreur sur les '',a,'' homologues.'')'
116 texte(2,4) = '(''State of '',a,'' #'',i10,'' : '',i4)'
117 texte(2,5) = '(/,''The two homologous '',a,'' #'',i10)'
118 texte(2,6) = '(''should be cut into 3.'')'
119 texte(2,7) = '(''It should be edge #'',i10,'' or #'',i10)'
120 texte(2,9) = '(''Edge #'',i10,'' with vertices #'',2i10)'
121 texte(2,10) = '(5x,''Error for homologous '',a)'
123 cgn 1788 format(a,i6,' : ',10i6)
124 cgn 1789 format(10i6)
125 cgn write(ulsort,*)'hetqua'
126 cgn write(ulsort,1789)hetqua
127 cgn write(ulsort,*)'filqua'
128 cgn write(ulsort,1789)filqua
129 cgn write(ulsort,*)'noehom'
130 cgn write(ulsort,1789)noehom
131 cgn write(ulsort,*)'arehom'
132 cgn write(ulsort,1789)arehom
133 cgn write(ulsort,*)'trihom'
134 cgn write(ulsort,1789)trihom
135 cgn write(ulsort,*)'quahom'
136 cgn write(ulsort,1789)quahom
138 c 2. on boucle uniquement sur les quadrangles de la face periodique 2
139 c qui viennent d'etre decoupes en 2 ou en 4 quadrangles ou en
141 c on se rapportera a cmrdqu pour les conventions
144 do 21, lequad = 1, nbqupe
146 if ( codret.eq.0 ) then
148 if ( quahom(lequad).gt.0 ) then
150 fach = abs(quahom(lequad))
152 hist = hetqua(lequad)
153 etafac = mod ( hist, 100 )
154 cgn write(ulsort,*)'lequad, hist, etafac = ',lequad, hist,etafac
156 if ( etafac.eq.4 ) then
158 c 2.1. ==> le quadrangle vient d'etre decoupe en 4
160 c 2.1.1. ==> infos sur lequad et ses fils
162 a2(1) = arequa(lequad,1)
163 a2(2) = arequa(lequad,2)
164 a2(3) = arequa(lequad,3)
165 a2(4) = arequa(lequad,4)
167 n2f1(1) = filqua(lequad)
168 n2f1(2) = n2f1(1) + 1
169 n2f1(3) = n2f1(2) + 1
170 n2f1(4) = n2f1(3) + 1
171 a2nin0(1) = arequa(n2f1(1),2)
172 a2nin0(2) = arequa(n2f1(2),2)
173 a2nin0(3) = arequa(n2f1(3),2)
174 a2nin0(4) = arequa(n2f1(4),2)
175 n20 = somare(2,a2nin0(1))
177 c 2.1.2. ==> infos sur l'homologue de lequad et ses fils
179 a1(1) = arequa(fach,1)
180 a1(2) = arequa(fach,2)
181 a1(3) = arequa(fach,3)
182 a1(4) = arequa(fach,4)
184 n1f1(1) = filqua(fach)
185 n1f1(2) = n1f1(1) + 1
186 n1f1(3) = n1f1(2) + 1
187 n1f1(4) = n1f1(3) + 1
188 a1nin0(1) = arequa(n1f1(1),2)
189 a1nin0(2) = arequa(n1f1(2),2)
190 a1nin0(3) = arequa(n1f1(3),2)
191 a1nin0(4) = arequa(n1f1(4),2)
192 n10 = somare(2,a1nin0(1))
194 cgn write(ulsort,*) 'face 2'
195 cgn write(ulsort,1789) a2(1), a2(2), a2(3), a2(4)
196 cgn write(ulsort,1789) n2f1
197 cgn write(ulsort,1789) a2nin0
198 cgn write(ulsort,1789) n20
199 cgn write(ulsort,*) 'face 1'
200 cgn write(ulsort,1789) a1(1), a1(2), a1(3), a1(4)
201 cgn write(ulsort,1789) n1f1
202 cgn write(ulsort,1789) a1nin0
203 cgn write(ulsort,1789) n10
205 c 2.1.3. ==> reperage des homologues
207 c 2.1.3.1. ==> recherche du positionnement relatif des deux quadrangles
209 c perma1 : numero de la permutation sur les aretes a1(1) et a1(3)
210 c perma2 : numero de la permutation sur les aretes a1(2) et a1(4)
213 c .________. .________.
216 c a1(1). .a1(3) a2(1). .a2(3)
218 c .________. .________.
224 if ( arehom(a2(1)).eq.a1(1) ) then
226 if ( arehom(a2(2)).eq.a1(2) ) then
228 elseif ( arehom(a2(2)).eq.a1(4) ) then
232 elseif ( arehom(a2(1)).eq.a1(2) ) then
234 if ( arehom(a2(2)).eq.a1(3) ) then
236 elseif ( arehom(a2(2)).eq.a1(1) ) then
240 elseif ( arehom(a2(1)).eq.a1(3) ) then
242 if ( arehom(a2(2)).eq.a1(4) ) then
244 elseif ( arehom(a2(2)).eq.a1(2) ) then
248 elseif ( arehom(a2(1)).eq.a1(4) ) then
250 if ( arehom(a2(2)).eq.a1(1) ) then
252 elseif ( arehom(a2(2)).eq.a1(3) ) then
258 if ( perma1.eq.100 .or. perma2.eq.100 ) then
260 write (ulsort,texte(langue,5)) mess14(langue,3,4),
262 write (ulsort,texte(langue,9)) a2(1),
263 > somare(1,a2(1)), somare(2,a2(1))
264 write (ulsort,texte(langue,9)) a2(1), arehom(a2(1))
268 cgn write(ulsort,*)'perma1, perma2',perma1, perma2
270 c 2.1.3.2. ==> remplissage des tables
272 if ( codret.eq.0 ) then
274 iaux = per1a4(perma1,1)
275 quahom(n2f1(1)) = n1f1(iaux)
276 quahom(n1f1(iaux)) = -n2f1(1)
277 arehom(a2nin0(1)) = a1nin0(iaux)
278 arehom(a1nin0(iaux)) = -a2nin0(1)
280 iaux = per1a4(perma2,2)
281 quahom(n2f1(2)) = n1f1(iaux)
282 quahom(n1f1(iaux)) = -n2f1(2)
283 arehom(a2nin0(2)) = a1nin0(iaux)
284 arehom(a1nin0(iaux)) = -a2nin0(2)
286 iaux = per1a4(perma1,3)
287 quahom(n2f1(3)) = n1f1(iaux)
288 quahom(n1f1(iaux)) = -n2f1(3)
289 arehom(a2nin0(3)) = a1nin0(iaux)
290 arehom(a1nin0(iaux)) = -a2nin0(3)
292 iaux = per1a4(perma2,4)
293 quahom(n2f1(4)) = n1f1(iaux)
294 quahom(n1f1(iaux)) = -n2f1(4)
295 arehom(a2nin0(4)) = a1nin0(iaux)
296 arehom(a1nin0(iaux)) = -a2nin0(4)
303 elseif ( etafac.eq.31 .or. etafac.eq.32 .or.
304 > etafac.eq.33 .or. etafac.eq.34 ) then
306 c 2.2. ==> le quadrangle vient d'etre decoupe en 3 triangles
308 c 2.2.1. ==> infos sur lequad et ses fils
310 n2f1(1) = -filqua(lequad)
311 n2f1(2) = n2f1(1) + 1
312 n2f1(3) = n2f1(2) + 1
313 a2nin0(1) = aretri(n2f1(1),1)
314 a2nin0(2) = aretri(n2f1(1),3)
315 a2nin0(3) = aretri(n2f1(2),1)
317 c 2.2.2. ==> infos sur l'homologue de lequad et ses fils
319 n1f1(1) = -filqua(fach)
320 n1f1(2) = n1f1(1) + 1
321 n1f1(3) = n1f1(2) + 1
322 a1nin0(1) = aretri(n1f1(1),1)
323 a1nin0(2) = aretri(n1f1(1),3)
324 a1nin0(3) = aretri(n1f1(2),1)
325 a1nin0(4) = aretri(n1f1(3),1)
327 cgn write(ulsort,*) 'face 2'
328 cgn write(ulsort,1788) 'fils de ',lequad,n2f1(1), n2f1(2), n2f1(3)
329 cgn write(ulsort,1788) 'aretes des fils de ',lequad,
330 cgn > a2nin0(1), a2nin0(2), a2nin0(3)
331 cgn write(ulsort,*) 'face 1'
332 cgn write(ulsort,1788) 'fils de ',fach,n1f1(1), n1f1(2), n1f1(3)
333 cgn write(ulsort,1788) 'aretes des fils de ',fach,
335 cgn write(ulsort,1789) arehom(a2nin0(3))
337 c 2.2.3. ==> reperage des homologues
339 trihom(n2f1(1)) = n1f1(1)
340 trihom(n1f1(1)) = -n2f1(1)
342 if ( arehom(a2nin0(3)).eq.a1nin0(3) ) then
344 arehom(a2nin0(1)) = a1nin0(1)
345 arehom(a1nin0(1)) = -a2nin0(1)
346 arehom(a2nin0(2)) = a1nin0(2)
347 arehom(a1nin0(2)) = -a2nin0(2)
348 trihom(n2f1(2)) = n1f1(2)
349 trihom(n1f1(2)) = -n2f1(2)
350 trihom(n2f1(3)) = n1f1(3)
351 trihom(n1f1(3)) = -n2f1(3)
353 elseif ( arehom(a2nin0(3)).eq.a1nin0(4) ) then
355 arehom(a2nin0(1)) = a1nin0(2)
356 arehom(a1nin0(2)) = -a2nin0(1)
357 arehom(a2nin0(2)) = a1nin0(1)
358 arehom(a1nin0(1)) = -a2nin0(2)
359 trihom(n2f1(2)) = n1f1(3)
360 trihom(n1f1(3)) = -n2f1(2)
361 trihom(n2f1(3)) = n1f1(2)
362 trihom(n1f1(2)) = -n2f1(3)
366 write (ulsort,texte(langue,5)) mess14(langue,3,4),
368 write (ulsort,texte(langue,6))
369 write (ulsort,texte(langue,4)) mess14(langue,1,4),
370 > lequad, hetqua(lequad)
371 write (ulsort,texte(langue,4)) mess14(langue,1,4),
389 if ( codret.ne.0 ) then
393 write (ulsort,texte(langue,1)) 'Sortie', nompro
394 write (ulsort,texte(langue,2)) codret
398 cgn write(ulsort,*)'noehom'
399 cgn write(ulsort,1789)noehom
400 cgn write(ulsort,*)'arehom'
401 cgn write(ulsort,1789)arehom
402 cgn write(ulsort,*)'trihom'
403 cgn write(ulsort,1789)trihom
404 cgn write(ulsort,*)'quahom'
405 cgn write(ulsort,1789)quahom
406 #ifdef _DEBUG_HOMARD_
407 write (ulsort,texte(langue,1)) 'Sortie', nompro