xref: /phasta/phSolver/compressible/e3wmlt.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
159599516SKenneth E. Jansen        subroutine e3wmlt (shp,    shg,    WdetJ,
259599516SKenneth E. Jansen     &                     ri,     rmi,    rl,
359599516SKenneth E. Jansen     &                     rml,    stiff,  EGmass )
459599516SKenneth E. Jansenc
559599516SKenneth E. Jansenc----------------------------------------------------------------------
659599516SKenneth E. Jansenc
759599516SKenneth E. Jansenc Up to now most of the terms have not been multiplied by the
859599516SKenneth E. Jansenc shape function from the weight space.  Now that we have collected
959599516SKenneth E. Jansenc all the terms that the shape function (and its derivatives for the
1059599516SKenneth E. Jansenc terms that were integrated by parts) multiplies, in this routine
1159599516SKenneth E. Jansenc we carry out that multiplication. After these operations we will
1259599516SKenneth E. Jansenc have this quadrature points contribution to the integral for the
1359599516SKenneth E. Jansenc residual (i.e.  g^e_b(xi^l) D(xi^l) QW(xi^l)  where e is the element,
1459599516SKenneth E. Jansenc b is the local node number on the element, l is the quadrature point
1559599516SKenneth E. Jansenc D is the determinate of the Jacobian of the mapping, and QW is this
1659599516SKenneth E. Jansenc quadrature points weight....WHEW).  When we add up all of the
1759599516SKenneth E. Jansenc integration points we get G^e_b which we will assemble in the
1859599516SKenneth E. Jansenc subroutine LOCAL to form G_B.
1959599516SKenneth E. Jansenc
2059599516SKenneth E. Jansenc This routine also forms the LHS contribution from the LS term
2159599516SKenneth E. Jansenc and the diffusion term which has been partially constructed and
2259599516SKenneth E. Jansenc placed in stiff.  Those familiar with elasticity might recognize
2359599516SKenneth E. Jansenc this naming convention since this is like a stiffness matrix that
2459599516SKenneth E. Jansenc if you had a linear problem would be calculated once and saved for
2559599516SKenneth E. Jansenc all time.
2659599516SKenneth E. Jansenc
2759599516SKenneth E. Jansenc    ri:  LS, Diffusion, Convective and mass,
2859599516SKenneth E. Jansenc   rmi:  LS, Diffusion and mass,
2959599516SKenneth E. Jansenc stiff:  LS, Diffusion.
3059599516SKenneth E. Jansenc
3159599516SKenneth E. Jansenc input:
3259599516SKenneth E. Jansenc  shp    (nshl)                 : element shape-functions
3359599516SKenneth E. Jansenc  shg    (npro,nshl,nsd)        : element grad-shape-functions
3459599516SKenneth E. Jansenc  WdetJ  (npro)                   : weighted Jacobian
3559599516SKenneth E. Jansenc  ri     (npro,nflow*(nsd+1))      : partial residual
3659599516SKenneth E. Jansenc  rmi    (npro,nflow*(nsd+1))      : partial modified residual
3759599516SKenneth E. Jansenc  stiff  (npro,nsd*nflow,nsd*nflow) : stiffness matrix
3859599516SKenneth E. Jansenc                                    ( K_ij + A_i tau A_j )
3959599516SKenneth E. Jansenc
4059599516SKenneth E. Jansenc output:
4159599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)       : residual
4259599516SKenneth E. Jansenc  rml    (npro,nshl,nflow)       : modified residual
4359599516SKenneth E. Jansenc  EGmass (npro,nedof,nedof)       : element LHS tangent mass matrix
4459599516SKenneth E. Jansenc
4559599516SKenneth E. Jansenc
4659599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2assm.f)
4759599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
4859599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997  Prim. variables
4959599516SKenneth E. Jansenc----------------------------------------------------------------------
5059599516SKenneth E. Jansenc
5159599516SKenneth E. Jansen        include "common.h"
5259599516SKenneth E. Jansenc
5359599516SKenneth E. Jansen        dimension shp(npro,nshl),
5459599516SKenneth E. Jansen     &            shg(npro,nshl,nsd),
5559599516SKenneth E. Jansen     &            WdetJ(npro),             ri(npro,nflow*(nsd+1)),
5659599516SKenneth E. Jansen     &            rmi(npro,nflow*(nsd+1)), stiff(npro,3*nflow,3*nflow),
5759599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),     rml(npro,nshl,nflow),
5859599516SKenneth E. Jansen     &            EGmass(npro,nedof,nedof)
5959599516SKenneth E. Jansenc
6059599516SKenneth E. Jansen        dimension shg1(npro),              shg2(npro),
6159599516SKenneth E. Jansen     &            shg3(npro),              stif1(npro,nflow,nflow),
6259599516SKenneth E. Jansen     &            stif2(npro,nflow,nflow), stif3(npro,nflow,nflow)
6359599516SKenneth E. Jansen
6459599516SKenneth E. Jansen        ttim(29) = ttim(29) - secs(0.0)
6559599516SKenneth E. Jansenc
6659599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
6759599516SKenneth E. Jansenc
6859599516SKenneth E. Jansenc.... add spatial contribution to rl and rml
6959599516SKenneth E. Jansenc
7059599516SKenneth E. Jansenc.... ires = 1 or 3
7159599516SKenneth E. Jansenc
7259599516SKenneth E. Jansen        if ((ires .eq. 1) .or. (ires .eq. 3)) then
7359599516SKenneth E. Jansenc
7459599516SKenneth E. Jansen          do i = 1, nshl
7559599516SKenneth E. Jansen            rl(:,i,1) = rl(:,i,1) + WdetJ * (
7659599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 1) + shg(:,i,2) * ri(:, 6)
7759599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,11) )
7859599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + WdetJ * (
7959599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 2) + shg(:,i,2) * ri(:, 7)
8059599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,12) )
8159599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + WdetJ * (
8259599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 3) + shg(:,i,2) * ri(:, 8)
8359599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,13) )
8459599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + WdetJ * (
8559599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 4) + shg(:,i,2) * ri(:, 9)
8659599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,14) )
8759599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + WdetJ * (
8859599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 5) + shg(:,i,2) * ri(:,10)
8959599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,15) )
9059599516SKenneth E. Jansen          enddo
9159599516SKenneth E. Jansenc
92*f4d0b58bSKenneth E. Jansen!      flops = flops + 36*nshl*npro
9359599516SKenneth E. Jansen        endif
9459599516SKenneth E. Jansenc
9559599516SKenneth E. Jansenc.... ires = 2 or 3
9659599516SKenneth E. Jansenc
9759599516SKenneth E. Jansen        if ((ires .eq. 2) .or. (ires .eq. 3)) then
9859599516SKenneth E. Jansen          do i = 1, nshl
9959599516SKenneth E. Jansen            rml(:,i,1) = rml(:,i,1) + WdetJ * (
10059599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 1) + shg(:,i,2) * rmi(:, 6)
10159599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,11)
10259599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,16)  )
10359599516SKenneth E. Jansen            rml(:,i,2) = rml(:,i,2) + WdetJ * (
10459599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 2) + shg(:,i,2) * rmi(:, 7)
10559599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,12)
10659599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,17)    )
10759599516SKenneth E. Jansen            rml(:,i,3) = rml(:,i,3) + WdetJ * (
10859599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 3) + shg(:,i,2) * rmi(:, 8)
10959599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,13)
11059599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,18)    )
11159599516SKenneth E. Jansen            rml(:,i,4) = rml(:,i,4) + WdetJ * (
11259599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 4) + shg(:,i,2) * rmi(:, 9)
11359599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,14)
11459599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,19)    )
11559599516SKenneth E. Jansen            rml(:,i,5) = rml(:,i,5) + WdetJ * (
11659599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 5) + shg(:,i,2) * rmi(:,10)
11759599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,15)
11859599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,20)    )
11959599516SKenneth E. Jansen          enddo
12059599516SKenneth E. Jansenc
121*f4d0b58bSKenneth E. Jansen!      flops = flops + (15+45*nshl)*npro
12259599516SKenneth E. Jansen        endif
12359599516SKenneth E. Jansenc
12459599516SKenneth E. Jansenc.... add temporal contribution to rl
12559599516SKenneth E. Jansenc
12659599516SKenneth E. Jansen        if (ngauss .eq. 1 .and. nshl.eq.4) then !already ex. integ mass
12759599516SKenneth E. Jansen         if(matflg(5,1).ge.1) then
12859599516SKenneth E. Jansen          do i = 1, nshl
12959599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + shp(:,i) * WdetJ * ri(:,17)
13059599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + shp(:,i) * WdetJ * ri(:,18)
13159599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + shp(:,i) * WdetJ * ri(:,19)
13259599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + shp(:,i) * WdetJ * ri(:,20)
13359599516SKenneth E. Jansen          enddo
13459599516SKenneth E. Jansen         endif
13559599516SKenneth E. Jansen       else   !check for a body force
13659599516SKenneth E. Jansen          do i = 1, nshl
13759599516SKenneth E. Jansen            rl(:,i,1) = rl(:,i,1) + shp(:,i) * WdetJ * ri(:,16)
13859599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + shp(:,i) * WdetJ * ri(:,17)
13959599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + shp(:,i) * WdetJ * ri(:,18)
14059599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + shp(:,i) * WdetJ * ri(:,19)
14159599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + shp(:,i) * WdetJ * ri(:,20)
14259599516SKenneth E. Jansen          enddo
14359599516SKenneth E. Jansen
144*f4d0b58bSKenneth E. Jansen!      flops = flops + 11*nshl*npro
14559599516SKenneth E. Jansen       endif
14659599516SKenneth E. Jansen
14759599516SKenneth E. Jansenc
14859599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
14959599516SKenneth E. Jansenc
15059599516SKenneth E. Jansen       if (lhs .eq. 1) then
15159599516SKenneth E. Jansenc
15259599516SKenneth E. Jansenc.... loop through columns (nodes j)
15359599516SKenneth E. Jansenc
15459599516SKenneth E. Jansen          do j = 1, nshl
15559599516SKenneth E. Jansen             j0 = nflow * (j - 1)
15659599516SKenneth E. Jansenc
15759599516SKenneth E. Jansenc.... set up factors
15859599516SKenneth E. Jansenc
15959599516SKenneth E. Jansen             shg1 = WdetJ * shg(:,j,1)
16059599516SKenneth E. Jansen             shg2 = WdetJ * shg(:,j,2)
16159599516SKenneth E. Jansen             shg3 = WdetJ * shg(:,j,3)
16259599516SKenneth E. Jansenc
16359599516SKenneth E. Jansenc.... loop through d.o.f.'s
16459599516SKenneth E. Jansenc
16559599516SKenneth E. Jansen             do jdof = 1, nflow
16659599516SKenneth E. Jansen                do idof = 1, nflow
16759599516SKenneth E. Jansen                   idof2 = idof  + nflow
16859599516SKenneth E. Jansen                   jdof2 = jdof  + nflow
16959599516SKenneth E. Jansen
17059599516SKenneth E. Jansen                   idof3 = idof2 + nflow
17159599516SKenneth E. Jansen                   jdof3 = jdof2 + nflow
17259599516SKenneth E. Jansenc
17359599516SKenneth E. Jansenc.... calculate weighted stiffness matrix (first part)
17459599516SKenneth E. Jansenc
17559599516SKenneth E. Jansen                   stif1(:,idof,jdof) = shg1 * stiff(:,idof,jdof)
17659599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof,jdof2)
17759599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof,jdof3)
17859599516SKenneth E. Jansen                   stif2(:,idof,jdof) = shg1 * stiff(:,idof2,jdof)
17959599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof2,jdof2)
18059599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof2,jdof3)
18159599516SKenneth E. Jansen                   stif3(:,idof,jdof) = shg1 * stiff(:,idof3,jdof)
18259599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof3,jdof2)
18359599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof3,jdof3)
18459599516SKenneth E. Jansen                enddo
18559599516SKenneth E. Jansen             enddo
18659599516SKenneth E. Jansenc
18759599516SKenneth E. Jansenc.... loop through rows (nodes i)
18859599516SKenneth E. Jansenc
18959599516SKenneth E. Jansen             do i = 1, nshl
19059599516SKenneth E. Jansen                i0 = nflow * (i - 1)
19159599516SKenneth E. Jansenc
19259599516SKenneth E. Jansenc.... add contribution of stiffness to EGmass
19359599516SKenneth E. Jansenc
19459599516SKenneth E. Jansen                do jdof = 1, nflow
19559599516SKenneth E. Jansen                   EGmass(:,i0+1,j0+jdof) = EGmass(:,i0+1,j0+jdof)
19659599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,1,jdof)
19759599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,1,jdof)
19859599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,1,jdof)
19959599516SKenneth E. Jansen                   EGmass(:,i0+2,j0+jdof) = EGmass(:,i0+2,j0+jdof)
20059599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,2,jdof)
20159599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,2,jdof)
20259599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,2,jdof)
20359599516SKenneth E. Jansen                   EGmass(:,i0+3,j0+jdof) = EGmass(:,i0+3,j0+jdof)
20459599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,3,jdof)
20559599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,3,jdof)
20659599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,3,jdof)
20759599516SKenneth E. Jansen                   EGmass(:,i0+4,j0+jdof) = EGmass(:,i0+4,j0+jdof)
20859599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,4,jdof)
20959599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,4,jdof)
21059599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,4,jdof)
21159599516SKenneth E. Jansen                   EGmass(:,i0+5,j0+jdof) = EGmass(:,i0+5,j0+jdof)
21259599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,5,jdof)
21359599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,5,jdof)
21459599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,5,jdof)
21559599516SKenneth E. Jansen                enddo
21659599516SKenneth E. Jansenc
21759599516SKenneth E. Jansenc.... end loop on rows
21859599516SKenneth E. Jansenc
21959599516SKenneth E. Jansen             enddo
22059599516SKenneth E. Jansenc
22159599516SKenneth E. Jansenc.... end loop on columns
22259599516SKenneth E. Jansenc
22359599516SKenneth E. Jansen          enddo
22459599516SKenneth E. Jansenc
22559599516SKenneth E. Jansenc.... end left hand side assembly
22659599516SKenneth E. Jansenc
22759599516SKenneth E. Jansen       endif
22859599516SKenneth E. Jansen
22959599516SKenneth E. Jansen       ttim(29) = ttim(29) + secs(0.0)
23059599516SKenneth E. Jansenc
23159599516SKenneth E. Jansenc.... return
23259599516SKenneth E. Jansenc
23359599516SKenneth E. Jansen        return
23459599516SKenneth E. Jansen        end
23559599516SKenneth E. Jansenc
23659599516SKenneth E. Jansenc
23759599516SKenneth E. Jansenc
23859599516SKenneth E. Jansen        subroutine e3wmltSclr(shp,    shg,    WdetJ,
23959599516SKenneth E. Jansen     &                        rti,    rtl,
24059599516SKenneth E. Jansen     &                        stifft, EGmasst )
24159599516SKenneth E. Jansenc
24259599516SKenneth E. Jansenc----------------------------------------------------------------------
24359599516SKenneth E. Jansenc
24459599516SKenneth E. Jansenc Up to now most of the terms have not been multiplied by the
24559599516SKenneth E. Jansenc shape function from the weight space.  Now that we have collected
24659599516SKenneth E. Jansenc all the terms that the shape function (and its derivatives for the
24759599516SKenneth E. Jansenc terms that were integrated by parts) multiplies, in this routine
24859599516SKenneth E. Jansenc we carry out that multiplication. After these operations we will
24959599516SKenneth E. Jansenc have this quadrature points contribution to the integral for the
25059599516SKenneth E. Jansenc residual (i.e.  g^e_b(xi^l) D(xi^l) QW(xi^l)  where e is the element,
25159599516SKenneth E. Jansenc b is the local node number on the element, l is the quadrature point
25259599516SKenneth E. Jansenc D is the determinate of the Jacobian of the mapping, and QW is this
25359599516SKenneth E. Jansenc quadrature points weight....WHEW).  When we add up all of the
25459599516SKenneth E. Jansenc integration points we get G^e_b which we will assemble in the
25559599516SKenneth E. Jansenc subroutine LOCAL to form G_B.
25659599516SKenneth E. Jansenc
25759599516SKenneth E. Jansenc This routine also forms the LHS contribution from the LS term
25859599516SKenneth E. Jansenc and the diffusion term which has been partially constructed and
25959599516SKenneth E. Jansenc placed in stiff.  Those familiar with elasticity might recognize
26059599516SKenneth E. Jansenc this naming convention since this is like a stiffness matrix that
26159599516SKenneth E. Jansenc if you had a linear problem would be calculated once and saved for
26259599516SKenneth E. Jansenc all time.
26359599516SKenneth E. Jansenc
26459599516SKenneth E. Jansenc    ri:  LS, Diffusion, Convective and mass,
26559599516SKenneth E. Jansenc stiff:  LS, Diffusion.
26659599516SKenneth E. Jansenc
26759599516SKenneth E. Jansenc input:
26859599516SKenneth E. Jansenc  shp     (npro,nshl)            : element shape-functions
26959599516SKenneth E. Jansenc  shg     (npro,nshl,nsd)        : element grad-shape-functions
27059599516SKenneth E. Jansenc  WdetJ   (npro)                 : weighted Jacobian
27159599516SKenneth E. Jansenc  rti     (npro,nsd+1)           : partial residual
27259599516SKenneth E. Jansenc  stifft  (npro,nsd,nsd)         : stiffness matrix
27359599516SKenneth E. Jansenc                                    ( K_ij + A_i tau A_j )
27459599516SKenneth E. Jansenc
27559599516SKenneth E. Jansenc output:
27659599516SKenneth E. Jansenc  rtl     (npro,nshl)            : residual  (will end up being G^e_b)
27759599516SKenneth E. Jansenc  EGmasst (npro,nshape,nshape)   : element LHS tangent mass matrix
27859599516SKenneth E. Jansenc                                  (will end up being dG^e_b/dY_a)
27959599516SKenneth E. Jansenc
28059599516SKenneth E. Jansenc
28159599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2assm.f)
28259599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
28359599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997  Prim. variables
28459599516SKenneth E. Jansenc----------------------------------------------------------------------
28559599516SKenneth E. Jansenc
28659599516SKenneth E. Jansen        include "common.h"
28759599516SKenneth E. Jansenc
28859599516SKenneth E. Jansen        dimension shp(npro,nshl),            shg(npro,nshl,nsd),
28959599516SKenneth E. Jansen     &            WdetJ(npro),               rti(npro,nsd+1),
29059599516SKenneth E. Jansen     &            rmti(npro,nsd+1),          stifft(npro,nsd,nsd),
29159599516SKenneth E. Jansen     &            rtl(npro,nshl),            rmtl(npro,nshl),
29259599516SKenneth E. Jansen     &            EGmasst(npro,nshape,nshape)
29359599516SKenneth E. Jansenc
29459599516SKenneth E. Jansen        dimension shg1(npro),                shg2(npro),
29559599516SKenneth E. Jansen     &            shg3(npro),                stift1(npro),
29659599516SKenneth E. Jansen     &            stift2(npro),              stift3(npro)
29759599516SKenneth E. Jansen
29859599516SKenneth E. Jansen        ttim(29) = ttim(29) - tmr(0.0)
29959599516SKenneth E. Jansenc
30059599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
30159599516SKenneth E. Jansenc
30259599516SKenneth E. Jansenc.... add spatial contribution to rl and rml
30359599516SKenneth E. Jansenc
30459599516SKenneth E. Jansenc.... ires = 1 or 3
30559599516SKenneth E. Jansenc
30659599516SKenneth E. Jansen        if ((ires .eq. 1) .or. (ires .eq. 3)) then
30759599516SKenneth E. Jansenc
30859599516SKenneth E. Jansen          do i = 1, nshl
30959599516SKenneth E. Jansen            rtl(:,i) = rtl(:,i) + WdetJ * (
31059599516SKenneth E. Jansen     &                  shg(:,i,1) * rti(:,1) + shg(:,i,2) * rti(:,2)
31159599516SKenneth E. Jansen     &                                        + shg(:,i,3) * rti(:,3) )
31259599516SKenneth E. Jansen
31359599516SKenneth E. Jansen          enddo
314*f4d0b58bSKenneth E. Jansen!      flops = flops + 36*nshl*npro
31559599516SKenneth E. Jansen        endif
31659599516SKenneth E. Jansenc
31759599516SKenneth E. Jansenc.... ires = 2 or 3
31859599516SKenneth E. Jansenc
31959599516SKenneth E. Jansenc        if ((ires .eq. 2) .or. (ires .eq. 3)) then
32059599516SKenneth E. Jansenc          do i = 1, nshl
32159599516SKenneth E. Jansenc            rml(:,i,1) = rml(:,i,1) + WdetJ * (
32259599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 1) + shg(:,i,2) * rmi(:, 6)
32359599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,11) + shp(:,i) * rmi(:,16) )
32459599516SKenneth E. Jansenc            rml(:,i,2) = rml(:,i,2) + WdetJ * (
32559599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 2) + shg(:,i,2) * rmi(:, 7)
32659599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,12) + shp(:,i) * rmi(:,17) )
32759599516SKenneth E. Jansenc            rml(:,i,3) = rml(:,i,3) + WdetJ * (
32859599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 3) + shg(:,i,2) * rmi(:, 8)
32959599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,13) + shp(:,i) * rmi(:,18) )
33059599516SKenneth E. Jansenc            rml(:,i,4) = rml(:,i,4) + WdetJ * (
33159599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 4) + shg(:,i,2) * rmi(:, 9)
33259599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,14) + shp(:,i) * rmi(:,19) )
33359599516SKenneth E. Jansenc            rml(:,i,5) = rml(:,i,5) + WdetJ * (
33459599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 5) + shg(:,i,2) * rmi(:,10)
33559599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,15) + shp(:,i) * rmi(:,20) )
33659599516SKenneth E. Jansenc          enddo
33759599516SKenneth E. Jansenc
338*f4d0b58bSKenneth E. Jansenc     !      flops = flops + (15+45*nshl)*npro
33959599516SKenneth E. Jansenc        endif
34059599516SKenneth E. Jansen
34159599516SKenneth E. Jansenc
34259599516SKenneth E. Jansenc.... add temporal contribution to rl
34359599516SKenneth E. Jansenc
34459599516SKenneth E. Jansen
34559599516SKenneth E. Jansen          do i = 1, nshl
34659599516SKenneth E. Jansen            rtl(:,i) = rtl(:,i) + shp(:,i) * WdetJ * rti(:,4)
34759599516SKenneth E. Jansen          enddo
34859599516SKenneth E. Jansen
349*f4d0b58bSKenneth E. Jansen!      flops = flops + 11*nshl*npro
35059599516SKenneth E. Jansen
35159599516SKenneth E. Jansenc
35259599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
35359599516SKenneth E. Jansenc
35459599516SKenneth E. Jansen       if (lhs .eq. 1) then
35559599516SKenneth E. Jansenc
35659599516SKenneth E. Jansenc.... loop through columns (nodes j)
35759599516SKenneth E. Jansenc
35859599516SKenneth E. Jansen          do j = 1, nshl
35959599516SKenneth E. Jansenc
36059599516SKenneth E. Jansenc.... set up factors
36159599516SKenneth E. Jansenc
36259599516SKenneth E. Jansen             shg1 = WdetJ * shg(:,j,1)
36359599516SKenneth E. Jansen             shg2 = WdetJ * shg(:,j,2)
36459599516SKenneth E. Jansen             shg3 = WdetJ * shg(:,j,3)
36559599516SKenneth E. Jansenc
36659599516SKenneth E. Jansenc.... calculate weighted stiffness matrix (first part)
36759599516SKenneth E. Jansenc
36859599516SKenneth E. Jansen                   stift1(:) = shg1 * stifft(:,1,1)
36959599516SKenneth E. Jansen     &                                + shg2 * stifft(:,1,2)
37059599516SKenneth E. Jansen     &                                + shg3 * stifft(:,1,3)
37159599516SKenneth E. Jansen                   stift2(:) = shg1 * stifft(:,2,1)
37259599516SKenneth E. Jansen     &                                + shg2 * stifft(:,2,2)
37359599516SKenneth E. Jansen     &                                + shg3 * stifft(:,2,3)
37459599516SKenneth E. Jansen                   stift3(:) = shg1 * stifft(:,3,1)
37559599516SKenneth E. Jansen     &                                + shg2 * stifft(:,3,2)
37659599516SKenneth E. Jansen     &                                + shg3 * stifft(:,3,3)
37759599516SKenneth E. Jansenc
37859599516SKenneth E. Jansenc.... loop through rows (nodes i)
37959599516SKenneth E. Jansenc
38059599516SKenneth E. Jansen             do i = 1, nshl
38159599516SKenneth E. Jansenc
38259599516SKenneth E. Jansenc.... add contribution of stiffness to EGmass
38359599516SKenneth E. Jansenc
38459599516SKenneth E. Jansen                   EGmasst(:,i,j) = EGmasst(:,i,j)
38559599516SKenneth E. Jansen     &                  + shg(:,i,1) * stift1(:)
38659599516SKenneth E. Jansen     &                  + shg(:,i,2) * stift2(:)
38759599516SKenneth E. Jansen     &                  + shg(:,i,3) * stift3(:)
38859599516SKenneth E. Jansen
38959599516SKenneth E. Jansenc
39059599516SKenneth E. Jansenc.... end loop on rows
39159599516SKenneth E. Jansenc
39259599516SKenneth E. Jansen             enddo
39359599516SKenneth E. Jansenc
39459599516SKenneth E. Jansenc.... end loop on columns
39559599516SKenneth E. Jansenc
39659599516SKenneth E. Jansen          enddo
39759599516SKenneth E. Jansenc
39859599516SKenneth E. Jansenc.... end left hand side assembly
39959599516SKenneth E. Jansenc
40059599516SKenneth E. Jansen       endif
40159599516SKenneth E. Jansen
40259599516SKenneth E. Jansen       ttim(29) = ttim(29) + tmr(0.0)
40359599516SKenneth E. Jansenc
40459599516SKenneth E. Jansenc.... return
40559599516SKenneth E. Jansenc
40659599516SKenneth E. Jansen        return
40759599516SKenneth E. Jansen        end
408