xref: /phasta/phSolver/compressible/e3q.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3q (ycl,      shp,     shgl,
2*59599516SKenneth E. Jansen     &                  xl,       ql,      rmassl,
3*59599516SKenneth E. Jansen     &                  xmudmi,   sgn)
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc----------------------------------------------------------------------
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc This routine computes the element contribution to the
8*59599516SKenneth E. Jansenc diffusive flux vector and the lumped mass matrix.
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc input:
11*59599516SKenneth E. Jansenc  ycl     (npro,nshl,ndof)       : Y variables
12*59599516SKenneth E. Jansenc  shp    (nen,ngauss)            : element shape-functions
13*59599516SKenneth E. Jansenc  shgl   (nsd,nen,ngauss)        : element local-grad-shape-functions
14*59599516SKenneth E. Jansenc  xl     (npro,nshl,nsd)        : nodal coordinates at current step
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc output:
17*59599516SKenneth E. Jansenc  ql     (npro,nshl,idflx) : element RHS diffusion residual
18*59599516SKenneth E. Jansenc  rmassl     (npro,nshl)        : element lumped mass matrix
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc----------------------------------------------------------------------
21*59599516SKenneth E. Jansenc
22*59599516SKenneth E. Jansen        include "common.h"
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndof),
25*59599516SKenneth E. Jansen     &            shp(nshl,ngauss),
26*59599516SKenneth E. Jansen     &            shgl(nsd,nshl,ngauss),
27*59599516SKenneth E. Jansen     &            xl(npro,nenl,nsd),
28*59599516SKenneth E. Jansen     &            ql(npro,nshl,idflx),  rmassl(npro,nshl),
29*59599516SKenneth E. Jansen     &            xmudmi(npro,ngauss)
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc local arrays
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansen        dimension g1yi(npro,nflow),          g2yi(npro,nflow),
34*59599516SKenneth E. Jansen     &            g3yi(npro,nflow),          shg(npro,nshl,nsd),
35*59599516SKenneth E. Jansen     &            dxidx(npro,nsd,nsd),       WdetJ(npro),
36*59599516SKenneth E. Jansen     &            T(npro),                   cp(npro),
37*59599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
38*59599516SKenneth E. Jansen     &            u3(npro),                  rmu(npro),
39*59599516SKenneth E. Jansen     &            rlm(npro),                 rlm2mu(npro),
40*59599516SKenneth E. Jansen     &            con(npro),                 rho(npro)
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansen        dimension qdi(npro,idflx),alph1(npro),alph2(npro)
43*59599516SKenneth E. Jansenc
44*59599516SKenneth E. Jansen        dimension sgn(npro,nshl),          shape(npro,nshl),
45*59599516SKenneth E. Jansen     &            shdrv(npro,nsd,nshl),    shpsum(npro)
46*59599516SKenneth E. Jansenc
47*59599516SKenneth E. Jansenc.... for surface tension
48*59599516SKenneth E. Jansenc
49*59599516SKenneth E. Jansen        dimension g1yti(npro),          g2yti(npro),
50*59599516SKenneth E. Jansen     &            g3yti(npro)
51*59599516SKenneth E. Jansen        integer idflow
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansenc.... loop through the integration points
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansen
56*59599516SKenneth E. Jansen        ttim(33) = ttim(33) - secs(0.0)
57*59599516SKenneth E. Jansen
58*59599516SKenneth E. Jansen        alph1 = 0.d0
59*59599516SKenneth E. Jansen        alph2 = 0.d0
60*59599516SKenneth E. Jansen
61*59599516SKenneth E. Jansen        do intp = 1, ngauss
62*59599516SKenneth E. Jansen        if (Qwt(lcsyst,intp) .eq. zero) cycle          ! precaution
63*59599516SKenneth E. Jansenc
64*59599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each
65*59599516SKenneth E. Jansenc     element at this quadrature point. These arrays will contain
66*59599516SKenneth E. Jansenc     the correct signs for the hierarchic basis
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansen        call getshp(shp,          shgl,      sgn,
69*59599516SKenneth E. Jansen     &              shape,        shdrv)
70*59599516SKenneth E. Jansenc
71*59599516SKenneth E. Jansenc.... initialize
72*59599516SKenneth E. Jansenc
73*59599516SKenneth E. Jansen        qdi = zero
74*59599516SKenneth E. Jansenc
75*59599516SKenneth E. Jansenc
76*59599516SKenneth E. Jansenc.... calculate the integration variables necessary for the
77*59599516SKenneth E. Jansenc     formation of q
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen
80*59599516SKenneth E. Jansen        call e3qvar   (ycl,        shape,        shdrv,
81*59599516SKenneth E. Jansen     &                 rho,       xl,           g1yi,
82*59599516SKenneth E. Jansen     &                 g2yi,      g3yi,         shg,
83*59599516SKenneth E. Jansen     &                 dxidx,     WdetJ,        T,
84*59599516SKenneth E. Jansen     &                 cp,        u1,           u2,
85*59599516SKenneth E. Jansen     &                 u3                                 )
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansenc.... compute diffusive flux vector at this integration point
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc.... get material properties
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen        call getDiff (T,        cp,       rho,        ycl,
93*59599516SKenneth E. Jansen     &                rmu,      rlm,      rlm2mu,     con,  shape,
94*59599516SKenneth E. Jansen     &                xmudmi,   xl)
95*59599516SKenneth E. Jansen
96*59599516SKenneth E. Jansen        idflow = 0
97*59599516SKenneth E. Jansen        if(idiff >= 1) then   !so taking care of all the idiff=1,2,3
98*59599516SKenneth E. Jansen        idflow = idflow+12
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... compute diffusive fluxes
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansenc.... diffusive flux in x1-direction
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansen        qdi(:,1) =  rlm2mu      * g1yi(:,2)
105*59599516SKenneth E. Jansen     &               +      rlm * g2yi(:,3)
106*59599516SKenneth E. Jansen     &               +      rlm * g3yi(:,4)
107*59599516SKenneth E. Jansen        qdi(:,2) =  rmu         * g1yi(:,3)
108*59599516SKenneth E. Jansen     &               +      rmu * g2yi(:,2)
109*59599516SKenneth E. Jansen        qdi(:,3) =  rmu         * g1yi(:,4)
110*59599516SKenneth E. Jansen     &               +      rmu * g3yi(:,2)
111*59599516SKenneth E. Jansen        qdi(:,4) =  rlm2mu * u1 * g1yi(:,2) + rmu * u2 * g1yi(:,3)
112*59599516SKenneth E. Jansen     &                                   +    rmu * u3 * g1yi(:,4)
113*59599516SKenneth E. Jansen     &               +    rmu * u2 * g2yi(:,2) + rlm * u1 * g2yi(:,3)
114*59599516SKenneth E. Jansen     &               +    rmu * u3 * g3yi(:,2) + rlm * u1 * g3yi(:,4)
115*59599516SKenneth E. Jansen     &               +    con      * g1yi(:,5)
116*59599516SKenneth E. Jansen
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansenc.... diffusive flux in x2-direction
119*59599516SKenneth E. Jansenc
120*59599516SKenneth E. Jansen        qdi(:,5) =       rmu * g1yi(:,3)
121*59599516SKenneth E. Jansen     &            +      rmu * g2yi(:,2)
122*59599516SKenneth E. Jansen        qdi(:,6) =       rlm * g1yi(:,2)
123*59599516SKenneth E. Jansen     &            +   rlm2mu * g2yi(:,3)
124*59599516SKenneth E. Jansen     &            +      rlm * g3yi(:,4)
125*59599516SKenneth E. Jansen        qdi(:,7) =       rmu * g2yi(:,4)
126*59599516SKenneth E. Jansen     &            +      rmu * g3yi(:,3)
127*59599516SKenneth E. Jansen        qdi(:,8) =  rlm * u2 * g1yi(:,2) +    rmu * u1 * g1yi(:,3)
128*59599516SKenneth E. Jansen     &            + rmu * u1 * g2yi(:,2) + rlm2mu * u2 * g2yi(:,3)
129*59599516SKenneth E. Jansen     &            + rmu * u3 * g2yi(:,4)
130*59599516SKenneth E. Jansen     &            + rmu * u3 * g3yi(:,3) +    rlm * u2 * g3yi(:,4)
131*59599516SKenneth E. Jansen     &            +    con      * g2yi(:,5)
132*59599516SKenneth E. Jansenc
133*59599516SKenneth E. Jansenc.... diffusive flux in x3-direction
134*59599516SKenneth E. Jansenc
135*59599516SKenneth E. Jansen        qdi(:,9 ) =       rmu * g1yi(:,4)
136*59599516SKenneth E. Jansen     &            +      rmu * g3yi(:,2)
137*59599516SKenneth E. Jansen        qdi(:,10) =       rmu * g2yi(:,4)
138*59599516SKenneth E. Jansen     &            +      rmu * g3yi(:,3)
139*59599516SKenneth E. Jansen        qdi(:,11) =       rlm * g1yi(:,2)
140*59599516SKenneth E. Jansen     &            +      rlm * g2yi(:,3)
141*59599516SKenneth E. Jansen     &            +   rlm2mu * g3yi(:,4)
142*59599516SKenneth E. Jansen        qdi(:,12) =     rlm * u3 * g1yi(:,2) + rmu * u1 * g1yi(:,4)
143*59599516SKenneth E. Jansen     &            +    rlm * u3 * g2yi(:,3) + rmu * u2 * g2yi(:,4)
144*59599516SKenneth E. Jansen     &            +    rmu * u1 * g3yi(:,2) + rmu * u2 * g3yi(:,3)
145*59599516SKenneth E. Jansen     &            + rlm2mu * u3 * g3yi(:,4)
146*59599516SKenneth E. Jansen     &            +    con      * g3yi(:,5)
147*59599516SKenneth E. Jansen
148*59599516SKenneth E. Jansenc
149*59599516SKenneth E. Jansenc
150*59599516SKenneth E. Jansenc.... assemble contribution of qdi to ql,i.e., contribution to
151*59599516SKenneth E. Jansenc     each element node
152*59599516SKenneth E. Jansenc
153*59599516SKenneth E. Jansen        do i=1,nshl
154*59599516SKenneth E. Jansen           ql(:,i,1 ) = ql(:,i,1 )+ shape(:,i)*WdetJ*qdi(:,1 )
155*59599516SKenneth E. Jansen           ql(:,i,2 ) = ql(:,i,2 )+ shape(:,i)*WdetJ*qdi(:,2 )
156*59599516SKenneth E. Jansen           ql(:,i,3 ) = ql(:,i,3 )+ shape(:,i)*WdetJ*qdi(:,3 )
157*59599516SKenneth E. Jansen           ql(:,i,4 ) = ql(:,i,4 )+ shape(:,i)*WdetJ*qdi(:,4 )
158*59599516SKenneth E. Jansen           ql(:,i,5 ) = ql(:,i,5 )+ shape(:,i)*WdetJ*qdi(:,5 )
159*59599516SKenneth E. Jansen           ql(:,i,6 ) = ql(:,i,6 )+ shape(:,i)*WdetJ*qdi(:,6 )
160*59599516SKenneth E. Jansen           ql(:,i,7 ) = ql(:,i,7 )+ shape(:,i)*WdetJ*qdi(:,7 )
161*59599516SKenneth E. Jansen           ql(:,i,8 ) = ql(:,i,8 )+ shape(:,i)*WdetJ*qdi(:,8 )
162*59599516SKenneth E. Jansen           ql(:,i,9 ) = ql(:,i,9 )+ shape(:,i)*WdetJ*qdi(:,9 )
163*59599516SKenneth E. Jansen           ql(:,i,10) = ql(:,i,10)+ shape(:,i)*WdetJ*qdi(:,10)
164*59599516SKenneth E. Jansen           ql(:,i,11) = ql(:,i,11)+ shape(:,i)*WdetJ*qdi(:,11)
165*59599516SKenneth E. Jansen           ql(:,i,12) = ql(:,i,12)+ shape(:,i)*WdetJ*qdi(:,12)
166*59599516SKenneth E. Jansen        enddo
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansenc.... compute and assemble the element contribution to the lumped
169*59599516SKenneth E. Jansenc     mass matrix
170*59599516SKenneth E. Jansenc
171*59599516SKenneth E. Jansenc
172*59599516SKenneth E. Jansenc.... row sum technique
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansen        if ( idiff == 1 ) then
175*59599516SKenneth E. Jansen           do i=1,nshl
176*59599516SKenneth E. Jansen              rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ
177*59599516SKenneth E. Jansen           enddo
178*59599516SKenneth E. Jansen        endif
179*59599516SKenneth E. Jansenc
180*59599516SKenneth E. Jansenc.... "special lumping technique" (Hughes p. 445)
181*59599516SKenneth E. Jansenc
182*59599516SKenneth E. Jansen        if ( idiff == 3 ) then
183*59599516SKenneth E. Jansen           shpsum = zero
184*59599516SKenneth E. Jansen           do i=1,nshl
185*59599516SKenneth E. Jansen              shpsum = shpsum + shape(:,i)*shape(:,i)
186*59599516SKenneth E. Jansen              rmassl(:,i)=rmassl(:,i)+shape(:,i)*shape(:,i)*WdetJ
187*59599516SKenneth E. Jansen           enddo
188*59599516SKenneth E. Jansen           alph1 = alph1+WdetJ
189*59599516SKenneth E. Jansen           alph2 = alph2+shpsum*WdetJ
190*59599516SKenneth E. Jansen        endif
191*59599516SKenneth E. Jansen      endif  ! end of idiff=1 .or. 3
192*59599516SKenneth E. Jansenc
193*59599516SKenneth E. Jansen      if(isurf .eq. 1) then
194*59599516SKenneth E. Jansenc
195*59599516SKenneth E. Jansenc.... initialize
196*59599516SKenneth E. Jansenc
197*59599516SKenneth E. Jansen        g1yti   = zero
198*59599516SKenneth E. Jansen        g2yti   = zero
199*59599516SKenneth E. Jansen        g3yti   = zero
200*59599516SKenneth E. Jansenc
201*59599516SKenneth E. Jansenc.... calculate the integration variables necessary for the
202*59599516SKenneth E. Jansenc     formation of q
203*59599516SKenneth E. Jansenc
204*59599516SKenneth E. Jansenc.... compute the global gradient of Yt-variables, assuming 6th entry as
205*59599516SKenneth E. Jansenc.... the phase indicator function
206*59599516SKenneth E. Jansenc
207*59599516SKenneth E. Jansenc  Yt_{,x_i}=SUM_{a=1}^nshl (N_{a,x_i}(int) Yta)
208*59599516SKenneth E. Jansenc
209*59599516SKenneth E. Jansen        do n = 1, nshl
210*59599516SKenneth E. Jansen          g1yti(:)  = g1yti(:)  + shg(:,n,1) * ycl(:,n,6)
211*59599516SKenneth E. Jansen          g2yti(:)  = g2yti(:)  + shg(:,n,2) * ycl(:,n,6)
212*59599516SKenneth E. Jansen          g3yti(:)  = g3yti(:)  + shg(:,n,3) * ycl(:,n,6)
213*59599516SKenneth E. Jansen        enddo
214*59599516SKenneth E. Jansenc
215*59599516SKenneth E. Jansenc    computing N_{b}*N_{a,x_i)*yta*WdetJ
216*59599516SKenneth E. Jansenc
217*59599516SKenneth E. Jansen        do i=1,nshl
218*59599516SKenneth E. Jansen           ql(:,i,idflow+1)  = ql(:,i,idflow+1)
219*59599516SKenneth E. Jansen     &                       + shape(:,i)*WdetJ*g1yti
220*59599516SKenneth E. Jansen           ql(:,i,idflow+2)  = ql(:,i,idflow+2)
221*59599516SKenneth E. Jansen     &                       + shape(:,i)*WdetJ*g2yti
222*59599516SKenneth E. Jansen           ql(:,i,idflow+3)  = ql(:,i,idflow+3)
223*59599516SKenneth E. Jansen     &                       + shape(:,i)*WdetJ*g3yti
224*59599516SKenneth E. Jansen           rmassl(:,i) = rmassl(:,i) + shape(:,i)*WdetJ
225*59599516SKenneth E. Jansen        enddo
226*59599516SKenneth E. Jansen      endif  !end of the isurf
227*59599516SKenneth E. Jansenc
228*59599516SKenneth E. Jansenc.... end of the loop over integration points
229*59599516SKenneth E. Jansenc
230*59599516SKenneth E. Jansen      enddo
231*59599516SKenneth E. Jansenc
232*59599516SKenneth E. Jansenc.... normalize the mass matrix for idiff == 3
233*59599516SKenneth E. Jansenc
234*59599516SKenneth E. Jansen      if ( idiff == 3 ) then
235*59599516SKenneth E. Jansen         do i=1,nshl
236*59599516SKenneth E. Jansen            rmassl(:,i) = rmassl(:,i)*alph1/alph2
237*59599516SKenneth E. Jansen         enddo
238*59599516SKenneth E. Jansen      endif
239*59599516SKenneth E. Jansen
240*59599516SKenneth E. Jansen      ttim(33) = ttim(33) + secs(0.0)
241*59599516SKenneth E. Jansen
242*59599516SKenneth E. Jansenc
243*59599516SKenneth E. Jansenc.... return
244*59599516SKenneth E. Jansenc
245*59599516SKenneth E. Jansen       return
246*59599516SKenneth E. Jansen       end
247