1 subroutine pcshe0 ( nbfonc, typint, deraff,
7 > tritet, cotrte, aretet,
8 > quahex, coquhe, arehex,
9 > facpyr, cofapy, arepyr,
10 > hethex, anchex, filhex, fhpyte,
11 > nbanhe, anfihe, anpthe,
20 > ulsort, langue, codret )
21 c ______________________________________________________________________
25 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
27 c Version originale enregistree le 18 juin 1996 sous le numero 96036
28 c aupres des huissiers de justice Simart et Lavoir a Clamart
29 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
30 c aupres des huissiers de justice
31 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
33 c HOMARD est une marque deposee d'Electricite de France
39 c ______________________________________________________________________
41 c aPres adaptation - Conversion de Solution -
43 c HExaedres - solution P0
45 c remarque : pcshe0 et pcspe0 sont des clones
46 c ______________________________________________________________________
48 c . nom . e/s . taille . description .
49 c .____________________________________________________________________.
50 c . nbfonc . e . 1 . nombre de fonctions elements de volume .
51 c . typint . e . 1 . type d'interpolation .
52 c . . . . 0, si automatique .
53 c . . . . elements : 0 si intensif, sans orientation.
54 c . . . . 1 si extensif, sans orientation.
55 c . . . . 2 si intensif, avec orientation.
56 c . . . . 3 si extensif, avec orientation.
57 c . . . . noeuds : 1 si degre 1 .
58 c . . . . 2 si degre 2 .
59 c . . . . 3 si iso-P2 .
60 c . deraff . e . 1 . vrai, s'il y a eu du deraffinement en .
61 c . . . . passant de l'iteration n a n+1 ; faux sinon.
62 c . prfcan . e . * . En numero du calcul a l'iteration n : .
63 c . . . . 0 : l'entite est absente du profil .
64 c . . . . i : l'entite est au rang i dans le profil .
65 c . prfcap . es . * . En numero du calcul a l'iteration n+1 : .
66 c . . . . 0 : l'entite est absente du profil .
67 c . . . . 1 : l'entite est presente dans le profil .
68 c . coonoe . e . nbnoto . coordonnees des noeuds .
70 c . somare . e .2*nbarto. numeros des extremites d'arete .
71 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
72 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
73 c . tritet . e .nbtecf*4. numeros des 4 triangles des tetraedres .
74 c . cotrte . e .nbtecf*4. code des 4 triangles des tetraedres .
75 c . aretet . e .nbteca*6. numeros des 6 aretes des tetraedres .
76 c . quahex . e .nbhecf*6. numeros des 6 quadrangles des hexaedres .
77 c . coquhe . e .nbhecf*6. codes des 6 quadrangles des hexaedres .
78 c . arehex . e .nbheca12. numeros des 12 aretes des hexaedres .
79 c . facpyr . e .nbpycf*5. numeros des 5 faces des pyramides .
80 c . cofapy . e .nbpycf*5. codes des faces des pyramides .
81 c . arepyr . e .nbpyca*8. numeros des 8 aretes des pyramides .
82 c . hethex . e . nbheto . historique de l'etat des hexaedres .
83 c . filhex . e . nbheto . premier fils des hexaedres .
84 c . fhpyte . e .2*nbheco. fhpyte(1,j) = numero de la 1ere pyramide .
85 c . . . . fille de l'hexaedre k tel que filhex(k) =-j.
86 c . . . . fhpyte(2,j) = numero du 1er tetraedre .
87 c . . . . fils de l'hexaedre k tel que filhex(k) = -j.
88 c . nbanhe . e . 1 . nombre de hexaedres decoupes par .
89 c . . . . conformite sur le maillage avant adaptation.
90 c . anfihe . e . nbanhe . tableau filhex du maillage de l'iteration n.
91 c . anpthe . e . 2** . tableau fhpyte du maillage de l'iteration n.
92 c . nheeca . e . * . numero des hexaedres dans le calcul entree .
93 c . nhesca . e . rsheto . numero des hexaedres dans le calcul sortie .
94 c . nteeca . e . * . numero des tetraedres dans le calcul entree.
95 c . ntesca . e . rsteto . numero des tetraedres dans le calcul sortie.
96 c . npyeca . e . * . numero des pyramides dans le calcul entree .
97 c . npysca . e . rspyto . numero des pyramides dans le calcul sortie .
98 c . vafoen . e . nbfonc*. variables en entree de l'adaptation .
100 c . vafott . a . nbfonc*. tableau temporaire de la solution .
102 c . vateen . e . nbfonc*. variables en entree de l'adaptation pour .
103 c . . . * . les tetraedres .
104 c . vatett . a . nbfonc*. tableau temporaire de la solution pour .
105 c . . . * . les tetraedres .
106 c . prften . es . * . En numero du calcul a l'iteration n : .
107 c . . . . 0 : le tetraedre est absent du profil .
108 c . . . . 1 : le tetraedre est present dans le profil.
109 c . prftep . es . * . En numero du calcul a l'iteration n+1 : .
110 c . . . . 0 : le tetraedre est absent du profil .
111 c . . . . 1 : le tetraedre est present dans le profil.
112 c . vapyen . e . nbfonc*. variables en entree de l'adaptation pour .
113 c . . . * . les pyramides .
114 c . vapytt . a . nbfonc*. tableau temporaire de la solution pour .
115 c . . . * . les pyramides .
116 c . prfpyn . es . * . En numero du calcul a l'iteration n : .
117 c . . . . 0 : la pyramide est absente du profil .
118 c . . . . 1 : la pyramide est presente dans le profil.
119 c . prfpyp . es . * . En numero du calcul a l'iteration n+1 : .
120 c . . . . 0 : la pyramide est absente du profil .
121 c . . . . 1 : la pyramide est presente dans le profil
122 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
123 c . langue . e . 1 . langue des messages .
124 c . . . . 1 : francais, 2 : anglais .
125 c . codret . es . 1 . code de retour des modules .
126 c . . . . 0 : pas de probleme .
127 c . . . . 1 : probleme .
128 c ______________________________________________________________________
131 c 0. declarations et dimensionnement
134 c 0.1. ==> generalites
140 parameter ( nompro = 'PCSHE0' )
165 integer prfcan(*), prfcap(*)
167 integer somare(2,nbarto)
168 integer aretri(nbtrto,3)
169 integer arequa(nbquto,4)
170 integer tritet(nbtecf,4), cotrte(nbtecf,4), aretet(nbteca,6)
171 integer quahex(nbhecf,6), coquhe(nbhecf,6), arehex(nbheca,12)
172 integer facpyr(nbpycf,5), cofapy(nbpycf,5), arepyr(nbpyca,8)
174 integer hethex(nbheto), anchex(*)
175 integer filhex(nbheto), fhpyte(2,nbheco)
176 integer nbanhe, anfihe(nbanhe), anpthe(2,*)
177 integer nheeca(reheto), nhesca(rsheto)
178 integer nteeca(reteto), ntesca(rsteto)
179 integer npyeca(repyto), npysca(rspyto)
180 integer prften(*), prftep(*)
181 integer prfpyn(*), prfpyp(*)
183 double precision coonoe(nbnoto,sdim)
184 double precision vafoen(nbfonc,*)
185 double precision vafott(nbfonc,*)
186 double precision vateen(nbfonc,*)
187 double precision vatett(nbfonc,*)
188 double precision vapyen(nbfonc,*)
189 double precision vapytt(nbfonc,*)
193 integer ulsort, langue, codret
195 c 0.4. ==> variables locales
199 c hehn = HExaedre courant en numerotation Homard a l'it. N
200 c hehnp1 = HExaedre courant en numerotation Homard a l'it. N+1
204 c etan = ETAt de l'hexaedre a l'iteration N
205 c etanp1 = ETAt de l'hexaedre a l'iteration N+1
209 integer nfhexp, nfpyrp, nftetp
211 integer nfhexn, nfpyrn, nftetn
214 double precision propor(18)
217 parameter ( nbmess = 10 )
218 character*80 texte(nblang,nbmess)
220 c 0.5. ==> initialisations
221 c ______________________________________________________________________
229 #ifdef _DEBUG_HOMARD_
230 write (ulsort,texte(langue,1)) 'Entree', nompro
239 c 2. on boucle sur tous les hexaedres du maillage HOMARD n+1
240 c on trie en fonction de l'etat de l'hexaedre dans le maillage n
241 c remarque : on a scinde en plusieurs programmes pour pouvoir passer
242 c les options de compilation optimisees.
245 if ( nbfonc.ne.0 ) then
247 do 20 , iaux = 1 , nbheto
249 c 2.1. ==> caracteristiques de l'hexaedre :
251 if ( codret.eq.0 ) then
253 c 2.1.1. ==> son numero homard dans le maillage precedent
257 hehn = anchex(hehnp1)
262 c 2.1.2. ==> l'historique de son etat
263 c On rappelle que l'etat vaut :
264 c etat = 0 : le hexaedre est actif.
265 c etat = 8 : l'hexaedre est coupe en 8.
266 c etat >= 11 : l'hexaedre est coupe par conformite
268 etanp1 = mod(hethex(hehnp1),1000)
269 etan = (hethex(hehnp1)-etanp1) / 1000
270 #ifdef _DEBUG_HOMARD_
271 write (ulsort,*) '=========================================='
272 write (ulsort,90002) mess14(langue,1,6), hehnp1
273 write (ulsort,90002) '. hehn =', hehn
274 write (ulsort,90002) '. etan =', etan
275 write (ulsort,90002) '. etanp1 =', etanp1
278 c 2.1.3. ==> prealables a l'iteration n
280 if ( etan.ne.5 .and. etan.ne.9 ) then
282 c 2.1.3.1. ==> numerotation des fils
284 #ifdef _DEBUG_HOMARD_
285 write (ulsort,texte(langue,3)) 'PCSEHY n', nompro
287 call pcsehy ( nfhexn, nfpyrn, nftetn, ficn,
290 > nheeca, nteeca, npyeca,
291 > ulsort, langue, codret )
295 c 2.1.4. ==> prealables a l'iteration n+1
297 if ( etanp1.ne.5 .and. etanp1.ne.9 ) then
299 c 2.1.4.1. ==> numerotation des fils
301 #ifdef _DEBUG_HOMARD_
302 write (ulsort,texte(langue,3)) 'PCSEHY n+1', nompro
304 call pcsehy ( nfhexp, nfpyrp, nftetp, ficp,
307 > nhesca, ntesca, npysca,
308 > ulsort, langue, codret )
310 c 2.1.4.2. ==> en mode extensif, calcul des proportions
312 if ( typint.gt.0 ) then
314 #ifdef _DEBUG_HOMARD_
315 write (ulsort,texte(langue,3)) 'PCSEHZ', nompro
317 call pcsehz ( propor,
319 > coonoe, somare, aretri, arequa,
320 > tritet, cotrte, aretet,
321 > quahex, coquhe, arehex,
322 > facpyr, cofapy, arepyr,
324 > ulsort, langue, codret )
332 c 2.2. ==> Examen des differents etats
334 if ( codret.eq.0 ) then
336 c=======================================================================
337 c 2.2.1. ==> etan = 0 : l'hexaedre etait actif
338 c=======================================================================
340 if ( etan.eq.0 ) then
342 #ifdef _DEBUG_HOMARD_
343 write (ulsort,texte(langue,3)) 'PCSEH0', nompro
346 call pcseh0 ( etan, etanp1, hehn, hehnp1, typint,
348 > nfhexp, nfpyrp, nftetp, ficp, propor,
350 > nbfonc, vafoen, vafott,
353 > ulsort, langue, codret )
354 cgn write (ulsort,*) 'retour de PCSEH0'
356 c=======================================================================
357 c 2.2.2. ==> l'hexaedre etait coupe en conformite
358 c=======================================================================
360 elseif ( etan.ge.11 ) then
362 #ifdef _DEBUG_HOMARD_
363 write (ulsort,texte(langue,3)) 'PCSEH1', nompro
366 call pcseh1 ( etan, etanp1, hehn, hehnp1, typint,
368 > nfpyrn, nftetn, ficn,
369 > nfpyrp, nftetp, ficp, propor,
374 > tritet, cotrte, aretet,
375 > quahex, coquhe, arehex,
376 > facpyr, cofapy, arepyr,
377 > hethex, filhex, fhpyte,
386 > ulsort, langue, codret )
388 c=======================================================================
389 c 2.2.3. ==> etan = 8 : le hexaedre etait coupe en 8 hexaedres
390 c=======================================================================
392 elseif ( etan.eq.8 ) then
394 #ifdef _DEBUG_HOMARD_
395 write (ulsort,texte(langue,3)) 'PCSEH8', nompro
398 call pcseh8 ( etanp1, hehnp1, typint,
401 > nfpyrp, nftetp, ficp, propor,
403 > nbfonc, vafoen, vafott,
408 > ulsort, langue, codret )
422 if ( codret.ne.0 ) then
426 write (ulsort,texte(langue,1)) 'Sortie', nompro
427 write (ulsort,texte(langue,2)) codret
431 #ifdef _DEBUG_HOMARD_
432 write (ulsort,texte(langue,1)) 'Sortie', nompro