1 subroutine pcsitr ( nbfop2, profho, vap2ho,
2 > hettri, aretri, filtri,
4 c ______________________________________________________________________
8 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
10 c Version originale enregistree le 18 juin 1996 sous le numero 96036
11 c aupres des huissiers de justice Simart et Lavoir a Clamart
12 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
13 c aupres des huissiers de justice
14 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
16 c HOMARD est une marque deposee d'Electricite de France
22 c ______________________________________________________________________
24 c aPres adaptation - Conversion de Solution -
26 c interpolation iso-p2 sur les noeuds - decoupage des TRiangles
28 c remarque : on devrait optimiser cela car si le triangle etait dans
29 c un etat de decoupage similaire, on recalcule une valeur
30 c qui est deja presente
31 c remarque : pcs2tr et pcsitr sont des clones
32 c ______________________________________________________________________
34 c . nom . e/s . taille . description .
35 c .____________________________________________________________________.
36 c . nbfop2 . e . 1 . nombre de fonctions P2 .
37 c . profho . es . * . pour chaque entite en numerotation homard :.
38 c . . . . 0 : l'entite est absente du profil .
39 c . . . . 1 : l'entite est presente dans le profil .
40 c . vap2ho . es . nbfop2*. variables iso-p2 numerotation homard .
42 c . hettri . e . nbtrto . historique de l'etat des triangles .
43 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
44 c . filtri . e . nbtrto . premier fils des triangles .
45 c . somare . e .2*nbarto. numeros des extremites d'arete .
46 c . np2are . e . nbarto . numero des noeuds p2 milieux d'aretes .
47 c ______________________________________________________________________
50 c 0. declarations et dimensionnement
53 c 0.1. ==> generalites
70 integer profho(nbnoto)
71 integer hettri(nbtrto), aretri(nbtrto,3), filtri(nbtrto)
72 integer somare(2,nbarto), np2are(nbarto)
74 double precision vap2ho(nbfop2,*)
76 c 0.4. ==> variables locales
79 integer iaux1, iaux2, iaux3
80 integer letria, letri0
81 integer ff, nuv, af1, af2, af3
86 c f1hp = Fils 1er du triangle en numerotation Homard a l'it. N+1
92 c 0.5. ==> initialisations
93 c ______________________________________________________________________
94 cgn write (*,*) 'PCSITR'
96 do 10 , letri0 = 1, nbtrto
100 cgn write (1,90002) 'Triangle', letria
102 c 1. liste des noeuds concernes et type de decoupage
105 call pcs0tr ( letria, profho,
108 > afaire, listno, typdec )
109 cgn write (1,90002) 'typdec', typdec
114 c 2. le triangle vient d'etre decoupe en 4 triangles alors
115 c qu'il ne l'etait pas a l'iteration precedente
116 c . en standard : etat 4
117 c . avec bascule pour le suivi de frontiere : etat 6, 7 ou 8
118 c Remarque : regarder cmrdtr pour les conventions
121 if ( typdec.ge.4 ) then
123 c recuperation du triangle fils aine
124 c c'est le central si pas de basculement
126 f1hp = filtri(letria)
128 c recuperation des aretes internes au triangle decoupe
129 c . pour un decoupage standard, ce sont les trois du triangle
131 c . avec une bascule, il y a eu modification du fils aine
132 c et du frere de rang connu par l'etat du triangle, inloc.
133 c l'arete basculee est celle commune a ces deux triangles. les
134 c deux autres aretes sont celles de rang inloc dans la
135 c description des deux triangles modifies.
137 if ( typdec.eq.4 ) then
145 do 21 , iaux1 = 1 , 3
146 iaux3 = aretri(f1hp+inloc,iaux1)
147 do 211 , iaux2 = 1 , 3
148 if ( iaux3.eq.aretri(f1hp,iaux2) ) then
153 af1 = aretri(f1hp ,inloc)
154 af2 = aretri(f1hp+inloc,inloc)
157 c recuperation des noeuds milieux sur ces aretes internes
166 c interpolation p1 : interpolee (ui,i=1,2) = 1/2 (u1+u2)
168 do 22 , nuv = 1, nbfop2
171 > unsde * ( vap2ho(nuv,listno(5)) + vap2ho(nuv,listno(6)) )
173 > unsde * ( vap2ho(nuv,listno(4)) + vap2ho(nuv,listno(6)) )
175 > unsde * ( vap2ho(nuv,listno(4)) + vap2ho(nuv,listno(5)) )
180 c 3. le triangle vient d'etre decoupe en 2
183 elseif ( typdec.eq.1 .or. typdec.eq.2 .or. typdec.eq.3 ) then
185 c 3.1. ==> le triangle vient d'etre decoupe en 2 par l'arete numero 1
187 if ( typdec.eq.1 ) then
189 c recuperation d'un triangle fils
191 ff = filtri(letria) + nutrde(1,2)
193 c recuperation du nouveau noeud milieu
195 m1 = np2are(aretri(ff,3))
198 c interpolation p1 : interpolee (ui,i=1,2) = 1/2 (u1+u2)
200 do 31 , nuv = 1, nbfop2
203 > unsde * ( vap2ho(nuv,listno(5)) + vap2ho(nuv,listno(6)) )
207 c 3.2. ==> le triangle vient d'etre decoupe en 2 par l'arete numero 2
209 elseif ( typdec.eq.2 ) then
211 c recuperation d'un triangle fils
213 ff = filtri(letria) + nutrde(2,1)
215 c recuperation du nouveau noeud milieu
217 m2 = np2are(aretri(ff,3))
220 c interpolation p1 : interpolee (ui,i=1,2) = 1/2 (u1+u2)
222 do 32 , nuv = 1, nbfop2
225 > unsde * ( vap2ho(nuv,listno(4)) + vap2ho(nuv,listno(6)) )
229 c 3.3. ==> le triangle vient d'etre decoupe en 2 par l'arete numero 3
231 elseif ( typdec.eq.3 ) then
233 c recuperation d'un triangle fils
235 ff = filtri(letria) + nutrde(3,1)
237 c recuperation du nouveau noeud milieu
239 m3 = np2are(aretri(ff,2))
242 c interpolation p1 : interpolee (ui,i=1,2) = 1/2 (u1+u2)
244 do 33 , nuv = 1, nbfop2
247 > unsde * ( vap2ho(nuv,listno(4)) + vap2ho(nuv,listno(5)) )