1*59599516SKenneth E. Jansen subroutine e3Res ( u1, u2, u3, 2*59599516SKenneth E. Jansen & uBar, aci, WdetJ, 3*59599516SKenneth E. Jansen & g1yi, g2yi, g3yi, 4*59599516SKenneth E. Jansen & rLui, rmu, rho, 5*59599516SKenneth E. Jansen & tauC, tauM, tauBar, 6*59599516SKenneth E. Jansen & shpfun, shg, src, 7*59599516SKenneth E. Jansen & rl, pres, acl, 8*59599516SKenneth E. Jansen & rlsli) 9*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 10*59599516SKenneth E. Jansenc 11*59599516SKenneth E. Jansenc This routine computes the residual vector at an 12*59599516SKenneth E. Jansenc integration point. 13*59599516SKenneth E. Jansenc 14*59599516SKenneth E. Jansenc input: 15*59599516SKenneth E. Jansenc u1(npro) : x1-velocity 16*59599516SKenneth E. Jansenc u2(npro) : x2-velocity 17*59599516SKenneth E. Jansenc u3(npro) : x3-velocity 18*59599516SKenneth E. Jansenc uBar(npro,3) : u - tauM * Li 19*59599516SKenneth E. Jansenc aci(npro,3) : acceleration 20*59599516SKenneth E. Jansenc rlsli(npro,6) : resolved Leonard stresses 21*59599516SKenneth E. Jansenc WdetJ(npro) : weighted jacobian determinant 22*59599516SKenneth E. Jansenc g1yi(npro,ndof) : x1-gradient of variables 23*59599516SKenneth E. Jansenc g2yi(npro,ndof) : x2-gradient of variables 24*59599516SKenneth E. Jansenc g3yi(npro,ndof) : x3-gradient of variables 25*59599516SKenneth E. Jansenc rLui(npro,3) : total residual of NS equations 26*59599516SKenneth E. Jansenc rmu(npro) : fluid viscosity 27*59599516SKenneth E. Jansenc rho(npro) : density 28*59599516SKenneth E. Jansenc tauC(npro) : continuity tau 29*59599516SKenneth E. Jansenc tauM(npro) : momentum tau 30*59599516SKenneth E. Jansenc tauBar(npro) : additional tau 31*59599516SKenneth E. Jansenc shpfun(npro,nshl) : element shape functions 32*59599516SKenneth E. Jansenc shg(npro,nshl,nsd) : global grad of element shape functions 33*59599516SKenneth E. Jansenc src(npro,nsd) : body force term 34*59599516SKenneth E. Jansenc 35*59599516SKenneth E. Jansenc output: 36*59599516SKenneth E. Jansenc rl(npro,nshl,nflow) 37*59599516SKenneth E. Jansenc 38*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 39*59599516SKenneth E. Jansen include "common.h" 40*59599516SKenneth E. Jansen 41*59599516SKenneth E. Jansen dimension u1(npro), u2(npro), u3(npro), 42*59599516SKenneth E. Jansen & uBar(npro,nsd), aci(npro,nsd), WdetJ(npro), 43*59599516SKenneth E. Jansen & g1yi(npro,nflow), g2yi(npro,nflow), g3yi(npro,nflow), 44*59599516SKenneth E. Jansen & rLui(npro,nsd), rmu(npro), rho(npro), 45*59599516SKenneth E. Jansen & tauC(npro), tauM(npro), tauBar(npro), 46*59599516SKenneth E. Jansen & shpfun(npro,nshl),shg(npro,nshl,nsd), src(npro,nsd), 47*59599516SKenneth E. Jansen & pres(npro) 48*59599516SKenneth E. Jansen 49*59599516SKenneth E. Jansen dimension rl(npro,nshl,nflow), 50*59599516SKenneth E. Jansen & acl(npro,nshl,ndof), 51*59599516SKenneth E. Jansen & rlsli(npro,6) 52*59599516SKenneth E. Jansenc 53*59599516SKenneth E. Jansenc.... local declarations 54*59599516SKenneth E. Jansenc 55*59599516SKenneth E. Jansen real*8 tmp1(npro), tmp2(npro), tmp3(npro), 56*59599516SKenneth E. Jansen & tmp(npro), rGNa(npro,nsd,nsd), rNa(npro,nsd), 57*59599516SKenneth E. Jansen & locmass(npro,nshl),omega(3) 58*59599516SKenneth E. Jansen 59*59599516SKenneth E. Jansen integer aa 60*59599516SKenneth E. Jansenc 61*59599516SKenneth E. Jansenc.... initialize multipliers for Na and Na_{,i} 62*59599516SKenneth E. Jansenc 63*59599516SKenneth E. Jansen rNa = zero 64*59599516SKenneth E. Jansen rGNa = zero 65*59599516SKenneth E. Jansenc 66*59599516SKenneth E. Jansenc.... compute the Na multiplier 67*59599516SKenneth E. Jansenc 68*59599516SKenneth E. Jansen tmps = one-flmpr ! consistant mass factor 69*59599516SKenneth E. Jansen 70*59599516SKenneth E. Jansenc 71*59599516SKenneth E. Jansenc no density yet...it comes later 72*59599516SKenneth E. Jansenc 73*59599516SKenneth E. Jansen rNa(:,1) = aci(:,1) * tmps 74*59599516SKenneth E. Jansen & - src(:,1) 75*59599516SKenneth E. Jansen rNa(:,2) = aci(:,2) * tmps 76*59599516SKenneth E. Jansen & - src(:,2) 77*59599516SKenneth E. Jansen rNa(:,3) = aci(:,3) * tmps 78*59599516SKenneth E. Jansen & - src(:,3) 79*59599516SKenneth E. Jansen 80*59599516SKenneth E. Jansenc 81*59599516SKenneth E. Jansenc.... rotating frame terms if needed 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansen if(matflg(6,1).eq.1) then ! rotation 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen omega(1)=datmat(1,6,1) 87*59599516SKenneth E. Jansen omega(2)=datmat(2,6,1) 88*59599516SKenneth E. Jansen omega(3)=datmat(3,6,1) 89*59599516SKenneth E. Jansenc 90*59599516SKenneth E. Jansenc no density yet...it comes later 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen 93*59599516SKenneth E. Jansen rNa(:,1) = rNa(:,1) + (omega(2)-omega(3)) * tauM * rLui(:,1) 94*59599516SKenneth E. Jansen rNa(:,2) = rNa(:,2) + (omega(3)-omega(1)) * tauM * rLui(:,2) 95*59599516SKenneth E. Jansen rNa(:,3) = rNa(:,3) + (omega(1)-omega(2)) * tauM * rLui(:,3) 96*59599516SKenneth E. Jansen endif 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen 99*59599516SKenneth E. Jansenc 100*59599516SKenneth E. Jansenc.... compute the Na,i multiplier 101*59599516SKenneth E. Jansenc 102*59599516SKenneth E. Jansen tmp = -pres + tauC * (g1yi(:,2) + g2yi(:,3) + g3yi(:,4)) 103*59599516SKenneth E. Jansen tmp1 = rmu * ( g2yi(:,2) + g1yi(:,3) ) 104*59599516SKenneth E. Jansen tmp2 = rmu * ( g3yi(:,3) + g2yi(:,4) ) 105*59599516SKenneth E. Jansen tmp3 = rmu * ( g1yi(:,4) + g3yi(:,2) ) 106*59599516SKenneth E. Jansen 107*59599516SKenneth E. Jansen 108*59599516SKenneth E. Jansen if(iconvflow.eq.2) then ! advective form (NO IBP either) 109*59599516SKenneth E. Jansenc 110*59599516SKenneth E. Jansenc no density yet...it comes later 111*59599516SKenneth E. Jansenc 112*59599516SKenneth E. Jansen rNa(:,1) = rNa(:,1) 113*59599516SKenneth E. Jansen & + ubar(:,1) * g1yi(:,2) 114*59599516SKenneth E. Jansen & + ubar(:,2) * g2yi(:,2) 115*59599516SKenneth E. Jansen & + ubar(:,3) * g3yi(:,2) 116*59599516SKenneth E. Jansen rNa(:,2) = rNa(:,2) 117*59599516SKenneth E. Jansen & + ubar(:,1) * g1yi(:,3) 118*59599516SKenneth E. Jansen & + ubar(:,2) * g2yi(:,3) 119*59599516SKenneth E. Jansen & + ubar(:,3) * g3yi(:,3) 120*59599516SKenneth E. Jansen rNa(:,3) = rNa(:,3) 121*59599516SKenneth E. Jansen & + ubar(:,1) * g1yi(:,4) 122*59599516SKenneth E. Jansen & + ubar(:,2) * g2yi(:,4) 123*59599516SKenneth E. Jansen & + ubar(:,3) * g3yi(:,4) 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen rGNa(:,1,1) = two * rmu * g1yi(:,2) + tmp 126*59599516SKenneth E. Jansen rGNa(:,1,2) = tmp1 127*59599516SKenneth E. Jansen rGNa(:,1,3) = tmp3 128*59599516SKenneth E. Jansen rGNa(:,2,1) = tmp1 129*59599516SKenneth E. Jansen rGNa(:,2,2) = two * rmu * g2yi(:,3) + tmp 130*59599516SKenneth E. Jansen rGNa(:,2,3) = tmp2 131*59599516SKenneth E. Jansen rGNa(:,3,1) = tmp3 132*59599516SKenneth E. Jansen rGNa(:,3,2) = tmp2 133*59599516SKenneth E. Jansen rGNa(:,3,3) = two * rmu * g3yi(:,4) + tmp 134*59599516SKenneth E. Jansen else ! conservative form (with IBP) 135*59599516SKenneth E. Jansen 136*59599516SKenneth E. Jansenc IBP conservative convection 137*59599516SKenneth E. Jansenc ||||| 138*59599516SKenneth E. Jansenc vvvvv 139*59599516SKenneth E. Jansen rGNa(:,1,1) = two * rmu * g1yi(:,2) + tmp - u1(:)*u1(:)*rho(:) 140*59599516SKenneth E. Jansen rGNa(:,1,2) = tmp1 - u1(:)*u2(:)*rho(:) 141*59599516SKenneth E. Jansen rGNa(:,1,3) = tmp3 - u1(:)*u3(:)*rho(:) 142*59599516SKenneth E. Jansen rGNa(:,2,1) = tmp1 - u1(:)*u2(:)*rho(:) 143*59599516SKenneth E. Jansen rGNa(:,2,2) = two * rmu * g2yi(:,3) + tmp - u2(:)*u2(:)*rho(:) 144*59599516SKenneth E. Jansen rGNa(:,2,3) = tmp2 - u3(:)*u2(:)*rho(:) 145*59599516SKenneth E. Jansen rGNa(:,3,1) = tmp3 - u1(:)*u3(:)*rho(:) 146*59599516SKenneth E. Jansen rGNa(:,3,2) = tmp2 - u3(:)*u2(:)*rho(:) 147*59599516SKenneth E. Jansen rGNa(:,3,3) = two * rmu * g3yi(:,4) + tmp - u3(:)*u3(:)*rho(:) 148*59599516SKenneth E. Jansen endif 149*59599516SKenneth E. Jansen if((iLES.gt.10).and.(iLES.lt.20)) then ! bard 150*59599516SKenneth E. Jansen rGNa(:,1,1) = rGNa(:,1,1) - rlsli(:,1)*rho(:) 151*59599516SKenneth E. Jansen rGNa(:,1,2) = rGNa(:,1,2) - rlsli(:,4)*rho(:) 152*59599516SKenneth E. Jansen rGNa(:,1,3) = rGNa(:,1,3) - rlsli(:,5)*rho(:) 153*59599516SKenneth E. Jansen rGNa(:,2,1) = rGNa(:,2,1) - rlsli(:,4)*rho(:) 154*59599516SKenneth E. Jansen rGNa(:,2,2) = rGNa(:,2,2) - rlsli(:,2)*rho(:) 155*59599516SKenneth E. Jansen rGNa(:,2,3) = rGNa(:,2,3) - rlsli(:,6)*rho(:) 156*59599516SKenneth E. Jansen rGNa(:,3,1) = rGNa(:,3,1) - rlsli(:,5)*rho(:) 157*59599516SKenneth E. Jansen rGNa(:,3,2) = rGNa(:,3,2) - rlsli(:,6)*rho(:) 158*59599516SKenneth E. Jansen rGNa(:,3,3) = rGNa(:,3,3) - rlsli(:,3)*rho(:) 159*59599516SKenneth E. Jansen endif 160*59599516SKenneth E. Jansen 161*59599516SKenneth E. Jansen tmp1 = tauM * rLui(:,1) 162*59599516SKenneth E. Jansen tmp2 = tauM * rLui(:,2) 163*59599516SKenneth E. Jansen tmp3 = tauM * rLui(:,3) 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansen rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * u1 166*59599516SKenneth E. Jansen rGNa(:,1,2) = rGNa(:,1,2) + tmp1 * u2 167*59599516SKenneth E. Jansen rGNa(:,1,3) = rGNa(:,1,3) + tmp1 * u3 168*59599516SKenneth E. Jansen rGNa(:,2,1) = rGNa(:,2,1) + tmp2 * u1 169*59599516SKenneth E. Jansen rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * u2 170*59599516SKenneth E. Jansen rGNa(:,2,3) = rGNa(:,2,3) + tmp2 * u3 171*59599516SKenneth E. Jansen rGNa(:,3,1) = rGNa(:,3,1) + tmp3 * u1 172*59599516SKenneth E. Jansen rGNa(:,3,2) = rGNa(:,3,2) + tmp3 * u2 173*59599516SKenneth E. Jansen rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * u3 174*59599516SKenneth E. Jansen 175*59599516SKenneth E. Jansen if(iconvflow.eq.1) then 176*59599516SKenneth E. Jansenc 177*59599516SKenneth E. Jansenc... get the u_j w_{i,i} term in there to match A_j^T w_{i,j} tau L_i 178*59599516SKenneth E. Jansenc to match the SUPG of incompressible limit 179*59599516SKenneth E. Jansenc 180*59599516SKenneth E. Jansen rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * u1 181*59599516SKenneth E. Jansen rGNa(:,1,2) = rGNa(:,1,2) + tmp2 * u1 182*59599516SKenneth E. Jansen rGNa(:,1,3) = rGNa(:,1,3) + tmp3 * u1 183*59599516SKenneth E. Jansen rGNa(:,2,1) = rGNa(:,2,1) + tmp1 * u2 184*59599516SKenneth E. Jansen rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * u2 185*59599516SKenneth E. Jansen rGNa(:,2,3) = rGNa(:,2,3) + tmp3 * u2 186*59599516SKenneth E. Jansen rGNa(:,3,1) = rGNa(:,3,1) + tmp1 * u3 187*59599516SKenneth E. Jansen rGNa(:,3,2) = rGNa(:,3,2) + tmp2 * u3 188*59599516SKenneth E. Jansen rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * u3 189*59599516SKenneth E. Jansen endif 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansen if(iconvflow.eq.2) then ! advective form has a taubar term to restore con 192*59599516SKenneth E. Jansen tmp1 = tauBar 193*59599516SKenneth E. Jansen & * ( rLui(:,1) * g1yi(:,2) 194*59599516SKenneth E. Jansen & + rLui(:,2) * g2yi(:,2) 195*59599516SKenneth E. Jansen & + rLui(:,3) * g3yi(:,2) ) 196*59599516SKenneth E. Jansen tmp2 = tauBar 197*59599516SKenneth E. Jansen & * ( rLui(:,1) * g1yi(:,3) 198*59599516SKenneth E. Jansen & + rLui(:,2) * g2yi(:,3) 199*59599516SKenneth E. Jansen & + rLui(:,3) * g3yi(:,3) ) 200*59599516SKenneth E. Jansen tmp3 = tauBar 201*59599516SKenneth E. Jansen & * ( rLui(:,1) * g1yi(:,4) 202*59599516SKenneth E. Jansen & + rLui(:,2) * g2yi(:,4) 203*59599516SKenneth E. Jansen & + rLui(:,3) * g3yi(:,4) ) 204*59599516SKenneth E. Jansen 205*59599516SKenneth E. Jansen rGNa(:,1,1) = rGNa(:,1,1) + tmp1 * rLui(:,1) 206*59599516SKenneth E. Jansen rGNa(:,1,2) = rGNa(:,1,2) + tmp1 * rLui(:,2) 207*59599516SKenneth E. Jansen rGNa(:,1,3) = rGNa(:,1,3) + tmp1 * rLui(:,3) 208*59599516SKenneth E. Jansen rGNa(:,2,1) = rGNa(:,2,1) + tmp2 * rLui(:,1) 209*59599516SKenneth E. Jansen rGNa(:,2,2) = rGNa(:,2,2) + tmp2 * rLui(:,2) 210*59599516SKenneth E. Jansen rGNa(:,2,3) = rGNa(:,2,3) + tmp2 * rLui(:,3) 211*59599516SKenneth E. Jansen rGNa(:,3,1) = rGNa(:,3,1) + tmp3 * rLui(:,1) 212*59599516SKenneth E. Jansen rGNa(:,3,2) = rGNa(:,3,2) + tmp3 * rLui(:,2) 213*59599516SKenneth E. Jansen rGNa(:,3,3) = rGNa(:,3,3) + tmp3 * rLui(:,3) 214*59599516SKenneth E. Jansen endif ! end of advective form 215*59599516SKenneth E. Jansenc 216*59599516SKenneth E. Jansenc.... everything that gets multiplied by rNa was supposed 217*59599516SKenneth E. Jansenc to have density multiplying it. Do it now. 218*59599516SKenneth E. Jansen 219*59599516SKenneth E. Jansen rNa(:,1) = rNa(:,1) * rho 220*59599516SKenneth E. Jansen rNa(:,2) = rNa(:,2) * rho 221*59599516SKenneth E. Jansen rNa(:,3) = rNa(:,3) * rho 222*59599516SKenneth E. Jansen 223*59599516SKenneth E. Jansenc 224*59599516SKenneth E. Jansenc 225*59599516SKenneth E. Jansenc.... multiply the residual pieces by the weight space 226*59599516SKenneth E. Jansenc 227*59599516SKenneth E. Jansen do aa = 1,nshl 228*59599516SKenneth E. Jansenc 229*59599516SKenneth E. Jansenc.... continuity 230*59599516SKenneth E. Jansenc 231*59599516SKenneth E. Jansen rl(:,aa,4) = rl(:,aa,4) + WdetJ 232*59599516SKenneth E. Jansen & * ( shg(:,aa,1) * uBar(:,1) 233*59599516SKenneth E. Jansen & + shg(:,aa,2) * uBar(:,2) 234*59599516SKenneth E. Jansen & + shg(:,aa,3) * uBar(:,3) ) 235*59599516SKenneth E. Jansenc 236*59599516SKenneth E. Jansenc.... momentum 237*59599516SKenneth E. Jansenc 238*59599516SKenneth E. Jansen rl(:,aa,1) = rl(:,aa,1) - WdetJ 239*59599516SKenneth E. Jansen & * ( shpfun(:,aa) * rNa(:,1) 240*59599516SKenneth E. Jansen & + shg(:,aa,1) * rGNa(:,1,1) 241*59599516SKenneth E. Jansen & + shg(:,aa,2) * rGNa(:,1,2) 242*59599516SKenneth E. Jansen & + shg(:,aa,3) * rGNa(:,1,3) ) 243*59599516SKenneth E. Jansen rl(:,aa,2) = rl(:,aa,2) - WdetJ 244*59599516SKenneth E. Jansen & * ( shpfun(:,aa) * rNa(:,2) 245*59599516SKenneth E. Jansen & + shg(:,aa,1) * rGNa(:,2,1) 246*59599516SKenneth E. Jansen & + shg(:,aa,2) * rGNa(:,2,2) 247*59599516SKenneth E. Jansen & + shg(:,aa,3) * rGNa(:,2,3) ) 248*59599516SKenneth E. Jansen rl(:,aa,3) = rl(:,aa,3) - WdetJ 249*59599516SKenneth E. Jansen & * ( shpfun(:,aa) * rNa(:,3) 250*59599516SKenneth E. Jansen & + shg(:,aa,1) * rGNa(:,3,1) 251*59599516SKenneth E. Jansen & + shg(:,aa,2) * rGNa(:,3,2) 252*59599516SKenneth E. Jansen & + shg(:,aa,3) * rGNa(:,3,3) ) 253*59599516SKenneth E. Jansen 254*59599516SKenneth E. Jansen enddo 255*59599516SKenneth E. Jansenc 256*59599516SKenneth E. Jansenc.... return 257*59599516SKenneth E. Jansenc 258*59599516SKenneth E. Jansen return 259*59599516SKenneth E. Jansen end 260*59599516SKenneth E. Jansen 261*59599516SKenneth E. Jansen 262*59599516SKenneth E. Jansen 263*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 264*59599516SKenneth E. Jansenc 265*59599516SKenneth E. Jansenc calculate the residual for the advection-diffusion equation 266*59599516SKenneth E. Jansenc 267*59599516SKenneth E. Jansenc------------------------------------------------------------------------ 268*59599516SKenneth E. Jansen subroutine e3ResSclr ( uMod, gGradS, 269*59599516SKenneth E. Jansen & Sclr, Sdot, gradS, 270*59599516SKenneth E. Jansen & WdetJ, rLS, tauS, 271*59599516SKenneth E. Jansen & shpfun, shg, src, 272*59599516SKenneth E. Jansen & diffus, 273*59599516SKenneth E. Jansen & rl ) 274*59599516SKenneth E. Jansenc 275*59599516SKenneth E. Jansen include "common.h" 276*59599516SKenneth E. Jansen 277*59599516SKenneth E. Jansen real*8 uMod(npro,nsd), gGradS(npro, nsd), 278*59599516SKenneth E. Jansen & Sclr(npro), Sdot(npro), gradS(npro,nsd), 279*59599516SKenneth E. Jansen & WdetJ(npro), rLS(npro), rho(npro), 280*59599516SKenneth E. Jansen & tauS(npro), shpfun(npro,nshl), src(npro), 281*59599516SKenneth E. Jansen & shg(npro,nshl,3), rl(npro,nshl) 282*59599516SKenneth E. Jansen 283*59599516SKenneth E. Jansen real*8 diffus(npro) 284*59599516SKenneth E. Jansenc 285*59599516SKenneth E. Jansenc.... local declarations 286*59599516SKenneth E. Jansenc 287*59599516SKenneth E. Jansen real*8 rGNa(npro,nsd), rNa(npro), rcp(npro), tmp(npro) 288*59599516SKenneth E. Jansen 289*59599516SKenneth E. Jansen integer aa 290*59599516SKenneth E. Jansenc 291*59599516SKenneth E. Jansenc.... initialize multipliers for Na and Na_{,i} 292*59599516SKenneth E. Jansenc 293*59599516SKenneth E. Jansen rNa = zero 294*59599516SKenneth E. Jansen rGNa = zero 295*59599516SKenneth E. Jansenc 296*59599516SKenneth E. Jansenc.... Na multiplier 297*59599516SKenneth E. Jansenc 298*59599516SKenneth E. Jansen tmps = one-flmpr ! consistant mass factor 299*59599516SKenneth E. Jansen rcp = one ! rho * cp 300*59599516SKenneth E. Jansen 301*59599516SKenneth E. Jansen 302*59599516SKenneth E. Jansen rNa = rcp*(tmps*Sdot + uMod(:,1) * gradS(:,1) 303*59599516SKenneth E. Jansen & + uMod(:,2) * gradS(:,2) 304*59599516SKenneth E. Jansen & + uMod(:,3) * gradS(:,3) ) 305*59599516SKenneth E. Jansen & - src 306*59599516SKenneth E. Jansen 307*59599516SKenneth E. Jansen 308*59599516SKenneth E. Jansen 309*59599516SKenneth E. Jansen tmp = rcp * tauS * (rLS -src) 310*59599516SKenneth E. Jansenc 311*59599516SKenneth E. Jansenc.... Na,i multiplier 312*59599516SKenneth E. Jansenc 313*59599516SKenneth E. Jansen rGNa(:,1) = diffus * gradS(:,1) + uMod(:,1) * tmp 314*59599516SKenneth E. Jansen rGNa(:,2) = diffus * gradS(:,2) + uMod(:,2) * tmp 315*59599516SKenneth E. Jansen rGNa(:,3) = diffus * gradS(:,3) + uMod(:,3) * tmp 316*59599516SKenneth E. Jansenc 317*59599516SKenneth E. Jansen if (idcsclr(1) .ne. 0) then 318*59599516SKenneth E. Jansen if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or. 319*59599516SKenneth E. Jansen & (idcsclr(2).eq.2 .and. isclr.eq.2)) then ! scalar with dc 320*59599516SKenneth E. Jansenc 321*59599516SKenneth E. Jansenc.... add the contribution of DC to residual 322*59599516SKenneth E. Jansenc 323*59599516SKenneth E. Jansen rGNa(:,1) = rGNa(:,1) + gGradS(:,1) ! gGradS is 324*59599516SKenneth E. Jansen rGNa(:,2) = rGNa(:,2) + gGradS(:,2) ! g^{ij}*Y_{j}*dcFct 325*59599516SKenneth E. Jansen rGNa(:,3) = rGNa(:,3) + gGradS(:,3) ! calculated in e3dc.f 326*59599516SKenneth E. Jansenc 327*59599516SKenneth E. Jansen endif 328*59599516SKenneth E. Jansen endif ! end of idcsclr 329*59599516SKenneth E. Jansenc 330*59599516SKenneth E. Jansenc.... multiply the residual pieces by the weight space 331*59599516SKenneth E. Jansenc 332*59599516SKenneth E. Jansen do aa = 1,nshl 333*59599516SKenneth E. Jansenc 334*59599516SKenneth E. Jansen rl(:,aa) = rl(:,aa) - WdetJ 335*59599516SKenneth E. Jansen & * ( shpfun(:,aa) * rNa(:) 336*59599516SKenneth E. Jansen & + shg(:,aa,1) * rGNa(:,1) 337*59599516SKenneth E. Jansen & + shg(:,aa,2) * rGNa(:,2) 338*59599516SKenneth E. Jansen & + shg(:,aa,3) * rGNa(:,3) ) 339*59599516SKenneth E. Jansen 340*59599516SKenneth E. Jansen enddo 341*59599516SKenneth E. Jansenc 342*59599516SKenneth E. Jansenc.... return 343*59599516SKenneth E. Jansenc 344*59599516SKenneth E. Jansen return 345*59599516SKenneth E. Jansen end 346*59599516SKenneth E. Jansen 347*59599516SKenneth E. Jansen 348*59599516SKenneth E. Jansen 349*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 350*59599516SKenneth E. Jansenc Calculate the strong PDE residual. 351*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 352*59599516SKenneth E. Jansen subroutine e3resStrongPDE( 353*59599516SKenneth E. Jansen & aci, u1, u2, u3, Temp, rho, xx, 354*59599516SKenneth E. Jansen & g1yi, g2yi, g3yi, 355*59599516SKenneth E. Jansen & rLui, src, divqi) 356*59599516SKenneth E. Jansen include "common.h" 357*59599516SKenneth E. Jansenc INPUTS 358*59599516SKenneth E. Jansen double precision, intent(in), dimension(npro,nsd) :: 359*59599516SKenneth E. Jansen & aci, xx 360*59599516SKenneth E. Jansen double precision, intent(in), dimension(npro,nflow) :: 361*59599516SKenneth E. Jansen & g1yi, g2yi, g3yi 362*59599516SKenneth E. Jansen double precision, intent(in), dimension(npro) :: 363*59599516SKenneth E. Jansen & u1, u2, u3, Temp, rho 364*59599516SKenneth E. Jansenc OUTPUTS 365*59599516SKenneth E. Jansen double precision, intent(out), dimension(npro,nsd) :: 366*59599516SKenneth E. Jansen & rLui, src 367*59599516SKenneth E. Jansenc LOCALS 368*59599516SKenneth E. Jansen double precision, dimension(npro) :: 369*59599516SKenneth E. Jansen & divu 370*59599516SKenneth E. Jansen double precision, dimension(npro,nsd) :: 371*59599516SKenneth E. Jansen & divqi 372*59599516SKenneth E. Jansen double precision, dimension(nsd) :: 373*59599516SKenneth E. Jansen & omega 374*59599516SKenneth E. Jansenc.... compute source term 375*59599516SKenneth E. Jansen src = zero 376*59599516SKenneth E. Jansen if(matflg(5,1) .ge. 1) then 377*59599516SKenneth E. Jansenc body force contribution to src 378*59599516SKenneth E. Jansen bfx = datmat(1,5,1) ! Boussinesq, g*alfap 379*59599516SKenneth E. Jansen bfy = datmat(2,5,1) 380*59599516SKenneth E. Jansen bfz = datmat(3,5,1) 381*59599516SKenneth E. Jansen select case ( matflg(5,1) ) 382*59599516SKenneth E. Jansen case ( 1 ) ! standard linear body force 383*59599516SKenneth E. Jansen src(:,1) = bfx 384*59599516SKenneth E. Jansen src(:,2) = bfy 385*59599516SKenneth E. Jansen src(:,3) = bfz 386*59599516SKenneth E. Jansen case ( 2 ) ! boussinesq body force 387*59599516SKenneth E. Jansen Tref = datmat(2,2,1) 388*59599516SKenneth E. Jansen src(:,1) = bfx * (Temp(:)-Tref) 389*59599516SKenneth E. Jansen src(:,2) = bfy * (Temp(:)-Tref) 390*59599516SKenneth E. Jansen src(:,3) = bfz * (Temp(:)-Tref) 391*59599516SKenneth E. Jansen case ( 3 ) ! user specified f(x,y,z) 392*59599516SKenneth E. Jansen call e3source(xx, src) 393*59599516SKenneth E. Jansen end select 394*59599516SKenneth E. Jansen endif 395*59599516SKenneth E. Jansenc 396*59599516SKenneth E. Jansen if(matflg(6,1).eq.1) then 397*59599516SKenneth E. Jansenc coriolis force contribution to src 398*59599516SKenneth E. Jansen omega(1)=datmat(1,6,1) 399*59599516SKenneth E. Jansen omega(2)=datmat(2,6,1) 400*59599516SKenneth E. Jansen omega(3)=datmat(3,6,1) 401*59599516SKenneth E. Jansenc note that we calculate f as if it contains the usual source 402*59599516SKenneth E. Jansenc plus the Coriolis and the centrifugal forces taken to the rhs (sign change) 403*59599516SKenneth E. Jansenc as long as we are doing SUPG with no accounting for these terms in the 404*59599516SKenneth E. Jansenc LHS this is the only change (which will find its way to the RHS momentum 405*59599516SKenneth E. Jansenc equation (both Galerkin and SUPG parts)). 406*59599516SKenneth E. Jansenc 407*59599516SKenneth E. Jansenc uncomment later if you want rotation always about z axis 408*59599516SKenneth E. Jansenc orig_src - om x om x r - two om x u 409*59599516SKenneth E. Jansenc 410*59599516SKenneth E. Jansenc$$$ src(:,1)=src(:,1)+omega(3)*omega(3)*xx(:,1)+two*omega(3)*u2 411*59599516SKenneth E. Jansenc$$$ src(:,2)=src(:,2)+omega(3)*omega(3)*xx(:,2)-two*omega(3)*u1 412*59599516SKenneth E. Jansenc 413*59599516SKenneth E. Jansenc more general for testing 414*59599516SKenneth E. Jansenc 415*59599516SKenneth E. Jansen src(:,1)=src(:,1) 416*59599516SKenneth E. Jansen & -omega(2)*(omega(1)*xx(:,2)-omega(2)*xx(:,1)) 417*59599516SKenneth E. Jansen & -omega(3)*(omega(1)*xx(:,3)-omega(3)*xx(:,1)) 418*59599516SKenneth E. Jansen & -two*(omega(2)*u3-omega(3)*u2) 419*59599516SKenneth E. Jansen src(:,2)=src(:,2) 420*59599516SKenneth E. Jansen & -omega(1)*(omega(2)*xx(:,1)-omega(1)*xx(:,2)) 421*59599516SKenneth E. Jansen & -omega(3)*(omega(2)*xx(:,3)-omega(3)*xx(:,2)) 422*59599516SKenneth E. Jansen & -two*(omega(3)*u1-omega(1)*u3) 423*59599516SKenneth E. Jansen src(:,3)=src(:,3) 424*59599516SKenneth E. Jansen & -omega(1)*(omega(3)*xx(:,1)-omega(1)*xx(:,3)) 425*59599516SKenneth E. Jansen & -omega(2)*(omega(3)*xx(:,2)-omega(2)*xx(:,3)) 426*59599516SKenneth E. Jansen & -two*(omega(1)*u2-omega(2)*u1) 427*59599516SKenneth E. Jansen endif 428*59599516SKenneth E. Jansenc calculate momentum residual 429*59599516SKenneth E. Jansen rLui(:,1) =(aci(:,1) + u1 * g1yi(:,2) 430*59599516SKenneth E. Jansen & + u2 * g2yi(:,2) 431*59599516SKenneth E. Jansen & + u3 * g3yi(:,2) - src(:,1) ) * rho 432*59599516SKenneth E. Jansen & + g1yi(:,1) 433*59599516SKenneth E. Jansen & - divqi(:,1) 434*59599516SKenneth E. Jansen rLui(:,2) =(aci(:,2) + u1 * g1yi(:,3) 435*59599516SKenneth E. Jansen & + u2 * g2yi(:,3) 436*59599516SKenneth E. Jansen & + u3 * g3yi(:,3) - src(:,2) ) * rho 437*59599516SKenneth E. Jansen & + g2yi(:,1) 438*59599516SKenneth E. Jansen & - divqi(:,2) 439*59599516SKenneth E. Jansen rLui(:,3) =(aci(:,3) + u1 * g1yi(:,4) 440*59599516SKenneth E. Jansen & + u2 * g2yi(:,4) 441*59599516SKenneth E. Jansen & + u3 * g3yi(:,4) - src(:,3) ) * rho 442*59599516SKenneth E. Jansen & + g3yi(:,1) 443*59599516SKenneth E. Jansen & - divqi(:,3) 444*59599516SKenneth E. Jansen if(iconvflow.eq.1) then 445*59599516SKenneth E. Jansen divu(:) = (g1yi(:,2) + g2yi(:,3) + g3yi(:,4))*rho 446*59599516SKenneth E. Jansen rLui(:,1)=rlui(:,1)+u1(:)*divu(:) 447*59599516SKenneth E. Jansen rLui(:,2)=rlui(:,2)+u2(:)*divu(:) 448*59599516SKenneth E. Jansen rLui(:,3)=rlui(:,3)+u3(:)*divu(:) 449*59599516SKenneth E. Jansen endif 450*59599516SKenneth E. Jansenc 451*59599516SKenneth E. Jansen return 452*59599516SKenneth E. Jansen end subroutine e3resStrongPDE 453