1 subroutine pcspt0 ( etan, etanp1, tehn, tehnp1,
5 > nbfonc, ngauss, 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 Points de Gauss -
29 c Tetraedres d'etat anterieur 0
31 c ______________________________________________________________________
33 c . nom . e/s . taille . description .
34 c .____________________________________________________________________.
35 c . etan . e . 1 . ETAt du tetraedre a l'iteration N .
36 c . etanp1 . e . 1 . ETAt du tetraedre a l'iteration N+1 .
37 c . tehn . e . 1 . TEtraedre courant en numerotation Homard .
38 c . . . . a l'iteration N .
39 c . tehnp1 . e . 1 . TEtraedre courant en numerotation Homard .
40 c . . . . a l'iteration N+1 .
41 c . prfcan . e . * . En numero du calcul a l'iteration n : .
42 c . . . . 0 : l'entite est absente du profil .
43 c . . . . i : l'entite est au rang i dans le profil .
44 c . prfcap . es . * . En numero du calcul a l'iteration n+1 : .
45 c . . . . 0 : l'entite est absente du profil .
46 c . . . . 1 : l'entite est presente dans le profil .
47 c . filtet . e . nbteto . premier fils des tetraedres .
48 c . nteeca . e . reteto . numero des tetraedres dans le calcul entree.
49 c . ntesca . e . rsteto . numero des tetraedres dans le calcul sortie.
50 c . nbfonc . e . 1 . nombre de fonctions elements de volume .
51 c . ngauss . e . 1 . nbre de points de Gauss des fonctions pg .
52 c . vafoen . e . nbfonc*. variables en entree de l'adaptation .
55 c . vafott . es . nbfonc*. tableau temporaire de la solution .
58 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
59 c . langue . e . 1 . langue des messages .
60 c . . . . 1 : francais, 2 : anglais .
61 c . codret . es . 1 . code de retour des modules .
62 c . . . . 0 : pas de probleme .
63 c . . . . 1 : probleme .
64 c ______________________________________________________________________
67 c 0. declarations et dimensionnement
70 c 0.1. ==> generalites
76 parameter ( nompro = 'PCSPT0' )
88 integer etan, etanp1, tehn, tehnp1
89 integer nbfonc, ngauss
90 integer prfcan(*), prfcap(*)
91 integer filtet(nbteto)
92 integer nteeca(reteto), ntesca(rsteto)
94 double precision vafoen(nbfonc,ngauss,*)
95 double precision vafott(nbfonc,ngauss,*)
97 integer ulsort, langue, codret
99 c 0.4. ==> variables locales
101 #ifdef _DEBUG_HOMARD_
105 c tecn = TEtraedre courant en numerotation du Calcul a l'it. N
106 c tecnp1 = TEtraedre courant en numerotation du Calcul a l'it. N+1
110 c f1hp = Fils 1er du tetraedre en numerotation Homard a l'it. N+1
111 c f1cp = Fils 1er du tetraedre en numerota. du Calcul a l'it. N+1
112 c f2cp = Fils 2eme du tetraedre en numerota. du Calcul a l'it. N+1
113 c f3cp = Fils 3eme du tetraedre en numerota. du Calcul a l'it. N+1
114 c f4cp = Fils 4eme du tetraedre en numerota. du Calcul a l'it. N+1
115 c f5cp = Fils 5eme du tetraedre en numerota. du Calcul a l'it. N+1
116 c f6cp = Fils 6eme du tetraedre en numerota. du Calcul a l'it. N+1
117 c f7cp = Fils 7eme du tetraedre en numerota. du Calcul a l'it. N+1
118 c f8cp = Fils 8eme du tetraedre en numerota. du Calcul a l'it. N+1
121 integer f1cp, f2cp, f3cp, f4cp, f5cp, f6cp, f7cp, f8cp
124 integer nrofon, nugaus
126 double precision daux
127 double precision daux1
130 parameter ( nbmess = 10 )
131 character*80 texte(nblang,nbmess)
133 c 0.5. ==> initialisations
134 c ______________________________________________________________________
142 #ifdef _DEBUG_HOMARD_
143 write (ulsort,texte(langue,1)) 'Entree', nompro
148 >'(/,''Tetr. en cours : numero a l''''iteration '',a3,'' : '',i10)'
150 >'( '' etat a l''''iteration '',a3,'' : '',i4)'
153 >'(/,''Current tetrahedron : # at iteration '',a3,'' : '',i10)'
155 > '( '' status at iteration '',a3,'' : '',i4)'
161 c 1.2. ==> on repere son ancien numero dans le calcul
164 cgn write (ulsort,texte(langue,4)) 'nca', tecn
165 cgn write (ulsort,*) 'prfcan(tecn)', prfcan(tecn)
166 cgncc if ( prfcan(tecn).eq.0 ) then
167 cgn write (ulsort,texte(langue,4)) 'n ', tehn
168 cgn write (ulsort,texte(langue,5)) 'n ', etan
172 c 2. etan = 0 : le tetraedre etait actif
173 c On explore tous les etats du tetraedre a l'iteration n+1
176 if ( prfcan(tecn).gt.0 ) then
178 c ===> etanp1 = 0 : le tetraedre etait actif et l'est encore ;
180 c c'est le cas le plus simple : on prend la valeur de la
181 c fonction associee a l'ancien numero du tetraedre.
183 if ( etanp1.eq.0 ) then
185 tecnp1 = ntesca(tehnp1)
188 cgn write (ulsort,90002) 'tecnp1',tecnp1
189 do 21 , nrofon = 1, nbfonc
190 do 211 , nugaus = 1 , ngauss
191 cgn write (ulsort,92010) vafoen(nrofon,nugaus,prfcan(tecn))
192 vafott(nrofon,nugaus,tecnp1) =
193 > vafoen(nrofon,nugaus,prfcan(tecn))
196 cgn write(ulsort,91010) tecn,-1,tecnp1
198 c ==> etanp1 = 21, ..., 26 : le tetraedre etait actif et
200 c les deux fils prennent la valeur de la fonction sur le pere
202 elseif ( etanp1.ge.21 .and. etanp1.le.26 ) then
204 f1hp = filtet(tehnp1)
206 f2cp = ntesca(f1hp+1)
209 daux1 = 1.d0/dble(ngauss)
210 do 22 , nrofon = 1, nbfonc
211 daux = vafoen(nrofon,1,prfcan(tecn))
212 cgn write (ulsort,*) 'daux', daux
213 do 221 , nugaus = 2, ngauss
214 daux = daux + vafoen(nrofon,nugaus,prfcan(tecn))
217 do 222 , nugaus = 1 , ngauss
218 vafott(nrofon,nugaus,f1cp) = daux
219 vafott(nrofon,nugaus,f2cp) = daux
222 cgn write(12,91010) f1cp,f2cp
223 cgn write(ulsort,91010) tecn,-1,
226 c ==> etanp1 = 41, ... 47 : le tetraedre etait actif et est
228 c les quatre fils prennent la valeur de la fonction sur le
231 elseif ( etanp1.ge.41 .and. etanp1.le.47 ) then
233 f1hp = filtet(tehnp1)
235 f2cp = ntesca(f1hp+1)
236 f3cp = ntesca(f1hp+2)
237 f4cp = ntesca(f1hp+3)
242 daux1 = 1.d0/dble(ngauss)
243 do 23 , nrofon = 1, nbfonc
244 daux = vafoen(nrofon,1,prfcan(tecn))
245 do 231 , nugaus = 2, ngauss
246 daux = daux + vafoen(nrofon,nugaus,prfcan(tecn))
249 do 232 , nugaus = 1 , ngauss
250 vafott(nrofon,nugaus,f1cp) = daux
251 vafott(nrofon,nugaus,f2cp) = daux
252 vafott(nrofon,nugaus,f3cp) = daux
253 vafott(nrofon,nugaus,f4cp) = daux
256 cgn write(13,91010) f1cp,f2cp,f3cp,f4cp
257 cgn write(ulsort,91010) tecn,-1,
258 cgn > f1cp,f2cp,f3cp,f4cp
260 c ==> etanp1 = 81, 86, 87 : le tetraedre etait actif et est
262 c les huit fils prennent la valeur de la fonction sur le
265 elseif ( etanp1.ge.85 .and. etanp1.le.87 ) then
267 f1hp = filtet(tehnp1)
269 f2cp = ntesca(f1hp+1)
270 f3cp = ntesca(f1hp+2)
271 f4cp = ntesca(f1hp+3)
272 f5cp = ntesca(f1hp+4)
273 f6cp = ntesca(f1hp+5)
274 f7cp = ntesca(f1hp+6)
275 f8cp = ntesca(f1hp+7)
284 daux1 = 1.d0/dble(ngauss)
285 do 24 , nrofon = 1, nbfonc
286 daux = vafoen(nrofon,1,prfcan(tecn))
287 do 241 , nugaus = 2, ngauss
288 daux = daux + vafoen(nrofon,nugaus,prfcan(tecn))
291 do 242 , nugaus = 1 , ngauss
292 vafott(nrofon,nugaus,f1cp) = daux
293 vafott(nrofon,nugaus,f2cp) = daux
294 vafott(nrofon,nugaus,f3cp) = daux
295 vafott(nrofon,nugaus,f4cp) = daux
296 vafott(nrofon,nugaus,f5cp) = daux
297 vafott(nrofon,nugaus,f6cp) = daux
298 vafott(nrofon,nugaus,f7cp) = daux
299 vafott(nrofon,nugaus,f8cp) = daux
302 cgn write(14,91010) f1cp,f2cp,f3cp,f4cp,f5cp,f6cp,f7cp,f8cp
303 cgn write(ulsort,91010) tecn,-1,
304 cgn > f1cp,f2cp,f3cp,f4cp,f5cp,f6cp,f7cp,f8cp
306 c ==> aucun autre etat sur le tetraedre courant n'est possible
311 write (ulsort,texte(langue,4)) 'n ', tehn
312 write (ulsort,texte(langue,5)) 'n ', etan
313 write (ulsort,texte(langue,4)) 'n+1', tehnp1
314 write (ulsort,texte(langue,5)) 'n+1', etanp1
324 if ( coderr.ne.0 ) then
326 write (ulsort,texte(langue,1)) 'Sortie', nompro
327 write (ulsort,texte(langue,2)) coderr