1 subroutine pcs2h3 ( 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/iso-p2 sur les noeuds - decoupage Hexaedres - 3
30 c Du centre aux sommets (selon 2 ou 3 aretes)
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 . Liste des sommets ordonnes de l'hexaedre .
44 c . listno . e . 12 . Liste des noeuds ordonnees de l'hexaedre .
45 c . nbarhi . e . 1 . nombre d'aretes internes .
46 c . areint . e . * . numeros globaux des aretes internes .
47 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
48 c . langue . e . 1 . langue des messages .
49 c . . . . 1 : francais, 2 : anglais .
50 c . codret . es . 1 . code de retour des modules .
51 c . . . . 0 : pas de probleme .
52 c . . . . 1 : probleme .
53 c ______________________________________________________________________
56 c 0. declarations et dimensionnement
59 c 0.1. ==> generalites
68 parameter ( nompro = 'PCS2H3' )
82 integer somare(2,nbarto), np2are(nbarto)
83 integer listso(8), listno(12)
84 integer nbarhi, areint(nbarhi)
86 double precision vap2ho(nbfop2,*)
88 integer ulsort, langue, codret
90 c 0.4. ==> variables locales
94 integer nusomm, larete
97 integer iaux1, iaux2, iaux3, iaux4, iaux5, iaux6
100 parameter ( nbmess = 100 )
101 character*80 texte(nblang,nbmess)
103 c ______________________________________________________________________
109 cgn write (ulsort,texte(langue,1)) 'Entree', nompro
110 #ifdef _DEBUG_HOMARD_
111 write (ulsort,90002) 'listso', listso
112 write (ulsort,90002) 'listno 1-8', (listno(iaux),iaux=1,8)
113 write (ulsort,90002) 'listno 9-12', (listno(iaux),iaux=9,12)
116 c On passe en revue tous les sommets
117 c Ils sont parcourus dans l'ordre de leur numerotation de reference
119 do 10 , nusomm = 1 , 8
120 cgn write(6,*) 'Dans pcs2h3, nusomm =',nusomm
123 c 1. Le sommet dont on part et ses plus proches voisins
127 if ( nusomm.eq.1 ) then
131 elseif ( nusomm.eq.2 ) then
135 elseif ( nusomm.eq.3 ) then
139 elseif ( nusomm.eq.4 ) then
143 elseif ( nusomm.eq.5 ) then
147 elseif ( nusomm.eq.6 ) then
151 elseif ( nusomm.eq.7 ) then
161 listns(1) = listso(iaux1)
162 listns(2) = listso(iaux2)
163 listns(3) = listso(iaux3)
164 listns(4) = listso(iaux4)
167 c 2. Le sommet oppose et ses plus proches voisins
171 if ( nusomm.eq.1 ) then
175 elseif ( nusomm.eq.2 ) then
179 elseif ( nusomm.eq.3 ) then
183 elseif ( nusomm.eq.4 ) then
187 elseif ( nusomm.eq.5 ) then
191 elseif ( nusomm.eq.6 ) then
195 elseif ( nusomm.eq.7 ) then
205 listns(8) = listso(iaux1)
206 listns(5) = listso(iaux2)
207 listns(6) = listso(iaux3)
208 listns(7) = listso(iaux4)
211 c 3. Les noeuds milieux les plus proches
214 if ( nusomm.eq.1 ) then
218 elseif ( nusomm.eq.2 ) then
222 elseif ( nusomm.eq.3 ) then
226 elseif ( nusomm.eq.4 ) then
230 elseif ( nusomm.eq.5 ) then
234 elseif ( nusomm.eq.6 ) then
238 elseif ( nusomm.eq.7 ) then
248 listns( 9) = listno(iaux1)
249 listns(10) = listno(iaux2)
250 listns(11) = listno(iaux3)
253 c 4. Les noeuds milieux intermediaires
256 if ( nusomm.eq.1 .or. nusomm.eq.8 ) then
263 elseif ( nusomm.eq.2 .or. nusomm.eq.7 ) then
270 elseif ( nusomm.eq.3 .or. nusomm.eq.6) then
286 listns(12) = listno(iaux1)
287 listns(13) = listno(iaux2)
288 listns(14) = listno(iaux3)
289 listns(15) = listno(iaux4)
290 listns(16) = listno(iaux5)
291 listns(17) = listno(iaux6)
294 c 5. Les noeuds milieux les plus eloignes
297 if ( nusomm.eq.1 ) then
301 elseif ( nusomm.eq.2 ) then
305 elseif ( nusomm.eq.3 ) then
309 elseif ( nusomm.eq.4 ) then
313 elseif ( nusomm.eq.5 ) then
317 elseif ( nusomm.eq.6 ) then
321 elseif ( nusomm.eq.7 ) then
331 listns(18) = listno(iaux1)
332 listns(19) = listno(iaux2)
333 listns(20) = listno(iaux3)
336 c 6. L'arete concernee : celle des aretes internes qui demarrent
337 c sur le sommet en cours
340 do 62 , iaux = 1 , nbarhi
341 larete = areint(iaux)
342 if ( somare(1,larete).eq.listns(1) ) then
347 write(ulsort,*) nompro//' - aucune arete interne ne correspond ?'
356 if ( codret.eq.0 ) then
360 do 71, nuv = 1 , nbfop2
361 cgn do 711 , jaux =1 ,20
362 cgn write(*,90014) listns(jaux), vap2ho(nuv,listns(jaux))
365 vap2ho(nuv,sm) = - v7s128 * ( vap2ho(nuv,listns(1))
366 > + vap2ho(nuv,listns(2))
367 > + vap2ho(nuv,listns(3))
368 > + vap2ho(nuv,listns(4)) )
369 > - qzs128 * ( vap2ho(nuv,listns(5))
370 > + vap2ho(nuv,listns(6))
371 > + vap2ho(nuv,listns(7)) )
372 > - ses128 * vap2ho(nuv,listns(8))
373 > + v7st64 * ( vap2ho(nuv,listns(9))
374 > + vap2ho(nuv,listns(10))
375 > + vap2ho(nuv,listns(11)) )
376 > + nfst64 * ( vap2ho(nuv,listns(12))
377 > + vap2ho(nuv,listns(13))
378 > + vap2ho(nuv,listns(14))
379 > + vap2ho(nuv,listns(15))
380 > + vap2ho(nuv,listns(16))
381 > + vap2ho(nuv,listns(17)) )
382 > + trst64 * ( vap2ho(nuv,listns(18))
383 > + vap2ho(nuv,listns(19))
384 > + vap2ho(nuv,listns(20)) )
386 cgn write(*,*) 'vap2ho(nuv,',sm,') =',vap2ho(nuv,sm)
397 if ( codret.ne.0 ) then
401 write (ulsort,texte(langue,1)) 'Sortie', nompro
402 write (ulsort,texte(langue,2)) codret
406 #ifdef _DEBUG_HOMARD_
407 write (ulsort,texte(langue,1)) 'Sortie', nompro