xref: /phasta/phSolver/compressible/e3ls.f (revision 0d39a63aa7ba54dac51aef7a29581103537187d1)
159599516SKenneth E. Jansen        subroutine e3LS   (A1,        A2,          A3,
259599516SKenneth E. Jansen     &                     rho,       rmu,         cp,
359599516SKenneth E. Jansen     &                     cv,        con,         T,
459599516SKenneth E. Jansen     &                     u1,        u2,          u3,
559599516SKenneth E. Jansen     &                     rLyi,      dxidx,       tau,
659599516SKenneth E. Jansen     &                     ri,        rmi,         rk,
759599516SKenneth E. Jansen     &                     dui,       aci,         A0,
859599516SKenneth E. Jansen     &                     divqi,     shape,       shg,
959599516SKenneth E. Jansen     &                     EGmass,    stiff,       WdetJ,
1059599516SKenneth E. Jansen     &                     giju,      rTLS,        raLS,
1159599516SKenneth E. Jansen     &                     A0inv,     dVdY,        rerrl,
1259599516SKenneth E. Jansen     &                     compK,     pres,        PTau)
1359599516SKenneth E. Jansenc
1459599516SKenneth E. Jansenc----------------------------------------------------------------------
1559599516SKenneth E. Jansenc
1659599516SKenneth E. Jansenc This routine calculates the contribution of the least-squares
1759599516SKenneth E. Jansenc operator to the RHS vector and LHS tangent matrix. The temporary
1859599516SKenneth E. Jansenc results are put in ri.
1959599516SKenneth E. Jansenc
2059599516SKenneth E. Jansenc input:
2159599516SKenneth E. Jansenc  A1    (npro,nflow,nflow)     : A_1
2259599516SKenneth E. Jansenc  A2    (npro,nflow,nflow)     : A_2
2359599516SKenneth E. Jansenc  A3    (npro,nflow,nflow)     : A_3
2459599516SKenneth E. Jansenc  rho   (npro)               : density
2559599516SKenneth E. Jansenc  T     (npro)               : temperature
2659599516SKenneth E. Jansenc  cp    (npro)               : specific heat at constant pressure
2759599516SKenneth E. Jansenc  u1    (npro)               : x1-velocity component
2859599516SKenneth E. Jansenc  u2    (npro)               : x2-velocity component
2959599516SKenneth E. Jansenc  u3    (npro)               : x3-velocity component
3059599516SKenneth E. Jansenc  rLyi  (npro,nflow)          : least-squares residual vector
3159599516SKenneth E. Jansenc  dxidx (npro,nsd,nsd)       : inverse of deformation gradient
3259599516SKenneth E. Jansenc  tau   (npro,3)             : stability parameter
3359599516SKenneth E. Jansenc  PTau  (npro,5,5)           : matrix of stability parameters
3459599516SKenneth E. Jansenc  rLyi  (npro,nflow)          : convective portion of least-squares
3559599516SKenneth E. Jansenc                               residual vector
3659599516SKenneth E. Jansenc  divqi (npro,nflow-1)        : divergence of diffusive flux
3759599516SKenneth E. Jansenc  shape (npro,nshl)        : element shape functions
3859599516SKenneth E. Jansenc  shg   (npro,nshl,nsd)    : global element shape function grads
3959599516SKenneth E. Jansenc  WdetJ (npro)               : weighted jacobian determinant
4059599516SKenneth E. Jansenc  stiff (npro,nsd*nflow,nsd*nflow) : stiffness matrix
4159599516SKenneth E. Jansenc  EGmass(npro,nedof,nedof)   : partial mass matrix
4259599516SKenneth E. Jansenc  compK (npro,10)             : K_ij in (eq.134) A new ... III
4359599516SKenneth E. Jansenc
4459599516SKenneth E. Jansenc output:
4559599516SKenneth E. Jansenc  ri     (npro,nflow*(nsd+1)) : partial residual
4659599516SKenneth E. Jansenc  rmi    (npro,nflow*(nsd+1)) : partial modified residual
4759599516SKenneth E. Jansenc  EGmass (npro,nedof,nedof)  : partial mass matrix
4859599516SKenneth E. Jansenc
4959599516SKenneth E. Jansenc
5059599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2ls.f)
5159599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90)
5259599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. Prim. Var. with Diag Tau
5359599516SKenneth E. Jansenc----------------------------------------------------------------------
5459599516SKenneth E. Jansenc
5559599516SKenneth E. Jansen        include "common.h"
5659599516SKenneth E. Jansen
5759599516SKenneth E. Jansenc
5859599516SKenneth E. Jansenc  passed arrays
5959599516SKenneth E. Jansenc
6059599516SKenneth E. Jansen        dimension A1(npro,nflow,nflow),    A2(npro,nflow,nflow),
6159599516SKenneth E. Jansen     &            A3(npro,nflow,nflow),    cv(npro),
6259599516SKenneth E. Jansen     &            A0(npro,nflow,nflow),    rho(npro),
6359599516SKenneth E. Jansen     &            con(npro),               cp(npro),
6459599516SKenneth E. Jansen     &            dui(npro,nflow),         aci(npro,nflow),
6559599516SKenneth E. Jansen     &            u1(npro),                u2(npro),
6659599516SKenneth E. Jansen     &            u3(npro),                rk(npro),
6759599516SKenneth E. Jansen     &            rLyi(npro,nflow),        dxidx(npro,nsd,nsd),
6859599516SKenneth E. Jansen     &            tau(npro,5),             giju(npro,6),
6959599516SKenneth E. Jansen     &            rTLS(npro),              raLS(npro),
7059599516SKenneth E. Jansen     &            ri(npro,nflow*(nsd+1)),  rmi(npro,nflow*(nsd+1)),
7159599516SKenneth E. Jansen     &            divqi(npro,nflow-1),     stiff(npro,3*nflow,3*nflow),
7259599516SKenneth E. Jansen     &            EGmass(npro,nedof,nedof),shape(npro,nshl),
7359599516SKenneth E. Jansen     &            shg(npro,nshl,nsd),      WdetJ(npro),
7459599516SKenneth E. Jansen     &            PTau(npro,5,5),          T(npro),
7559599516SKenneth E. Jansen     &            pres(npro)
7659599516SKenneth E. Jansenc
7759599516SKenneth E. Jansenc local arrays
7859599516SKenneth E. Jansenc
7959599516SKenneth E. Jansen        dimension rLymi(npro,nflow),         Atau(npro,nflow,nflow),
8059599516SKenneth E. Jansen     &            A1tauA0(npro,nflow,nflow), A2tauA0(npro,nflow,nflow),
8159599516SKenneth E. Jansen     &            A3tauA0(npro,nflow,nflow), fact(npro),
8259599516SKenneth E. Jansen     &            A0inv(npro,15),            dVdY(npro,15),
8359599516SKenneth E. Jansen     &            compK(npro,10),            ac1(npro),
8459599516SKenneth E. Jansen     &            ac2(npro),                 ac3(npro)
8559599516SKenneth E. Jansenc
8659599516SKenneth E. Jansen        real*8    rerrl(npro,nshl,6), tmp(npro), tmp1(npro)
8759599516SKenneth E. Jansen        ttim(24) = ttim(24) - secs(0.0)
8859599516SKenneth E. Jansenc
8959599516SKenneth E. Jansenc
9059599516SKenneth E. Jansenc last step to the least squares is adding the time term.  So that we
9159599516SKenneth E. Jansenc only have to localize one vector for each Krylov vector the modified
9259599516SKenneth E. Jansenc residual is quite different from the total residual.
9359599516SKenneth E. Jansenc
9459599516SKenneth E. Jansenc
9559599516SKenneth E. Jansenc the modified residual
9659599516SKenneth E. Jansenc
9759599516SKenneth E. Jansen       fct1=almi/gami/alfi*dtgl
9859599516SKenneth E. Jansenc
9959599516SKenneth E. Jansenc  add possibility of not including time term
10059599516SKenneth E. Jansenc
10159599516SKenneth E. Jansenc       if(idiff.ne.-1)
10259599516SKenneth E. Jansen
10359599516SKenneth E. Jansen       if(ires.ne.1) rLymi = rLyi + fct1*dui
10459599516SKenneth E. Jansenc
10559599516SKenneth E. Jansen       if(ires.eq.1 .or. ires .eq. 3) then
10659599516SKenneth E. Jansenc       rLymi = rLyi
10759599516SKenneth E. Jansen
10859599516SKenneth E. Jansen        rLyi(:,1) = rLyi(:,1)
10959599516SKenneth E. Jansen     &            + A0(:,1,1)*aci(:,1)
11059599516SKenneth E. Jansenc    &            + A0(:,1,2)*aci(:,2)
11159599516SKenneth E. Jansenc    &            + A0(:,1,3)*aci(:,3)
11259599516SKenneth E. Jansenc    &            + A0(:,1,4)*aci(:,4)
11359599516SKenneth E. Jansen     &            + A0(:,1,5)*aci(:,5)
11459599516SKenneth E. Jansenc
11559599516SKenneth E. Jansen        rLyi(:,2) = rLyi(:,2)
11659599516SKenneth E. Jansen     &            + A0(:,2,1)*aci(:,1)
11759599516SKenneth E. Jansen     &            + A0(:,2,2)*aci(:,2)
11859599516SKenneth E. Jansenc    &            + A0(:,2,3)*aci(:,3)
11959599516SKenneth E. Jansenc    &            + A0(:,2,4)*aci(:,4)
12059599516SKenneth E. Jansen     &            + A0(:,2,5)*aci(:,5)
12159599516SKenneth E. Jansenc
12259599516SKenneth E. Jansen        rLyi(:,3) = rLyi(:,3)
12359599516SKenneth E. Jansen     &            + A0(:,3,1)*aci(:,1)
12459599516SKenneth E. Jansenc    &            + A0(:,3,2)*aci(:,2)
12559599516SKenneth E. Jansen     &            + A0(:,3,3)*aci(:,3)
12659599516SKenneth E. Jansenc    &            + A0(:,3,4)*aci(:,4)
12759599516SKenneth E. Jansen     &            + A0(:,3,5)*aci(:,5)
12859599516SKenneth E. Jansenc
12959599516SKenneth E. Jansen        rLyi(:,4) = rLyi(:,4)
13059599516SKenneth E. Jansen     &            + A0(:,4,1)*aci(:,1)
13159599516SKenneth E. Jansenc    &            + A0(:,4,2)*aci(:,2)
13259599516SKenneth E. Jansenc    &            + A0(:,4,3)*aci(:,3)
13359599516SKenneth E. Jansen     &            + A0(:,4,4)*aci(:,4)
13459599516SKenneth E. Jansen     &            + A0(:,4,5)*aci(:,5)
13559599516SKenneth E. Jansenc
13659599516SKenneth E. Jansen        rLyi(:,5) = rLyi(:,5)
13759599516SKenneth E. Jansen     &            + A0(:,5,1)*aci(:,1)
13859599516SKenneth E. Jansen     &            + A0(:,5,2)*aci(:,2)
13959599516SKenneth E. Jansen     &            + A0(:,5,3)*aci(:,3)
14059599516SKenneth E. Jansen     &            + A0(:,5,4)*aci(:,4)
14159599516SKenneth E. Jansen     &            + A0(:,5,5)*aci(:,5)
14259599516SKenneth E. Jansenc
14359599516SKenneth E. Jansen      endif
14459599516SKenneth E. Jansenc
14559599516SKenneth E. Jansenc.... subtract div(q) from the least squares term
14659599516SKenneth E. Jansenc
14759599516SKenneth E. Jansen      if ((idiff >= 1).and.(ires==3 .or. ires==1)) then
14859599516SKenneth E. Jansenc
14959599516SKenneth E. Jansen      if (isurf.eq.zero) then
15059599516SKenneth E. Jansen         rLyi(:,2) = rLyi(:,2) - divqi(:,1)
15159599516SKenneth E. Jansen         rLyi(:,3) = rLyi(:,3) - divqi(:,2)
15259599516SKenneth E. Jansen         rLyi(:,4) = rLyi(:,4) - divqi(:,3)
15359599516SKenneth E. Jansen         rLyi(:,5) = rLyi(:,5) - divqi(:,4)
15459599516SKenneth E. Jansen      endif
15559599516SKenneth E. Jansen      endif
15659599516SKenneth E. Jansenc
15759599516SKenneth E. Jansenc.... -------------------> error calculation  <-----------------
15859599516SKenneth E. Jansenc
15959599516SKenneth E. Jansen       if((ierrcalc.eq.1).and.(nitr.eq.iter)) then
16059599516SKenneth E. Jansen          do ia=1,nshl
16159599516SKenneth E. Jansen             tmp=shape(:,ia)*WdetJ(:)
16259599516SKenneth E. Jansen             tmp1=shape(:,ia)*Qwt(lcsyst,intp)
16359599516SKenneth E. Jansen             rerrl(:,ia,1) = rerrl(:,ia,1) +
16459599516SKenneth E. Jansen     &                       tmp1(:)*rLyi(:,1)*rLyi(:,1)
16559599516SKenneth E. Jansen             rerrl(:,ia,2) = rerrl(:,ia,2) +
16659599516SKenneth E. Jansen     &                       tmp1(:)*rLyi(:,2)*rLyi(:,2)
16759599516SKenneth E. Jansen             rerrl(:,ia,3) = rerrl(:,ia,3) +
16859599516SKenneth E. Jansen     &                       tmp1(:)*rLyi(:,3)*rLyi(:,3)
16959599516SKenneth E. Jansen
17059599516SKenneth E. Jansen             rerrl(:,ia,4) = rerrl(:,ia,4) +
17159599516SKenneth E. Jansen     &                       tmp(:)*divqi(:,1)*divqi(:,1)
17259599516SKenneth E. Jansen             rerrl(:,ia,5) = rerrl(:,ia,5) +
17359599516SKenneth E. Jansen     &                       tmp(:)*divqi(:,2)*divqi(:,2)
174*0d39a63aSKenneth E. Jansen! SAM wants a threshold here so we are going to take over this little used
175*0d39a63aSKenneth E. Jansen! error indictor for that purpose
176*0d39a63aSKenneth E. Jansen! commented for ShockError             rerrl(:,ia,6) = rerrl(:,ia,6) +
177*0d39a63aSKenneth E. Jansen! commented for ShockError     &                       tmp(:)*divqi(:,3)*divqi(:,3)
17859599516SKenneth E. Jansen          enddo
17959599516SKenneth E. Jansen       endif
18059599516SKenneth E. Jansenc
18159599516SKenneth E. Jansenc
18259599516SKenneth E. Jansenc.... --------------------------->  Tau  <-----------------------------
18359599516SKenneth E. Jansenc
18459599516SKenneth E. Jansenc.... calculate the tau matrix
18559599516SKenneth E. Jansenc
18659599516SKenneth E. Jansenc.... in the first incarnation we will ONLY have a diagonal tau here
18759599516SKenneth E. Jansen
18859599516SKenneth E. Jansen       if (itau .lt. 10) then    ! diagonal tau
18959599516SKenneth E. Jansen
19059599516SKenneth E. Jansen          call e3tau  (rho,             cp,		rmu,
19159599516SKenneth E. Jansen     &         u1,              u2,             u3,
19259599516SKenneth E. Jansen     &         con,             dxidx,          rLyi,
19359599516SKenneth E. Jansen     &         rLymi,           tau,            rk,
19459599516SKenneth E. Jansen     &         giju,            rTLS,           raLS,
19559599516SKenneth E. Jansen     &         A0inv,           dVdY,           cv)
19659599516SKenneth E. Jansen
19759599516SKenneth E. Jansen       else
19859599516SKenneth E. Jansen
19959599516SKenneth E. Jansenc.... looks like need a non-diagonal, discribed in "A new ... III"
20059599516SKenneth E. Jansenc.... by Hughes and Mallet. Original work - developed diffusive (and as
20159599516SKenneth E. Jansenc.... well advective) correction factors for 1-D a-d equation w/ hier. b.
20259599516SKenneth E. Jansen
20359599516SKenneth E. Jansen
20459599516SKenneth E. Jansen          ac1(:) = aci(:,2)
20559599516SKenneth E. Jansen          ac2(:) = aci(:,3)
20659599516SKenneth E. Jansen          ac3(:) = aci(:,4)
20759599516SKenneth E. Jansen
20859599516SKenneth E. Jansen          call e3tau_nd  (rho,       cp,  rmu,   T,
20959599516SKenneth E. Jansen     &         u1,              u2,             u3,
21059599516SKenneth E. Jansen     &         ac1,             ac2,             ac3,
21159599516SKenneth E. Jansen     &         con,             dxidx,          rLyi,
21259599516SKenneth E. Jansen     &         rLymi,           PTau,           rk,
21359599516SKenneth E. Jansen     &         giju,            rTLS,           raLS,
21459599516SKenneth E. Jansen     &         cv,              compK,          pres,
21559599516SKenneth E. Jansen     &         A0inv,           dVdY)
21659599516SKenneth E. Jansen
21759599516SKenneth E. Jansen       endif
21859599516SKenneth E. Jansen
21959599516SKenneth E. Jansen
22059599516SKenneth E. Jansen        ttim(25) = ttim(25) + secs(0.0)
22159599516SKenneth E. Jansenc
22259599516SKenneth E. Jansenc Warning:  to save space I have put the tau times the modified residual
22359599516SKenneth E. Jansenc           in rLymi and the tau times the total residual back in rLyi
22459599516SKenneth E. Jansenc
22559599516SKenneth E. Jansenc
22659599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
22759599516SKenneth E. Jansenc
22859599516SKenneth E. Jansenc.... calculate (A_i^T tau Ly)
22959599516SKenneth E. Jansenc
23059599516SKenneth E. Jansen
23159599516SKenneth E. Jansen       if(ires.ne.1) then
23259599516SKenneth E. Jansenc
23359599516SKenneth E. Jansenc  A1 * Tau L(Y):  to be hit on left with Na,x in e3wmlt
23459599516SKenneth E. Jansenc
23559599516SKenneth E. Jansen        rmi(:,1) =
23659599516SKenneth E. Jansen     &               A1(:,1,1) * rLymi(:,1)
23759599516SKenneth E. Jansen     &             + A1(:,1,2) * rLymi(:,2)
23859599516SKenneth E. Jansenc    &             + A1(:,1,3) * rLymi(:,3)
23959599516SKenneth E. Jansenc    &             + A1(:,1,4) * rLymi(:,4)
24059599516SKenneth E. Jansen     &             + A1(:,1,5) * rLymi(:,5)
24159599516SKenneth E. Jansen     &             + rmi(:,1)
24259599516SKenneth E. Jansen        rmi(:,2) =
24359599516SKenneth E. Jansen     &               A1(:,2,1) * rLymi(:,1)
24459599516SKenneth E. Jansen     &             + A1(:,2,2) * rLymi(:,2)
24559599516SKenneth E. Jansenc    &             + A1(:,2,3) * rLymi(:,3)
24659599516SKenneth E. Jansenc    &             + A1(:,2,4) * rLymi(:,4)
24759599516SKenneth E. Jansen     &             + A1(:,2,5) * rLymi(:,5)
24859599516SKenneth E. Jansen     &             + rmi(:,2)
24959599516SKenneth E. Jansen        rmi(:,3) =
25059599516SKenneth E. Jansen     &               A1(:,3,1) * rLymi(:,1)
25159599516SKenneth E. Jansen     &             + A1(:,3,2) * rLymi(:,2)
25259599516SKenneth E. Jansen     &             + A1(:,3,3) * rLymi(:,3)
25359599516SKenneth E. Jansenc    &             + A1(:,3,4) * rLymi(:,4)
25459599516SKenneth E. Jansen     &             + A1(:,3,5) * rLymi(:,5)
25559599516SKenneth E. Jansen     &             + rmi(:,3)
25659599516SKenneth E. Jansen        rmi(:,4) =
25759599516SKenneth E. Jansen     &               A1(:,4,1) * rLymi(:,1)
25859599516SKenneth E. Jansen     &             + A1(:,4,2) * rLymi(:,2)
25959599516SKenneth E. Jansenc    &             + A1(:,4,3) * rLymi(:,3)
26059599516SKenneth E. Jansen     &             + A1(:,4,4) * rLymi(:,4)
26159599516SKenneth E. Jansen     &             + A1(:,4,5) * rLymi(:,5)
26259599516SKenneth E. Jansen     &             + rmi(:,4)
26359599516SKenneth E. Jansen        rmi(:,5) =
26459599516SKenneth E. Jansen     &               A1(:,5,1) * rLymi(:,1)
26559599516SKenneth E. Jansen     &             + A1(:,5,2) * rLymi(:,2)
26659599516SKenneth E. Jansen     &             + A1(:,5,3) * rLymi(:,3)
26759599516SKenneth E. Jansen     &             + A1(:,5,4) * rLymi(:,4)
26859599516SKenneth E. Jansen     &             + A1(:,5,5) * rLymi(:,5)
26959599516SKenneth E. Jansen     &             + rmi(:,5)
27059599516SKenneth E. Jansenc
27159599516SKenneth E. Jansenc  A2 * Tau L(Y),  to be hit on left with Na,y
27259599516SKenneth E. Jansenc
27359599516SKenneth E. Jansen        rmi(:,6) =
27459599516SKenneth E. Jansen     &               A2(:,1,1) * rLymi(:,1)
27559599516SKenneth E. Jansenc    &             + A2(:,1,2) * rLymi(:,2)
27659599516SKenneth E. Jansen     &             + A2(:,1,3) * rLymi(:,3)
27759599516SKenneth E. Jansenc    &             + A2(:,1,4) * rLymi(:,4)
27859599516SKenneth E. Jansen     &             + A2(:,1,5) * rLymi(:,5)
27959599516SKenneth E. Jansen     &             + rmi(:,6)
28059599516SKenneth E. Jansen        rmi(:,7) =
28159599516SKenneth E. Jansen     &               A2(:,2,1) * rLymi(:,1)
28259599516SKenneth E. Jansen     &             + A2(:,2,2) * rLymi(:,2)
28359599516SKenneth E. Jansen     &             + A2(:,2,3) * rLymi(:,3)
28459599516SKenneth E. Jansenc    &             + A2(:,2,4) * rLymi(:,4)
28559599516SKenneth E. Jansen     &             + A2(:,2,5) * rLymi(:,5)
28659599516SKenneth E. Jansen     &             + rmi(:,7)
28759599516SKenneth E. Jansen        rmi(:,8) =
28859599516SKenneth E. Jansen     &               A2(:,3,1) * rLymi(:,1)
28959599516SKenneth E. Jansenc    &             + A2(:,3,2) * rLymi(:,2)
29059599516SKenneth E. Jansen     &             + A2(:,3,3) * rLymi(:,3)
29159599516SKenneth E. Jansenc    &             + A2(:,3,4) * rLymi(:,4)
29259599516SKenneth E. Jansen     &             + A2(:,3,5) * rLymi(:,5)
29359599516SKenneth E. Jansen     &             + rmi(:,8)
29459599516SKenneth E. Jansen        rmi(:,9) =
29559599516SKenneth E. Jansen     &               A2(:,4,1) * rLymi(:,1)
29659599516SKenneth E. Jansenc    &             + A2(:,4,2) * rLymi(:,2)
29759599516SKenneth E. Jansen     &             + A2(:,4,3) * rLymi(:,3)
29859599516SKenneth E. Jansen     &             + A2(:,4,4) * rLymi(:,4)
29959599516SKenneth E. Jansen     &             + A2(:,4,5) * rLymi(:,5)
30059599516SKenneth E. Jansen     &             + rmi(:,9)
30159599516SKenneth E. Jansen        rmi(:,10) =
30259599516SKenneth E. Jansen     &               A2(:,5,1) * rLymi(:,1)
30359599516SKenneth E. Jansen     &             + A2(:,5,2) * rLymi(:,2)
30459599516SKenneth E. Jansen     &             + A2(:,5,3) * rLymi(:,3)
30559599516SKenneth E. Jansen     &             + A2(:,5,4) * rLymi(:,4)
30659599516SKenneth E. Jansen     &             + A2(:,5,5) * rLymi(:,5)
30759599516SKenneth E. Jansen     &             + rmi(:,10)
30859599516SKenneth E. Jansenc
30959599516SKenneth E. Jansenc  A3 * Tau L(Y)  to be hit on left with Na,z
31059599516SKenneth E. Jansenc
31159599516SKenneth E. Jansen        rmi(:,11) =
31259599516SKenneth E. Jansen     &               A3(:,1,1) * rLymi(:,1)
31359599516SKenneth E. Jansenc    &             + A3(:,1,2) * rLymi(:,2)
31459599516SKenneth E. Jansenc    &             + A3(:,1,3) * rLymi(:,3)
31559599516SKenneth E. Jansen     &             + A3(:,1,4) * rLymi(:,4)
31659599516SKenneth E. Jansen     &             + A3(:,1,5) * rLymi(:,5)
31759599516SKenneth E. Jansen     &             + rmi(:,11)
31859599516SKenneth E. Jansen        rmi(:,12) =
31959599516SKenneth E. Jansen     &               A3(:,2,1) * rLymi(:,1)
32059599516SKenneth E. Jansen     &             + A3(:,2,2) * rLymi(:,2)
32159599516SKenneth E. Jansenc    &             + A3(:,2,3) * rLymi(:,3)
32259599516SKenneth E. Jansen     &             + A3(:,2,4) * rLymi(:,4)
32359599516SKenneth E. Jansen     &             + A3(:,2,5) * rLymi(:,5)
32459599516SKenneth E. Jansen     &             + rmi(:,12)
32559599516SKenneth E. Jansen        rmi(:,13) =
32659599516SKenneth E. Jansen     &               A3(:,3,1) * rLymi(:,1)
32759599516SKenneth E. Jansenc    &             + A3(:,3,2) * rLymi(:,2)
32859599516SKenneth E. Jansen     &             + A3(:,3,3) * rLymi(:,3)
32959599516SKenneth E. Jansen     &             + A3(:,3,4) * rLymi(:,4)
33059599516SKenneth E. Jansen     &             + A3(:,3,5) * rLymi(:,5)
33159599516SKenneth E. Jansen     &             + rmi(:,13)
33259599516SKenneth E. Jansen        rmi(:,14) =
33359599516SKenneth E. Jansen     &               A3(:,4,1) * rLymi(:,1)
33459599516SKenneth E. Jansenc    &             + A3(:,4,2) * rLymi(:,2)
33559599516SKenneth E. Jansenc    &             + A3(:,4,3) * rLymi(:,3)
33659599516SKenneth E. Jansen     &             + A3(:,4,4) * rLymi(:,4)
33759599516SKenneth E. Jansen     &             + A3(:,4,5) * rLymi(:,5)
33859599516SKenneth E. Jansen     &             + rmi(:,14)
33959599516SKenneth E. Jansen        rmi(:,15) =
34059599516SKenneth E. Jansen     &               A3(:,5,1) * rLymi(:,1)
34159599516SKenneth E. Jansen     &             + A3(:,5,2) * rLymi(:,2)
34259599516SKenneth E. Jansen     &             + A3(:,5,3) * rLymi(:,3)
34359599516SKenneth E. Jansen     &             + A3(:,5,4) * rLymi(:,4)
34459599516SKenneth E. Jansen     &             + A3(:,5,5) * rLymi(:,5)
34559599516SKenneth E. Jansen     &             + rmi(:,15)
34659599516SKenneth E. Jansen      endif  !ires.ne.1
34759599516SKenneth E. Jansen
34859599516SKenneth E. Jansenc
34959599516SKenneth E. Jansenc  same thing for the real residual
35059599516SKenneth E. Jansenc
35159599516SKenneth E. Jansen       if(ires.eq.3 .or. ires .eq. 1) then  ! we need the total residual
35259599516SKenneth E. Jansen        ri(:,1) =
35359599516SKenneth E. Jansen     &               A1(:,1,1) * rLyi(:,1)
35459599516SKenneth E. Jansen     &             + A1(:,1,2) * rLyi(:,2)
35559599516SKenneth E. Jansenc    &             + A1(:,1,3) * rLyi(:,3)
35659599516SKenneth E. Jansenc    &             + A1(:,1,4) * rLyi(:,4)
35759599516SKenneth E. Jansen     &             + A1(:,1,5) * rLyi(:,5)
35859599516SKenneth E. Jansen     &             + ri(:,1)
35959599516SKenneth E. Jansen        ri(:,2) =
36059599516SKenneth E. Jansen     &               A1(:,2,1) * rLyi(:,1)
36159599516SKenneth E. Jansen     &             + A1(:,2,2) * rLyi(:,2)
36259599516SKenneth E. Jansenc    &             + A1(:,2,3) * rLyi(:,3)
36359599516SKenneth E. Jansenc    &             + A1(:,2,4) * rLyi(:,4)
36459599516SKenneth E. Jansen     &             + A1(:,2,5) * rLyi(:,5)
36559599516SKenneth E. Jansen     &             + ri(:,2)
36659599516SKenneth E. Jansen        ri(:,3) =
36759599516SKenneth E. Jansen     &               A1(:,3,1) * rLyi(:,1)
36859599516SKenneth E. Jansen     &             + A1(:,3,2) * rLyi(:,2)
36959599516SKenneth E. Jansen     &             + A1(:,3,3) * rLyi(:,3)
37059599516SKenneth E. Jansenc    &             + A1(:,3,4) * rLyi(:,4)
37159599516SKenneth E. Jansen     &             + A1(:,3,5) * rLyi(:,5)
37259599516SKenneth E. Jansen     &             + ri(:,3)
37359599516SKenneth E. Jansen        ri(:,4) =
37459599516SKenneth E. Jansen     &               A1(:,4,1) * rLyi(:,1)
37559599516SKenneth E. Jansen     &             + A1(:,4,2) * rLyi(:,2)
37659599516SKenneth E. Jansenc    &             + A1(:,4,3) * rLyi(:,3)
37759599516SKenneth E. Jansen     &             + A1(:,4,4) * rLyi(:,4)
37859599516SKenneth E. Jansen     &             + A1(:,4,5) * rLyi(:,5)
37959599516SKenneth E. Jansen     &             + ri(:,4)
38059599516SKenneth E. Jansen        ri(:,5) =
38159599516SKenneth E. Jansen     &               A1(:,5,1) * rLyi(:,1)
38259599516SKenneth E. Jansen     &             + A1(:,5,2) * rLyi(:,2)
38359599516SKenneth E. Jansen     &             + A1(:,5,3) * rLyi(:,3)
38459599516SKenneth E. Jansen     &             + A1(:,5,4) * rLyi(:,4)
38559599516SKenneth E. Jansen     &             + A1(:,5,5) * rLyi(:,5)
38659599516SKenneth E. Jansen     &             + ri(:,5)
38759599516SKenneth E. Jansenc
38859599516SKenneth E. Jansen        ri(:,6) =
38959599516SKenneth E. Jansen     &               A2(:,1,1) * rLyi(:,1)
39059599516SKenneth E. Jansenc    &             + A2(:,1,2) * rLyi(:,2)
39159599516SKenneth E. Jansen     &             + A2(:,1,3) * rLyi(:,3)
39259599516SKenneth E. Jansenc    &             + A2(:,1,4) * rLyi(:,4)
39359599516SKenneth E. Jansen     &             + A2(:,1,5) * rLyi(:,5)
39459599516SKenneth E. Jansen     &             + ri(:,6)
39559599516SKenneth E. Jansen        ri(:,7) =
39659599516SKenneth E. Jansen     &               A2(:,2,1) * rLyi(:,1)
39759599516SKenneth E. Jansen     &             + A2(:,2,2) * rLyi(:,2)
39859599516SKenneth E. Jansen     &             + A2(:,2,3) * rLyi(:,3)
39959599516SKenneth E. Jansenc    &             + A2(:,2,4) * rLyi(:,4)
40059599516SKenneth E. Jansen     &             + A2(:,2,5) * rLyi(:,5)
40159599516SKenneth E. Jansen     &             + ri(:,7)
40259599516SKenneth E. Jansen        ri(:,8) =
40359599516SKenneth E. Jansen     &               A2(:,3,1) * rLyi(:,1)
40459599516SKenneth E. Jansenc    &             + A2(:,3,2) * rLyi(:,2)
40559599516SKenneth E. Jansen     &             + A2(:,3,3) * rLyi(:,3)
40659599516SKenneth E. Jansenc    &             + A2(:,3,4) * rLyi(:,4)
40759599516SKenneth E. Jansen     &             + A2(:,3,5) * rLyi(:,5)
40859599516SKenneth E. Jansen     &             + ri(:,8)
40959599516SKenneth E. Jansen        ri(:,9) =
41059599516SKenneth E. Jansen     &               A2(:,4,1) * rLyi(:,1)
41159599516SKenneth E. Jansenc    &             + A2(:,4,2) * rLyi(:,2)
41259599516SKenneth E. Jansen     &             + A2(:,4,3) * rLyi(:,3)
41359599516SKenneth E. Jansen     &             + A2(:,4,4) * rLyi(:,4)
41459599516SKenneth E. Jansen     &             + A2(:,4,5) * rLyi(:,5)
41559599516SKenneth E. Jansen     &             + ri(:,9)
41659599516SKenneth E. Jansen        ri(:,10) =
41759599516SKenneth E. Jansen     &               A2(:,5,1) * rLyi(:,1)
41859599516SKenneth E. Jansen     &             + A2(:,5,2) * rLyi(:,2)
41959599516SKenneth E. Jansen     &             + A2(:,5,3) * rLyi(:,3)
42059599516SKenneth E. Jansen     &             + A2(:,5,4) * rLyi(:,4)
42159599516SKenneth E. Jansen     &             + A2(:,5,5) * rLyi(:,5)
42259599516SKenneth E. Jansen     &             + ri(:,10)
42359599516SKenneth E. Jansen        ri(:,11) =
42459599516SKenneth E. Jansen     &               A3(:,1,1) * rLyi(:,1)
42559599516SKenneth E. Jansenc    &             + A3(:,1,2) * rLyi(:,2)
42659599516SKenneth E. Jansenc    &             + A3(:,1,3) * rLyi(:,3)
42759599516SKenneth E. Jansen     &             + A3(:,1,4) * rLyi(:,4)
42859599516SKenneth E. Jansen     &             + A3(:,1,5) * rLyi(:,5)
42959599516SKenneth E. Jansen     &             + ri(:,11)
43059599516SKenneth E. Jansen        ri(:,12) =
43159599516SKenneth E. Jansen     &               A3(:,2,1) * rLyi(:,1)
43259599516SKenneth E. Jansen     &             + A3(:,2,2) * rLyi(:,2)
43359599516SKenneth E. Jansenc    &             + A3(:,2,3) * rLyi(:,3)
43459599516SKenneth E. Jansen     &             + A3(:,2,4) * rLyi(:,4)
43559599516SKenneth E. Jansen     &             + A3(:,2,5) * rLyi(:,5)
43659599516SKenneth E. Jansen     &             + ri(:,12)
43759599516SKenneth E. Jansen        ri(:,13) =
43859599516SKenneth E. Jansen     &               A3(:,3,1) * rLyi(:,1)
43959599516SKenneth E. Jansenc    &             + A3(:,3,2) * rLyi(:,2)
44059599516SKenneth E. Jansen     &             + A3(:,3,3) * rLyi(:,3)
44159599516SKenneth E. Jansen     &             + A3(:,3,4) * rLyi(:,4)
44259599516SKenneth E. Jansen     &             + A3(:,3,5) * rLyi(:,5)
44359599516SKenneth E. Jansen     &             + ri(:,13)
44459599516SKenneth E. Jansen        ri(:,14) =
44559599516SKenneth E. Jansen     &               A3(:,4,1) * rLyi(:,1)
44659599516SKenneth E. Jansenc    &             + A3(:,4,2) * rLyi(:,2)
44759599516SKenneth E. Jansenc    &             + A3(:,4,3) * rLyi(:,3)
44859599516SKenneth E. Jansen     &             + A3(:,4,4) * rLyi(:,4)
44959599516SKenneth E. Jansen     &             + A3(:,4,5) * rLyi(:,5)
45059599516SKenneth E. Jansen     &             + ri(:,14)
45159599516SKenneth E. Jansen        ri(:,15) =
45259599516SKenneth E. Jansen     &               A3(:,5,1) * rLyi(:,1)
45359599516SKenneth E. Jansen     &             + A3(:,5,2) * rLyi(:,2)
45459599516SKenneth E. Jansen     &             + A3(:,5,3) * rLyi(:,3)
45559599516SKenneth E. Jansen     &             + A3(:,5,4) * rLyi(:,4)
45659599516SKenneth E. Jansen     &             + A3(:,5,5) * rLyi(:,5)
45759599516SKenneth E. Jansen     &             + ri(:,15)
45859599516SKenneth E. Jansenc
45959599516SKenneth E. Jansen       endif ! for ires=3 or 1
46059599516SKenneth E. Jansen
46159599516SKenneth E. Jansenc
46259599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
46359599516SKenneth E. Jansenc
46459599516SKenneth E. Jansen       if (lhs .eq. 1) then
46559599516SKenneth E. Jansenc
46659599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_1 tau) (Recall that we are using a
46759599516SKenneth E. Jansenc                                     diagonal tau here)
46859599516SKenneth E. Jansenc
46959599516SKenneth E. Jansen
47059599516SKenneth E. Jansen          if (itau.lt.10) then
47159599516SKenneth E. Jansen
47259599516SKenneth E. Jansen             do i = 1, nflow
47359599516SKenneth E. Jansen                Atau(:,i,1) = A1(:,i,1)*tau(:,1)
47459599516SKenneth E. Jansen                Atau(:,i,2) = A1(:,i,2)*tau(:,2)
47559599516SKenneth E. Jansen                Atau(:,i,3) = A1(:,i,3)*tau(:,2)
47659599516SKenneth E. Jansen                Atau(:,i,4) = A1(:,i,4)*tau(:,2)
47759599516SKenneth E. Jansen                Atau(:,i,5) = A1(:,i,5)*tau(:,3)
47859599516SKenneth E. Jansen             enddo
47959599516SKenneth E. Jansen
48059599516SKenneth E. Jansen          else
48159599516SKenneth E. Jansen
48259599516SKenneth E. Jansen             Atau = zero
48359599516SKenneth E. Jansen             do i = 1, nflow
48459599516SKenneth E. Jansen                do j = 1, nflow
48559599516SKenneth E. Jansen                   do k = 1, nflow
48659599516SKenneth E. Jansen                      Atau(:,i,j) =Atau(:,i,j) + A1(:,i,k)*PTau(:,k,j)
48759599516SKenneth E. Jansen                   enddo
48859599516SKenneth E. Jansen                enddo
48959599516SKenneth E. Jansen             enddo
49059599516SKenneth E. Jansen
49159599516SKenneth E. Jansen          endif
49259599516SKenneth E. Jansenc
49359599516SKenneth E. Jansenc.... calculate (A_1 tau A_0) (for L.S. time term of EGmass)
49459599516SKenneth E. Jansenc
49559599516SKenneth E. Jansen       do j = 1, nflow
49659599516SKenneth E. Jansen          do i = 1, nflow
49759599516SKenneth E. Jansen             A1tauA0(:,i,j) =
49859599516SKenneth E. Jansen     &            Atau(:,i,1)*A0(:,1,j) +
49959599516SKenneth E. Jansen     &            Atau(:,i,2)*A0(:,2,j) +
50059599516SKenneth E. Jansen     &            Atau(:,i,3)*A0(:,3,j) +
50159599516SKenneth E. Jansen     &            Atau(:,i,4)*A0(:,4,j) +
50259599516SKenneth E. Jansen     &            Atau(:,i,5)*A0(:,5,j)
50359599516SKenneth E. Jansen          enddo
50459599516SKenneth E. Jansen       enddo
50559599516SKenneth E. Jansenc
50659599516SKenneth E. Jansenc.... add (A_1 tau A_1) to stiff [1,1]
50759599516SKenneth E. Jansenc
50859599516SKenneth E. Jansen       do j = 1, nflow
50959599516SKenneth E. Jansen          do i = 1, nflow
51059599516SKenneth E. Jansen             stiff(:,i,j) = stiff(:,i,j) + (
51159599516SKenneth E. Jansen     &              Atau(:,i,1)*A1(:,1,j)
51259599516SKenneth E. Jansen     &            + Atau(:,i,2)*A1(:,2,j)
51359599516SKenneth E. Jansen     &            + Atau(:,i,3)*A1(:,3,j)
51459599516SKenneth E. Jansen     &            + Atau(:,i,4)*A1(:,4,j)
51559599516SKenneth E. Jansen     &            + Atau(:,i,5)*A1(:,5,j)
51659599516SKenneth E. Jansen     &            )
51759599516SKenneth E. Jansen          enddo
51859599516SKenneth E. Jansen       enddo
51959599516SKenneth E. Jansenc
52059599516SKenneth E. Jansenc.... add (A_1 tau A_2) to stiff [1,2]
52159599516SKenneth E. Jansenc
52259599516SKenneth E. Jansen       do j = 1, nflow
52359599516SKenneth E. Jansen          do i = 1, nflow
52459599516SKenneth E. Jansen             stiff(:,i,j+5) = stiff(:,i,j+5) + (
52559599516SKenneth E. Jansen     &              Atau(:,i,1)*A2(:,1,j)
52659599516SKenneth E. Jansen     &            + Atau(:,i,2)*A2(:,2,j)
52759599516SKenneth E. Jansen     &            + Atau(:,i,3)*A2(:,3,j)
52859599516SKenneth E. Jansen     &            + Atau(:,i,4)*A2(:,4,j)
52959599516SKenneth E. Jansen     &            + Atau(:,i,5)*A2(:,5,j)
53059599516SKenneth E. Jansen     &            )
53159599516SKenneth E. Jansen          enddo
53259599516SKenneth E. Jansen       enddo
53359599516SKenneth E. Jansenc
53459599516SKenneth E. Jansenc.... add (A_1 tau A_3) to stiff [1,3]
53559599516SKenneth E. Jansenc
53659599516SKenneth E. Jansen       do j = 1, nflow
53759599516SKenneth E. Jansen          do i = 1, nflow
53859599516SKenneth E. Jansen             stiff(:,i,j+10) = stiff(:,i,j+10) + (
53959599516SKenneth E. Jansen     &              Atau(:,i,1)*A3(:,1,j)
54059599516SKenneth E. Jansen     &            + Atau(:,i,2)*A3(:,2,j)
54159599516SKenneth E. Jansen     &            + Atau(:,i,3)*A3(:,3,j)
54259599516SKenneth E. Jansen     &            + Atau(:,i,4)*A3(:,4,j)
54359599516SKenneth E. Jansen     &            + Atau(:,i,5)*A3(:,5,j)
54459599516SKenneth E. Jansen     &            )
54559599516SKenneth E. Jansen          enddo
54659599516SKenneth E. Jansen       enddo
54759599516SKenneth E. Jansenc
54859599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_2 tau) (Recall that we are using a
54959599516SKenneth E. Jansenc                                     diagonal tau here)
55059599516SKenneth E. Jansenc
55159599516SKenneth E. Jansen       if (itau.lt.10) then
55259599516SKenneth E. Jansen
55359599516SKenneth E. Jansen          do i = 1, nflow
55459599516SKenneth E. Jansen             Atau(:,i,1) = A2(:,i,1)*tau(:,1)
55559599516SKenneth E. Jansen             Atau(:,i,2) = A2(:,i,2)*tau(:,2)
55659599516SKenneth E. Jansen             Atau(:,i,3) = A2(:,i,3)*tau(:,2)
55759599516SKenneth E. Jansen             Atau(:,i,4) = A2(:,i,4)*tau(:,2)
55859599516SKenneth E. Jansen             Atau(:,i,5) = A2(:,i,5)*tau(:,3)
55959599516SKenneth E. Jansen          enddo
56059599516SKenneth E. Jansen
56159599516SKenneth E. Jansen       else
56259599516SKenneth E. Jansen          Atau = zero
56359599516SKenneth E. Jansen          do i = 1, nflow
56459599516SKenneth E. Jansen             do j = 1, nflow
56559599516SKenneth E. Jansen                do k = 1, nflow
56659599516SKenneth E. Jansen                   Atau(:,i,j) = Atau(:,i,j) + A2(:,i,k)*PTau(:,k,j)
56759599516SKenneth E. Jansen                enddo
56859599516SKenneth E. Jansen             enddo
56959599516SKenneth E. Jansen          enddo
57059599516SKenneth E. Jansen
57159599516SKenneth E. Jansen       endif
57259599516SKenneth E. Jansenc
57359599516SKenneth E. Jansenc.... calculate (A_2 tau A_0) (for L.S. time term of EGmass)
57459599516SKenneth E. Jansenc
57559599516SKenneth E. Jansen       do j = 1, nflow
57659599516SKenneth E. Jansen          do i = 1, nflow
57759599516SKenneth E. Jansen             A2tauA0(:,i,j) =
57859599516SKenneth E. Jansen     &            Atau(:,i,1)*A0(:,1,j) +
57959599516SKenneth E. Jansen     &            Atau(:,i,2)*A0(:,2,j) +
58059599516SKenneth E. Jansen     &            Atau(:,i,3)*A0(:,3,j) +
58159599516SKenneth E. Jansen     &            Atau(:,i,4)*A0(:,4,j) +
58259599516SKenneth E. Jansen     &            Atau(:,i,5)*A0(:,5,j)
58359599516SKenneth E. Jansen          enddo
58459599516SKenneth E. Jansen       enddo
58559599516SKenneth E. Jansenc
58659599516SKenneth E. Jansenc.... add (A_2 tau A_1) to stiff [2,1]
58759599516SKenneth E. Jansenc
58859599516SKenneth E. Jansen       do j = 1, nflow
58959599516SKenneth E. Jansen          do i = 1, nflow
59059599516SKenneth E. Jansen             stiff(:,i+5,j) = stiff(:,i+5,j) + (
59159599516SKenneth E. Jansen     &              Atau(:,i,1)*A1(:,1,j)
59259599516SKenneth E. Jansen     &            + Atau(:,i,2)*A1(:,2,j)
59359599516SKenneth E. Jansen     &            + Atau(:,i,3)*A1(:,3,j)
59459599516SKenneth E. Jansen     &            + Atau(:,i,4)*A1(:,4,j)
59559599516SKenneth E. Jansen     &            + Atau(:,i,5)*A1(:,5,j)
59659599516SKenneth E. Jansen     &            )
59759599516SKenneth E. Jansen          enddo
59859599516SKenneth E. Jansen       enddo
59959599516SKenneth E. Jansenc
60059599516SKenneth E. Jansenc.... add (A_2 tau A_2) to stiff [2,2]
60159599516SKenneth E. Jansenc
60259599516SKenneth E. Jansen       do j = 1, nflow
60359599516SKenneth E. Jansen          do i = 1, nflow
60459599516SKenneth E. Jansen             stiff(:,i+5,j+5) = stiff(:,i+5,j+5) + (
60559599516SKenneth E. Jansen     &              Atau(:,i,1)*A2(:,1,j)
60659599516SKenneth E. Jansen     &            + Atau(:,i,2)*A2(:,2,j)
60759599516SKenneth E. Jansen     &            + Atau(:,i,3)*A2(:,3,j)
60859599516SKenneth E. Jansen     &            + Atau(:,i,4)*A2(:,4,j)
60959599516SKenneth E. Jansen     &            + Atau(:,i,5)*A2(:,5,j)
61059599516SKenneth E. Jansen     &            )
61159599516SKenneth E. Jansen          enddo
61259599516SKenneth E. Jansen       enddo
61359599516SKenneth E. Jansenc
61459599516SKenneth E. Jansenc.... add (A_2 tau A_3) to stiff [2,3]
61559599516SKenneth E. Jansenc
61659599516SKenneth E. Jansen       do j = 1, nflow
61759599516SKenneth E. Jansen          do i = 1, nflow
61859599516SKenneth E. Jansen             stiff(:,i+5,j+10) = stiff(:,i+5,j+10) + (
61959599516SKenneth E. Jansen     &              Atau(:,i,1)*A3(:,1,j)
62059599516SKenneth E. Jansen     &            + Atau(:,i,2)*A3(:,2,j)
62159599516SKenneth E. Jansen     &            + Atau(:,i,3)*A3(:,3,j)
62259599516SKenneth E. Jansen     &            + Atau(:,i,4)*A3(:,4,j)
62359599516SKenneth E. Jansen     &            + Atau(:,i,5)*A3(:,5,j)
62459599516SKenneth E. Jansen     &            )
62559599516SKenneth E. Jansen          enddo
62659599516SKenneth E. Jansen       enddo
62759599516SKenneth E. Jansenc
62859599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_3 tau) (Recall that we are using a
62959599516SKenneth E. Jansenc                                     diagonal tau here)
63059599516SKenneth E. Jansenc
63159599516SKenneth E. Jansen       if (itau.lt.10) then
63259599516SKenneth E. Jansen
63359599516SKenneth E. Jansen          do i = 1, nflow
63459599516SKenneth E. Jansen             Atau(:,i,1) = A3(:,i,1)*tau(:,1)
63559599516SKenneth E. Jansen             Atau(:,i,2) = A3(:,i,2)*tau(:,2)
63659599516SKenneth E. Jansen             Atau(:,i,3) = A3(:,i,3)*tau(:,2)
63759599516SKenneth E. Jansen             Atau(:,i,4) = A3(:,i,4)*tau(:,2)
63859599516SKenneth E. Jansen             Atau(:,i,5) = A3(:,i,5)*tau(:,3)
63959599516SKenneth E. Jansen          enddo
64059599516SKenneth E. Jansen
64159599516SKenneth E. Jansen       else
64259599516SKenneth E. Jansen          Atau = zero
64359599516SKenneth E. Jansen          do i = 1, nflow
64459599516SKenneth E. Jansen             do j = 1, nflow
64559599516SKenneth E. Jansen                do k = 1, nflow
64659599516SKenneth E. Jansen                   Atau(:,i,j) = Atau(:,i,j) + A3(:,i,k)*PTau(:,k,j)
64759599516SKenneth E. Jansen                enddo
64859599516SKenneth E. Jansen             enddo
64959599516SKenneth E. Jansen          enddo
65059599516SKenneth E. Jansen
65159599516SKenneth E. Jansen       endif
65259599516SKenneth E. Jansenc
65359599516SKenneth E. Jansenc.... calculate (A_3 tau A_0) (for L.S. time term of EGmass)
65459599516SKenneth E. Jansenc
65559599516SKenneth E. Jansen       do j = 1, nflow
65659599516SKenneth E. Jansen          do i = 1, nflow
65759599516SKenneth E. Jansen             A3tauA0(:,i,j) =
65859599516SKenneth E. Jansen     &            Atau(:,i,1)*A0(:,1,j) +
65959599516SKenneth E. Jansen     &            Atau(:,i,2)*A0(:,2,j) +
66059599516SKenneth E. Jansen     &            Atau(:,i,3)*A0(:,3,j) +
66159599516SKenneth E. Jansen     &            Atau(:,i,4)*A0(:,4,j) +
66259599516SKenneth E. Jansen     &            Atau(:,i,5)*A0(:,5,j)
66359599516SKenneth E. Jansen          enddo
66459599516SKenneth E. Jansen       enddo
66559599516SKenneth E. Jansenc
66659599516SKenneth E. Jansenc.... add (A_3 tau A_1) to stiff [3,1]
66759599516SKenneth E. Jansenc
66859599516SKenneth E. Jansen       do j = 1, nflow
66959599516SKenneth E. Jansen          do i = 1, nflow
67059599516SKenneth E. Jansen             stiff(:,i+10,j) = stiff(:,i+10,j) + (
67159599516SKenneth E. Jansen     &              Atau(:,i,1)*A1(:,1,j)
67259599516SKenneth E. Jansen     &            + Atau(:,i,2)*A1(:,2,j)
67359599516SKenneth E. Jansen     &            + Atau(:,i,3)*A1(:,3,j)
67459599516SKenneth E. Jansen     &            + Atau(:,i,4)*A1(:,4,j)
67559599516SKenneth E. Jansen     &            + Atau(:,i,5)*A1(:,5,j)
67659599516SKenneth E. Jansen     &            )
67759599516SKenneth E. Jansen          enddo
67859599516SKenneth E. Jansen       enddo
67959599516SKenneth E. Jansenc
68059599516SKenneth E. Jansenc.... add (A_3 tau A_2) to stiff [3,2]
68159599516SKenneth E. Jansenc
68259599516SKenneth E. Jansen       do j = 1, nflow
68359599516SKenneth E. Jansen          do i = 1, nflow
68459599516SKenneth E. Jansen             stiff(:,i+10,j+5) = stiff(:,i+10,j+5) + (
68559599516SKenneth E. Jansen     &              Atau(:,i,1)*A2(:,1,j)
68659599516SKenneth E. Jansen     &            + Atau(:,i,2)*A2(:,2,j)
68759599516SKenneth E. Jansen     &            + Atau(:,i,3)*A2(:,3,j)
68859599516SKenneth E. Jansen     &            + Atau(:,i,4)*A2(:,4,j)
68959599516SKenneth E. Jansen     &            + Atau(:,i,5)*A2(:,5,j)
69059599516SKenneth E. Jansen     &            )
69159599516SKenneth E. Jansen          enddo
69259599516SKenneth E. Jansen       enddo
69359599516SKenneth E. Jansenc
69459599516SKenneth E. Jansenc.... add (A_3 tau A_3) to stiff [3,3]
69559599516SKenneth E. Jansenc
69659599516SKenneth E. Jansen       do j = 1, nflow
69759599516SKenneth E. Jansen          do i = 1, nflow
69859599516SKenneth E. Jansen             stiff(:,i+10,j+10) = stiff(:,i+10,j+10) + (
69959599516SKenneth E. Jansen     &              Atau(:,i,1)*A3(:,1,j)
70059599516SKenneth E. Jansen     &            + Atau(:,i,2)*A3(:,2,j)
70159599516SKenneth E. Jansen     &            + Atau(:,i,3)*A3(:,3,j)
70259599516SKenneth E. Jansen     &            + Atau(:,i,4)*A3(:,4,j)
70359599516SKenneth E. Jansen     &            + Atau(:,i,5)*A3(:,5,j)
70459599516SKenneth E. Jansen     &            )
70559599516SKenneth E. Jansen          enddo
70659599516SKenneth E. Jansen       enddo
70759599516SKenneth E. Jansenc
70859599516SKenneth E. Jansenc.... add least squares time term to the LHS tangent mass matrix
70959599516SKenneth E. Jansenc
71059599516SKenneth E. Jansenc
71159599516SKenneth E. Jansenc.... loop through rows (nodes i)
71259599516SKenneth E. Jansenc
71359599516SKenneth E. Jansen       do i = 1, nshl
71459599516SKenneth E. Jansen          i0 = nflow * (i - 1)
71559599516SKenneth E. Jansenc
71659599516SKenneth E. Jansenc.... first calculate (Atau) <-- (N_a,i A_i tau A_0)
71759599516SKenneth E. Jansenc     ( use Atau to conserve space )
71859599516SKenneth E. Jansenc
71959599516SKenneth E. Jansen          do idof = 1, nflow
72059599516SKenneth E. Jansen             do jdof = 1, nflow
72159599516SKenneth E. Jansen                Atau(:,idof,jdof) =
72259599516SKenneth E. Jansen     &               shg(:,i,1) * A1tauA0(:,idof,jdof) +
72359599516SKenneth E. Jansen     &               shg(:,i,2) * A2tauA0(:,idof,jdof) +
72459599516SKenneth E. Jansen     &               shg(:,i,3) * A3tauA0(:,idof,jdof)
72559599516SKenneth E. Jansen             enddo
72659599516SKenneth E. Jansen          enddo
72759599516SKenneth E. Jansenc
72859599516SKenneth E. Jansenc.... loop through column nodes, add (N_a,i A_i tau N_b) to EGmass
72959599516SKenneth E. Jansenc
73059599516SKenneth E. Jansen          do j = 1, nshl
73159599516SKenneth E. Jansen             j0 = nflow * (j - 1)
73259599516SKenneth E. Jansenc
73359599516SKenneth E. Jansenc.... compute the factors
73459599516SKenneth E. Jansenc
73559599516SKenneth E. Jansen            fact = shape(:,j) * WdetJ * almi/gami/alfi*dtgl
73659599516SKenneth E. Jansenc
73759599516SKenneth E. Jansenc.... loop through d.o.f.'s
73859599516SKenneth E. Jansenc
73959599516SKenneth E. Jansen            do idof = 1, nflow
74059599516SKenneth E. Jansen               il = i0 + idof
74159599516SKenneth E. Jansen
74259599516SKenneth E. Jansen               EGmass(:,il,j0+1) = EGmass(:,il,j0+1) +
74359599516SKenneth E. Jansen     &                             fact * Atau(:,idof,1)
74459599516SKenneth E. Jansen               EGmass(:,il,j0+2) = EGmass(:,il,j0+2) +
74559599516SKenneth E. Jansen     &                             fact * Atau(:,idof,2)
74659599516SKenneth E. Jansen               EGmass(:,il,j0+3) = EGmass(:,il,j0+3) +
74759599516SKenneth E. Jansen     &                             fact * Atau(:,idof,3)
74859599516SKenneth E. Jansen               EGmass(:,il,j0+4) = EGmass(:,il,j0+4) +
74959599516SKenneth E. Jansen     &                             fact * Atau(:,idof,4)
75059599516SKenneth E. Jansen               EGmass(:,il,j0+5) = EGmass(:,il,j0+5) +
75159599516SKenneth E. Jansen     &                             fact * Atau(:,idof,5)
75259599516SKenneth E. Jansen            enddo
75359599516SKenneth E. Jansenc
75459599516SKenneth E. Jansenc.... end loop on column nodes
75559599516SKenneth E. Jansenc
75659599516SKenneth E. Jansen         enddo
75759599516SKenneth E. Jansenc
75859599516SKenneth E. Jansenc.... end loop on row nodes
75959599516SKenneth E. Jansenc
76059599516SKenneth E. Jansen       enddo
76159599516SKenneth E. Jansenc
76259599516SKenneth E. Jansenc.... end LHS computation
76359599516SKenneth E. Jansenc
76459599516SKenneth E. Jansen       endif
76559599516SKenneth E. Jansen
76659599516SKenneth E. Jansen       ttim(24) = ttim(24) + secs(0.0)
76759599516SKenneth E. Jansenc
76859599516SKenneth E. Jansenc.... return
76959599516SKenneth E. Jansenc
77059599516SKenneth E. Jansen        return
77159599516SKenneth E. Jansen        end
77259599516SKenneth E. Jansenc
77359599516SKenneth E. Jansenc
77459599516SKenneth E. Jansenc
77559599516SKenneth E. Jansen        subroutine e3LSSclr  (A1t,     A2t,     A3t,
77659599516SKenneth E. Jansen     &                        rho,     rmu,     rTLSt,
77759599516SKenneth E. Jansen     &                        u1,      u2,      u3,
77859599516SKenneth E. Jansen     &                        rLyti,   dxidx,   raLSt,
77959599516SKenneth E. Jansen     &                        rti,     rk,      giju,
78059599516SKenneth E. Jansen     &                        acti,    A0t,
78159599516SKenneth E. Jansen     &                        shape,   shg,
78259599516SKenneth E. Jansen     &                        EGmasst, stifft,  WdetJ,
78359599516SKenneth E. Jansen     &                        srcp)
78459599516SKenneth E. Jansenc
78559599516SKenneth E. Jansenc----------------------------------------------------------------------
78659599516SKenneth E. Jansenc
78759599516SKenneth E. Jansenc This routine calculates the contribution of the least-squares
78859599516SKenneth E. Jansenc operator to the RHS vector and LHS tangent matrix. The temporary
78959599516SKenneth E. Jansenc results are put in ri.
79059599516SKenneth E. Jansenc
79159599516SKenneth E. Jansenc input:
79259599516SKenneth E. Jansenc  A0t    (npro)              : A_0
79359599516SKenneth E. Jansenc  A1t    (npro)              : A_1
79459599516SKenneth E. Jansenc  A2t    (npro)              : A_2
79559599516SKenneth E. Jansenc  A3t    (npro)              : A_3
79659599516SKenneth E. Jansenc  acti   (npro)              : time-deriv. of Sclr
79759599516SKenneth E. Jansenc  rho    (npro)              : density
79859599516SKenneth E. Jansenc  rmu    (npro)              : molecular viscosity
79959599516SKenneth E. Jansenc  rk     (npro)              : kinetic energy
80059599516SKenneth E. Jansenc  u1     (npro)              : x1-velocity component
80159599516SKenneth E. Jansenc  u2     (npro)              : x2-velocity component
80259599516SKenneth E. Jansenc  u3     (npro)              : x3-velocity component
80359599516SKenneth E. Jansenc  rLyti  (npro)              : least-squares residual vector
80459599516SKenneth E. Jansenc  dxidx  (npro,nsd,nsd)      : inverse of deformation gradient
80559599516SKenneth E. Jansenc  taut   (npro)              : stability parameter
80659599516SKenneth E. Jansenc  rLyti  (npro)              : convective portion of least-squares
80759599516SKenneth E. Jansenc                               residual vector
80859599516SKenneth E. Jansenc  divqti (npro,1)            : divergence of diffusive flux
80959599516SKenneth E. Jansenc  shape  (npro,nshl)         : element shape functions
81059599516SKenneth E. Jansenc  shg    (npro,nshl,nsd)     : global element shape function grads
81159599516SKenneth E. Jansenc  WdetJ  (npro)              : weighted jacobian determinant
81259599516SKenneth E. Jansenc  stifft (npro,nsd,nsd)      : stiffness matrix
81359599516SKenneth E. Jansenc  EGmasst(npro,nshape,nshape): partial mass matrix
81459599516SKenneth E. Jansenc
81559599516SKenneth E. Jansenc output:
81659599516SKenneth E. Jansenc  rti    (npro,nsd+1)        : partial residual
81759599516SKenneth E. Jansenc  EGmasst(npro,nshape,nshape): partial mass matrix
81859599516SKenneth E. Jansenc
81959599516SKenneth E. Jansenc
82059599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2ls.f)
82159599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90)
82259599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. Prim. Var. with Diag Tau
82359599516SKenneth E. Jansenc----------------------------------------------------------------------
82459599516SKenneth E. Jansenc
82559599516SKenneth E. Jansen        include "common.h"
82659599516SKenneth E. Jansen
82759599516SKenneth E. Jansenc
82859599516SKenneth E. Jansenc  passed arrays
82959599516SKenneth E. Jansenc
83059599516SKenneth E. Jansen        dimension A1t(npro),                 A2t(npro),
83159599516SKenneth E. Jansen     &            A3t(npro),
83259599516SKenneth E. Jansen     &            A0t(npro),                 rho(npro),
83359599516SKenneth E. Jansen     &            acti(npro),                rmu(npro),
83459599516SKenneth E. Jansen     &            u1(npro),                  u2(npro),
83559599516SKenneth E. Jansen     &            u3(npro),                  rk(npro),
83659599516SKenneth E. Jansen     &            rLyti(npro),               dxidx(npro,nsd,nsd),
83759599516SKenneth E. Jansen     &            taut(npro),                raLSt(npro),
83859599516SKenneth E. Jansen     &            rti(npro,nsd+1),           rTLSt(npro),
83959599516SKenneth E. Jansen     &            stifft(npro,3,3),          giju(npro,6),
84059599516SKenneth E. Jansen     &            EGmasst(npro,nshape,nshape),
84159599516SKenneth E. Jansen     &            shape(npro,nshl),
84259599516SKenneth E. Jansen     &            shg(npro,nshl,nsd),        WdetJ(npro),
84359599516SKenneth E. Jansen     &            srcp(npro)
84459599516SKenneth E. Jansenc
84559599516SKenneth E. Jansenc local arrays
84659599516SKenneth E. Jansenc
84759599516SKenneth E. Jansen        dimension rLymti(npro),          Ataut(npro),
84859599516SKenneth E. Jansen     &            A1tautA0(npro),        A2tautA0(npro),
84959599516SKenneth E. Jansen     &            A3tautA0(npro),        fact(npro)
85059599516SKenneth E. Jansen
85159599516SKenneth E. Jansen        ttim(24) = ttim(24) - tmr()
85259599516SKenneth E. Jansenc
85359599516SKenneth E. Jansen       if(ivart.lt.2) return
85459599516SKenneth E. Jansenc
85559599516SKenneth E. Jansenc last step to the least squares is adding the time term.  So that we
85659599516SKenneth E. Jansenc only have to localize one vector for each Krylov vector the modified
85759599516SKenneth E. Jansenc residual is quite different from the total residual.
85859599516SKenneth E. Jansenc
85959599516SKenneth E. Jansenc
86059599516SKenneth E. Jansenc the modified residual
86159599516SKenneth E. Jansenc
86259599516SKenneth E. Jansen       fct1=almi/gami/alfi*dtgl
86359599516SKenneth E. Jansenc
86459599516SKenneth E. Jansenc  add possibility of not including time term
86559599516SKenneth E. Jansenc
86659599516SKenneth E. Jansenc       if(idiff.ne.-1)
86759599516SKenneth E. Jansenc       rLymti = rLyti + fct1*duti
86859599516SKenneth E. Jansen
86959599516SKenneth E. Jansen       if((ires.eq.1 .or. ires .eq. 3).and. idiff.ne.-1) then
87059599516SKenneth E. Jansen
87159599516SKenneth E. Jansen        rLyti(:) = rLyti(:) + A0t(:)*acti(:)
87259599516SKenneth E. Jansen
87359599516SKenneth E. Jansen      endif
87459599516SKenneth E. Jansenc
87559599516SKenneth E. Jansenc.... subtract div(q) from the least squares term
87659599516SKenneth E. Jansenc
87759599516SKenneth E. Jansenc      if ((idiff >= 1).and.(ires==3 .or. ires==1)) then
87859599516SKenneth E. Jansenc         rLyi(:) = rLyi(:) - divqti(:)
87959599516SKenneth E. Jansenc      endif
88059599516SKenneth E. Jansenc
88159599516SKenneth E. Jansenc.... --------------------------->  Tau  <-----------------------------
88259599516SKenneth E. Jansenc
88359599516SKenneth E. Jansenc.... calculate the tau matrix
88459599516SKenneth E. Jansenc
88559599516SKenneth E. Jansen
88659599516SKenneth E. Jansenc
88759599516SKenneth E. Jansenc.... we will use the same tau as used for momentum equations here
88859599516SKenneth E. Jansenc
88959599516SKenneth E. Jansen        ttim(25) = ttim(25) - tmr()
89059599516SKenneth E. Jansen
89159599516SKenneth E. Jansen          call e3tauSclr(rho,         rmu,        A0t,
89259599516SKenneth E. Jansen     &                   u1,          u2,         u3,
89359599516SKenneth E. Jansen     &                   dxidx,       rLyti,      rLymti,
89459599516SKenneth E. Jansen     &                   taut,        rk,         raLSt,
89559599516SKenneth E. Jansen     &                   rTLSt,       giju)
89659599516SKenneth E. Jansen
89759599516SKenneth E. Jansen        ttim(25) = ttim(25) + tmr()
89859599516SKenneth E. Jansenc
89959599516SKenneth E. Jansenc Warning:  to save space I have put the tau times the modified residual
90059599516SKenneth E. Jansenc           in rLymi and the tau times the total residual back in rLyi
90159599516SKenneth E. Jansenc
90259599516SKenneth E. Jansenc
90359599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
90459599516SKenneth E. Jansenc
90559599516SKenneth E. Jansenc.... calculate (A_i^T tau Ly)
90659599516SKenneth E. Jansenc
90759599516SKenneth E. Jansen
90859599516SKenneth E. Jansenc      if(ires.ne.1) then
90959599516SKenneth E. Jansenc
91059599516SKenneth E. Jansenc  A1 * Tau L(Y):  to be hit on left with Na,x in e3wmlt
91159599516SKenneth E. Jansenc
91259599516SKenneth E. Jansenc        rmti(:,1) =   A1t(:) * rLymti(:)
91359599516SKenneth E. Jansenc
91459599516SKenneth E. Jansenc
91559599516SKenneth E. Jansenc  A2 * Tau L(Y),  to be hit on left with Na,y
91659599516SKenneth E. Jansenc
91759599516SKenneth E. Jansenc        rmti(:,2) = A2t(:) * rLymti(:)
91859599516SKenneth E. Jansenc
91959599516SKenneth E. Jansenc
92059599516SKenneth E. Jansenc  A3 * Tau L(Y)  to be hit on left with Na,z
92159599516SKenneth E. Jansenc
92259599516SKenneth E. Jansenc        rmti(:,3) = A3t(:) * rLymti(:)
92359599516SKenneth E. Jansenc
92459599516SKenneth E. Jansenc      endif  !ires.ne.1
92559599516SKenneth E. Jansen
92659599516SKenneth E. Jansenc
92759599516SKenneth E. Jansenc  same thing for the real residual
92859599516SKenneth E. Jansenc
92959599516SKenneth E. Jansen       if(ires.eq.3 .or. ires .eq. 1) then  ! we need the total residual
93059599516SKenneth E. Jansen        rti(:,1) = rti(:,1) + A1t(:) * rLyti(:)
93159599516SKenneth E. Jansen
93259599516SKenneth E. Jansen        rti(:,2) = rti(:,2) + A2t(:) * rLyti(:)
93359599516SKenneth E. Jansen
93459599516SKenneth E. Jansen        rti(:,3) = rti(:,3) + A3t(:) * rLyti(:)
93559599516SKenneth E. Jansen
93659599516SKenneth E. Jansen       endif ! for ires=3 or 1
93759599516SKenneth E. Jansen
93859599516SKenneth E. Jansenc
93959599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
94059599516SKenneth E. Jansenc
94159599516SKenneth E. Jansen       if (lhs .eq. 1) then
94259599516SKenneth E. Jansenc
94359599516SKenneth E. Jansenc
94459599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_1 tau)
94559599516SKenneth E. Jansenc
94659599516SKenneth E. Jansen
94759599516SKenneth E. Jansen          Ataut(:) = A1t(:)*taut(:)
94859599516SKenneth E. Jansen
94959599516SKenneth E. Jansenc
95059599516SKenneth E. Jansenc.... calculate (A_1 tau (A_0-srcp)) (for L.S. time term of EGmass)
95159599516SKenneth E. Jansenc
95259599516SKenneth E. Jansen
95359599516SKenneth E. Jansen             A1tautA0(:) = Ataut(:)*(a0t(:)*fct1-srcp(:))
95459599516SKenneth E. Jansen
95559599516SKenneth E. Jansenc
95659599516SKenneth E. Jansenc.... add (A_1 tau A_1) to stiff [1,1]
95759599516SKenneth E. Jansenc
95859599516SKenneth E. Jansen
95959599516SKenneth E. Jansen             stifft(:,1,1) = stifft(:,1,1) + Ataut(:)*A1t(:)
96059599516SKenneth E. Jansenc            stifft(:,1,1) = Ataut(:)*A1t(:)
96159599516SKenneth E. Jansenc
96259599516SKenneth E. Jansenc.... add (A_1 tau A_2) to stiff [1,2]
96359599516SKenneth E. Jansenc
96459599516SKenneth E. Jansen
96559599516SKenneth E. Jansen             stifft(:,1,2) = stifft(:,1,2) + Ataut(:)*A2t(:)
96659599516SKenneth E. Jansenc            stifft(:,1,2) =  Ataut(:)*A2t(:)
96759599516SKenneth E. Jansenc
96859599516SKenneth E. Jansenc.... add (A_1 tau A_3) to stiff [1,3]
96959599516SKenneth E. Jansenc
97059599516SKenneth E. Jansen
97159599516SKenneth E. Jansen             stifft(:,1,3) = stifft(:,1,3) + Ataut(:)*A3t(:)
97259599516SKenneth E. Jansenc            stifft(:,1,3) =  Ataut(:)*A3t(:)
97359599516SKenneth E. Jansenc
97459599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_2 tau)
97559599516SKenneth E. Jansenc
97659599516SKenneth E. Jansen
97759599516SKenneth E. Jansen          Ataut(:) = A2t(:)*taut(:)
97859599516SKenneth E. Jansen
97959599516SKenneth E. Jansenc
98059599516SKenneth E. Jansenc.... calculate (A_2 tau (A_0-srcp)) (for L.S. time term of EGmass)
98159599516SKenneth E. Jansenc
98259599516SKenneth E. Jansen
98359599516SKenneth E. Jansen             A2tautA0(:) = Ataut(:)*(a0t(:)*fct1-srcp(:))
98459599516SKenneth E. Jansen
98559599516SKenneth E. Jansenc
98659599516SKenneth E. Jansenc.... add (A_2 tau A_1) to stiff [2,1]
98759599516SKenneth E. Jansenc
98859599516SKenneth E. Jansen
98959599516SKenneth E. Jansen             stifft(:,2,1) = stifft(:,1,2)
99059599516SKenneth E. Jansenc
99159599516SKenneth E. Jansenc.... add (A_2 tau A_2) to stiff [2,2]
99259599516SKenneth E. Jansenc
99359599516SKenneth E. Jansen
99459599516SKenneth E. Jansen             stifft(:,2,2) = stifft(:,2,2) + Ataut(:)*A2t(:)
99559599516SKenneth E. Jansen
99659599516SKenneth E. Jansenc
99759599516SKenneth E. Jansenc.... add (A_2 tau A_3) to stiff [2,3]
99859599516SKenneth E. Jansenc
99959599516SKenneth E. Jansen
100059599516SKenneth E. Jansen             stifft(:,2,3) = stifft(:,2,3) + Ataut(:)*A3t(:)
100159599516SKenneth E. Jansen
100259599516SKenneth E. Jansenc
100359599516SKenneth E. Jansenc.... calculate (Atau) <-- (A_3 tau)
100459599516SKenneth E. Jansenc
100559599516SKenneth E. Jansen
100659599516SKenneth E. Jansen          Ataut(:) = A3t(:)*taut(:)
100759599516SKenneth E. Jansen
100859599516SKenneth E. Jansenc
100959599516SKenneth E. Jansenc.... calculate (A_3 tau (A_0-srcp)) (for L.S. time term of EGmass)
101059599516SKenneth E. Jansenc
101159599516SKenneth E. Jansen
101259599516SKenneth E. Jansen             A3tautA0(:) = Ataut(:)*(a0t(:)*fct1-srcp(:))
101359599516SKenneth E. Jansen
101459599516SKenneth E. Jansenc
101559599516SKenneth E. Jansenc.... add (A_3 tau A_1) to stiff [3,1]
101659599516SKenneth E. Jansenc
101759599516SKenneth E. Jansen
101859599516SKenneth E. Jansen             stifft(:,3,1) = stifft(:,1,3)
101959599516SKenneth E. Jansen
102059599516SKenneth E. Jansenc
102159599516SKenneth E. Jansenc.... add (A_3 tau A_2) to stiff [3,2]
102259599516SKenneth E. Jansenc
102359599516SKenneth E. Jansen
102459599516SKenneth E. Jansen             stifft(:,3,2) = stifft(:,2,3)
102559599516SKenneth E. Jansen
102659599516SKenneth E. Jansenc
102759599516SKenneth E. Jansenc.... add (A_3 tau A_3) to stiff [3,3]
102859599516SKenneth E. Jansenc
102959599516SKenneth E. Jansen
103059599516SKenneth E. Jansen             stifft(:,3,3) = stifft(:,3,3) + Ataut(:)*A3t(:)
103159599516SKenneth E. Jansen
103259599516SKenneth E. Jansenc
103359599516SKenneth E. Jansenc.... add least squares time term to the LHS tangent mass matrix
103459599516SKenneth E. Jansenc
103559599516SKenneth E. Jansenc
103659599516SKenneth E. Jansenc.... loop through rows (nodes i)
103759599516SKenneth E. Jansenc
103859599516SKenneth E. Jansen       do ia = 1, nshl
103959599516SKenneth E. Jansenc
104059599516SKenneth E. Jansenc.... first calculate (Atau) <-- (N_a,i A_i tau A_0)
104159599516SKenneth E. Jansenc     ( use Atau to conserve space )
104259599516SKenneth E. Jansenc
104359599516SKenneth E. Jansen
104459599516SKenneth E. Jansen                Ataut(:) =
104559599516SKenneth E. Jansen     &               shg(:,ia,1) * A1tautA0(:) +
104659599516SKenneth E. Jansen     &               shg(:,ia,2) * A2tautA0(:) +
104759599516SKenneth E. Jansen     &               shg(:,ia,3) * A3tautA0(:)
104859599516SKenneth E. Jansen
104959599516SKenneth E. Jansenc
105059599516SKenneth E. Jansenc.... loop through column nodes, add (N_a,i A_i tau N_b) to EGmass
105159599516SKenneth E. Jansenc
105259599516SKenneth E. Jansen          do jb = 1, nshl
105359599516SKenneth E. Jansen
105459599516SKenneth E. Jansen            fact = shape(:,jb) * WdetJ
105559599516SKenneth E. Jansen
105659599516SKenneth E. Jansen            EGmasst(:,ia,jb) = EGmasst(:,ia,jb) + fact * Ataut(:)
105759599516SKenneth E. Jansen
105859599516SKenneth E. Jansenc
105959599516SKenneth E. Jansenc.... end loop on column nodes
106059599516SKenneth E. Jansenc
106159599516SKenneth E. Jansen
106259599516SKenneth E. Jansen          enddo
106359599516SKenneth E. Jansenc
106459599516SKenneth E. Jansenc.... end loop on row nodes
106559599516SKenneth E. Jansenc
106659599516SKenneth E. Jansen       enddo
106759599516SKenneth E. Jansenc
106859599516SKenneth E. Jansenc.... end LHS computation
106959599516SKenneth E. Jansenc
107059599516SKenneth E. Jansen       endif
107159599516SKenneth E. Jansen
107259599516SKenneth E. Jansen       ttim(24) = ttim(24) + tmr()
107359599516SKenneth E. Jansenc
107459599516SKenneth E. Jansenc.... return
107559599516SKenneth E. Jansenc
107659599516SKenneth E. Jansen        return
107759599516SKenneth E. Jansen        end
107859599516SKenneth E. Jansen
1079