1*59599516SKenneth E. Jansen subroutine e3juel (yl, acl, sls, A0, 2*59599516SKenneth E. Jansen & WdetJ, rl, rml) 3*59599516SKenneth E. Jansenc 4*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 5*59599516SKenneth E. Jansenc 6*59599516SKenneth E. Jansenc This routine calculates Exactly integrated Linear Tetrahedra 7*59599516SKenneth E. Jansenc Mass term (assuming U(Y) is linear it is not). 8*59599516SKenneth E. Jansenc 9*59599516SKenneth E. Jansenc input: 10*59599516SKenneth E. Jansenc WdetJ (npro) : weighted Jacobian 11*59599516SKenneth E. Jansenc 12*59599516SKenneth E. Jansenc output: 13*59599516SKenneth E. Jansenc rl (npro,nshl,nflow) : residual 14*59599516SKenneth E. Jansenc rml (npro,nshl,nflow) : modified residual 15*59599516SKenneth E. Jansenc 16*59599516SKenneth E. Jansenc 17*59599516SKenneth E. Jansenc note that this routine wipes out yl by putting ul into it 18*59599516SKenneth E. Jansenc and then (in ires=1 case ) it is used again 19*59599516SKenneth E. Jansenc 20*59599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997, Primitive Variables 21*59599516SKenneth E. Jansenc---------------------------------------------------------------------- 22*59599516SKenneth E. Jansenc 23*59599516SKenneth E. Jansen include "common.h" 24*59599516SKenneth E. Jansenc 25*59599516SKenneth E. Jansen dimension yl(npro,nshl,nflow), acl(npro,nshl,ndof), 26*59599516SKenneth E. Jansen & WdetJ(npro), A0(npro,nflow,nflow), 27*59599516SKenneth E. Jansen & rl(npro,nshl,nflow), rml(npro,nshl,nflow) 28*59599516SKenneth E. Jansenc 29*59599516SKenneth E. Jansen dimension rk(npro), rho(npro), 30*59599516SKenneth E. Jansen & ei(npro), tmp(npro), 31*59599516SKenneth E. Jansen & ub(npro,nflow), fact(npro), 32*59599516SKenneth E. Jansen & fddt(npro) 33*59599516SKenneth E. Jansen 34*59599516SKenneth E. Jansen ttim(28) = ttim(28) - secs(0.0) 35*59599516SKenneth E. Jansen 36*59599516SKenneth E. Jansenc 37*59599516SKenneth E. Jansenc.... ---------------------> Time term <-------------------- 38*59599516SKenneth E. Jansenc 39*59599516SKenneth E. Jansenc.... add contribution of U to rml 40*59599516SKenneth E. Jansenc 41*59599516SKenneth E. Jansenc.... compute conservative variables 42*59599516SKenneth E. Jansenc 43*59599516SKenneth E. Jansenc 44*59599516SKenneth E. Jansenc multiply by exact mass matrix integral N_aN_b=(I+1)*V/20 45*59599516SKenneth E. Jansenc where 1 is a matrix with every element=1 46*59599516SKenneth E. Jansenc 47*59599516SKenneth E. Jansenc note that the wght has 4/3 multiplier so 3/4*20=15 48*59599516SKenneth E. Jansenc 49*59599516SKenneth E. Jansen 50*59599516SKenneth E. Jansen fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0) 51*59599516SKenneth E. Jansen fct1=almi/(gami*alfi)*Dtgl ! factor for predictor (scalar) 52*59599516SKenneth E. Jansen if(ires.ne.1) then 53*59599516SKenneth E. Jansen fddt=fact*fct1 54*59599516SKenneth E. Jansen do inod=1,nshl 55*59599516SKenneth E. Jansen rk = pt5 * (yl(:,inod,2)**2 + yl(:,inod,3)**2 + yl(:,inod,4)**2) 56*59599516SKenneth E. Jansenc 57*59599516SKenneth E. Jansen ithm = 6 58*59599516SKenneth E. Jansen call getthm (yl(:,inod,1), yl(:,inod,5), sls, 59*59599516SKenneth E. Jansen & rk, rho, ei, 60*59599516SKenneth E. Jansen & tmp, tmp, tmp, 61*59599516SKenneth E. Jansen & tmp, tmp, tmp, 62*59599516SKenneth E. Jansen & tmp, tmp) 63*59599516SKenneth E. Jansenc 64*59599516SKenneth E. Jansen yl(:,inod,1) = rho 65*59599516SKenneth E. Jansen yl(:,inod,2) = rho * yl(:,inod,2) 66*59599516SKenneth E. Jansen yl(:,inod,3) = rho * yl(:,inod,3) 67*59599516SKenneth E. Jansen yl(:,inod,4) = rho * yl(:,inod,4) 68*59599516SKenneth E. Jansen yl(:,inod,5) = rho * (ei + rk) 69*59599516SKenneth E. Jansen enddo 70*59599516SKenneth E. Jansen ub(:,:)=yl(:,1,:)+yl(:,2,:) 71*59599516SKenneth E. Jansen & +yl(:,3,:)+yl(:,4,:) 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansenc 74*59599516SKenneth E. Jansenc what we have now in yl is the U_b^e 75*59599516SKenneth E. Jansenc we want to get Resm(mass)=M^e_{ab} (U^e_b(Y+epsilon P) 76*59599516SKenneth E. Jansenc - U^e_b(Y))*fact/dt, 77*59599516SKenneth E. Jansenc since only the difference between resm's is important we 78*59599516SKenneth E. Jansenc do not have to subtract off the unperturbed U(Y) vector 79*59599516SKenneth E. Jansenc This term is meant to carry through the effect of a perturbation 80*59599516SKenneth E. Jansenc in Y upon dY/dt (through the predictor into the term fact) 81*59599516SKenneth E. Jansenc 82*59599516SKenneth E. Jansenc 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansen do i = 1, nshl 85*59599516SKenneth E. Jansen rml(:,i,1) = rml(:,i,1) + fddt * (yl(:,i,1)+ub(:,1)) 86*59599516SKenneth E. Jansen rml(:,i,2) = rml(:,i,2) + fddt * (yl(:,i,2)+ub(:,2)) 87*59599516SKenneth E. Jansen rml(:,i,3) = rml(:,i,3) + fddt * (yl(:,i,3)+ub(:,3)) 88*59599516SKenneth E. Jansen rml(:,i,4) = rml(:,i,4) + fddt * (yl(:,i,4)+ub(:,4)) 89*59599516SKenneth E. Jansen rml(:,i,5) = rml(:,i,5) + fddt * (yl(:,i,5)+ub(:,5)) 90*59599516SKenneth E. Jansen enddo 91*59599516SKenneth E. Jansenc 92*59599516SKenneth E. Jansen flops = flops + 35*nshl*npro 93*59599516SKenneth E. Jansen endif 94*59599516SKenneth E. Jansen 95*59599516SKenneth E. Jansenc 96*59599516SKenneth E. Jansenc.... ires = 2 or 3 97*59599516SKenneth E. Jansenc 98*59599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 99*59599516SKenneth E. Jansen 100*59599516SKenneth E. Jansen ub(:,:)=acl(:,1,:)+acl(:,2,:) 101*59599516SKenneth E. Jansen & +acl(:,3,:)+acl(:,4,:) 102*59599516SKenneth E. Jansen 103*59599516SKenneth E. Jansen do i = 1, nshl 104*59599516SKenneth E. Jansen yl(:,i,1) = fact*(acl(:,i,1)+ub(:,1)) 105*59599516SKenneth E. Jansen yl(:,i,2) = fact*(acl(:,i,2)+ub(:,2)) 106*59599516SKenneth E. Jansen yl(:,i,3) = fact*(acl(:,i,3)+ub(:,3)) 107*59599516SKenneth E. Jansen yl(:,i,4) = fact*(acl(:,i,4)+ub(:,4)) 108*59599516SKenneth E. Jansen yl(:,i,5) = fact*(acl(:,i,5)+ub(:,5)) 109*59599516SKenneth E. Jansen enddo 110*59599516SKenneth E. Jansenc 111*59599516SKenneth E. Jansenc what we have now in yl is the dY_a^e/dt=M^e_{ab} Y_{b,t}, must multiply by 112*59599516SKenneth E. Jansenc A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt, take advantage of zeros 113*59599516SKenneth E. Jansenc in A0(Prim) with comments 114*59599516SKenneth E. Jansenc 115*59599516SKenneth E. Jansen do i = 1, nshl 116*59599516SKenneth E. Jansen rl(:,i,1) = rl(:,i,1) 117*59599516SKenneth E. Jansen & + A0(:,1,1)*yl(:,i,1) 118*59599516SKenneth E. Jansenc & + A0(:,1,2)*yl(:,i,2) 119*59599516SKenneth E. Jansenc & + A0(:,1,3)*yl(:,i,3) 120*59599516SKenneth E. Jansenc & + A0(:,1,4)*yl(:,i,4) 121*59599516SKenneth E. Jansen & + A0(:,1,5)*yl(:,i,5) 122*59599516SKenneth E. Jansenc 123*59599516SKenneth E. Jansen rl(:,i,2) = rl(:,i,2) 124*59599516SKenneth E. Jansen & + A0(:,2,1)*yl(:,i,1) 125*59599516SKenneth E. Jansen & + A0(:,2,2)*yl(:,i,2) 126*59599516SKenneth E. Jansenc & + A0(:,2,3)*yl(:,i,3) 127*59599516SKenneth E. Jansenc & + A0(:,2,4)*yl(:,i,4) 128*59599516SKenneth E. Jansen & + A0(:,2,5)*yl(:,i,5) 129*59599516SKenneth E. Jansenc 130*59599516SKenneth E. Jansen rl(:,i,3) = rl(:,i,3) 131*59599516SKenneth E. Jansen & + A0(:,3,1)*yl(:,i,1) 132*59599516SKenneth E. Jansenc & + A0(:,3,2)*yl(:,i,2) 133*59599516SKenneth E. Jansen & + A0(:,3,3)*yl(:,i,3) 134*59599516SKenneth E. Jansenc & + A0(:,3,4)*yl(:,i,4) 135*59599516SKenneth E. Jansen & + A0(:,3,5)*yl(:,i,5) 136*59599516SKenneth E. Jansenc 137*59599516SKenneth E. Jansen rl(:,i,4) = rl(:,i,4) 138*59599516SKenneth E. Jansen & + A0(:,4,1)*yl(:,i,1) 139*59599516SKenneth E. Jansenc & + A0(:,4,2)*yl(:,i,2) 140*59599516SKenneth E. Jansenc & + A0(:,4,3)*yl(:,i,3) 141*59599516SKenneth E. Jansen & + A0(:,4,4)*yl(:,i,4) 142*59599516SKenneth E. Jansen & + A0(:,4,5)*yl(:,i,5) 143*59599516SKenneth E. Jansenc 144*59599516SKenneth E. Jansen rl(:,i,5) = rl(:,i,5) 145*59599516SKenneth E. Jansen & + A0(:,5,1)*yl(:,i,1) 146*59599516SKenneth E. Jansen & + A0(:,5,2)*yl(:,i,2) 147*59599516SKenneth E. Jansen & + A0(:,5,3)*yl(:,i,3) 148*59599516SKenneth E. Jansen & + A0(:,5,4)*yl(:,i,4) 149*59599516SKenneth E. Jansen & + A0(:,5,5)*yl(:,i,5) 150*59599516SKenneth E. Jansenc 151*59599516SKenneth E. Jansen enddo 152*59599516SKenneth E. Jansenc 153*59599516SKenneth E. Jansen flops = flops + 45*nshl*npro 154*59599516SKenneth E. Jansen endif 155*59599516SKenneth E. Jansen 156*59599516SKenneth E. Jansen ttim(28) = ttim(28) + tmr() 157*59599516SKenneth E. Jansenc 158*59599516SKenneth E. Jansenc.... return 159*59599516SKenneth E. Jansenc 160*59599516SKenneth E. Jansen return 161*59599516SKenneth E. Jansen end 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansenc$$$ 164*59599516SKenneth E. Jansenc$$$ subroutine e3juelSclr (ycl, acl, A0t, 165*59599516SKenneth E. Jansenc$$$ & WdetJ, rtl, rmtl) 166*59599516SKenneth E. Jansenc$$$c 167*59599516SKenneth E. Jansenc$$$c---------------------------------------------------------------------- 168*59599516SKenneth E. Jansenc$$$c 169*59599516SKenneth E. Jansenc$$$c This routine calculates Exactly integrated Linear Tetrahedra 170*59599516SKenneth E. Jansenc$$$c Mass term (assuming U(Y) is linear it is not). 171*59599516SKenneth E. Jansenc$$$c 172*59599516SKenneth E. Jansenc$$$c input: 173*59599516SKenneth E. Jansenc$$$c WdetJ (npro) : weighted Jacobian 174*59599516SKenneth E. Jansenc$$$c 175*59599516SKenneth E. Jansenc$$$c output: 176*59599516SKenneth E. Jansenc$$$c rtl (npro,nshl,nflow) : residual 177*59599516SKenneth E. Jansenc$$$c rmtl (npro,nshl,nflow) : modified residual 178*59599516SKenneth E. Jansenc$$$c 179*59599516SKenneth E. Jansenc$$$c 180*59599516SKenneth E. Jansenc$$$c note that this routine wipes out ycl by putting ul into it 181*59599516SKenneth E. Jansenc$$$c and then (in ires=1 case ) it is used again 182*59599516SKenneth E. Jansenc$$$c 183*59599516SKenneth E. Jansenc$$$c Kenneth Jansen, Winter 1997, Primitive Variables 184*59599516SKenneth E. Jansenc$$$c---------------------------------------------------------------------- 185*59599516SKenneth E. Jansenc$$$c 186*59599516SKenneth E. Jansenc$$$ include "common.h" 187*59599516SKenneth E. Jansenc$$$c 188*59599516SKenneth E. Jansenc$$$ dimension ycl(npro,nshl,ndof), acl(npro,nshl,ndof), 189*59599516SKenneth E. Jansenc$$$ & WdetJ(npro), A0t(npro), 190*59599516SKenneth E. Jansenc$$$ & rtl(npro,nshl), rmtl(npro,nshl) 191*59599516SKenneth E. Jansenc$$$ 192*59599516SKenneth E. Jansenc$$$c 193*59599516SKenneth E. Jansenc$$$ dimension rk(npro), rho(npro), 194*59599516SKenneth E. Jansenc$$$ & ei(npro), tmp(npro), 195*59599516SKenneth E. Jansenc$$$ & ubt(npro), fact(npro), 196*59599516SKenneth E. Jansenc$$$ & fddt(npro) 197*59599516SKenneth E. Jansenc$$$ 198*59599516SKenneth E. Jansenc$$$ ttim(28) = ttim(28) - tmr() 199*59599516SKenneth E. Jansenc$$$ 200*59599516SKenneth E. Jansenc$$$c 201*59599516SKenneth E. Jansenc$$$c.... ---------------------> Time term <-------------------- 202*59599516SKenneth E. Jansenc$$$c 203*59599516SKenneth E. Jansenc$$$c.... add contribution of U to rml 204*59599516SKenneth E. Jansenc$$$c 205*59599516SKenneth E. Jansenc$$$c.... compute conservative variables 206*59599516SKenneth E. Jansenc$$$c 207*59599516SKenneth E. Jansenc$$$c 208*59599516SKenneth E. Jansenc$$$c multiply by exact mass matrix integral N_aN_b=(I+1)*V/20 209*59599516SKenneth E. Jansenc$$$c where 1 is a matrix with every element=1 210*59599516SKenneth E. Jansenc$$$c 211*59599516SKenneth E. Jansenc$$$c note that the wght has 4/3 multiplier so 3/4*20=15 212*59599516SKenneth E. Jansenc$$$c 213*59599516SKenneth E. Jansenc$$$ 214*59599516SKenneth E. Jansenc$$$ fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0) 215*59599516SKenneth E. Jansenc$$$ fct1=almi/(gami*alfi)*Dtgl ! factor for predictor (scaler) 216*59599516SKenneth E. Jansenc$$$c 217*59599516SKenneth E. Jansenc$$$c 218*59599516SKenneth E. Jansenc$$$c.... ires = 2 or 3 219*59599516SKenneth E. Jansenc$$$c 220*59599516SKenneth E. Jansenc$$$ 221*59599516SKenneth E. Jansenc$$$ if ((ires .eq. 1) .or. (ires .eq. 3)) then 222*59599516SKenneth E. Jansenc$$$ ubt(:)=acl(:,1,id)+acl(:,2,id) 223*59599516SKenneth E. Jansenc$$$ & +acl(:,3,id)+acl(:,4,id) 224*59599516SKenneth E. Jansenc$$$ do i = 1, nshl 225*59599516SKenneth E. Jansenc$$$ ycl(:,i,id) = fact*(acl(:,i,id)+ubt(:)) 226*59599516SKenneth E. Jansenc$$$ 227*59599516SKenneth E. Jansenc$$$ enddo 228*59599516SKenneth E. Jansenc$$$c 229*59599516SKenneth E. Jansenc$$$c what we have now in ycl is the dY_a^e/dt=M^e_{ab} Y_{b,t}, must multiply by 230*59599516SKenneth E. Jansenc$$$c A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt, take advantage of zeros 231*59599516SKenneth E. Jansenc$$$c in A0(Prim) with comments 232*59599516SKenneth E. Jansenc$$$c 233*59599516SKenneth E. Jansenc$$$ do i = 1, nshl 234*59599516SKenneth E. Jansenc$$$ rtl(:,i) = rtl(:,i) 235*59599516SKenneth E. Jansenc$$$ & + A0t(:)*ycl(:,i,id) 236*59599516SKenneth E. Jansenc$$$ 237*59599516SKenneth E. Jansenc$$$c 238*59599516SKenneth E. Jansenc$$$ enddo 239*59599516SKenneth E. Jansenc$$$c 240*59599516SKenneth E. Jansenc$$$ flops = flops + 45*nenl*npro 241*59599516SKenneth E. Jansenc$$$ endif 242*59599516SKenneth E. Jansenc$$$ 243*59599516SKenneth E. Jansenc$$$ ttim(28) = ttim(28) + tmr() 244*59599516SKenneth E. Jansenc$$$c 245*59599516SKenneth E. Jansenc$$$c.... return 246*59599516SKenneth E. Jansenc$$$c 247*59599516SKenneth E. Jansenc$$$ return 248*59599516SKenneth E. Jansenc$$$ end 249