1 subroutine cmcp52 ( lepent, listar, listso,
2 > indnoe, indare, indtri, indtet,
4 > coonoe, hetnoe, arenoe,
7 > filare, merare, famare,
9 > filtri, pertri, famtri,
12 > hettet, tritet, cotrte,
13 > filtet, pertet, famtet,
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 52 - par la face F2
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 . indnoe . es . 1 . indice du dernier noeud cree .
49 c . indare . es . 1 . indice de la derniere arete creee .
50 c . indtri . es . 1 . indice du dernier triangle cree .
51 c . indtet . es . 1 . indice du dernier tetraedre cree .
52 c . indptp . e . 1 . indice du dernier pere enregistre .
53 c . coonoe . es .nouvno*3. coordonnees des noeuds .
54 c . hetnoe . es . nouvno . historique de l'etat des noeuds .
55 c . arenoe . es . nouvno . arete liee a un nouveau noeud .
56 c . famnoe . es . nouvno . famille des noeuds .
57 c . hetare . es . nouvar . historique de l'etat des aretes .
58 c . somare . es .2*nouvar. numeros des extremites d'arete .
59 c . filare . es . nouvar . premiere fille des aretes .
60 c . merare . es . nouvar . mere des aretes .
61 c . famare . . nouvar . famille des aretes .
62 c . hettri . es . nouvtr . historique de l'etat des triangles .
63 c . aretri . es .nouvtr*3. numeros des 3 aretes des triangles .
64 c . filtri . es . nouvtr . premier fils des triangles .
65 c . pertri . es . nouvtr . pere des triangles .
66 c . famtri . es . nouvtr . famille des triangles .
67 c . nivtri . es . nouvtr . niveau des triangles .
68 c . filqua . e . nouvqu . premier fils des quadrangles .
69 c . hettet . es . nouvte . historique de l'etat des tetraedres .
70 c . tritet . es .nouvtf*4. numeros des 4 triangles des tetraedres .
71 c . cotrte . e .nouvtf*4. code des 4 triangles des tetraedres .
72 c . filtet . es . nouvte . premier fils des tetraedres .
73 c . pertet . es . nouvte . pere des tetraedres .
74 c . . . . si pertet(i) > 0 : numero du tetraedre .
75 c . . . . si pertet(i) < 0 : -numero dans pthepe .
76 c . famtet . es . nouvte . famille des tetraedres .
77 c . facpen . e .nouvpf*5. numeros des faces des pentaedres .
78 c . cofape . e .nouvpf*5. codes des faces des pentaedres .
79 c . fampen . e . nouvpe . famille des penaedres .
80 c . cfapen . e . nctfpe*. codes des familles des pentaedres .
81 c . . . nbfpen . 1 : famille MED .
82 c . . . . 2 : type de pentaedres .
83 c . . . . 3 : famille des tetraedres de conformite .
84 c . . . . 4 : famille des pyramides de conformite .
85 c . . . . 3 : famille des tetraedres de conformite .
86 c . . . . 4 : famille des pyramides de conformite .
87 c . ulsort . e . 1 . unite logique de la sortie generale .
88 c . langue . e . 1 . langue des messages .
89 c . . . . 1 : francais, 2 : anglais .
90 c . codret . es . 1 . code de retour des modules .
91 c . . . . 0 : pas de probleme .
92 c . . . . 1 : aucune face ne correspond .
93 c ______________________________________________________________________
96 c 0. declarations et dimensionnement
99 c 0.1. ==> generalites
105 parameter ( nompro = 'CMCP52' )
123 integer listar(9), listso(6)
124 integer indnoe, indare, indtri, indtet
126 integer hetnoe(nouvno), arenoe(nouvno)
127 integer famnoe(nouvno)
128 integer hetare(nouvar), somare(2,nouvar)
129 integer filare(nouvar), merare(nouvar), famare(nouvar)
130 integer hettri(nouvtr), aretri(nouvtr,3)
131 integer filtri(nouvtr), pertri(nouvtr), famtri(nouvtr)
132 integer nivtri(nouvtr)
133 integer filqua(nouvqu)
134 integer hettet(nouvte), tritet(nouvtf,4), cotrte(nouvtf,4)
135 integer filtet(nouvte), pertet(nouvte), famtet(nouvte)
136 integer facpen(nouvpf,5), cofape(nouvpf,5)
137 integer fampen(nouvpe), cfapen(nctfpe,nbfpen)
139 double precision coonoe(nouvno,sdim)
141 integer ulsort, langue, codret
143 c 0.4. ==> variables locales
146 parameter ( nbsomm = 6 )
150 #ifdef _DEBUG_HOMARD_
156 integer lesnoe(6), lesare(7)
159 integer trifad(4,0:3), cotrvo(4,0:3), areqtr(4,0:3)
165 parameter ( nbmess = 10 )
166 character*80 texte(nblang,nbmess)
168 c 0.5. ==> initialisations
169 c ______________________________________________________________________
177 #ifdef _DEBUG_HOMARD_
178 write (ulsort,texte(langue,1)) 'Entree', nompro
190 c 2.1. ==> grandeurs independantes du cas traite (phase 1)
191 c les faces du pentaedre et leurs codes
193 f1 = facpen(lepent,1)
194 cf1 = cofape(lepent,1)
195 #ifdef _DEBUG_HOMARD_
196 f2 = facpen(lepent,2)
197 cf2 = cofape(lepent,2)
198 f3 = facpen(lepent,3)
199 cf3 = cofape(lepent,3)
200 f4 = facpen(lepent,4)
201 cf4 = cofape(lepent,4)
202 f5 = facpen(lepent,5)
203 cf5 = cofape(lepent,5)
204 write(ulsort,90002) 'f1', f1, cf1
205 write(ulsort,90002) 'f2', f2, cf2
206 write(ulsort,90002) 'f3', f3, cf3
207 write(ulsort,90002) 'f4', f4, cf4
208 write(ulsort,90002) 'f5', f5, cf5
211 c 2.2. ==> grandeurs dependant du cas traite
212 c iaux = numero local de l'arete coupee
213 c jaux = numero global de l'arete coupee
214 c noemil = noeud milieu de l'arete coupee
218 lesnoe(4) = somare(2,filare(jaux))
222 lesnoe(5) = somare(2,filare(jaux))
226 lesnoe(6) = somare(2,filare(jaux))
228 c lesnoe(i) = sommet a joindre au centre du pentaedre pour creer
231 lesnoe(1) = listso(2)
232 lesnoe(2) = listso(1)
233 lesnoe(3) = listso(3)
235 #ifdef _DEBUG_HOMARD_
236 write(ulsort,90002) 'lesnoe', lesnoe
239 c 2.3. ==> Triangles et aretes tracees sur les faces coupees
241 c trifad(1,0) = triangle central de la face 1 : FF5
242 c trifad(1,1) = triangle de la face 1 voisin de F4 : FF5 + 1/2
243 c trifad(1,2) = triangle de la face 1 voisin de F3 : FF5 + 2/1
244 c areqtr(1,1) : AS2N6
245 c areqtr(1,2) : AS3N6
246 c areqtr(1,0) : AS5N6
247 c areqtr(1,3) : AS6N6
249 c trifad(2,0) = triangle central de la face 2 : FF4
250 c trifad(2,1) = triangle de la face 2 voisin de F3 : FF4 + 2/1
251 c trifad(2,2) = triangle de la face 2 voisin de F5 : FF4 + 1/2
252 c areqtr(2,1) : AS1N5
253 c areqtr(2,2) : AS2N5
254 c areqtr(2,0) : AS4N5
255 c areqtr(2,3) : AS5N5
257 c trifad(3,0) = triangle central de la face 3 : FF3
258 c trifad(3,1) = triangle de la face 3 voisin de F5 : FF3 + 2/1
259 c trifad(3,2) = triangle de la face 3 voisin de F4 : FF3 + 1/2
260 c areqtr(3,1) : AS3N4
261 c areqtr(3,2) : AS1N4
262 c areqtr(3,0) : AS6N4
263 c areqtr(3,3) : AS4N4
265 c trifad(4,0) = triangle central de la face decoupee : FF2
266 c trifad(4,1) = triangle de la face voisin de F4 et F5 : FF2 + 1/2/3
267 c trifad(4,2) = triangle de la face voisin de F3 et F4 : FF2 + 2/3/1
268 c trifad(4,3) = triangle de la face voisin de F5 et F3 : FF2 + 3/1/2
269 c areqtr(4,1) : arete de trifad(4,1) : AN5N6
270 c areqtr(4,2) : arete de trifad(4,2) : AN4N5
271 c areqtr(4,3) : arete de trifad(4,3) : AN4N6
273 if ( codret.eq.0 ) then
285 #ifdef _DEBUG_HOMARD_
286 write (ulsort,texte(langue,3)) 'CMCP5B', nompro
288 call cmcp5b ( nulofa, lepent,
289 > i2, i3, i1, tabind,
291 > aretri, nivtri, filtri,
295 > trifad, cotrvo, areqtr,
296 > ulsort, langue, codret )
301 c 3. Creation du noeud interne
302 c 4. Creation des aretes internes
310 #ifdef _DEBUG_HOMARD_
311 write (ulsort,98000) indnoe+1, indnoe+1
312 write (ulsort,91000) indare+1, indare+6
315 if ( codret.eq.0 ) then
317 #ifdef _DEBUG_HOMARD_
318 write (ulsort,texte(langue,3)) 'CMCHPB', nompro
321 call cmchpb ( indnoe, indare, iaux,
322 > nbsomm, lesnoe, areint,
323 > coonoe, hetnoe, arenoe,
326 > filare, merare, famare,
327 > ulsort, langue, codret )
329 #ifdef _DEBUG_HOMARD_
330 do 400 , iaux = indare-5 , indare
331 write (ulsort,90015) 'Arete', iaux,
332 > ', sommets', (somare(jaux,iaux),jaux=1,2)
339 c 5. Creation des 15 triangles internes
340 c triint( 1) = FS2N56
341 c triint( 2) = FS1N45
342 c triint( 3) = FS3N46
356 #ifdef _DEBUG_HOMARD_
357 write (ulsort,92000) indtri+1, indtri+15
360 if ( codret.eq.0 ) then
362 lesare(1) = listar(3)
363 lesare(2) = listar(2)
364 lesare(3) = listar(1)
366 #ifdef _DEBUG_HOMARD_
367 write (ulsort,texte(langue,3)) 'CMCP5C', nompro
369 call cmcp5c ( indtri, triint,
371 > areint, areqtr, niveau,
372 > aretri, famtri, hettri,
373 > filtri, pertri, nivtri,
374 > ulsort, langue, codret )
376 #ifdef _DEBUG_HOMARD_
377 do 500 , iaux = indtri-14 , indtri
378 write(ulsort,90015) 'tria', iaux,
379 > ' : aretes =', (aretri(iaux,jaux),jaux=1,3)
386 c 6. Creation de la pyramide
390 c 7. Creation des tetraedres
393 #ifdef _DEBUG_HOMARD_
394 write (ulsort,93000) indtet+1, indtet+10
397 if ( codret.eq.0 ) then
402 #ifdef _DEBUG_HOMARD_
403 write (ulsort,texte(langue,3)) 'CMCP5E', nompro
405 call cmcp5e ( indtet, indptp,
407 > trifad, cotrvo, triint,
409 > hettet, tritet, cotrte,
410 > filtet, pertet, famtet,
412 > ulsort, langue, codret )
414 #ifdef _DEBUG_HOMARD_
415 do 700 , iaux = indtet-10 , indtet
416 write (ulsort,90015) 'Tetra', iaux,
417 > ', faces', (tritet(iaux,jaux),jaux=1,4)
418 write(ulsort,90015) 'Tetra', iaux,
419 > ', codes', (cotrte(iaux,jaux),jaux=1,4)
429 if ( codret.ne.0 ) then
433 write (ulsort,texte(langue,1)) 'Sortie', nompro
434 write (ulsort,texte(langue,2)) codret
438 #ifdef _DEBUG_HOMARD_
439 write (ulsort,texte(langue,1)) 'Sortie', nompro