xref: /phasta/phSolver/compressible/e3juel.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3juel (yl,     acl,    sls,    A0,
2*59599516SKenneth E. Jansen     &			   WdetJ,  rl,     rml)
3*59599516SKenneth E. Jansenc
4*59599516SKenneth E. Jansenc----------------------------------------------------------------------
5*59599516SKenneth E. Jansenc
6*59599516SKenneth E. Jansenc This routine calculates Exactly integrated Linear Tetrahedra
7*59599516SKenneth E. Jansenc Mass term (assuming U(Y) is linear it is not).
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc input:
10*59599516SKenneth E. Jansenc  WdetJ  (npro)                : weighted Jacobian
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc output:
13*59599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)      : residual
14*59599516SKenneth E. Jansenc  rml    (npro,nshl,nflow)      : modified residual
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc
17*59599516SKenneth E. Jansenc  note that this routine wipes out yl by putting ul into it
18*59599516SKenneth E. Jansenc  and then (in ires=1 case ) it is used again
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997, Primitive Variables
21*59599516SKenneth E. Jansenc----------------------------------------------------------------------
22*59599516SKenneth E. Jansenc
23*59599516SKenneth E. Jansen	include "common.h"
24*59599516SKenneth E. Jansenc
25*59599516SKenneth E. Jansen        dimension yl(npro,nshl,nflow),        acl(npro,nshl,ndof),
26*59599516SKenneth E. Jansen     &            WdetJ(npro),               A0(npro,nflow,nflow),
27*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),        rml(npro,nshl,nflow)
28*59599516SKenneth E. Jansenc
29*59599516SKenneth E. Jansen        dimension rk(npro),                  rho(npro),
30*59599516SKenneth E. Jansen     &            ei(npro),                  tmp(npro),
31*59599516SKenneth E. Jansen     &            ub(npro,nflow),             fact(npro),
32*59599516SKenneth E. Jansen     &		  fddt(npro)
33*59599516SKenneth E. Jansen
34*59599516SKenneth E. Jansen	ttim(28) = ttim(28) - secs(0.0)
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansenc.... --------------------->  Time term   <--------------------
38*59599516SKenneth E. Jansenc
39*59599516SKenneth E. Jansenc.... add contribution of U to rml
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc.... compute conservative variables
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansenc   multiply by exact mass matrix   integral N_aN_b=(I+1)*V/20
45*59599516SKenneth E. Jansenc   where 1 is a matrix with every element=1
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansenc   note that the wght has 4/3 multiplier so 3/4*20=15
48*59599516SKenneth E. Jansenc
49*59599516SKenneth E. Jansen
50*59599516SKenneth E. Jansen        fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0)
51*59599516SKenneth E. Jansen         fct1=almi/(gami*alfi)*Dtgl  ! factor for predictor (scalar)
52*59599516SKenneth E. Jansen        if(ires.ne.1) then
53*59599516SKenneth E. Jansen         fddt=fact*fct1
54*59599516SKenneth E. Jansen         do inod=1,nshl
55*59599516SKenneth E. Jansen	  rk = pt5 * (yl(:,inod,2)**2 + yl(:,inod,3)**2 + yl(:,inod,4)**2)
56*59599516SKenneth E. Jansenc
57*59599516SKenneth E. Jansen          ithm = 6
58*59599516SKenneth E. Jansen          call getthm (yl(:,inod,1), yl(:,inod,5), sls,
59*59599516SKenneth E. Jansen     &                 rk,           rho,          ei,
60*59599516SKenneth E. Jansen     &                 tmp,          tmp,          tmp,
61*59599516SKenneth E. Jansen     &                 tmp,          tmp,          tmp,
62*59599516SKenneth E. Jansen     &                 tmp,          tmp)
63*59599516SKenneth E. Jansenc
64*59599516SKenneth E. Jansen         yl(:,inod,1) = rho
65*59599516SKenneth E. Jansen         yl(:,inod,2) = rho * yl(:,inod,2)
66*59599516SKenneth E. Jansen         yl(:,inod,3) = rho * yl(:,inod,3)
67*59599516SKenneth E. Jansen         yl(:,inod,4) = rho * yl(:,inod,4)
68*59599516SKenneth E. Jansen         yl(:,inod,5) = rho * (ei + rk)
69*59599516SKenneth E. Jansen        enddo
70*59599516SKenneth E. Jansen	    ub(:,:)=yl(:,1,:)+yl(:,2,:)
71*59599516SKenneth E. Jansen     &             +yl(:,3,:)+yl(:,4,:)
72*59599516SKenneth E. Jansen
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansenc  what we have now in yl is the U_b^e
75*59599516SKenneth E. Jansenc  we want to get Resm(mass)=M^e_{ab} (U^e_b(Y+epsilon P)
76*59599516SKenneth E. Jansenc                                              - U^e_b(Y))*fact/dt,
77*59599516SKenneth E. Jansenc  since only the difference between resm's is important we
78*59599516SKenneth E. Jansenc  do not have to subtract off the unperturbed U(Y) vector
79*59599516SKenneth E. Jansenc  This term is meant to carry through the effect of a perturbation
80*59599516SKenneth E. Jansenc  in Y upon dY/dt (through the predictor into the term fact)
81*59599516SKenneth E. Jansenc
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansen
84*59599516SKenneth E. Jansen	  do i = 1, nshl
85*59599516SKenneth E. Jansen	    rml(:,i,1) = rml(:,i,1) + fddt * (yl(:,i,1)+ub(:,1))
86*59599516SKenneth E. Jansen	    rml(:,i,2) = rml(:,i,2) + fddt * (yl(:,i,2)+ub(:,2))
87*59599516SKenneth E. Jansen	    rml(:,i,3) = rml(:,i,3) + fddt * (yl(:,i,3)+ub(:,3))
88*59599516SKenneth E. Jansen	    rml(:,i,4) = rml(:,i,4) + fddt * (yl(:,i,4)+ub(:,4))
89*59599516SKenneth E. Jansen	    rml(:,i,5) = rml(:,i,5) + fddt * (yl(:,i,5)+ub(:,5))
90*59599516SKenneth E. Jansen	  enddo
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen          flops = flops + 35*nshl*npro
93*59599516SKenneth E. Jansen	endif
94*59599516SKenneth E. Jansen
95*59599516SKenneth E. Jansenc
96*59599516SKenneth E. Jansenc.... ires = 2 or 3
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansen	if ((ires .eq. 1) .or. (ires .eq. 3)) then
99*59599516SKenneth E. Jansen
100*59599516SKenneth E. Jansen	    ub(:,:)=acl(:,1,:)+acl(:,2,:)
101*59599516SKenneth E. Jansen     &             +acl(:,3,:)+acl(:,4,:)
102*59599516SKenneth E. Jansen
103*59599516SKenneth E. Jansen	  do i = 1, nshl
104*59599516SKenneth E. Jansen	    yl(:,i,1) = fact*(acl(:,i,1)+ub(:,1))
105*59599516SKenneth E. Jansen	    yl(:,i,2) = fact*(acl(:,i,2)+ub(:,2))
106*59599516SKenneth E. Jansen	    yl(:,i,3) = fact*(acl(:,i,3)+ub(:,3))
107*59599516SKenneth E. Jansen	    yl(:,i,4) = fact*(acl(:,i,4)+ub(:,4))
108*59599516SKenneth E. Jansen	    yl(:,i,5) = fact*(acl(:,i,5)+ub(:,5))
109*59599516SKenneth E. Jansen	  enddo
110*59599516SKenneth E. Jansenc
111*59599516SKenneth E. Jansenc  what we have now in yl is the dY_a^e/dt=M^e_{ab} Y_{b,t},  must multiply by
112*59599516SKenneth E. Jansenc  A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt,  take advantage of zeros
113*59599516SKenneth E. Jansenc  in A0(Prim) with comments
114*59599516SKenneth E. Jansenc
115*59599516SKenneth E. Jansen          do i = 1, nshl
116*59599516SKenneth E. Jansen            rl(:,i,1) = rl(:,i,1)
117*59599516SKenneth E. Jansen     &     + A0(:,1,1)*yl(:,i,1)
118*59599516SKenneth E. Jansenc    &     + A0(:,1,2)*yl(:,i,2)
119*59599516SKenneth E. Jansenc    &     + A0(:,1,3)*yl(:,i,3)
120*59599516SKenneth E. Jansenc    &     + A0(:,1,4)*yl(:,i,4)
121*59599516SKenneth E. Jansen     &     + A0(:,1,5)*yl(:,i,5)
122*59599516SKenneth E. Jansenc
123*59599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2)
124*59599516SKenneth E. Jansen     &     + A0(:,2,1)*yl(:,i,1)
125*59599516SKenneth E. Jansen     &     + A0(:,2,2)*yl(:,i,2)
126*59599516SKenneth E. Jansenc    &     + A0(:,2,3)*yl(:,i,3)
127*59599516SKenneth E. Jansenc    &     + A0(:,2,4)*yl(:,i,4)
128*59599516SKenneth E. Jansen     &     + A0(:,2,5)*yl(:,i,5)
129*59599516SKenneth E. Jansenc
130*59599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3)
131*59599516SKenneth E. Jansen     &     + A0(:,3,1)*yl(:,i,1)
132*59599516SKenneth E. Jansenc    &     + A0(:,3,2)*yl(:,i,2)
133*59599516SKenneth E. Jansen     &     + A0(:,3,3)*yl(:,i,3)
134*59599516SKenneth E. Jansenc    &     + A0(:,3,4)*yl(:,i,4)
135*59599516SKenneth E. Jansen     &     + A0(:,3,5)*yl(:,i,5)
136*59599516SKenneth E. Jansenc
137*59599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4)
138*59599516SKenneth E. Jansen     &     + A0(:,4,1)*yl(:,i,1)
139*59599516SKenneth E. Jansenc    &     + A0(:,4,2)*yl(:,i,2)
140*59599516SKenneth E. Jansenc    &     + A0(:,4,3)*yl(:,i,3)
141*59599516SKenneth E. Jansen     &     + A0(:,4,4)*yl(:,i,4)
142*59599516SKenneth E. Jansen     &     + A0(:,4,5)*yl(:,i,5)
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5)
145*59599516SKenneth E. Jansen     &     + A0(:,5,1)*yl(:,i,1)
146*59599516SKenneth E. Jansen     &     + A0(:,5,2)*yl(:,i,2)
147*59599516SKenneth E. Jansen     &     + A0(:,5,3)*yl(:,i,3)
148*59599516SKenneth E. Jansen     &     + A0(:,5,4)*yl(:,i,4)
149*59599516SKenneth E. Jansen     &     + A0(:,5,5)*yl(:,i,5)
150*59599516SKenneth E. Jansenc
151*59599516SKenneth E. Jansen          enddo
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansen          flops = flops + 45*nshl*npro
154*59599516SKenneth E. Jansen	endif
155*59599516SKenneth E. Jansen
156*59599516SKenneth E. Jansen	ttim(28) = ttim(28) + tmr()
157*59599516SKenneth E. Jansenc
158*59599516SKenneth E. Jansenc.... return
159*59599516SKenneth E. Jansenc
160*59599516SKenneth E. Jansen	return
161*59599516SKenneth E. Jansen	end
162*59599516SKenneth E. Jansen
163*59599516SKenneth E. Jansenc$$$
164*59599516SKenneth E. Jansenc$$$        subroutine e3juelSclr (ycl,     acl,    A0t,
165*59599516SKenneth E. Jansenc$$$     &			       WdetJ,  rtl,     rmtl)
166*59599516SKenneth E. Jansenc$$$c
167*59599516SKenneth E. Jansenc$$$c----------------------------------------------------------------------
168*59599516SKenneth E. Jansenc$$$c
169*59599516SKenneth E. Jansenc$$$c This routine calculates Exactly integrated Linear Tetrahedra
170*59599516SKenneth E. Jansenc$$$c Mass term (assuming U(Y) is linear it is not).
171*59599516SKenneth E. Jansenc$$$c
172*59599516SKenneth E. Jansenc$$$c input:
173*59599516SKenneth E. Jansenc$$$c  WdetJ  (npro)                : weighted Jacobian
174*59599516SKenneth E. Jansenc$$$c
175*59599516SKenneth E. Jansenc$$$c output:
176*59599516SKenneth E. Jansenc$$$c  rtl     (npro,nshl,nflow)      : residual
177*59599516SKenneth E. Jansenc$$$c  rmtl    (npro,nshl,nflow)      : modified residual
178*59599516SKenneth E. Jansenc$$$c
179*59599516SKenneth E. Jansenc$$$c
180*59599516SKenneth E. Jansenc$$$c  note that this routine wipes out ycl by putting ul into it
181*59599516SKenneth E. Jansenc$$$c  and then (in ires=1 case ) it is used again
182*59599516SKenneth E. Jansenc$$$c
183*59599516SKenneth E. Jansenc$$$c Kenneth Jansen, Winter 1997, Primitive Variables
184*59599516SKenneth E. Jansenc$$$c----------------------------------------------------------------------
185*59599516SKenneth E. Jansenc$$$c
186*59599516SKenneth E. Jansenc$$$	include "common.h"
187*59599516SKenneth E. Jansenc$$$c
188*59599516SKenneth E. Jansenc$$$        dimension ycl(npro,nshl,ndof),    acl(npro,nshl,ndof),
189*59599516SKenneth E. Jansenc$$$     &            WdetJ(npro),           A0t(npro),
190*59599516SKenneth E. Jansenc$$$     &            rtl(npro,nshl),        rmtl(npro,nshl)
191*59599516SKenneth E. Jansenc$$$
192*59599516SKenneth E. Jansenc$$$c
193*59599516SKenneth E. Jansenc$$$        dimension rk(npro),              rho(npro),
194*59599516SKenneth E. Jansenc$$$     &            ei(npro),              tmp(npro),
195*59599516SKenneth E. Jansenc$$$     &            ubt(npro),             fact(npro),
196*59599516SKenneth E. Jansenc$$$     &		  fddt(npro)
197*59599516SKenneth E. Jansenc$$$
198*59599516SKenneth E. Jansenc$$$	ttim(28) = ttim(28) - tmr()
199*59599516SKenneth E. Jansenc$$$
200*59599516SKenneth E. Jansenc$$$c
201*59599516SKenneth E. Jansenc$$$c.... --------------------->  Time term   <--------------------
202*59599516SKenneth E. Jansenc$$$c
203*59599516SKenneth E. Jansenc$$$c.... add contribution of U to rml
204*59599516SKenneth E. Jansenc$$$c
205*59599516SKenneth E. Jansenc$$$c.... compute conservative variables
206*59599516SKenneth E. Jansenc$$$c
207*59599516SKenneth E. Jansenc$$$c
208*59599516SKenneth E. Jansenc$$$c   multiply by exact mass matrix   integral N_aN_b=(I+1)*V/20
209*59599516SKenneth E. Jansenc$$$c   where 1 is a matrix with every element=1
210*59599516SKenneth E. Jansenc$$$c
211*59599516SKenneth E. Jansenc$$$c   note that the wght has 4/3 multiplier so 3/4*20=15
212*59599516SKenneth E. Jansenc$$$c
213*59599516SKenneth E. Jansenc$$$
214*59599516SKenneth E. Jansenc$$$        fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0)
215*59599516SKenneth E. Jansenc$$$         fct1=almi/(gami*alfi)*Dtgl  ! factor for predictor (scaler)
216*59599516SKenneth E. Jansenc$$$c
217*59599516SKenneth E. Jansenc$$$c
218*59599516SKenneth E. Jansenc$$$c.... ires = 2 or 3
219*59599516SKenneth E. Jansenc$$$c
220*59599516SKenneth E. Jansenc$$$
221*59599516SKenneth E. Jansenc$$$	if ((ires .eq. 1) .or. (ires .eq. 3)) then
222*59599516SKenneth E. Jansenc$$$	    ubt(:)=acl(:,1,id)+acl(:,2,id)
223*59599516SKenneth E. Jansenc$$$     &            +acl(:,3,id)+acl(:,4,id)
224*59599516SKenneth E. Jansenc$$$	  do i = 1, nshl
225*59599516SKenneth E. Jansenc$$$	    ycl(:,i,id) = fact*(acl(:,i,id)+ubt(:))
226*59599516SKenneth E. Jansenc$$$
227*59599516SKenneth E. Jansenc$$$	  enddo
228*59599516SKenneth E. Jansenc$$$c
229*59599516SKenneth E. Jansenc$$$c  what we have now in ycl is the dY_a^e/dt=M^e_{ab} Y_{b,t},  must multiply by
230*59599516SKenneth E. Jansenc$$$c  A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt,  take advantage of zeros
231*59599516SKenneth E. Jansenc$$$c  in A0(Prim) with comments
232*59599516SKenneth E. Jansenc$$$c
233*59599516SKenneth E. Jansenc$$$          do i = 1, nshl
234*59599516SKenneth E. Jansenc$$$            rtl(:,i) = rtl(:,i)
235*59599516SKenneth E. Jansenc$$$     &     + A0t(:)*ycl(:,i,id)
236*59599516SKenneth E. Jansenc$$$
237*59599516SKenneth E. Jansenc$$$c
238*59599516SKenneth E. Jansenc$$$          enddo
239*59599516SKenneth E. Jansenc$$$c
240*59599516SKenneth E. Jansenc$$$          flops = flops + 45*nenl*npro
241*59599516SKenneth E. Jansenc$$$	endif
242*59599516SKenneth E. Jansenc$$$
243*59599516SKenneth E. Jansenc$$$	ttim(28) = ttim(28) + tmr()
244*59599516SKenneth E. Jansenc$$$c
245*59599516SKenneth E. Jansenc$$$c.... return
246*59599516SKenneth E. Jansenc$$$c
247*59599516SKenneth E. Jansenc$$$	return
248*59599516SKenneth E. Jansenc$$$	end
249