xref: /phasta/phSolver/compressible/e3.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3 (yl,      ycl,     acl,     shp,
2*59599516SKenneth E. Jansen     &                 shgl,    xl,      rl,      rml,    xmudmi,
3*59599516SKenneth E. Jansen     &                 BDiagl,  ql,      sgn,     rlsl,   EGmass,
4*59599516SKenneth E. Jansen     &                 rerrl,   ytargetl)
5*59599516SKenneth E. Jansenc
6*59599516SKenneth E. Jansenc----------------------------------------------------------------------
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations.
9*59599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the
10*59599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block-
11*59599516SKenneth E. Jansenc diagonal preconditioner.
12*59599516SKenneth E. Jansenc
13*59599516SKenneth E. Jansenc input:
14*59599516SKenneth E. Jansenc  yl     (npro,nshl,nflow)     : Y variables  (DOES NOT CONTAIN SCALARS)
15*59599516SKenneth E. Jansenc  ycl    (npro,nshl,ndof)      : Y variables at current step
16*59599516SKenneth E. Jansenc  acl    (npro,nshl,ndof)      : Y acceleration (Y_{,t})
17*59599516SKenneth E. Jansenc  shp    (nshl,ngauss)       : element shape-functions  N_a
18*59599516SKenneth E. Jansenc  shgl   (nsd,nshl,ngauss)   : element local-shape-functions N_{a,xi}
19*59599516SKenneth E. Jansenc  xl     (npro,nenl,nsd)       : nodal coordinates at current step (x^e_a)
20*59599516SKenneth E. Jansenc  ql     (npro,nshl,(nflow-1)*nsd) : diffusive flux vector
21*59599516SKenneth E. Jansenc  rlsl   (npro,nshl,6)       : resolved Leonard stresses
22*59599516SKenneth E. Jansenc  sgn    (npro,nshl)         : shape function sign matrix
23*59599516SKenneth E. Jansenc
24*59599516SKenneth E. Jansenc output:
25*59599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)      : element RHS residual    (G^e_a)
26*59599516SKenneth E. Jansenc  rml    (npro,nshl,nflow)      : element modified residual  (G^e_a tilde)
27*59599516SKenneth E. Jansenc  EGmass (npro,nedof,nedof)    : element LHS tangent mass matrix (dG^e_a
28*59599516SKenneth E. Jansenc                                                                  dY_b  )
29*59599516SKenneth E. Jansenc  BDiagl (npro,nshl,nflow,nflow) : block-diagonal preconditioner
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the
33*59599516SKenneth E. Jansenc        Hulbert's generalized alpha method integrator
34*59599516SKenneth E. Jansenc
35*59599516SKenneth E. Jansenc Note: nedof = nflow*nshape is the total number of degrees of freedom
36*59599516SKenneth E. Jansenc       at each element node.
37*59599516SKenneth E. Jansenc
38*59599516SKenneth E. Jansenc Mathematics done by:  Michel Mallet, Farzin Shakib (version 1)
39*59599516SKenneth E. Jansenc                       Farzin Shakib                (version 2)
40*59599516SKenneth E. Jansenc
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.   (Modified from e2.f)
43*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.   (Fortran 90)
44*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables)
45*59599516SKenneth E. Jansenc Chris Whiting, Winter 1998.  (LHS matrix formation)
46*59599516SKenneth E. Jansenc----------------------------------------------------------------------
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansen        include "common.h"
49*59599516SKenneth E. Jansenc
50*59599516SKenneth E. Jansen        dimension yl(npro,nshl,nflow),     ycl(npro,nshl,ndof),
51*59599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),     rmu(npro),
52*59599516SKenneth E. Jansen     &            shp(nshl,ngauss),        rlm2mu(npro),
53*59599516SKenneth E. Jansen     &            shgl(nsd,nshl,ngauss),   con(npro),
54*59599516SKenneth E. Jansen     &            xl(npro,nenl,nsd),       rlm(npro),
55*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),     ql(npro,nshl,idflx),
56*59599516SKenneth E. Jansen     &            rml(npro,nshl,nflow),    xmudmi(npro,ngauss),
57*59599516SKenneth E. Jansen     &            BDiagl(npro,nshl,nflow,nflow),
58*59599516SKenneth E. Jansen     &            EGmass(npro,nedof,nedof),cv(npro),
59*59599516SKenneth E. Jansen     &            ytargetl(npro,nshl,nflow)
60*59599516SKenneth E. Jansenc
61*59599516SKenneth E. Jansen        dimension dui(npro,ndof),            aci(npro,ndof)
62*59599516SKenneth E. Jansenc
63*59599516SKenneth E. Jansen        dimension g1yi(npro,nflow),          g2yi(npro,nflow),
64*59599516SKenneth E. Jansen     &            g3yi(npro,nflow),          shg(npro,nshl,nsd),
65*59599516SKenneth E. Jansen     &            divqi(npro,nflow),       tau(npro,5)
66*59599516SKenneth E. Jansenc
67*59599516SKenneth E. Jansen        dimension dxidx(npro,nsd,nsd),       WdetJ(npro)
68*59599516SKenneth E. Jansenc
69*59599516SKenneth E. Jansen        dimension rho(npro),                 pres(npro),
70*59599516SKenneth E. Jansen     &            T(npro),                   ei(npro),
71*59599516SKenneth E. Jansen     &            h(npro),                   alfap(npro),
72*59599516SKenneth E. Jansen     &            betaT(npro),               DC(npro,ngauss),
73*59599516SKenneth E. Jansen     &            cp(npro),                  rk(npro),
74*59599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
75*59599516SKenneth E. Jansen     &            u3(npro),                  A0DC(npro,4),
76*59599516SKenneth E. Jansen     &            Sclr(npro),                dVdY(npro,15),
77*59599516SKenneth E. Jansen     &            giju(npro,6),              rTLS(npro),
78*59599516SKenneth E. Jansen     &            raLS(npro),                A0inv(npro,15)
79*59599516SKenneth E. Jansenc
80*59599516SKenneth E. Jansen        dimension A0(npro,nflow,nflow),      A1(npro,nflow,nflow),
81*59599516SKenneth E. Jansen     &            A2(npro,nflow,nflow),      A3(npro,nflow,nflow)
82*59599516SKenneth E. Jansenc
83*59599516SKenneth E. Jansen        dimension rLyi(npro,nflow),          sgn(npro,nshl)
84*59599516SKenneth E. Jansenc
85*59599516SKenneth E. Jansen        dimension ri(npro,nflow*(nsd+1)),    rmi(npro,nflow*(nsd+1)),
86*59599516SKenneth E. Jansen     &            shape(npro,nshl),          shdrv(npro,nsd,nshl),
87*59599516SKenneth E. Jansen     &            stiff(npro,nsd*nflow,nsd*nflow),
88*59599516SKenneth E. Jansen     &            PTau(npro,5,5),
89*59599516SKenneth E. Jansen     &            sforce(npro,3),      compK(npro,10)
90*59599516SKenneth E. Jansenc
91*59599516SKenneth E. Jansen        dimension x(npro,3),              bcool(npro)
92*59599516SKenneth E. Jansen
93*59599516SKenneth E. Jansen        dimension rlsl(npro,nshl,6),      rlsli(npro,6)
94*59599516SKenneth E. Jansen
95*59599516SKenneth E. Jansen        real*8    rerrl(npro,nshl,6)
96*59599516SKenneth E. Jansen        ttim(6) = ttim(6) - secs(0.0)
97*59599516SKenneth E. Jansenc
98*59599516SKenneth E. Jansenc.... local reconstruction of diffusive flux vector
99*59599516SKenneth E. Jansenc (note: not currently included in mfg)
100*59599516SKenneth E. Jansen        if (idiff==2 .and. (ires==3 .or. ires==1)) then
101*59599516SKenneth E. Jansen           call e3ql (ycl, shp, shgl, xl, ql, xmudmi, sgn)
102*59599516SKenneth E. Jansen        endif
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc.... loop through the integration points
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen        do intp = 1, ngauss
107*59599516SKenneth E. Jansenc
108*59599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansen        if (Qwt(lcsyst,intp) .eq. zero) cycle          ! precaution
111*59599516SKenneth E. Jansenc
112*59599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each
113*59599516SKenneth E. Jansenc     element at this quadrature point. These arrays will contain
114*59599516SKenneth E. Jansenc     the correct signs for the hierarchic basis
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansen        call getshp(shp,          shgl,      sgn,
117*59599516SKenneth E. Jansen     &              shape,        shdrv)
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansenc.... initialize
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansen        ri  = zero
122*59599516SKenneth E. Jansen        rmi = zero
123*59599516SKenneth E. Jansen        if (lhs .eq. 1) stiff = zero
124*59599516SKenneth E. Jansenc
125*59599516SKenneth E. Jansenc
126*59599516SKenneth E. Jansenc.... calculate the integration variables
127*59599516SKenneth E. Jansenc
128*59599516SKenneth E. Jansen        ttim(8) = ttim(8) - secs(0.0)
129*59599516SKenneth E. Jansen        call e3ivar (yl,              ycl,             acl,
130*59599516SKenneth E. Jansen     &               Sclr,            shape,           shdrv,
131*59599516SKenneth E. Jansen     &               xl,              dui,             aci,
132*59599516SKenneth E. Jansen     &               g1yi,            g2yi,            g3yi,
133*59599516SKenneth E. Jansen     &               shg,             dxidx,           WdetJ,
134*59599516SKenneth E. Jansen     &               rho,             pres,            T,
135*59599516SKenneth E. Jansen     &               ei,              h,               alfap,
136*59599516SKenneth E. Jansen     &               betaT,           cp,              rk,
137*59599516SKenneth E. Jansen     &               u1,              u2,              u3,
138*59599516SKenneth E. Jansen     &               ql,              divqi,           sgn,
139*59599516SKenneth E. Jansen     &               rLyi,  !passed as a work array
140*59599516SKenneth E. Jansen     &               rmu,             rlm,             rlm2mu,
141*59599516SKenneth E. Jansen     &               con,             rlsl,            rlsli,
142*59599516SKenneth E. Jansen     &               xmudmi,          sforce,          cv)
143*59599516SKenneth E. Jansen        ttim(8) = ttim(8) + secs(0.0)
144*59599516SKenneth E. Jansen
145*59599516SKenneth E. Jansenc
146*59599516SKenneth E. Jansenc.... calculate the relevant matrices
147*59599516SKenneth E. Jansenc
148*59599516SKenneth E. Jansen        ttim(9) = ttim(9) - secs(0.0)
149*59599516SKenneth E. Jansen        call e3mtrx (rho,             pres,           T,
150*59599516SKenneth E. Jansen     &               ei,              h,              alfap,
151*59599516SKenneth E. Jansen     &               betaT,           cp,             rk,
152*59599516SKenneth E. Jansen     &               u1,              u2,             u3,
153*59599516SKenneth E. Jansen     &               A0,              A1,
154*59599516SKenneth E. Jansen     &               A2,              A3,
155*59599516SKenneth E. Jansen     &               rLyi(:,1),       rLyi(:,2),      rLyi(:,3),  ! work arrays
156*59599516SKenneth E. Jansen     &               rLyi(:,4),       rLyi(:,5),      A0DC,
157*59599516SKenneth E. Jansen     &               A0inv,           dVdY)
158*59599516SKenneth E. Jansen        ttim(9) = ttim(9) + tmr()
159*59599516SKenneth E. Jansenc
160*59599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin)
161*59599516SKenneth E. Jansenc
162*59599516SKenneth E. Jansen        ttim(14) = ttim(14) - secs(0.0)
163*59599516SKenneth E. Jansen        call e3conv (g1yi,            g2yi,            g3yi,
164*59599516SKenneth E. Jansen     &               A1,              A2,              A3,
165*59599516SKenneth E. Jansen     &               rho,             pres,            T,
166*59599516SKenneth E. Jansen     &               ei,              rk,              u1,
167*59599516SKenneth E. Jansen     &               u2,              u3,              rLyi,
168*59599516SKenneth E. Jansen     &               ri,              rmi,             EGmass,
169*59599516SKenneth E. Jansen     &               shg,             shape,           WdetJ)
170*59599516SKenneth E. Jansen        ttim(14) = ttim(14) + secs(0.0)
171*59599516SKenneth E. Jansenc
172*59599516SKenneth E. Jansenc.... calculate the diffusion contribution
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansen        ttim(15) = ttim(15) - secs(0.0)
175*59599516SKenneth E. Jansen        compK = zero
176*59599516SKenneth E. Jansen        if (Navier .eq. 1) then
177*59599516SKenneth E. Jansen        call e3visc (g1yi,            g2yi,            g3yi,
178*59599516SKenneth E. Jansen     &               dxidx,
179*59599516SKenneth E. Jansen     &               rmu,             rlm,             rlm2mu,
180*59599516SKenneth E. Jansen     &               u1,              u2,              u3,
181*59599516SKenneth E. Jansen     &               ri,              rmi,             stiff,
182*59599516SKenneth E. Jansen     &               con, rlsli,     compK, T)
183*59599516SKenneth E. Jansen        endif
184*59599516SKenneth E. Jansen        ttim(15) = ttim(15) + secs(0.0)
185*59599516SKenneth E. Jansenc
186*59599516SKenneth E. Jansenc.... calculate the body force contribution
187*59599516SKenneth E. Jansenc
188*59599516SKenneth E. Jansen        if(isurf .ne. 1 .and. matflg(5,1).gt.0) then
189*59599516SKenneth E. Jansen        call e3source (ri,            rmi,           rlyi,
190*59599516SKenneth E. Jansen     &                 rho,           u1,            u2,
191*59599516SKenneth E. Jansen     &                 u3,            pres,          sforce,
192*59599516SKenneth E. Jansen     &                 dui,           dxidx,         ytargetl,
193*59599516SKenneth E. Jansen     &                 xl,            shape,         bcool)
194*59599516SKenneth E. Jansen        else
195*59599516SKenneth E. Jansen           bcool=zero
196*59599516SKenneth E. Jansen        endif
197*59599516SKenneth E. Jansenc
198*59599516SKenneth E. Jansenc.... calculate the least-squares contribution
199*59599516SKenneth E. Jansenc
200*59599516SKenneth E. Jansen        ttim(16) = ttim(16) - secs(0.0)
201*59599516SKenneth E. Jansen        call e3LS   (A1,              A2,            A3,
202*59599516SKenneth E. Jansen     &               rho,             rmu,           cp,
203*59599516SKenneth E. Jansen     &               cv,              con,           T,
204*59599516SKenneth E. Jansen     &               u1,              u2,            u3,
205*59599516SKenneth E. Jansen     &               rLyi,            dxidx,         tau,
206*59599516SKenneth E. Jansen     &               ri,              rmi,           rk,
207*59599516SKenneth E. Jansen     &               dui,             aci,           A0,
208*59599516SKenneth E. Jansen     &               divqi,           shape,         shg,
209*59599516SKenneth E. Jansen     &               EGmass,          stiff,         WdetJ,
210*59599516SKenneth E. Jansen     &               giju,            rTLS,          raLS,
211*59599516SKenneth E. Jansen     &               A0inv,           dVdY,          rerrl,
212*59599516SKenneth E. Jansen     &               compK,           pres,          PTau)
213*59599516SKenneth E. Jansen        ttim(16) = ttim(16) + secs(0.0)
214*59599516SKenneth E. Jansenc
215*59599516SKenneth E. Jansenc....  Discontinuity capturing
216*59599516SKenneth E. Jansenc
217*59599516SKenneth E. Jansen        if(iDC.ne.0) then
218*59599516SKenneth E. Jansen          call e3dc  (g1yi,          g2yi,          g3yi,
219*59599516SKenneth E. Jansen     &                A0,            raLS,          rTLS,
220*59599516SKenneth E. Jansen     &                giju,          DC,
221*59599516SKenneth E. Jansen     &                ri,            rmi,           stiff, A0DC)
222*59599516SKenneth E. Jansen        endif
223*59599516SKenneth E. Jansenc
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen        if (ngauss .eq. 1 .and. nshl .eq. 4) then    ! trilinear tets
228*59599516SKenneth E. Jansen           ttim(17) = ttim(17) - secs(0.0)
229*59599516SKenneth E. Jansen           call e3juel (yl, acl, Sclr, A0, WdetJ, rl, rml)
230*59599516SKenneth E. Jansen           ttim(17) = ttim(17) + secs(0.0)
231*59599516SKenneth E. Jansen        else
232*59599516SKenneth E. Jansen           call e3massr (aci, dui, ri,  rmi, A0)
233*59599516SKenneth E. Jansen        endif
234*59599516SKenneth E. Jansen
235*59599516SKenneth E. Jansenc
236*59599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS
237*59599516SKenneth E. Jansenc
238*59599516SKenneth E. Jansen        if (lhs .eq. 1) then
239*59599516SKenneth E. Jansen           call e3massl (bcool,shape,  WdetJ,   A0,  EGmass)
240*59599516SKenneth E. Jansen        endif
241*59599516SKenneth E. Jansenc
242*59599516SKenneth E. Jansenc....  calculate the preconditioner all at once now instead of in separate
243*59599516SKenneth E. Jansenc      routines
244*59599516SKenneth E. Jansenc
245*59599516SKenneth E. Jansen       if(iprec.eq.1 .and. lhs.ne.1)then
246*59599516SKenneth E. Jansen          ttim(18) = ttim(18) - secs(0.0)
247*59599516SKenneth E. Jansen
248*59599516SKenneth E. Jansen          if (itau.lt.10) then
249*59599516SKenneth E. Jansen
250*59599516SKenneth E. Jansen             call e3bdg(shape,       shg,             WdetJ,
251*59599516SKenneth E. Jansen     &		  A1,	       A2,	        A3,
252*59599516SKenneth E. Jansen     &		  A0,          bcool,           tau,
253*59599516SKenneth E. Jansen     &            u1,          u2,              u3,
254*59599516SKenneth E. Jansen     &            BDiagl,
255*59599516SKenneth E. Jansen     &            rmu,         rlm2mu,          con)
256*59599516SKenneth E. Jansen
257*59599516SKenneth E. Jansen          else
258*59599516SKenneth E. Jansen
259*59599516SKenneth E. Jansen             call e3bdg_nd(shape,       shg,             WdetJ,
260*59599516SKenneth E. Jansen     &		  A1,	       A2,	        A3,
261*59599516SKenneth E. Jansen     &		  A0,          bcool,           PTau,
262*59599516SKenneth E. Jansen     &            u1,          u2,              u3,
263*59599516SKenneth E. Jansen     &            BDiagl,
264*59599516SKenneth E. Jansen     &            rmu,         rlm2mu,          con)
265*59599516SKenneth E. Jansen
266*59599516SKenneth E. Jansen          endif
267*59599516SKenneth E. Jansen
268*59599516SKenneth E. Jansen       ttim(18) = ttim(18) + secs(0.0)
269*59599516SKenneth E. Jansen       endif
270*59599516SKenneth E. Jansenc
271*59599516SKenneth E. Jansenc
272*59599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and
273*59599516SKenneth E. Jansenc     by both the weight space and solution space for the LHS stiffness term)
274*59599516SKenneth E. Jansenc
275*59599516SKenneth E. Jansen       ttim(19) = ttim(19) - secs(0.0)
276*59599516SKenneth E. Jansen       call e3wmlt (shape,         shg,       WdetJ,
277*59599516SKenneth E. Jansen     &              ri,            rmi,       rl,
278*59599516SKenneth E. Jansen     &              rml,           stiff,     EGmass)
279*59599516SKenneth E. Jansen       ttim(19) = ttim(19) + secs(0.0)
280*59599516SKenneth E. Jansenc
281*59599516SKenneth E. Jansenc.... end of integration loop
282*59599516SKenneth E. Jansenc
283*59599516SKenneth E. Jansen      enddo
284*59599516SKenneth E. Jansen
285*59599516SKenneth E. Jansen      ttim(6) = ttim(6) + secs(0.0)
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansenc.... return
288*59599516SKenneth E. Jansenc
289*59599516SKenneth E. Jansen      return
290*59599516SKenneth E. Jansen      end
291*59599516SKenneth E. Jansenc
292*59599516SKenneth E. Jansenc
293*59599516SKenneth E. Jansenc
294*59599516SKenneth E. Jansenc
295*59599516SKenneth E. Jansen       subroutine e3Sclr (ycl,          acl,
296*59599516SKenneth E. Jansen     &                    dwl,         elDwl,
297*59599516SKenneth E. Jansen     &                    shp,         sgn,
298*59599516SKenneth E. Jansen     &                    shgl,        xl,
299*59599516SKenneth E. Jansen     &                    rtl,         rmtl,
300*59599516SKenneth E. Jansen     &                    qtl,         EGmasst)
301*59599516SKenneth E. Jansenc
302*59599516SKenneth E. Jansenc----------------------------------------------------------------------
303*59599516SKenneth E. Jansenc
304*59599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations.
305*59599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the
306*59599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block-
307*59599516SKenneth E. Jansenc diagonal preconditioner.
308*59599516SKenneth E. Jansenc
309*59599516SKenneth E. Jansenc input:    e    a   1..5   when we think of U^e_a  and U is 5 variables
310*59599516SKenneth E. Jansenc  ycl      (npro,nshl,ndof)     : Y variables
311*59599516SKenneth E. Jansenc  actl    (npro,nshl)          : scalar variable time derivative
312*59599516SKenneth E. Jansenc  dwl     (npro,nenl)          : distances to wall
313*59599516SKenneth E. Jansenc  shp     (nen,ngauss)          : element shape-functions  N_a
314*59599516SKenneth E. Jansenc  shgl    (nsd,nen,ngauss)      : element local-shape-functions N_{a,xi}
315*59599516SKenneth E. Jansenc  xl      (npro,nenl,nsd)      : nodal coordinates at current step (x^e_a)
316*59599516SKenneth E. Jansenc  qtl     (npro,nshl)          : diffusive flux vector (don't worry)
317*59599516SKenneth E. Jansenc
318*59599516SKenneth E. Jansenc output:
319*59599516SKenneth E. Jansenc  rtl     (npro,nshl)          : element RHS residual    (G^e_a)
320*59599516SKenneth E. Jansenc  rmtl    (npro,nshl)          : element modified residual  (G^e_a tilde)
321*59599516SKenneth E. Jansenc  EGmasst (npro,nshape,nshape) : element LHS tangent mass matrix (dG^e_a
322*59599516SKenneth E. Jansenc                                                                  dY_b  )
323*59599516SKenneth E. Jansenc
324*59599516SKenneth E. Jansenc
325*59599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the
326*59599516SKenneth E. Jansenc        Hulbert's generalized alpha method integrator
327*59599516SKenneth E. Jansenc
328*59599516SKenneth E. Jansenc Note: nedof = nflow*nshl is the total number of degrees of freedom
329*59599516SKenneth E. Jansenc       at each element node.
330*59599516SKenneth E. Jansenc
331*59599516SKenneth E. Jansenc Mathematics done by:  Michel Mallet, Farzin Shakib (version 1)
332*59599516SKenneth E. Jansenc                       Farzin Shakib                (version 2)
333*59599516SKenneth E. Jansenc
334*59599516SKenneth E. Jansenc
335*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.   (Modified from e2.f)
336*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.   (Fortran 90)
337*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables)
338*59599516SKenneth E. Jansenc Chris Whiting, Winter 1998.  (LHS matrix formation)
339*59599516SKenneth E. Jansenc----------------------------------------------------------------------
340*59599516SKenneth E. Jansenc
341*59599516SKenneth E. Jansen        include "common.h"
342*59599516SKenneth E. Jansenc
343*59599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndof),
344*59599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),
345*59599516SKenneth E. Jansen     &            dwl(npro,nenl),
346*59599516SKenneth E. Jansen     &            shp(nshl,ngauss),         shgl(nsd,nshl,ngauss),
347*59599516SKenneth E. Jansen     &            xl(npro,nenl,nsd),
348*59599516SKenneth E. Jansen     &            rtl(npro,nshl),           qtl(npro,nshl),
349*59599516SKenneth E. Jansen     &            rmtl(npro,nshl),          Diagl(npro,nshl),
350*59599516SKenneth E. Jansen     &            EGmasst(npro,nshape,nshape),
351*59599516SKenneth E. Jansen     &            dist2w(npro),             sgn(npro,nshl),
352*59599516SKenneth E. Jansen     &            vort(npro),
353*59599516SKenneth E. Jansen     &            rmu(npro),                con(npro),
354*59599516SKenneth E. Jansen     &            T(npro),                  cp(npro),
355*59599516SKenneth E. Jansen     &            g1yti(npro),              acti(npro),
356*59599516SKenneth E. Jansen     &            g2yti(npro),              g3yti(npro),
357*59599516SKenneth E. Jansen     &            Sclr(npro),               srcp (npro)
358*59599516SKenneth E. Jansen
359*59599516SKenneth E. Jansenc
360*59599516SKenneth E. Jansen        dimension shg(npro,nshl,nsd)
361*59599516SKenneth E. Jansenc
362*59599516SKenneth E. Jansen        dimension dxidx(npro,nsd,nsd),     WdetJ(npro)
363*59599516SKenneth E. Jansenc
364*59599516SKenneth E. Jansen        dimension rho(npro),               rk(npro),
365*59599516SKenneth E. Jansen     &            u1(npro),                u2(npro),
366*59599516SKenneth E. Jansen     &            u3(npro)
367*59599516SKenneth E. Jansenc
368*59599516SKenneth E. Jansen        dimension A0t(npro),               A1t(npro),
369*59599516SKenneth E. Jansen     &            A2t(npro),               A3t(npro)
370*59599516SKenneth E. Jansenc
371*59599516SKenneth E. Jansen        dimension rLyti(npro),             raLSt(npro),
372*59599516SKenneth E. Jansen     &            rTLSt(npro),             giju(npro,6),
373*59599516SKenneth E. Jansen     &            DCt(npro, ngauss)
374*59599516SKenneth E. Jansenc
375*59599516SKenneth E. Jansen        dimension rti(npro,nsd+1),         rmti(npro,nsd+1),
376*59599516SKenneth E. Jansen     &            stifft(npro,nsd,nsd),
377*59599516SKenneth E. Jansen     &            shape(npro,nshl),        shdrv(npro,nsd,nshl)
378*59599516SKenneth E. Jansen        real*8    elDwl(npro)
379*59599516SKenneth E. Jansenc
380*59599516SKenneth E. Jansen        ttim(6) = ttim(6) - tmr()
381*59599516SKenneth E. Jansenc
382*59599516SKenneth E. Jansenc.... loop through the integration points
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansen        elDwl(:)=zero
385*59599516SKenneth E. Jansen        do intp = 1, ngauss
386*59599516SKenneth E. Jansenc
387*59599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point
388*59599516SKenneth E. Jansenc
389*59599516SKenneth E. Jansen        if (Qwt(lcsyst,intp) .eq. zero) cycle          ! precaution
390*59599516SKenneth E. Jansenc
391*59599516SKenneth E. Jansenc
392*59599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each
393*59599516SKenneth E. Jansenc     element at this quadrature point. These arrays will contain
394*59599516SKenneth E. Jansenc     the correct signs for the hierarchic basis
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansen        call getshp(shp,          shgl,      sgn,
397*59599516SKenneth E. Jansen     &              shape,        shdrv)
398*59599516SKenneth E. Jansenc
399*59599516SKenneth E. Jansenc.... initialize
400*59599516SKenneth E. Jansenc
401*59599516SKenneth E. Jansen        rlyti = zero
402*59599516SKenneth E. Jansen        rti   = zero
403*59599516SKenneth E. Jansen        rmti  = zero
404*59599516SKenneth E. Jansen        srcp  = zero
405*59599516SKenneth E. Jansen        stifft = zero
406*59599516SKenneth E. Jansenc        if (lhs .eq. 1) stifft = zero
407*59599516SKenneth E. Jansenc
408*59599516SKenneth E. Jansenc
409*59599516SKenneth E. Jansenc.... calculate the integration variables
410*59599516SKenneth E. Jansenc
411*59599516SKenneth E. Jansen        ttim(8) = ttim(8) - tmr()
412*59599516SKenneth E. Jansenc
413*59599516SKenneth E. Jansen        call e3ivarSclr(ycl,              acl,        acti,
414*59599516SKenneth E. Jansen     &                  shape,           shdrv,      xl,
415*59599516SKenneth E. Jansen     &                  T,               cp,
416*59599516SKenneth E. Jansen     &                  dxidx,           Sclr,
417*59599516SKenneth E. Jansen     &                  Wdetj,           vort,
418*59599516SKenneth E. Jansen     &                  g1yti,           g2yti,      g3yti,
419*59599516SKenneth E. Jansen     &                  rho,             rmu,        con,
420*59599516SKenneth E. Jansen     &                  rk,              u1,         u2,
421*59599516SKenneth E. Jansen     &                  u3,              shg,        dwl,
422*59599516SKenneth E. Jansen     &                  dist2w)
423*59599516SKenneth E. Jansen        ttim(8) = ttim(8) + tmr()
424*59599516SKenneth E. Jansen
425*59599516SKenneth E. Jansenc
426*59599516SKenneth E. Jansenc.... calculate the source term contribution
427*59599516SKenneth E. Jansenc
428*59599516SKenneth E. Jansen        if(nosource.ne.1)
429*59599516SKenneth E. Jansen     &  call e3sourceSclr (Sclr,    rho,    rmu,
430*59599516SKenneth E. Jansen     &                     dist2w,  vort,   con,
431*59599516SKenneth E. Jansen     &                     g1yti,  g2yti,   g3yti,
432*59599516SKenneth E. Jansen     &                     rti,    rLyti,   srcp,
433*59599516SKenneth E. Jansen     &                     ycl,     shape,   u1,
434*59599516SKenneth E. Jansen     &                     u2,     u3,	     xl,
435*59599516SKenneth E. Jansen     &                     elDwl)
436*59599516SKenneth E. Jansenc
437*59599516SKenneth E. Jansen         if (ilset.eq.2 .and. isclr.eq.2) then
438*59599516SKenneth E. Jansen          rk = pt5 * ( u1**2 + u2**2 + u3**2 )
439*59599516SKenneth E. Jansen         endif
440*59599516SKenneth E. Jansenc.... calculate the relevant matrices
441*59599516SKenneth E. Jansenc
442*59599516SKenneth E. Jansen        ttim(9) = ttim(9) - tmr()
443*59599516SKenneth E. Jansen        call e3mtrxSclr (rho,
444*59599516SKenneth E. Jansen     &                   u1,            u2,         u3,
445*59599516SKenneth E. Jansen     &                   A0t,           A1t,
446*59599516SKenneth E. Jansen     &                   A2t,           A3t)
447*59599516SKenneth E. Jansen        ttim(9) = ttim(9) + tmr()
448*59599516SKenneth E. Jansenc
449*59599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin)
450*59599516SKenneth E. Jansenc
451*59599516SKenneth E. Jansen        ttim(14) = ttim(14) - tmr()
452*59599516SKenneth E. Jansen        call e3convSclr (g1yti,        g2yti,       g3yti,
453*59599516SKenneth E. Jansen     &                   A1t,          A2t,         A3t,
454*59599516SKenneth E. Jansen     &                   rho,          u1,          Sclr,
455*59599516SKenneth E. Jansen     &                   u2,           u3,          rLyti,
456*59599516SKenneth E. Jansen     &                   rti,          rmti,        EGmasst,
457*59599516SKenneth E. Jansen     &                   shg,          shape,       WdetJ)
458*59599516SKenneth E. Jansen        ttim(14) = ttim(14) + tmr()
459*59599516SKenneth E. Jansenc
460*59599516SKenneth E. Jansenc.... calculate the diffusion contribution
461*59599516SKenneth E. Jansenc
462*59599516SKenneth E. Jansen        ttim(15) = ttim(15) - tmr()
463*59599516SKenneth E. Jansen        if (Navier .eq. 1) then
464*59599516SKenneth E. Jansen        call e3viscSclr (g1yti,        g2yti,         g3yti,
465*59599516SKenneth E. Jansen     &                   rmu,          Sclr,          rho,
466*59599516SKenneth E. Jansen     &                   rti,          rmti,          stifft )
467*59599516SKenneth E. Jansen        endif
468*59599516SKenneth E. Jansen         ttim(15) = ttim(15) + tmr()
469*59599516SKenneth E. Jansenc
470*59599516SKenneth E. Jansen         if (ilset.eq.2)  srcp = zero
471*59599516SKenneth E. Jansen
472*59599516SKenneth E. Jansenc
473*59599516SKenneth E. Jansenc.... calculate the least-squares contribution
474*59599516SKenneth E. Jansenc
475*59599516SKenneth E. Jansen        ttim(16) = ttim(16) - tmr()
476*59599516SKenneth E. Jansen        call e3LSSclr(A1t,             A2t,             A3t,
477*59599516SKenneth E. Jansen     &                rho,             rmu,             rtLSt,
478*59599516SKenneth E. Jansen     &                u1,              u2,              u3,
479*59599516SKenneth E. Jansen     &                rLyti,           dxidx,           raLSt,
480*59599516SKenneth E. Jansen     &                rti,             rk,              giju,
481*59599516SKenneth E. Jansen     &                acti,            A0t,
482*59599516SKenneth E. Jansen     &                shape,           shg,
483*59599516SKenneth E. Jansen     &                EGmasst,         stifft,          WdetJ,
484*59599516SKenneth E. Jansen     &                srcp)
485*59599516SKenneth E. Jansen        ttim(16) = ttim(16) + tmr()
486*59599516SKenneth E. Jansenc
487*59599516SKenneth E. Jansenc******************************DC TERMS*****************************
488*59599516SKenneth E. Jansen        if (idcsclr(1) .ne. 0) then
489*59599516SKenneth E. Jansen           if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or.
490*59599516SKenneth E. Jansen     &         (idcsclr(2).eq.2 .and. isclr.eq.2)) then   ! scalar with dc
491*59599516SKenneth E. Jansen              call e3dcSclr(g1yti, g2yti,          g3yti,
492*59599516SKenneth E. Jansen     &             A0t,            raLSt,          rTLSt,
493*59599516SKenneth E. Jansen     &             DCt,            giju,
494*59599516SKenneth E. Jansen     &             rti,            rmti,           stifft)
495*59599516SKenneth E. Jansen           endif
496*59599516SKenneth E. Jansen        endif
497*59599516SKenneth E. Jansenc
498*59599516SKenneth E. Jansenc******************************************************************
499*59599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS
500*59599516SKenneth E. Jansenc
501*59599516SKenneth E. Jansen
502*59599516SKenneth E. Jansen           call e3massrSclr (acti, rti, A0t)
503*59599516SKenneth E. Jansenc
504*59599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS
505*59599516SKenneth E. Jansenc
506*59599516SKenneth E. Jansen         if (lhs .eq. 1) then
507*59599516SKenneth E. Jansen            call e3masslSclr (shape,  WdetJ,   A0t,  EGmasst,srcp)
508*59599516SKenneth E. Jansen         endif
509*59599516SKenneth E. Jansenc
510*59599516SKenneth E. Jansen
511*59599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and
512*59599516SKenneth E. Jansenc     by both the weight space and solution space for the LHS stiffness term)
513*59599516SKenneth E. Jansenc
514*59599516SKenneth E. Jansen       ttim(19) = ttim(19) - tmr()
515*59599516SKenneth E. Jansen       call e3wmltSclr (shape,           shg,             WdetJ,
516*59599516SKenneth E. Jansen     &                  rti,
517*59599516SKenneth E. Jansen     &                  rtl,             stifft,          EGmasst)
518*59599516SKenneth E. Jansen       ttim(19) = ttim(19) + tmr()
519*59599516SKenneth E. Jansenc
520*59599516SKenneth E. Jansenc.... end of the loop
521*59599516SKenneth E. Jansenc
522*59599516SKenneth E. Jansen      enddo
523*59599516SKenneth E. Jansen	qptinv=one/ngauss
524*59599516SKenneth E. Jansen	elDwl(:)=elDwl(:)*qptinv
525*59599516SKenneth E. Jansen
526*59599516SKenneth E. Jansen
527*59599516SKenneth E. Jansen      ttim(6) = ttim(6) + tmr()
528*59599516SKenneth E. Jansenc
529*59599516SKenneth E. Jansenc.... return
530*59599516SKenneth E. Jansenc
531*59599516SKenneth E. Jansen      return
532*59599516SKenneth E. Jansen      end
533*59599516SKenneth E. Jansen
534