1 subroutine cmcp45 ( lepent, listar, listso,
2 > indare, indtri, indtet, indpyr,
5 > filare, merare, famare,
7 > filtri, pertri, famtri,
10 > hettet, tritet, cotrte,
11 > filtet, pertet, famtet,
12 > hetpyr, facpyr, cofapy,
13 > filpyr, perpyr, fampyr,
16 > ulsort, langue, codret )
17 c ______________________________________________________________________
21 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
23 c Version originale enregistree le 18 juin 1996 sous le numero 96036
24 c aupres des huissiers de justice Simart et Lavoir a Clamart
25 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
26 c aupres des huissiers de justice
27 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
29 c HOMARD est une marque deposee d'Electricite de France
35 c ______________________________________________________________________
37 c Creation du Maillage - Conformite - decoupage des Pentaedres
39 c - etat 45 - par la face F5
41 c ______________________________________________________________________
43 c . nom . e/s . taille . description .
44 c .____________________________________________________________________.
45 c . lepent . e . 1 . pentaedre a decouper .
46 c . listar . e . 9 . liste des aretes du pentaedre a decouper .
47 c . listso . e . 6 . liste des sommets du pentaedre a decouper .
48 c . indare . es . 1 . indice de la derniere arete creee .
49 c . indtri . es . 1 . indice du dernier triangle cree .
50 c . indtet . es . 1 . indice du dernier tetraedre cree .
51 c . indpyr . es . 1 . indice de la derniere pyramide creee .
52 c . indptp . e . 1 . indice du dernier pere enregistre .
53 c . hetare . es . nouvar . historique de l'etat des aretes .
54 c . somare . es .2*nouvar. numeros des extremites d'arete .
55 c . filare . es . nouvar . premiere fille des aretes .
56 c . merare . es . nouvar . mere des aretes .
57 c . famare . . nouvar . famille des aretes .
58 c . hettri . es . nouvtr . historique de l'etat des triangles .
59 c . aretri . es .nouvtr*3. numeros des 3 aretes des triangles .
60 c . filtri . es . nouvtr . premier fils des triangles .
61 c . pertri . es . nouvtr . pere des triangles .
62 c . famtri . es . nouvtr . famille des triangles .
63 c . nivtri . es . nouvtr . niveau des triangles .
64 c . arequa . e .nouvqu*4. numeros des 4 aretes des quadrangles .
65 c . filqua . e . nouvqu . premier fils des quadrangles .
66 c . hettet . es . nouvte . historique de l'etat des tetraedres .
67 c . tritet . es .nouvtf*4. numeros des 4 triangles des tetraedres .
68 c . cotrte . e .nouvtf*4. code des 4 triangles des tetraedres .
69 c . filtet . es . nouvte . premier fils des tetraedres .
70 c . pertet . es . nouvte . pere des tetraedres .
71 c . . . . si pertet(i) > 0 : numero du tetraedre .
72 c . . . . si pertet(i) < 0 : -numero dans pthepe .
73 c . famtet . es . nouvte . famille des tetraedres .
74 c . hetpyr . es . nouvpy . historique de l'etat des pyramides .
75 c . facpyr . es .nouvyf*5. numeros des 5 faces des pyramides .
76 c . cofapy . es .nouvyf*5. codes des faces 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 . facpen . e .nouvpf*5. numeros des faces des pentaedres .
83 c . cofape . e .nouvpf*5. codes des faces des pentaedres .
84 c . fampen . e . nouvpe . famille des penaedres .
85 c . cfapen . e . nctfpe*. codes des familles des pentaedres .
86 c . . . nbfpen . 1 : famille MED .
87 c . . . . 2 : type de pentaedres .
88 c . . . . 3 : famille des tetraedres de conformite .
89 c . . . . 4 : famille des pyramides de conformite .
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 . . . . 0 : pas de probleme .
97 c . . . . 1 : aucune face ne correspond .
98 c ______________________________________________________________________
101 c 0. declarations et dimensionnement
104 c 0.1. ==> generalites
110 parameter ( nompro = 'CMCP45' )
126 integer listar(9), listso(6)
127 integer indare, indtri, indtet, indpyr
129 integer hetare(nouvar), somare(2,nouvar)
130 integer filare(nouvar), merare(nouvar), famare(nouvar)
131 integer hettri(nouvtr), aretri(nouvtr,3)
132 integer filtri(nouvtr), pertri(nouvtr), famtri(nouvtr)
133 integer nivtri(nouvtr)
134 integer arequa(nouvqu,4)
135 integer filqua(nouvqu)
136 integer hettet(nouvte), tritet(nouvtf,4), cotrte(nouvtf,4)
137 integer filtet(nouvte), pertet(nouvte), famtet(nouvte)
138 integer hetpyr(nouvpy), facpyr(nouvyf,5), cofapy(nouvyf,5)
139 integer filpyr(nouvpy), perpyr(nouvpy), fampyr(nouvpy)
140 integer facpen(nouvpf,5), cofape(nouvpf,5)
141 integer fampen(nouvpe), cfapen(nctfpe,nbfpen)
143 integer ulsort, langue, codret
145 c 0.4. ==> variables locales
148 #ifdef _DEBUG_HOMARD_
152 #ifdef _DEBUG_HOMARD_
159 integer noemil, lesnoe(2), lesare(7)
162 integer trifad(4,0:2), cotrvo(4,0:2), areqtr(4,0:2)
163 integer quafad(4), areqqu(4)
169 parameter ( nbmess = 10 )
170 character*80 texte(nblang,nbmess)
172 c 0.5. ==> initialisations
173 c ______________________________________________________________________
181 #ifdef _DEBUG_HOMARD_
182 write (ulsort,texte(langue,1)) 'Entree', nompro
194 c 2.1. ==> grandeurs independantes du cas traite (phase 1)
195 c les faces du pentaedre et leurs codes
197 cf5 = cofape(lepent,5)
198 #ifdef _DEBUG_HOMARD_
199 f1 = facpen(lepent,1)
200 cf1 = cofape(lepent,1)
201 f2 = facpen(lepent,2)
202 cf2 = cofape(lepent,2)
203 f3 = facpen(lepent,3)
204 cf3 = cofape(lepent,3)
205 f4 = facpen(lepent,4)
206 cf4 = cofape(lepent,4)
207 f5 = facpen(lepent,5)
208 write(ulsort,90002) 'f1', f1, cf1
209 write(ulsort,90002) 'f2', f2, cf2
210 write(ulsort,90002) 'f3', f3, cf3
211 write(ulsort,90002) 'f4', f4, cf4
212 write(ulsort,90002) 'f5', f5, cf5
215 c 2.2. ==> grandeurs dependant du cas traite
217 c lesnoe(i) = sommet a joindre au centre de la face quadrangulaire
218 c coupee pour creer l'arete interne i
220 lesnoe(1) = listso(1)
221 lesnoe(2) = listso(4)
223 #ifdef _DEBUG_HOMARD_
224 write(ulsort,90002) 'lesnoe', lesnoe
227 c 2.3. ==> Triangles et aretes tracees sur les faces coupees
229 c trifad(1,0) = triangle central de la face 1 : FF3
230 c trifad(1,1) = triangle de la face 1 bordant F1 : FF3 + 1/2
231 c trifad(1,2) = triangle de la face 1 bordant F2 : FF3 + 2/1
232 c areqtr(1,1) : AS1N9
233 c areqtr(1,2) : AS4N9
235 c trifad(2,0) = triangle central de la face 2 : FF4
236 c trifad(2,1) = triangle de la face 2 bordant F1 : FF4 + 2/1
237 c trifad(2,2) = triangle de la face 2 bordant F2 : FF4 + 1/2
238 c areqtr(2,1) : AS1N8
239 c areqtr(2,2) : AS4N8
241 c trifad(3,0) = triangle de la face 3 : FF1 + 0/1
242 c trifad(3,1) = triangle de la face 3 autre : FF1 + 1/0
243 c areqtr(3,2) : arete commune : AS1N3
245 c trifad(4,0) = triangle de la face 4 : FF2 + 0/1
246 c trifad(4,1) = triangle de la face 4 autre : FF2 + 1/0
247 c areqtr(4,2) : arete commune : AS4N6
249 c quafad(1) = quadrangle de la face 5 : FF5 + 0/1/2/3
250 c quafad(2) = quadrangle de la face 5 autre : FF5 + 1/2/3/0
251 c quafad(3) = quadrangle de la face 5 autre : FF5 + 2/3/0/1
252 c quafad(4) = quadrangle de la face 5 autre : FF5 + 3/0/1/2
253 c areqqu(p) : arete commune a quafad(p) et quafad(p+1)
259 if ( codret.eq.0 ) then
272 #ifdef _DEBUG_HOMARD_
273 write (ulsort,texte(langue,3)) 'CMCP4B', nompro
275 call cmcp4b ( nulofa, lepent,
280 > aretri, nivtri, filtri,
285 > trifad, cotrvo, areqtr,
287 > ulsort, langue, codret )
292 c 3. Creation du noeud interne
295 c 4. Creation des aretes internes
299 #ifdef _DEBUG_HOMARD_
300 write (ulsort,91000) indare+1, indare+2
303 if ( codret.eq.0 ) then
305 #ifdef _DEBUG_HOMARD_
306 write (ulsort,texte(langue,3)) 'CMCHPA', nompro
309 call cmchpa ( indare, iaux,
310 > noemil, lesnoe, areint,
312 > filare, merare, famare,
313 > ulsort, langue, codret )
318 c 5. Creation des 7 triangles internes
327 #ifdef _DEBUG_HOMARD_
328 write (ulsort,92000) indtri+1, indtri+7
331 if ( codret.eq.0 ) then
333 lesare(1) = listar(7)
335 #ifdef _DEBUG_HOMARD_
336 write (ulsort,texte(langue,3)) 'CMCP4C', nompro
338 call cmcp4c ( indtri, triint,
340 > areint, areqtr, areqqu, niveau,
341 > aretri, famtri, hettri,
342 > filtri, pertri, nivtri,
343 > ulsort, langue, codret )
347 c 6. Creation des pyramides
350 #ifdef _DEBUG_HOMARD_
351 write (ulsort,95000) indpyr+1, indpyr+4
354 if ( codret.eq.0 ) then
358 #ifdef _DEBUG_HOMARD_
359 write (ulsort,texte(langue,3)) 'CMCP4D', nompro
361 call cmcp4d ( indpyr, indptp,
363 > trifad, cotrvo, triint,
365 > hetpyr, facpyr, cofapy,
366 > filpyr, perpyr, fampyr,
368 > ulsort, langue, codret )
369 #ifdef _DEBUG_HOMARD_
370 do 600 , iaux = indpyr-3 , indpyr
371 write (ulsort,90015) 'Pyra', iaux,
372 > ', faces', (facpyr(iaux,jaux),jaux=1,5)
373 write(ulsort,90015) 'Pyra', iaux,
374 > ', codes', (cofapy(iaux,jaux),jaux=1,5)
381 c 7. Creation des tetraedres
384 #ifdef _DEBUG_HOMARD_
385 write (ulsort,93000) indtet+1, indtet+2
388 if ( codret.eq.0 ) then
390 #ifdef _DEBUG_HOMARD_
391 write (ulsort,texte(langue,3)) 'CMCP4E', nompro
393 call cmcp4e ( indtet, indptp,
395 > trifad, cotrvo, triint,
396 > hettet, tritet, cotrte,
397 > filtet, pertet, famtet,
399 > ulsort, langue, codret )
401 #ifdef _DEBUG_HOMARD_
402 do 700 , iaux = indtet-1 , indtet
403 write (ulsort,90015) 'Tetra', iaux,
404 > ', faces', (tritet(iaux,jaux),jaux=1,4)
405 write(ulsort,90015) 'Tetra', iaux,
406 > ', codes', (cotrte(iaux,jaux),jaux=1,4)
416 if ( codret.ne.0 ) then
420 write (ulsort,texte(langue,1)) 'Sortie', nompro
421 write (ulsort,texte(langue,2)) codret
425 #ifdef _DEBUG_HOMARD_
426 write (ulsort,texte(langue,1)) 'Sortie', nompro