1 subroutine pcset8 ( etanp1, tehn, tehnp1, typint,
3 > filtet, nbante, anfite,
5 > nbfonc, vafoen, vafott,
6 > ulsort, langue, codret )
7 c ______________________________________________________________________
11 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
13 c Version originale enregistree le 18 juin 1996 sous le numero 96036
14 c aupres des huissiers de justice Simart et Lavoir a Clamart
15 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
16 c aupres des huissiers de justice
17 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
19 c HOMARD est une marque deposee d'Electricite de France
25 c ______________________________________________________________________
27 c aPres adaptation - Conversion de Solution Elements de Volume -
29 c Tetraedres d'etat anterieur 8
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . etanp1 . e . 1 . ETAt du tetraedre a l'iteration N+1 .
36 c . tehn . e . 1 . TEtraedre courant en numerotation Homard .
37 c . . . . a l'iteration N .
38 c . tehnp1 . e . 1 . TEtraedre courant en numerotation Homard .
39 c . . . . a l'iteration N+1 .
40 c . typint . e . 1 . type d'interpolation .
41 c . . . . 0, si automatique .
42 c . . . . elements : 0 si intensif, sans orientation.
43 c . . . . 1 si extensif, sans orientation.
44 c . . . . 2 si intensif, avec orientation.
45 c . . . . 3 si extensif, avec orientation.
46 c . . . . noeuds : 1 si degre 1 .
47 c . . . . 2 si degre 2 .
48 c . . . . 3 si iso-P2 .
49 c . prfcan . e . * . En numero du calcul a l'iteration n : .
50 c . . . . 0 : l'entite est absente du profil .
51 c . . . . i : l'entite est au rang i dans le profil .
52 c . prfcap . es . * . En numero du calcul a l'iteration n+1 : .
53 c . . . . 0 : l'entite est absente du profil .
54 c . . . . 1 : l'entite est presente dans le profil .
55 c . filtet . e . nbteto . premier fils des tetraedres .
56 c . nbante . e . 1 . nombre de tetraedres decoupes par .
57 c . . . . conformite sur le maillage avant adaptation.
58 c . anfite . e . nbante . tableau filtet du maillage de l'iteration n
59 c . nteeca . e . reteto . numero des tetraedres dans le calcul entree.
60 c . ntesca . e . rsteto . numero des tetraedres dans le calcul sortie.
61 c . nbfonc . e . 1 . nombre de fonctions elements de volume .
62 c . vafoen . e . nbfonc*. variables en entree de l'adaptation .
64 c . vafott . es . nbfonc*. variables en sortie de l'adaptation .
66 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
67 c . langue . e . 1 . langue des messages .
68 c . . . . 1 : francais, 2 : anglais .
69 c . codret . es . 1 . code de retour des modules .
70 c . . . . 0 : pas de probleme .
71 c . . . . 1 : probleme .
72 c ______________________________________________________________________
75 c 0. declarations et dimensionnement
78 c 0.1. ==> generalites
84 parameter ( nompro = 'PCSET8' )
99 integer etanp1, tehn, tehnp1
102 integer prfcan(*), prfcap(*)
103 integer filtet(nbteto)
105 integer anfite(nbante)
106 integer nteeca(reteto), ntesca(rsteto)
108 double precision vafoen(nbfonc,*)
109 double precision vafott(nbfonc,*)
111 integer ulsort, langue, codret
113 c 0.4. ==> variables locales
115 #ifdef _DEBUG_HOMARD_
119 c tecnp1 = TEtraedre courant en numerotation du Calcul a l'it. N+1
123 c f1hp = Fils 1er du tetraedre en numerotation Homard a l'it. N+1
124 c f1cp = Fils 1er du tetraedre en numerota. du Calcul a l'it. N+1
125 c f2cp = Fils 2eme du tetraedre en numerota. du Calcul a l'it. N+1
126 c f3cp = Fils 3eme du tetraedre en numerota. du Calcul a l'it. N+1
127 c f4cp = Fils 4eme du tetraedre en numerota. du Calcul a l'it. N+1
130 integer f1cp, f2cp, f3cp, f4cp
132 c f1hn = Fils 1er du tetraedre en numerotation Homard a l'it. N
133 c f1cn = Fils 1er du tetraedre en numerotation du Calcul a l'it. N
134 c f2cn = Fils 2eme du tetraedre en numerotation du Calcul a l'it. N
135 c f3cn = Fils 3eme du tetraedre en numerotation du Calcul a l'it. N
136 c f4cn = Fils 4eme du tetraedre en numerotation du Calcul a l'it. N
137 c f5cn = Fils 5eme du tetraedre en numerotation du Calcul a l'it. N
138 c f6cn = Fils 6eme du tetraedre en numerotation du Calcul a l'it. N
139 c f7cn = Fils 7eme du tetraedre en numerotation du Calcul a l'it. N
140 c f8cn = Fils 8eme du tetraedre en numerotation du Calcul a l'it. N
143 integer f1cn, f2cn, f3cn, f4cn, f5cn, f6cn, f7cn, f8cn
148 double precision daux
149 double precision daux1
152 parameter ( nbmess = 10 )
153 character*80 texte(nblang,nbmess)
155 c 0.5. ==> initialisations
156 c ______________________________________________________________________
164 #ifdef _DEBUG_HOMARD_
165 write (ulsort,texte(langue,1)) 'Entree', nompro
171 c 1.2. ==> on repere les numeros dans le calcul pour ses huit fils
176 f2cn = nteeca(f1hn+1)
177 f3cn = nteeca(f1hn+2)
178 f4cn = nteeca(f1hn+3)
179 f5cn = nteeca(f1hn+4)
180 f6cn = nteeca(f1hn+5)
181 f7cn = nteeca(f1hn+6)
182 f8cn = nteeca(f1hn+7)
184 if ( prfcan(f1cn).gt.0 .and. prfcan(f2cn).gt.0 .and.
185 > prfcan(f3cn).gt.0 .and. prfcan(f4cn).gt.0 .and.
186 > prfcan(f5cn).gt.0 .and. prfcan(f6cn).gt.0 .and.
187 > prfcan(f7cn).gt.0 .and. prfcan(f8cn).gt.0 ) then
190 c 2. etan = 85, 86, 87 : le tetraedre etait coupe en 8
193 c 2.1. ==> etanp1 = 0 : le tetraedre est reactive.
194 c remarque : cela arrive seulement avec du deraffinement.
196 if ( etanp1.eq.0 ) then
198 tecnp1 = ntesca(tehnp1)
201 if ( typint.eq.0 ) then
202 do 210 , nrofon = 1, nbfonc
203 daux = unshu * ( vafoen(nrofon,prfcan(f1cn))
204 > + vafoen(nrofon,prfcan(f2cn))
205 > + vafoen(nrofon,prfcan(f3cn))
206 > + vafoen(nrofon,prfcan(f4cn))
207 > + vafoen(nrofon,prfcan(f5cn))
208 > + vafoen(nrofon,prfcan(f6cn))
209 > + vafoen(nrofon,prfcan(f7cn))
210 > + vafoen(nrofon,prfcan(f8cn)) )
211 vafott(nrofon,tecnp1) = daux
214 do 211 , nrofon = 1, nbfonc
215 daux = vafoen(nrofon,prfcan(f1cn))
216 > + vafoen(nrofon,prfcan(f2cn))
217 > + vafoen(nrofon,prfcan(f3cn))
218 > + vafoen(nrofon,prfcan(f4cn))
219 > + vafoen(nrofon,prfcan(f5cn))
220 > + vafoen(nrofon,prfcan(f6cn))
221 > + vafoen(nrofon,prfcan(f7cn))
222 > + vafoen(nrofon,prfcan(f8cn))
223 vafott(nrofon,tecnp1) = daux
226 cgn write(ulsort,7777) f1cn,f2cn,f3cn,f4cn,f
227 cgn write(ulsort,7777) f1cn,f2cn,f3cn,f4cn,f5cn,f6cn,f7cn,f8cn,-1,
229 cgn write(81,7777) tecnp1
231 c 2.2. ==> etanp1 = 21, ...,26 : le tetraedre est decoupe en deux
232 c c'est ce qui se passe quand un decoupage de conformite
233 c est cree apres du deraffinement.
234 c on donne la valeur moyenne de la fonction sur les huit
235 c anciens fils a chaque nouveau fils.
236 c remarque : on pourrait certainement faire mieux, avec des
237 c moyennes ponderees en fonction du recouvrement
238 c des anciennes et nouvelles filles. c'est trop
239 c complique pour que cela vaille le coup.
240 c remarque : cela arrive seulement avec du deraffinement.
242 elseif ( etanp1.ge.21 .and. etanp1.le.26 ) then
244 f1hp = filtet(tehnp1)
246 f2cp = ntesca(f1hp+1)
249 if ( typint.eq.0 ) then
254 do 22 , nrofon = 1, nbfonc
255 daux = daux1 * ( vafoen(nrofon,prfcan(f1cn))
256 > + vafoen(nrofon,prfcan(f2cn))
257 > + vafoen(nrofon,prfcan(f3cn))
258 > + vafoen(nrofon,prfcan(f4cn))
259 > + vafoen(nrofon,prfcan(f5cn))
260 > + vafoen(nrofon,prfcan(f6cn))
261 > + vafoen(nrofon,prfcan(f7cn))
262 > + vafoen(nrofon,prfcan(f8cn)) )
263 vafott(nrofon,f1cp) = daux
264 vafott(nrofon,f2cp) = daux
266 cgn write(ulsort,7777) f1cn,f2cn,f3cn,f4cn,f5cn,f6cn,f7cn,f8cn,-1,
268 cgn write(82,7777) f1cp,f2cp
270 c 2.3. ==> etanp1 = 41, ..., 44 : le tetraedre est
271 c decoupe en quatre par une face.
272 c etanp1 = 45, 46, 47 : le tetraedre est decoupe
273 c en 4 par une diagonale
274 c c'est ce qui se passe quand un decoupage de conformite
275 c est cree apres du deraffinement.
276 c on donne la valeur moyenne de la fonction sur les huit
277 c anciens fils a chaque nouveau fils.
278 c remarque : on pourrait certainement faire mieux, avec des
279 c moyennes ponderees en fonction du recouvrement
280 c des anciens et nouveaux fils. c'est trop
281 c complique pour que cela vaille le coup.
282 c remarque : cela arrive seulement avec du deraffinement.
284 elseif ( etanp1.ge.41 .and. etanp1.le.47 ) then
286 f1hp = filtet(tehnp1)
288 f2cp = ntesca(f1hp+1)
289 f3cp = ntesca(f1hp+2)
290 f4cp = ntesca(f1hp+3)
295 if ( typint.eq.0 ) then
300 do 23 , nrofon = 1, nbfonc
301 daux = daux1 * ( vafoen(nrofon,prfcan(f1cn))
302 > + vafoen(nrofon,prfcan(f2cn))
303 > + vafoen(nrofon,prfcan(f3cn))
304 > + vafoen(nrofon,prfcan(f4cn))
305 > + vafoen(nrofon,prfcan(f5cn))
306 > + vafoen(nrofon,prfcan(f6cn))
307 > + vafoen(nrofon,prfcan(f7cn))
308 > + vafoen(nrofon,prfcan(f8cn)) )
309 vafott(nrofon,f1cp) = daux
310 vafott(nrofon,f2cp) = daux
311 vafott(nrofon,f3cp) = daux
312 vafott(nrofon,f4cp) = daux
314 cgn write(ulsort,7777) f1cn,f2cn,f3cn,f4cn,f5cn,f6cn,f7cn,f8cn,-1,
315 cgn > f1cp,f2cp,f3cp,f4cp
316 cgn write(83,7777) f1cp,f2cp,f3cp,f4cp
326 if ( coderr.ne.0 ) then
328 write (ulsort,texte(langue,1)) 'Sortie', nompro
329 write (ulsort,texte(langue,2)) coderr