xref: /phasta/phSolver/compressible/e3.f (revision 513954ef803c300cddba2bb96b4a5dac0b93489a)
159599516SKenneth E. Jansen        subroutine e3 (yl,      ycl,     acl,     shp,
259599516SKenneth E. Jansen     &                 shgl,    xl,      rl,      rml,    xmudmi,
359599516SKenneth E. Jansen     &                 BDiagl,  ql,      sgn,     rlsl,   EGmass,
459599516SKenneth E. Jansen     &                 rerrl,   ytargetl)
559599516SKenneth E. Jansenc
659599516SKenneth E. Jansenc----------------------------------------------------------------------
759599516SKenneth E. Jansenc
859599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations.
959599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the
1059599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block-
1159599516SKenneth E. Jansenc diagonal preconditioner.
1259599516SKenneth E. Jansenc
1359599516SKenneth E. Jansenc input:
1459599516SKenneth E. Jansenc  yl     (npro,nshl,nflow)     : Y variables  (DOES NOT CONTAIN SCALARS)
1559599516SKenneth E. Jansenc  ycl    (npro,nshl,ndof)      : Y variables at current step
1659599516SKenneth E. Jansenc  acl    (npro,nshl,ndof)      : Y acceleration (Y_{,t})
1759599516SKenneth E. Jansenc  shp    (nshl,ngauss)       : element shape-functions  N_a
1859599516SKenneth E. Jansenc  shgl   (nsd,nshl,ngauss)   : element local-shape-functions N_{a,xi}
1959599516SKenneth E. Jansenc  xl     (npro,nenl,nsd)       : nodal coordinates at current step (x^e_a)
2059599516SKenneth E. Jansenc  ql     (npro,nshl,(nflow-1)*nsd) : diffusive flux vector
2159599516SKenneth E. Jansenc  rlsl   (npro,nshl,6)       : resolved Leonard stresses
2259599516SKenneth E. Jansenc  sgn    (npro,nshl)         : shape function sign matrix
2359599516SKenneth E. Jansenc
2459599516SKenneth E. Jansenc output:
2559599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)      : element RHS residual    (G^e_a)
2659599516SKenneth E. Jansenc  rml    (npro,nshl,nflow)      : element modified residual  (G^e_a tilde)
2759599516SKenneth E. Jansenc  EGmass (npro,nedof,nedof)    : element LHS tangent mass matrix (dG^e_a
2859599516SKenneth E. Jansenc                                                                  dY_b  )
2959599516SKenneth E. Jansenc  BDiagl (npro,nshl,nflow,nflow) : block-diagonal preconditioner
3059599516SKenneth E. Jansenc
3159599516SKenneth E. Jansenc
3259599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the
3359599516SKenneth E. Jansenc        Hulbert's generalized alpha method integrator
3459599516SKenneth E. Jansenc
3559599516SKenneth E. Jansenc Note: nedof = nflow*nshape is the total number of degrees of freedom
3659599516SKenneth E. Jansenc       at each element node.
3759599516SKenneth E. Jansenc
3859599516SKenneth E. Jansenc Mathematics done by:  Michel Mallet, Farzin Shakib (version 1)
3959599516SKenneth E. Jansenc                       Farzin Shakib                (version 2)
4059599516SKenneth E. Jansenc
4159599516SKenneth E. Jansenc
4259599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.   (Modified from e2.f)
4359599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.   (Fortran 90)
4459599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables)
4559599516SKenneth E. Jansenc Chris Whiting, Winter 1998.  (LHS matrix formation)
4659599516SKenneth E. Jansenc----------------------------------------------------------------------
4759599516SKenneth E. Jansenc
4859599516SKenneth E. Jansen        include "common.h"
4959599516SKenneth E. Jansenc
5059599516SKenneth E. Jansen        dimension yl(npro,nshl,nflow),     ycl(npro,nshl,ndof),
5159599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),     rmu(npro),
5259599516SKenneth E. Jansen     &            shp(nshl,ngauss),        rlm2mu(npro),
5359599516SKenneth E. Jansen     &            shgl(nsd,nshl,ngauss),   con(npro),
5459599516SKenneth E. Jansen     &            xl(npro,nenl,nsd),       rlm(npro),
5559599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),     ql(npro,nshl,idflx),
5659599516SKenneth E. Jansen     &            rml(npro,nshl,nflow),    xmudmi(npro,ngauss),
5759599516SKenneth E. Jansen     &            BDiagl(npro,nshl,nflow,nflow),
5859599516SKenneth E. Jansen     &            EGmass(npro,nedof,nedof),cv(npro),
5959599516SKenneth E. Jansen     &            ytargetl(npro,nshl,nflow)
6059599516SKenneth E. Jansenc
6159599516SKenneth E. Jansen        dimension dui(npro,ndof),            aci(npro,ndof)
6259599516SKenneth E. Jansenc
6359599516SKenneth E. Jansen        dimension g1yi(npro,nflow),          g2yi(npro,nflow),
6459599516SKenneth E. Jansen     &            g3yi(npro,nflow),          shg(npro,nshl,nsd),
6559599516SKenneth E. Jansen     &            divqi(npro,nflow),       tau(npro,5)
6659599516SKenneth E. Jansenc
6759599516SKenneth E. Jansen        dimension dxidx(npro,nsd,nsd),       WdetJ(npro)
6859599516SKenneth E. Jansenc
6959599516SKenneth E. Jansen        dimension rho(npro),                 pres(npro),
7059599516SKenneth E. Jansen     &            T(npro),                   ei(npro),
7159599516SKenneth E. Jansen     &            h(npro),                   alfap(npro),
7259599516SKenneth E. Jansen     &            betaT(npro),               DC(npro,ngauss),
7359599516SKenneth E. Jansen     &            cp(npro),                  rk(npro),
7459599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
7559599516SKenneth E. Jansen     &            u3(npro),                  A0DC(npro,4),
7659599516SKenneth E. Jansen     &            Sclr(npro),                dVdY(npro,15),
7759599516SKenneth E. Jansen     &            giju(npro,6),              rTLS(npro),
7859599516SKenneth E. Jansen     &            raLS(npro),                A0inv(npro,15)
7959599516SKenneth E. Jansenc
8059599516SKenneth E. Jansen        dimension A0(npro,nflow,nflow),      A1(npro,nflow,nflow),
8159599516SKenneth E. Jansen     &            A2(npro,nflow,nflow),      A3(npro,nflow,nflow)
8259599516SKenneth E. Jansenc
8359599516SKenneth E. Jansen        dimension rLyi(npro,nflow),          sgn(npro,nshl)
8459599516SKenneth E. Jansenc
8559599516SKenneth E. Jansen        dimension ri(npro,nflow*(nsd+1)),    rmi(npro,nflow*(nsd+1)),
8659599516SKenneth E. Jansen     &            shape(npro,nshl),          shdrv(npro,nsd,nshl),
8759599516SKenneth E. Jansen     &            stiff(npro,nsd*nflow,nsd*nflow),
8859599516SKenneth E. Jansen     &            PTau(npro,5,5),
8959599516SKenneth E. Jansen     &            sforce(npro,3),      compK(npro,10)
9059599516SKenneth E. Jansenc
9159599516SKenneth E. Jansen        dimension x(npro,3),              bcool(npro)
9259599516SKenneth E. Jansen
9359599516SKenneth E. Jansen        dimension rlsl(npro,nshl,6),      rlsli(npro,6)
9459599516SKenneth E. Jansen
9559599516SKenneth E. Jansen        real*8    rerrl(npro,nshl,6)
9659599516SKenneth E. Jansen        ttim(6) = ttim(6) - secs(0.0)
9759599516SKenneth E. Jansenc
9859599516SKenneth E. Jansenc.... local reconstruction of diffusive flux vector
9959599516SKenneth E. Jansenc (note: not currently included in mfg)
10059599516SKenneth E. Jansen        if (idiff==2 .and. (ires==3 .or. ires==1)) then
10159599516SKenneth E. Jansen           call e3ql (ycl, shp, shgl, xl, ql, xmudmi, sgn)
10259599516SKenneth E. Jansen        endif
10359599516SKenneth E. Jansenc
10459599516SKenneth E. Jansenc.... loop through the integration points
10559599516SKenneth E. Jansenc
10659599516SKenneth E. Jansen        do intp = 1, ngauss
10759599516SKenneth E. Jansenc
10859599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point
10959599516SKenneth E. Jansenc
11059599516SKenneth E. Jansen        if (Qwt(lcsyst,intp) .eq. zero) cycle          ! precaution
11159599516SKenneth E. Jansenc
11259599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each
11359599516SKenneth E. Jansenc     element at this quadrature point. These arrays will contain
11459599516SKenneth E. Jansenc     the correct signs for the hierarchic basis
11559599516SKenneth E. Jansenc
11659599516SKenneth E. Jansen        call getshp(shp,          shgl,      sgn,
11759599516SKenneth E. Jansen     &              shape,        shdrv)
11859599516SKenneth E. Jansenc
11959599516SKenneth E. Jansenc.... initialize
12059599516SKenneth E. Jansenc
12159599516SKenneth E. Jansen        ri  = zero
12259599516SKenneth E. Jansen        rmi = zero
12359599516SKenneth E. Jansen        if (lhs .eq. 1) stiff = zero
12459599516SKenneth E. Jansenc
12559599516SKenneth E. Jansenc
12659599516SKenneth E. Jansenc.... calculate the integration variables
12759599516SKenneth E. Jansenc
12859599516SKenneth E. Jansen        ttim(8) = ttim(8) - secs(0.0)
12959599516SKenneth E. Jansen        call e3ivar (yl,              ycl,             acl,
13059599516SKenneth E. Jansen     &               Sclr,            shape,           shdrv,
13159599516SKenneth E. Jansen     &               xl,              dui,             aci,
13259599516SKenneth E. Jansen     &               g1yi,            g2yi,            g3yi,
13359599516SKenneth E. Jansen     &               shg,             dxidx,           WdetJ,
13459599516SKenneth E. Jansen     &               rho,             pres,            T,
13559599516SKenneth E. Jansen     &               ei,              h,               alfap,
13659599516SKenneth E. Jansen     &               betaT,           cp,              rk,
13759599516SKenneth E. Jansen     &               u1,              u2,              u3,
13859599516SKenneth E. Jansen     &               ql,              divqi,           sgn,
13959599516SKenneth E. Jansen     &               rLyi,  !passed as a work array
14059599516SKenneth E. Jansen     &               rmu,             rlm,             rlm2mu,
14159599516SKenneth E. Jansen     &               con,             rlsl,            rlsli,
14259599516SKenneth E. Jansen     &               xmudmi,          sforce,          cv)
14359599516SKenneth E. Jansen        ttim(8) = ttim(8) + secs(0.0)
14459599516SKenneth E. Jansen
14559599516SKenneth E. Jansenc
14659599516SKenneth E. Jansenc.... calculate the relevant matrices
14759599516SKenneth E. Jansenc
14859599516SKenneth E. Jansen        ttim(9) = ttim(9) - secs(0.0)
14959599516SKenneth E. Jansen        call e3mtrx (rho,             pres,           T,
15059599516SKenneth E. Jansen     &               ei,              h,              alfap,
15159599516SKenneth E. Jansen     &               betaT,           cp,             rk,
15259599516SKenneth E. Jansen     &               u1,              u2,             u3,
15359599516SKenneth E. Jansen     &               A0,              A1,
15459599516SKenneth E. Jansen     &               A2,              A3,
15559599516SKenneth E. Jansen     &               rLyi(:,1),       rLyi(:,2),      rLyi(:,3),  ! work arrays
15659599516SKenneth E. Jansen     &               rLyi(:,4),       rLyi(:,5),      A0DC,
15759599516SKenneth E. Jansen     &               A0inv,           dVdY)
15859599516SKenneth E. Jansen        ttim(9) = ttim(9) + tmr()
15959599516SKenneth E. Jansenc
16059599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin)
16159599516SKenneth E. Jansenc
16259599516SKenneth E. Jansen        ttim(14) = ttim(14) - secs(0.0)
16359599516SKenneth E. Jansen        call e3conv (g1yi,            g2yi,            g3yi,
16459599516SKenneth E. Jansen     &               A1,              A2,              A3,
16559599516SKenneth E. Jansen     &               rho,             pres,            T,
16659599516SKenneth E. Jansen     &               ei,              rk,              u1,
16759599516SKenneth E. Jansen     &               u2,              u3,              rLyi,
16859599516SKenneth E. Jansen     &               ri,              rmi,             EGmass,
16959599516SKenneth E. Jansen     &               shg,             shape,           WdetJ)
17059599516SKenneth E. Jansen        ttim(14) = ttim(14) + secs(0.0)
17159599516SKenneth E. Jansenc
17259599516SKenneth E. Jansenc.... calculate the diffusion contribution
17359599516SKenneth E. Jansenc
17459599516SKenneth E. Jansen        ttim(15) = ttim(15) - secs(0.0)
17559599516SKenneth E. Jansen        compK = zero
17659599516SKenneth E. Jansen        if (Navier .eq. 1) then
17759599516SKenneth E. Jansen        call e3visc (g1yi,            g2yi,            g3yi,
17859599516SKenneth E. Jansen     &               dxidx,
17959599516SKenneth E. Jansen     &               rmu,             rlm,             rlm2mu,
18059599516SKenneth E. Jansen     &               u1,              u2,              u3,
18159599516SKenneth E. Jansen     &               ri,              rmi,             stiff,
18259599516SKenneth E. Jansen     &               con, rlsli,     compK, T)
18359599516SKenneth E. Jansen        endif
18459599516SKenneth E. Jansen        ttim(15) = ttim(15) + secs(0.0)
18559599516SKenneth E. Jansenc
18659599516SKenneth E. Jansenc.... calculate the body force contribution
18759599516SKenneth E. Jansenc
18859599516SKenneth E. Jansen        if(isurf .ne. 1 .and. matflg(5,1).gt.0) then
18959599516SKenneth E. Jansen        call e3source (ri,            rmi,           rlyi,
19059599516SKenneth E. Jansen     &                 rho,           u1,            u2,
19159599516SKenneth E. Jansen     &                 u3,            pres,          sforce,
19259599516SKenneth E. Jansen     &                 dui,           dxidx,         ytargetl,
19359599516SKenneth E. Jansen     &                 xl,            shape,         bcool)
19459599516SKenneth E. Jansen        else
19559599516SKenneth E. Jansen           bcool=zero
19659599516SKenneth E. Jansen        endif
19759599516SKenneth E. Jansenc
19859599516SKenneth E. Jansenc.... calculate the least-squares contribution
19959599516SKenneth E. Jansenc
20059599516SKenneth E. Jansen        ttim(16) = ttim(16) - secs(0.0)
20159599516SKenneth E. Jansen        call e3LS   (A1,              A2,            A3,
20259599516SKenneth E. Jansen     &               rho,             rmu,           cp,
20359599516SKenneth E. Jansen     &               cv,              con,           T,
20459599516SKenneth E. Jansen     &               u1,              u2,            u3,
20559599516SKenneth E. Jansen     &               rLyi,            dxidx,         tau,
20659599516SKenneth E. Jansen     &               ri,              rmi,           rk,
20759599516SKenneth E. Jansen     &               dui,             aci,           A0,
20859599516SKenneth E. Jansen     &               divqi,           shape,         shg,
20959599516SKenneth E. Jansen     &               EGmass,          stiff,         WdetJ,
21059599516SKenneth E. Jansen     &               giju,            rTLS,          raLS,
21159599516SKenneth E. Jansen     &               A0inv,           dVdY,          rerrl,
21259599516SKenneth E. Jansen     &               compK,           pres,          PTau)
21359599516SKenneth E. Jansen        ttim(16) = ttim(16) + secs(0.0)
21459599516SKenneth E. Jansenc
21559599516SKenneth E. Jansenc....  Discontinuity capturing
21659599516SKenneth E. Jansenc
21759599516SKenneth E. Jansen        if(iDC.ne.0) then
21859599516SKenneth E. Jansen          call e3dc  (g1yi,          g2yi,          g3yi,
21959599516SKenneth E. Jansen     &                A0,            raLS,          rTLS,
22059599516SKenneth E. Jansen     &                giju,          DC,
22159599516SKenneth E. Jansen     &                ri,            rmi,           stiff, A0DC)
22259599516SKenneth E. Jansen        endif
22359599516SKenneth E. Jansenc
22459599516SKenneth E. Jansenc
22559599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS
22659599516SKenneth E. Jansenc
22759599516SKenneth E. Jansen        if (ngauss .eq. 1 .and. nshl .eq. 4) then    ! trilinear tets
22859599516SKenneth E. Jansen           ttim(17) = ttim(17) - secs(0.0)
22959599516SKenneth E. Jansen           call e3juel (yl, acl, Sclr, A0, WdetJ, rl, rml)
23059599516SKenneth E. Jansen           ttim(17) = ttim(17) + secs(0.0)
23159599516SKenneth E. Jansen        else
23259599516SKenneth E. Jansen           call e3massr (aci, dui, ri,  rmi, A0)
23359599516SKenneth E. Jansen        endif
23459599516SKenneth E. Jansen
23559599516SKenneth E. Jansenc
23659599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS
23759599516SKenneth E. Jansenc
23859599516SKenneth E. Jansen        if (lhs .eq. 1) then
23959599516SKenneth E. Jansen           call e3massl (bcool,shape,  WdetJ,   A0,  EGmass)
24059599516SKenneth E. Jansen        endif
24159599516SKenneth E. Jansenc
24259599516SKenneth E. Jansenc....  calculate the preconditioner all at once now instead of in separate
24359599516SKenneth E. Jansenc      routines
24459599516SKenneth E. Jansenc
24559599516SKenneth E. Jansen       if(iprec.eq.1 .and. lhs.ne.1)then
24659599516SKenneth E. Jansen          ttim(18) = ttim(18) - secs(0.0)
24759599516SKenneth E. Jansen
24859599516SKenneth E. Jansen          if (itau.lt.10) then
24959599516SKenneth E. Jansen
25059599516SKenneth E. Jansen             call e3bdg(shape,       shg,             WdetJ,
25159599516SKenneth E. Jansen     &		  A1,	       A2,	        A3,
25259599516SKenneth E. Jansen     &		  A0,          bcool,           tau,
25359599516SKenneth E. Jansen     &            u1,          u2,              u3,
25459599516SKenneth E. Jansen     &            BDiagl,
25559599516SKenneth E. Jansen     &            rmu,         rlm2mu,          con)
25659599516SKenneth E. Jansen
25759599516SKenneth E. Jansen          else
25859599516SKenneth E. Jansen
25959599516SKenneth E. Jansen             call e3bdg_nd(shape,       shg,             WdetJ,
26059599516SKenneth E. Jansen     &		  A1,	       A2,	        A3,
26159599516SKenneth E. Jansen     &		  A0,          bcool,           PTau,
26259599516SKenneth E. Jansen     &            u1,          u2,              u3,
26359599516SKenneth E. Jansen     &            BDiagl,
26459599516SKenneth E. Jansen     &            rmu,         rlm2mu,          con)
26559599516SKenneth E. Jansen
26659599516SKenneth E. Jansen          endif
26759599516SKenneth E. Jansen
26859599516SKenneth E. Jansen       ttim(18) = ttim(18) + secs(0.0)
26959599516SKenneth E. Jansen       endif
27059599516SKenneth E. Jansenc
27159599516SKenneth E. Jansenc
27259599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and
27359599516SKenneth E. Jansenc     by both the weight space and solution space for the LHS stiffness term)
27459599516SKenneth E. Jansenc
27559599516SKenneth E. Jansen       ttim(19) = ttim(19) - secs(0.0)
27659599516SKenneth E. Jansen       call e3wmlt (shape,         shg,       WdetJ,
27759599516SKenneth E. Jansen     &              ri,            rmi,       rl,
27859599516SKenneth E. Jansen     &              rml,           stiff,     EGmass)
27959599516SKenneth E. Jansen       ttim(19) = ttim(19) + secs(0.0)
28059599516SKenneth E. Jansenc
28159599516SKenneth E. Jansenc.... end of integration loop
28259599516SKenneth E. Jansenc
28359599516SKenneth E. Jansen      enddo
28459599516SKenneth E. Jansen
28559599516SKenneth E. Jansen      ttim(6) = ttim(6) + secs(0.0)
28659599516SKenneth E. Jansenc
28759599516SKenneth E. Jansenc.... return
28859599516SKenneth E. Jansenc
28959599516SKenneth E. Jansen      return
29059599516SKenneth E. Jansen      end
29159599516SKenneth E. Jansenc
29259599516SKenneth E. Jansenc
29359599516SKenneth E. Jansenc
29459599516SKenneth E. Jansenc
29559599516SKenneth E. Jansen       subroutine e3Sclr (ycl,          acl,
29659599516SKenneth E. Jansen     &                    dwl,         elDwl,
29759599516SKenneth E. Jansen     &                    shp,         sgn,
29859599516SKenneth E. Jansen     &                    shgl,        xl,
29959599516SKenneth E. Jansen     &                    rtl,         rmtl,
30059599516SKenneth E. Jansen     &                    qtl,         EGmasst)
30159599516SKenneth E. Jansenc
30259599516SKenneth E. Jansenc----------------------------------------------------------------------
30359599516SKenneth E. Jansenc
30459599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations.
30559599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the
30659599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block-
30759599516SKenneth E. Jansenc diagonal preconditioner.
30859599516SKenneth E. Jansenc
30959599516SKenneth E. Jansenc input:    e    a   1..5   when we think of U^e_a  and U is 5 variables
31059599516SKenneth E. Jansenc  ycl      (npro,nshl,ndof)     : Y variables
31159599516SKenneth E. Jansenc  actl    (npro,nshl)          : scalar variable time derivative
31259599516SKenneth E. Jansenc  dwl     (npro,nenl)          : distances to wall
31359599516SKenneth E. Jansenc  shp     (nen,ngauss)          : element shape-functions  N_a
31459599516SKenneth E. Jansenc  shgl    (nsd,nen,ngauss)      : element local-shape-functions N_{a,xi}
31559599516SKenneth E. Jansenc  xl      (npro,nenl,nsd)      : nodal coordinates at current step (x^e_a)
31659599516SKenneth E. Jansenc  qtl     (npro,nshl)          : diffusive flux vector (don't worry)
31759599516SKenneth E. Jansenc
31859599516SKenneth E. Jansenc output:
31959599516SKenneth E. Jansenc  rtl     (npro,nshl)          : element RHS residual    (G^e_a)
32059599516SKenneth E. Jansenc  rmtl    (npro,nshl)          : element modified residual  (G^e_a tilde)
32159599516SKenneth E. Jansenc  EGmasst (npro,nshape,nshape) : element LHS tangent mass matrix (dG^e_a
32259599516SKenneth E. Jansenc                                                                  dY_b  )
32359599516SKenneth E. Jansenc
32459599516SKenneth E. Jansenc
32559599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the
32659599516SKenneth E. Jansenc        Hulbert's generalized alpha method integrator
32759599516SKenneth E. Jansenc
32859599516SKenneth E. Jansenc Note: nedof = nflow*nshl is the total number of degrees of freedom
32959599516SKenneth E. Jansenc       at each element node.
33059599516SKenneth E. Jansenc
33159599516SKenneth E. Jansenc Mathematics done by:  Michel Mallet, Farzin Shakib (version 1)
33259599516SKenneth E. Jansenc                       Farzin Shakib                (version 2)
33359599516SKenneth E. Jansenc
33459599516SKenneth E. Jansenc
33559599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.   (Modified from e2.f)
33659599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.   (Fortran 90)
33759599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables)
33859599516SKenneth E. Jansenc Chris Whiting, Winter 1998.  (LHS matrix formation)
33959599516SKenneth E. Jansenc----------------------------------------------------------------------
34059599516SKenneth E. Jansenc
34159599516SKenneth E. Jansen        include "common.h"
34259599516SKenneth E. Jansenc
34359599516SKenneth E. Jansen        dimension ycl(npro,nshl,ndof),
34459599516SKenneth E. Jansen     &            acl(npro,nshl,ndof),
34559599516SKenneth E. Jansen     &            dwl(npro,nenl),
34659599516SKenneth E. Jansen     &            shp(nshl,ngauss),         shgl(nsd,nshl,ngauss),
34759599516SKenneth E. Jansen     &            xl(npro,nenl,nsd),
34859599516SKenneth E. Jansen     &            rtl(npro,nshl),           qtl(npro,nshl),
34959599516SKenneth E. Jansen     &            rmtl(npro,nshl),          Diagl(npro,nshl),
35059599516SKenneth E. Jansen     &            EGmasst(npro,nshape,nshape),
35159599516SKenneth E. Jansen     &            dist2w(npro),             sgn(npro,nshl),
352*513954efSKenneth E. Jansen     &            vort(npro),               gVnrm(npro),
35359599516SKenneth E. Jansen     &            rmu(npro),                con(npro),
35459599516SKenneth E. Jansen     &            T(npro),                  cp(npro),
35559599516SKenneth E. Jansen     &            g1yti(npro),              acti(npro),
35659599516SKenneth E. Jansen     &            g2yti(npro),              g3yti(npro),
35759599516SKenneth E. Jansen     &            Sclr(npro),               srcp (npro)
35859599516SKenneth E. Jansen
35959599516SKenneth E. Jansenc
36059599516SKenneth E. Jansen        dimension shg(npro,nshl,nsd)
36159599516SKenneth E. Jansenc
36259599516SKenneth E. Jansen        dimension dxidx(npro,nsd,nsd),     WdetJ(npro)
36359599516SKenneth E. Jansenc
36459599516SKenneth E. Jansen        dimension rho(npro),               rk(npro),
36559599516SKenneth E. Jansen     &            u1(npro),                u2(npro),
36659599516SKenneth E. Jansen     &            u3(npro)
36759599516SKenneth E. Jansenc
36859599516SKenneth E. Jansen        dimension A0t(npro),               A1t(npro),
36959599516SKenneth E. Jansen     &            A2t(npro),               A3t(npro)
37059599516SKenneth E. Jansenc
37159599516SKenneth E. Jansen        dimension rLyti(npro),             raLSt(npro),
37259599516SKenneth E. Jansen     &            rTLSt(npro),             giju(npro,6),
37359599516SKenneth E. Jansen     &            DCt(npro, ngauss)
37459599516SKenneth E. Jansenc
37559599516SKenneth E. Jansen        dimension rti(npro,nsd+1),         rmti(npro,nsd+1),
37659599516SKenneth E. Jansen     &            stifft(npro,nsd,nsd),
37759599516SKenneth E. Jansen     &            shape(npro,nshl),        shdrv(npro,nsd,nshl)
37859599516SKenneth E. Jansen        real*8    elDwl(npro)
37959599516SKenneth E. Jansenc
38059599516SKenneth E. Jansen        ttim(6) = ttim(6) - tmr()
38159599516SKenneth E. Jansenc
38259599516SKenneth E. Jansenc.... loop through the integration points
38359599516SKenneth E. Jansenc
38459599516SKenneth E. Jansen        elDwl(:)=zero
38559599516SKenneth E. Jansen        do intp = 1, ngauss
38659599516SKenneth E. Jansenc
38759599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point
38859599516SKenneth E. Jansenc
38959599516SKenneth E. Jansen        if (Qwt(lcsyst,intp) .eq. zero) cycle          ! precaution
39059599516SKenneth E. Jansenc
39159599516SKenneth E. Jansenc
39259599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each
39359599516SKenneth E. Jansenc     element at this quadrature point. These arrays will contain
39459599516SKenneth E. Jansenc     the correct signs for the hierarchic basis
39559599516SKenneth E. Jansenc
39659599516SKenneth E. Jansen        call getshp(shp,          shgl,      sgn,
39759599516SKenneth E. Jansen     &              shape,        shdrv)
39859599516SKenneth E. Jansenc
39959599516SKenneth E. Jansenc.... initialize
40059599516SKenneth E. Jansenc
40159599516SKenneth E. Jansen        rlyti = zero
40259599516SKenneth E. Jansen        rti   = zero
40359599516SKenneth E. Jansen        rmti  = zero
40459599516SKenneth E. Jansen        srcp  = zero
40559599516SKenneth E. Jansen        stifft = zero
40659599516SKenneth E. Jansenc        if (lhs .eq. 1) stifft = zero
40759599516SKenneth E. Jansenc
40859599516SKenneth E. Jansenc
40959599516SKenneth E. Jansenc.... calculate the integration variables
41059599516SKenneth E. Jansenc
41159599516SKenneth E. Jansen        ttim(8) = ttim(8) - tmr()
41259599516SKenneth E. Jansenc
41359599516SKenneth E. Jansen        call e3ivarSclr(ycl,              acl,        acti,
41459599516SKenneth E. Jansen     &                  shape,           shdrv,      xl,
41559599516SKenneth E. Jansen     &                  T,               cp,
41659599516SKenneth E. Jansen     &                  dxidx,           Sclr,
417*513954efSKenneth E. Jansen     &                  Wdetj,           vort,       gVnrm,
41859599516SKenneth E. Jansen     &                  g1yti,           g2yti,      g3yti,
41959599516SKenneth E. Jansen     &                  rho,             rmu,        con,
42059599516SKenneth E. Jansen     &                  rk,              u1,         u2,
42159599516SKenneth E. Jansen     &                  u3,              shg,        dwl,
42259599516SKenneth E. Jansen     &                  dist2w)
42359599516SKenneth E. Jansen        ttim(8) = ttim(8) + tmr()
42459599516SKenneth E. Jansen
42559599516SKenneth E. Jansenc
42659599516SKenneth E. Jansenc.... calculate the source term contribution
42759599516SKenneth E. Jansenc
42859599516SKenneth E. Jansen        if(nosource.ne.1)
42959599516SKenneth E. Jansen     &  call e3sourceSclr (Sclr,    rho,    rmu,
430*513954efSKenneth E. Jansen     &                     dist2w,  vort,   gVnrm,   con,
43159599516SKenneth E. Jansen     &                     g1yti,  g2yti,   g3yti,
43259599516SKenneth E. Jansen     &                     rti,    rLyti,   srcp,
43359599516SKenneth E. Jansen     &                     ycl,     shape,   u1,
43459599516SKenneth E. Jansen     &                     u2,     u3,	     xl,
43559599516SKenneth E. Jansen     &                     elDwl)
43659599516SKenneth E. Jansenc
43759599516SKenneth E. Jansen         if (ilset.eq.2 .and. isclr.eq.2) then
43859599516SKenneth E. Jansen          rk = pt5 * ( u1**2 + u2**2 + u3**2 )
43959599516SKenneth E. Jansen         endif
44059599516SKenneth E. Jansenc.... calculate the relevant matrices
44159599516SKenneth E. Jansenc
44259599516SKenneth E. Jansen        ttim(9) = ttim(9) - tmr()
44359599516SKenneth E. Jansen        call e3mtrxSclr (rho,
44459599516SKenneth E. Jansen     &                   u1,            u2,         u3,
44559599516SKenneth E. Jansen     &                   A0t,           A1t,
44659599516SKenneth E. Jansen     &                   A2t,           A3t)
44759599516SKenneth E. Jansen        ttim(9) = ttim(9) + tmr()
44859599516SKenneth E. Jansenc
44959599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin)
45059599516SKenneth E. Jansenc
45159599516SKenneth E. Jansen        ttim(14) = ttim(14) - tmr()
45259599516SKenneth E. Jansen        call e3convSclr (g1yti,        g2yti,       g3yti,
45359599516SKenneth E. Jansen     &                   A1t,          A2t,         A3t,
45459599516SKenneth E. Jansen     &                   rho,          u1,          Sclr,
45559599516SKenneth E. Jansen     &                   u2,           u3,          rLyti,
45659599516SKenneth E. Jansen     &                   rti,          rmti,        EGmasst,
45759599516SKenneth E. Jansen     &                   shg,          shape,       WdetJ)
45859599516SKenneth E. Jansen        ttim(14) = ttim(14) + tmr()
45959599516SKenneth E. Jansenc
46059599516SKenneth E. Jansenc.... calculate the diffusion contribution
46159599516SKenneth E. Jansenc
46259599516SKenneth E. Jansen        ttim(15) = ttim(15) - tmr()
46359599516SKenneth E. Jansen        if (Navier .eq. 1) then
46459599516SKenneth E. Jansen        call e3viscSclr (g1yti,        g2yti,         g3yti,
46559599516SKenneth E. Jansen     &                   rmu,          Sclr,          rho,
46659599516SKenneth E. Jansen     &                   rti,          rmti,          stifft )
46759599516SKenneth E. Jansen        endif
46859599516SKenneth E. Jansen         ttim(15) = ttim(15) + tmr()
46959599516SKenneth E. Jansenc
47059599516SKenneth E. Jansen         if (ilset.eq.2)  srcp = zero
47159599516SKenneth E. Jansen
47259599516SKenneth E. Jansenc
47359599516SKenneth E. Jansenc.... calculate the least-squares contribution
47459599516SKenneth E. Jansenc
47559599516SKenneth E. Jansen        ttim(16) = ttim(16) - tmr()
47659599516SKenneth E. Jansen        call e3LSSclr(A1t,             A2t,             A3t,
47759599516SKenneth E. Jansen     &                rho,             rmu,             rtLSt,
47859599516SKenneth E. Jansen     &                u1,              u2,              u3,
47959599516SKenneth E. Jansen     &                rLyti,           dxidx,           raLSt,
48059599516SKenneth E. Jansen     &                rti,             rk,              giju,
48159599516SKenneth E. Jansen     &                acti,            A0t,
48259599516SKenneth E. Jansen     &                shape,           shg,
48359599516SKenneth E. Jansen     &                EGmasst,         stifft,          WdetJ,
48459599516SKenneth E. Jansen     &                srcp)
48559599516SKenneth E. Jansen        ttim(16) = ttim(16) + tmr()
48659599516SKenneth E. Jansenc
48759599516SKenneth E. Jansenc******************************DC TERMS*****************************
48859599516SKenneth E. Jansen        if (idcsclr(1) .ne. 0) then
48959599516SKenneth E. Jansen           if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or.
49059599516SKenneth E. Jansen     &         (idcsclr(2).eq.2 .and. isclr.eq.2)) then   ! scalar with dc
49159599516SKenneth E. Jansen              call e3dcSclr(g1yti, g2yti,          g3yti,
49259599516SKenneth E. Jansen     &             A0t,            raLSt,          rTLSt,
49359599516SKenneth E. Jansen     &             DCt,            giju,
49459599516SKenneth E. Jansen     &             rti,            rmti,           stifft)
49559599516SKenneth E. Jansen           endif
49659599516SKenneth E. Jansen        endif
49759599516SKenneth E. Jansenc
49859599516SKenneth E. Jansenc******************************************************************
49959599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS
50059599516SKenneth E. Jansenc
50159599516SKenneth E. Jansen
50259599516SKenneth E. Jansen           call e3massrSclr (acti, rti, A0t)
50359599516SKenneth E. Jansenc
50459599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS
50559599516SKenneth E. Jansenc
50659599516SKenneth E. Jansen         if (lhs .eq. 1) then
50759599516SKenneth E. Jansen            call e3masslSclr (shape,  WdetJ,   A0t,  EGmasst,srcp)
50859599516SKenneth E. Jansen         endif
50959599516SKenneth E. Jansenc
51059599516SKenneth E. Jansen
51159599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and
51259599516SKenneth E. Jansenc     by both the weight space and solution space for the LHS stiffness term)
51359599516SKenneth E. Jansenc
51459599516SKenneth E. Jansen       ttim(19) = ttim(19) - tmr()
51559599516SKenneth E. Jansen       call e3wmltSclr (shape,           shg,             WdetJ,
51659599516SKenneth E. Jansen     &                  rti,
51759599516SKenneth E. Jansen     &                  rtl,             stifft,          EGmasst)
51859599516SKenneth E. Jansen       ttim(19) = ttim(19) + tmr()
51959599516SKenneth E. Jansenc
52059599516SKenneth E. Jansenc.... end of the loop
52159599516SKenneth E. Jansenc
52259599516SKenneth E. Jansen      enddo
52359599516SKenneth E. Jansen	qptinv=one/ngauss
52459599516SKenneth E. Jansen	elDwl(:)=elDwl(:)*qptinv
52559599516SKenneth E. Jansen
52659599516SKenneth E. Jansen
52759599516SKenneth E. Jansen      ttim(6) = ttim(6) + tmr()
52859599516SKenneth E. Jansenc
52959599516SKenneth E. Jansenc.... return
53059599516SKenneth E. Jansenc
53159599516SKenneth E. Jansen      return
53259599516SKenneth E. Jansen      end
53359599516SKenneth E. Jansen
534