1 subroutine cmcha1 ( lehexa, etahex,
2 > indare, indtri, indpyr,
5 > filare, merare, famare,
7 > filtri, pertri, famtri,
10 > hetpyr, facpyr, cofapy,
11 > filpyr, perpyr, fampyr,
14 > ulsort, langue, codret )
15 c ______________________________________________________________________
19 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
21 c Version originale enregistree le 18 juin 1996 sous le numero 96036
22 c aupres des huissiers de justice Simart et Lavoir a Clamart
23 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
24 c aupres des huissiers de justice
25 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
27 c HOMARD est une marque deposee d'Electricite de France
33 c ______________________________________________________________________
35 c Creation du Maillage - Conformite - decoupage des Hexaedres
37 c - par 1 Arete - pilotage
39 c ______________________________________________________________________
41 c . nom . e/s . taille . description .
42 c .____________________________________________________________________.
43 c . lehexa . e . 1 . hexaedre a decouper .
44 c . etahex . s . 1 . etat final de l'hexaedre .
45 c . indare . es . 1 . indice de la derniere arete creee .
46 c . indtri . es . 1 . indice du dernier triangle cree .
47 c . indpyr . es . 1 . indice de la derniere pyramide creee .
48 c . indptp . e . 1 . indice du dernier pere enregistre .
49 c . hetare . es . nouvar . historique de l'etat des aretes .
50 c . somare . es .2*nouvar. numeros des extremites d'arete .
51 c . filare . es . nouvar . premiere fille des aretes .
52 c . merare . es . nouvar . mere des aretes .
53 c . famare . . nouvar . famille des aretes .
54 c . hettri . es . nouvtr . historique de l'etat des triangles .
55 c . aretri . es .nouvtr*3. numeros des 3 aretes des triangles .
56 c . filtri . es . nouvtr . premier fils des triangles .
57 c . pertri . es . nouvtr . pere des triangles .
58 c . famtri . es . nouvtr . famille des triangles .
59 c . nivtri . es . nouvtr . niveau des triangles .
60 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
61 c . filqua . e . nouvqu . premier fils des quadrangles .
62 c . hetpyr . e . nouvpy . historique de l'etat des pyramides .
63 c . facpyr . e .nouvyf*5. numeros des 5 faces des pyramides .
64 c . cofapy . e .nouvyf*5. codes des faces des pyramides .
65 c . filpyr . e . nouvpy . premier fils des pyramides .
66 c . perpyr . e . nouvpy . pere des pyramides .
67 c . . . . si perpyr(i) > 0 : numero de la pyramide .
68 c . . . . si perpyr(i) < 0 : -numero dans pphepe .
69 c . fampyr . e . nouvpy . famille des pyramides .
70 c . quahex . e .nouvhf*6. numeros des 6 quadrangles des hexaedres .
71 c . coquhe . e .nouvhf*6. codes des 6 quadrangles des hexaedres .
72 c . famhex . e . nouvhe . famille des hexaedres .
73 c . cfahex . . nctfhe. codes des familles des hexaedres .
74 c . . . nbfhex . 1 : famille MED .
75 c . . . . 2 : type d'hexaedres .
76 c . . . . 3 : famille des tetraedres de conformite .
77 c . . . . 4 : famille des pyramides de conformite .
78 c . ulsort . e . 1 . unite logique de la sortie generale .
79 c . langue . e . 1 . langue des messages .
80 c . . . . 1 : francais, 2 : anglais .
81 c . codret . es . 1 . code de retour des modules .
82 c . . . . 0 : pas de probleme .
83 c . . . . 1 : aucune arete ne correspond .
84 c ______________________________________________________________________
87 c 0. declarations et dimensionnement
90 c 0.1. ==> generalites
96 parameter ( nompro = 'CMCHA1' )
110 integer lehexa, etahex
111 integer indare, indtri, indpyr
113 integer hetare(nouvar), somare(2,nouvar)
114 integer filare(nouvar), merare(nouvar), famare(nouvar)
115 integer hettri(nouvtr), aretri(nouvtr,3)
116 integer filtri(nouvtr), pertri(nouvtr), famtri(nouvtr)
117 integer nivtri(nouvtr)
118 integer arequa(nouvqu,4)
119 integer filqua(nouvqu)
120 integer hetpyr(nouvpy), facpyr(nouvyf,5), cofapy(nouvyf,5)
121 integer filpyr(nouvpy), perpyr(nouvpy), fampyr(nouvpy)
122 integer quahex(nouvhf,6), coquhe(nouvhf,6)
123 integer famhex(nouvhe), cfahex(nctfhe,nbfhex)
125 integer ulsort, langue, codret
127 c 0.4. ==> variables locales
130 integer listar(12), listso(8)
133 parameter ( nbmess = 10 )
134 character*80 texte(nblang,nbmess)
136 c 0.5. ==> initialisations
137 c ______________________________________________________________________
145 #ifdef _DEBUG_HOMARD_
146 write (ulsort,texte(langue,1)) 'Entree', nompro
148 write (ulsort,1000) 'indare', indare
149 write (ulsort,1000) 'indtri', indtri
150 write (ulsort,1000) 'indpyr', indpyr
151 1000 format (a6,' =',i10)
154 texte(1,4) ='(''Aucune arete ne correspond.'')'
156 texte(2,4) ='(''No Edge is good.'')'
161 c 2. Recherche des aretes et des sommets
164 #ifdef _DEBUG_HOMARD_
165 write (ulsort,texte(langue,3)) 'UTARHE', nompro
167 call utarhe ( lehexa,
169 > arequa, quahex, coquhe,
172 #ifdef _DEBUG_HOMARD_
173 write (ulsort,texte(langue,3)) 'UTSOHE', nompro
175 call utsohe ( somare, listar, listso )
178 c 3. Recherche de l'arete decoupee
180 #ifdef _DEBUG_HOMARD_
181 write(ulsort,*) 'listar(1) = ', listar(1),
182 > ' de ',somare(1,listar(1)),
183 > ' a ',somare(2,listar(1))
184 write(ulsort,*) 'listar(2) = ', listar(2),
185 > ' de ',somare(1,listar(2)),
186 > ' a ',somare(2,listar(2))
187 write(ulsort,*) 'listar(3) = ', listar(3),
188 > ' de ',somare(1,listar(3)),
189 > ' a ',somare(2,listar(3))
190 write(ulsort,*) 'listar(4) = ', listar(4),
191 > ' de ',somare(1,listar(4)),
192 > ' a ',somare(2,listar(4))
193 write(ulsort,*) 'listar(9) = ', listar(9),
194 > ' de ',somare(1,listar(9)),
195 > ' a ',somare(2,listar(9))
196 write(ulsort,*) 'listar(11) = ', listar(11),
197 > ' de ',somare(1,listar(11)),
198 > ' a ',somare(2,listar(11))
201 if ( codret.eq.0 ) then
203 c 3.1. ==> C'est l'arete 1 qui est coupee
205 if ( mod(hetare(listar(1)),10).eq.2 ) then
207 #ifdef _DEBUG_HOMARD_
208 write (ulsort,texte(langue,3)) 'CMCH61', nompro
210 call cmch61 ( lehexa, listar, listso,
211 > indare, indtri, indpyr,
214 > filare, merare, famare,
216 > filtri, pertri, famtri,
219 > hetpyr, facpyr, cofapy,
220 > filpyr, perpyr, fampyr,
223 > ulsort, langue, codret )
225 c 3.2. ==> C'est l'arete 2 qui est coupee
227 elseif ( mod(hetare(listar(2)),10).eq.2 ) then
229 #ifdef _DEBUG_HOMARD_
230 write (ulsort,texte(langue,3)) 'CMCH62', nompro
232 call cmch62 ( lehexa, listar, listso,
233 > indare, indtri, indpyr,
236 > filare, merare, famare,
238 > filtri, pertri, famtri,
241 > hetpyr, facpyr, cofapy,
242 > filpyr, perpyr, fampyr,
245 > ulsort, langue, codret )
247 c 3.3. ==> C'est l'arete 3 qui est coupee
249 elseif ( mod(hetare(listar(3)),10).eq.2 ) then
251 #ifdef _DEBUG_HOMARD_
252 write (ulsort,texte(langue,3)) 'CMCH63', nompro
254 call cmch63 ( lehexa, listar, listso,
255 > indare, indtri, indpyr,
258 > filare, merare, famare,
260 > filtri, pertri, famtri,
263 > hetpyr, facpyr, cofapy,
264 > filpyr, perpyr, fampyr,
267 > ulsort, langue, codret )
269 c 3.4. ==> C'est l'arete 4 qui est coupee
271 elseif ( mod(hetare(listar(4)),10).eq.2 ) then
273 #ifdef _DEBUG_HOMARD_
274 write (ulsort,texte(langue,3)) 'CMCH64', nompro
276 call cmch64 ( lehexa, listar, listso,
277 > indare, indtri, indpyr,
280 > filare, merare, famare,
282 > filtri, pertri, famtri,
285 > hetpyr, facpyr, cofapy,
286 > filpyr, perpyr, fampyr,
289 > ulsort, langue, codret )
291 c 3.5. ==> C'est l'arete 5 qui est coupee
293 elseif ( mod(hetare(listar(5)),10).eq.2 ) then
295 #ifdef _DEBUG_HOMARD_
296 write (ulsort,texte(langue,3)) 'CMCH65', nompro
298 call cmch65 ( lehexa, listar, listso,
299 > indare, indtri, indpyr,
302 > filare, merare, famare,
304 > filtri, pertri, famtri,
307 > hetpyr, facpyr, cofapy,
308 > filpyr, perpyr, fampyr,
311 > ulsort, langue, codret )
313 c 3.6. ==> C'est l'arete 6 qui est coupee
315 elseif ( mod(hetare(listar(6)),10).eq.2 ) then
317 #ifdef _DEBUG_HOMARD_
318 write (ulsort,texte(langue,3)) 'CMCH66', nompro
320 call cmch66 ( lehexa, listar, listso,
321 > indare, indtri, indpyr,
324 > filare, merare, famare,
326 > filtri, pertri, famtri,
329 > hetpyr, facpyr, cofapy,
330 > filpyr, perpyr, fampyr,
333 > ulsort, langue, codret )
335 c 3.7. ==> C'est l'arete 7 qui est coupee
337 elseif ( mod(hetare(listar(7)),10).eq.2 ) then
339 #ifdef _DEBUG_HOMARD_
340 write (ulsort,texte(langue,3)) 'CMCH67', nompro
342 call cmch67 ( lehexa, listar, listso,
343 > indare, indtri, indpyr,
346 > filare, merare, famare,
348 > filtri, pertri, famtri,
351 > hetpyr, facpyr, cofapy,
352 > filpyr, perpyr, fampyr,
355 > ulsort, langue, codret )
357 c 3.8. ==> C'est l'arete 8 qui est coupee
359 elseif ( mod(hetare(listar(8)),10).eq.2 ) then
361 #ifdef _DEBUG_HOMARD_
362 write (ulsort,texte(langue,3)) 'CMCH68', nompro
364 call cmch68 ( lehexa, listar, listso,
365 > indare, indtri, indpyr,
368 > filare, merare, famare,
370 > filtri, pertri, famtri,
373 > hetpyr, facpyr, cofapy,
374 > filpyr, perpyr, fampyr,
377 > ulsort, langue, codret )
379 c 3.9. ==> C'est l'arete 9 qui est coupee
381 elseif ( mod(hetare(listar(9)),10).eq.2 ) then
383 #ifdef _DEBUG_HOMARD_
384 write (ulsort,texte(langue,3)) 'CMCH69', nompro
386 call cmch69 ( lehexa, listar, listso,
387 > indare, indtri, indpyr,
390 > filare, merare, famare,
392 > filtri, pertri, famtri,
395 > hetpyr, facpyr, cofapy,
396 > filpyr, perpyr, fampyr,
399 > ulsort, langue, codret )
401 c 3.10. ==> C'est l'arete 10 qui est coupee
403 elseif ( mod(hetare(listar(10)),10).eq.2 ) then
405 #ifdef _DEBUG_HOMARD_
406 write (ulsort,texte(langue,3)) 'CMCH70', nompro
408 call cmch70 ( lehexa, listar, listso,
409 > indare, indtri, indpyr,
412 > filare, merare, famare,
414 > filtri, pertri, famtri,
417 > hetpyr, facpyr, cofapy,
418 > filpyr, perpyr, fampyr,
421 > ulsort, langue, codret )
423 c 3.11. ==> C'est l'arete 11 qui est coupee
425 elseif ( mod(hetare(listar(11)),10).eq.2 ) then
427 #ifdef _DEBUG_HOMARD_
428 write (ulsort,texte(langue,3)) 'CMCH71', nompro
430 call cmch71 ( lehexa, listar, listso,
431 > indare, indtri, indpyr,
434 > filare, merare, famare,
436 > filtri, pertri, famtri,
439 > hetpyr, facpyr, cofapy,
440 > filpyr, perpyr, fampyr,
443 > ulsort, langue, codret )
445 c 3.12. ==> C'est l'arete 12 qui est coupee
447 elseif ( mod(hetare(listar(12)),10).eq.2 ) then
449 #ifdef _DEBUG_HOMARD_
450 write (ulsort,texte(langue,3)) 'CMCH72', nompro
452 call cmch72 ( lehexa, listar, listso,
453 > indare, indtri, indpyr,
456 > filare, merare, famare,
458 > filtri, pertri, famtri,
461 > hetpyr, facpyr, cofapy,
462 > filpyr, perpyr, fampyr,
465 > ulsort, langue, codret )
467 c 3.13. ==> Laquelle ?
479 if ( codret.ne.0 ) then
483 write (ulsort,texte(langue,1)) 'Sortie', nompro
484 write (ulsort,texte(langue,2)) codret
485 write (ulsort,texte(langue,4))
489 #ifdef _DEBUG_HOMARD_
490 write (ulsort,texte(langue,1)) 'Sortie', nompro