159599516SKenneth E. Jansen subroutine e3tau (rho, cp, rmu, 259599516SKenneth E. Jansen & u1, u2, u3, 359599516SKenneth E. Jansen & con, dxidx, rLyi, 459599516SKenneth E. Jansen & rLymi, tau, rk, 559599516SKenneth E. Jansen & giju, rTLS, raLS, 659599516SKenneth E. Jansen & A0inv, dVdY, cv) 759599516SKenneth E. Jansenc 859599516SKenneth E. Jansenc---------------------------------------------------------------------- 959599516SKenneth E. Jansenc 1059599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator. 1159599516SKenneth E. Jansenc We receive the regular residual L operator and a 1259599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for 1359599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past 1459599516SKenneth E. Jansenc ENSA codes 1559599516SKenneth E. Jansenc 1659599516SKenneth E. Jansenc input: 1759599516SKenneth E. Jansenc rho (npro) : density 1859599516SKenneth E. Jansenc T (npro) : temperature 1959599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 2059599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 2159599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 2259599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 2359599516SKenneth E. Jansenc dxidx (npro,nsd,nsd) : inverse of deformation gradient 2459599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 2559599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 2659599516SKenneth E. Jansenc 2759599516SKenneth E. Jansenc output: 2859599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 2959599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 3059599516SKenneth E. Jansenc tau (npro,3) : 3 taus 3159599516SKenneth E. Jansenc 3259599516SKenneth E. Jansenc 3359599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2tau.f) 3459599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 3559599516SKenneth E. Jansenc---------------------------------------------------------------------- 3659599516SKenneth E. Jansenc 3759599516SKenneth E. Jansen include "common.h" 3859599516SKenneth E. Jansenc 3959599516SKenneth E. Jansen dimension rho(npro), con(npro), 4059599516SKenneth E. Jansen & cp(npro), u1(npro), 4159599516SKenneth E. Jansen & u2(npro), u3(npro), 4259599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), rk(npro), 4359599516SKenneth E. Jansen & tau(npro,5), rLyi(npro,nflow), 4459599516SKenneth E. Jansen & rLymi(npro,nflow), dVdY(npro,15), 4559599516SKenneth E. Jansen & rTLS(npro), raLS(npro), 4659599516SKenneth E. Jansen & rLyitemp(npro,nflow), detgijI(npro) 4759599516SKenneth E. Jansenc 4859599516SKenneth E. Jansen dimension rmu(npro), cv(npro), 4959599516SKenneth E. Jansen & gijd(npro,6), uh1(npro), 5059599516SKenneth E. Jansen & fact(npro), h2o2u(npro), giju(npro,6), 5159599516SKenneth E. Jansen & A0inv(npro,15),gijdu(npro,6) 5259599516SKenneth E. Jansenc 53*d3ff575aSKenneth E. Jansen call e3gijd( dxidx, gijd ) ! both diagonal taus need this 54*d3ff575aSKenneth E. Jansen if(itau.eq.1) then ! tau proposed by for nearly incompressible 55*d3ff575aSKenneth E. Jansenc flows by Guillermo Hauke 5659599516SKenneth E. Jansenc 5759599516SKenneth E. Jansenc next form the diffusive length scale |u| h_1 = 2 ( ui (gijd)-1 uj)^{1/2} 5859599516SKenneth E. Jansenc 5959599516SKenneth E. Jansenc dividing factor for the inverse of gijd 6059599516SKenneth E. Jansenc 6159599516SKenneth E. Jansen fact = gijd(:,1) * gijd(:,3) * gijd(:,6) 6259599516SKenneth E. Jansen & - gijd(:,1) * gijd(:,5) * gijd(:,5) 6359599516SKenneth E. Jansen & - gijd(:,3) * gijd(:,4) * gijd(:,4) 6459599516SKenneth E. Jansen & - gijd(:,6) * gijd(:,2) * gijd(:,2) 6559599516SKenneth E. Jansen & + gijd(:,2) * gijd(:,4) * gijd(:,5) * two 6659599516SKenneth E. Jansenc 6759599516SKenneth E. Jansen uh1= u1*u1*(gijd(:,3)*gijd(:,6)-gijd(:,5)*gijd(:,5)) 6859599516SKenneth E. Jansen & + u2*u2*(gijd(:,1)*gijd(:,6)-gijd(:,4)*gijd(:,4)) 6959599516SKenneth E. Jansen & + u3*u3*(gijd(:,1)*gijd(:,3)-gijd(:,2)*gijd(:,2)) 7059599516SKenneth E. Jansen & + two *(u1*u2*(gijd(:,4)*gijd(:,5)-gijd(:,2)*gijd(:,6)) 7159599516SKenneth E. Jansen & + u1*u3*(gijd(:,2)*gijd(:,5)-gijd(:,4)*gijd(:,3)) 7259599516SKenneth E. Jansen & + u2*u3*(gijd(:,4)*gijd(:,2)-gijd(:,1)*gijd(:,5))) 7359599516SKenneth E. Jansenc 7459599516SKenneth E. Jansenc at this point we have (u h1)^2 * inverse coefficient^2 / 4 7559599516SKenneth E. Jansenc 7659599516SKenneth E. Jansenc ^ fact 7759599516SKenneth E. Jansenc 7859599516SKenneth E. Jansen uh1= two * sqrt(uh1/fact) 7959599516SKenneth E. Jansenc 8059599516SKenneth E. Jansenc next form the advective length scale |u|/h_2 = 2 ( ui (gijd) uj)^{1/2} 8159599516SKenneth E. Jansenc 8259599516SKenneth E. Jansen h2o2u = u1*u1*gijd(:,1) 8359599516SKenneth E. Jansen & + u2*u2*gijd(:,3) 8459599516SKenneth E. Jansen & + u3*u3*gijd(:,6) 8559599516SKenneth E. Jansen & +(u1*u2*gijd(:,2) 8659599516SKenneth E. Jansen & + u1*u3*gijd(:,4) 8759599516SKenneth E. Jansen & + u2*u3*gijd(:,5))*two + 1.0e-15 !FIX FOR INVALID MESHES 8859599516SKenneth E. Jansenc 8959599516SKenneth E. Jansenc at this point we have (2 u / h_2)^2 9059599516SKenneth E. Jansenc 9159599516SKenneth E. Jansen 9259599516SKenneth E. Jansenc call tnanqe(h2o2u,1,"riaconv ") 9359599516SKenneth E. Jansen 9459599516SKenneth E. Jansen h2o2u = one / sqrt(h2o2u) ! this flips it over leaves it h_2/(2u) 9559599516SKenneth E. Jansenc 9659599516SKenneth E. Jansenc.... diffusive corrections 9759599516SKenneth E. Jansen 9859599516SKenneth E. Jansenc 9959599516SKenneth E. Jansenc.... cell Reynold number 10059599516SKenneth E. Jansenc 10159599516SKenneth E. Jansen fact=pt5*rho*uh1/rmu 10259599516SKenneth E. Jansen 10359599516SKenneth E. Jansenc 10459599516SKenneth E. Jansenc.... continuity tau 10559599516SKenneth E. Jansenc 10659599516SKenneth E. Jansen tau(:,1)=pt5*uh1*min(one,fact)*taucfct 10759599516SKenneth E. Jansenc 10859599516SKenneth E. Jansenc... momentum tau 10959599516SKenneth E. Jansenc 110*d3ff575aSKenneth E. Jansen if (iremoveStabTimeTerm.eq.0 ) then 11159599516SKenneth E. Jansen dts=one/(Dtgl*dtsfct) 11259599516SKenneth E. Jansen tau(:,2)=min(dts,h2o2u) 113*d3ff575aSKenneth E. Jansen endif 11459599516SKenneth E. Jansen tau(:,2)=tau(:,2)/rho 11559599516SKenneth E. Jansenc 11659599516SKenneth E. Jansenc.... energy tau cv=cp/gamma assumed 11759599516SKenneth E. Jansenc 11859599516SKenneth E. Jansenc tau(:,3)=gamma*tau(:,2)/cp 11959599516SKenneth E. Jansen tau(:,3)=tau(:,2)/cv 12059599516SKenneth E. Jansenc 12159599516SKenneth E. Jansenc.... diffusive corrections 12259599516SKenneth E. Jansenc 12359599516SKenneth E. Jansen if (ipord == 1) then 12459599516SKenneth E. Jansen celt = pt66 12559599516SKenneth E. Jansen else if (ipord == 2) then 12659599516SKenneth E. Jansen celt = pt33 12759599516SKenneth E. Jansenc celt = pt33*0.04762 12859599516SKenneth E. Jansen else if (ipord == 3) then 12959599516SKenneth E. Jansen celt = pt33 !.02 just a guess... 13059599516SKenneth E. Jansen else if (ipord >= 4) then 13159599516SKenneth E. Jansen celt = .008 ! yet another guess... 13259599516SKenneth E. Jansen endif 13359599516SKenneth E. Jansenc 13459599516SKenneth E. Jansenc fact=h2o2u*h2o2u*rk*pt66/rmu 13559599516SKenneth E. Jansen fact=h2o2u*h2o2u*rk*celt/rmu 13659599516SKenneth E. Jansenc 13759599516SKenneth E. Jansen tau(:,2)=min(tau(:,2),fact) 13859599516SKenneth E. Jansen tau(:,3)=min(tau(:,3),fact*rmu/con)*temper 13959599516SKenneth E. Jansenc 14059599516SKenneth E. Jansen else if(itau.eq.0) then ! tau proposed by Farzin and Shakib 14159599516SKenneth E. Jansenc 14259599516SKenneth E. Jansenc... momentum tau 14359599516SKenneth E. Jansenc 14459599516SKenneth E. Jansen 14559599516SKenneth E. Jansenc 14659599516SKenneth E. Jansenc... higher order element diffusive correction 14759599516SKenneth E. Jansenc 14859599516SKenneth E. Jansen if (ipord == 1) then 14959599516SKenneth E. Jansen fff = 36.0d0 15059599516SKenneth E. Jansen else if (ipord == 2) then 15159599516SKenneth E. Jansen fff = 60.0d0 15259599516SKenneth E. Jansenc fff = 36.0d0 15359599516SKenneth E. Jansen else if (ipord == 3) then 15459599516SKenneth E. Jansen fff = 128.0d0 15559599516SKenneth E. Jansenc fff = 144.0d0 15659599516SKenneth E. Jansen endif 157*d3ff575aSKenneth E. Jansen if (iremoveStabTimeTerm.eq.1 ) then 158*d3ff575aSKenneth E. Jansen dts = zero 159*d3ff575aSKenneth E. Jansen else 16059599516SKenneth E. Jansen dts = dtsfct*Dtgl 161*d3ff575aSKenneth E. Jansen endif 16259599516SKenneth E. Jansen tau(:,2)=rho**2*((two*dts)**2 163*d3ff575aSKenneth E. Jansen & + (u1*(u1*gijd(:,1) + two*(u2*gijd(:,2)+u3*gijd(:,4))) 16459599516SKenneth E. Jansen & + u2*(u2*gijd(:,3) + two*u3*gijd(:,5)) 165*d3ff575aSKenneth E. Jansen & + u3*u3*gijd(:,6))) 16659599516SKenneth E. Jansen & +fff*rmu**2*(gijd(:,1)**2 + gijd(:,3)**2 + gijd(:,6)**2 + 16759599516SKenneth E. Jansen & two*(gijd(:,2)**2 + gijd(:,4)**2 + gijd(:,5)**2)) 16859599516SKenneth E. Jansen fact=sqrt(tau(:,2)) 169*d3ff575aSKenneth E. Jansen tau(:,1)=pt125*fact/(rho*(gijd(:,1)+gijd(:,3)+gijd(:,6)))*taucfct 17059599516SKenneth E. Jansen tau(:,2)=one/fact 17159599516SKenneth E. Jansenc 17259599516SKenneth E. Jansenc.... energy tau cv=cp/gamma assumed 17359599516SKenneth E. Jansenc 17459599516SKenneth E. Jansen tau(:,3)=tau(:,2)/cv*temper 17559599516SKenneth E. Jansenc 17659599516SKenneth E. Jansen endif 17759599516SKenneth E. Jansenc 17859599516SKenneth E. Jansenc... finally multiply this tau matrix times the 17959599516SKenneth E. Jansenc two residual vectors 18059599516SKenneth E. Jansenc 18159599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi) 18259599516SKenneth E. Jansenc ... storing rLyi for the DC term 18359599516SKenneth E. Jansen if(iDC .ne. 0) rLyitemp=rLyi 18459599516SKenneth E. Jansen 18559599516SKenneth E. Jansen if(ires.eq.3 .or. ires .eq. 1) then 18659599516SKenneth E. Jansen rLyi(:,1) = tau(:,1) * rLyi(:,1) 18759599516SKenneth E. Jansen rLyi(:,2) = tau(:,2) * rLyi(:,2) 18859599516SKenneth E. Jansen rLyi(:,3) = tau(:,2) * rLyi(:,3) 18959599516SKenneth E. Jansen rLyi(:,4) = tau(:,2) * rLyi(:,4) 19059599516SKenneth E. Jansen rLyi(:,5) = tau(:,3) * rLyi(:,5) 19159599516SKenneth E. Jansen endif 19259599516SKenneth E. Jansenc 19359599516SKenneth E. Jansen if(iDC .ne. 0) then 19459599516SKenneth E. Jansenc..... calculation of rTLS & raLS for DC term 19559599516SKenneth E. Jansenc 19659599516SKenneth E. Jansenc..... calculation of (Ly - S).tau^tilda*(Ly - S) 19759599516SKenneth E. Jansenc 19859599516SKenneth E. Jansen rTLS = rLYItemp(:,1) * (rLyi(:,1)*dVdY(:,1) 19959599516SKenneth E. Jansen & + dVdY(:,2)*rLyi(:,2) + dVdY(:,4)*rLyi(:,3) 20059599516SKenneth E. Jansen & + rLyi(:,4)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5)) 20159599516SKenneth E. Jansen & + rLyitemp(:,2) * (rLyi(:,2)*dVdY(:,3) 20259599516SKenneth E. Jansen & + rLyi(:,3)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4) 20359599516SKenneth E. Jansen & + rLyi(:,5)*dVdY(:,12)) 20459599516SKenneth E. Jansen & + rLyitemp(:,3) * (rLyi(:,3)*dVdY(:,6) 20559599516SKenneth E. Jansen & + dVdY(:,9)*rLyi(:,4) + dVdY(:,13)*rLyi(:,5)) 20659599516SKenneth E. Jansen & + rLyitemp(:,4) * (rLyi(:,4)*dVdY(:,10) 20759599516SKenneth E. Jansen & + dVdY(:,14)*rLyi(:,5)) 20859599516SKenneth E. Jansen & + rLyitemp(:,5) * (dVdY(:,15)*rLyi(:,5)) 20959599516SKenneth E. Jansen 21059599516SKenneth E. Jansenc 21159599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S) 21259599516SKenneth E. Jansenc 21359599516SKenneth E. Jansen raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15) 21459599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14) 21559599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6) 21659599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10) 21759599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11) 21859599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7) 21959599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13) 22059599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12) 22159599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8) 22259599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9) 22359599516SKenneth E. Jansen & + rLyitemp(:,1)**2*A0inv(:,1) 22459599516SKenneth E. Jansen & + rLyitemp(:,2)**2*A0inv(:,2) 22559599516SKenneth E. Jansen & + rLyitemp(:,3)**2*A0inv(:,3) 22659599516SKenneth E. Jansen & + rLyitemp(:,4)**2*A0inv(:,4) 22759599516SKenneth E. Jansen & + rLyitemp(:,5)**2*A0inv(:,5) 22859599516SKenneth E. Jansenc 22959599516SKenneth E. Jansenc.....****************calculation of giju for DC term*************** 23059599516SKenneth E. Jansenc 23159599516SKenneth E. Jansenc.... for the notation of different numbering 23259599516SKenneth E. Jansenc 23359599516SKenneth E. Jansen gijdu(:,1)=gijd(:,1) 23459599516SKenneth E. Jansen gijdu(:,2)=gijd(:,3) 23559599516SKenneth E. Jansen gijdu(:,3)=gijd(:,6) 23659599516SKenneth E. Jansen gijdu(:,4)=gijd(:,2) 23759599516SKenneth E. Jansen gijdu(:,5)=gijd(:,4) 23859599516SKenneth E. Jansen gijdu(:,6)=gijd(:,5) 23959599516SKenneth E. Jansenc 24059599516SKenneth E. Jansenc 24159599516SKenneth E. Jansen detgijI = one/( 24259599516SKenneth E. Jansen & gijdu(:,1) * gijdu(:,2) * gijdu(:,3) 24359599516SKenneth E. Jansen & - gijdu(:,1) * gijdu(:,6) * gijdu(:,6) 24459599516SKenneth E. Jansen & - gijdu(:,4) * gijdu(:,4) * gijdu(:,3) 24559599516SKenneth E. Jansen & + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two 24659599516SKenneth E. Jansen & - gijdu(:,5) * gijdu(:,5) * gijdu(:,2) 24759599516SKenneth E. Jansen & ) 24859599516SKenneth E. Jansen giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3) 24959599516SKenneth E. Jansen & - gijdu(:,6)**2) 25059599516SKenneth E. Jansen giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3) 25159599516SKenneth E. Jansen & - gijdu(:,5)**2) 25259599516SKenneth E. Jansen giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2) 25359599516SKenneth E. Jansen & - gijdu(:,4)**2) 25459599516SKenneth E. Jansen giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6) 25559599516SKenneth E. Jansen & - gijdu(:,4)*gijdu(:,3) ) 25659599516SKenneth E. Jansen giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6) 25759599516SKenneth E. Jansen & - gijdu(:,5)*gijdu(:,2) ) 25859599516SKenneth E. Jansen giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5) 25959599516SKenneth E. Jansen & - gijdu(:,1)*gijdu(:,6) ) 26059599516SKenneth E. Jansenc 26159599516SKenneth E. Jansen endif ! end of iDC.ne.0 26259599516SKenneth E. Jansenc 26359599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi) 26459599516SKenneth E. Jansenc 26559599516SKenneth E. Jansen if(ires.ne.1 ) then 26659599516SKenneth E. Jansen rLymi(:,1) = tau(:,1) * rLymi(:,1) 26759599516SKenneth E. Jansen rLymi(:,2) = tau(:,2) * rLymi(:,2) 26859599516SKenneth E. Jansen rLymi(:,3) = tau(:,2) * rLymi(:,3) 26959599516SKenneth E. Jansen rLymi(:,4) = tau(:,2) * rLymi(:,4) 27059599516SKenneth E. Jansen rLymi(:,5) = tau(:,3) * rLymi(:,5) 27159599516SKenneth E. Jansen endif 27259599516SKenneth E. Jansenc 273f4d0b58bSKenneth E. Jansenc INCORRECT NOW ! flops = flops + 255*npro 27459599516SKenneth E. Jansenc 27559599516SKenneth E. Jansenc 27659599516SKenneth E. Jansenc.... return 27759599516SKenneth E. Jansenc 27859599516SKenneth E. Jansen return 27959599516SKenneth E. Jansen end 28059599516SKenneth E. Jansenc 28159599516SKenneth E. Jansenc 28259599516SKenneth E. Jansen 28359599516SKenneth E. Jansen 28459599516SKenneth E. Jansen subroutine e3tau_nd (rho, cp, rmu, T, 28559599516SKenneth E. Jansen & u1, u2, u3, 28659599516SKenneth E. Jansen & a1, a2, a3, 28759599516SKenneth E. Jansen & con, dxidx, rLyi, 28859599516SKenneth E. Jansen & rLymi, Tau, rk, 28959599516SKenneth E. Jansen & giju, rTLS, raLS, 29059599516SKenneth E. Jansen & cv, compK, pres, 29159599516SKenneth E. Jansen & A0inv, dVdY) 29259599516SKenneth E. Jansenc 29359599516SKenneth E. Jansenc---------------------------------------------------------------------- 29459599516SKenneth E. Jansenc 29559599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator. 29659599516SKenneth E. Jansenc We receive the regular residual L operator and a 29759599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for 29859599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past 29959599516SKenneth E. Jansenc ENSA codes 30059599516SKenneth E. Jansenc 30159599516SKenneth E. Jansenc input: 30259599516SKenneth E. Jansenc rho (npro) : density 30359599516SKenneth E. Jansenc T (npro) : temperature 30459599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 30559599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 30659599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 30759599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 30859599516SKenneth E. Jansenc dxidx (npro,nsd,nsd) : inverse of deformation gradient 30959599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 31059599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 31159599516SKenneth E. Jansenc 31259599516SKenneth E. Jansenc output: 31359599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 31459599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 31559599516SKenneth E. Jansenc Mtau (npro,5,5) : Matrix of Stabilized Parameters 31659599516SKenneth E. Jansenc 31759599516SKenneth E. Jansenc 31859599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2tau.f) 31959599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 32059599516SKenneth E. Jansenc---------------------------------------------------------------------- 32159599516SKenneth E. Jansenc 32259599516SKenneth E. Jansen include "common.h" 32359599516SKenneth E. Jansenc 32459599516SKenneth E. Jansen dimension rho(npro), con(npro), 32559599516SKenneth E. Jansen & cp(npro), u1(npro), 32659599516SKenneth E. Jansen & u2(npro), u3(npro), 32759599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), rk(npro), 32859599516SKenneth E. Jansen & rLyi(npro,nflow), 32959599516SKenneth E. Jansen & rLymi(npro,nflow), dVdY(npro,15), 33059599516SKenneth E. Jansen & rTLS(npro), raLS(npro), 33159599516SKenneth E. Jansen & rLyitemp(npro,nflow), detgijI(npro) 33259599516SKenneth E. Jansenc 33359599516SKenneth E. Jansen dimension rmu(npro), cv(npro), 33459599516SKenneth E. Jansen & gijd(npro,6), 33559599516SKenneth E. Jansen & fact(npro), giju(npro,6), 33659599516SKenneth E. Jansen & A0inv(npro,15),gijdu(npro,6), compK(npro,10), 33759599516SKenneth E. Jansen & a1(npro), a2(npro), a3(npro), 33859599516SKenneth E. Jansen & T(npro), pres(npro), alphap(npro), 33959599516SKenneth E. Jansen & betaT(npro), gamb(npro), c(npro), 34059599516SKenneth E. Jansen & u(npro), eb1(npro), Q(npro,5,5), 34159599516SKenneth E. Jansen & rlam(npro,5), eigmax(npro,5), Pe(npro), 34259599516SKenneth E. Jansen & Ak(npro), B(npro), D(npro), E(npro), 34359599516SKenneth E. Jansen & STau(npro,15), Tau(npro,nflow,nflow) 34459599516SKenneth E. Jansen 34559599516SKenneth E. Jansen 34659599516SKenneth E. Jansenc... build some necessary quantities at integration point: 34759599516SKenneth E. Jansen 34859599516SKenneth E. Jansenc alfap = one / T 34959599516SKenneth E. Jansenc betaT = one / pres 35059599516SKenneth E. Jansen gamb = gamma1 35159599516SKenneth E. Jansen c = sqrt( (gamma * Rgas) * T ) 35259599516SKenneth E. Jansen u = sqrt(u1**2+u2**2+u3**2) 35359599516SKenneth E. Jansen eb1 = cp*T - pt5*(u1**2+u2**2+u3**2) 35459599516SKenneth E. Jansen 35559599516SKenneth E. Jansenc... get eigenvectors for diagonalizing Tau_adv (e.v) before final rotations 35659599516SKenneth E. Jansenc... Note: the ordering of eigenvectors corresponds to the following 35759599516SKenneth E. Jansenc... ordering of the eigenvalues in the 1-st Euler Jacobian rotated to 35859599516SKenneth E. Jansenc... the streamline coordinates 35959599516SKenneth E. Jansen 36059599516SKenneth E. Jansenc |u+c | 36159599516SKenneth E. Jansenc | u | 36259599516SKenneth E. Jansenc | u | 36359599516SKenneth E. Jansenc | u | ! for origins of this see Beam, Warming, Hyett 36459599516SKenneth E. Jansenc | u-c| ! Mathematics of Computation vol. 29 No. 132 p. 1037 36559599516SKenneth E. Jansen 36659599516SKenneth E. Jansenc... different ordering assumed in Shakib/Johan entropy vars. code 36759599516SKenneth E. Jansen 36859599516SKenneth E. Jansen 36959599516SKenneth E. Jansen 37059599516SKenneth E. Jansen call e3eig1 (rho, T, cp, 37159599516SKenneth E. Jansen & gamb, c, u1, 37259599516SKenneth E. Jansen & u2, u3, a1, 37359599516SKenneth E. Jansen & a2, a3, eb1, 37459599516SKenneth E. Jansen & dxidx, u, Q) 37559599516SKenneth E. Jansen 37659599516SKenneth E. Jansenc... Perform a Jacobi rotation on the Lambda matrix as well as adjust 37759599516SKenneth E. Jansenc... the eigenvectors. Tau still remains in entropy variables. 37859599516SKenneth E. Jansen 37959599516SKenneth E. Jansen 38059599516SKenneth E. Jansen 38159599516SKenneth E. Jansen call e3eig2 (u, c, a1, 38259599516SKenneth E. Jansen & a2, a3, rlam, 38359599516SKenneth E. Jansen & Q, eigmax) 38459599516SKenneth E. Jansen 38559599516SKenneth E. Jansenc 38659599516SKenneth E. Jansenc.... invert the eigenvalues 38759599516SKenneth E. Jansenc 38859599516SKenneth E. Jansen 38959599516SKenneth E. Jansen 39059599516SKenneth E. Jansen where (rlam .gt. ((epsM**2) * eigmax)) 39159599516SKenneth E. Jansen rlam = one / sqrt(rlam) 39259599516SKenneth E. Jansen elsewhere 39359599516SKenneth E. Jansen rlam = zero 39459599516SKenneth E. Jansen endwhere 39559599516SKenneth E. Jansen 39659599516SKenneth E. Jansenc 39759599516SKenneth E. Jansenc.... flop count 39859599516SKenneth E. Jansenc 399f4d0b58bSKenneth E. Jansen ! flops = flops + 65*npro 40059599516SKenneth E. Jansen 40159599516SKenneth E. Jansenc.... reduce the diffusion contribution 40259599516SKenneth E. Jansenc 40359599516SKenneth E. Jansen 40459599516SKenneth E. Jansen if (Navier .eq. 1) then 40559599516SKenneth E. Jansenc 40659599516SKenneth E. Jansenc.... calculate sigma 40759599516SKenneth E. Jansenc 40859599516SKenneth E. Jansen 40959599516SKenneth E. Jansen do i = 1, nflow ! diff. corr for every mode of Tau 41059599516SKenneth E. Jansen 41159599516SKenneth E. Jansen c(:) = pt33 * ( 41259599516SKenneth E. Jansen & Q(:,2,i) * ( compK(:, 1) * Q(:,2,i) + compK(:, 2) * Q(:,3,i) 41359599516SKenneth E. Jansen & + compK(:, 4) * Q(:,4,i) + compK(:, 7) * Q(:,5,i) ) 41459599516SKenneth E. Jansen & + Q(:,3,i) * ( compK(:, 2) * Q(:,2,i) + compK(:, 3) * Q(:,3,i) 41559599516SKenneth E. Jansen & + compK(:, 5) * Q(:,4,i) + compK(:, 8) * Q(:,5,i) ) 41659599516SKenneth E. Jansen & + Q(:,4,i) * ( compK(:, 4) * Q(:,2,i) + compK(:, 5) * Q(:,3,i) 41759599516SKenneth E. Jansen & + compK(:, 6) * Q(:,4,i) + compK(:, 9) * Q(:,5,i) ) 41859599516SKenneth E. Jansen & + Q(:,5,i) * ( compK(:, 7) * Q(:,2,i) + compK(:, 8) * Q(:,3,i) 41959599516SKenneth E. Jansen & + compK(:, 9) * Q(:,4,i) + compK(:,10) * Q(:,5,i) ) 42059599516SKenneth E. Jansen & ) 42159599516SKenneth E. Jansen 42259599516SKenneth E. Jansenc... get Peclet Number 42359599516SKenneth E. Jansen 42459599516SKenneth E. Jansen 42559599516SKenneth E. Jansen Pe(:) = one / (c(:)*rlam(:,i)) 42659599516SKenneth E. Jansen 42759599516SKenneth E. Jansen 42859599516SKenneth E. Jansenc 42959599516SKenneth E. Jansenc... branch out into different polynomial orders 43059599516SKenneth E. Jansenc 43159599516SKenneth E. Jansen 43259599516SKenneth E. Jansen 43359599516SKenneth E. Jansen if (ipord == 1) then ! linears - l = l^a*(coth(Pe)-1/Pe) 43459599516SKenneth E. Jansen ! approx. l = l^a*min(1/3*Pe,1) 43559599516SKenneth E. Jansen rlam(:,i) = rlam(:,i)*min(pt33*Pe(:),one) 43659599516SKenneth E. Jansen 43759599516SKenneth E. Jansen endif 43859599516SKenneth E. Jansen 43959599516SKenneth E. Jansen if (ipord == 2) then ! quads - Codina, CMAME' 92 44059599516SKenneth E. Jansen ! approx. l = l^a*min(1/6*Pe,1/2) 44159599516SKenneth E. Jansen rlam(:,i) = rlam(:,i)*min(pt33*pt5*Pe(:),pt5) 44259599516SKenneth E. Jansen 44359599516SKenneth E. Jansen endif 44459599516SKenneth E. Jansen 44559599516SKenneth E. Jansen if (ipord == 3) then ! cubics - Recent Work 44659599516SKenneth E. Jansen ! l = l^a*1/Pe*b 44759599516SKenneth E. Jansen ! b is a real root of the 44859599516SKenneth E. Jansen ! following polynomial: 44959599516SKenneth E. Jansen ! b^3+(-Pe*coth(Pe)b^2+(6/15*Pe^2-Pe*coth(Pe)+1)b+ 45059599516SKenneth E. Jansen ! +(-1/15*Pe^3*coth(Pe)+6/15*Pe^2-Pe*coth(Pe)+1) = 0 45159599516SKenneth E. Jansen ! proceed setting up newton iteration w/ initial 45259599516SKenneth E. Jansen ! guess coming from the quad estimate. 45359599516SKenneth E. Jansen 45459599516SKenneth E. Jansen Ak(:)=1.0 ! get parameters for iteration 45559599516SKenneth E. Jansen 45659599516SKenneth E. Jansen where(Pe.lt.5.0) ! approx. to hyp. cothangent 45759599516SKenneth E. Jansen alphap = exp(Pe) 45859599516SKenneth E. Jansen betaT = exp(-Pe) 45959599516SKenneth E. Jansen c = (alphap+betaT)/(alphap-betaT) 46059599516SKenneth E. Jansen elsewhere 46159599516SKenneth E. Jansen c = one 46259599516SKenneth E. Jansen endwhere 46359599516SKenneth E. Jansen 46459599516SKenneth E. Jansen B= -Pe*c + Ak 46559599516SKenneth E. Jansen D= 0.4 * (Pe**2) + B 46659599516SKenneth E. Jansen E=-0.066666667 * (Pe**3) * c +D 46759599516SKenneth E. Jansen 46859599516SKenneth E. Jansen ! initial guess, use betaT 46959599516SKenneth E. Jansen betaT(:) = Pe(:)*min(pt33*pt5*Pe(:),pt5) 47059599516SKenneth E. Jansen 47159599516SKenneth E. Jansen ! iteration - 3 iterations sufficient 47259599516SKenneth E. Jansen do j = 1, 3 47359599516SKenneth E. Jansen 47459599516SKenneth E. Jansen betaT=betaT-(Ak*betaT**3+B*betaT**2+D*betaT+E)/(3*Ak 47559599516SKenneth E. Jansen & *betaT**2+2*B*betaT+D) 47659599516SKenneth E. Jansen enddo 47759599516SKenneth E. Jansen 47859599516SKenneth E. Jansen rlam(:,i) = rlam(:,i)*(1/Pe(:))*betaT(:) 47959599516SKenneth E. Jansen 48059599516SKenneth E. Jansen endif ! done w/ different polynomial orders 48159599516SKenneth E. Jansen 48259599516SKenneth E. Jansen enddo ! done with loop over dof's 48359599516SKenneth E. Jansen 48459599516SKenneth E. Jansen endif ! done with diffusive correction 48559599516SKenneth E. Jansen 48659599516SKenneth E. Jansen 48759599516SKenneth E. Jansenc 48859599516SKenneth E. Jansenc.... form Tau (symmetric - entropy variables - then convert) 48959599516SKenneth E. Jansenc 49059599516SKenneth E. Jansen STau(:, 1) = rlam(:,1) * Q(:,1,1) * Q(:,1,1) + 49159599516SKenneth E. Jansen & rlam(:,2) * Q(:,1,2) * Q(:,1,2) + 49259599516SKenneth E. Jansen & rlam(:,3) * Q(:,1,3) * Q(:,1,3) + 49359599516SKenneth E. Jansen & rlam(:,4) * Q(:,1,4) * Q(:,1,4) + 49459599516SKenneth E. Jansen & rlam(:,5) * Q(:,1,5) * Q(:,1,5) 49559599516SKenneth E. Jansenc 49659599516SKenneth E. Jansen STau(:, 2) = rlam(:,1) * Q(:,1,1) * Q(:,2,1) + 49759599516SKenneth E. Jansen & rlam(:,2) * Q(:,1,2) * Q(:,2,2) + 49859599516SKenneth E. Jansen & rlam(:,3) * Q(:,1,3) * Q(:,2,3) + 49959599516SKenneth E. Jansen & rlam(:,4) * Q(:,1,4) * Q(:,2,4) + 50059599516SKenneth E. Jansen & rlam(:,5) * Q(:,1,5) * Q(:,2,5) 50159599516SKenneth E. Jansenc 50259599516SKenneth E. Jansen STau(:, 3) = rlam(:,1) * Q(:,2,1) * Q(:,2,1) + 50359599516SKenneth E. Jansen & rlam(:,2) * Q(:,2,2) * Q(:,2,2) + 50459599516SKenneth E. Jansen & rlam(:,3) * Q(:,2,3) * Q(:,2,3) + 50559599516SKenneth E. Jansen & rlam(:,4) * Q(:,2,4) * Q(:,2,4) + 50659599516SKenneth E. Jansen & rlam(:,5) * Q(:,2,5) * Q(:,2,5) 50759599516SKenneth E. Jansenc 50859599516SKenneth E. Jansen STau(:, 4) = rlam(:,1) * Q(:,1,1) * Q(:,3,1) + 50959599516SKenneth E. Jansen & rlam(:,2) * Q(:,1,2) * Q(:,3,2) + 51059599516SKenneth E. Jansen & rlam(:,3) * Q(:,1,3) * Q(:,3,3) + 51159599516SKenneth E. Jansen & rlam(:,4) * Q(:,1,4) * Q(:,3,4) + 51259599516SKenneth E. Jansen & rlam(:,5) * Q(:,1,5) * Q(:,3,5) 51359599516SKenneth E. Jansenc 51459599516SKenneth E. Jansen STau(:, 5) = rlam(:,1) * Q(:,2,1) * Q(:,3,1) + 51559599516SKenneth E. Jansen & rlam(:,2) * Q(:,2,2) * Q(:,3,2) + 51659599516SKenneth E. Jansen & rlam(:,3) * Q(:,2,3) * Q(:,3,3) + 51759599516SKenneth E. Jansen & rlam(:,4) * Q(:,2,4) * Q(:,3,4) + 51859599516SKenneth E. Jansen & rlam(:,5) * Q(:,2,5) * Q(:,3,5) 51959599516SKenneth E. Jansenc 52059599516SKenneth E. Jansen STau(:, 6) = rlam(:,1) * Q(:,3,1) * Q(:,3,1) + 52159599516SKenneth E. Jansen & rlam(:,2) * Q(:,3,2) * Q(:,3,2) + 52259599516SKenneth E. Jansen & rlam(:,3) * Q(:,3,3) * Q(:,3,3) + 52359599516SKenneth E. Jansen & rlam(:,4) * Q(:,3,4) * Q(:,3,4) + 52459599516SKenneth E. Jansen & rlam(:,5) * Q(:,3,5) * Q(:,3,5) 52559599516SKenneth E. Jansenc 52659599516SKenneth E. Jansen STau(:, 7) = rlam(:,1) * Q(:,1,1) * Q(:,4,1) + 52759599516SKenneth E. Jansen & rlam(:,2) * Q(:,1,2) * Q(:,4,2) + 52859599516SKenneth E. Jansen & rlam(:,3) * Q(:,1,3) * Q(:,4,3) + 52959599516SKenneth E. Jansen & rlam(:,4) * Q(:,1,4) * Q(:,4,4) + 53059599516SKenneth E. Jansen & rlam(:,5) * Q(:,1,5) * Q(:,4,5) 53159599516SKenneth E. Jansenc 53259599516SKenneth E. Jansen STau(:, 8) = rlam(:,1) * Q(:,2,1) * Q(:,4,1) + 53359599516SKenneth E. Jansen & rlam(:,2) * Q(:,2,2) * Q(:,4,2) + 53459599516SKenneth E. Jansen & rlam(:,3) * Q(:,2,3) * Q(:,4,3) + 53559599516SKenneth E. Jansen & rlam(:,4) * Q(:,2,4) * Q(:,4,4) + 53659599516SKenneth E. Jansen & rlam(:,5) * Q(:,2,5) * Q(:,4,5) 53759599516SKenneth E. Jansenc 53859599516SKenneth E. Jansen STau(:, 9) = rlam(:,1) * Q(:,3,1) * Q(:,4,1) + 53959599516SKenneth E. Jansen & rlam(:,2) * Q(:,3,2) * Q(:,4,2) + 54059599516SKenneth E. Jansen & rlam(:,3) * Q(:,3,3) * Q(:,4,3) + 54159599516SKenneth E. Jansen & rlam(:,4) * Q(:,3,4) * Q(:,4,4) + 54259599516SKenneth E. Jansen & rlam(:,5) * Q(:,3,5) * Q(:,4,5) 54359599516SKenneth E. Jansenc 54459599516SKenneth E. Jansen STau(:,10) = rlam(:,1) * Q(:,4,1) * Q(:,4,1) + 54559599516SKenneth E. Jansen & rlam(:,2) * Q(:,4,2) * Q(:,4,2) + 54659599516SKenneth E. Jansen & rlam(:,3) * Q(:,4,3) * Q(:,4,3) + 54759599516SKenneth E. Jansen & rlam(:,4) * Q(:,4,4) * Q(:,4,4) + 54859599516SKenneth E. Jansen & rlam(:,5) * Q(:,4,5) * Q(:,4,5) 54959599516SKenneth E. Jansenc 55059599516SKenneth E. Jansen STau(:,11) = rlam(:,1) * Q(:,1,1) * Q(:,5,1) + 55159599516SKenneth E. Jansen & rlam(:,2) * Q(:,1,2) * Q(:,5,2) + 55259599516SKenneth E. Jansen & rlam(:,3) * Q(:,1,3) * Q(:,5,3) + 55359599516SKenneth E. Jansen & rlam(:,4) * Q(:,1,4) * Q(:,5,4) + 55459599516SKenneth E. Jansen & rlam(:,5) * Q(:,1,5) * Q(:,5,5) 55559599516SKenneth E. Jansenc 55659599516SKenneth E. Jansen STau(:,12) = rlam(:,1) * Q(:,2,1) * Q(:,5,1) + 55759599516SKenneth E. Jansen & rlam(:,2) * Q(:,2,2) * Q(:,5,2) + 55859599516SKenneth E. Jansen & rlam(:,3) * Q(:,2,3) * Q(:,5,3) + 55959599516SKenneth E. Jansen & rlam(:,4) * Q(:,2,4) * Q(:,5,4) + 56059599516SKenneth E. Jansen & rlam(:,5) * Q(:,2,5) * Q(:,5,5) 56159599516SKenneth E. Jansenc 56259599516SKenneth E. Jansen STau(:,13) = rlam(:,1) * Q(:,3,1) * Q(:,5,1) + 56359599516SKenneth E. Jansen & rlam(:,2) * Q(:,3,2) * Q(:,5,2) + 56459599516SKenneth E. Jansen & rlam(:,3) * Q(:,3,3) * Q(:,5,3) + 56559599516SKenneth E. Jansen & rlam(:,4) * Q(:,3,4) * Q(:,5,4) + 56659599516SKenneth E. Jansen & rlam(:,5) * Q(:,3,5) * Q(:,5,5) 56759599516SKenneth E. Jansenc 56859599516SKenneth E. Jansen STau(:,14) = rlam(:,1) * Q(:,4,1) * Q(:,5,1) + 56959599516SKenneth E. Jansen & rlam(:,2) * Q(:,4,2) * Q(:,5,2) + 57059599516SKenneth E. Jansen & rlam(:,3) * Q(:,4,3) * Q(:,5,3) + 57159599516SKenneth E. Jansen & rlam(:,4) * Q(:,4,4) * Q(:,5,4) + 57259599516SKenneth E. Jansen & rlam(:,5) * Q(:,4,5) * Q(:,5,5) 57359599516SKenneth E. Jansenc 57459599516SKenneth E. Jansen STau(:,15) = rlam(:,1) * Q(:,5,1) * Q(:,5,1) + 57559599516SKenneth E. Jansen & rlam(:,2) * Q(:,5,2) * Q(:,5,2) + 57659599516SKenneth E. Jansen & rlam(:,3) * Q(:,5,3) * Q(:,5,3) + 57759599516SKenneth E. Jansen & rlam(:,4) * Q(:,5,4) * Q(:,5,4) + 57859599516SKenneth E. Jansen & rlam(:,5) * Q(:,5,5) * Q(:,5,5) 57959599516SKenneth E. Jansen 58059599516SKenneth E. Jansen 58159599516SKenneth E. Jansenc 58259599516SKenneth E. Jansenc... Form Primitive Variable Tau as [dY/dV]*tilde{Tau}, 58359599516SKenneth E. Jansenc... see G.Hauke's thesis appendix for [dY/dV] matrix 58459599516SKenneth E. Jansenc 58559599516SKenneth E. Jansen betaT = cp*T + pt5*(u1**2+u2**2+u3**2) !reuse betaT 58659599516SKenneth E. Jansen 58759599516SKenneth E. Jansen Tau(:,1,1) = rho*T*(STau(:,1)+u1*STau(:,2)+ 58859599516SKenneth E. Jansen & u2*STau(:,4)+u3*STau(:,7)+betaT*STau(:,11)) 58959599516SKenneth E. Jansen Tau(:,1,2) = rho*T*(STau(:,2)+u1*STau(:,3)+ 59059599516SKenneth E. Jansen & u2*STau(:,5)+u3*STau(:,8)+betaT*STau(:,12)) 59159599516SKenneth E. Jansen Tau(:,1,3) = rho*T*(STau(:,4)+u1*STau(:,5)+ 59259599516SKenneth E. Jansen & u2*STau(:,6)+u3*STau(:,9)+betaT*STau(:,13)) 59359599516SKenneth E. Jansen Tau(:,1,4) = rho*T*(STau(:,7)+u1*STau(:,8)+ 59459599516SKenneth E. Jansen & u2*STau(:,9)+u3*STau(:,10)+betaT*STau(:,14)) 59559599516SKenneth E. Jansen Tau(:,1,5) = rho*T*(STau(:,11)+u1*STau(:,12)+ 59659599516SKenneth E. Jansen & u2*STau(:,13)+u3*STau(:,14)+betaT*STau(:,15)) 59759599516SKenneth E. Jansen 59859599516SKenneth E. Jansen 59959599516SKenneth E. Jansen Tau(:,2,1) = T(:)*(STau(:,2) + u1(:)*STau(:,11)) 60059599516SKenneth E. Jansen Tau(:,2,2) = T(:)*(STau(:,3) + u1(:)*STau(:,12)) 60159599516SKenneth E. Jansen Tau(:,2,3) = T(:)*(STau(:,5) + u1(:)*STau(:,13)) 60259599516SKenneth E. Jansen Tau(:,2,4) = T(:)*(STau(:,8) + u1(:)*STau(:,14)) 60359599516SKenneth E. Jansen Tau(:,2,5) = T(:)*(STau(:,12) + u1(:)*STau(:,15)) 60459599516SKenneth E. Jansen 60559599516SKenneth E. Jansen Tau(:,3,1) = T(:)*(STau(:,4) + u2(:)*STau(:,11)) 60659599516SKenneth E. Jansen Tau(:,3,2) = T(:)*(STau(:,5) + u2(:)*STau(:,12)) 60759599516SKenneth E. Jansen Tau(:,3,3) = T(:)*(STau(:,6) + u2(:)*STau(:,13)) 60859599516SKenneth E. Jansen Tau(:,3,4) = T(:)*(STau(:,9) + u2(:)*STau(:,14)) 60959599516SKenneth E. Jansen Tau(:,3,5) = T(:)*(STau(:,13) + u2(:)*STau(:,15)) 61059599516SKenneth E. Jansen 61159599516SKenneth E. Jansen Tau(:,4,1) = T(:)*(STau(:,7) + u3(:)*STau(:,11)) 61259599516SKenneth E. Jansen Tau(:,4,2) = T(:)*(STau(:,8) + u3(:)*STau(:,12)) 61359599516SKenneth E. Jansen Tau(:,4,3) = T(:)*(STau(:,9) + u3(:)*STau(:,13)) 61459599516SKenneth E. Jansen Tau(:,4,4) = T(:)*(STau(:,10) + u3(:)*STau(:,14)) 61559599516SKenneth E. Jansen Tau(:,4,5) = T(:)*(STau(:,14) + u3(:)*STau(:,15)) 61659599516SKenneth E. Jansen 61759599516SKenneth E. Jansen betaT = T**2 61859599516SKenneth E. Jansen 61959599516SKenneth E. Jansen Tau(:,5,1) = betaT(:)*STau(:,11) 62059599516SKenneth E. Jansen Tau(:,5,2) = betaT(:)*STau(:,12) 62159599516SKenneth E. Jansen Tau(:,5,3) = betaT(:)*STau(:,13) 62259599516SKenneth E. Jansen Tau(:,5,4) = betaT(:)*STau(:,14) 62359599516SKenneth E. Jansen Tau(:,5,5) = betaT(:)*STau(:,15) 62459599516SKenneth E. Jansen 62559599516SKenneth E. Jansen 62659599516SKenneth E. Jansenc 62759599516SKenneth E. Jansenc... done with conversion to pressure primitive variables 62859599516SKenneth E. Jansenc... now need to interface with the rest of the computations 62959599516SKenneth E. Jansenc 63059599516SKenneth E. Jansen 63159599516SKenneth E. Jansenc... finally multiply this tau matrix times the 63259599516SKenneth E. Jansenc two residual vectors 63359599516SKenneth E. Jansenc 63459599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi) 63559599516SKenneth E. Jansenc ... storing rLyi for the DC term 63659599516SKenneth E. Jansen 63759599516SKenneth E. Jansen 63859599516SKenneth E. Jansen if(iDC .ne. 0) rLyitemp=rLyi 63959599516SKenneth E. Jansen 64059599516SKenneth E. Jansen if(ires.eq.3 .or. ires .eq. 1) then 64159599516SKenneth E. Jansen eigmax = rLyi !reuse 64259599516SKenneth E. Jansen rLyi = zero 64359599516SKenneth E. Jansen do i = 1, nflow 64459599516SKenneth E. Jansen do j = 1, nflow 64559599516SKenneth E. Jansen rLyi(:,i) = rLyi(:,i) + Tau(:,i,j) * eigmax(:,j) 64659599516SKenneth E. Jansen enddo 64759599516SKenneth E. Jansen enddo 64859599516SKenneth E. Jansen endif 64959599516SKenneth E. Jansen 65059599516SKenneth E. Jansen 65159599516SKenneth E. Jansen if(iDC .ne. 0) then 65259599516SKenneth E. Jansenc.....calculation of rTLS & raLS for DC term 65359599516SKenneth E. Jansenc 65459599516SKenneth E. Jansenc.....calculation of (Ly - S).tau^tilda*(Ly - S) 65559599516SKenneth E. Jansenc 65659599516SKenneth E. Jansen rTLS = rLYItemp(:,1) * (rLyi(:,1)*dVdY(:,1) 65759599516SKenneth E. Jansen & + dVdY(:,2)*rLyi(:,2) + dVdY(:,4)*rLyi(:,3) 65859599516SKenneth E. Jansen & + rLyi(:,4)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5)) 65959599516SKenneth E. Jansen & + rLyitemp(:,2) * (rLyi(:,2)*dVdY(:,3) 66059599516SKenneth E. Jansen & + rLyi(:,3)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4) 66159599516SKenneth E. Jansen & + rLyi(:,5)*dVdY(:,12)) 66259599516SKenneth E. Jansen & + rLyitemp(:,3) * (rLyi(:,3)*dVdY(:,6) 66359599516SKenneth E. Jansen & + dVdY(:,9)*rLyi(:,4) + dVdY(:,13)*rLyi(:,5)) 66459599516SKenneth E. Jansen & + rLyitemp(:,4) * (rLyi(:,4)*dVdY(:,10) 66559599516SKenneth E. Jansen & + dVdY(:,14)*rLyi(:,5)) 66659599516SKenneth E. Jansen & + rLyitemp(:,5) * (dVdY(:,15)*rLyi(:,5)) 66759599516SKenneth E. Jansen 66859599516SKenneth E. Jansenc 66959599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S) 67059599516SKenneth E. Jansenc 67159599516SKenneth E. Jansen raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15) 67259599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14) 67359599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6) 67459599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10) 67559599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11) 67659599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7) 67759599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13) 67859599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12) 67959599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8) 68059599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9) 68159599516SKenneth E. Jansen & + rLyitemp(:,1)**2*A0inv(:,1) 68259599516SKenneth E. Jansen & + rLyitemp(:,2)**2*A0inv(:,2) 68359599516SKenneth E. Jansen & + rLyitemp(:,3)**2*A0inv(:,3) 68459599516SKenneth E. Jansen & + rLyitemp(:,4)**2*A0inv(:,4) 68559599516SKenneth E. Jansen & + rLyitemp(:,5)**2*A0inv(:,5) 68659599516SKenneth E. Jansenc 68759599516SKenneth E. Jansenc.....****************calculation of giju for DC term*************** 68859599516SKenneth E. Jansenc 68959599516SKenneth E. Jansenc.... for the notation of different numbering 69059599516SKenneth E. Jansenc 69159599516SKenneth E. Jansen call e3gijd( dxidx, gijd ) 69259599516SKenneth E. Jansen 69359599516SKenneth E. Jansen gijdu(:,1)=gijd(:,1) 69459599516SKenneth E. Jansen gijdu(:,2)=gijd(:,3) 69559599516SKenneth E. Jansen gijdu(:,3)=gijd(:,6) 69659599516SKenneth E. Jansen gijdu(:,4)=gijd(:,2) 69759599516SKenneth E. Jansen gijdu(:,5)=gijd(:,4) 69859599516SKenneth E. Jansen gijdu(:,6)=gijd(:,5) 69959599516SKenneth E. Jansenc 70059599516SKenneth E. Jansenc 70159599516SKenneth E. Jansen detgijI = one/( 70259599516SKenneth E. Jansen & gijdu(:,1) * gijdu(:,2) * gijdu(:,3) 70359599516SKenneth E. Jansen & - gijdu(:,1) * gijdu(:,6) * gijdu(:,6) 70459599516SKenneth E. Jansen & - gijdu(:,4) * gijdu(:,4) * gijdu(:,3) 70559599516SKenneth E. Jansen & + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two 70659599516SKenneth E. Jansen & - gijdu(:,5) * gijdu(:,5) * gijdu(:,2) 70759599516SKenneth E. Jansen & ) 70859599516SKenneth E. Jansen giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3) 70959599516SKenneth E. Jansen & - gijdu(:,6)**2) 71059599516SKenneth E. Jansen giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3) 71159599516SKenneth E. Jansen & - gijdu(:,5)**2) 71259599516SKenneth E. Jansen giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2) 71359599516SKenneth E. Jansen & - gijdu(:,4)**2) 71459599516SKenneth E. Jansen giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6) 71559599516SKenneth E. Jansen & - gijdu(:,4)*gijdu(:,3) ) 71659599516SKenneth E. Jansen giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6) 71759599516SKenneth E. Jansen & - gijdu(:,5)*gijdu(:,2) ) 71859599516SKenneth E. Jansen giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5) 71959599516SKenneth E. Jansen & - gijdu(:,1)*gijdu(:,6) ) 72059599516SKenneth E. Jansenc 72159599516SKenneth E. Jansen endif ! end of iDC.ne.0 72259599516SKenneth E. Jansenc 72359599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi) 72459599516SKenneth E. Jansenc 72559599516SKenneth E. Jansen if(ires.ne.1 ) then 72659599516SKenneth E. Jansen eigmax = rLymi 72759599516SKenneth E. Jansen rLymi = zero 72859599516SKenneth E. Jansen do i = 1, nflow 72959599516SKenneth E. Jansen do j = 1, nflow 73059599516SKenneth E. Jansen rLymi(:,i) = rLymi(:,i) + Tau(:,i,j) * eigmax(:,j) 73159599516SKenneth E. Jansen enddo 73259599516SKenneth E. Jansen enddo 73359599516SKenneth E. Jansen endif 73459599516SKenneth E. Jansenc 735f4d0b58bSKenneth E. Jansenc INCORRECT NOW ! flops = flops + 255*npro 73659599516SKenneth E. Jansenc 73759599516SKenneth E. Jansenc 73859599516SKenneth E. Jansenc.... return 73959599516SKenneth E. Jansenc 74059599516SKenneth E. Jansen return 74159599516SKenneth E. Jansen end 74259599516SKenneth E. Jansenc 74359599516SKenneth E. Jansen 74459599516SKenneth E. Jansen 74559599516SKenneth E. Jansen subroutine e3tau_nd_modal (rho, cp, rmu, T, 74659599516SKenneth E. Jansen & u1, u2, u3, 74759599516SKenneth E. Jansen & a1, a2, a3, 74859599516SKenneth E. Jansen & con, dxidx, rLyi, 74959599516SKenneth E. Jansen & rLymi, Tau, rk, 75059599516SKenneth E. Jansen & giju, rTLS, raLS, 75159599516SKenneth E. Jansen & cv, compK, pres, 75259599516SKenneth E. Jansen & A0inv, dVdY) 75359599516SKenneth E. Jansenc 75459599516SKenneth E. Jansenc---------------------------------------------------------------------- 75559599516SKenneth E. Jansenc 75659599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator. 75759599516SKenneth E. Jansenc 75859599516SKenneth E. Jansenc We receive the regular residual L operator and a 75959599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for 76059599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past 76159599516SKenneth E. Jansenc ENSA codes 76259599516SKenneth E. Jansenc 76359599516SKenneth E. Jansenc input: 76459599516SKenneth E. Jansenc rho (npro) : density 76559599516SKenneth E. Jansenc T (npro) : temperature 76659599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 76759599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 76859599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 76959599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 77059599516SKenneth E. Jansenc dxidx (npro,nsd,nsd) : inverse of deformation gradient 77159599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 77259599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 77359599516SKenneth E. Jansenc 77459599516SKenneth E. Jansenc output: 77559599516SKenneth E. Jansenc rLyi (npro,nflow) : least-squares residual vector 77659599516SKenneth E. Jansenc rLymi (npro,nflow) : modified least-squares residual vector 77759599516SKenneth E. Jansenc Mtau (npro,5,5) : Matrix of Stabilized Parameters 77859599516SKenneth E. Jansenc 77959599516SKenneth E. Jansenc 78059599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2tau.f) 78159599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 78259599516SKenneth E. Jansenc---------------------------------------------------------------------- 78359599516SKenneth E. Jansenc 78459599516SKenneth E. Jansen include "common.h" 78559599516SKenneth E. Jansenc 78659599516SKenneth E. Jansen dimension rho(npro), con(npro), 78759599516SKenneth E. Jansen & cp(npro), u1(npro), 78859599516SKenneth E. Jansen & u2(npro), u3(npro), 78959599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), rk(npro), 79059599516SKenneth E. Jansen & rLyi(npro,nflow,ipord), 79159599516SKenneth E. Jansen & rLymi(npro,nflow,ipord), dVdY(npro,15), 79259599516SKenneth E. Jansen & rTLS(npro), raLS(npro), 79359599516SKenneth E. Jansen & rLyitemp(npro,nflow), detgijI(npro) 79459599516SKenneth E. Jansenc 79559599516SKenneth E. Jansen dimension rmu(npro), cv(npro), 79659599516SKenneth E. Jansen & gijd(npro,6), 79759599516SKenneth E. Jansen & fact(npro), giju(npro,6), 79859599516SKenneth E. Jansen & A0inv(npro,15),gijdu(npro,6), compK(npro,10), 79959599516SKenneth E. Jansen & a1(npro), a2(npro), a3(npro), 80059599516SKenneth E. Jansen & T(npro), pres(npro), alphap(npro), 80159599516SKenneth E. Jansen & betaT(npro), gamb(npro), c(npro), 80259599516SKenneth E. Jansen & u(npro), eb1(npro), Q(npro,5,5), 80359599516SKenneth E. Jansen & rlam(npro,5), eigmax(npro,5), Pe(npro), 80459599516SKenneth E. Jansen & STau(npro,15, ipord), Tau(npro,nflow,nflow,ipord), 80559599516SKenneth E. Jansen & rlamtmp(npro,5,ipord) 80659599516SKenneth E. Jansen 80759599516SKenneth E. Jansen 80859599516SKenneth E. Jansenc... build some necessary quantities at integration point: 80959599516SKenneth E. Jansen 81059599516SKenneth E. Jansenc alfap = one / T 81159599516SKenneth E. Jansenc betaT = one / pres 81259599516SKenneth E. Jansen gamb = gamma1 81359599516SKenneth E. Jansen c = sqrt( (gamma * Rgas) * T ) 81459599516SKenneth E. Jansen u = sqrt(u1**2+u2**2+u3**2) 81559599516SKenneth E. Jansen eb1 = cp*T - pt5*(u1**2+u2**2+u3**2) 81659599516SKenneth E. Jansen 81759599516SKenneth E. Jansenc... get eigenvectors for diagonalizing Tau_adv (e.v) before final rotations 81859599516SKenneth E. Jansenc... Note: the ordering of eigenvectors corresponds to the following 81959599516SKenneth E. Jansenc... ordering of the eigenvalues in the 1-st Euler Jacobian rotated to 82059599516SKenneth E. Jansenc... the streamline coordinates 82159599516SKenneth E. Jansen 82259599516SKenneth E. Jansenc |u+c | 82359599516SKenneth E. Jansenc | u | 82459599516SKenneth E. Jansenc | u | 82559599516SKenneth E. Jansenc | u | ! for origins of this see Beam, Warming, Hyett 82659599516SKenneth E. Jansenc | u-c| ! Mathematics of Computation vol. 29 No. 132 p. 1037 82759599516SKenneth E. Jansen 82859599516SKenneth E. Jansenc... different ordering assumed in Shakib/Johan entropy vars. code 82959599516SKenneth E. Jansen 83059599516SKenneth E. Jansen 83159599516SKenneth E. Jansen 83259599516SKenneth E. Jansen call e3eig1 (rho, T, cp, 83359599516SKenneth E. Jansen & gamb, c, u1, 83459599516SKenneth E. Jansen & u2, u3, a1, 83559599516SKenneth E. Jansen & a2, a3, eb1, 83659599516SKenneth E. Jansen & dxidx, u, Q) 83759599516SKenneth E. Jansen 83859599516SKenneth E. Jansenc... Perform a Jacobi rotation on the Lambda matrix as well as adjust 83959599516SKenneth E. Jansenc... the eigenvectors. Tau still remains in entropy variables. 84059599516SKenneth E. Jansen 84159599516SKenneth E. Jansen 84259599516SKenneth E. Jansen 84359599516SKenneth E. Jansen call e3eig2 (u, c, a1, 84459599516SKenneth E. Jansen & a2, a3, rlam, 84559599516SKenneth E. Jansen & Q, eigmax) 84659599516SKenneth E. Jansen 84759599516SKenneth E. Jansenc 84859599516SKenneth E. Jansenc.... invert the eigenvalues 84959599516SKenneth E. Jansenc 85059599516SKenneth E. Jansen 85159599516SKenneth E. Jansen 85259599516SKenneth E. Jansen where (rlam .gt. ((epsM**2) * eigmax)) 85359599516SKenneth E. Jansen rlam = one / sqrt(rlam) 85459599516SKenneth E. Jansen elsewhere 85559599516SKenneth E. Jansen rlam = zero 85659599516SKenneth E. Jansen endwhere 85759599516SKenneth E. Jansen 85859599516SKenneth E. Jansen do i = 1, ipord 85959599516SKenneth E. Jansen rlamtmp(:,:,i) = rlam(:,:) 86059599516SKenneth E. Jansen enddo 86159599516SKenneth E. Jansen 86259599516SKenneth E. Jansenc 86359599516SKenneth E. Jansenc.... flop count 86459599516SKenneth E. Jansenc 865f4d0b58bSKenneth E. Jansen ! flops = flops + 65*npro 86659599516SKenneth E. Jansen 86759599516SKenneth E. Jansenc.... reduce the diffusion contribution 86859599516SKenneth E. Jansenc 86959599516SKenneth E. Jansen 87059599516SKenneth E. Jansen if (Navier .eq. 1) then 87159599516SKenneth E. Jansenc 87259599516SKenneth E. Jansenc.... calculate sigma 87359599516SKenneth E. Jansenc 87459599516SKenneth E. Jansen 87559599516SKenneth E. Jansen do i = 1, nflow ! diff. corr for every mode of Tau 87659599516SKenneth E. Jansen 87759599516SKenneth E. Jansen c(:) = pt33 * ( 87859599516SKenneth E. Jansen & Q(:,2,i) * ( compK(:, 1) * Q(:,2,i) + compK(:, 2) * Q(:,3,i) 87959599516SKenneth E. Jansen & + compK(:, 4) * Q(:,4,i) + compK(:, 7) * Q(:,5,i) ) 88059599516SKenneth E. Jansen & + Q(:,3,i) * ( compK(:, 2) * Q(:,2,i) + compK(:, 3) * Q(:,3,i) 88159599516SKenneth E. Jansen & + compK(:, 5) * Q(:,4,i) + compK(:, 8) * Q(:,5,i) ) 88259599516SKenneth E. Jansen & + Q(:,4,i) * ( compK(:, 4) * Q(:,2,i) + compK(:, 5) * Q(:,3,i) 88359599516SKenneth E. Jansen & + compK(:, 6) * Q(:,4,i) + compK(:, 9) * Q(:,5,i) ) 88459599516SKenneth E. Jansen & + Q(:,5,i) * ( compK(:, 7) * Q(:,2,i) + compK(:, 8) * Q(:,3,i) 88559599516SKenneth E. Jansen & + compK(:, 9) * Q(:,4,i) + compK(:,10) * Q(:,5,i) ) 88659599516SKenneth E. Jansen & ) 88759599516SKenneth E. Jansen 88859599516SKenneth E. Jansenc... get Peclet Number 88959599516SKenneth E. Jansen 89059599516SKenneth E. Jansen 89159599516SKenneth E. Jansen Pe(:) = one / (c(:)*rlam(:,i)) 89259599516SKenneth E. Jansen 89359599516SKenneth E. Jansen 89459599516SKenneth E. Jansenc 89559599516SKenneth E. Jansenc... branch out into different polynomial orders 89659599516SKenneth E. Jansenc 89759599516SKenneth E. Jansen 89859599516SKenneth E. Jansen 89959599516SKenneth E. Jansen if (ipord == 1) then ! linears - l = l^a*(coth(Pe)-1/Pe) 90059599516SKenneth E. Jansen ! approx. l = l^a*min(1/3*Pe,1) 90159599516SKenneth E. Jansen rlamtmp(:,i,1) = rlamtmp(:,i,1)*min(pt33*Pe(:),one) 90259599516SKenneth E. Jansen 90359599516SKenneth E. Jansen endif 90459599516SKenneth E. Jansen 90559599516SKenneth E. Jansen if (ipord == 2) then 90659599516SKenneth E. Jansen 90759599516SKenneth E. Jansen rlamtmp(:,i,1) = rlamtmp(:,i,1)*min((1.0/15.0)*Pe(:),pt33) 90859599516SKenneth E. Jansen rlamtmp(:,i,2) = rlamtmp(:,i,2)*min((1.0/12.0)*Pe(:),pt5) 90959599516SKenneth E. Jansen 91059599516SKenneth E. Jansen endif 91159599516SKenneth E. Jansen 91259599516SKenneth E. Jansen if (ipord == 3) then ! cubics - Recent Work 91359599516SKenneth E. Jansen 91459599516SKenneth E. Jansen do ii = 1, npro 91559599516SKenneth E. Jansen if (Pe(ii).lt.3.0) then 91659599516SKenneth E. Jansen rlamtmp(ii,i,1) = rlamtmp(ii,i,1)* 91759599516SKenneth E. Jansen & 0.00054*Pe(ii)**2 91859599516SKenneth E. Jansen endif 91959599516SKenneth E. Jansen 92059599516SKenneth E. Jansen if ((Pe(ii).ge.3).and.(Pe(ii).lt.17.20)) then 92159599516SKenneth E. Jansen rlamtmp(ii,i,1) = rlamtmp(ii,i,1)*(0.0114*Pe(ii) 92259599516SKenneth E. Jansen & -0.0294) 92359599516SKenneth E. Jansen endif 92459599516SKenneth E. Jansen 92559599516SKenneth E. Jansen if (Pe(ii).ge.17.20) then 92659599516SKenneth E. Jansen rlamtmp(ii,i,1) = rlamtmp(ii,i,1)*(1.0/6.0) 92759599516SKenneth E. Jansen endif 92859599516SKenneth E. Jansen 92959599516SKenneth E. Jansen enddo 93059599516SKenneth E. Jansen 93159599516SKenneth E. Jansen rlamtmp(:,i,2) = rlamtmp(:,i,2)*min((1.0/45.0)*Pe(:) 93259599516SKenneth E. Jansen & ,0.2d0) 93359599516SKenneth E. Jansen rlamtmp(:,i,3) = rlamtmp(:,i,3)*min((1.0/25.0)*Pe(:) 93459599516SKenneth E. Jansen & ,pt33) 93559599516SKenneth E. Jansen 93659599516SKenneth E. Jansen 93759599516SKenneth E. Jansen endif ! done w/ different polynomial orders 93859599516SKenneth E. Jansen 93959599516SKenneth E. Jansen enddo ! done with loop over dof's 94059599516SKenneth E. Jansen 94159599516SKenneth E. Jansen endif ! done with diffusive correction 94259599516SKenneth E. Jansen 94359599516SKenneth E. Jansen 94459599516SKenneth E. Jansenc 94559599516SKenneth E. Jansenc.... form Tau (symmetric - entropy variables - then convert) 94659599516SKenneth E. Jansenc 94759599516SKenneth E. Jansen do i = 1, ipord 94859599516SKenneth E. Jansen 94959599516SKenneth E. Jansen STau(:, 1, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,1,1) + 95059599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,1,2) * Q(:,1,2) + 95159599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,1,3) * Q(:,1,3) + 95259599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,1,4) * Q(:,1,4) + 95359599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,1,5) * Q(:,1,5) 95459599516SKenneth E. Jansenc 95559599516SKenneth E. Jansen STau(:, 2, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,2,1) + 95659599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,1,2) * Q(:,2,2) + 95759599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,1,3) * Q(:,2,3) + 95859599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,1,4) * Q(:,2,4) + 95959599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,1,5) * Q(:,2,5) 96059599516SKenneth E. Jansenc 96159599516SKenneth E. Jansen STau(:, 3, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,2,1) + 96259599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,2,2) * Q(:,2,2) + 96359599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,2,3) * Q(:,2,3) + 96459599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,2,4) * Q(:,2,4) + 96559599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,2,5) * Q(:,2,5) 96659599516SKenneth E. Jansenc 96759599516SKenneth E. Jansen STau(:, 4, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,3,1) + 96859599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,1,2) * Q(:,3,2) + 96959599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,1,3) * Q(:,3,3) + 97059599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,1,4) * Q(:,3,4) + 97159599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,1,5) * Q(:,3,5) 97259599516SKenneth E. Jansenc 97359599516SKenneth E. Jansen STau(:, 5, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,3,1) + 97459599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,2,2) * Q(:,3,2) + 97559599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,2,3) * Q(:,3,3) + 97659599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,2,4) * Q(:,3,4) + 97759599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,2,5) * Q(:,3,5) 97859599516SKenneth E. Jansenc 97959599516SKenneth E. Jansen STau(:, 6, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,3,1) + 98059599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,3,2) * Q(:,3,2) + 98159599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,3,3) * Q(:,3,3) + 98259599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,3,4) * Q(:,3,4) + 98359599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,3,5) * Q(:,3,5) 98459599516SKenneth E. Jansenc 98559599516SKenneth E. Jansen STau(:, 7, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,4,1) + 98659599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,1,2) * Q(:,4,2) + 98759599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,1,3) * Q(:,4,3) + 98859599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,1,4) * Q(:,4,4) + 98959599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,1,5) * Q(:,4,5) 99059599516SKenneth E. Jansenc 99159599516SKenneth E. Jansen STau(:, 8, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,4,1) + 99259599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,2,2) * Q(:,4,2) + 99359599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,2,3) * Q(:,4,3) + 99459599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,2,4) * Q(:,4,4) + 99559599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,2,5) * Q(:,4,5) 99659599516SKenneth E. Jansenc 99759599516SKenneth E. Jansen STau(:, 9, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,4,1) + 99859599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,3,2) * Q(:,4,2) + 99959599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,3,3) * Q(:,4,3) + 100059599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,3,4) * Q(:,4,4) + 100159599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,3,5) * Q(:,4,5) 100259599516SKenneth E. Jansenc 100359599516SKenneth E. Jansen STau(:,10, i) = rlamtmp(:,1,i) * Q(:,4,1) * Q(:,4,1) + 100459599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,4,2) * Q(:,4,2) + 100559599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,4,3) * Q(:,4,3) + 100659599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,4,4) * Q(:,4,4) + 100759599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,4,5) * Q(:,4,5) 100859599516SKenneth E. Jansenc 100959599516SKenneth E. Jansen STau(:,11, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,5,1) + 101059599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,1,2) * Q(:,5,2) + 101159599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,1,3) * Q(:,5,3) + 101259599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,1,4) * Q(:,5,4) + 101359599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,1,5) * Q(:,5,5) 101459599516SKenneth E. Jansenc 101559599516SKenneth E. Jansen STau(:,12, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,5,1) + 101659599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,2,2) * Q(:,5,2) + 101759599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,2,3) * Q(:,5,3) + 101859599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,2,4) * Q(:,5,4) + 101959599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,2,5) * Q(:,5,5) 102059599516SKenneth E. Jansenc 102159599516SKenneth E. Jansen STau(:,13, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,5,1) + 102259599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,3,2) * Q(:,5,2) + 102359599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,3,3) * Q(:,5,3) + 102459599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,3,4) * Q(:,5,4) + 102559599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,3,5) * Q(:,5,5) 102659599516SKenneth E. Jansenc 102759599516SKenneth E. Jansen STau(:,14, i) = rlamtmp(:,1,i) * Q(:,4,1) * Q(:,5,1) + 102859599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,4,2) * Q(:,5,2) + 102959599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,4,3) * Q(:,5,3) + 103059599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,4,4) * Q(:,5,4) + 103159599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,4,5) * Q(:,5,5) 103259599516SKenneth E. Jansenc 103359599516SKenneth E. Jansen STau(:,15, i) = rlamtmp(:,1,i) * Q(:,5,1) * Q(:,5,1) + 103459599516SKenneth E. Jansen & rlamtmp(:,2,i) * Q(:,5,2) * Q(:,5,2) + 103559599516SKenneth E. Jansen & rlamtmp(:,3,i) * Q(:,5,3) * Q(:,5,3) + 103659599516SKenneth E. Jansen & rlamtmp(:,4,i) * Q(:,5,4) * Q(:,5,4) + 103759599516SKenneth E. Jansen & rlamtmp(:,5,i) * Q(:,5,5) * Q(:,5,5) 103859599516SKenneth E. Jansen 103959599516SKenneth E. Jansen enddo 104059599516SKenneth E. Jansen 104159599516SKenneth E. Jansenc 104259599516SKenneth E. Jansenc... Form Primitive Variable Tau as [dY/dV]*tilde{Tau}, 104359599516SKenneth E. Jansenc... see G.Hauke's thesis appendix for [dY/dV] matrix 104459599516SKenneth E. Jansenc 104559599516SKenneth E. Jansen do k = 1, ipord 104659599516SKenneth E. Jansen 104759599516SKenneth E. Jansen betaT = cp*T + pt5*(u1**2+u2**2+u3**2) !reuse betaT 104859599516SKenneth E. Jansen 104959599516SKenneth E. Jansen Tau(:,1,1,k) = rho*T*(STau(:,1,k)+u1*STau(:,2,k)+ 105059599516SKenneth E. Jansen & u2*STau(:,4,k)+u3*STau(:,7,k)+betaT*STau(:,11,k)) 105159599516SKenneth E. Jansen Tau(:,1,2,k) = rho*T*(STau(:,2,k)+u1*STau(:,3,k)+ 105259599516SKenneth E. Jansen & u2*STau(:,5,k)+u3*STau(:,8,k)+betaT*STau(:,12,k)) 105359599516SKenneth E. Jansen Tau(:,1,3,k) = rho*T*(STau(:,4,k)+u1*STau(:,5,k)+ 105459599516SKenneth E. Jansen & u2*STau(:,6,k)+u3*STau(:,9,k)+betaT*STau(:,13,k)) 105559599516SKenneth E. Jansen Tau(:,1,4,k) = rho*T*(STau(:,7,k)+u1*STau(:,8,k)+ 105659599516SKenneth E. Jansen & u2*STau(:,9,k)+u3*STau(:,10,k)+betaT*STau(:,14,k)) 105759599516SKenneth E. Jansen Tau(:,1,5,k) = rho*T*(STau(:,11,k)+u1*STau(:,12,k)+ 105859599516SKenneth E. Jansen & u2*STau(:,13,k)+u3*STau(:,14,k)+betaT*STau(:,15,k)) 105959599516SKenneth E. Jansen 106059599516SKenneth E. Jansen 106159599516SKenneth E. Jansen Tau(:,2,1,k) = T(:)*(STau(:,2,k) + u1(:)*STau(:,11,k)) 106259599516SKenneth E. Jansen Tau(:,2,2,k) = T(:)*(STau(:,3,k) + u1(:)*STau(:,12,k)) 106359599516SKenneth E. Jansen Tau(:,2,3,k) = T(:)*(STau(:,5,k) + u1(:)*STau(:,13,k)) 106459599516SKenneth E. Jansen Tau(:,2,4,k) = T(:)*(STau(:,8,k) + u1(:)*STau(:,14,k)) 106559599516SKenneth E. Jansen Tau(:,2,5,k) = T(:)*(STau(:,12,k) + u1(:)*STau(:,15,k)) 106659599516SKenneth E. Jansen 106759599516SKenneth E. Jansen Tau(:,3,1,k) = T(:)*(STau(:,4,k) + u2(:)*STau(:,11,k)) 106859599516SKenneth E. Jansen Tau(:,3,2,k) = T(:)*(STau(:,5,k) + u2(:)*STau(:,12,k)) 106959599516SKenneth E. Jansen Tau(:,3,3,k) = T(:)*(STau(:,6,k) + u2(:)*STau(:,13,k)) 107059599516SKenneth E. Jansen Tau(:,3,4,k) = T(:)*(STau(:,9,k) + u2(:)*STau(:,14,k)) 107159599516SKenneth E. Jansen Tau(:,3,5,k) = T(:)*(STau(:,13,k) + u2(:)*STau(:,15,k)) 107259599516SKenneth E. Jansen 107359599516SKenneth E. Jansen Tau(:,4,1,k) = T(:)*(STau(:,7,k) + u3(:)*STau(:,11,k)) 107459599516SKenneth E. Jansen Tau(:,4,2,k) = T(:)*(STau(:,8,k) + u3(:)*STau(:,12,k)) 107559599516SKenneth E. Jansen Tau(:,4,3,k) = T(:)*(STau(:,9,k) + u3(:)*STau(:,13,k)) 107659599516SKenneth E. Jansen Tau(:,4,4,k) = T(:)*(STau(:,10,k) + u3(:)*STau(:,14,k)) 107759599516SKenneth E. Jansen Tau(:,4,5,k) = T(:)*(STau(:,14,k) + u3(:)*STau(:,15,k)) 107859599516SKenneth E. Jansen 107959599516SKenneth E. Jansen betaT = T**2 108059599516SKenneth E. Jansen 108159599516SKenneth E. Jansen Tau(:,5,1,k) = betaT(:)*STau(:,11,k) 108259599516SKenneth E. Jansen Tau(:,5,2,k) = betaT(:)*STau(:,12,k) 108359599516SKenneth E. Jansen Tau(:,5,3,k) = betaT(:)*STau(:,13,k) 108459599516SKenneth E. Jansen Tau(:,5,4,k) = betaT(:)*STau(:,14,k) 108559599516SKenneth E. Jansen Tau(:,5,5,k) = betaT(:)*STau(:,15,k) 108659599516SKenneth E. Jansen 108759599516SKenneth E. Jansen enddo 108859599516SKenneth E. Jansen 108959599516SKenneth E. Jansenc 109059599516SKenneth E. Jansenc... done with conversion to pressure primitive variables 109159599516SKenneth E. Jansenc... now need to interface with the rest of the computations 109259599516SKenneth E. Jansenc 109359599516SKenneth E. Jansen 109459599516SKenneth E. Jansenc... finally multiply this tau matrix times the 109559599516SKenneth E. Jansenc two residual vectors 109659599516SKenneth E. Jansenc 109759599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi) 109859599516SKenneth E. Jansenc ... storing rLyi for the DC term 109959599516SKenneth E. Jansen 110059599516SKenneth E. Jansen 110159599516SKenneth E. Jansen if(iDC .ne. 0) rLyitemp(:,:)=rLyi(:,:,1) 110259599516SKenneth E. Jansen 110359599516SKenneth E. Jansen if(ires.eq.3 .or. ires .eq. 1) then 110459599516SKenneth E. Jansen eigmax(:,:) = rLyi(:,:,1) !reuse 110559599516SKenneth E. Jansen rLyi = zero 110659599516SKenneth E. Jansen do k = 1, ipord 110759599516SKenneth E. Jansen do i = 1, nflow 110859599516SKenneth E. Jansen do j = 1, nflow 110959599516SKenneth E. Jansen rLyi(:,i,k) = rLyi(:,i,k)+Tau(:,i,j,k)*eigmax(:,j) 111059599516SKenneth E. Jansen enddo 111159599516SKenneth E. Jansen enddo 111259599516SKenneth E. Jansen enddo 111359599516SKenneth E. Jansen endif 111459599516SKenneth E. Jansen 111559599516SKenneth E. Jansen 111659599516SKenneth E. Jansen if(iDC .ne. 0) then 111759599516SKenneth E. Jansenc.....calculation of rTLS & raLS for DC term 111859599516SKenneth E. Jansenc 111959599516SKenneth E. Jansenc.....calculation of (Ly - S).tau^tilda*(Ly - S) 112059599516SKenneth E. Jansenc 112159599516SKenneth E. Jansen rTLS = rLYItemp(:,1) * (rLyi(:,1,1)*dVdY(:,1) 112259599516SKenneth E. Jansen & + dVdY(:,2)*rLyi(:,2,1) + dVdY(:,4)*rLyi(:,3,1) 112359599516SKenneth E. Jansen & + rLyi(:,4,1)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5,1)) 112459599516SKenneth E. Jansen & + rLyitemp(:,2) * (rLyi(:,2,1)*dVdY(:,3) 112559599516SKenneth E. Jansen & + rLyi(:,3,1)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4,1) 112659599516SKenneth E. Jansen & + rLyi(:,5,1)*dVdY(:,12)) 112759599516SKenneth E. Jansen & + rLyitemp(:,3) * (rLyi(:,3,1)*dVdY(:,6) 112859599516SKenneth E. Jansen & + dVdY(:,9)*rLyi(:,4,1) + dVdY(:,13)*rLyi(:,5,1)) 112959599516SKenneth E. Jansen & + rLyitemp(:,4) * (rLyi(:,4,1)*dVdY(:,10) 113059599516SKenneth E. Jansen & + dVdY(:,14)*rLyi(:,5,1)) 113159599516SKenneth E. Jansen & + rLyitemp(:,5) * (dVdY(:,15)*rLyi(:,5,1)) 113259599516SKenneth E. Jansen 113359599516SKenneth E. Jansenc 113459599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S) 113559599516SKenneth E. Jansenc 113659599516SKenneth E. Jansen raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15) 113759599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14) 113859599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6) 113959599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10) 114059599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11) 114159599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7) 114259599516SKenneth E. Jansen & + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13) 114359599516SKenneth E. Jansen & + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12) 114459599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8) 114559599516SKenneth E. Jansen & + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9) 114659599516SKenneth E. Jansen & + rLyitemp(:,1)**2*A0inv(:,1) 114759599516SKenneth E. Jansen & + rLyitemp(:,2)**2*A0inv(:,2) 114859599516SKenneth E. Jansen & + rLyitemp(:,3)**2*A0inv(:,3) 114959599516SKenneth E. Jansen & + rLyitemp(:,4)**2*A0inv(:,4) 115059599516SKenneth E. Jansen & + rLyitemp(:,5)**2*A0inv(:,5) 115159599516SKenneth E. Jansenc 115259599516SKenneth E. Jansenc.....****************calculation of giju for DC term*************** 115359599516SKenneth E. Jansenc 115459599516SKenneth E. Jansenc.... for the notation of different numbering 115559599516SKenneth E. Jansenc 115659599516SKenneth E. Jansen gijdu(:,1)=gijd(:,1) 115759599516SKenneth E. Jansen gijdu(:,2)=gijd(:,3) 115859599516SKenneth E. Jansen gijdu(:,3)=gijd(:,6) 115959599516SKenneth E. Jansen gijdu(:,4)=gijd(:,2) 116059599516SKenneth E. Jansen gijdu(:,5)=gijd(:,4) 116159599516SKenneth E. Jansen gijdu(:,6)=gijd(:,5) 116259599516SKenneth E. Jansenc 116359599516SKenneth E. Jansenc 116459599516SKenneth E. Jansen detgijI = one/( 116559599516SKenneth E. Jansen & gijdu(:,1) * gijdu(:,2) * gijdu(:,3) 116659599516SKenneth E. Jansen & - gijdu(:,1) * gijdu(:,6) * gijdu(:,6) 116759599516SKenneth E. Jansen & - gijdu(:,4) * gijdu(:,4) * gijdu(:,3) 116859599516SKenneth E. Jansen & + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two 116959599516SKenneth E. Jansen & - gijdu(:,5) * gijdu(:,5) * gijdu(:,2) 117059599516SKenneth E. Jansen & ) 117159599516SKenneth E. Jansen giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3) 117259599516SKenneth E. Jansen & - gijdu(:,6)**2) 117359599516SKenneth E. Jansen giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3) 117459599516SKenneth E. Jansen & - gijdu(:,5)**2) 117559599516SKenneth E. Jansen giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2) 117659599516SKenneth E. Jansen & - gijdu(:,4)**2) 117759599516SKenneth E. Jansen giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6) 117859599516SKenneth E. Jansen & - gijdu(:,4)*gijdu(:,3) ) 117959599516SKenneth E. Jansen giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6) 118059599516SKenneth E. Jansen & - gijdu(:,5)*gijdu(:,2) ) 118159599516SKenneth E. Jansen giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5) 118259599516SKenneth E. Jansen & - gijdu(:,1)*gijdu(:,6) ) 118359599516SKenneth E. Jansenc 118459599516SKenneth E. Jansen endif ! end of iDC.ne.0 118559599516SKenneth E. Jansenc 118659599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi) 118759599516SKenneth E. Jansenc 118859599516SKenneth E. Jansen if(ires.ne.1 ) then 118959599516SKenneth E. Jansen eigmax(:,:) = rLymi(:,:,1) 119059599516SKenneth E. Jansen rLymi = zero 119159599516SKenneth E. Jansen do k = 1, ipord 119259599516SKenneth E. Jansen do i = 1, nflow 119359599516SKenneth E. Jansen do j = 1, nflow 119459599516SKenneth E. Jansen rLymi(:,i,k) = rLymi(:,i,k)+Tau(:,i,j,k)*eigmax(:,j) 119559599516SKenneth E. Jansen enddo 119659599516SKenneth E. Jansen enddo 119759599516SKenneth E. Jansen enddo 119859599516SKenneth E. Jansen endif 119959599516SKenneth E. Jansenc 1200f4d0b58bSKenneth E. Jansenc INCORRECT NOW ! flops = flops + 255*npro 120159599516SKenneth E. Jansenc 120259599516SKenneth E. Jansenc 120359599516SKenneth E. Jansenc.... return 120459599516SKenneth E. Jansenc 120559599516SKenneth E. Jansen return 120659599516SKenneth E. Jansen end 120759599516SKenneth E. Jansenc 120859599516SKenneth E. Jansen 120959599516SKenneth E. Jansen 121059599516SKenneth E. Jansen 121159599516SKenneth E. Jansen subroutine e3tauSclr(rho, rmu, A0t, 121259599516SKenneth E. Jansen & u1, u2, u3, 121359599516SKenneth E. Jansen & dxidx, rLyti, rLymti, 121459599516SKenneth E. Jansen & taut, rk, raLSt, 121559599516SKenneth E. Jansen & rTLSt, giju) 121659599516SKenneth E. Jansenc 121759599516SKenneth E. Jansenc---------------------------------------------------------------------- 121859599516SKenneth E. Jansenc 121959599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator. 122059599516SKenneth E. Jansenc This Tau is the one proposed for nearly incompressible flows by 122159599516SKenneth E. Jansenc Franca and Frey. We receive the regular residual L operator and a 122259599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for 122359599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past 122459599516SKenneth E. Jansenc ENSA codes 122559599516SKenneth E. Jansenc 122659599516SKenneth E. Jansenc input: 122759599516SKenneth E. Jansenc rho (npro) : density 122859599516SKenneth E. Jansenc T (npro) : temperature 122959599516SKenneth E. Jansenc cp (npro) : specific heat at constant pressure 123059599516SKenneth E. Jansenc u1 (npro) : x1-velocity component 123159599516SKenneth E. Jansenc u2 (npro) : x2-velocity component 123259599516SKenneth E. Jansenc u3 (npro) : x3-velocity component 123359599516SKenneth E. Jansenc dxidx (npro,nsd,nsd) : inverse of deformation gradient 123459599516SKenneth E. Jansenc rLyti (npro) : least-squares residual vector 123559599516SKenneth E. Jansenc rLymti (npro) : modified least-squares residual vector 123659599516SKenneth E. Jansenc 123759599516SKenneth E. Jansenc output: 123859599516SKenneth E. Jansenc rLyti (npro,nflow) : least-squares residual vector 123959599516SKenneth E. Jansenc rLymti (npro,nflow) : modified least-squares residual vector 124059599516SKenneth E. Jansenc tau (npro,3) : 3 taus 124159599516SKenneth E. Jansenc 124259599516SKenneth E. Jansenc 124359599516SKenneth E. Jansenc Zdenek Johan, Summer 1990. (Modified from e2tau.f) 124459599516SKenneth E. Jansenc Zdenek Johan, Winter 1991. (Fortran 90) 124559599516SKenneth E. Jansenc---------------------------------------------------------------------- 124659599516SKenneth E. Jansenc 124759599516SKenneth E. Jansen use turbSA 124859599516SKenneth E. Jansen include "common.h" 124959599516SKenneth E. Jansenc 125059599516SKenneth E. Jansen dimension rho(npro), T(npro), 125159599516SKenneth E. Jansen & cp(npro), u1(npro), 125259599516SKenneth E. Jansen & u2(npro), u3(npro), 125359599516SKenneth E. Jansen & dxidx(npro,nsd,nsd), rk(npro), 125459599516SKenneth E. Jansen & taut(npro), rLyti(npro), 125559599516SKenneth E. Jansen & rLymti(npro) 125659599516SKenneth E. Jansenc 125759599516SKenneth E. Jansen dimension rmu(npro), A0t(npro), 125859599516SKenneth E. Jansen & gijd(npro,6), uh1(npro), 125959599516SKenneth E. Jansen & fact(npro), h2o2u(npro), 126059599516SKenneth E. Jansen & rlytitemp(npro), raLSt(npro), 126159599516SKenneth E. Jansen & rTLSt(npro), gijdu(npro,6), 126259599516SKenneth E. Jansen & giju(npro,6), detgijI(npro) 126359599516SKenneth E. Jansenc 126459599516SKenneth E. Jansenc 126559599516SKenneth E. Jansen call e3gijd( dxidx, gijd ) 126659599516SKenneth E. Jansen 126759599516SKenneth E. Jansenc 126859599516SKenneth E. Jansenc next form the diffusive length scale |u| h_1 = 2 ( ui (gijd)-1 uj)^{1/2} 126959599516SKenneth E. Jansenc 127059599516SKenneth E. Jansenc dividing factor for the inverse of gijd 127159599516SKenneth E. Jansenc 127259599516SKenneth E. Jansen fact = gijd(:,1) * gijd(:,3) * gijd(:,6) 127359599516SKenneth E. Jansen & - gijd(:,1) * gijd(:,5) * gijd(:,5) 127459599516SKenneth E. Jansen & - gijd(:,3) * gijd(:,4) * gijd(:,4) 127559599516SKenneth E. Jansen & - gijd(:,6) * gijd(:,2) * gijd(:,2) 127659599516SKenneth E. Jansen & + gijd(:,2) * gijd(:,4) * gijd(:,5) * two 127759599516SKenneth E. Jansenc 127859599516SKenneth E. Jansen uh1= u1*u1*(gijd(:,3)*gijd(:,6)-gijd(:,5)*gijd(:,5)) 127959599516SKenneth E. Jansen & + u2*u2*(gijd(:,1)*gijd(:,6)-gijd(:,4)*gijd(:,4)) 128059599516SKenneth E. Jansen & + u3*u3*(gijd(:,1)*gijd(:,3)-gijd(:,2)*gijd(:,2)) 128159599516SKenneth E. Jansen & + two *(u1*u2*(gijd(:,4)*gijd(:,5)-gijd(:,2)*gijd(:,6)) 128259599516SKenneth E. Jansen & + u1*u3*(gijd(:,2)*gijd(:,5)-gijd(:,4)*gijd(:,3)) 128359599516SKenneth E. Jansen & + u2*u3*(gijd(:,4)*gijd(:,2)-gijd(:,1)*gijd(:,5))) 128459599516SKenneth E. Jansenc 128559599516SKenneth E. Jansenc at this point we have (u h1)^2 * inverse coefficient^2 / 4 128659599516SKenneth E. Jansenc 128759599516SKenneth E. Jansenc ^ fact 128859599516SKenneth E. Jansenc 128959599516SKenneth E. Jansen 129059599516SKenneth E. Jansen uh1= two * sqrt(uh1/fact) 129159599516SKenneth E. Jansen 129259599516SKenneth E. Jansenc 129359599516SKenneth E. Jansenc next form the advective length scale |u|/h_2 = 2 ( ui (gijd) uj)^{1/2} 129459599516SKenneth E. Jansenc 129559599516SKenneth E. Jansen h2o2u = u1*u1*gijd(:,1) 129659599516SKenneth E. Jansen & + u2*u2*gijd(:,3) 129759599516SKenneth E. Jansen & + u3*u3*gijd(:,6) 129859599516SKenneth E. Jansen & +(u1*u2*gijd(:,2) 129959599516SKenneth E. Jansen & + u1*u3*gijd(:,4) 130059599516SKenneth E. Jansen & + u2*u3*gijd(:,5))*two + 1.0e-15 !FIX FOR INVALID MESHES 130159599516SKenneth E. Jansenc 130259599516SKenneth E. Jansenc at this point we have (2 u / h_2)^2 130359599516SKenneth E. Jansenc 130459599516SKenneth E. Jansen 130559599516SKenneth E. Jansenc call tnanqe(h2o2u,1,"riaconv ") 130659599516SKenneth E. Jansen 130759599516SKenneth E. Jansen h2o2u = one / sqrt(h2o2u) ! this flips it over leaves it h_2/(2u) 130859599516SKenneth E. Jansenc 130959599516SKenneth E. Jansenc... momentum tau 131059599516SKenneth E. Jansenc 131159599516SKenneth E. Jansenc 131259599516SKenneth E. Jansenc... rmu will now hold the total (molecular plus eddy) viscosity... 131359599516SKenneth E. Jansen dts=one/(Dtgl*dtsfct) 131459599516SKenneth E. Jansen if(iremoveStabTimeTerm.gt.0) dts = dts*100000 ! remove time term from scalar 1315513954efSKenneth E. Jansen! Duct code had this dts=1.0e16 131659599516SKenneth E. Jansen taut(:)=min(dts,h2o2u) 131759599516SKenneth E. Jansen taut(:)=taut(:)/rho 131859599516SKenneth E. Jansen taut(:)=min(taut(:),h2o2u*h2o2u*rk*pt66*saSigma/rmu) 131959599516SKenneth E. Jansenc 132059599516SKenneth E. Jansenc... finally multiply this tau matrix times the 132159599516SKenneth E. Jansenc two residual vectors 132259599516SKenneth E. Jansenc 132359599516SKenneth E. Jansenc.... calculate (tau Lyt) --> (rLyti) 132459599516SKenneth E. Jansenc 132559599516SKenneth E. Jansenc.... storing rLyi for the DC term 132659599516SKenneth E. Jansen rLytitemp=rLyti 132759599516SKenneth E. Jansen 132859599516SKenneth E. Jansen if(ires.eq.3 .or. ires .eq. 1) then 132959599516SKenneth E. Jansen rLyti(:) = taut(:) * rLyti(:) 133059599516SKenneth E. Jansen 133159599516SKenneth E. Jansen endif 133259599516SKenneth E. Jansen if(iDCSclr(1) .ne. 0) then 133359599516SKenneth E. Jansenc..... calculation of rTLS & raLS for DC term 133459599516SKenneth E. Jansenc..... calculation of (Ly - S).tau^tilda*(Ly - S) 133559599516SKenneth E. Jansenc 133659599516SKenneth E. Jansen rTLSt = rLYtItemp(:)*rLyti(:) 133759599516SKenneth E. Jansenc 133859599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S) 133959599516SKenneth E. Jansenc 134059599516SKenneth E. Jansen raLSt = rLYtItemp(:) * rLYtItemp(:) 134159599516SKenneth E. Jansenc.....*****************calculation of giju for DC term****************** 134259599516SKenneth E. Jansenc 134359599516SKenneth E. Jansenc.... for the notation of different numbering 134459599516SKenneth E. Jansenc 134559599516SKenneth E. Jansen gijdu(:,1)=gijd(:,1) 134659599516SKenneth E. Jansen gijdu(:,2)=gijd(:,3) 134759599516SKenneth E. Jansen gijdu(:,3)=gijd(:,6) 134859599516SKenneth E. Jansen gijdu(:,4)=gijd(:,2) 134959599516SKenneth E. Jansen gijdu(:,5)=gijd(:,4) 135059599516SKenneth E. Jansen gijdu(:,6)=gijd(:,5) 135159599516SKenneth E. Jansenc 135259599516SKenneth E. Jansenc we are going to need this in the dc factor later so we calculate it. 135359599516SKenneth E. Jansenc 135459599516SKenneth E. Jansen detgijI = one/( 135559599516SKenneth E. Jansen & gijdu(:,1) * gijdu(:,2) * gijdu(:,3) 135659599516SKenneth E. Jansen & - gijdu(:,1) * gijdu(:,6) * gijdu(:,6) 135759599516SKenneth E. Jansen & - gijdu(:,4) * gijdu(:,4) * gijdu(:,3) 135859599516SKenneth E. Jansen & + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two 135959599516SKenneth E. Jansen & - gijdu(:,5) * gijdu(:,5) * gijdu(:,2) 136059599516SKenneth E. Jansen & ) 136159599516SKenneth E. Jansen giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3) 136259599516SKenneth E. Jansen & - gijdu(:,6)**2) 136359599516SKenneth E. Jansen giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3) 136459599516SKenneth E. Jansen & - gijdu(:,5)**2) 136559599516SKenneth E. Jansen giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2) 136659599516SKenneth E. Jansen & - gijdu(:,4)**2) 136759599516SKenneth E. Jansen giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6) 136859599516SKenneth E. Jansen & - gijdu(:,4)*gijdu(:,3) ) 136959599516SKenneth E. Jansen giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6) 137059599516SKenneth E. Jansen & - gijdu(:,5)*gijdu(:,2) ) 137159599516SKenneth E. Jansen giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5) 137259599516SKenneth E. Jansen & - gijdu(:,1)*gijdu(:,6) ) 137359599516SKenneth E. Jansenc 137459599516SKenneth E. Jansen endif ! end of iDCSclr(1).ne.0 137559599516SKenneth E. Jansenc 137659599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi) 137759599516SKenneth E. Jansenc 137859599516SKenneth E. Jansenc if(ires.ne.1 ) then 137959599516SKenneth E. Jansenc rLymi(:,1) = tau(:,1) * rLymi(:,1) 138059599516SKenneth E. Jansenc rLymi(:,2) = tau(:,2) * rLymi(:,2) 138159599516SKenneth E. Jansenc rLymi(:,3) = tau(:,2) * rLymi(:,3) 138259599516SKenneth E. Jansenc rLymi(:,4) = tau(:,2) * rLymi(:,4) 138359599516SKenneth E. Jansenc rLymi(:,5) = tau(:,3) * rLymi(:,5) 138459599516SKenneth E. Jansenc endif 138559599516SKenneth E. Jansenc 1386f4d0b58bSKenneth E. Jansenc INCORRECT NOW ! flops = flops + 255*npro 138759599516SKenneth E. Jansenc 138859599516SKenneth E. Jansenc 138959599516SKenneth E. Jansenc.... return 139059599516SKenneth E. Jansenc 139159599516SKenneth E. Jansen return 139259599516SKenneth E. Jansen end 139359599516SKenneth E. Jansen 139459599516SKenneth E. Jansenc----------------------------------------------------------------------- 139559599516SKenneth E. Jansenc get the metric tensor g_{ij}=xi_{k,i} xi_{k,j}. 139659599516SKenneth E. Jansenc----------------------------------------------------------------------- 139759599516SKenneth E. Jansen subroutine e3gijd( dxidx, gijd ) 139859599516SKenneth E. Jansen 139959599516SKenneth E. Jansen include "common.h" 140059599516SKenneth E. Jansen 140159599516SKenneth E. Jansen real*8 dxidx(npro,nsd,nsd), gijd(npro,6), 140259599516SKenneth E. Jansen & tmp1(npro), tmp2(npro), 140359599516SKenneth E. Jansen & tmp3(npro) 140459599516SKenneth E. Jansenc form metric tensor g_{ij}=xi_{k,i} xi_{k,j}. It is a symmetric 140559599516SKenneth E. Jansenc tensor so we only form 6 components and use symmetric matrix numbering. 140659599516SKenneth E. Jansenc (d for down since giju=[gijd]^{-1}) 140759599516SKenneth E. Jansenc (Note FARZIN and others use numbering of 1,2,3 being diagonal 456 off) 140859599516SKenneth E. Jansen if (lcsyst .ge. 2) then 140959599516SKenneth E. Jansen 141059599516SKenneth E. Jansen gijd(:,1) = dxidx(:,1,1) * dxidx(:,1,1) 141159599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,1) 141259599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,1) 141359599516SKenneth E. Jansenc 141459599516SKenneth E. Jansen gijd(:,2) = dxidx(:,1,1) * dxidx(:,1,2) 141559599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,2) 141659599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,2) 141759599516SKenneth E. Jansenc 141859599516SKenneth E. Jansen gijd(:,3) = dxidx(:,1,2) * dxidx(:,1,2) 141959599516SKenneth E. Jansen & + dxidx(:,2,2) * dxidx(:,2,2) 142059599516SKenneth E. Jansen & + dxidx(:,3,2) * dxidx(:,3,2) 142159599516SKenneth E. Jansenc 142259599516SKenneth E. Jansen gijd(:,4) = dxidx(:,1,1) * dxidx(:,1,3) 142359599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,3) 142459599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,3) 142559599516SKenneth E. Jansenc 142659599516SKenneth E. Jansen gijd(:,5) = dxidx(:,1,2) * dxidx(:,1,3) 142759599516SKenneth E. Jansen & + dxidx(:,2,2) * dxidx(:,2,3) 142859599516SKenneth E. Jansen & + dxidx(:,3,2) * dxidx(:,3,3) 142959599516SKenneth E. Jansenc 143059599516SKenneth E. Jansen gijd(:,6) = dxidx(:,1,3) * dxidx(:,1,3) 143159599516SKenneth E. Jansen & + dxidx(:,2,3) * dxidx(:,2,3) 143259599516SKenneth E. Jansen & + dxidx(:,3,3) * dxidx(:,3,3) 143359599516SKenneth E. Jansenc 143459599516SKenneth E. Jansen else if (lcsyst .eq. 1) then 143559599516SKenneth E. Jansenc 143659599516SKenneth E. Jansenc There is an invariance problem with tets 143759599516SKenneth E. Jansenc It is fixed by the following modifications to gijd 143859599516SKenneth E. Jansenc 143959599516SKenneth E. Jansen 144059599516SKenneth E. Jansen c1 = 1.259921049894873D+00 144159599516SKenneth E. Jansen c2 = 6.299605249474365D-01 144259599516SKenneth E. Jansenc 144359599516SKenneth E. Jansen tmp1(:) = c1 * dxidx(:,1,1) + c2 *(dxidx(:,2,1)+dxidx(:,3,1)) 144459599516SKenneth E. Jansen tmp2(:) = c1 * dxidx(:,2,1) + c2 *(dxidx(:,1,1)+dxidx(:,3,1)) 144559599516SKenneth E. Jansen tmp3(:) = c1 * dxidx(:,3,1) + c2 *(dxidx(:,1,1)+dxidx(:,2,1)) 144659599516SKenneth E. Jansen gijd(:,1) = dxidx(:,1,1) * tmp1 144759599516SKenneth E. Jansen 1 + dxidx(:,2,1) * tmp2 144859599516SKenneth E. Jansen 2 + dxidx(:,3,1) * tmp3 144959599516SKenneth E. Jansenc 145059599516SKenneth E. Jansen tmp1(:) = c1 * dxidx(:,1,2) + c2 *(dxidx(:,2,2)+dxidx(:,3,2)) 145159599516SKenneth E. Jansen tmp2(:) = c1 * dxidx(:,2,2) + c2 *(dxidx(:,1,2)+dxidx(:,3,2)) 145259599516SKenneth E. Jansen tmp3(:) = c1 * dxidx(:,3,2) + c2 *(dxidx(:,1,2)+dxidx(:,2,2)) 145359599516SKenneth E. Jansen gijd(:,2) = dxidx(:,1,1) * tmp1 145459599516SKenneth E. Jansen 1 + dxidx(:,2,1) * tmp2 145559599516SKenneth E. Jansen 2 + dxidx(:,3,1) * tmp3 145659599516SKenneth E. Jansenc 145759599516SKenneth E. Jansen gijd(:,3) = dxidx(:,1,2) * tmp1 145859599516SKenneth E. Jansen 1 + dxidx(:,2,2) * tmp2 145959599516SKenneth E. Jansen 2 + dxidx(:,3,2) * tmp3 146059599516SKenneth E. Jansenc 146159599516SKenneth E. Jansen tmp1(:) = c1 * dxidx(:,1,3) + c2 *(dxidx(:,2,3)+dxidx(:,3,3)) 146259599516SKenneth E. Jansen tmp2(:) = c1 * dxidx(:,2,3) + c2 *(dxidx(:,1,3)+dxidx(:,3,3)) 146359599516SKenneth E. Jansen tmp3(:) = c1 * dxidx(:,3,3) + c2 *(dxidx(:,1,3)+dxidx(:,2,3)) 146459599516SKenneth E. Jansen gijd(:,4) = dxidx(:,1,1) * tmp1 146559599516SKenneth E. Jansen 1 + dxidx(:,2,1) * tmp2 146659599516SKenneth E. Jansen 2 + dxidx(:,3,1) * tmp3 146759599516SKenneth E. Jansenc 146859599516SKenneth E. Jansen gijd(:,5) = dxidx(:,1,2) * tmp1 146959599516SKenneth E. Jansen 1 + dxidx(:,2,2) * tmp2 147059599516SKenneth E. Jansen 2 + dxidx(:,3,2) * tmp3 147159599516SKenneth E. Jansenc 147259599516SKenneth E. Jansen gijd(:,6) = dxidx(:,1,3) * tmp1 147359599516SKenneth E. Jansen 1 + dxidx(:,2,3) * tmp2 147459599516SKenneth E. Jansen 2 + dxidx(:,3,3) * tmp3 147559599516SKenneth E. Jansenc 147659599516SKenneth E. Jansen else 147759599516SKenneth E. Jansenc This is just the hex copied from above. I have 147859599516SKenneth E. Jansenc to find my notes on invariance factors for wedges 147959599516SKenneth E. Jansenc 148059599516SKenneth E. Jansen 148159599516SKenneth E. Jansen gijd(:,1) = dxidx(:,1,1) * dxidx(:,1,1) 148259599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,1) 148359599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,1) 148459599516SKenneth E. Jansenc 148559599516SKenneth E. Jansen gijd(:,2) = dxidx(:,1,1) * dxidx(:,1,2) 148659599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,2) 148759599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,2) 148859599516SKenneth E. Jansenc 148959599516SKenneth E. Jansen gijd(:,3) = dxidx(:,1,2) * dxidx(:,1,2) 149059599516SKenneth E. Jansen & + dxidx(:,2,2) * dxidx(:,2,2) 149159599516SKenneth E. Jansen & + dxidx(:,3,2) * dxidx(:,3,2) 149259599516SKenneth E. Jansenc 149359599516SKenneth E. Jansen gijd(:,4) = dxidx(:,1,1) * dxidx(:,1,3) 149459599516SKenneth E. Jansen & + dxidx(:,2,1) * dxidx(:,2,3) 149559599516SKenneth E. Jansen & + dxidx(:,3,1) * dxidx(:,3,3) 149659599516SKenneth E. Jansenc 149759599516SKenneth E. Jansen gijd(:,5) = dxidx(:,1,2) * dxidx(:,1,3) 149859599516SKenneth E. Jansen & + dxidx(:,2,2) * dxidx(:,2,3) 149959599516SKenneth E. Jansen & + dxidx(:,3,2) * dxidx(:,3,3) 150059599516SKenneth E. Jansenc 150159599516SKenneth E. Jansen gijd(:,6) = dxidx(:,1,3) * dxidx(:,1,3) 150259599516SKenneth E. Jansen & + dxidx(:,2,3) * dxidx(:,2,3) 150359599516SKenneth E. Jansen & + dxidx(:,3,3) * dxidx(:,3,3) 150459599516SKenneth E. Jansen endif 150559599516SKenneth E. Jansenc 150659599516SKenneth E. Jansen return 150759599516SKenneth E. Jansen end 150859599516SKenneth E. Jansen 1509