159599516SKenneth E. Jansen subroutine e3 (yl, ycl, acl, shp, 259599516SKenneth E. Jansen & shgl, xl, rl, rml, xmudmi, 359599516SKenneth E. Jansen & BDiagl, ql, sgn, rlsl, EGmass, 459599516SKenneth E. Jansen & rerrl, ytargetl) 559599516SKenneth E. Jansenc 659599516SKenneth E. Jansenc---------------------------------------------------------------------- 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations. 959599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the 1059599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block- 1159599516SKenneth E. Jansenc diagonal preconditioner. 1259599516SKenneth E. Jansenc 1359599516SKenneth E. Jansenc input: 1459599516SKenneth E. Jansenc yl (npro,nshl,nflow) : Y variables (DOES NOT CONTAIN SCALARS) 1559599516SKenneth E. Jansenc ycl (npro,nshl,ndof) : Y variables at current step 1659599516SKenneth E. Jansenc acl (npro,nshl,ndof) : Y acceleration (Y_{,t}) 1759599516SKenneth E. Jansenc shp (nshl,ngauss) : element shape-functions N_a 1859599516SKenneth E. Jansenc shgl (nsd,nshl,ngauss) : element local-shape-functions N_{a,xi} 1959599516SKenneth E. Jansenc xl (npro,nenl,nsd) : nodal coordinates at current step (x^e_a) 2059599516SKenneth E. Jansenc ql (npro,nshl,(nflow-1)*nsd) : diffusive flux vector 2159599516SKenneth E. Jansenc rlsl (npro,nshl,6) : resolved Leonard stresses 2259599516SKenneth E. Jansenc sgn (npro,nshl) : shape function sign matrix 2359599516SKenneth E. Jansenc 2459599516SKenneth E. Jansenc output: 2559599516SKenneth E. Jansenc rl (npro,nshl,nflow) : element RHS residual (G^e_a) 2659599516SKenneth E. Jansenc rml (npro,nshl,nflow) : element modified residual (G^e_a tilde) 2759599516SKenneth E. Jansenc EGmass (npro,nedof,nedof) : element LHS tangent mass matrix (dG^e_a 2859599516SKenneth E. Jansenc dY_b ) 2959599516SKenneth E. Jansenc BDiagl (npro,nshl,nflow,nflow) : block-diagonal preconditioner 3059599516SKenneth E. Jansenc 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the 3359599516SKenneth E. Jansenc Hulbert's generalized alpha method integrator 3459599516SKenneth E. Jansenc 3559599516SKenneth E. Jansenc Note: nedof = nflow*nshape is the total number of degrees of freedom 3659599516SKenneth E. Jansenc at each element node. 3759599516SKenneth E. Jansenc 3859599516SKenneth E. Jansenc Mathematics done by: Michel Mallet, Farzin Shakib (version 1) 3959599516SKenneth E. Jansenc Farzin Shakib (version 2) 4059599516SKenneth E. Jansenc 4159599516SKenneth E. Jansenc 4259599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2.f) 4359599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 4459599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables) 4559599516SKenneth E. Jansenc Chris Whiting, Winter 1998. (LHS matrix formation) 4659599516SKenneth E. Jansenc---------------------------------------------------------------------- 4759599516SKenneth E. Jansenc 4859599516SKenneth E. Jansen include "common.h" 4959599516SKenneth E. Jansenc 5059599516SKenneth E. Jansen dimension yl(npro,nshl,nflow), ycl(npro,nshl,ndof), 5159599516SKenneth E. Jansen & acl(npro,nshl,ndof), rmu(npro), 5259599516SKenneth E. Jansen & shp(nshl,ngauss), rlm2mu(npro), 5359599516SKenneth E. Jansen & shgl(nsd,nshl,ngauss), con(npro), 5459599516SKenneth E. Jansen & xl(npro,nenl,nsd), rlm(npro), 5559599516SKenneth E. Jansen & rl(npro,nshl,nflow), ql(npro,nshl,idflx), 5659599516SKenneth E. Jansen & rml(npro,nshl,nflow), xmudmi(npro,ngauss), 5759599516SKenneth E. Jansen & BDiagl(npro,nshl,nflow,nflow), 5859599516SKenneth E. Jansen & EGmass(npro,nedof,nedof),cv(npro), 5959599516SKenneth E. Jansen & ytargetl(npro,nshl,nflow) 6059599516SKenneth E. Jansenc 6159599516SKenneth E. Jansen dimension dui(npro,ndof), aci(npro,ndof) 6259599516SKenneth E. Jansenc 6359599516SKenneth E. Jansen dimension g1yi(npro,nflow), g2yi(npro,nflow), 6459599516SKenneth E. Jansen & g3yi(npro,nflow), shg(npro,nshl,nsd), 6559599516SKenneth E. Jansen & divqi(npro,nflow), tau(npro,5) 6659599516SKenneth E. Jansenc 6759599516SKenneth E. Jansen dimension dxidx(npro,nsd,nsd), WdetJ(npro) 6859599516SKenneth E. Jansenc 6959599516SKenneth E. Jansen dimension rho(npro), pres(npro), 7059599516SKenneth E. Jansen & T(npro), ei(npro), 7159599516SKenneth E. Jansen & h(npro), alfap(npro), 7259599516SKenneth E. Jansen & betaT(npro), DC(npro,ngauss), 7359599516SKenneth E. Jansen & cp(npro), rk(npro), 7459599516SKenneth E. Jansen & u1(npro), u2(npro), 7559599516SKenneth E. Jansen & u3(npro), A0DC(npro,4), 7659599516SKenneth E. Jansen & Sclr(npro), dVdY(npro,15), 7759599516SKenneth E. Jansen & giju(npro,6), rTLS(npro), 7859599516SKenneth E. Jansen & raLS(npro), A0inv(npro,15) 7959599516SKenneth E. Jansenc 8059599516SKenneth E. Jansen dimension A0(npro,nflow,nflow), A1(npro,nflow,nflow), 8159599516SKenneth E. Jansen & A2(npro,nflow,nflow), A3(npro,nflow,nflow) 8259599516SKenneth E. Jansenc 8359599516SKenneth E. Jansen dimension rLyi(npro,nflow), sgn(npro,nshl) 8459599516SKenneth E. Jansenc 8559599516SKenneth E. Jansen dimension ri(npro,nflow*(nsd+1)), rmi(npro,nflow*(nsd+1)), 8659599516SKenneth E. Jansen & shape(npro,nshl), shdrv(npro,nsd,nshl), 8759599516SKenneth E. Jansen & stiff(npro,nsd*nflow,nsd*nflow), 8859599516SKenneth E. Jansen & PTau(npro,5,5), 8959599516SKenneth E. Jansen & sforce(npro,3), compK(npro,10) 9059599516SKenneth E. Jansenc 9159599516SKenneth E. Jansen dimension x(npro,3), bcool(npro) 9259599516SKenneth E. Jansen 9359599516SKenneth E. Jansen dimension rlsl(npro,nshl,6), rlsli(npro,6) 9459599516SKenneth E. Jansen 9559599516SKenneth E. Jansen real*8 rerrl(npro,nshl,6) 9659599516SKenneth E. Jansen ttim(6) = ttim(6) - secs(0.0) 9759599516SKenneth E. Jansenc 9859599516SKenneth E. Jansenc.... local reconstruction of diffusive flux vector 9959599516SKenneth E. Jansenc (note: not currently included in mfg) 10059599516SKenneth E. Jansen if (idiff==2 .and. (ires==3 .or. ires==1)) then 10159599516SKenneth E. Jansen call e3ql (ycl, shp, shgl, xl, ql, xmudmi, sgn) 10259599516SKenneth E. Jansen endif 10359599516SKenneth E. Jansenc 10459599516SKenneth E. Jansenc.... loop through the integration points 10559599516SKenneth E. Jansenc 10659599516SKenneth E. Jansen do intp = 1, ngauss 10759599516SKenneth E. Jansenc 10859599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point 10959599516SKenneth E. Jansenc 11059599516SKenneth E. Jansen if (Qwt(lcsyst,intp) .eq. zero) cycle ! precaution 11159599516SKenneth E. Jansenc 11259599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each 11359599516SKenneth E. Jansenc element at this quadrature point. These arrays will contain 11459599516SKenneth E. Jansenc the correct signs for the hierarchic basis 11559599516SKenneth E. Jansenc 11659599516SKenneth E. Jansen call getshp(shp, shgl, sgn, 11759599516SKenneth E. Jansen & shape, shdrv) 11859599516SKenneth E. Jansenc 11959599516SKenneth E. Jansenc.... initialize 12059599516SKenneth E. Jansenc 12159599516SKenneth E. Jansen ri = zero 12259599516SKenneth E. Jansen rmi = zero 12359599516SKenneth E. Jansen if (lhs .eq. 1) stiff = zero 12459599516SKenneth E. Jansenc 12559599516SKenneth E. Jansenc 12659599516SKenneth E. Jansenc.... calculate the integration variables 12759599516SKenneth E. Jansenc 12859599516SKenneth E. Jansen ttim(8) = ttim(8) - secs(0.0) 12959599516SKenneth E. Jansen call e3ivar (yl, ycl, acl, 13059599516SKenneth E. Jansen & Sclr, shape, shdrv, 13159599516SKenneth E. Jansen & xl, dui, aci, 13259599516SKenneth E. Jansen & g1yi, g2yi, g3yi, 13359599516SKenneth E. Jansen & shg, dxidx, WdetJ, 13459599516SKenneth E. Jansen & rho, pres, T, 13559599516SKenneth E. Jansen & ei, h, alfap, 13659599516SKenneth E. Jansen & betaT, cp, rk, 13759599516SKenneth E. Jansen & u1, u2, u3, 13859599516SKenneth E. Jansen & ql, divqi, sgn, 13959599516SKenneth E. Jansen & rLyi, !passed as a work array 14059599516SKenneth E. Jansen & rmu, rlm, rlm2mu, 14159599516SKenneth E. Jansen & con, rlsl, rlsli, 14259599516SKenneth E. Jansen & xmudmi, sforce, cv) 14359599516SKenneth E. Jansen ttim(8) = ttim(8) + secs(0.0) 14459599516SKenneth E. Jansen 14559599516SKenneth E. Jansenc 14659599516SKenneth E. Jansenc.... calculate the relevant matrices 14759599516SKenneth E. Jansenc 14859599516SKenneth E. Jansen ttim(9) = ttim(9) - secs(0.0) 14959599516SKenneth E. Jansen call e3mtrx (rho, pres, T, 15059599516SKenneth E. Jansen & ei, h, alfap, 15159599516SKenneth E. Jansen & betaT, cp, rk, 15259599516SKenneth E. Jansen & u1, u2, u3, 15359599516SKenneth E. Jansen & A0, A1, 15459599516SKenneth E. Jansen & A2, A3, 15559599516SKenneth E. Jansen & rLyi(:,1), rLyi(:,2), rLyi(:,3), ! work arrays 15659599516SKenneth E. Jansen & rLyi(:,4), rLyi(:,5), A0DC, 15759599516SKenneth E. Jansen & A0inv, dVdY) 15859599516SKenneth E. Jansen ttim(9) = ttim(9) + tmr() 15959599516SKenneth E. Jansenc 16059599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin) 16159599516SKenneth E. Jansenc 16259599516SKenneth E. Jansen ttim(14) = ttim(14) - secs(0.0) 16359599516SKenneth E. Jansen call e3conv (g1yi, g2yi, g3yi, 16459599516SKenneth E. Jansen & A1, A2, A3, 16559599516SKenneth E. Jansen & rho, pres, T, 16659599516SKenneth E. Jansen & ei, rk, u1, 16759599516SKenneth E. Jansen & u2, u3, rLyi, 16859599516SKenneth E. Jansen & ri, rmi, EGmass, 16959599516SKenneth E. Jansen & shg, shape, WdetJ) 17059599516SKenneth E. Jansen ttim(14) = ttim(14) + secs(0.0) 17159599516SKenneth E. Jansenc 17259599516SKenneth E. Jansenc.... calculate the diffusion contribution 17359599516SKenneth E. Jansenc 17459599516SKenneth E. Jansen ttim(15) = ttim(15) - secs(0.0) 17559599516SKenneth E. Jansen compK = zero 17659599516SKenneth E. Jansen if (Navier .eq. 1) then 17759599516SKenneth E. Jansen call e3visc (g1yi, g2yi, g3yi, 17859599516SKenneth E. Jansen & dxidx, 17959599516SKenneth E. Jansen & rmu, rlm, rlm2mu, 18059599516SKenneth E. Jansen & u1, u2, u3, 18159599516SKenneth E. Jansen & ri, rmi, stiff, 18259599516SKenneth E. Jansen & con, rlsli, compK, T) 18359599516SKenneth E. Jansen endif 18459599516SKenneth E. Jansen ttim(15) = ttim(15) + secs(0.0) 18559599516SKenneth E. Jansenc 18659599516SKenneth E. Jansenc.... calculate the body force contribution 18759599516SKenneth E. Jansenc 18859599516SKenneth E. Jansen if(isurf .ne. 1 .and. matflg(5,1).gt.0) then 18959599516SKenneth E. Jansen call e3source (ri, rmi, rlyi, 19059599516SKenneth E. Jansen & rho, u1, u2, 19159599516SKenneth E. Jansen & u3, pres, sforce, 19259599516SKenneth E. Jansen & dui, dxidx, ytargetl, 19359599516SKenneth E. Jansen & xl, shape, bcool) 19459599516SKenneth E. Jansen else 19559599516SKenneth E. Jansen bcool=zero 19659599516SKenneth E. Jansen endif 19759599516SKenneth E. Jansenc 19859599516SKenneth E. Jansenc.... calculate the least-squares contribution 19959599516SKenneth E. Jansenc 20059599516SKenneth E. Jansen ttim(16) = ttim(16) - secs(0.0) 20159599516SKenneth E. Jansen call e3LS (A1, A2, A3, 20259599516SKenneth E. Jansen & rho, rmu, cp, 20359599516SKenneth E. Jansen & cv, con, T, 20459599516SKenneth E. Jansen & u1, u2, u3, 20559599516SKenneth E. Jansen & rLyi, dxidx, tau, 20659599516SKenneth E. Jansen & ri, rmi, rk, 20759599516SKenneth E. Jansen & dui, aci, A0, 20859599516SKenneth E. Jansen & divqi, shape, shg, 20959599516SKenneth E. Jansen & EGmass, stiff, WdetJ, 21059599516SKenneth E. Jansen & giju, rTLS, raLS, 21159599516SKenneth E. Jansen & A0inv, dVdY, rerrl, 21259599516SKenneth E. Jansen & compK, pres, PTau) 21359599516SKenneth E. Jansen ttim(16) = ttim(16) + secs(0.0) 21459599516SKenneth E. Jansenc 21559599516SKenneth E. Jansenc.... Discontinuity capturing 21659599516SKenneth E. Jansenc 21759599516SKenneth E. Jansen if(iDC.ne.0) then 21859599516SKenneth E. Jansen call e3dc (g1yi, g2yi, g3yi, 21959599516SKenneth E. Jansen & A0, raLS, rTLS, 22059599516SKenneth E. Jansen & giju, DC, 22159599516SKenneth E. Jansen & ri, rmi, stiff, A0DC) 2220e4e2411SKenneth E. Jansen endif 223*0d39a63aSKenneth E. Jansen! SAM wants a threshold here so we are going to take over this little used 224*0d39a63aSKenneth E. Jansen! error indictor for that purpose. To revert note you will want to uncomment the original 225*0d39a63aSKenneth E. Jansen! form of this error indicator in e3LS.f 226f0b806cbSKenneth E. Jansen if((intp.eq.1).and.(ierrcalc.eq.1).and.(nitr.eq.iter)) then 227f0b806cbSKenneth E. Jansen do i=1,npro 228f0b806cbSKenneth E. Jansen Tmax=maxval(yl(i,:,5)) 229f0b806cbSKenneth E. Jansen Tmin=minval(yl(i,:,5)) 230f0b806cbSKenneth E. Jansen rerrl(i,:,6)=(Tmax-Tmin)/T(i) 231f0b806cbSKenneth E. Jansen enddo 232*0d39a63aSKenneth E. Jansen! the below was somewhat suprisingly ineffective compared to above for identifying shocks. 233*0d39a63aSKenneth E. Jansen! it refined on each side of the shock but left the actual shock quite coarse whereas the above 234*0d39a63aSKenneth E. Jansen! centered well on the shock 235f0b806cbSKenneth E. Jansen! do j=1,nshl 236f0b806cbSKenneth E. Jansen! rerrl(:,j,6)=rerrl(:,j,6)+DC(:,intp) !super hack to get error indicator for shock capturing 237f0b806cbSKenneth E. Jansen! enddo 238f0b806cbSKenneth E. Jansen endif 23959599516SKenneth E. Jansenc 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS 24259599516SKenneth E. Jansenc 24359599516SKenneth E. Jansen if (ngauss .eq. 1 .and. nshl .eq. 4) then ! trilinear tets 24459599516SKenneth E. Jansen ttim(17) = ttim(17) - secs(0.0) 24559599516SKenneth E. Jansen call e3juel (yl, acl, Sclr, A0, WdetJ, rl, rml) 24659599516SKenneth E. Jansen ttim(17) = ttim(17) + secs(0.0) 24759599516SKenneth E. Jansen else 24859599516SKenneth E. Jansen call e3massr (aci, dui, ri, rmi, A0) 24959599516SKenneth E. Jansen endif 25059599516SKenneth E. Jansen 25159599516SKenneth E. Jansenc 25259599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS 25359599516SKenneth E. Jansenc 25459599516SKenneth E. Jansen if (lhs .eq. 1) then 25559599516SKenneth E. Jansen call e3massl (bcool,shape, WdetJ, A0, EGmass) 25659599516SKenneth E. Jansen endif 25759599516SKenneth E. Jansenc 25859599516SKenneth E. Jansenc.... calculate the preconditioner all at once now instead of in separate 25959599516SKenneth E. Jansenc routines 26059599516SKenneth E. Jansenc 26159599516SKenneth E. Jansen if(iprec.eq.1 .and. lhs.ne.1)then 26259599516SKenneth E. Jansen ttim(18) = ttim(18) - secs(0.0) 26359599516SKenneth E. Jansen 26459599516SKenneth E. Jansen if (itau.lt.10) then 26559599516SKenneth E. Jansen 26659599516SKenneth E. Jansen call e3bdg(shape, shg, WdetJ, 26759599516SKenneth E. Jansen & A1, A2, A3, 26859599516SKenneth E. Jansen & A0, bcool, tau, 26959599516SKenneth E. Jansen & u1, u2, u3, 27059599516SKenneth E. Jansen & BDiagl, 27159599516SKenneth E. Jansen & rmu, rlm2mu, con) 27259599516SKenneth E. Jansen 27359599516SKenneth E. Jansen else 27459599516SKenneth E. Jansen 27559599516SKenneth E. Jansen call e3bdg_nd(shape, shg, WdetJ, 27659599516SKenneth E. Jansen & A1, A2, A3, 27759599516SKenneth E. Jansen & A0, bcool, PTau, 27859599516SKenneth E. Jansen & u1, u2, u3, 27959599516SKenneth E. Jansen & BDiagl, 28059599516SKenneth E. Jansen & rmu, rlm2mu, con) 28159599516SKenneth E. Jansen 28259599516SKenneth E. Jansen endif 28359599516SKenneth E. Jansen 28459599516SKenneth E. Jansen ttim(18) = ttim(18) + secs(0.0) 28559599516SKenneth E. Jansen endif 28659599516SKenneth E. Jansenc 28759599516SKenneth E. Jansenc 28859599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and 28959599516SKenneth E. Jansenc by both the weight space and solution space for the LHS stiffness term) 29059599516SKenneth E. Jansenc 29159599516SKenneth E. Jansen ttim(19) = ttim(19) - secs(0.0) 29259599516SKenneth E. Jansen call e3wmlt (shape, shg, WdetJ, 29359599516SKenneth E. Jansen & ri, rmi, rl, 29459599516SKenneth E. Jansen & rml, stiff, EGmass) 29559599516SKenneth E. Jansen ttim(19) = ttim(19) + secs(0.0) 29659599516SKenneth E. Jansenc 29759599516SKenneth E. Jansenc.... end of integration loop 29859599516SKenneth E. Jansenc 29959599516SKenneth E. Jansen enddo 30059599516SKenneth E. Jansen 30159599516SKenneth E. Jansen ttim(6) = ttim(6) + secs(0.0) 30259599516SKenneth E. Jansenc 30359599516SKenneth E. Jansenc.... return 30459599516SKenneth E. Jansenc 30559599516SKenneth E. Jansen return 30659599516SKenneth E. Jansen end 30759599516SKenneth E. Jansenc 30859599516SKenneth E. Jansenc 30959599516SKenneth E. Jansenc 31059599516SKenneth E. Jansenc 31159599516SKenneth E. Jansen subroutine e3Sclr (ycl, acl, 31259599516SKenneth E. Jansen & dwl, elDwl, 31359599516SKenneth E. Jansen & shp, sgn, 31459599516SKenneth E. Jansen & shgl, xl, 31559599516SKenneth E. Jansen & rtl, rmtl, 31659599516SKenneth E. Jansen & qtl, EGmasst) 31759599516SKenneth E. Jansenc 31859599516SKenneth E. Jansenc---------------------------------------------------------------------- 31959599516SKenneth E. Jansenc 32059599516SKenneth E. Jansenc This routine is the 3D element routine for the N-S equations. 32159599516SKenneth E. Jansenc This routine calculates the RHS residual and if requested the 32259599516SKenneth E. Jansenc modified residual or the LHS consistent mass matrix or the block- 32359599516SKenneth E. Jansenc diagonal preconditioner. 32459599516SKenneth E. Jansenc 32559599516SKenneth E. Jansenc input: e a 1..5 when we think of U^e_a and U is 5 variables 32659599516SKenneth E. Jansenc ycl (npro,nshl,ndof) : Y variables 32759599516SKenneth E. Jansenc actl (npro,nshl) : scalar variable time derivative 32859599516SKenneth E. Jansenc dwl (npro,nenl) : distances to wall 32959599516SKenneth E. Jansenc shp (nen,ngauss) : element shape-functions N_a 33059599516SKenneth E. Jansenc shgl (nsd,nen,ngauss) : element local-shape-functions N_{a,xi} 33159599516SKenneth E. Jansenc xl (npro,nenl,nsd) : nodal coordinates at current step (x^e_a) 33259599516SKenneth E. Jansenc qtl (npro,nshl) : diffusive flux vector (don't worry) 33359599516SKenneth E. Jansenc 33459599516SKenneth E. Jansenc output: 33559599516SKenneth E. Jansenc rtl (npro,nshl) : element RHS residual (G^e_a) 33659599516SKenneth E. Jansenc rmtl (npro,nshl) : element modified residual (G^e_a tilde) 33759599516SKenneth E. Jansenc EGmasst (npro,nshape,nshape) : element LHS tangent mass matrix (dG^e_a 33859599516SKenneth E. Jansenc dY_b ) 33959599516SKenneth E. Jansenc 34059599516SKenneth E. Jansenc 34159599516SKenneth E. Jansenc Note: This routine will calculate the element matrices for the 34259599516SKenneth E. Jansenc Hulbert's generalized alpha method integrator 34359599516SKenneth E. Jansenc 34459599516SKenneth E. Jansenc Note: nedof = nflow*nshl is the total number of degrees of freedom 34559599516SKenneth E. Jansenc at each element node. 34659599516SKenneth E. Jansenc 34759599516SKenneth E. Jansenc Mathematics done by: Michel Mallet, Farzin Shakib (version 1) 34859599516SKenneth E. Jansenc Farzin Shakib (version 2) 34959599516SKenneth E. Jansenc 35059599516SKenneth E. Jansenc 35159599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2.f) 35259599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 35359599516SKenneth E. Jansenc Kenneth Jansen, Winter 1997. (Primitive Variables) 35459599516SKenneth E. Jansenc Chris Whiting, Winter 1998. (LHS matrix formation) 35559599516SKenneth E. Jansenc---------------------------------------------------------------------- 35659599516SKenneth E. Jansenc 35759599516SKenneth E. Jansen include "common.h" 35859599516SKenneth E. Jansenc 35959599516SKenneth E. Jansen dimension ycl(npro,nshl,ndof), 36059599516SKenneth E. Jansen & acl(npro,nshl,ndof), 36159599516SKenneth E. Jansen & dwl(npro,nenl), 36259599516SKenneth E. Jansen & shp(nshl,ngauss), shgl(nsd,nshl,ngauss), 36359599516SKenneth E. Jansen & xl(npro,nenl,nsd), 36459599516SKenneth E. Jansen & rtl(npro,nshl), qtl(npro,nshl), 36559599516SKenneth E. Jansen & rmtl(npro,nshl), Diagl(npro,nshl), 36659599516SKenneth E. Jansen & EGmasst(npro,nshape,nshape), 36759599516SKenneth E. Jansen & dist2w(npro), sgn(npro,nshl), 368513954efSKenneth E. Jansen & vort(npro), gVnrm(npro), 36959599516SKenneth E. Jansen & rmu(npro), con(npro), 37059599516SKenneth E. Jansen & T(npro), cp(npro), 37159599516SKenneth E. Jansen & g1yti(npro), acti(npro), 37259599516SKenneth E. Jansen & g2yti(npro), g3yti(npro), 37359599516SKenneth E. Jansen & Sclr(npro), srcp (npro) 37459599516SKenneth E. Jansen 37559599516SKenneth E. Jansenc 37659599516SKenneth E. Jansen dimension shg(npro,nshl,nsd) 37759599516SKenneth E. Jansenc 37859599516SKenneth E. Jansen dimension dxidx(npro,nsd,nsd), WdetJ(npro) 37959599516SKenneth E. Jansenc 38059599516SKenneth E. Jansen dimension rho(npro), rk(npro), 38159599516SKenneth E. Jansen & u1(npro), u2(npro), 38259599516SKenneth E. Jansen & u3(npro) 38359599516SKenneth E. Jansenc 38459599516SKenneth E. Jansen dimension A0t(npro), A1t(npro), 38559599516SKenneth E. Jansen & A2t(npro), A3t(npro) 38659599516SKenneth E. Jansenc 38759599516SKenneth E. Jansen dimension rLyti(npro), raLSt(npro), 38859599516SKenneth E. Jansen & rTLSt(npro), giju(npro,6), 38959599516SKenneth E. Jansen & DCt(npro, ngauss) 39059599516SKenneth E. Jansenc 39159599516SKenneth E. Jansen dimension rti(npro,nsd+1), rmti(npro,nsd+1), 39259599516SKenneth E. Jansen & stifft(npro,nsd,nsd), 39359599516SKenneth E. Jansen & shape(npro,nshl), shdrv(npro,nsd,nshl) 39459599516SKenneth E. Jansen real*8 elDwl(npro) 39559599516SKenneth E. Jansenc 39659599516SKenneth E. Jansen ttim(6) = ttim(6) - tmr() 39759599516SKenneth E. Jansenc 39859599516SKenneth E. Jansenc.... loop through the integration points 39959599516SKenneth E. Jansenc 40059599516SKenneth E. Jansen elDwl(:)=zero 40159599516SKenneth E. Jansen do intp = 1, ngauss 40259599516SKenneth E. Jansenc 40359599516SKenneth E. Jansenc.... if Det. .eq. 0, do not include this point 40459599516SKenneth E. Jansenc 40559599516SKenneth E. Jansen if (Qwt(lcsyst,intp) .eq. zero) cycle ! precaution 40659599516SKenneth E. Jansenc 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansenc.... create a matrix of shape functions (and derivatives) for each 40959599516SKenneth E. Jansenc element at this quadrature point. These arrays will contain 41059599516SKenneth E. Jansenc the correct signs for the hierarchic basis 41159599516SKenneth E. Jansenc 41259599516SKenneth E. Jansen call getshp(shp, shgl, sgn, 41359599516SKenneth E. Jansen & shape, shdrv) 41459599516SKenneth E. Jansenc 41559599516SKenneth E. Jansenc.... initialize 41659599516SKenneth E. Jansenc 41759599516SKenneth E. Jansen rlyti = zero 41859599516SKenneth E. Jansen rti = zero 41959599516SKenneth E. Jansen rmti = zero 42059599516SKenneth E. Jansen srcp = zero 42159599516SKenneth E. Jansen stifft = zero 42259599516SKenneth E. Jansenc if (lhs .eq. 1) stifft = zero 42359599516SKenneth E. Jansenc 42459599516SKenneth E. Jansenc 42559599516SKenneth E. Jansenc.... calculate the integration variables 42659599516SKenneth E. Jansenc 42759599516SKenneth E. Jansen ttim(8) = ttim(8) - tmr() 42859599516SKenneth E. Jansenc 42959599516SKenneth E. Jansen call e3ivarSclr(ycl, acl, acti, 43059599516SKenneth E. Jansen & shape, shdrv, xl, 43159599516SKenneth E. Jansen & T, cp, 43259599516SKenneth E. Jansen & dxidx, Sclr, 433513954efSKenneth E. Jansen & Wdetj, vort, gVnrm, 43459599516SKenneth E. Jansen & g1yti, g2yti, g3yti, 43559599516SKenneth E. Jansen & rho, rmu, con, 43659599516SKenneth E. Jansen & rk, u1, u2, 43759599516SKenneth E. Jansen & u3, shg, dwl, 43859599516SKenneth E. Jansen & dist2w) 43959599516SKenneth E. Jansen ttim(8) = ttim(8) + tmr() 44059599516SKenneth E. Jansen 44159599516SKenneth E. Jansenc 44259599516SKenneth E. Jansenc.... calculate the source term contribution 44359599516SKenneth E. Jansenc 44459599516SKenneth E. Jansen if(nosource.ne.1) 44559599516SKenneth E. Jansen & call e3sourceSclr (Sclr, rho, rmu, 446513954efSKenneth E. Jansen & dist2w, vort, gVnrm, con, 44759599516SKenneth E. Jansen & g1yti, g2yti, g3yti, 44859599516SKenneth E. Jansen & rti, rLyti, srcp, 44959599516SKenneth E. Jansen & ycl, shape, u1, 45059599516SKenneth E. Jansen & u2, u3, xl, 45159599516SKenneth E. Jansen & elDwl) 45259599516SKenneth E. Jansenc 45359599516SKenneth E. Jansen if (ilset.eq.2 .and. isclr.eq.2) then 45459599516SKenneth E. Jansen rk = pt5 * ( u1**2 + u2**2 + u3**2 ) 45559599516SKenneth E. Jansen endif 45659599516SKenneth E. Jansenc.... calculate the relevant matrices 45759599516SKenneth E. Jansenc 45859599516SKenneth E. Jansen ttim(9) = ttim(9) - tmr() 45959599516SKenneth E. Jansen call e3mtrxSclr (rho, 46059599516SKenneth E. Jansen & u1, u2, u3, 46159599516SKenneth E. Jansen & A0t, A1t, 46259599516SKenneth E. Jansen & A2t, A3t) 46359599516SKenneth E. Jansen ttim(9) = ttim(9) + tmr() 46459599516SKenneth E. Jansenc 46559599516SKenneth E. Jansenc.... calculate the convective contribution (Galerkin) 46659599516SKenneth E. Jansenc 46759599516SKenneth E. Jansen ttim(14) = ttim(14) - tmr() 46859599516SKenneth E. Jansen call e3convSclr (g1yti, g2yti, g3yti, 46959599516SKenneth E. Jansen & A1t, A2t, A3t, 47059599516SKenneth E. Jansen & rho, u1, Sclr, 47159599516SKenneth E. Jansen & u2, u3, rLyti, 47259599516SKenneth E. Jansen & rti, rmti, EGmasst, 47359599516SKenneth E. Jansen & shg, shape, WdetJ) 47459599516SKenneth E. Jansen ttim(14) = ttim(14) + tmr() 47559599516SKenneth E. Jansenc 47659599516SKenneth E. Jansenc.... calculate the diffusion contribution 47759599516SKenneth E. Jansenc 47859599516SKenneth E. Jansen ttim(15) = ttim(15) - tmr() 47959599516SKenneth E. Jansen if (Navier .eq. 1) then 48059599516SKenneth E. Jansen call e3viscSclr (g1yti, g2yti, g3yti, 48159599516SKenneth E. Jansen & rmu, Sclr, rho, 48259599516SKenneth E. Jansen & rti, rmti, stifft ) 48359599516SKenneth E. Jansen endif 48459599516SKenneth E. Jansen ttim(15) = ttim(15) + tmr() 48559599516SKenneth E. Jansenc 48659599516SKenneth E. Jansen if (ilset.eq.2) srcp = zero 48759599516SKenneth E. Jansen 48859599516SKenneth E. Jansenc 48959599516SKenneth E. Jansenc.... calculate the least-squares contribution 49059599516SKenneth E. Jansenc 49159599516SKenneth E. Jansen ttim(16) = ttim(16) - tmr() 49259599516SKenneth E. Jansen call e3LSSclr(A1t, A2t, A3t, 49359599516SKenneth E. Jansen & rho, rmu, rtLSt, 49459599516SKenneth E. Jansen & u1, u2, u3, 49559599516SKenneth E. Jansen & rLyti, dxidx, raLSt, 49659599516SKenneth E. Jansen & rti, rk, giju, 49759599516SKenneth E. Jansen & acti, A0t, 49859599516SKenneth E. Jansen & shape, shg, 49959599516SKenneth E. Jansen & EGmasst, stifft, WdetJ, 50059599516SKenneth E. Jansen & srcp) 50159599516SKenneth E. Jansen ttim(16) = ttim(16) + tmr() 50259599516SKenneth E. Jansenc 50359599516SKenneth E. Jansenc******************************DC TERMS***************************** 50459599516SKenneth E. Jansen if (idcsclr(1) .ne. 0) then 50559599516SKenneth E. Jansen if ((idcsclr(2).eq.1 .and. isclr.eq.1) .or. 50659599516SKenneth E. Jansen & (idcsclr(2).eq.2 .and. isclr.eq.2)) then ! scalar with dc 50759599516SKenneth E. Jansen call e3dcSclr(g1yti, g2yti, g3yti, 50859599516SKenneth E. Jansen & A0t, raLSt, rTLSt, 50959599516SKenneth E. Jansen & DCt, giju, 51059599516SKenneth E. Jansen & rti, rmti, stifft) 51159599516SKenneth E. Jansen endif 51259599516SKenneth E. Jansen endif 51359599516SKenneth E. Jansenc 51459599516SKenneth E. Jansenc****************************************************************** 51559599516SKenneth E. Jansenc.... calculate the time derivative (mass) contribution to RHS 51659599516SKenneth E. Jansenc 51759599516SKenneth E. Jansen 51859599516SKenneth E. Jansen call e3massrSclr (acti, rti, A0t) 51959599516SKenneth E. Jansenc 52059599516SKenneth E. Jansenc.... calculate the time (mass) contribution to the LHS 52159599516SKenneth E. Jansenc 52259599516SKenneth E. Jansen if (lhs .eq. 1) then 52359599516SKenneth E. Jansen call e3masslSclr (shape, WdetJ, A0t, EGmasst,srcp) 52459599516SKenneth E. Jansen endif 52559599516SKenneth E. Jansenc 52659599516SKenneth E. Jansen 52759599516SKenneth E. Jansenc.... multiply flux terms by shape functions and derivatives (from weight space for RHS and 52859599516SKenneth E. Jansenc by both the weight space and solution space for the LHS stiffness term) 52959599516SKenneth E. Jansenc 53059599516SKenneth E. Jansen ttim(19) = ttim(19) - tmr() 53159599516SKenneth E. Jansen call e3wmltSclr (shape, shg, WdetJ, 53259599516SKenneth E. Jansen & rti, 53359599516SKenneth E. Jansen & rtl, stifft, EGmasst) 53459599516SKenneth E. Jansen ttim(19) = ttim(19) + tmr() 53559599516SKenneth E. Jansenc 53659599516SKenneth E. Jansenc.... end of the loop 53759599516SKenneth E. Jansenc 53859599516SKenneth E. Jansen enddo 53959599516SKenneth E. Jansen qptinv=one/ngauss 54059599516SKenneth E. Jansen elDwl(:)=elDwl(:)*qptinv 54159599516SKenneth E. Jansen 54259599516SKenneth E. Jansen 54359599516SKenneth E. Jansen ttim(6) = ttim(6) + tmr() 54459599516SKenneth E. Jansenc 54559599516SKenneth E. Jansenc.... return 54659599516SKenneth E. Jansenc 54759599516SKenneth E. Jansen return 54859599516SKenneth E. Jansen end 54959599516SKenneth E. Jansen 550