1 subroutine pcs2pe ( nbfop2, profho, vap2ho,
2 > hetpen, facpen, cofape, filpen, fppyte,
7 > ulsort, langue, codret )
8 c ______________________________________________________________________
12 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
14 c Version originale enregistree le 18 juin 1996 sous le numero 96036
15 c aupres des huissiers de justice Simart et Lavoir a Clamart
16 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
17 c aupres des huissiers de justice
18 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
20 c HOMARD est une marque deposee d'Electricite de France
26 c ______________________________________________________________________
28 c aPres adaptation - Conversion de Solution -
30 c interpolation p2 sur les noeuds - decoupage des PEntaedres
32 c remarque : on devrait optimiser cela car si le pentaedre etait dans
33 c un etat de decoupage similaire, on recalcule une valeur
34 c qui est deja presente
35 c remarque : pcs2pe et pcsipe sont des clones
36 c ______________________________________________________________________
38 c . nom . e/s . taille . description .
39 c .____________________________________________________________________.
40 c . nbfop2 . e . 1 . nombre de fonctions P2 .
41 c . profho . es . * . pour chaque entite en numerotation homard :.
42 c . . . . 0 : l'entite est absente du profil .
43 c . . . . 1 : l'entite est presente dans le profil .
44 c . vap2ho . es . nbfop2*. variables p1 numerotation homard .
46 c . hetpen . e . nbpeto . historique de l'etat des pentaedres .
47 c . facpen . e .nbpecf*5. numeros des faces des pentaedres .
48 c . cofape . e .nbpecf*5. codes des faces des pentaedres .
49 c . filpen . e . nbpeto . premier fils des pentaedres .
50 c . fppyte . e .2*nbpeco. fppyte(1,j) = numero de la 1ere pyramide .
51 c . . . . fille du pentaedre k tel que filpen(k) =-j .
52 c . . . . fppyte(2,j) = numero du 1er tetraedre .
53 c . . . . fils du pentaedre k tel que filpen(k) = -j .
54 c . somare . e .2*nbarto. numeros des extremites d'arete .
55 c . np2are . e . nbarto . numero des noeuds p2 milieux d'aretes .
56 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
57 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
58 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
59 c . cotrte . e .nbtecf*4. code des 4 triangles des tetraedres .
60 c . facpyr . e .nbpycf*5. numeros des 5 faces des pyramides .
61 c . cofapy . e .nbpycf*5. codes des 5 faces des pyramides .
62 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
63 c . langue . e . 1 . langue des messages .
64 c . . . . 1 : francais, 2 : anglais .
65 c . codret . es . 1 . code de retour des modules .
66 c . . . . 0 : pas de probleme .
67 c . . . . 1 : probleme .
68 c ______________________________________________________________________
71 c 0. declarations et dimensionnement
74 c 0.1. ==> generalites
80 parameter ( nompro = 'PCS2PE' )
100 integer hetpen(nbpeto), facpen(nbpecf,5), cofape(nbpecf,5)
101 integer filpen(nbpeto), fppyte(2,nbpeco)
102 integer somare(2,nbarto), np2are(nbarto)
103 integer aretri(nbtrto,3)
104 integer arequa(nbquto,4)
105 integer tritet(nbtecf,4), cotrte(nbtecf,4)
106 integer facpyr(nbpycf,5), cofapy(nbpycf,5)
108 double precision vap2ho(nbfop2,*)
110 integer ulsort, langue, codret
112 c 0.4. ==> variables locales
116 integer typdec, typd00
119 integer listar(9), listno(15)
125 double precision daux
128 parameter ( nbmess = 10 )
129 character*80 texte(nblang,nbmess)
130 c ______________________________________________________________________
140 #ifdef _DEBUG_HOMARD_
141 write (ulsort,texte(langue,1)) 'Entree', nompro
149 do 100 , jaux = 1, nbpeto
154 c 2. recherche des types d'interpolations a faire
157 if ( codret.eq.0 ) then
159 #ifdef _DEBUG_HOMARD_
160 write(ulsort,texte(langue,3)) 'PCS0PE', nompro
162 call pcs0pe ( lepent, profho,
163 > hetpen, facpen, cofape, filpen, fppyte,
168 > afaire, listar, listno, typdec, etanp1, sm )
169 cgn write(ulsort,90002) 'typdec',typdec
176 c 3. L'eventuel noeud central
177 c decoupage selon 2 aretes tria/tria
178 c decoupage selon 1 face traingulaire
181 if ( codret.eq.0 ) then
183 if ( mod(typdec,2).eq.0 ) then
188 c interpolation = -2/9(u1+...+u6)
189 c + 2/9(u7+...+u12)+ 1/3(u13+...+u15)
191 do 31 , nuv = 1, nbfop2
194 do 311 , iaux = 1 , 6
195 daux = daux - vap2ho(nuv,listno(iaux))
197 do 312 , iaux = 7 , 12
198 daux = daux + vap2ho(nuv,listno(iaux))
200 vap2ho(nuv,sm) = desne * daux +
201 > unstr * ( vap2ho(nuv,listno(13)) +
202 > vap2ho(nuv,listno(14)) +
203 > vap2ho(nuv,listno(15)) )
204 cgn write(ulsort,*) 'vap2ho(nuv,',sm,') =',vap2ho(nuv,sm)
215 c 4. Recuperation des aretes internes
219 cgn write(ulsort,90002) 'typdec',typdec
221 if ( codret.eq.0 ) then
225 if ( mod(typdec,3).eq.0 ) then
227 elseif ( mod(typdec,5).eq.0 ) then
230 elseif ( mod(typdec,7).eq.0 ) then
233 elseif ( mod(typdec,11).eq.0 ) then
235 elseif ( mod(typdec,13).eq.0 ) then
237 elseif ( mod(typdec,17).eq.0 ) then
241 c 4.4. ==> Les aretes
243 #ifdef _DEBUG_HOMARD_
244 write(ulsort,texte(langue,3)) 'UTAIPE', nompro
246 call utaipe ( lepent, iaux,
247 > hetpen, facpen, filpen, fppyte,
251 > ulsort, langue, codret )
256 c 5. D'un milieu de faces a un autre
260 if ( codret.eq.0 ) then
262 if ( mod(typdec,3).eq.0 ) then
264 #ifdef _DEBUG_HOMARD_
265 write(ulsort,texte(langue,3)) 'PCS2P1', nompro
267 call pcs2p1 ( nbfop2, profho, vap2ho,
277 c 6. Du centre aux milieux d'aretes
278 c (selon 2 aretes tri ou 1 face tri)
281 if ( codret.eq.0 ) then
283 if ( mod(typdec,5).eq.0 ) then
285 #ifdef _DEBUG_HOMARD_
286 write(ulsort,texte(langue,3)) 'PCS2P2', nompro
288 call pcs2p2 ( nbfop2, profho, vap2ho,
299 c 7. Du centre aux sommets
300 c (selon 2 aretes tri ou 1 face tri)
303 if ( codret.eq.0 ) then
305 if ( mod(typdec,7).eq.0 ) then
307 #ifdef _DEBUG_HOMARD_
308 write(ulsort,texte(langue,3)) 'PCS2P3', nompro
310 call pcs2p3 ( nbfop2, profho, vap2ho,
321 c 6. D'un milieu d'arete a un autre
322 c (selon 2 aretes tria+quad)
325 if ( codret.eq.0 ) then
327 if ( mod(typdec,11).eq.0 ) then
329 #ifdef _DEBUG_HOMARD_
330 write(ulsort,texte(langue,3)) 'PCS2P4', nompro
332 call pcs2p4 ( nbfop2, profho, vap2ho,
343 c 7. D'un milieu d'arete a un sommet
344 c (selon 1 arete tri)
347 if ( codret.eq.0 ) then
349 if ( mod(typdec,13).eq.0 ) then
351 #ifdef _DEBUG_HOMARD_
352 write(ulsort,texte(langue,3)) 'PCS2P5', nompro
354 call pcs2p5 ( nbfop2, profho, vap2ho,
365 c 8. D'un milieu de face a un sommet
366 c (selon 1 face quad)
369 if ( codret.eq.0 ) then
371 if ( mod(typdec,17).eq.0 ) then
373 #ifdef _DEBUG_HOMARD_
374 write(ulsort,texte(langue,3)) 'PCS2P6', nompro
376 call pcs2p6 ( nbfop2, profho, vap2ho,
390 typdec = typdec/typd00
391 if ( typdec.gt.1 ) then
403 if ( codret.ne.0 ) then
407 write (ulsort,texte(langue,1)) 'Sortie', nompro
408 write (ulsort,texte(langue,2)) codret
412 #ifdef _DEBUG_HOMARD_
413 write (ulsort,texte(langue,1)) 'Sortie', nompro