xref: /phasta/phSolver/compressible/e3tau.f (revision d3ff575ad5f9c8177bec5410ea71d40915ce58dd)
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