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