xref: /phasta/phSolver/compressible/e3wmlt.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen        subroutine e3wmlt (shp,    shg,    WdetJ,
2*59599516SKenneth E. Jansen     &                     ri,     rmi,    rl,
3*59599516SKenneth E. Jansen     &                     rml,    stiff,  EGmass )
4*59599516SKenneth E. Jansenc
5*59599516SKenneth E. Jansenc----------------------------------------------------------------------
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc Up to now most of the terms have not been multiplied by the
8*59599516SKenneth E. Jansenc shape function from the weight space.  Now that we have collected
9*59599516SKenneth E. Jansenc all the terms that the shape function (and its derivatives for the
10*59599516SKenneth E. Jansenc terms that were integrated by parts) multiplies, in this routine
11*59599516SKenneth E. Jansenc we carry out that multiplication. After these operations we will
12*59599516SKenneth E. Jansenc have this quadrature points contribution to the integral for the
13*59599516SKenneth E. Jansenc residual (i.e.  g^e_b(xi^l) D(xi^l) QW(xi^l)  where e is the element,
14*59599516SKenneth E. Jansenc b is the local node number on the element, l is the quadrature point
15*59599516SKenneth E. Jansenc D is the determinate of the Jacobian of the mapping, and QW is this
16*59599516SKenneth E. Jansenc quadrature points weight....WHEW).  When we add up all of the
17*59599516SKenneth E. Jansenc integration points we get G^e_b which we will assemble in the
18*59599516SKenneth E. Jansenc subroutine LOCAL to form G_B.
19*59599516SKenneth E. Jansenc
20*59599516SKenneth E. Jansenc This routine also forms the LHS contribution from the LS term
21*59599516SKenneth E. Jansenc and the diffusion term which has been partially constructed and
22*59599516SKenneth E. Jansenc placed in stiff.  Those familiar with elasticity might recognize
23*59599516SKenneth E. Jansenc this naming convention since this is like a stiffness matrix that
24*59599516SKenneth E. Jansenc if you had a linear problem would be calculated once and saved for
25*59599516SKenneth E. Jansenc all time.
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansenc    ri:  LS, Diffusion, Convective and mass,
28*59599516SKenneth E. Jansenc   rmi:  LS, Diffusion and mass,
29*59599516SKenneth E. Jansenc stiff:  LS, Diffusion.
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc input:
32*59599516SKenneth E. Jansenc  shp    (nshl)                 : element shape-functions
33*59599516SKenneth E. Jansenc  shg    (npro,nshl,nsd)        : element grad-shape-functions
34*59599516SKenneth E. Jansenc  WdetJ  (npro)                   : weighted Jacobian
35*59599516SKenneth E. Jansenc  ri     (npro,nflow*(nsd+1))      : partial residual
36*59599516SKenneth E. Jansenc  rmi    (npro,nflow*(nsd+1))      : partial modified residual
37*59599516SKenneth E. Jansenc  stiff  (npro,nsd*nflow,nsd*nflow) : stiffness matrix
38*59599516SKenneth E. Jansenc                                    ( K_ij + A_i tau A_j )
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansenc output:
41*59599516SKenneth E. Jansenc  rl     (npro,nshl,nflow)       : residual
42*59599516SKenneth E. Jansenc  rml    (npro,nshl,nflow)       : modified residual
43*59599516SKenneth E. Jansenc  EGmass (npro,nedof,nedof)       : element LHS tangent mass matrix
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansenc
46*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2assm.f)
47*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
48*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997  Prim. variables
49*59599516SKenneth E. Jansenc----------------------------------------------------------------------
50*59599516SKenneth E. Jansenc
51*59599516SKenneth E. Jansen        include "common.h"
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansen        dimension shp(npro,nshl),
54*59599516SKenneth E. Jansen     &            shg(npro,nshl,nsd),
55*59599516SKenneth E. Jansen     &            WdetJ(npro),             ri(npro,nflow*(nsd+1)),
56*59599516SKenneth E. Jansen     &            rmi(npro,nflow*(nsd+1)), stiff(npro,3*nflow,3*nflow),
57*59599516SKenneth E. Jansen     &            rl(npro,nshl,nflow),     rml(npro,nshl,nflow),
58*59599516SKenneth E. Jansen     &            EGmass(npro,nedof,nedof)
59*59599516SKenneth E. Jansenc
60*59599516SKenneth E. Jansen        dimension shg1(npro),              shg2(npro),
61*59599516SKenneth E. Jansen     &            shg3(npro),              stif1(npro,nflow,nflow),
62*59599516SKenneth E. Jansen     &            stif2(npro,nflow,nflow), stif3(npro,nflow,nflow)
63*59599516SKenneth E. Jansen
64*59599516SKenneth E. Jansen        ttim(29) = ttim(29) - secs(0.0)
65*59599516SKenneth E. Jansenc
66*59599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
67*59599516SKenneth E. Jansenc
68*59599516SKenneth E. Jansenc.... add spatial contribution to rl and rml
69*59599516SKenneth E. Jansenc
70*59599516SKenneth E. Jansenc.... ires = 1 or 3
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansen        if ((ires .eq. 1) .or. (ires .eq. 3)) then
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansen          do i = 1, nshl
75*59599516SKenneth E. Jansen            rl(:,i,1) = rl(:,i,1) + WdetJ * (
76*59599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 1) + shg(:,i,2) * ri(:, 6)
77*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,11) )
78*59599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + WdetJ * (
79*59599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 2) + shg(:,i,2) * ri(:, 7)
80*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,12) )
81*59599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + WdetJ * (
82*59599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 3) + shg(:,i,2) * ri(:, 8)
83*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,13) )
84*59599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + WdetJ * (
85*59599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 4) + shg(:,i,2) * ri(:, 9)
86*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,14) )
87*59599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + WdetJ * (
88*59599516SKenneth E. Jansen     &                  shg(:,i,1) * ri(:, 5) + shg(:,i,2) * ri(:,10)
89*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * ri(:,15) )
90*59599516SKenneth E. Jansen          enddo
91*59599516SKenneth E. Jansenc
92*59599516SKenneth E. Jansen          flops = flops + 36*nshl*npro
93*59599516SKenneth E. Jansen        endif
94*59599516SKenneth E. Jansenc
95*59599516SKenneth E. Jansenc.... ires = 2 or 3
96*59599516SKenneth E. Jansenc
97*59599516SKenneth E. Jansen        if ((ires .eq. 2) .or. (ires .eq. 3)) then
98*59599516SKenneth E. Jansen          do i = 1, nshl
99*59599516SKenneth E. Jansen            rml(:,i,1) = rml(:,i,1) + WdetJ * (
100*59599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 1) + shg(:,i,2) * rmi(:, 6)
101*59599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,11)
102*59599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,16)  )
103*59599516SKenneth E. Jansen            rml(:,i,2) = rml(:,i,2) + WdetJ * (
104*59599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 2) + shg(:,i,2) * rmi(:, 7)
105*59599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,12)
106*59599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,17)    )
107*59599516SKenneth E. Jansen            rml(:,i,3) = rml(:,i,3) + WdetJ * (
108*59599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 3) + shg(:,i,2) * rmi(:, 8)
109*59599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,13)
110*59599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,18)    )
111*59599516SKenneth E. Jansen            rml(:,i,4) = rml(:,i,4) + WdetJ * (
112*59599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 4) + shg(:,i,2) * rmi(:, 9)
113*59599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,14)
114*59599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,19)    )
115*59599516SKenneth E. Jansen            rml(:,i,5) = rml(:,i,5) + WdetJ * (
116*59599516SKenneth E. Jansen     &                   shg(:,i,1) * rmi(:, 5) + shg(:,i,2) * rmi(:,10)
117*59599516SKenneth E. Jansen     &                 + shg(:,i,3) * rmi(:,15)
118*59599516SKenneth E. Jansen     &                   + shp(:,i) * rmi(:,20)    )
119*59599516SKenneth E. Jansen          enddo
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansen          flops = flops + (15+45*nshl)*npro
122*59599516SKenneth E. Jansen        endif
123*59599516SKenneth E. Jansenc
124*59599516SKenneth E. Jansenc.... add temporal contribution to rl
125*59599516SKenneth E. Jansenc
126*59599516SKenneth E. Jansen        if (ngauss .eq. 1 .and. nshl.eq.4) then !already ex. integ mass
127*59599516SKenneth E. Jansen         if(matflg(5,1).ge.1) then
128*59599516SKenneth E. Jansen          do i = 1, nshl
129*59599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + shp(:,i) * WdetJ * ri(:,17)
130*59599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + shp(:,i) * WdetJ * ri(:,18)
131*59599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + shp(:,i) * WdetJ * ri(:,19)
132*59599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + shp(:,i) * WdetJ * ri(:,20)
133*59599516SKenneth E. Jansen          enddo
134*59599516SKenneth E. Jansen         endif
135*59599516SKenneth E. Jansen       else   !check for a body force
136*59599516SKenneth E. Jansen          do i = 1, nshl
137*59599516SKenneth E. Jansen            rl(:,i,1) = rl(:,i,1) + shp(:,i) * WdetJ * ri(:,16)
138*59599516SKenneth E. Jansen            rl(:,i,2) = rl(:,i,2) + shp(:,i) * WdetJ * ri(:,17)
139*59599516SKenneth E. Jansen            rl(:,i,3) = rl(:,i,3) + shp(:,i) * WdetJ * ri(:,18)
140*59599516SKenneth E. Jansen            rl(:,i,4) = rl(:,i,4) + shp(:,i) * WdetJ * ri(:,19)
141*59599516SKenneth E. Jansen            rl(:,i,5) = rl(:,i,5) + shp(:,i) * WdetJ * ri(:,20)
142*59599516SKenneth E. Jansen          enddo
143*59599516SKenneth E. Jansen
144*59599516SKenneth E. Jansen          flops = flops + 11*nshl*npro
145*59599516SKenneth E. Jansen       endif
146*59599516SKenneth E. Jansen
147*59599516SKenneth E. Jansenc
148*59599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
149*59599516SKenneth E. Jansenc
150*59599516SKenneth E. Jansen       if (lhs .eq. 1) then
151*59599516SKenneth E. Jansenc
152*59599516SKenneth E. Jansenc.... loop through columns (nodes j)
153*59599516SKenneth E. Jansenc
154*59599516SKenneth E. Jansen          do j = 1, nshl
155*59599516SKenneth E. Jansen             j0 = nflow * (j - 1)
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansenc.... set up factors
158*59599516SKenneth E. Jansenc
159*59599516SKenneth E. Jansen             shg1 = WdetJ * shg(:,j,1)
160*59599516SKenneth E. Jansen             shg2 = WdetJ * shg(:,j,2)
161*59599516SKenneth E. Jansen             shg3 = WdetJ * shg(:,j,3)
162*59599516SKenneth E. Jansenc
163*59599516SKenneth E. Jansenc.... loop through d.o.f.'s
164*59599516SKenneth E. Jansenc
165*59599516SKenneth E. Jansen             do jdof = 1, nflow
166*59599516SKenneth E. Jansen                do idof = 1, nflow
167*59599516SKenneth E. Jansen                   idof2 = idof  + nflow
168*59599516SKenneth E. Jansen                   jdof2 = jdof  + nflow
169*59599516SKenneth E. Jansen
170*59599516SKenneth E. Jansen                   idof3 = idof2 + nflow
171*59599516SKenneth E. Jansen                   jdof3 = jdof2 + nflow
172*59599516SKenneth E. Jansenc
173*59599516SKenneth E. Jansenc.... calculate weighted stiffness matrix (first part)
174*59599516SKenneth E. Jansenc
175*59599516SKenneth E. Jansen                   stif1(:,idof,jdof) = shg1 * stiff(:,idof,jdof)
176*59599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof,jdof2)
177*59599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof,jdof3)
178*59599516SKenneth E. Jansen                   stif2(:,idof,jdof) = shg1 * stiff(:,idof2,jdof)
179*59599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof2,jdof2)
180*59599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof2,jdof3)
181*59599516SKenneth E. Jansen                   stif3(:,idof,jdof) = shg1 * stiff(:,idof3,jdof)
182*59599516SKenneth E. Jansen     &                                + shg2 * stiff(:,idof3,jdof2)
183*59599516SKenneth E. Jansen     &                                + shg3 * stiff(:,idof3,jdof3)
184*59599516SKenneth E. Jansen                enddo
185*59599516SKenneth E. Jansen             enddo
186*59599516SKenneth E. Jansenc
187*59599516SKenneth E. Jansenc.... loop through rows (nodes i)
188*59599516SKenneth E. Jansenc
189*59599516SKenneth E. Jansen             do i = 1, nshl
190*59599516SKenneth E. Jansen                i0 = nflow * (i - 1)
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansenc.... add contribution of stiffness to EGmass
193*59599516SKenneth E. Jansenc
194*59599516SKenneth E. Jansen                do jdof = 1, nflow
195*59599516SKenneth E. Jansen                   EGmass(:,i0+1,j0+jdof) = EGmass(:,i0+1,j0+jdof)
196*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,1,jdof)
197*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,1,jdof)
198*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,1,jdof)
199*59599516SKenneth E. Jansen                   EGmass(:,i0+2,j0+jdof) = EGmass(:,i0+2,j0+jdof)
200*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,2,jdof)
201*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,2,jdof)
202*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,2,jdof)
203*59599516SKenneth E. Jansen                   EGmass(:,i0+3,j0+jdof) = EGmass(:,i0+3,j0+jdof)
204*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,3,jdof)
205*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,3,jdof)
206*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,3,jdof)
207*59599516SKenneth E. Jansen                   EGmass(:,i0+4,j0+jdof) = EGmass(:,i0+4,j0+jdof)
208*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,4,jdof)
209*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,4,jdof)
210*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,4,jdof)
211*59599516SKenneth E. Jansen                   EGmass(:,i0+5,j0+jdof) = EGmass(:,i0+5,j0+jdof)
212*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stif1(:,5,jdof)
213*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stif2(:,5,jdof)
214*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stif3(:,5,jdof)
215*59599516SKenneth E. Jansen                enddo
216*59599516SKenneth E. Jansenc
217*59599516SKenneth E. Jansenc.... end loop on rows
218*59599516SKenneth E. Jansenc
219*59599516SKenneth E. Jansen             enddo
220*59599516SKenneth E. Jansenc
221*59599516SKenneth E. Jansenc.... end loop on columns
222*59599516SKenneth E. Jansenc
223*59599516SKenneth E. Jansen          enddo
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansenc.... end left hand side assembly
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen       endif
228*59599516SKenneth E. Jansen
229*59599516SKenneth E. Jansen       ttim(29) = ttim(29) + secs(0.0)
230*59599516SKenneth E. Jansenc
231*59599516SKenneth E. Jansenc.... return
232*59599516SKenneth E. Jansenc
233*59599516SKenneth E. Jansen        return
234*59599516SKenneth E. Jansen        end
235*59599516SKenneth E. Jansenc
236*59599516SKenneth E. Jansenc
237*59599516SKenneth E. Jansenc
238*59599516SKenneth E. Jansen        subroutine e3wmltSclr(shp,    shg,    WdetJ,
239*59599516SKenneth E. Jansen     &                        rti,    rtl,
240*59599516SKenneth E. Jansen     &                        stifft, EGmasst )
241*59599516SKenneth E. Jansenc
242*59599516SKenneth E. Jansenc----------------------------------------------------------------------
243*59599516SKenneth E. Jansenc
244*59599516SKenneth E. Jansenc Up to now most of the terms have not been multiplied by the
245*59599516SKenneth E. Jansenc shape function from the weight space.  Now that we have collected
246*59599516SKenneth E. Jansenc all the terms that the shape function (and its derivatives for the
247*59599516SKenneth E. Jansenc terms that were integrated by parts) multiplies, in this routine
248*59599516SKenneth E. Jansenc we carry out that multiplication. After these operations we will
249*59599516SKenneth E. Jansenc have this quadrature points contribution to the integral for the
250*59599516SKenneth E. Jansenc residual (i.e.  g^e_b(xi^l) D(xi^l) QW(xi^l)  where e is the element,
251*59599516SKenneth E. Jansenc b is the local node number on the element, l is the quadrature point
252*59599516SKenneth E. Jansenc D is the determinate of the Jacobian of the mapping, and QW is this
253*59599516SKenneth E. Jansenc quadrature points weight....WHEW).  When we add up all of the
254*59599516SKenneth E. Jansenc integration points we get G^e_b which we will assemble in the
255*59599516SKenneth E. Jansenc subroutine LOCAL to form G_B.
256*59599516SKenneth E. Jansenc
257*59599516SKenneth E. Jansenc This routine also forms the LHS contribution from the LS term
258*59599516SKenneth E. Jansenc and the diffusion term which has been partially constructed and
259*59599516SKenneth E. Jansenc placed in stiff.  Those familiar with elasticity might recognize
260*59599516SKenneth E. Jansenc this naming convention since this is like a stiffness matrix that
261*59599516SKenneth E. Jansenc if you had a linear problem would be calculated once and saved for
262*59599516SKenneth E. Jansenc all time.
263*59599516SKenneth E. Jansenc
264*59599516SKenneth E. Jansenc    ri:  LS, Diffusion, Convective and mass,
265*59599516SKenneth E. Jansenc stiff:  LS, Diffusion.
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansenc input:
268*59599516SKenneth E. Jansenc  shp     (npro,nshl)            : element shape-functions
269*59599516SKenneth E. Jansenc  shg     (npro,nshl,nsd)        : element grad-shape-functions
270*59599516SKenneth E. Jansenc  WdetJ   (npro)                 : weighted Jacobian
271*59599516SKenneth E. Jansenc  rti     (npro,nsd+1)           : partial residual
272*59599516SKenneth E. Jansenc  stifft  (npro,nsd,nsd)         : stiffness matrix
273*59599516SKenneth E. Jansenc                                    ( K_ij + A_i tau A_j )
274*59599516SKenneth E. Jansenc
275*59599516SKenneth E. Jansenc output:
276*59599516SKenneth E. Jansenc  rtl     (npro,nshl)            : residual  (will end up being G^e_b)
277*59599516SKenneth E. Jansenc  EGmasst (npro,nshape,nshape)   : element LHS tangent mass matrix
278*59599516SKenneth E. Jansenc                                  (will end up being dG^e_b/dY_a)
279*59599516SKenneth E. Jansenc
280*59599516SKenneth E. Jansenc
281*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2assm.f)
282*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
283*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997  Prim. variables
284*59599516SKenneth E. Jansenc----------------------------------------------------------------------
285*59599516SKenneth E. Jansenc
286*59599516SKenneth E. Jansen        include "common.h"
287*59599516SKenneth E. Jansenc
288*59599516SKenneth E. Jansen        dimension shp(npro,nshl),            shg(npro,nshl,nsd),
289*59599516SKenneth E. Jansen     &            WdetJ(npro),               rti(npro,nsd+1),
290*59599516SKenneth E. Jansen     &            rmti(npro,nsd+1),          stifft(npro,nsd,nsd),
291*59599516SKenneth E. Jansen     &            rtl(npro,nshl),            rmtl(npro,nshl),
292*59599516SKenneth E. Jansen     &            EGmasst(npro,nshape,nshape)
293*59599516SKenneth E. Jansenc
294*59599516SKenneth E. Jansen        dimension shg1(npro),                shg2(npro),
295*59599516SKenneth E. Jansen     &            shg3(npro),                stift1(npro),
296*59599516SKenneth E. Jansen     &            stift2(npro),              stift3(npro)
297*59599516SKenneth E. Jansen
298*59599516SKenneth E. Jansen        ttim(29) = ttim(29) - tmr(0.0)
299*59599516SKenneth E. Jansenc
300*59599516SKenneth E. Jansenc.... ---------------------------->  RHS  <----------------------------
301*59599516SKenneth E. Jansenc
302*59599516SKenneth E. Jansenc.... add spatial contribution to rl and rml
303*59599516SKenneth E. Jansenc
304*59599516SKenneth E. Jansenc.... ires = 1 or 3
305*59599516SKenneth E. Jansenc
306*59599516SKenneth E. Jansen        if ((ires .eq. 1) .or. (ires .eq. 3)) then
307*59599516SKenneth E. Jansenc
308*59599516SKenneth E. Jansen          do i = 1, nshl
309*59599516SKenneth E. Jansen            rtl(:,i) = rtl(:,i) + WdetJ * (
310*59599516SKenneth E. Jansen     &                  shg(:,i,1) * rti(:,1) + shg(:,i,2) * rti(:,2)
311*59599516SKenneth E. Jansen     &                                        + shg(:,i,3) * rti(:,3) )
312*59599516SKenneth E. Jansen
313*59599516SKenneth E. Jansen          enddo
314*59599516SKenneth E. Jansen          flops = flops + 36*nshl*npro
315*59599516SKenneth E. Jansen        endif
316*59599516SKenneth E. Jansenc
317*59599516SKenneth E. Jansenc.... ires = 2 or 3
318*59599516SKenneth E. Jansenc
319*59599516SKenneth E. Jansenc        if ((ires .eq. 2) .or. (ires .eq. 3)) then
320*59599516SKenneth E. Jansenc          do i = 1, nshl
321*59599516SKenneth E. Jansenc            rml(:,i,1) = rml(:,i,1) + WdetJ * (
322*59599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 1) + shg(:,i,2) * rmi(:, 6)
323*59599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,11) + shp(:,i) * rmi(:,16) )
324*59599516SKenneth E. Jansenc            rml(:,i,2) = rml(:,i,2) + WdetJ * (
325*59599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 2) + shg(:,i,2) * rmi(:, 7)
326*59599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,12) + shp(:,i) * rmi(:,17) )
327*59599516SKenneth E. Jansenc            rml(:,i,3) = rml(:,i,3) + WdetJ * (
328*59599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 3) + shg(:,i,2) * rmi(:, 8)
329*59599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,13) + shp(:,i) * rmi(:,18) )
330*59599516SKenneth E. Jansenc            rml(:,i,4) = rml(:,i,4) + WdetJ * (
331*59599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 4) + shg(:,i,2) * rmi(:, 9)
332*59599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,14) + shp(:,i) * rmi(:,19) )
333*59599516SKenneth E. Jansenc            rml(:,i,5) = rml(:,i,5) + WdetJ * (
334*59599516SKenneth E. Jansenc     &                   shg(:,i,1) * rmi(:, 5) + shg(:,i,2) * rmi(:,10)
335*59599516SKenneth E. Jansenc     &                 + shg(:,i,3) * rmi(:,15) + shp(:,i) * rmi(:,20) )
336*59599516SKenneth E. Jansenc          enddo
337*59599516SKenneth E. Jansenc
338*59599516SKenneth E. Jansenc          flops = flops + (15+45*nshl)*npro
339*59599516SKenneth E. Jansenc        endif
340*59599516SKenneth E. Jansen
341*59599516SKenneth E. Jansenc
342*59599516SKenneth E. Jansenc.... add temporal contribution to rl
343*59599516SKenneth E. Jansenc
344*59599516SKenneth E. Jansen
345*59599516SKenneth E. Jansen          do i = 1, nshl
346*59599516SKenneth E. Jansen            rtl(:,i) = rtl(:,i) + shp(:,i) * WdetJ * rti(:,4)
347*59599516SKenneth E. Jansen          enddo
348*59599516SKenneth E. Jansen
349*59599516SKenneth E. Jansen          flops = flops + 11*nshl*npro
350*59599516SKenneth E. Jansen
351*59599516SKenneth E. Jansenc
352*59599516SKenneth E. Jansenc.... ---------------------------->  LHS  <----------------------------
353*59599516SKenneth E. Jansenc
354*59599516SKenneth E. Jansen       if (lhs .eq. 1) then
355*59599516SKenneth E. Jansenc
356*59599516SKenneth E. Jansenc.... loop through columns (nodes j)
357*59599516SKenneth E. Jansenc
358*59599516SKenneth E. Jansen          do j = 1, nshl
359*59599516SKenneth E. Jansenc
360*59599516SKenneth E. Jansenc.... set up factors
361*59599516SKenneth E. Jansenc
362*59599516SKenneth E. Jansen             shg1 = WdetJ * shg(:,j,1)
363*59599516SKenneth E. Jansen             shg2 = WdetJ * shg(:,j,2)
364*59599516SKenneth E. Jansen             shg3 = WdetJ * shg(:,j,3)
365*59599516SKenneth E. Jansenc
366*59599516SKenneth E. Jansenc.... calculate weighted stiffness matrix (first part)
367*59599516SKenneth E. Jansenc
368*59599516SKenneth E. Jansen                   stift1(:) = shg1 * stifft(:,1,1)
369*59599516SKenneth E. Jansen     &                                + shg2 * stifft(:,1,2)
370*59599516SKenneth E. Jansen     &                                + shg3 * stifft(:,1,3)
371*59599516SKenneth E. Jansen                   stift2(:) = shg1 * stifft(:,2,1)
372*59599516SKenneth E. Jansen     &                                + shg2 * stifft(:,2,2)
373*59599516SKenneth E. Jansen     &                                + shg3 * stifft(:,2,3)
374*59599516SKenneth E. Jansen                   stift3(:) = shg1 * stifft(:,3,1)
375*59599516SKenneth E. Jansen     &                                + shg2 * stifft(:,3,2)
376*59599516SKenneth E. Jansen     &                                + shg3 * stifft(:,3,3)
377*59599516SKenneth E. Jansenc
378*59599516SKenneth E. Jansenc.... loop through rows (nodes i)
379*59599516SKenneth E. Jansenc
380*59599516SKenneth E. Jansen             do i = 1, nshl
381*59599516SKenneth E. Jansenc
382*59599516SKenneth E. Jansenc.... add contribution of stiffness to EGmass
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansen                   EGmasst(:,i,j) = EGmasst(:,i,j)
385*59599516SKenneth E. Jansen     &                  + shg(:,i,1) * stift1(:)
386*59599516SKenneth E. Jansen     &                  + shg(:,i,2) * stift2(:)
387*59599516SKenneth E. Jansen     &                  + shg(:,i,3) * stift3(:)
388*59599516SKenneth E. Jansen
389*59599516SKenneth E. Jansenc
390*59599516SKenneth E. Jansenc.... end loop on rows
391*59599516SKenneth E. Jansenc
392*59599516SKenneth E. Jansen             enddo
393*59599516SKenneth E. Jansenc
394*59599516SKenneth E. Jansenc.... end loop on columns
395*59599516SKenneth E. Jansenc
396*59599516SKenneth E. Jansen          enddo
397*59599516SKenneth E. Jansenc
398*59599516SKenneth E. Jansenc.... end left hand side assembly
399*59599516SKenneth E. Jansenc
400*59599516SKenneth E. Jansen       endif
401*59599516SKenneth E. Jansen
402*59599516SKenneth E. Jansen       ttim(29) = ttim(29) + tmr(0.0)
403*59599516SKenneth E. Jansenc
404*59599516SKenneth E. Jansenc.... return
405*59599516SKenneth E. Jansenc
406*59599516SKenneth E. Jansen        return
407*59599516SKenneth E. Jansen        end
408