1 subroutine pcs2p3 ( nbfop2, profho, vap2ho,
6 c ______________________________________________________________________
10 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
12 c Version originale enregistree le 18 juin 1996 sous le numero 96036
13 c aupres des huissiers de justice Simart et Lavoir a Clamart
14 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
15 c aupres des huissiers de justice
16 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
18 c HOMARD est une marque deposee d'Electricite de France
24 c ______________________________________________________________________
26 c aPres adaptation - Conversion de Solution -
28 c interpolation p2 sur les noeuds - decoupage des Pentaedres - 3
30 c Du centre aux sommets
31 c remarque : pcs2p3 et pcsip3 sont des clones
32 c ______________________________________________________________________
34 c . nom . e/s . taille . description .
35 c .____________________________________________________________________.
36 c . nbfop2 . e . 1 . nombre de fonctions P2 .
37 c . profho . es . * . pour chaque entite en numerotation homard :.
38 c . . . . 0 : l'entite est absente du profil .
39 c . . . . 1 : l'entite est presente dans le profil .
40 c . vap2ho . es . nbfop2*. variables p2 numerotation homard .
42 c . np2are . e . nbarto . numero des noeuds p2 milieux d'aretes .
43 c . etapen . e . 1 . etat du pentaedre a traiter .
44 c . listso . e . 6 . Liste des sommets ordonnes du pentaedre .
45 c . listno . e . 9 . Liste des noeuds ordonnees du pentaedre .
46 c . nbarco . e . 1 . nombre d'aretes concernees .
47 c . nuaret . e . nbarco . numero des aretes a traiter .
48 c ______________________________________________________________________
51 c 0. declarations et dimensionnement
54 c 0.1. ==> generalites
76 integer np2are(nbarto)
78 integer listso(6), listno(9)
79 integer nbarco, nuaret(nbarco)
81 double precision vap2ho(nbfop2,*)
83 c 0.4. ==> variables locales
92 c ______________________________________________________________________
96 cgn write(1,90002) 'listso', (listso(iaux),iaux=1,6)
97 cgn write(1,90002) 'listno', (listno(iaux),iaux=1,9)
100 c Reperage des aretes entre noeud central et sommets
101 c . Quand une face triangulaire est coupee, etat 51/52, on doit
102 c regarder sucessivement les 3 aretes internes depuis les sommets
103 c de la face non decoupee.
104 c Les aretes transmises en argument sont dans l'ordre :
105 c . etat 51 : S4, S6, S5
106 c . etat 52 : S1, S2, S3
107 c . Quand 2 aretes sont coupees, etat 31-36, on doit regarder
108 c sucessivement les 6 aretes depuis chacun des sommets.
109 c Les aretes renvoyees par utaipe pointent d'abord sur les
110 c sommets de la face quadrangulaire coupee, dans cet ordre :
111 c . Les deux premiers sommets sont ceux qui appartiennent
112 c a la face triangulaire F1
113 c . Les 4 sommets tournent dans le sens positif, vus
115 c Ensuite, on a les 2 autres sommets, en commencant par celui
116 c qui appartient a la face F1
118 c Consequence pour la boucle 10 :
119 c Cas !! Etat ! iaux !! Etat ! iaux !! Etat ! iaux
120 c S1-M !! 52 ! 1 !! 33 ! 1 !! 36 ! 1
121 c S2-M !! 52 ! 2 !! 31 ! 1 !! 34 ! 1
122 c S3-M !! 52 ! 3 !! 32 ! 1 !! 35 ! 1
123 c S4-M !! 51 ! 1 !! 32 ! 2 !! 34 ! 2
124 c S5-M !! 51 ! 3 !! 33 ! 2 !! 35 ! 2
125 c S6-M !! 51 ! 2 !! 31 ! 2 !! 36 ! 2
128 cgn write(1,90002) 'Aretes', (nuaret(iaux),iaux=1,nbarco)
130 do 10 , iaux = 1 , nbarco
133 c 2. Reperage du sommet a relier
136 if ( etapen.eq.31 ) then
137 if ( iaux.eq.1 ) then
142 elseif ( etapen.eq.32 ) then
143 if ( iaux.eq.1 ) then
148 elseif ( etapen.eq.33 ) then
149 if ( iaux.eq.1 ) then
154 elseif ( etapen.eq.34 ) then
155 if ( iaux.eq.1 ) then
160 elseif ( etapen.eq.35 ) then
161 if ( iaux.eq.1 ) then
166 elseif ( etapen.eq.36 ) then
167 if ( iaux.eq.1 ) then
172 elseif ( etapen.eq.51 ) then
173 if ( iaux.eq.1 ) then
175 elseif ( iaux.eq.2 ) then
184 listns(1) = listso(nuloso)
185 cgn write(1,90002) 'sommet a relier', listns(1)
189 c 2, 3 : les 2 autres sommets de la face
190 c 4 : le sommet semblable sur la face opposee
191 c 5, 6 : les sommets semblables sur la face opposee
194 if ( nuloso.eq.1 ) then
200 elseif ( nuloso.eq.2 ) then
206 elseif ( nuloso.eq.3 ) then
212 elseif ( nuloso.eq.4 ) then
218 elseif ( nuloso.eq.5 ) then
232 listns(2) = listso(iaux1(1))
233 listns(3) = listso(iaux1(2))
234 listns(4) = listso(iaux1(3))
235 listns(5) = listso(iaux1(4))
236 listns(6) = listso(iaux1(5))
237 cgn write(1,90002) 'listns 2-6', (listns(jaux),jaux=2,6)
240 c 4. Les noeuds des faces triangulaires
241 c 7, 8 : les deux noeuds les plus proches, sur la face tria proche
242 c 9 : l'autre noeud sur cette face proche
243 c 10 : le noeud translate de cet autre noeud
244 c 11, 12 : les deux autres noeuds sur la face opposee
247 if ( nuloso.eq.1 ) then
254 elseif ( nuloso.eq.2 ) then
261 elseif ( nuloso.eq.3 ) then
268 elseif ( nuloso.eq.4 ) then
275 elseif ( nuloso.eq.5 ) then
291 listns( 7) = listno(iaux1(1))
292 listns( 8) = listno(iaux1(2))
293 listns( 9) = listno(iaux1(3))
294 listns(10) = listno(iaux1(4))
295 listns(11) = listno(iaux1(5))
296 listns(12) = listno(iaux1(6))
297 cgn write(1,90002) 'listns 7-12', (listns(jaux),jaux=7,12)
300 c 5. Les noeuds des faces quadrangulaires
301 c 13 : le noeud le plus proche, sur la face quadrangulaire proche
302 c 14, 15 : le dernier noeud
305 if ( nuloso.eq.1 .or. nuloso.eq.4 ) then
309 elseif ( nuloso.eq.2 .or. nuloso.eq.5 ) then
319 listns(13) = listno(iaux1(1))
320 listns(14) = listno(iaux1(2))
321 listns(15) = listno(iaux1(3))
322 cgn write(1,90002) 'listns 13-15', (listns(jaux),jaux=13,15)
328 sm = np2are(nuaret(iaux))
329 cgn write(1,90002) 'sm',sm
333 do 61 , nuv = 1, nbfop2
335 vap2ho(nuv,sm) = unsdz * ( vap2ho(nuv,listns(9))
336 > - vap2ho(nuv,listns(1)) )
337 > - sts48 * ( vap2ho(nuv,listns(2))
338 > + vap2ho(nuv,listns(3)) )
339 > - sts36 * vap2ho(nuv,listns(4))
340 > - tz144 * ( vap2ho(nuv,listns(5))
341 > + vap2ho(nuv,listns(6)) )
342 > + unstr * ( vap2ho(nuv,listns(7))
343 > + vap2ho(nuv,listns(8)) )
344 > + uns36 * vap2ho(nuv,listns(10))
345 > + unsne * ( vap2ho(nuv,listns(11))
346 > + vap2ho(nuv,listns(12)) )
347 > + unsde * vap2ho(nuv,listns(13))
348 > + unshu * ( vap2ho(nuv,listns(14))
349 > + vap2ho(nuv,listns(15)) )
350 cgn write(1,*) 'vap2ho(nuv,',sm,') =',vap2ho(nuv,sm)