1 subroutine cmcpy4 ( lehexa, indpyr, indptp,
3 > somhex, areint, as1s2, as1s4, as3s4, as2s3,
4 > somare, filare, arequa, filqua,
6 > hetpyr, filpyr, perpyr,
8 > ulsort, langue, codret )
9 c ______________________________________________________________________
13 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
15 c Version originale enregistree le 18 juin 1996 sous le numero 96036
16 c aupres des huissiers de justice Simart et Lavoir a Clamart
17 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
18 c aupres des huissiers de justice
19 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
21 c HOMARD est une marque deposee d'Electricite de France
27 c ______________________________________________________________________
29 c Creation du Maillage - Creation de PYramidee par leurs aretes
31 c - par paquets de 4 appuyes sur une face
33 c ______________________________________________________________________
34 c La description est faite comme pour le decoupage de la face 1
37 c |---------------|---------------|
42 c N3 |---------------|---------------| N2
47 c |---------------|---------------|
49 c ______________________________________________________________________
51 c . nom . e/s . taille . description .
52 c .____________________________________________________________________.
53 c . lehexa . e . 1 . hexaedre a decouper .
54 c . indpyr . es . 1 . indice de la derniere pyramide creee .
55 c . indptp . e . 1 . indice du dernier pere enregistre .
56 c . laface . e . 1 . face coupee en 2 quadrangles .
57 c . somhex . e . 8 . Les sommets de la face dans .
58 c . . . . l'ordre S2, S1, S4, S3 .
59 c . . . . puis les noeuds milieux N1, N2, N4, N3 .
60 c . areint . e . 9 . Les aretes internes utiles .
61 c . . . . . Les 4 1ers sur S2, S1, S4, S3 .
62 c . . . . . Les 4 suivants sur N1, N2, N4, N3 .
63 c . . . . . 9 sur le milieu de la face .
64 c . as1s2 . e . 1 . arete S1-S2 .
65 c . as1s4 . e . 1 . arete S1-S4 .
66 c . as3s4 . e . 1 . arete S3-S4 .
67 c . as2s3 . e . 1 . arete S2-S3 .
68 c . somare . e .2*nouvar. numeros des extremites d'arete .
69 c . filare . e . nouvar . fille ainee de chaque arete .
70 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
71 c . filqua . e . nouvqu . premier fils des quadrangles .
72 c . arepyr . e .nouvya*8. numeros des 8 aretes des pyramides .
73 c . fampyr . e . nouvpy . famille des pyramides .
74 c . hetpyr . e . nouvpy . historique de l'etat des pyramides .
75 c . filpyr . e . nouvpy . premier fils des pyramides .
76 c . perpyr . e . nouvpy . pere des pyramides .
77 c . . . . si perpyr(i) > 0 : numero de la pyramide .
78 c . . . . si perpyr(i) < 0 : -numero dans pphepe .
79 c . famhex . e . nouvhe . famille des hexaedres .
80 c . cfahex . . nctfhe. codes des familles des hexaedres .
81 c . . . nbfhex . 1 : famille MED .
82 c . . . . 2 : type d'hexaedres .
83 c . . . . 3 : famille des tetraedres de conformite .
84 c . . . . 4 : famille des pyramides de conformite .
85 c . ulsort . e . 1 . unite logique de la sortie generale .
86 c . langue . e . 1 . langue des messages .
87 c . . . . 1 : francais, 2 : anglais .
88 c . codret . es . 1 . code de retour des modules .
89 c ______________________________________________________________________
92 c 0. declarations et dimensionnement
95 c 0.1. ==> generalites
101 parameter ( nompro = 'CMCPY4' )
116 integer lehexa, indpyr, indptp
118 integer somhex(8), areint(9)
119 integer as1s2, as1s4, as3s4, as2s3
120 integer somare(2,nouvar), filare(nouvar)
121 integer arequa(nouvqu,4), filqua(nouvqu)
122 integer famhex(nouvhe), cfahex(nctfhe,nbfhex)
123 integer arepyr(nouvya,8), fampyr(nouvpy)
124 integer hetpyr(nouvpy), filpyr(nouvpy), perpyr(nouvpy)
126 integer ulsort, langue, codret
128 c 0.4. ==> variables locales
132 integer nupere, nufami
133 integer as1n1, as2n1, as1n2, as4n2
134 integer as3n4, as4n4, as2n3, as3n3
135 integer an1nf1, an2nf1, an4nf1, an3nf1
138 parameter ( nbmess = 10 )
139 character*80 texte(nblang,nbmess)
140 c ______________________________________________________________________
148 #ifdef _DEBUG_HOMARD_
149 write (ulsort,texte(langue,1)) 'Entree', nompro
157 #ifdef _DEBUG_HOMARD_
158 write (ulsort,90002) 'laface', laface
159 write (ulsort,90002) 'somhex', somhex
160 write (ulsort,90002) 'areint', areint
161 write (ulsort,90002) 'as1s2, as1s4, as3s4, as2s3',
162 > as1s2, as1s4, as3s4, as2s3
166 c 2. Recuperation des demi-aretes
168 c 2.1. == filles de as1s2
170 if ( somhex(1).le.somhex(2) ) then
171 as1n1 = filare(as1s2) + 1
172 as2n1 = filare(as1s2)
174 as1n1 = filare(as1s2)
175 as2n1 = filare(as1s2) + 1
178 c 2.2. == filles de as1s4
180 if ( somhex(2).le.somhex(3) ) then
181 as1n2 = filare(as1s4)
182 as4n2 = filare(as1s4) + 1
184 as1n2 = filare(as1s4) + 1
185 as4n2 = filare(as1s4)
188 c 2.4. == filles de as3s4
190 if ( somhex(3).le.somhex(4) ) then
191 as3n4 = filare(as3s4) + 1
192 as4n4 = filare(as3s4)
194 as3n4 = filare(as3s4)
195 as4n4 = filare(as3s4) + 1
198 c 2.4. == filles de as2s3
200 if ( somhex(4).le.somhex(1) ) then
201 as2n3 = filare(as2s3) + 1
202 as3n3 = filare(as2s3)
204 as2n3 = filare(as2s3)
205 as3n3 = filare(as2s3) + 1
208 #ifdef _DEBUG_HOMARD_
209 write (ulsort,90002) 'as1n1, as2n1, as1n2, as4n2',
210 > as1n1, as2n1, as1n2, as4n2
211 write (ulsort,90002) 'as3n4, as4n4, as2n3, as3n3',
212 > as3n4, as4n4, as2n3, as3n3
216 c 3. Recuperation des aretes entre les milieux des aretes coupees
218 c 3.1. ==> Recuperation des aretes : ce sont les 2eme et 3eme dans
219 c la description des fils (cf. cmcdq2)
221 listar(1) = arequa(filqua(laface) ,2)
222 listar(2) = arequa(filqua(laface) ,3)
223 listar(3) = arequa(filqua(laface)+2,2)
224 listar(4) = arequa(filqua(laface)+2,3)
225 #ifdef _DEBUG_HOMARD_
226 write (ulsort,90002) 'listar', listar
229 c 3.2. ==> Positionnement
233 jaux = somare(1,listar(iaux))
234 if ( jaux.eq.somhex(5) ) then
235 an1nf1 = listar(iaux)
236 elseif ( jaux.eq.somhex(6) ) then
237 an2nf1 = listar(iaux)
238 elseif ( jaux.eq.somhex(7) ) then
239 an4nf1 = listar(iaux)
240 elseif ( jaux.eq.somhex(8) ) then
241 an3nf1 = listar(iaux)
246 #ifdef _DEBUG_HOMARD_
247 write (ulsort,90002) 'an1nf1, an2nf1, an4nf1, an3nf1',
248 > an1nf1, an2nf1, an4nf1, an3nf1
252 c 4. Creation des pyramides
256 nufami = cfahex(cofpfh,famhex(lehexa))
258 c 4.1. ==> Pyramide numero 1
261 #ifdef _DEBUG_HOMARD_
262 write (ulsort,texte(langue,3)) 'CMCPYA pyra 1', nompro
264 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
265 > areint(2), areint(6), areint(9), areint(5),
266 > as1n2, an2nf1, an1nf1, as1n1,
267 > nupere, nufami, indpyr )
269 c 4.2. ==> Pyramide numero 2
272 #ifdef _DEBUG_HOMARD_
273 write (ulsort,texte(langue,3)) 'CMCPYA pyra 2', nompro
275 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
276 > areint(3), areint(7), areint(9), areint(6),
277 > as4n4, an4nf1, an2nf1, as4n2,
278 > nupere, nufami, indpyr )
280 c 4.3. ==> Pyramide numero 3
283 #ifdef _DEBUG_HOMARD_
284 write (ulsort,texte(langue,3)) 'CMCPYA pyra 3', nompro
286 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
287 > areint(4), areint(8), areint(9), areint(7),
288 > as3n3, an3nf1, an4nf1, as3n4,
289 > nupere, nufami, indpyr )
291 c 4.4. ==> Pyramide numero 4
294 #ifdef _DEBUG_HOMARD_
295 write (ulsort,texte(langue,3)) 'CMCPYA pyra 4', nompro
297 call cmcpya ( arepyr, fampyr, hetpyr, filpyr, perpyr,
298 > areint(1), areint(5), areint(9), areint(8),
299 > as2n1, an1nf1, an3nf1, as2n3,
300 > nupere, nufami, indpyr )
306 if ( codret.ne.0 ) then
310 write (ulsort,texte(langue,1)) 'Sortie', nompro
311 write (ulsort,texte(langue,2)) codret
315 #ifdef _DEBUG_HOMARD_
316 write (ulsort,texte(langue,1)) 'Sortie', nompro