1 subroutine pcs2h4 ( nbfop2, profho, vap2ho,
5 > ulsort, langue, codret )
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 Hexaedres - 4
30 c D'un milieu d'arete a un sommet (selon 1 arete)
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . nbfop2 . e . 1 . nombre de fonctions P2 .
36 c . profho . es . * . pour chaque entite en numerotation homard :.
37 c . . . . 0 : l'entite est absente du profil .
38 c . . . . 1 : l'entite est presente dans le profil .
39 c . vap2ho . es . nbfop2*. variables p2 numerotation homard .
41 c . somare . e .2*nbarto. numeros des extremites d'arete .
42 c . np2are . e . nbarto . numero des noeuds p2 milieux d'aretes .
43 c . listso . e . 8 . numeros globaux des sommets .
44 c . listar . e . 12 . numeros globaux des aretes .
45 c . areint . e . * . numeros globaux des aretes internes .
46 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
47 c . langue . e . 1 . langue des messages .
48 c . . . . 1 : francais, 2 : anglais .
49 c . codret . es . 1 . code de retour des modules .
50 c . . . . 0 : pas de probleme .
51 c . . . . 1 : probleme .
52 c ______________________________________________________________________
55 c 0. declarations et dimensionnement
58 c 0.1. ==> generalites
64 parameter ( nompro = 'PCS2H4' )
82 integer somare(2,nbarto), np2are(nbarto)
83 integer listso(8), listar(12)
86 double precision vap2ho(nbfop2,*)
88 integer ulsort, langue, codret
90 c 0.4. ==> variables locales
96 integer iaux1(2), iaux2(2), iaux3(2), iaux4(2)
97 integer jaux1(2), jaux2(2), jaux3(2), jaux4(2)
98 integer kaux1(2), kaux2(2), kaux3(2), kaux4(2)
99 integer laux1(2), laux2(2), laux3(2), laux4(2)
100 integer maux1, maux2, maux3, maux4
104 parameter ( nbmess = 100 )
105 character*80 texte(nblang,nbmess)
107 c 0.5. ==> initialisation
112 c ______________________________________________________________________
116 cgn write (ulsort,texte(langue,1)) 'Entree', nompro
117 #ifdef _DEBUG_HOMARD_
118 write (ulsort,90002) 'listar 1-8', (listar(iaux),iaux=1,8)
119 write (ulsort,90002) 'listar 9-12', (listar(iaux),iaux=9,12)
120 write (ulsort,90002) 'listso', listso
123 c Deux aretes partent du milieu de l'arete coupee vers un des deux
124 c sommets de l'arete opposee. On a donc deux interpolations a faire.
125 c Ce sont les indices 1 et 2 des tableaux iauxi.
127 cgn write (ulsort,*) 'la', nuarlo,'-eme arete est coupee'
130 c 1. Les sommets de la face qui contient le sommet
131 c iaux1 : le sommet de l'arete coupee
132 c iaux2/3 : les deux autres sommets
133 c iaux4 : le sommet oppose
148 c 2. Les noeuds de la face du cote du sommet oppose
149 c kaux1/2 : les milieux des aretes vers l'arete coupee
150 c kaux3/4 : les milieux des aretes vers le sommet oppose
165 c 3. Les noeuds et sommets de la face opposee :
166 c . jauxi a le meme role que iauxi
167 c . lauxi a le meme role que kauxi
172 jaux1(iaux) = iaux1(perm12(iaux))
173 jaux2(iaux) = iaux2(perm12(iaux))
174 jaux3(iaux) = iaux3(perm12(iaux))
175 jaux4(iaux) = iaux4(perm12(iaux))
177 laux1(iaux) = kaux1(perm12(iaux))
178 laux2(iaux) = kaux2(perm12(iaux))
179 laux3(iaux) = kaux3(perm12(iaux))
180 laux4(iaux) = kaux4(perm12(iaux))
185 c 4. Les noeuds milieux intermediaires
186 c maux1 : le milieu de l'arete coupee
187 c maux2/3 : les milieux des aretes paralleles a l'arete coupee
188 c maux4 : le milieu de l'arete oppose
197 c 5. L'arete concernee : celle des deux aretes internes qui demarrent
198 c sur le sommet oppose
202 if ( somare(1,larete).eq.listso(iaux4(1)) ) then
203 sm(1) = np2are(larete)
204 sm(2) = np2are(areint(2))
206 sm(1) = np2are(areint(2))
207 sm(2) = np2are(larete)
214 if ( codret.eq.0 ) then
219 cgn write (ulsort,*) 'sm =',sm(iaux)
221 listns( 1) = listso(iaux1(iaux))
222 listns( 2) = listso(iaux2(iaux))
223 listns( 3) = listso(iaux3(iaux))
224 listns( 4) = listso(iaux4(iaux))
225 listns( 5) = listso(jaux1(iaux))
226 listns( 6) = listso(jaux2(iaux))
227 listns( 7) = listso(jaux3(iaux))
228 listns( 8) = listso(jaux4(iaux))
229 listns( 9) = np2are(listar(kaux1(iaux)))
230 listns(10) = np2are(listar(kaux2(iaux)))
231 listns(11) = np2are(listar(kaux3(iaux)))
232 listns(12) = np2are(listar(kaux4(iaux)))
233 listns(13) = np2are(listar(laux1(iaux)))
234 listns(14) = np2are(listar(laux2(iaux)))
235 listns(15) = np2are(listar(laux3(iaux)))
236 listns(16) = np2are(listar(laux4(iaux)))
237 listns(17) = np2are(listar(maux1))
238 listns(18) = np2are(listar(maux2))
239 listns(19) = np2are(listar(maux3))
240 listns(20) = np2are(listar(maux4))
241 cgn write (ulsort,90002) 'listns 1- 8',(listns(jaux),jaux=1,8)
242 cgn write (ulsort,90002) 'listns 9-16',(listns(jaux),jaux=9,16)
243 cgn write (ulsort,90002) 'listns 17-20',(listns(jaux),jaux=17,20)
244 cgn write (ulsort,*) listar(kaux1(iaux)),
245 cgn > listar(kaux2(iaux)),
246 cgn > listar(kaux3(iaux)),
247 cgn > listar(kaux4(iaux))
248 cgn write (ulsort,*) listar(laux1(iaux)),
249 cgn > listar(laux2(iaux)),
250 cgn > listar(laux3(iaux)),
251 cgn > listar(laux4(iaux))
253 do 71, nuv = 1 , nbfop2
256 cgn do 711 , jaux =1 ,20
257 cgn write (ulsort,90014) listns(jaux), vap2ho(nuv,listns(jaux))
259 vap2ho(nuv,sm(iaux)) =
260 > - nfstr2 * ( vap2ho(nuv,listns(1))
261 > + vap2ho(nuv,listns(2))
262 > + vap2ho(nuv,listns(3))
263 > + vap2ho(nuv,listns(4)) )
264 > - cqstr2 * ( vap2ho(nuv,listns(5))
265 > + vap2ho(nuv,listns(6))
266 > + vap2ho(nuv,listns(7))
267 > + vap2ho(nuv,listns(8)) )
268 > + trshu * ( vap2ho(nuv,listns(9))
269 > + vap2ho(nuv,listns(10))
270 > + vap2ho(nuv,listns(11))
271 > + vap2ho(nuv,listns(12)) )
272 > + unshu * ( vap2ho(nuv,listns(13))
273 > + vap2ho(nuv,listns(14))
274 > + vap2ho(nuv,listns(15))
275 > + vap2ho(nuv,listns(16)) )
276 > + trssz * ( vap2ho(nuv,listns(17))
277 > + vap2ho(nuv,listns(18))
278 > + vap2ho(nuv,listns(19))
279 > + vap2ho(nuv,listns(20)) )
281 cgn write (ulsort,*) 'vap2ho(nuv,',sm(iaux),') =',vap2ho(nuv,sm(iaux))
292 if ( codret.ne.0 ) then
296 write (ulsort,texte(langue,1)) 'Sortie', nompro
297 write (ulsort,texte(langue,2)) codret
301 #ifdef _DEBUG_HOMARD_
302 write (ulsort,texte(langue,1)) 'Sortie', nompro