1 subroutine cmh100 ( lehexa,
2 > indnoe, indare, indtet, indpyr, indhex,
4 > listso, listar, listfa, listcf,
5 > coonoe, hetnoe, arenoe,
8 > filare, merare, famare,
12 > filtet, pertet, famtet,
14 > filpyr, perpyr, fampyr,
16 > filhex, perhex, famhex,
18 > ulsort, langue, codret )
19 c ______________________________________________________________________
23 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
25 c Version originale enregistree le 18 juin 1996 sous le numero 96036
26 c aupres des huissiers de justice Simart et Lavoir a Clamart
27 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
28 c aupres des huissiers de justice
29 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
31 c HOMARD est une marque deposee d'Electricite de France
37 c ______________________________________________________________________
39 c Creation du Maillage - decoupage de conformite des Hexaedres
41 c ______________________________________________________________________
43 c . nom . e/s . taille . description .
44 c .____________________________________________________________________.
45 c . lehexa . e . 1 . hexaedre a decouper .
46 c . indnoe . es . 1 . indice du dernier noeud cree .
47 c . indare . es . 1 . indice de la derniere arete creee .
48 c . indtet . es . 1 . indice du dernier tetraedre cree .
49 c . indpyr . es . 1 . indice de la derniere pyramide creee .
50 c . indhex . es . 1 . indice du dernier hexaedre cree .
51 c . indptp . es . 1 . indice du dernier pere enregistre .
52 c . listso . e . 8 . numeros globaux des sommets .
53 c . listar . e . 12 . numeros globaux des aretes .
54 c . listfa . e . 6 . numeros globaux des faces .
55 c . listcf . e . 6 . codes des faces .
56 c . coonoe . es .nouvno*3. coordonnees des noeuds .
57 c . hetnoe . es . nouvno . historique de l'etat des noeuds .
58 c . arenoe . es . nouvno . arete liee a un nouveau noeud .
59 c . famnoe . es . nouvno . famille des noeuds .
60 c . hetare . es . nouvar . historique de l'etat des aretes .
61 c . somare . es .2*nouvar. numeros des extremites d'arete .
62 c . filare . es . nouvar . premiere fille des aretes .
63 c . merare . es . nouvar . mere des aretes .
64 c . famare . es . nouvar . famille des aretes .
65 c . aretri . e .nouvtr*3. numeros des 3 aretes des triangles .
66 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
67 c . filqua . e . nouvqu . premier fils des quadrangles .
68 c . hettet . es . nouvte . historique de l'etat des tetraedres .
69 c . aretet . es .nouvta*6. numeros des 6 aretes des tetraedres .
70 c . filtet . es . nouvte . premier fils des tetraedres .
71 c . pertet . es . nouvte . pere des tetraedres .
72 c . . . . si pertet(i) > 0 : numero du tetraedre .
73 c . . . . si pertet(i) < 0 : -numero dans pthepe .
74 c . famtet . es . nouvte . famille des tetraedres .
75 c . hetpyr . es . nouvpy . historique de l'etat des pyramides .
76 c . arepyr . es .nouvya*8. numeros des 8 aretes des pyramides .
77 c . filpyr . es . nouvpy . premier fils des pyramides .
78 c . perpyr . es . nouvpy . pere des pyramides .
79 c . . . . si perpyr(i) > 0 : numero de la pyramide .
80 c . . . . si perpyr(i) < 0 : -numero dans pphepe .
81 c . fampyr . es . nouvpy . famille des pyramides .
82 c . hethex . es . nouvhe . historique de l'etat des hexaedres .
83 c . arehex . es .nouvha12. numeros des 12 aretes des hexaedres .
84 c . filhex . es . nouvhe . premier fils des hexaedres .
85 c . perhex . es . nouvhe . pere des hexaedres .
86 c . famhex . es . nouvhe . famille des hexaedres .
87 c . cfahex . e . nctfhe. codes des familles des hexaedres .
88 c . . . nbfhex . 1 : famille MED .
89 c . . . . 2 : type d'hexaedres .
90 c . . . . 3 : famille des tetraedres de conformite .
91 c . . . . 4 : famille des pyramides de conformite .
92 c . ulsort . e . 1 . unite logique de la sortie generale .
93 c . langue . e . 1 . langue des messages .
94 c . . . . 1 : francais, 2 : anglais .
95 c . codret . es . 1 . code de retour des modules .
96 c ______________________________________________________________________
99 c 0. declarations et dimensionnement
102 c 0.1. ==> generalites
108 parameter ( nompro ='CMH100' )
111 parameter ( nbsomm = 8 )
128 integer indnoe, indare, indtet, indpyr, indhex
130 integer listso(8), listar(12), listfa(6), listcf(6)
131 integer hetnoe(nouvno), arenoe(nouvno)
132 integer famnoe(nouvno)
133 integer hetare(nouvar), somare(2,nouvar)
134 integer filare(nouvar), merare(nouvar), famare(nouvar)
135 integer aretri(nouvtr,3)
136 integer arequa(nouvqu,4)
137 integer filqua(nouvqu)
138 integer hettet(nouvte), aretet(nouvta,6)
139 integer filtet(nouvte), pertet(nouvte), famtet(nouvte)
140 integer hetpyr(nouvpy), arepyr(nouvya,8)
141 integer filpyr(nouvpy), perpyr(nouvpy), fampyr(nouvpy)
142 integer arehex(nouvha,12)
143 integer hethex(nouvhe)
144 integer filhex(nouvhe), perhex(nouvhe)
145 integer cfahex(nctfhe,nbfhex), famhex(nouvhe)
147 double precision coonoe(nouvno,sdim)
149 integer ulsort, langue, codret
151 c 0.4. ==> variables locales
155 integer lesnoe(9), areint(9)
156 integer fdnume, fdcode
157 integer are1, are2, are3, are4
158 integer are5, are6, are7, are8
165 parameter ( nbmess = 10 )
166 character*80 texte(nblang,nbmess)
168 c 0.5. ==> initialisations
169 c ______________________________________________________________________
178 #ifdef _DEBUG_HOMARD_
179 write (ulsort,texte(langue,1)) 'Entree', nompro
183 #ifdef _DEBUG_HOMARD_
184 write (ulsort,90002) 'indnoe', indnoe
185 write (ulsort,90002) 'indtet', indtet
186 write (ulsort,90002) 'indpyr', indpyr
187 write (ulsort,90002) 'indhex', indhex
189 #ifdef _DEBUG_HOMARD_
190 write (ulsort,90002) 'listar 1-8', (listar(iaux),iaux=1,8)
191 write (ulsort,90002) 'listar 9-12', (listar(iaux),iaux=9,12)
192 write (ulsort,90002) 'listso', listso
193 write (ulsort,90002) 'listfa', listfa
194 write (ulsort,90002) 'listcf', listcf
201 c . des sommets de l'hexaedre
202 c . du noeud milieu de l'arete coupee
206 lesnoe(iaux) = listso(iaux)
209 lesnoe(9) = somare(2,filare(listar(1)))
211 #ifdef _DEBUG_HOMARD_
212 do 2000 , iaux = 1 , 9
213 write(ulsort,90015) 'lesnoe(',iaux,') = ', lesnoe(iaux)
218 c 3. Recuperation des aretes tracees sur les faces coupees en 3
222 jaux = -filqua(fdnume)
223 if ( listcf(1).lt.5 ) then
224 as4n1 = aretri(jaux,1)
225 as3n1 = aretri(jaux,3)
226 as1n1 = aretri(jaux+1,1)
227 as2n1 = aretri(jaux+2,1)
229 as4n1 = aretri(jaux,3)
230 as3n1 = aretri(jaux,1)
231 as1n1 = aretri(jaux+2,1)
232 as2n1 = aretri(jaux+1,1)
236 jaux = -filqua(fdnume)
237 if ( listcf(2).lt.5 ) then
238 as6n1 = aretri(jaux,3)
239 as5n1 = aretri(jaux,1)
241 as6n1 = aretri(jaux,1)
242 as5n1 = aretri(jaux,3)
245 #ifdef _DEBUG_HOMARD_
246 write(ulsort,90002) 'as1n1, as2n1', as1n1, as2n1
247 write(ulsort,90002) 'as3n1, as4n1', as3n1, as4n1
248 write(ulsort,90002) 'as5n1, as6n1', as5n1, as6n1
252 c 4. Creation des deux aretes internes
260 areint(iaux) = indare
262 somare(1,areint(iaux)) = min ( lesnoe(9) , lesnoe(6+iaux) )
263 somare(2,areint(iaux)) = max ( lesnoe(9) , lesnoe(6+iaux) )
265 famare(areint(iaux)) = 1
266 hetare(areint(iaux)) = 50
267 merare(areint(iaux)) = 0
268 filare(areint(iaux)) = 0
269 #ifdef _DEBUG_HOMARD_
270 write(ulsort,90006) 'areint(iaux) = ', areint(iaux),
271 > ' de ',somare(1,areint(iaux)),
272 > ' a ',somare(2,areint(iaux))
278 c 5. Creation des 4 pyramides
282 jaux = cfahex(cofpfh,famhex(lehexa))
284 c 5.1. ==> Sur la face 3
287 #ifdef _DEBUG_HOMARD_
288 write (ulsort,texte(langue,3)) 'CMCPYA - face 3', nompro
290 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
291 > as4n1, as1n1, as6n1, areint(1),
292 > listar(2), listar(5), listar(10), listar(7),
293 > iaux, jaux, indpyr )
295 c 5.2. ==> Sur la face 4
298 #ifdef _DEBUG_HOMARD_
299 write (ulsort,texte(langue,3)) 'CMCPYA - face 4', nompro
301 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
302 > as2n1, as3n1, areint(2), as5n1,
303 > listar(3), listar(8), listar(11), listar(6),
304 > iaux, jaux, indpyr )
306 c 5.3. ==> Sur la face 5
309 #ifdef _DEBUG_HOMARD_
310 write (ulsort,texte(langue,3)) 'CMCPYA - face 5', nompro
312 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
313 > as3n1, as4n1, areint(1), areint(2),
314 > listar(4), listar(7), listar(12), listar(8),
315 > iaux, jaux, indpyr )
317 c 5.4. ==> Sur la face 6
320 #ifdef _DEBUG_HOMARD_
321 write (ulsort,texte(langue,3)) 'CMCPYA - face 6', nompro
323 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
324 > as6n1, as5n1, areint(2), areint(1),
325 > listar(9), listar(11), listar(12), listar(10),
326 > iaux, jaux, indpyr )
332 if ( codret.ne.0 ) then
336 write (ulsort,texte(langue,1)) 'Sortie', nompro
337 write (ulsort,texte(langue,2)) codret
341 #ifdef _DEBUG_HOMARD_
342 write (ulsort,texte(langue,1)) 'Sortie', nompro