159599516SKenneth E. Jansen subroutine e3juel (yl, acl, sls, A0, 259599516SKenneth E. Jansen & WdetJ, rl, rml) 359599516SKenneth E. Jansenc 459599516SKenneth E. Jansenc---------------------------------------------------------------------- 559599516SKenneth E. Jansenc 659599516SKenneth E. Jansenc This routine calculates Exactly integrated Linear Tetrahedra 759599516SKenneth E. Jansenc Mass term (assuming U(Y) is linear it is not). 859599516SKenneth E. Jansenc 959599516SKenneth E. Jansenc input: 1059599516SKenneth E. Jansenc WdetJ (npro) : weighted Jacobian 1159599516SKenneth E. Jansenc 1259599516SKenneth E. Jansenc output: 1359599516SKenneth E. Jansenc rl (npro,nshl,nflow) : residual 1459599516SKenneth E. Jansenc rml (npro,nshl,nflow) : modified residual 1559599516SKenneth E. Jansenc 1659599516SKenneth E. Jansenc 1759599516SKenneth E. Jansenc note that this routine wipes out yl by putting ul into it 1859599516SKenneth E. Jansenc and then (in ires=1 case ) it is used again 1959599516SKenneth E. Jansenc 2059599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997, Primitive Variables 2159599516SKenneth E. Jansenc---------------------------------------------------------------------- 2259599516SKenneth E. Jansenc 2359599516SKenneth E. Jansen include "common.h" 2459599516SKenneth E. Jansenc 2559599516SKenneth E. Jansen dimension yl(npro,nshl,nflow), acl(npro,nshl,ndof), 2659599516SKenneth E. Jansen & WdetJ(npro), A0(npro,nflow,nflow), 2759599516SKenneth E. Jansen & rl(npro,nshl,nflow), rml(npro,nshl,nflow) 2859599516SKenneth E. Jansenc 2959599516SKenneth E. Jansen dimension rk(npro), rho(npro), 3059599516SKenneth E. Jansen & ei(npro), tmp(npro), 3159599516SKenneth E. Jansen & ub(npro,nflow), fact(npro), 3259599516SKenneth E. Jansen & fddt(npro) 3359599516SKenneth E. Jansen 3459599516SKenneth E. Jansen ttim(28) = ttim(28) - secs(0.0) 3559599516SKenneth E. Jansen 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansenc.... ---------------------> Time term <-------------------- 3859599516SKenneth E. Jansenc 3959599516SKenneth E. Jansenc.... add contribution of U to rml 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansenc.... compute conservative variables 4259599516SKenneth E. Jansenc 4359599516SKenneth E. Jansenc 4459599516SKenneth E. Jansenc multiply by exact mass matrix integral N_aN_b=(I+1)*V/20 4559599516SKenneth E. Jansenc where 1 is a matrix with every element=1 4659599516SKenneth E. Jansenc 4759599516SKenneth E. Jansenc note that the wght has 4/3 multiplier so 3/4*20=15 4859599516SKenneth E. Jansenc 4959599516SKenneth E. Jansen 5059599516SKenneth E. Jansen fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0) 5159599516SKenneth E. Jansen fct1=almi/(gami*alfi)*Dtgl ! factor for predictor (scalar) 5259599516SKenneth E. Jansen if(ires.ne.1) then 5359599516SKenneth E. Jansen fddt=fact*fct1 5459599516SKenneth E. Jansen do inod=1,nshl 5559599516SKenneth E. Jansen rk = pt5 * (yl(:,inod,2)**2 + yl(:,inod,3)**2 + yl(:,inod,4)**2) 5659599516SKenneth E. Jansenc 5759599516SKenneth E. Jansen ithm = 6 5859599516SKenneth E. Jansen call getthm (yl(:,inod,1), yl(:,inod,5), sls, 5959599516SKenneth E. Jansen & rk, rho, ei, 6059599516SKenneth E. Jansen & tmp, tmp, tmp, 6159599516SKenneth E. Jansen & tmp, tmp, tmp, 6259599516SKenneth E. Jansen & tmp, tmp) 6359599516SKenneth E. Jansenc 6459599516SKenneth E. Jansen yl(:,inod,1) = rho 6559599516SKenneth E. Jansen yl(:,inod,2) = rho * yl(:,inod,2) 6659599516SKenneth E. Jansen yl(:,inod,3) = rho * yl(:,inod,3) 6759599516SKenneth E. Jansen yl(:,inod,4) = rho * yl(:,inod,4) 6859599516SKenneth E. Jansen yl(:,inod,5) = rho * (ei + rk) 6959599516SKenneth E. Jansen enddo 7059599516SKenneth E. Jansen ub(:,:)=yl(:,1,:)+yl(:,2,:) 7159599516SKenneth E. Jansen & +yl(:,3,:)+yl(:,4,:) 7259599516SKenneth E. Jansen 7359599516SKenneth E. Jansenc 7459599516SKenneth E. Jansenc what we have now in yl is the U_b^e 7559599516SKenneth E. Jansenc we want to get Resm(mass)=M^e_{ab} (U^e_b(Y+epsilon P) 7659599516SKenneth E. Jansenc - U^e_b(Y))*fact/dt, 7759599516SKenneth E. Jansenc since only the difference between resm's is important we 7859599516SKenneth E. Jansenc do not have to subtract off the unperturbed U(Y) vector 7959599516SKenneth E. Jansenc This term is meant to carry through the effect of a perturbation 8059599516SKenneth E. Jansenc in Y upon dY/dt (through the predictor into the term fact) 8159599516SKenneth E. Jansenc 8259599516SKenneth E. Jansenc 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen do i = 1, nshl 8559599516SKenneth E. Jansen rml(:,i,1) = rml(:,i,1) + fddt * (yl(:,i,1)+ub(:,1)) 8659599516SKenneth E. Jansen rml(:,i,2) = rml(:,i,2) + fddt * (yl(:,i,2)+ub(:,2)) 8759599516SKenneth E. Jansen rml(:,i,3) = rml(:,i,3) + fddt * (yl(:,i,3)+ub(:,3)) 8859599516SKenneth E. Jansen rml(:,i,4) = rml(:,i,4) + fddt * (yl(:,i,4)+ub(:,4)) 8959599516SKenneth E. Jansen rml(:,i,5) = rml(:,i,5) + fddt * (yl(:,i,5)+ub(:,5)) 9059599516SKenneth E. Jansen enddo 9159599516SKenneth E. Jansenc 92*f4d0b58bSKenneth E. Jansen! flops = flops + 35*nshl*npro 9359599516SKenneth E. Jansen endif 9459599516SKenneth E. Jansen 9559599516SKenneth E. Jansenc 9659599516SKenneth E. Jansenc.... ires = 2 or 3 9759599516SKenneth E. Jansenc 9859599516SKenneth E. Jansen if ((ires .eq. 1) .or. (ires .eq. 3)) then 9959599516SKenneth E. Jansen 10059599516SKenneth E. Jansen ub(:,:)=acl(:,1,:)+acl(:,2,:) 10159599516SKenneth E. Jansen & +acl(:,3,:)+acl(:,4,:) 10259599516SKenneth E. Jansen 10359599516SKenneth E. Jansen do i = 1, nshl 10459599516SKenneth E. Jansen yl(:,i,1) = fact*(acl(:,i,1)+ub(:,1)) 10559599516SKenneth E. Jansen yl(:,i,2) = fact*(acl(:,i,2)+ub(:,2)) 10659599516SKenneth E. Jansen yl(:,i,3) = fact*(acl(:,i,3)+ub(:,3)) 10759599516SKenneth E. Jansen yl(:,i,4) = fact*(acl(:,i,4)+ub(:,4)) 10859599516SKenneth E. Jansen yl(:,i,5) = fact*(acl(:,i,5)+ub(:,5)) 10959599516SKenneth E. Jansen enddo 11059599516SKenneth E. Jansenc 11159599516SKenneth E. Jansenc what we have now in yl is the dY_a^e/dt=M^e_{ab} Y_{b,t}, must multiply by 11259599516SKenneth E. Jansenc A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt, take advantage of zeros 11359599516SKenneth E. Jansenc in A0(Prim) with comments 11459599516SKenneth E. Jansenc 11559599516SKenneth E. Jansen do i = 1, nshl 11659599516SKenneth E. Jansen rl(:,i,1) = rl(:,i,1) 11759599516SKenneth E. Jansen & + A0(:,1,1)*yl(:,i,1) 11859599516SKenneth E. Jansenc & + A0(:,1,2)*yl(:,i,2) 11959599516SKenneth E. Jansenc & + A0(:,1,3)*yl(:,i,3) 12059599516SKenneth E. Jansenc & + A0(:,1,4)*yl(:,i,4) 12159599516SKenneth E. Jansen & + A0(:,1,5)*yl(:,i,5) 12259599516SKenneth E. Jansenc 12359599516SKenneth E. Jansen rl(:,i,2) = rl(:,i,2) 12459599516SKenneth E. Jansen & + A0(:,2,1)*yl(:,i,1) 12559599516SKenneth E. Jansen & + A0(:,2,2)*yl(:,i,2) 12659599516SKenneth E. Jansenc & + A0(:,2,3)*yl(:,i,3) 12759599516SKenneth E. Jansenc & + A0(:,2,4)*yl(:,i,4) 12859599516SKenneth E. Jansen & + A0(:,2,5)*yl(:,i,5) 12959599516SKenneth E. Jansenc 13059599516SKenneth E. Jansen rl(:,i,3) = rl(:,i,3) 13159599516SKenneth E. Jansen & + A0(:,3,1)*yl(:,i,1) 13259599516SKenneth E. Jansenc & + A0(:,3,2)*yl(:,i,2) 13359599516SKenneth E. Jansen & + A0(:,3,3)*yl(:,i,3) 13459599516SKenneth E. Jansenc & + A0(:,3,4)*yl(:,i,4) 13559599516SKenneth E. Jansen & + A0(:,3,5)*yl(:,i,5) 13659599516SKenneth E. Jansenc 13759599516SKenneth E. Jansen rl(:,i,4) = rl(:,i,4) 13859599516SKenneth E. Jansen & + A0(:,4,1)*yl(:,i,1) 13959599516SKenneth E. Jansenc & + A0(:,4,2)*yl(:,i,2) 14059599516SKenneth E. Jansenc & + A0(:,4,3)*yl(:,i,3) 14159599516SKenneth E. Jansen & + A0(:,4,4)*yl(:,i,4) 14259599516SKenneth E. Jansen & + A0(:,4,5)*yl(:,i,5) 14359599516SKenneth E. Jansenc 14459599516SKenneth E. Jansen rl(:,i,5) = rl(:,i,5) 14559599516SKenneth E. Jansen & + A0(:,5,1)*yl(:,i,1) 14659599516SKenneth E. Jansen & + A0(:,5,2)*yl(:,i,2) 14759599516SKenneth E. Jansen & + A0(:,5,3)*yl(:,i,3) 14859599516SKenneth E. Jansen & + A0(:,5,4)*yl(:,i,4) 14959599516SKenneth E. Jansen & + A0(:,5,5)*yl(:,i,5) 15059599516SKenneth E. Jansenc 15159599516SKenneth E. Jansen enddo 15259599516SKenneth E. Jansenc 153*f4d0b58bSKenneth E. Jansen! flops = flops + 45*nshl*npro 15459599516SKenneth E. Jansen endif 15559599516SKenneth E. Jansen 15659599516SKenneth E. Jansen ttim(28) = ttim(28) + tmr() 15759599516SKenneth E. Jansenc 15859599516SKenneth E. Jansenc.... return 15959599516SKenneth E. Jansenc 16059599516SKenneth E. Jansen return 16159599516SKenneth E. Jansen end 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansenc$$$ 16459599516SKenneth E. Jansenc$$$ subroutine e3juelSclr (ycl, acl, A0t, 16559599516SKenneth E. Jansenc$$$ & WdetJ, rtl, rmtl) 16659599516SKenneth E. Jansenc$$$c 16759599516SKenneth E. Jansenc$$$c---------------------------------------------------------------------- 16859599516SKenneth E. Jansenc$$$c 16959599516SKenneth E. Jansenc$$$c This routine calculates Exactly integrated Linear Tetrahedra 17059599516SKenneth E. Jansenc$$$c Mass term (assuming U(Y) is linear it is not). 17159599516SKenneth E. Jansenc$$$c 17259599516SKenneth E. Jansenc$$$c input: 17359599516SKenneth E. Jansenc$$$c WdetJ (npro) : weighted Jacobian 17459599516SKenneth E. Jansenc$$$c 17559599516SKenneth E. Jansenc$$$c output: 17659599516SKenneth E. Jansenc$$$c rtl (npro,nshl,nflow) : residual 17759599516SKenneth E. Jansenc$$$c rmtl (npro,nshl,nflow) : modified residual 17859599516SKenneth E. Jansenc$$$c 17959599516SKenneth E. Jansenc$$$c 18059599516SKenneth E. Jansenc$$$c note that this routine wipes out ycl by putting ul into it 18159599516SKenneth E. Jansenc$$$c and then (in ires=1 case ) it is used again 18259599516SKenneth E. Jansenc$$$c 18359599516SKenneth E. Jansenc$$$c Kenneth Jansen, Winter 1997, Primitive Variables 18459599516SKenneth E. Jansenc$$$c---------------------------------------------------------------------- 18559599516SKenneth E. Jansenc$$$c 18659599516SKenneth E. Jansenc$$$ include "common.h" 18759599516SKenneth E. Jansenc$$$c 18859599516SKenneth E. Jansenc$$$ dimension ycl(npro,nshl,ndof), acl(npro,nshl,ndof), 18959599516SKenneth E. Jansenc$$$ & WdetJ(npro), A0t(npro), 19059599516SKenneth E. Jansenc$$$ & rtl(npro,nshl), rmtl(npro,nshl) 19159599516SKenneth E. Jansenc$$$ 19259599516SKenneth E. Jansenc$$$c 19359599516SKenneth E. Jansenc$$$ dimension rk(npro), rho(npro), 19459599516SKenneth E. Jansenc$$$ & ei(npro), tmp(npro), 19559599516SKenneth E. Jansenc$$$ & ubt(npro), fact(npro), 19659599516SKenneth E. Jansenc$$$ & fddt(npro) 19759599516SKenneth E. Jansenc$$$ 19859599516SKenneth E. Jansenc$$$ ttim(28) = ttim(28) - tmr() 19959599516SKenneth E. Jansenc$$$ 20059599516SKenneth E. Jansenc$$$c 20159599516SKenneth E. Jansenc$$$c.... ---------------------> Time term <-------------------- 20259599516SKenneth E. Jansenc$$$c 20359599516SKenneth E. Jansenc$$$c.... add contribution of U to rml 20459599516SKenneth E. Jansenc$$$c 20559599516SKenneth E. Jansenc$$$c.... compute conservative variables 20659599516SKenneth E. Jansenc$$$c 20759599516SKenneth E. Jansenc$$$c 20859599516SKenneth E. Jansenc$$$c multiply by exact mass matrix integral N_aN_b=(I+1)*V/20 20959599516SKenneth E. Jansenc$$$c where 1 is a matrix with every element=1 21059599516SKenneth E. Jansenc$$$c 21159599516SKenneth E. Jansenc$$$c note that the wght has 4/3 multiplier so 3/4*20=15 21259599516SKenneth E. Jansenc$$$c 21359599516SKenneth E. Jansenc$$$ 21459599516SKenneth E. Jansenc$$$ fact=WdetJ/(Qwt(lcsyst,intp)*15.0d0) 21559599516SKenneth E. Jansenc$$$ fct1=almi/(gami*alfi)*Dtgl ! factor for predictor (scaler) 21659599516SKenneth E. Jansenc$$$c 21759599516SKenneth E. Jansenc$$$c 21859599516SKenneth E. Jansenc$$$c.... ires = 2 or 3 21959599516SKenneth E. Jansenc$$$c 22059599516SKenneth E. Jansenc$$$ 22159599516SKenneth E. Jansenc$$$ if ((ires .eq. 1) .or. (ires .eq. 3)) then 22259599516SKenneth E. Jansenc$$$ ubt(:)=acl(:,1,id)+acl(:,2,id) 22359599516SKenneth E. Jansenc$$$ & +acl(:,3,id)+acl(:,4,id) 22459599516SKenneth E. Jansenc$$$ do i = 1, nshl 22559599516SKenneth E. Jansenc$$$ ycl(:,i,id) = fact*(acl(:,i,id)+ubt(:)) 22659599516SKenneth E. Jansenc$$$ 22759599516SKenneth E. Jansenc$$$ enddo 22859599516SKenneth E. Jansenc$$$c 22959599516SKenneth E. Jansenc$$$c what we have now in ycl is the dY_a^e/dt=M^e_{ab} Y_{b,t}, must multiply by 23059599516SKenneth E. Jansenc$$$c A0 to get dU^e_a/dt= dU/dY(centroid) dY_a^e/dt, take advantage of zeros 23159599516SKenneth E. Jansenc$$$c in A0(Prim) with comments 23259599516SKenneth E. Jansenc$$$c 23359599516SKenneth E. Jansenc$$$ do i = 1, nshl 23459599516SKenneth E. Jansenc$$$ rtl(:,i) = rtl(:,i) 23559599516SKenneth E. Jansenc$$$ & + A0t(:)*ycl(:,i,id) 23659599516SKenneth E. Jansenc$$$ 23759599516SKenneth E. Jansenc$$$c 23859599516SKenneth E. Jansenc$$$ enddo 23959599516SKenneth E. Jansenc$$$c 240*f4d0b58bSKenneth E. Jansenc$$$ ! flops = flops + 45*nenl*npro 24159599516SKenneth E. Jansenc$$$ endif 24259599516SKenneth E. Jansenc$$$ 24359599516SKenneth E. Jansenc$$$ ttim(28) = ttim(28) + tmr() 24459599516SKenneth E. Jansenc$$$c 24559599516SKenneth E. Jansenc$$$c.... return 24659599516SKenneth E. Jansenc$$$c 24759599516SKenneth E. Jansenc$$$ return 24859599516SKenneth E. Jansenc$$$ end 249