xref: /phasta/phSolver/incompressible/e3lhs.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine e3LHS ( u1,        u2,         u3,
2*59599516SKenneth E. Jansen     &                   uBar,      WdetJ,      rho,
3*59599516SKenneth E. Jansen     &                   rLui,      rmu,
4*59599516SKenneth E. Jansen     &                   tauC,      tauM,       tauBar,
5*59599516SKenneth E. Jansen     &                   shpfun,    shg,        xKebe,
6*59599516SKenneth E. Jansen     &                   xGoC )
7*59599516SKenneth E. Jansenc------------------------------------------------------------------------
8*59599516SKenneth E. Jansenc
9*59599516SKenneth E. Jansenc  This routine computes the left hand side tangent matrix at an
10*59599516SKenneth E. Jansenc  integration point.
11*59599516SKenneth E. Jansenc
12*59599516SKenneth E. Jansenc  input:
13*59599516SKenneth E. Jansenc     u1(npro)                  : x1-velocity
14*59599516SKenneth E. Jansenc     u2(npro)                  : x2-velocity
15*59599516SKenneth E. Jansenc     u3(npro)                  : x3-velocity
16*59599516SKenneth E. Jansenc     uBar(npro,3)              : u - tauM * Li
17*59599516SKenneth E. Jansenc     WdetJ(npro)               : weighted jacobian determinant
18*59599516SKenneth E. Jansenc     rLui(npro,3)              : total residual of NS equations
19*59599516SKenneth E. Jansenc     rmu(npro)                 : fluid viscosity
20*59599516SKenneth E. Jansenc     rho(npro)				  : fluid density
21*59599516SKenneth E. Jansenc     tauC(npro)                : continuity tau
22*59599516SKenneth E. Jansenc     tauM(npro)                : momentum tau
23*59599516SKenneth E. Jansenc     tauBar(npro)              : additional tau
24*59599516SKenneth E. Jansenc     shpfun(npro,nshl)         : element shpfun functions
25*59599516SKenneth E. Jansenc     shg(npro,nshl,3)          : global grad of element shape functions
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansenc  output:
28*59599516SKenneth E. Jansenc     xKebe(npro,9,nshl,nshl) : left hand side
29*59599516SKenneth E. Jansenc     xGoC(npro,4,nshl,nshl)    : left hand side
30*59599516SKenneth E. Jansenc
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansenc------------------------------------------------------------------------
33*59599516SKenneth E. Jansen      include "common.h"
34*59599516SKenneth E. Jansen
35*59599516SKenneth E. Jansen      dimension u1(npro),         u2(npro),       u3(npro),
36*59599516SKenneth E. Jansen     &          uBar(npro,3),     WdetJ(npro),    rho(npro),
37*59599516SKenneth E. Jansen     &          rLui(npro,3),     rmu(npro),
38*59599516SKenneth E. Jansen     &          tauC(npro),       tauM(npro),     tauBar(npro),
39*59599516SKenneth E. Jansen     &          shpfun(npro,nshl),shg(npro,nshl,3)
40*59599516SKenneth E. Jansen
41*59599516SKenneth E. Jansen      dimension xKebe(npro,9,nshl,nshl), xGoC(npro,4,nshl,nshl)
42*59599516SKenneth E. Jansenc
43*59599516SKenneth E. Jansenc.... local declarations
44*59599516SKenneth E. Jansenc
45*59599516SKenneth E. Jansen      dimension t1(npro,3),       t2(npro,3),      t3(npro,3),
46*59599516SKenneth E. Jansen     &          tmp1(npro),       tmp2(npro),
47*59599516SKenneth E. Jansen     &          tmp(npro),        tlW(npro)
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen      integer   aa, b
50*59599516SKenneth E. Jansen
51*59599516SKenneth E. Jansen      real*8    lhmFct, lhsFct,           tsFct(npro)
52*59599516SKenneth E. Jansen
53*59599516SKenneth E. Jansen      lhsFct = alfi * gami * Delt(itseq)
54*59599516SKenneth E. Jansen      lhmFct = almi * (one - flmpl)
55*59599516SKenneth E. Jansenc
56*59599516SKenneth E. Jansenc.... scale variables for efficiency
57*59599516SKenneth E. Jansenc
58*59599516SKenneth E. Jansen      tlW      = lhsFct * WdetJ
59*59599516SKenneth E. Jansen      tmp1      = tlW * rho
60*59599516SKenneth E. Jansen      tauM      = tlW * tauM
61*59599516SKenneth E. Jansen      tauC      = tlW * tauC
62*59599516SKenneth E. Jansen      rmu       = tlW * rmu
63*59599516SKenneth E. Jansen      tsFct     = lhmFct * WdetJ * rho
64*59599516SKenneth E. Jansen      if(iconvflow.eq.2) then  ! 2 is ubar form 3 is cons form but ubar tang.
65*59599516SKenneth E. Jansen         tauBar    = lhsFct * WdetJ * tauBar
66*59599516SKenneth E. Jansen         uBar(:,1) = tmp1 * uBar(:,1)
67*59599516SKenneth E. Jansen         uBar(:,2) = tmp1 * uBar(:,2)
68*59599516SKenneth E. Jansen         uBar(:,3) = tmp1 * uBar(:,3)
69*59599516SKenneth E. Jansen      else
70*59599516SKenneth E. Jansen         tauBar = zero  !lazy tangent...if effective code it
71*59599516SKenneth E. Jansen         uBar(:,1) = tmp1 * u1(:)
72*59599516SKenneth E. Jansen         uBar(:,2) = tmp1 * u2(:)
73*59599516SKenneth E. Jansen         uBar(:,3) = tmp1 * u3(:)
74*59599516SKenneth E. Jansen      endif
75*59599516SKenneth E. Jansen
76*59599516SKenneth E. Jansenc
77*59599516SKenneth E. Jansenc.... compute mass and convection terms
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansen      do b = 1, nshl
80*59599516SKenneth E. Jansen         t1(:,1) = uBar(:,1) * shg(:,b,1)
81*59599516SKenneth E. Jansen     &           + uBar(:,2) * shg(:,b,2)
82*59599516SKenneth E. Jansen     &           + uBar(:,3) * shg(:,b,3)
83*59599516SKenneth E. Jansenc
84*59599516SKenneth E. Jansenc t1=ubar_k N^b,k*rho*alpha_f*gamma*deltat*WdetJ
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansen         do aa = 1, nshl
87*59599516SKenneth E. Jansen            tmp1 = tsFct * shpfun(:,aa) * shpfun(:,b)
88*59599516SKenneth E. Jansen            tmp2 = tmp1 + t1(:,1) * shpfun(:,aa)
89*59599516SKenneth E. Jansenc
90*59599516SKenneth E. Jansenc tmp1=alpha_m*(1-lmp)*WdetJ*N^aN^b*rho   the time term CORRECT
91*59599516SKenneth E. Jansenc tmp2=tmp1+N^a*ubar_k N^b,k*rho*alpha_f*gamma*deltat*WdetJ   the
92*59599516SKenneth E. Jansenc    second term is convective term CORRECT
93*59599516SKenneth E. Jansenc
94*59599516SKenneth E. Jansen            xKebe(:,1,aa,b) = xKebe(:,1,aa,b) + tmp2
95*59599516SKenneth E. Jansen            xKebe(:,5,aa,b) = xKebe(:,5,aa,b) + tmp2
96*59599516SKenneth E. Jansen            xKebe(:,9,aa,b) = xKebe(:,9,aa,b) + tmp2
97*59599516SKenneth E. Jansen         enddo
98*59599516SKenneth E. Jansen      enddo
99*59599516SKenneth E. Jansenc
100*59599516SKenneth E. Jansenc.... compute the rest of K (symmetric terms)
101*59599516SKenneth E. Jansenc
102*59599516SKenneth E. Jansen      do b = 1, nshl
103*59599516SKenneth E. Jansen
104*59599516SKenneth E. Jansen         t1(:,1) = tauC * shg(:,b,1)
105*59599516SKenneth E. Jansen         t1(:,2) = tauC * shg(:,b,2)
106*59599516SKenneth E. Jansen         t1(:,3) = tauC * shg(:,b,3)
107*59599516SKenneth E. Jansen
108*59599516SKenneth E. Jansenc t1 is tauC*N^b_i,j*alpha_f*gamma*deltat*WdetJ
109*59599516SKenneth E. Jansen
110*59599516SKenneth E. Jansen         t2(:,1) = rmu  * shg(:,b,1)
111*59599516SKenneth E. Jansen         t2(:,2) = rmu  * shg(:,b,2)
112*59599516SKenneth E. Jansen         t2(:,3) = rmu  * shg(:,b,3)
113*59599516SKenneth E. Jansenc t2 is mu*N^b_j,k*alpha_f*gamma*deltat*WdetJ
114*59599516SKenneth E. Jansen
115*59599516SKenneth E. Jansen         tmp1 = tauM   * ( u1 * shg(:,b,1)
116*59599516SKenneth E. Jansen     &                   + u2 * shg(:,b,2)
117*59599516SKenneth E. Jansen     &                   + u3 * shg(:,b,3) )*rho
118*59599516SKenneth E. Jansenc tmp1 is tauM*(rho u_m N^b_j,m)*alpha_f*gamma*deltat*WdetJ
119*59599516SKenneth E. Jansen
120*59599516SKenneth E. Jansen         tmp2 = tauBar * ( rLui(:,1) * shg(:,b,1)
121*59599516SKenneth E. Jansen     &                   + rLui(:,2) * shg(:,b,2)
122*59599516SKenneth E. Jansen     &                   + rLui(:,3) * shg(:,b,3) )
123*59599516SKenneth E. Jansenc tmp2 is taubar*(L_m N^b_j,m)*alpha_f*gamma*deltat*WdetJ
124*59599516SKenneth E. Jansen         t3(:,1) = t2(:,1) + tmp1 * u1 + tmp2 * rLui(:,1)
125*59599516SKenneth E. Jansen         t3(:,2) = t2(:,2) + tmp1 * u2 + tmp2 * rLui(:,2)
126*59599516SKenneth E. Jansen         t3(:,3) = t2(:,3) + tmp1 * u3 + tmp2 * rLui(:,3)
127*59599516SKenneth E. Jansen
128*59599516SKenneth E. Jansenc t3 is   (mu*N^b_j,k + u_k tauM*(rho u_m N^b_j,m)+ L_k*taubar*(L_mN^b_j,m )
129*59599516SKenneth E. Jansenc   *alpha_f*gamma*deltat*WdetJ     which isline 2 page 40 of whiting
130*59599516SKenneth E. Jansenc   ALMOST (waiting to get hit with N^a_{i,k}
131*59599516SKenneth E. Jansenc mu correct NOW (wrong before) and rho weight on tauM term
132*59599516SKenneth E. Jansenc
133*59599516SKenneth E. Jansenc.... first do the (nodal) diagonal blocks
134*59599516SKenneth E. Jansenc
135*59599516SKenneth E. Jansen         aa  = b
136*59599516SKenneth E. Jansen
137*59599516SKenneth E. Jansen         tmp = t3(:,1) * shg(:,aa,1)
138*59599516SKenneth E. Jansen     &       + t3(:,2) * shg(:,aa,2)
139*59599516SKenneth E. Jansen     &       + t3(:,3) * shg(:,aa,3)
140*59599516SKenneth E. Jansenc previous command is the N^a_{i,k} dot product with t3 defined above
141*59599516SKenneth E. Jansen
142*59599516SKenneth E. Jansen         xKebe(:,1,aa,b) = xKebe(:,1,aa,b) + tmp
143*59599516SKenneth E. Jansen     &                      + t1(:,1) * shg(:,aa,1)
144*59599516SKenneth E. Jansen     &                      + t2(:,1) * shg(:,aa,1)
145*59599516SKenneth E. Jansen         xKebe(:,5,aa,b) = xKebe(:,5,aa,b) + tmp
146*59599516SKenneth E. Jansen     &                      + t1(:,2) * shg(:,aa,2)
147*59599516SKenneth E. Jansen     &                      + t2(:,2) * shg(:,aa,2)
148*59599516SKenneth E. Jansen         xKebe(:,9,aa,b) = xKebe(:,9,aa,b) + tmp
149*59599516SKenneth E. Jansen     &                      + t1(:,3) * shg(:,aa,3)
150*59599516SKenneth E. Jansen     &                      + t2(:,3) * shg(:,aa,3)
151*59599516SKenneth E. Jansenc
152*59599516SKenneth E. Jansen         tmp1               = t1(:,1) * shg(:,aa,2)
153*59599516SKenneth E. Jansen     &                      + t2(:,2) * shg(:,aa,1)
154*59599516SKenneth E. Jansen         xKebe(:,2,aa,b) = xKebe(:,2,aa,b) + tmp1
155*59599516SKenneth E. Jansen         xKebe(:,4,b,aa) = xKebe(:,4,b,aa) + tmp1
156*59599516SKenneth E. Jansenc
157*59599516SKenneth E. Jansen         tmp1               = t1(:,1) * shg(:,aa,3)
158*59599516SKenneth E. Jansen     &                      + t2(:,3) * shg(:,aa,1)
159*59599516SKenneth E. Jansen         xKebe(:,3,aa,b) = xKebe(:,3,aa,b) + tmp1
160*59599516SKenneth E. Jansen         xKebe(:,7,b,aa) = xKebe(:,7,b,aa) + tmp1
161*59599516SKenneth E. Jansenc
162*59599516SKenneth E. Jansen         tmp1               = t1(:,2) * shg(:,aa,3)
163*59599516SKenneth E. Jansen     &                      + t2(:,3) * shg(:,aa,2)
164*59599516SKenneth E. Jansen         xKebe(:,6,aa,b) = xKebe(:,6,aa,b) + tmp1
165*59599516SKenneth E. Jansen         xKebe(:,8,b,aa) = xKebe(:,8,b,aa) + tmp1
166*59599516SKenneth E. Jansenc
167*59599516SKenneth E. Jansenc.... now the off-diagonal (nodal) blocks
168*59599516SKenneth E. Jansenc
169*59599516SKenneth E. Jansen         do aa = b+1, nshl
170*59599516SKenneth E. Jansen            tmp             = t3(:,1) * shg(:,aa,1)
171*59599516SKenneth E. Jansen     &                      + t3(:,2) * shg(:,aa,2)
172*59599516SKenneth E. Jansen     &                      + t3(:,3) * shg(:,aa,3)
173*59599516SKenneth E. Jansenc
174*59599516SKenneth E. Jansen            tmp1            = tmp
175*59599516SKenneth E. Jansen     &                      + t1(:,1) * shg(:,aa,1)
176*59599516SKenneth E. Jansen     &                      + t2(:,1) * shg(:,aa,1)
177*59599516SKenneth E. Jansen            xKebe(:,1,aa,b) = xKebe(:,1,aa,b) + tmp1
178*59599516SKenneth E. Jansen            xKebe(:,1,b,aa) = xKebe(:,1,b,aa) + tmp1
179*59599516SKenneth E. Jansenc
180*59599516SKenneth E. Jansen            tmp1            = tmp
181*59599516SKenneth E. Jansen     &                      + t1(:,2) * shg(:,aa,2)
182*59599516SKenneth E. Jansen     &                      + t2(:,2) * shg(:,aa,2)
183*59599516SKenneth E. Jansen            xKebe(:,5,aa,b) = xKebe(:,5,aa,b) + tmp1
184*59599516SKenneth E. Jansen            xKebe(:,5,b,aa) = xKebe(:,5,b,aa) + tmp1
185*59599516SKenneth E. Jansenc
186*59599516SKenneth E. Jansen            tmp1            = tmp
187*59599516SKenneth E. Jansen     &                      + t1(:,3) * shg(:,aa,3)
188*59599516SKenneth E. Jansen     &                      + t2(:,3) * shg(:,aa,3)
189*59599516SKenneth E. Jansen            xKebe(:,9,aa,b) = xKebe(:,9,aa,b) + tmp1
190*59599516SKenneth E. Jansen            xKebe(:,9,b,aa) = xKebe(:,9,b,aa) + tmp1
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansenc.... ( i != j )
193*59599516SKenneth E. Jansenc
194*59599516SKenneth E. Jansen            tmp1               = t1(:,1) * shg(:,aa,2)
195*59599516SKenneth E. Jansen     &                         + t2(:,2) * shg(:,aa,1)
196*59599516SKenneth E. Jansen            xKebe(:,2,aa,b) = xKebe(:,2,aa,b) + tmp1
197*59599516SKenneth E. Jansen            xKebe(:,4,b,aa) = xKebe(:,4,b,aa) + tmp1
198*59599516SKenneth E. Jansenc
199*59599516SKenneth E. Jansen            tmp1               = t1(:,1) * shg(:,aa,3)
200*59599516SKenneth E. Jansen     &                         + t2(:,3) * shg(:,aa,1)
201*59599516SKenneth E. Jansen            xKebe(:,3,aa,b) = xKebe(:,3,aa,b) + tmp1
202*59599516SKenneth E. Jansen            xKebe(:,7,b,aa) = xKebe(:,7,b,aa) + tmp1
203*59599516SKenneth E. Jansenc
204*59599516SKenneth E. Jansen            tmp1               = t1(:,2) * shg(:,aa,1)
205*59599516SKenneth E. Jansen     &                         + t2(:,1) * shg(:,aa,2)
206*59599516SKenneth E. Jansen            xKebe(:,4,aa,b) = xKebe(:,4,aa,b) + tmp1
207*59599516SKenneth E. Jansen            xKebe(:,2,b,aa) = xKebe(:,2,b,aa) + tmp1
208*59599516SKenneth E. Jansenc
209*59599516SKenneth E. Jansen            tmp1               = t1(:,2) * shg(:,aa,3)
210*59599516SKenneth E. Jansen     &                         + t2(:,3) * shg(:,aa,2)
211*59599516SKenneth E. Jansen            xKebe(:,6,aa,b) = xKebe(:,6,aa,b) + tmp1
212*59599516SKenneth E. Jansen            xKebe(:,8,b,aa) = xKebe(:,8,b,aa) + tmp1
213*59599516SKenneth E. Jansenc
214*59599516SKenneth E. Jansen            tmp1               = t1(:,3) * shg(:,aa,1)
215*59599516SKenneth E. Jansen     &                         + t2(:,1) * shg(:,aa,3)
216*59599516SKenneth E. Jansen            xKebe(:,7,aa,b) = xKebe(:,7,aa,b) + tmp1
217*59599516SKenneth E. Jansen            xKebe(:,3,b,aa) = xKebe(:,3,b,aa) + tmp1
218*59599516SKenneth E. Jansenc
219*59599516SKenneth E. Jansen            tmp1               = t1(:,3) * shg(:,aa,2)
220*59599516SKenneth E. Jansen     &                         + t2(:,2) * shg(:,aa,3)
221*59599516SKenneth E. Jansen            xKebe(:,8,aa,b) = xKebe(:,8,aa,b) + tmp1
222*59599516SKenneth E. Jansen            xKebe(:,6,b,aa) = xKebe(:,6,b,aa) + tmp1
223*59599516SKenneth E. Jansenc
224*59599516SKenneth E. Jansen         enddo
225*59599516SKenneth E. Jansen      enddo
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansenc.... compute G   Nai Nbp,j
228*59599516SKenneth E. Jansenc
229*59599516SKenneth E. Jansen
230*59599516SKenneth E. Jansen      do b = 1, nshl
231*59599516SKenneth E. Jansen         t1(:,1) = tlW * shg(:,b,1)
232*59599516SKenneth E. Jansen         t1(:,2) = tlW * shg(:,b,2)
233*59599516SKenneth E. Jansen         t1(:,3) = tlW * shg(:,b,3)
234*59599516SKenneth E. Jansen         do aa = 1, nshl
235*59599516SKenneth E. Jansen            xGoC(:,1,aa,b) = xGoC(:,1,aa,b) + t1(:,1) * shpfun(:,aa)
236*59599516SKenneth E. Jansen            xGoC(:,2,aa,b) = xGoC(:,2,aa,b) + t1(:,2) * shpfun(:,aa)
237*59599516SKenneth E. Jansen            xGoC(:,3,aa,b) = xGoC(:,3,aa,b) + t1(:,3) * shpfun(:,aa)
238*59599516SKenneth E. Jansen         enddo
239*59599516SKenneth E. Jansen      enddo
240*59599516SKenneth E. Jansenc
241*59599516SKenneth E. Jansenc.... compute C
242*59599516SKenneth E. Jansenc we divide by rho because the L on the weight space is density divided
243*59599516SKenneth E. Jansenc      form
244*59599516SKenneth E. Jansenc
245*59599516SKenneth E. Jansen      tauM=tauM/rho
246*59599516SKenneth E. Jansen      do b = 1, nshl
247*59599516SKenneth E. Jansen         t1(:,1) = tauM * shg(:,b,1)
248*59599516SKenneth E. Jansen         t1(:,2) = tauM * shg(:,b,2)
249*59599516SKenneth E. Jansen         t1(:,3) = tauM * shg(:,b,3)
250*59599516SKenneth E. Jansen         do aa = b, nshl
251*59599516SKenneth E. Jansen            xGoC(:,4,aa,b) = xGoC(:,4,aa,b)
252*59599516SKenneth E. Jansen     &                      + t1(:,1) * shg(:,aa,1)
253*59599516SKenneth E. Jansen     &                      + t1(:,2) * shg(:,aa,2)
254*59599516SKenneth E. Jansen     &                      + t1(:,3) * shg(:,aa,3)
255*59599516SKenneth E. Jansen         enddo
256*59599516SKenneth E. Jansen      enddo
257*59599516SKenneth E. Jansen
258*59599516SKenneth E. Jansenc
259*59599516SKenneth E. Jansenc.... return
260*59599516SKenneth E. Jansenc
261*59599516SKenneth E. Jansen      return
262*59599516SKenneth E. Jansen      end
263*59599516SKenneth E. Jansen
264*59599516SKenneth E. Jansen
265*59599516SKenneth E. Jansenc------------------------------------------------------------------------
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansenc     calculate the tangent matrix for the advection-diffusion equation
268*59599516SKenneth E. Jansenc
269*59599516SKenneth E. Jansenc------------------------------------------------------------------------
270*59599516SKenneth E. Jansen      subroutine e3LHSSclr ( uMod,      giju,       dcFct,
271*59599516SKenneth E. Jansen     &                       Sclr,      Sdot,       gradS,
272*59599516SKenneth E. Jansen     &                       WdetJ,     rLS,        tauS,
273*59599516SKenneth E. Jansen     &                       shpfun,    shg,        srcL,
274*59599516SKenneth E. Jansen     &                       diffus,
275*59599516SKenneth E. Jansen     &                       xSebe )
276*59599516SKenneth E. Jansen
277*59599516SKenneth E. Jansenc
278*59599516SKenneth E. Jansen      include "common.h"
279*59599516SKenneth E. Jansen
280*59599516SKenneth E. Jansen      real*8    uMod(npro,nsd),
281*59599516SKenneth E. Jansen     &          Sclr(npro),       Sdot(npro),   gradS(npro,nsd),
282*59599516SKenneth E. Jansen     &          WdetJ(npro),      rLS(npro),        rho(npro),
283*59599516SKenneth E. Jansen     &          tauS(npro),       shpfun(npro,nshl),
284*59599516SKenneth E. Jansen     &          srcL(npro),        shg(npro,nshl,3),
285*59599516SKenneth E. Jansen     &			xSebe(npro,nshl,nshl)
286*59599516SKenneth E. Jansen
287*59599516SKenneth E. Jansen      real*8    diffus(npro),  cp,  kptmp(npro),tauSo(npro)
288*59599516SKenneth E. Jansen
289*59599516SKenneth E. Jansenc
290*59599516SKenneth E. Jansenc.... local declarations
291*59599516SKenneth E. Jansenc
292*59599516SKenneth E. Jansen      dimension t1(npro,3),       tmp1(npro),       tmp2(npro),
293*59599516SKenneth E. Jansen     &          tmp(npro),        dcFct(npro),      giju(npro,6)
294*59599516SKenneth E. Jansen
295*59599516SKenneth E. Jansen      integer   aa, b
296*59599516SKenneth E. Jansen
297*59599516SKenneth E. Jansen      real*8    lhsFct,           tsFct(npro)
298*59599516SKenneth E. Jansen
299*59599516SKenneth E. Jansen      lhsFct = alfi * gami * Delt(itseq)
300*59599516SKenneth E. Jansenc
301*59599516SKenneth E. Jansenc.... scale variables for efficiency
302*59599516SKenneth E. Jansenc
303*59599516SKenneth E. Jansen      tauSo     = tauS
304*59599516SKenneth E. Jansen      tauS      = lhsFct * WdetJ * tauS
305*59599516SKenneth E. Jansen      kptmp     = lhsFct * WdetJ * diffus
306*59599516SKenneth E. Jansen      tsFct     = almi   * WdetJ * (one - flmpl)
307*59599516SKenneth E. Jansen      srcL       = srcL    * WdetJ * lhsFct
308*59599516SKenneth E. Jansenc
309*59599516SKenneth E. Jansenc.... compute mass and convection terms
310*59599516SKenneth E. Jansenc
311*59599516SKenneth E. Jansen      do b = 1, nshl
312*59599516SKenneth E. Jansen         t1(:,1) = WdetJ * ( uMod(:,1) * shg(:,b,1)
313*59599516SKenneth E. Jansen     &                     + uMod(:,2) * shg(:,b,2)
314*59599516SKenneth E. Jansen     &                     + uMod(:,3) * shg(:,b,3) )
315*59599516SKenneth E. Jansen         t1(:,2) = t1(:,1) * tauSo
316*59599516SKenneth E. Jansen         do aa = 1, nshl
317*59599516SKenneth E. Jansen            tmp1 = shpfun(:,aa) * shpfun(:,b)
318*59599516SKenneth E. Jansen            tmp2 = shpfun(:,aa) * lhsFct
319*59599516SKenneth E. Jansen            xSebe(:,aa,b) = xSebe(:,aa,b) + tmp1 * (tsFct + srcL)
320*59599516SKenneth E. Jansen     &                                    + tmp2 * t1(:,1)
321*59599516SKenneth E. Jansenc
322*59599516SKenneth E. Jansenc.... compute mass term for stab u_j N_{a,j} tau N_b (note that a and b
323*59599516SKenneth E. Jansenc            flipped on both sides below)
324*59599516SKenneth E. Jansenc
325*59599516SKenneth E. Jansen            xSebe(:,b,aa) = xSebe(:,b,aa) + t1(:,2)*shpfun(:,aa)
326*59599516SKenneth E. Jansen         enddo
327*59599516SKenneth E. Jansen      enddo
328*59599516SKenneth E. Jansenc
329*59599516SKenneth E. Jansenc.... compute the rest of S (symmetric terms)
330*59599516SKenneth E. Jansenc
331*59599516SKenneth E. Jansen      do b = 1, nshl
332*59599516SKenneth E. Jansen         tmp     = tauS(:)
333*59599516SKenneth E. Jansen     &             * ( uMod(:,1) * shg(:,b,1)
334*59599516SKenneth E. Jansen     &               + uMod(:,2) * shg(:,b,2)
335*59599516SKenneth E. Jansen     &               + uMod(:,3) * shg(:,b,3) )
336*59599516SKenneth E. Jansen
337*59599516SKenneth E. Jansen         t1(:,1) = kptmp * shg(:,b,1) + uMod(:,1) * tmp
338*59599516SKenneth E. Jansen         t1(:,2) = kptmp * shg(:,b,2) + uMod(:,2) * tmp
339*59599516SKenneth E. Jansen         t1(:,3) = kptmp * shg(:,b,3) + uMod(:,3) * tmp
340*59599516SKenneth E. Jansen         if (idcsclr(1) .ne. 0) then
341*59599516SKenneth E. Jansen            if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or.
342*59599516SKenneth E. Jansen     &           (idcsclr(2).eq.2 .and. isclr.eq.2)) then ! scalar with dc
343*59599516SKenneth E. Jansenc
344*59599516SKenneth E. Jansen               tmp = WdetJ * dcFct * lhsFct
345*59599516SKenneth E. Jansenc
346*59599516SKenneth E. Jansen               giju(:,1)	= tmp * giju(:,1)
347*59599516SKenneth E. Jansen               giju(:,2)	= tmp * giju(:,2)
348*59599516SKenneth E. Jansen               giju(:,3)	= tmp * giju(:,3)
349*59599516SKenneth E. Jansen               giju(:,4)	= tmp * giju(:,4)
350*59599516SKenneth E. Jansen               giju(:,5)	= tmp * giju(:,5)
351*59599516SKenneth E. Jansen               giju(:,6)	= tmp * giju(:,6)
352*59599516SKenneth E. Jansenc
353*59599516SKenneth E. Jansen               t1(:,1) = t1(:,1) + giju(:,1) * shg(:,b,1)
354*59599516SKenneth E. Jansen     2                           + giju(:,4) * shg(:,b,2)
355*59599516SKenneth E. Jansen     3			         + giju(:,6) * shg(:,b,3)
356*59599516SKenneth E. Jansen               t1(:,2) = t1(:,2) + giju(:,4) * shg(:,b,1)
357*59599516SKenneth E. Jansen     2                           + giju(:,2) * shg(:,b,2)
358*59599516SKenneth E. Jansen     3			         + giju(:,5) * shg(:,b,3)
359*59599516SKenneth E. Jansen               t1(:,3) = t1(:,3) + giju(:,6) * shg(:,b,1)
360*59599516SKenneth E. Jansen     2                           + giju(:,5) * shg(:,b,2)
361*59599516SKenneth E. Jansen     3			         + giju(:,3) * shg(:,b,3)
362*59599516SKenneth E. Jansen            endif
363*59599516SKenneth E. Jansen         endif                  !end of idcsclr
364*59599516SKenneth E. Jansenc
365*59599516SKenneth E. Jansenc.... first do the (nodal) diagonal blocks
366*59599516SKenneth E. Jansenc
367*59599516SKenneth E. Jansen         aa  = b
368*59599516SKenneth E. Jansen
369*59599516SKenneth E. Jansen         xSebe(:,aa,b) = xSebe(:,aa,b) + t1(:,1) * shg(:,aa,1)
370*59599516SKenneth E. Jansen     &                                 + t1(:,2) * shg(:,aa,2)
371*59599516SKenneth E. Jansen     &                                 + t1(:,3) * shg(:,aa,3)
372*59599516SKenneth E. Jansen
373*59599516SKenneth E. Jansenc
374*59599516SKenneth E. Jansenc.... now the off-diagonal (nodal) blocks
375*59599516SKenneth E. Jansenc
376*59599516SKenneth E. Jansen         do aa = b+1, nshl
377*59599516SKenneth E. Jansen            tmp             = t1(:,1) * shg(:,aa,1)
378*59599516SKenneth E. Jansen     &                      + t1(:,2) * shg(:,aa,2)
379*59599516SKenneth E. Jansen     &                      + t1(:,3) * shg(:,aa,3)
380*59599516SKenneth E. Jansenc
381*59599516SKenneth E. Jansen            xSebe(:,aa,b) = xSebe(:,aa,b) + tmp
382*59599516SKenneth E. Jansen            xSebe(:,b,aa) = xSebe(:,b,aa) + tmp
383*59599516SKenneth E. Jansenc
384*59599516SKenneth E. Jansen         enddo
385*59599516SKenneth E. Jansen      enddo
386*59599516SKenneth E. Jansen
387*59599516SKenneth E. Jansenc
388*59599516SKenneth E. Jansenc.... return
389*59599516SKenneth E. Jansenc
390*59599516SKenneth E. Jansen      return
391*59599516SKenneth E. Jansen      end
392*59599516SKenneth E. Jansen
393