xref: /phasta/phSolver/compressible/e3tau.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine e3tau  (rho,    cp,     rmu,
2*59599516SKenneth E. Jansen     &                     u1,     u2,     u3,
3*59599516SKenneth E. Jansen     &                     con,    dxidx,  rLyi,
4*59599516SKenneth E. Jansen     &                     rLymi,  tau,    rk,
5*59599516SKenneth E. Jansen     &                     giju,   rTLS,   raLS,
6*59599516SKenneth E. Jansen     &                     A0inv,  dVdY,   cv)
7*59599516SKenneth E. Jansenc
8*59599516SKenneth E. Jansenc----------------------------------------------------------------------
9*59599516SKenneth E. Jansenc
10*59599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator.
11*59599516SKenneth E. Jansenc We receive the regular residual L operator and a
12*59599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for
13*59599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past
14*59599516SKenneth E. Jansenc ENSA codes
15*59599516SKenneth E. Jansenc
16*59599516SKenneth E. Jansenc input:
17*59599516SKenneth E. Jansenc  rho    (npro)           : density
18*59599516SKenneth E. Jansenc  T      (npro)           : temperature
19*59599516SKenneth E. Jansenc  cp     (npro)           : specific heat at constant pressure
20*59599516SKenneth E. Jansenc  u1     (npro)           : x1-velocity component
21*59599516SKenneth E. Jansenc  u2     (npro)           : x2-velocity component
22*59599516SKenneth E. Jansenc  u3     (npro)           : x3-velocity component
23*59599516SKenneth E. Jansenc  dxidx  (npro,nsd,nsd)   : inverse of deformation gradient
24*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
25*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
26*59599516SKenneth E. Jansenc
27*59599516SKenneth E. Jansenc output:
28*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
29*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
30*59599516SKenneth E. Jansenc  tau    (npro,3)         : 3 taus
31*59599516SKenneth E. Jansenc
32*59599516SKenneth E. Jansenc
33*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2tau.f)
34*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
35*59599516SKenneth E. Jansenc----------------------------------------------------------------------
36*59599516SKenneth E. Jansenc
37*59599516SKenneth E. Jansen      include "common.h"
38*59599516SKenneth E. Jansenc
39*59599516SKenneth E. Jansen      dimension rho(npro),                 con(npro),
40*59599516SKenneth E. Jansen     &            cp(npro),                  u1(npro),
41*59599516SKenneth E. Jansen     &            u2(npro),                  u3(npro),
42*59599516SKenneth E. Jansen     &            dxidx(npro,nsd,nsd),       rk(npro),
43*59599516SKenneth E. Jansen     &            tau(npro,5),               rLyi(npro,nflow),
44*59599516SKenneth E. Jansen     &            rLymi(npro,nflow),         dVdY(npro,15),
45*59599516SKenneth E. Jansen     &            rTLS(npro),                raLS(npro),
46*59599516SKenneth E. Jansen     &            rLyitemp(npro,nflow),      detgijI(npro)
47*59599516SKenneth E. Jansenc
48*59599516SKenneth E. Jansen      dimension   rmu(npro),	 cv(npro),
49*59599516SKenneth E. Jansen     &		  gijd(npro,6),  uh1(npro),
50*59599516SKenneth E. Jansen     &		  fact(npro),	 h2o2u(npro),   giju(npro,6),
51*59599516SKenneth E. Jansen     &            A0inv(npro,15),gijdu(npro,6)
52*59599516SKenneth E. Jansenc
53*59599516SKenneth E. Jansen      call e3gijd( dxidx, gijd )
54*59599516SKenneth E. Jansenc
55*59599516SKenneth E. Jansenc  next form the diffusive length scale |u| h_1 = 2 ( ui (gijd)-1 uj)^{1/2}
56*59599516SKenneth E. Jansenc
57*59599516SKenneth E. Jansenc   dividing factor for the inverse of gijd
58*59599516SKenneth E. Jansenc
59*59599516SKenneth E. Jansen         fact = gijd(:,1) * gijd(:,3) * gijd(:,6)
60*59599516SKenneth E. Jansen     &        - gijd(:,1) * gijd(:,5) * gijd(:,5)
61*59599516SKenneth E. Jansen     &        - gijd(:,3) * gijd(:,4) * gijd(:,4)
62*59599516SKenneth E. Jansen     &        - gijd(:,6) * gijd(:,2) * gijd(:,2)
63*59599516SKenneth E. Jansen     &        + gijd(:,2) * gijd(:,4) * gijd(:,5) * two
64*59599516SKenneth E. Jansenc
65*59599516SKenneth E. Jansen         uh1=    u1*u1*(gijd(:,3)*gijd(:,6)-gijd(:,5)*gijd(:,5))
66*59599516SKenneth E. Jansen     &         + u2*u2*(gijd(:,1)*gijd(:,6)-gijd(:,4)*gijd(:,4))
67*59599516SKenneth E. Jansen     &         + u3*u3*(gijd(:,1)*gijd(:,3)-gijd(:,2)*gijd(:,2))
68*59599516SKenneth E. Jansen     &   + two *(u1*u2*(gijd(:,4)*gijd(:,5)-gijd(:,2)*gijd(:,6))
69*59599516SKenneth E. Jansen     &         + u1*u3*(gijd(:,2)*gijd(:,5)-gijd(:,4)*gijd(:,3))
70*59599516SKenneth E. Jansen     &         + u2*u3*(gijd(:,4)*gijd(:,2)-gijd(:,1)*gijd(:,5)))
71*59599516SKenneth E. Jansenc
72*59599516SKenneth E. Jansenc   at this point we have (u h1)^2 * inverse coefficient^2 / 4
73*59599516SKenneth E. Jansenc
74*59599516SKenneth E. Jansenc                                    ^ fact
75*59599516SKenneth E. Jansenc
76*59599516SKenneth E. Jansen      uh1= two * sqrt(uh1/fact)
77*59599516SKenneth E. Jansenc
78*59599516SKenneth E. Jansenc  next form the advective length scale |u|/h_2 = 2 ( ui (gijd) uj)^{1/2}
79*59599516SKenneth E. Jansenc
80*59599516SKenneth E. Jansen      h2o2u =   u1*u1*gijd(:,1)
81*59599516SKenneth E. Jansen     &     + u2*u2*gijd(:,3)
82*59599516SKenneth E. Jansen     &     + u3*u3*gijd(:,6)
83*59599516SKenneth E. Jansen     &     +(u1*u2*gijd(:,2)
84*59599516SKenneth E. Jansen     &     + u1*u3*gijd(:,4)
85*59599516SKenneth E. Jansen     &     + u2*u3*gijd(:,5))*two  + 1.0e-15 !FIX FOR INVALID MESHES
86*59599516SKenneth E. Jansenc
87*59599516SKenneth E. Jansenc  at this point we have (2 u / h_2)^2
88*59599516SKenneth E. Jansenc
89*59599516SKenneth E. Jansen
90*59599516SKenneth E. Jansenc       call tnanqe(h2o2u,1,"riaconv ")
91*59599516SKenneth E. Jansen
92*59599516SKenneth E. Jansen      h2o2u = one / sqrt(h2o2u) ! this flips it over leaves it h_2/(2u)
93*59599516SKenneth E. Jansenc
94*59599516SKenneth E. Jansenc.... diffusive corrections
95*59599516SKenneth E. Jansen
96*59599516SKenneth E. Jansen      if(itau.eq.1) then        ! tau proposed by  for nearly incompressible
97*59599516SKenneth E. Jansenc                                 flows by Guillermo Hauke
98*59599516SKenneth E. Jansenc
99*59599516SKenneth E. Jansenc.... cell Reynold number
100*59599516SKenneth E. Jansenc
101*59599516SKenneth E. Jansen         fact=pt5*rho*uh1/rmu
102*59599516SKenneth E. Jansen
103*59599516SKenneth E. Jansenc
104*59599516SKenneth E. Jansenc.... continuity tau
105*59599516SKenneth E. Jansenc
106*59599516SKenneth E. Jansen         tau(:,1)=pt5*uh1*min(one,fact)*taucfct
107*59599516SKenneth E. Jansenc
108*59599516SKenneth E. Jansenc...  momentum tau
109*59599516SKenneth E. Jansenc
110*59599516SKenneth E. Jansen         dts=one/(Dtgl*dtsfct)
111*59599516SKenneth E. Jansen         tau(:,2)=min(dts,h2o2u)
112*59599516SKenneth E. Jansen         tau(:,2)=tau(:,2)/rho
113*59599516SKenneth E. Jansenc
114*59599516SKenneth E. Jansenc.... energy tau   cv=cp/gamma  assumed
115*59599516SKenneth E. Jansenc
116*59599516SKenneth E. Jansenc         tau(:,3)=gamma*tau(:,2)/cp
117*59599516SKenneth E. Jansen          tau(:,3)=tau(:,2)/cv
118*59599516SKenneth E. Jansenc
119*59599516SKenneth E. Jansenc.... diffusive corrections
120*59599516SKenneth E. Jansenc
121*59599516SKenneth E. Jansen         if (ipord == 1) then
122*59599516SKenneth E. Jansen            celt = pt66
123*59599516SKenneth E. Jansen         else if (ipord == 2) then
124*59599516SKenneth E. Jansen            celt = pt33
125*59599516SKenneth E. Jansenc            celt = pt33*0.04762
126*59599516SKenneth E. Jansen         else if (ipord == 3) then
127*59599516SKenneth E. Jansen            celt = pt33         !.02  just a guess...
128*59599516SKenneth E. Jansen         else if (ipord >= 4) then
129*59599516SKenneth E. Jansen            celt = .008         ! yet another guess...
130*59599516SKenneth E. Jansen         endif
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansenc          fact=h2o2u*h2o2u*rk*pt66/rmu
133*59599516SKenneth E. Jansen         fact=h2o2u*h2o2u*rk*celt/rmu
134*59599516SKenneth E. Jansenc
135*59599516SKenneth E. Jansen         tau(:,2)=min(tau(:,2),fact)
136*59599516SKenneth E. Jansen         tau(:,3)=min(tau(:,3),fact*rmu/con)*temper
137*59599516SKenneth E. Jansenc
138*59599516SKenneth E. Jansen      else if(itau.eq.0)  then  ! tau proposed by Farzin and Shakib
139*59599516SKenneth E. Jansenc
140*59599516SKenneth E. Jansenc...  momentum tau
141*59599516SKenneth E. Jansenc
142*59599516SKenneth E. Jansen
143*59599516SKenneth E. Jansenc
144*59599516SKenneth E. Jansenc...  higher order element diffusive correction
145*59599516SKenneth E. Jansenc
146*59599516SKenneth E. Jansen         if (ipord == 1) then
147*59599516SKenneth E. Jansen            fff = 36.0d0
148*59599516SKenneth E. Jansen         else if (ipord == 2) then
149*59599516SKenneth E. Jansen            fff = 60.0d0
150*59599516SKenneth E. Jansenc     fff = 36.0d0
151*59599516SKenneth E. Jansen         else if (ipord == 3) then
152*59599516SKenneth E. Jansen            fff = 128.0d0
153*59599516SKenneth E. Jansenc     fff = 144.0d0
154*59599516SKenneth E. Jansen      endif
155*59599516SKenneth E. Jansen         dts = dtsfct*Dtgl
156*59599516SKenneth E. Jansen         tau(:,2)=rho**2*((two*dts)**2
157*59599516SKenneth E. Jansen     &        + u1*(u1*gijd(:,1) + two*(u2*gijd(:,2)+u3*gijd(:,4)))
158*59599516SKenneth E. Jansen     &        + u2*(u2*gijd(:,3) + two*u3*gijd(:,5))
159*59599516SKenneth E. Jansen     &        + u3*u3*gijd(:,6))
160*59599516SKenneth E. Jansen     &        +fff*rmu**2*(gijd(:,1)**2 + gijd(:,3)**2 + gijd(:,6)**2 +
161*59599516SKenneth E. Jansen     &        two*(gijd(:,2)**2 + gijd(:,4)**2 + gijd(:,5)**2))
162*59599516SKenneth E. Jansen         fact=sqrt(tau(:,2))
163*59599516SKenneth E. Jansen         tau(:,1)=pt125*fact/(gijd(:,1)+gijd(:,3)+gijd(:,6))*taucfct
164*59599516SKenneth E. Jansen         tau(:,2)=one/fact
165*59599516SKenneth E. Jansenc
166*59599516SKenneth E. Jansenc.... energy tau   cv=cp/gamma  assumed
167*59599516SKenneth E. Jansenc
168*59599516SKenneth E. Jansen         tau(:,3)=tau(:,2)/cv*temper
169*59599516SKenneth E. Jansenc
170*59599516SKenneth E. Jansen      endif
171*59599516SKenneth E. Jansenc
172*59599516SKenneth E. Jansenc...  finally multiply this tau matrix times the
173*59599516SKenneth E. Jansenc     two residual vectors
174*59599516SKenneth E. Jansenc
175*59599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi)
176*59599516SKenneth E. Jansenc ... storing rLyi for the DC term
177*59599516SKenneth E. Jansen        if(iDC .ne. 0) rLyitemp=rLyi
178*59599516SKenneth E. Jansen
179*59599516SKenneth E. Jansen      if(ires.eq.3 .or. ires .eq. 1) then
180*59599516SKenneth E. Jansen         rLyi(:,1) = tau(:,1) * rLyi(:,1)
181*59599516SKenneth E. Jansen         rLyi(:,2) = tau(:,2) * rLyi(:,2)
182*59599516SKenneth E. Jansen         rLyi(:,3) = tau(:,2) * rLyi(:,3)
183*59599516SKenneth E. Jansen         rLyi(:,4) = tau(:,2) * rLyi(:,4)
184*59599516SKenneth E. Jansen         rLyi(:,5) = tau(:,3) * rLyi(:,5)
185*59599516SKenneth E. Jansen      endif
186*59599516SKenneth E. Jansenc
187*59599516SKenneth E. Jansen      if(iDC .ne. 0) then
188*59599516SKenneth E. Jansenc..... calculation of rTLS & raLS for DC term
189*59599516SKenneth E. Jansenc
190*59599516SKenneth E. Jansenc..... calculation of (Ly - S).tau^tilda*(Ly - S)
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansen         rTLS = rLYItemp(:,1)       * (rLyi(:,1)*dVdY(:,1)
193*59599516SKenneth E. Jansen     &        + dVdY(:,2)*rLyi(:,2) + dVdY(:,4)*rLyi(:,3)
194*59599516SKenneth E. Jansen     &        + rLyi(:,4)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5))
195*59599516SKenneth E. Jansen     &        + rLyitemp(:,2)       * (rLyi(:,2)*dVdY(:,3)
196*59599516SKenneth E. Jansen     &        + rLyi(:,3)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4)
197*59599516SKenneth E. Jansen     &        + rLyi(:,5)*dVdY(:,12))
198*59599516SKenneth E. Jansen     &        + rLyitemp(:,3)       * (rLyi(:,3)*dVdY(:,6)
199*59599516SKenneth E. Jansen     &        + dVdY(:,9)*rLyi(:,4) + dVdY(:,13)*rLyi(:,5))
200*59599516SKenneth E. Jansen     &        + rLyitemp(:,4)       * (rLyi(:,4)*dVdY(:,10)
201*59599516SKenneth E. Jansen     &        + dVdY(:,14)*rLyi(:,5))
202*59599516SKenneth E. Jansen     &        + rLyitemp(:,5)       * (dVdY(:,15)*rLyi(:,5))
203*59599516SKenneth E. Jansen
204*59599516SKenneth E. Jansenc
205*59599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S)
206*59599516SKenneth E. Jansenc
207*59599516SKenneth E. Jansen           raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15)
208*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14)
209*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6)
210*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10)
211*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11)
212*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7)
213*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13)
214*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12)
215*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8)
216*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9)
217*59599516SKenneth E. Jansen     &          + rLyitemp(:,1)**2*A0inv(:,1)
218*59599516SKenneth E. Jansen     &          + rLyitemp(:,2)**2*A0inv(:,2)
219*59599516SKenneth E. Jansen     &          + rLyitemp(:,3)**2*A0inv(:,3)
220*59599516SKenneth E. Jansen     &          + rLyitemp(:,4)**2*A0inv(:,4)
221*59599516SKenneth E. Jansen     &          + rLyitemp(:,5)**2*A0inv(:,5)
222*59599516SKenneth E. Jansenc
223*59599516SKenneth E. Jansenc.....****************calculation of giju for DC term***************
224*59599516SKenneth E. Jansenc
225*59599516SKenneth E. Jansenc.... for the notation of different numbering
226*59599516SKenneth E. Jansenc
227*59599516SKenneth E. Jansen           gijdu(:,1)=gijd(:,1)
228*59599516SKenneth E. Jansen           gijdu(:,2)=gijd(:,3)
229*59599516SKenneth E. Jansen           gijdu(:,3)=gijd(:,6)
230*59599516SKenneth E. Jansen           gijdu(:,4)=gijd(:,2)
231*59599516SKenneth E. Jansen           gijdu(:,5)=gijd(:,4)
232*59599516SKenneth E. Jansen           gijdu(:,6)=gijd(:,5)
233*59599516SKenneth E. Jansenc
234*59599516SKenneth E. Jansenc
235*59599516SKenneth E. Jansen           detgijI = one/(
236*59599516SKenneth E. Jansen     &          gijdu(:,1) * gijdu(:,2) * gijdu(:,3)
237*59599516SKenneth E. Jansen     &          - gijdu(:,1) * gijdu(:,6) * gijdu(:,6)
238*59599516SKenneth E. Jansen     &          - gijdu(:,4) * gijdu(:,4) * gijdu(:,3)
239*59599516SKenneth E. Jansen     &          + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two
240*59599516SKenneth E. Jansen     &          - gijdu(:,5) * gijdu(:,5) * gijdu(:,2)
241*59599516SKenneth E. Jansen     &          )
242*59599516SKenneth E. Jansen           giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3)
243*59599516SKenneth E. Jansen     &               - gijdu(:,6)**2)
244*59599516SKenneth E. Jansen           giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3)
245*59599516SKenneth E. Jansen     &               - gijdu(:,5)**2)
246*59599516SKenneth E. Jansen           giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2)
247*59599516SKenneth E. Jansen     &               - gijdu(:,4)**2)
248*59599516SKenneth E. Jansen           giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6)
249*59599516SKenneth E. Jansen     &               - gijdu(:,4)*gijdu(:,3) )
250*59599516SKenneth E. Jansen           giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6)
251*59599516SKenneth E. Jansen     &               - gijdu(:,5)*gijdu(:,2) )
252*59599516SKenneth E. Jansen           giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5)
253*59599516SKenneth E. Jansen     &               - gijdu(:,1)*gijdu(:,6) )
254*59599516SKenneth E. Jansenc
255*59599516SKenneth E. Jansen        endif                   ! end of iDC.ne.0
256*59599516SKenneth E. Jansenc
257*59599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi)
258*59599516SKenneth E. Jansenc
259*59599516SKenneth E. Jansen      if(ires.ne.1 ) then
260*59599516SKenneth E. Jansen         rLymi(:,1) = tau(:,1) * rLymi(:,1)
261*59599516SKenneth E. Jansen         rLymi(:,2) = tau(:,2) * rLymi(:,2)
262*59599516SKenneth E. Jansen         rLymi(:,3) = tau(:,2) * rLymi(:,3)
263*59599516SKenneth E. Jansen         rLymi(:,4) = tau(:,2) * rLymi(:,4)
264*59599516SKenneth E. Jansen         rLymi(:,5) = tau(:,3) * rLymi(:,5)
265*59599516SKenneth E. Jansen      endif
266*59599516SKenneth E. Jansenc
267*59599516SKenneth E. Jansenc  INCORRECT NOW         flops = flops + 255*npro
268*59599516SKenneth E. Jansenc
269*59599516SKenneth E. Jansenc
270*59599516SKenneth E. Jansenc.... return
271*59599516SKenneth E. Jansenc
272*59599516SKenneth E. Jansen        return
273*59599516SKenneth E. Jansen        end
274*59599516SKenneth E. Jansenc
275*59599516SKenneth E. Jansenc
276*59599516SKenneth E. Jansen
277*59599516SKenneth E. Jansen
278*59599516SKenneth E. Jansen      subroutine e3tau_nd  (rho,    cp,	    rmu,   T,
279*59599516SKenneth E. Jansen     &     u1,              u2,             u3,
280*59599516SKenneth E. Jansen     &     a1,              a2,             a3,
281*59599516SKenneth E. Jansen     &     con,             dxidx,          rLyi,
282*59599516SKenneth E. Jansen     &     rLymi,           Tau,            rk,
283*59599516SKenneth E. Jansen     &     giju,            rTLS,           raLS,
284*59599516SKenneth E. Jansen     &     cv,              compK,          pres,
285*59599516SKenneth E. Jansen     &     A0inv,           dVdY)
286*59599516SKenneth E. Jansenc
287*59599516SKenneth E. Jansenc----------------------------------------------------------------------
288*59599516SKenneth E. Jansenc
289*59599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator.
290*59599516SKenneth E. Jansenc We receive the regular residual L operator and a
291*59599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for
292*59599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past
293*59599516SKenneth E. Jansenc ENSA codes
294*59599516SKenneth E. Jansenc
295*59599516SKenneth E. Jansenc input:
296*59599516SKenneth E. Jansenc  rho    (npro)           : density
297*59599516SKenneth E. Jansenc  T      (npro)           : temperature
298*59599516SKenneth E. Jansenc  cp     (npro)           : specific heat at constant pressure
299*59599516SKenneth E. Jansenc  u1     (npro)           : x1-velocity component
300*59599516SKenneth E. Jansenc  u2     (npro)           : x2-velocity component
301*59599516SKenneth E. Jansenc  u3     (npro)           : x3-velocity component
302*59599516SKenneth E. Jansenc  dxidx  (npro,nsd,nsd)   : inverse of deformation gradient
303*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
304*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
305*59599516SKenneth E. Jansenc
306*59599516SKenneth E. Jansenc output:
307*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
308*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
309*59599516SKenneth E. Jansenc  Mtau    (npro,5,5)       : Matrix of Stabilized Parameters
310*59599516SKenneth E. Jansenc
311*59599516SKenneth E. Jansenc
312*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2tau.f)
313*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
314*59599516SKenneth E. Jansenc----------------------------------------------------------------------
315*59599516SKenneth E. Jansenc
316*59599516SKenneth E. Jansen      include "common.h"
317*59599516SKenneth E. Jansenc
318*59599516SKenneth E. Jansen      dimension rho(npro),                 con(npro),
319*59599516SKenneth E. Jansen     &            cp(npro),                  u1(npro),
320*59599516SKenneth E. Jansen     &            u2(npro),                  u3(npro),
321*59599516SKenneth E. Jansen     &            dxidx(npro,nsd,nsd),       rk(npro),
322*59599516SKenneth E. Jansen     &            rLyi(npro,nflow),
323*59599516SKenneth E. Jansen     &            rLymi(npro,nflow),         dVdY(npro,15),
324*59599516SKenneth E. Jansen     &            rTLS(npro),                raLS(npro),
325*59599516SKenneth E. Jansen     &            rLyitemp(npro,nflow),      detgijI(npro)
326*59599516SKenneth E. Jansenc
327*59599516SKenneth E. Jansen      dimension   rmu(npro),	 cv(npro),
328*59599516SKenneth E. Jansen     &		  gijd(npro,6),
329*59599516SKenneth E. Jansen     &		  fact(npro),	 giju(npro,6),
330*59599516SKenneth E. Jansen     &            A0inv(npro,15),gijdu(npro,6), compK(npro,10),
331*59599516SKenneth E. Jansen     &            a1(npro),    a2(npro),      a3(npro),
332*59599516SKenneth E. Jansen     &            T(npro),      pres(npro),     alphap(npro),
333*59599516SKenneth E. Jansen     &            betaT(npro),  gamb(npro),     c(npro),
334*59599516SKenneth E. Jansen     &            u(npro),      eb1(npro),      Q(npro,5,5),
335*59599516SKenneth E. Jansen     &            rlam(npro,5), eigmax(npro,5),   Pe(npro),
336*59599516SKenneth E. Jansen     &            Ak(npro),    B(npro),    D(npro),   E(npro),
337*59599516SKenneth E. Jansen     &            STau(npro,15),  Tau(npro,nflow,nflow)
338*59599516SKenneth E. Jansen
339*59599516SKenneth E. Jansen
340*59599516SKenneth E. Jansenc... build some necessary quantities at integration point:
341*59599516SKenneth E. Jansen
342*59599516SKenneth E. Jansenc      alfap = one / T
343*59599516SKenneth E. Jansenc      betaT = one / pres
344*59599516SKenneth E. Jansen      gamb  = gamma1
345*59599516SKenneth E. Jansen      c  = sqrt( (gamma * Rgas) * T )
346*59599516SKenneth E. Jansen      u = sqrt(u1**2+u2**2+u3**2)
347*59599516SKenneth E. Jansen      eb1 = cp*T - pt5*(u1**2+u2**2+u3**2)
348*59599516SKenneth E. Jansen
349*59599516SKenneth E. Jansenc... get eigenvectors for diagonalizing Tau_adv (e.v) before final rotations
350*59599516SKenneth E. Jansenc... Note: the ordering of eigenvectors corresponds to the following
351*59599516SKenneth E. Jansenc... ordering of the eigenvalues in the 1-st Euler Jacobian rotated to
352*59599516SKenneth E. Jansenc... the streamline coordinates
353*59599516SKenneth E. Jansen
354*59599516SKenneth E. Jansenc     |u+c      |
355*59599516SKenneth E. Jansenc     |   u     |
356*59599516SKenneth E. Jansenc     |    u    |
357*59599516SKenneth E. Jansenc     |     u   |  ! for origins of this see Beam, Warming, Hyett
358*59599516SKenneth E. Jansenc     |      u-c|  ! Mathematics of Computation vol. 29 No. 132 p. 1037
359*59599516SKenneth E. Jansen
360*59599516SKenneth E. Jansenc... different ordering assumed in Shakib/Johan entropy vars. code
361*59599516SKenneth E. Jansen
362*59599516SKenneth E. Jansen
363*59599516SKenneth E. Jansen
364*59599516SKenneth E. Jansen      call e3eig1 (rho,             T,               cp,
365*59599516SKenneth E. Jansen     &               gamb,            c,               u1,
366*59599516SKenneth E. Jansen     &               u2,              u3,              a1,
367*59599516SKenneth E. Jansen     &               a2,              a3,              eb1,
368*59599516SKenneth E. Jansen     &               dxidx,           u,               Q)
369*59599516SKenneth E. Jansen
370*59599516SKenneth E. Jansenc... Perform a Jacobi rotation on the Lambda matrix as well as adjust
371*59599516SKenneth E. Jansenc... the eigenvectors. Tau still remains in entropy variables.
372*59599516SKenneth E. Jansen
373*59599516SKenneth E. Jansen
374*59599516SKenneth E. Jansen
375*59599516SKenneth E. Jansen      call e3eig2 (u,               c,               a1,
376*59599516SKenneth E. Jansen     &             a2,              a3,              rlam,
377*59599516SKenneth E. Jansen     &             Q,               eigmax)
378*59599516SKenneth E. Jansen
379*59599516SKenneth E. Jansenc
380*59599516SKenneth E. Jansenc.... invert the eigenvalues
381*59599516SKenneth E. Jansenc
382*59599516SKenneth E. Jansen
383*59599516SKenneth E. Jansen
384*59599516SKenneth E. Jansen      where (rlam .gt. ((epsM**2) * eigmax))
385*59599516SKenneth E. Jansen         rlam = one / sqrt(rlam)
386*59599516SKenneth E. Jansen      elsewhere
387*59599516SKenneth E. Jansen         rlam = zero
388*59599516SKenneth E. Jansen      endwhere
389*59599516SKenneth E. Jansen
390*59599516SKenneth E. Jansenc
391*59599516SKenneth E. Jansenc.... flop count
392*59599516SKenneth E. Jansenc
393*59599516SKenneth E. Jansen        flops = flops + 65*npro
394*59599516SKenneth E. Jansen
395*59599516SKenneth E. Jansenc.... reduce the diffusion contribution
396*59599516SKenneth E. Jansenc
397*59599516SKenneth E. Jansen
398*59599516SKenneth E. Jansen        if (Navier .eq. 1) then
399*59599516SKenneth E. Jansenc
400*59599516SKenneth E. Jansenc.... calculate sigma
401*59599516SKenneth E. Jansenc
402*59599516SKenneth E. Jansen
403*59599516SKenneth E. Jansen           do i = 1, nflow       ! diff. corr for every mode of Tau
404*59599516SKenneth E. Jansen
405*59599516SKenneth E. Jansen              c(:) = pt33 * (
406*59599516SKenneth E. Jansen     &    Q(:,2,i) * ( compK(:, 1) * Q(:,2,i) + compK(:, 2) * Q(:,3,i)
407*59599516SKenneth E. Jansen     &               + compK(:, 4) * Q(:,4,i) + compK(:, 7) * Q(:,5,i) )
408*59599516SKenneth E. Jansen     &  + Q(:,3,i) * ( compK(:, 2) * Q(:,2,i) + compK(:, 3) * Q(:,3,i)
409*59599516SKenneth E. Jansen     &               + compK(:, 5) * Q(:,4,i) + compK(:, 8) * Q(:,5,i) )
410*59599516SKenneth E. Jansen     &  + Q(:,4,i) * ( compK(:, 4) * Q(:,2,i) + compK(:, 5) * Q(:,3,i)
411*59599516SKenneth E. Jansen     &               + compK(:, 6) * Q(:,4,i) + compK(:, 9) * Q(:,5,i) )
412*59599516SKenneth E. Jansen     &  + Q(:,5,i) * ( compK(:, 7) * Q(:,2,i) + compK(:, 8) * Q(:,3,i)
413*59599516SKenneth E. Jansen     &               + compK(:, 9) * Q(:,4,i) + compK(:,10) * Q(:,5,i) )
414*59599516SKenneth E. Jansen     &                  )
415*59599516SKenneth E. Jansen
416*59599516SKenneth E. Jansenc... get Peclet Number
417*59599516SKenneth E. Jansen
418*59599516SKenneth E. Jansen
419*59599516SKenneth E. Jansen              Pe(:) = one / (c(:)*rlam(:,i))
420*59599516SKenneth E. Jansen
421*59599516SKenneth E. Jansen
422*59599516SKenneth E. Jansenc
423*59599516SKenneth E. Jansenc...  branch out into different polynomial orders
424*59599516SKenneth E. Jansenc
425*59599516SKenneth E. Jansen
426*59599516SKenneth E. Jansen
427*59599516SKenneth E. Jansen              if (ipord == 1) then ! linears - l = l^a*(coth(Pe)-1/Pe)
428*59599516SKenneth E. Jansen                                   ! approx. l = l^a*min(1/3*Pe,1)
429*59599516SKenneth E. Jansen                 rlam(:,i) = rlam(:,i)*min(pt33*Pe(:),one)
430*59599516SKenneth E. Jansen
431*59599516SKenneth E. Jansen              endif
432*59599516SKenneth E. Jansen
433*59599516SKenneth E. Jansen              if (ipord == 2) then ! quads - Codina, CMAME' 92
434*59599516SKenneth E. Jansen                                ! approx. l = l^a*min(1/6*Pe,1/2)
435*59599516SKenneth E. Jansen                 rlam(:,i) = rlam(:,i)*min(pt33*pt5*Pe(:),pt5)
436*59599516SKenneth E. Jansen
437*59599516SKenneth E. Jansen              endif
438*59599516SKenneth E. Jansen
439*59599516SKenneth E. Jansen              if (ipord == 3) then ! cubics - Recent Work
440*59599516SKenneth E. Jansen                                ! l = l^a*1/Pe*b
441*59599516SKenneth E. Jansen                                ! b is a real root of the
442*59599516SKenneth E. Jansen                                ! following polynomial:
443*59599516SKenneth E. Jansen             !  b^3+(-Pe*coth(Pe)b^2+(6/15*Pe^2-Pe*coth(Pe)+1)b+
444*59599516SKenneth E. Jansen             !  +(-1/15*Pe^3*coth(Pe)+6/15*Pe^2-Pe*coth(Pe)+1) = 0
445*59599516SKenneth E. Jansen             !  proceed setting up newton iteration w/ initial
446*59599516SKenneth E. Jansen             !  guess coming from the quad estimate.
447*59599516SKenneth E. Jansen
448*59599516SKenneth E. Jansen                 Ak(:)=1.0      ! get parameters for iteration
449*59599516SKenneth E. Jansen
450*59599516SKenneth E. Jansen                 where(Pe.lt.5.0) ! approx. to hyp. cothangent
451*59599516SKenneth E. Jansen                    alphap = exp(Pe)
452*59599516SKenneth E. Jansen                    betaT = exp(-Pe)
453*59599516SKenneth E. Jansen                    c = (alphap+betaT)/(alphap-betaT)
454*59599516SKenneth E. Jansen                 elsewhere
455*59599516SKenneth E. Jansen                    c = one
456*59599516SKenneth E. Jansen                 endwhere
457*59599516SKenneth E. Jansen
458*59599516SKenneth E. Jansen                 B= -Pe*c + Ak
459*59599516SKenneth E. Jansen                 D= 0.4 * (Pe**2) + B
460*59599516SKenneth E. Jansen                 E=-0.066666667 * (Pe**3) * c +D
461*59599516SKenneth E. Jansen
462*59599516SKenneth E. Jansen                                ! initial guess, use betaT
463*59599516SKenneth E. Jansen                 betaT(:) = Pe(:)*min(pt33*pt5*Pe(:),pt5)
464*59599516SKenneth E. Jansen
465*59599516SKenneth E. Jansen                                ! iteration - 3 iterations sufficient
466*59599516SKenneth E. Jansen                 do j = 1, 3
467*59599516SKenneth E. Jansen
468*59599516SKenneth E. Jansen                    betaT=betaT-(Ak*betaT**3+B*betaT**2+D*betaT+E)/(3*Ak
469*59599516SKenneth E. Jansen     &                   *betaT**2+2*B*betaT+D)
470*59599516SKenneth E. Jansen                 enddo
471*59599516SKenneth E. Jansen
472*59599516SKenneth E. Jansen                 rlam(:,i) = rlam(:,i)*(1/Pe(:))*betaT(:)
473*59599516SKenneth E. Jansen
474*59599516SKenneth E. Jansen              endif             ! done w/ different polynomial orders
475*59599516SKenneth E. Jansen
476*59599516SKenneth E. Jansen           enddo                ! done with loop over dof's
477*59599516SKenneth E. Jansen
478*59599516SKenneth E. Jansen        endif                   ! done with diffusive correction
479*59599516SKenneth E. Jansen
480*59599516SKenneth E. Jansen
481*59599516SKenneth E. Jansenc
482*59599516SKenneth E. Jansenc.... form Tau (symmetric - entropy variables - then convert)
483*59599516SKenneth E. Jansenc
484*59599516SKenneth E. Jansen        STau(:, 1) = rlam(:,1) * Q(:,1,1) * Q(:,1,1) +
485*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,1,2) * Q(:,1,2) +
486*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,1,3) * Q(:,1,3) +
487*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,1,4) * Q(:,1,4) +
488*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,1,5) * Q(:,1,5)
489*59599516SKenneth E. Jansenc
490*59599516SKenneth E. Jansen        STau(:, 2) = rlam(:,1) * Q(:,1,1) * Q(:,2,1) +
491*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,1,2) * Q(:,2,2) +
492*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,1,3) * Q(:,2,3) +
493*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,1,4) * Q(:,2,4) +
494*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,1,5) * Q(:,2,5)
495*59599516SKenneth E. Jansenc
496*59599516SKenneth E. Jansen        STau(:, 3) = rlam(:,1) * Q(:,2,1) * Q(:,2,1) +
497*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,2,2) * Q(:,2,2) +
498*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,2,3) * Q(:,2,3) +
499*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,2,4) * Q(:,2,4) +
500*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,2,5) * Q(:,2,5)
501*59599516SKenneth E. Jansenc
502*59599516SKenneth E. Jansen        STau(:, 4) = rlam(:,1) * Q(:,1,1) * Q(:,3,1) +
503*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,1,2) * Q(:,3,2) +
504*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,1,3) * Q(:,3,3) +
505*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,1,4) * Q(:,3,4) +
506*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,1,5) * Q(:,3,5)
507*59599516SKenneth E. Jansenc
508*59599516SKenneth E. Jansen        STau(:, 5) = rlam(:,1) * Q(:,2,1) * Q(:,3,1) +
509*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,2,2) * Q(:,3,2) +
510*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,2,3) * Q(:,3,3) +
511*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,2,4) * Q(:,3,4) +
512*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,2,5) * Q(:,3,5)
513*59599516SKenneth E. Jansenc
514*59599516SKenneth E. Jansen        STau(:, 6) = rlam(:,1) * Q(:,3,1) * Q(:,3,1) +
515*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,3,2) * Q(:,3,2) +
516*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,3,3) * Q(:,3,3) +
517*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,3,4) * Q(:,3,4) +
518*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,3,5) * Q(:,3,5)
519*59599516SKenneth E. Jansenc
520*59599516SKenneth E. Jansen        STau(:, 7) = rlam(:,1) * Q(:,1,1) * Q(:,4,1) +
521*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,1,2) * Q(:,4,2) +
522*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,1,3) * Q(:,4,3) +
523*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,1,4) * Q(:,4,4) +
524*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,1,5) * Q(:,4,5)
525*59599516SKenneth E. Jansenc
526*59599516SKenneth E. Jansen        STau(:, 8) = rlam(:,1) * Q(:,2,1) * Q(:,4,1) +
527*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,2,2) * Q(:,4,2) +
528*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,2,3) * Q(:,4,3) +
529*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,2,4) * Q(:,4,4) +
530*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,2,5) * Q(:,4,5)
531*59599516SKenneth E. Jansenc
532*59599516SKenneth E. Jansen        STau(:, 9) = rlam(:,1) * Q(:,3,1) * Q(:,4,1) +
533*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,3,2) * Q(:,4,2) +
534*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,3,3) * Q(:,4,3) +
535*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,3,4) * Q(:,4,4) +
536*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,3,5) * Q(:,4,5)
537*59599516SKenneth E. Jansenc
538*59599516SKenneth E. Jansen        STau(:,10) = rlam(:,1) * Q(:,4,1) * Q(:,4,1) +
539*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,4,2) * Q(:,4,2) +
540*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,4,3) * Q(:,4,3) +
541*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,4,4) * Q(:,4,4) +
542*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,4,5) * Q(:,4,5)
543*59599516SKenneth E. Jansenc
544*59599516SKenneth E. Jansen        STau(:,11) = rlam(:,1) * Q(:,1,1) * Q(:,5,1) +
545*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,1,2) * Q(:,5,2) +
546*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,1,3) * Q(:,5,3) +
547*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,1,4) * Q(:,5,4) +
548*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,1,5) * Q(:,5,5)
549*59599516SKenneth E. Jansenc
550*59599516SKenneth E. Jansen        STau(:,12) = rlam(:,1) * Q(:,2,1) * Q(:,5,1) +
551*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,2,2) * Q(:,5,2) +
552*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,2,3) * Q(:,5,3) +
553*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,2,4) * Q(:,5,4) +
554*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,2,5) * Q(:,5,5)
555*59599516SKenneth E. Jansenc
556*59599516SKenneth E. Jansen        STau(:,13) = rlam(:,1) * Q(:,3,1) * Q(:,5,1) +
557*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,3,2) * Q(:,5,2) +
558*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,3,3) * Q(:,5,3) +
559*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,3,4) * Q(:,5,4) +
560*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,3,5) * Q(:,5,5)
561*59599516SKenneth E. Jansenc
562*59599516SKenneth E. Jansen        STau(:,14) = rlam(:,1) * Q(:,4,1) * Q(:,5,1) +
563*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,4,2) * Q(:,5,2) +
564*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,4,3) * Q(:,5,3) +
565*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,4,4) * Q(:,5,4) +
566*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,4,5) * Q(:,5,5)
567*59599516SKenneth E. Jansenc
568*59599516SKenneth E. Jansen        STau(:,15) = rlam(:,1) * Q(:,5,1) * Q(:,5,1) +
569*59599516SKenneth E. Jansen     &                rlam(:,2) * Q(:,5,2) * Q(:,5,2) +
570*59599516SKenneth E. Jansen     &                rlam(:,3) * Q(:,5,3) * Q(:,5,3) +
571*59599516SKenneth E. Jansen     &                rlam(:,4) * Q(:,5,4) * Q(:,5,4) +
572*59599516SKenneth E. Jansen     &                rlam(:,5) * Q(:,5,5) * Q(:,5,5)
573*59599516SKenneth E. Jansen
574*59599516SKenneth E. Jansen
575*59599516SKenneth E. Jansenc
576*59599516SKenneth E. Jansenc... Form Primitive Variable Tau as [dY/dV]*tilde{Tau},
577*59599516SKenneth E. Jansenc... see G.Hauke's thesis appendix for [dY/dV] matrix
578*59599516SKenneth E. Jansenc
579*59599516SKenneth E. Jansen        betaT = cp*T + pt5*(u1**2+u2**2+u3**2) !reuse betaT
580*59599516SKenneth E. Jansen
581*59599516SKenneth E. Jansen        Tau(:,1,1) = rho*T*(STau(:,1)+u1*STau(:,2)+
582*59599516SKenneth E. Jansen     &         u2*STau(:,4)+u3*STau(:,7)+betaT*STau(:,11))
583*59599516SKenneth E. Jansen        Tau(:,1,2) = rho*T*(STau(:,2)+u1*STau(:,3)+
584*59599516SKenneth E. Jansen     &         u2*STau(:,5)+u3*STau(:,8)+betaT*STau(:,12))
585*59599516SKenneth E. Jansen        Tau(:,1,3) = rho*T*(STau(:,4)+u1*STau(:,5)+
586*59599516SKenneth E. Jansen     &         u2*STau(:,6)+u3*STau(:,9)+betaT*STau(:,13))
587*59599516SKenneth E. Jansen        Tau(:,1,4) = rho*T*(STau(:,7)+u1*STau(:,8)+
588*59599516SKenneth E. Jansen     &         u2*STau(:,9)+u3*STau(:,10)+betaT*STau(:,14))
589*59599516SKenneth E. Jansen        Tau(:,1,5) = rho*T*(STau(:,11)+u1*STau(:,12)+
590*59599516SKenneth E. Jansen     &         u2*STau(:,13)+u3*STau(:,14)+betaT*STau(:,15))
591*59599516SKenneth E. Jansen
592*59599516SKenneth E. Jansen
593*59599516SKenneth E. Jansen        Tau(:,2,1) = T(:)*(STau(:,2) + u1(:)*STau(:,11))
594*59599516SKenneth E. Jansen        Tau(:,2,2) = T(:)*(STau(:,3) + u1(:)*STau(:,12))
595*59599516SKenneth E. Jansen        Tau(:,2,3) = T(:)*(STau(:,5) + u1(:)*STau(:,13))
596*59599516SKenneth E. Jansen        Tau(:,2,4) = T(:)*(STau(:,8) + u1(:)*STau(:,14))
597*59599516SKenneth E. Jansen        Tau(:,2,5) = T(:)*(STau(:,12) + u1(:)*STau(:,15))
598*59599516SKenneth E. Jansen
599*59599516SKenneth E. Jansen        Tau(:,3,1) = T(:)*(STau(:,4) + u2(:)*STau(:,11))
600*59599516SKenneth E. Jansen        Tau(:,3,2) = T(:)*(STau(:,5) + u2(:)*STau(:,12))
601*59599516SKenneth E. Jansen        Tau(:,3,3) = T(:)*(STau(:,6) + u2(:)*STau(:,13))
602*59599516SKenneth E. Jansen        Tau(:,3,4) = T(:)*(STau(:,9) + u2(:)*STau(:,14))
603*59599516SKenneth E. Jansen        Tau(:,3,5) = T(:)*(STau(:,13) + u2(:)*STau(:,15))
604*59599516SKenneth E. Jansen
605*59599516SKenneth E. Jansen        Tau(:,4,1) = T(:)*(STau(:,7) + u3(:)*STau(:,11))
606*59599516SKenneth E. Jansen        Tau(:,4,2) = T(:)*(STau(:,8) + u3(:)*STau(:,12))
607*59599516SKenneth E. Jansen        Tau(:,4,3) = T(:)*(STau(:,9) + u3(:)*STau(:,13))
608*59599516SKenneth E. Jansen        Tau(:,4,4) = T(:)*(STau(:,10) + u3(:)*STau(:,14))
609*59599516SKenneth E. Jansen        Tau(:,4,5) = T(:)*(STau(:,14) + u3(:)*STau(:,15))
610*59599516SKenneth E. Jansen
611*59599516SKenneth E. Jansen        betaT = T**2
612*59599516SKenneth E. Jansen
613*59599516SKenneth E. Jansen        Tau(:,5,1) = betaT(:)*STau(:,11)
614*59599516SKenneth E. Jansen        Tau(:,5,2) = betaT(:)*STau(:,12)
615*59599516SKenneth E. Jansen        Tau(:,5,3) = betaT(:)*STau(:,13)
616*59599516SKenneth E. Jansen        Tau(:,5,4) = betaT(:)*STau(:,14)
617*59599516SKenneth E. Jansen        Tau(:,5,5) = betaT(:)*STau(:,15)
618*59599516SKenneth E. Jansen
619*59599516SKenneth E. Jansen
620*59599516SKenneth E. Jansenc
621*59599516SKenneth E. Jansenc...  done with conversion to pressure primitive variables
622*59599516SKenneth E. Jansenc...  now need to interface with the rest of the computations
623*59599516SKenneth E. Jansenc
624*59599516SKenneth E. Jansen
625*59599516SKenneth E. Jansenc...  finally multiply this tau matrix times the
626*59599516SKenneth E. Jansenc     two residual vectors
627*59599516SKenneth E. Jansenc
628*59599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi)
629*59599516SKenneth E. Jansenc ... storing rLyi for the DC term
630*59599516SKenneth E. Jansen
631*59599516SKenneth E. Jansen
632*59599516SKenneth E. Jansen        if(iDC .ne. 0) rLyitemp=rLyi
633*59599516SKenneth E. Jansen
634*59599516SKenneth E. Jansen        if(ires.eq.3 .or. ires .eq. 1) then
635*59599516SKenneth E. Jansen           eigmax = rLyi  !reuse
636*59599516SKenneth E. Jansen           rLyi = zero
637*59599516SKenneth E. Jansen           do i = 1, nflow
638*59599516SKenneth E. Jansen              do  j = 1, nflow
639*59599516SKenneth E. Jansen                 rLyi(:,i) = rLyi(:,i) + Tau(:,i,j) * eigmax(:,j)
640*59599516SKenneth E. Jansen              enddo
641*59599516SKenneth E. Jansen           enddo
642*59599516SKenneth E. Jansen        endif
643*59599516SKenneth E. Jansen
644*59599516SKenneth E. Jansen
645*59599516SKenneth E. Jansen        if(iDC .ne. 0) then
646*59599516SKenneth E. Jansenc.....calculation of rTLS & raLS for DC term
647*59599516SKenneth E. Jansenc
648*59599516SKenneth E. Jansenc.....calculation of (Ly - S).tau^tilda*(Ly - S)
649*59599516SKenneth E. Jansenc
650*59599516SKenneth E. Jansen           rTLS = rLYItemp(:,1)       * (rLyi(:,1)*dVdY(:,1)
651*59599516SKenneth E. Jansen     &        + dVdY(:,2)*rLyi(:,2) + dVdY(:,4)*rLyi(:,3)
652*59599516SKenneth E. Jansen     &        + rLyi(:,4)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5))
653*59599516SKenneth E. Jansen     &        + rLyitemp(:,2)       * (rLyi(:,2)*dVdY(:,3)
654*59599516SKenneth E. Jansen     &        + rLyi(:,3)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4)
655*59599516SKenneth E. Jansen     &        + rLyi(:,5)*dVdY(:,12))
656*59599516SKenneth E. Jansen     &        + rLyitemp(:,3)       * (rLyi(:,3)*dVdY(:,6)
657*59599516SKenneth E. Jansen     &        + dVdY(:,9)*rLyi(:,4) + dVdY(:,13)*rLyi(:,5))
658*59599516SKenneth E. Jansen     &        + rLyitemp(:,4)       * (rLyi(:,4)*dVdY(:,10)
659*59599516SKenneth E. Jansen     &        + dVdY(:,14)*rLyi(:,5))
660*59599516SKenneth E. Jansen     &        + rLyitemp(:,5)       * (dVdY(:,15)*rLyi(:,5))
661*59599516SKenneth E. Jansen
662*59599516SKenneth E. Jansenc
663*59599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S)
664*59599516SKenneth E. Jansenc
665*59599516SKenneth E. Jansen           raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15)
666*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14)
667*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6)
668*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10)
669*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11)
670*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7)
671*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13)
672*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12)
673*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8)
674*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9)
675*59599516SKenneth E. Jansen     &          + rLyitemp(:,1)**2*A0inv(:,1)
676*59599516SKenneth E. Jansen     &          + rLyitemp(:,2)**2*A0inv(:,2)
677*59599516SKenneth E. Jansen     &          + rLyitemp(:,3)**2*A0inv(:,3)
678*59599516SKenneth E. Jansen     &          + rLyitemp(:,4)**2*A0inv(:,4)
679*59599516SKenneth E. Jansen     &          + rLyitemp(:,5)**2*A0inv(:,5)
680*59599516SKenneth E. Jansenc
681*59599516SKenneth E. Jansenc.....****************calculation of giju for DC term***************
682*59599516SKenneth E. Jansenc
683*59599516SKenneth E. Jansenc.... for the notation of different numbering
684*59599516SKenneth E. Jansenc
685*59599516SKenneth E. Jansen           call e3gijd( dxidx, gijd )
686*59599516SKenneth E. Jansen
687*59599516SKenneth E. Jansen           gijdu(:,1)=gijd(:,1)
688*59599516SKenneth E. Jansen           gijdu(:,2)=gijd(:,3)
689*59599516SKenneth E. Jansen           gijdu(:,3)=gijd(:,6)
690*59599516SKenneth E. Jansen           gijdu(:,4)=gijd(:,2)
691*59599516SKenneth E. Jansen           gijdu(:,5)=gijd(:,4)
692*59599516SKenneth E. Jansen           gijdu(:,6)=gijd(:,5)
693*59599516SKenneth E. Jansenc
694*59599516SKenneth E. Jansenc
695*59599516SKenneth E. Jansen           detgijI = one/(
696*59599516SKenneth E. Jansen     &          gijdu(:,1) * gijdu(:,2) * gijdu(:,3)
697*59599516SKenneth E. Jansen     &          - gijdu(:,1) * gijdu(:,6) * gijdu(:,6)
698*59599516SKenneth E. Jansen     &          - gijdu(:,4) * gijdu(:,4) * gijdu(:,3)
699*59599516SKenneth E. Jansen     &          + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two
700*59599516SKenneth E. Jansen     &          - gijdu(:,5) * gijdu(:,5) * gijdu(:,2)
701*59599516SKenneth E. Jansen     &          )
702*59599516SKenneth E. Jansen           giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3)
703*59599516SKenneth E. Jansen     &               - gijdu(:,6)**2)
704*59599516SKenneth E. Jansen           giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3)
705*59599516SKenneth E. Jansen     &               - gijdu(:,5)**2)
706*59599516SKenneth E. Jansen           giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2)
707*59599516SKenneth E. Jansen     &               - gijdu(:,4)**2)
708*59599516SKenneth E. Jansen           giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6)
709*59599516SKenneth E. Jansen     &               - gijdu(:,4)*gijdu(:,3) )
710*59599516SKenneth E. Jansen           giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6)
711*59599516SKenneth E. Jansen     &               - gijdu(:,5)*gijdu(:,2) )
712*59599516SKenneth E. Jansen           giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5)
713*59599516SKenneth E. Jansen     &               - gijdu(:,1)*gijdu(:,6) )
714*59599516SKenneth E. Jansenc
715*59599516SKenneth E. Jansen        endif                   ! end of iDC.ne.0
716*59599516SKenneth E. Jansenc
717*59599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi)
718*59599516SKenneth E. Jansenc
719*59599516SKenneth E. Jansen        if(ires.ne.1 ) then
720*59599516SKenneth E. Jansen           eigmax = rLymi
721*59599516SKenneth E. Jansen           rLymi = zero
722*59599516SKenneth E. Jansen           do i = 1, nflow
723*59599516SKenneth E. Jansen              do j = 1, nflow
724*59599516SKenneth E. Jansen                 rLymi(:,i) = rLymi(:,i) + Tau(:,i,j) * eigmax(:,j)
725*59599516SKenneth E. Jansen              enddo
726*59599516SKenneth E. Jansen           enddo
727*59599516SKenneth E. Jansen        endif
728*59599516SKenneth E. Jansenc
729*59599516SKenneth E. Jansenc  INCORRECT NOW         flops = flops + 255*npro
730*59599516SKenneth E. Jansenc
731*59599516SKenneth E. Jansenc
732*59599516SKenneth E. Jansenc.... return
733*59599516SKenneth E. Jansenc
734*59599516SKenneth E. Jansen      return
735*59599516SKenneth E. Jansen      end
736*59599516SKenneth E. Jansenc
737*59599516SKenneth E. Jansen
738*59599516SKenneth E. Jansen
739*59599516SKenneth E. Jansen      subroutine e3tau_nd_modal  (rho,    cp,	    rmu,   T,
740*59599516SKenneth E. Jansen     &     u1,              u2,             u3,
741*59599516SKenneth E. Jansen     &     a1,              a2,             a3,
742*59599516SKenneth E. Jansen     &     con,             dxidx,          rLyi,
743*59599516SKenneth E. Jansen     &     rLymi,           Tau,            rk,
744*59599516SKenneth E. Jansen     &     giju,            rTLS,           raLS,
745*59599516SKenneth E. Jansen     &     cv,              compK,          pres,
746*59599516SKenneth E. Jansen     &     A0inv,           dVdY)
747*59599516SKenneth E. Jansenc
748*59599516SKenneth E. Jansenc----------------------------------------------------------------------
749*59599516SKenneth E. Jansenc
750*59599516SKenneth E. Jansenc     This routine computes the diagonal Tau for least-squares operator.
751*59599516SKenneth E. Jansenc
752*59599516SKenneth E. Jansenc We receive the regular residual L operator and a
753*59599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for
754*59599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past
755*59599516SKenneth E. Jansenc ENSA codes
756*59599516SKenneth E. Jansenc
757*59599516SKenneth E. Jansenc input:
758*59599516SKenneth E. Jansenc  rho    (npro)           : density
759*59599516SKenneth E. Jansenc  T      (npro)           : temperature
760*59599516SKenneth E. Jansenc  cp     (npro)           : specific heat at constant pressure
761*59599516SKenneth E. Jansenc  u1     (npro)           : x1-velocity component
762*59599516SKenneth E. Jansenc  u2     (npro)           : x2-velocity component
763*59599516SKenneth E. Jansenc  u3     (npro)           : x3-velocity component
764*59599516SKenneth E. Jansenc  dxidx  (npro,nsd,nsd)   : inverse of deformation gradient
765*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
766*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
767*59599516SKenneth E. Jansenc
768*59599516SKenneth E. Jansenc output:
769*59599516SKenneth E. Jansenc  rLyi   (npro,nflow)      : least-squares residual vector
770*59599516SKenneth E. Jansenc  rLymi   (npro,nflow)     : modified least-squares residual vector
771*59599516SKenneth E. Jansenc  Mtau    (npro,5,5)       : Matrix of Stabilized Parameters
772*59599516SKenneth E. Jansenc
773*59599516SKenneth E. Jansenc
774*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2tau.f)
775*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
776*59599516SKenneth E. Jansenc----------------------------------------------------------------------
777*59599516SKenneth E. Jansenc
778*59599516SKenneth E. Jansen      include "common.h"
779*59599516SKenneth E. Jansenc
780*59599516SKenneth E. Jansen      dimension rho(npro),                 con(npro),
781*59599516SKenneth E. Jansen     &            cp(npro),                  u1(npro),
782*59599516SKenneth E. Jansen     &            u2(npro),                  u3(npro),
783*59599516SKenneth E. Jansen     &            dxidx(npro,nsd,nsd),       rk(npro),
784*59599516SKenneth E. Jansen     &            rLyi(npro,nflow,ipord),
785*59599516SKenneth E. Jansen     &            rLymi(npro,nflow,ipord),   dVdY(npro,15),
786*59599516SKenneth E. Jansen     &            rTLS(npro),                raLS(npro),
787*59599516SKenneth E. Jansen     &            rLyitemp(npro,nflow),      detgijI(npro)
788*59599516SKenneth E. Jansenc
789*59599516SKenneth E. Jansen      dimension   rmu(npro),	 cv(npro),
790*59599516SKenneth E. Jansen     &		  gijd(npro,6),
791*59599516SKenneth E. Jansen     &		  fact(npro),	 giju(npro,6),
792*59599516SKenneth E. Jansen     &            A0inv(npro,15),gijdu(npro,6), compK(npro,10),
793*59599516SKenneth E. Jansen     &            a1(npro),    a2(npro),      a3(npro),
794*59599516SKenneth E. Jansen     &            T(npro),      pres(npro),     alphap(npro),
795*59599516SKenneth E. Jansen     &            betaT(npro),  gamb(npro),     c(npro),
796*59599516SKenneth E. Jansen     &            u(npro),      eb1(npro),      Q(npro,5,5),
797*59599516SKenneth E. Jansen     &            rlam(npro,5), eigmax(npro,5),   Pe(npro),
798*59599516SKenneth E. Jansen     &            STau(npro,15, ipord),  Tau(npro,nflow,nflow,ipord),
799*59599516SKenneth E. Jansen     &            rlamtmp(npro,5,ipord)
800*59599516SKenneth E. Jansen
801*59599516SKenneth E. Jansen
802*59599516SKenneth E. Jansenc... build some necessary quantities at integration point:
803*59599516SKenneth E. Jansen
804*59599516SKenneth E. Jansenc      alfap = one / T
805*59599516SKenneth E. Jansenc      betaT = one / pres
806*59599516SKenneth E. Jansen      gamb  = gamma1
807*59599516SKenneth E. Jansen      c  = sqrt( (gamma * Rgas) * T )
808*59599516SKenneth E. Jansen      u = sqrt(u1**2+u2**2+u3**2)
809*59599516SKenneth E. Jansen      eb1 = cp*T - pt5*(u1**2+u2**2+u3**2)
810*59599516SKenneth E. Jansen
811*59599516SKenneth E. Jansenc... get eigenvectors for diagonalizing Tau_adv (e.v) before final rotations
812*59599516SKenneth E. Jansenc... Note: the ordering of eigenvectors corresponds to the following
813*59599516SKenneth E. Jansenc... ordering of the eigenvalues in the 1-st Euler Jacobian rotated to
814*59599516SKenneth E. Jansenc... the streamline coordinates
815*59599516SKenneth E. Jansen
816*59599516SKenneth E. Jansenc     |u+c      |
817*59599516SKenneth E. Jansenc     |   u     |
818*59599516SKenneth E. Jansenc     |    u    |
819*59599516SKenneth E. Jansenc     |     u   |  ! for origins of this see Beam, Warming, Hyett
820*59599516SKenneth E. Jansenc     |      u-c|  ! Mathematics of Computation vol. 29 No. 132 p. 1037
821*59599516SKenneth E. Jansen
822*59599516SKenneth E. Jansenc... different ordering assumed in Shakib/Johan entropy vars. code
823*59599516SKenneth E. Jansen
824*59599516SKenneth E. Jansen
825*59599516SKenneth E. Jansen
826*59599516SKenneth E. Jansen      call e3eig1 (rho,             T,               cp,
827*59599516SKenneth E. Jansen     &               gamb,            c,               u1,
828*59599516SKenneth E. Jansen     &               u2,              u3,              a1,
829*59599516SKenneth E. Jansen     &               a2,              a3,              eb1,
830*59599516SKenneth E. Jansen     &               dxidx,           u,               Q)
831*59599516SKenneth E. Jansen
832*59599516SKenneth E. Jansenc... Perform a Jacobi rotation on the Lambda matrix as well as adjust
833*59599516SKenneth E. Jansenc... the eigenvectors. Tau still remains in entropy variables.
834*59599516SKenneth E. Jansen
835*59599516SKenneth E. Jansen
836*59599516SKenneth E. Jansen
837*59599516SKenneth E. Jansen      call e3eig2 (u,               c,               a1,
838*59599516SKenneth E. Jansen     &             a2,              a3,              rlam,
839*59599516SKenneth E. Jansen     &             Q,               eigmax)
840*59599516SKenneth E. Jansen
841*59599516SKenneth E. Jansenc
842*59599516SKenneth E. Jansenc.... invert the eigenvalues
843*59599516SKenneth E. Jansenc
844*59599516SKenneth E. Jansen
845*59599516SKenneth E. Jansen
846*59599516SKenneth E. Jansen      where (rlam .gt. ((epsM**2) * eigmax))
847*59599516SKenneth E. Jansen         rlam = one / sqrt(rlam)
848*59599516SKenneth E. Jansen      elsewhere
849*59599516SKenneth E. Jansen         rlam = zero
850*59599516SKenneth E. Jansen      endwhere
851*59599516SKenneth E. Jansen
852*59599516SKenneth E. Jansen      do i = 1, ipord
853*59599516SKenneth E. Jansen         rlamtmp(:,:,i) = rlam(:,:)
854*59599516SKenneth E. Jansen      enddo
855*59599516SKenneth E. Jansen
856*59599516SKenneth E. Jansenc
857*59599516SKenneth E. Jansenc.... flop count
858*59599516SKenneth E. Jansenc
859*59599516SKenneth E. Jansen        flops = flops + 65*npro
860*59599516SKenneth E. Jansen
861*59599516SKenneth E. Jansenc.... reduce the diffusion contribution
862*59599516SKenneth E. Jansenc
863*59599516SKenneth E. Jansen
864*59599516SKenneth E. Jansen        if (Navier .eq. 1) then
865*59599516SKenneth E. Jansenc
866*59599516SKenneth E. Jansenc.... calculate sigma
867*59599516SKenneth E. Jansenc
868*59599516SKenneth E. Jansen
869*59599516SKenneth E. Jansen           do i = 1, nflow       ! diff. corr for every mode of Tau
870*59599516SKenneth E. Jansen
871*59599516SKenneth E. Jansen              c(:) = pt33 * (
872*59599516SKenneth E. Jansen     &    Q(:,2,i) * ( compK(:, 1) * Q(:,2,i) + compK(:, 2) * Q(:,3,i)
873*59599516SKenneth E. Jansen     &               + compK(:, 4) * Q(:,4,i) + compK(:, 7) * Q(:,5,i) )
874*59599516SKenneth E. Jansen     &  + Q(:,3,i) * ( compK(:, 2) * Q(:,2,i) + compK(:, 3) * Q(:,3,i)
875*59599516SKenneth E. Jansen     &               + compK(:, 5) * Q(:,4,i) + compK(:, 8) * Q(:,5,i) )
876*59599516SKenneth E. Jansen     &  + Q(:,4,i) * ( compK(:, 4) * Q(:,2,i) + compK(:, 5) * Q(:,3,i)
877*59599516SKenneth E. Jansen     &               + compK(:, 6) * Q(:,4,i) + compK(:, 9) * Q(:,5,i) )
878*59599516SKenneth E. Jansen     &  + Q(:,5,i) * ( compK(:, 7) * Q(:,2,i) + compK(:, 8) * Q(:,3,i)
879*59599516SKenneth E. Jansen     &               + compK(:, 9) * Q(:,4,i) + compK(:,10) * Q(:,5,i) )
880*59599516SKenneth E. Jansen     &                  )
881*59599516SKenneth E. Jansen
882*59599516SKenneth E. Jansenc... get Peclet Number
883*59599516SKenneth E. Jansen
884*59599516SKenneth E. Jansen
885*59599516SKenneth E. Jansen              Pe(:) = one / (c(:)*rlam(:,i))
886*59599516SKenneth E. Jansen
887*59599516SKenneth E. Jansen
888*59599516SKenneth E. Jansenc
889*59599516SKenneth E. Jansenc...  branch out into different polynomial orders
890*59599516SKenneth E. Jansenc
891*59599516SKenneth E. Jansen
892*59599516SKenneth E. Jansen
893*59599516SKenneth E. Jansen              if (ipord == 1) then ! linears - l = l^a*(coth(Pe)-1/Pe)
894*59599516SKenneth E. Jansen                                   ! approx. l = l^a*min(1/3*Pe,1)
895*59599516SKenneth E. Jansen              rlamtmp(:,i,1) = rlamtmp(:,i,1)*min(pt33*Pe(:),one)
896*59599516SKenneth E. Jansen
897*59599516SKenneth E. Jansen              endif
898*59599516SKenneth E. Jansen
899*59599516SKenneth E. Jansen              if (ipord == 2) then
900*59599516SKenneth E. Jansen
901*59599516SKenneth E. Jansen              rlamtmp(:,i,1) = rlamtmp(:,i,1)*min((1.0/15.0)*Pe(:),pt33)
902*59599516SKenneth E. Jansen              rlamtmp(:,i,2) = rlamtmp(:,i,2)*min((1.0/12.0)*Pe(:),pt5)
903*59599516SKenneth E. Jansen
904*59599516SKenneth E. Jansen              endif
905*59599516SKenneth E. Jansen
906*59599516SKenneth E. Jansen              if (ipord == 3) then ! cubics - Recent Work
907*59599516SKenneth E. Jansen
908*59599516SKenneth E. Jansen                 do ii = 1, npro
909*59599516SKenneth E. Jansen                    if (Pe(ii).lt.3.0) then
910*59599516SKenneth E. Jansen                       rlamtmp(ii,i,1) = rlamtmp(ii,i,1)*
911*59599516SKenneth E. Jansen     &                      0.00054*Pe(ii)**2
912*59599516SKenneth E. Jansen                    endif
913*59599516SKenneth E. Jansen
914*59599516SKenneth E. Jansen                    if ((Pe(ii).ge.3).and.(Pe(ii).lt.17.20)) then
915*59599516SKenneth E. Jansen                       rlamtmp(ii,i,1) = rlamtmp(ii,i,1)*(0.0114*Pe(ii)
916*59599516SKenneth E. Jansen     &                      -0.0294)
917*59599516SKenneth E. Jansen                    endif
918*59599516SKenneth E. Jansen
919*59599516SKenneth E. Jansen                    if (Pe(ii).ge.17.20) then
920*59599516SKenneth E. Jansen                       rlamtmp(ii,i,1) = rlamtmp(ii,i,1)*(1.0/6.0)
921*59599516SKenneth E. Jansen                    endif
922*59599516SKenneth E. Jansen
923*59599516SKenneth E. Jansen                 enddo
924*59599516SKenneth E. Jansen
925*59599516SKenneth E. Jansen                 rlamtmp(:,i,2) = rlamtmp(:,i,2)*min((1.0/45.0)*Pe(:)
926*59599516SKenneth E. Jansen     &                ,0.2d0)
927*59599516SKenneth E. Jansen                 rlamtmp(:,i,3) = rlamtmp(:,i,3)*min((1.0/25.0)*Pe(:)
928*59599516SKenneth E. Jansen     &                ,pt33)
929*59599516SKenneth E. Jansen
930*59599516SKenneth E. Jansen
931*59599516SKenneth E. Jansen              endif             ! done w/ different polynomial orders
932*59599516SKenneth E. Jansen
933*59599516SKenneth E. Jansen           enddo                ! done with loop over dof's
934*59599516SKenneth E. Jansen
935*59599516SKenneth E. Jansen        endif                   ! done with diffusive correction
936*59599516SKenneth E. Jansen
937*59599516SKenneth E. Jansen
938*59599516SKenneth E. Jansenc
939*59599516SKenneth E. Jansenc.... form Tau (symmetric - entropy variables - then convert)
940*59599516SKenneth E. Jansenc
941*59599516SKenneth E. Jansen        do i = 1, ipord
942*59599516SKenneth E. Jansen
943*59599516SKenneth E. Jansen        STau(:, 1, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,1,1) +
944*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,1,2) * Q(:,1,2) +
945*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,1,3) * Q(:,1,3) +
946*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,1,4) * Q(:,1,4) +
947*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,1,5) * Q(:,1,5)
948*59599516SKenneth E. Jansenc
949*59599516SKenneth E. Jansen        STau(:, 2, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,2,1) +
950*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,1,2) * Q(:,2,2) +
951*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,1,3) * Q(:,2,3) +
952*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,1,4) * Q(:,2,4) +
953*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,1,5) * Q(:,2,5)
954*59599516SKenneth E. Jansenc
955*59599516SKenneth E. Jansen        STau(:, 3, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,2,1) +
956*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,2,2) * Q(:,2,2) +
957*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,2,3) * Q(:,2,3) +
958*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,2,4) * Q(:,2,4) +
959*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,2,5) * Q(:,2,5)
960*59599516SKenneth E. Jansenc
961*59599516SKenneth E. Jansen        STau(:, 4, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,3,1) +
962*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,1,2) * Q(:,3,2) +
963*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,1,3) * Q(:,3,3) +
964*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,1,4) * Q(:,3,4) +
965*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,1,5) * Q(:,3,5)
966*59599516SKenneth E. Jansenc
967*59599516SKenneth E. Jansen        STau(:, 5, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,3,1) +
968*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,2,2) * Q(:,3,2) +
969*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,2,3) * Q(:,3,3) +
970*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,2,4) * Q(:,3,4) +
971*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,2,5) * Q(:,3,5)
972*59599516SKenneth E. Jansenc
973*59599516SKenneth E. Jansen        STau(:, 6, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,3,1) +
974*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,3,2) * Q(:,3,2) +
975*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,3,3) * Q(:,3,3) +
976*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,3,4) * Q(:,3,4) +
977*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,3,5) * Q(:,3,5)
978*59599516SKenneth E. Jansenc
979*59599516SKenneth E. Jansen        STau(:, 7, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,4,1) +
980*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,1,2) * Q(:,4,2) +
981*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,1,3) * Q(:,4,3) +
982*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,1,4) * Q(:,4,4) +
983*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,1,5) * Q(:,4,5)
984*59599516SKenneth E. Jansenc
985*59599516SKenneth E. Jansen        STau(:, 8, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,4,1) +
986*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,2,2) * Q(:,4,2) +
987*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,2,3) * Q(:,4,3) +
988*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,2,4) * Q(:,4,4) +
989*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,2,5) * Q(:,4,5)
990*59599516SKenneth E. Jansenc
991*59599516SKenneth E. Jansen        STau(:, 9, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,4,1) +
992*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,3,2) * Q(:,4,2) +
993*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,3,3) * Q(:,4,3) +
994*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,3,4) * Q(:,4,4) +
995*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,3,5) * Q(:,4,5)
996*59599516SKenneth E. Jansenc
997*59599516SKenneth E. Jansen        STau(:,10, i) = rlamtmp(:,1,i) * Q(:,4,1) * Q(:,4,1) +
998*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,4,2) * Q(:,4,2) +
999*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,4,3) * Q(:,4,3) +
1000*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,4,4) * Q(:,4,4) +
1001*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,4,5) * Q(:,4,5)
1002*59599516SKenneth E. Jansenc
1003*59599516SKenneth E. Jansen        STau(:,11, i) = rlamtmp(:,1,i) * Q(:,1,1) * Q(:,5,1) +
1004*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,1,2) * Q(:,5,2) +
1005*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,1,3) * Q(:,5,3) +
1006*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,1,4) * Q(:,5,4) +
1007*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,1,5) * Q(:,5,5)
1008*59599516SKenneth E. Jansenc
1009*59599516SKenneth E. Jansen        STau(:,12, i) = rlamtmp(:,1,i) * Q(:,2,1) * Q(:,5,1) +
1010*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,2,2) * Q(:,5,2) +
1011*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,2,3) * Q(:,5,3) +
1012*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,2,4) * Q(:,5,4) +
1013*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,2,5) * Q(:,5,5)
1014*59599516SKenneth E. Jansenc
1015*59599516SKenneth E. Jansen        STau(:,13, i) = rlamtmp(:,1,i) * Q(:,3,1) * Q(:,5,1) +
1016*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,3,2) * Q(:,5,2) +
1017*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,3,3) * Q(:,5,3) +
1018*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,3,4) * Q(:,5,4) +
1019*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,3,5) * Q(:,5,5)
1020*59599516SKenneth E. Jansenc
1021*59599516SKenneth E. Jansen        STau(:,14, i) = rlamtmp(:,1,i) * Q(:,4,1) * Q(:,5,1) +
1022*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,4,2) * Q(:,5,2) +
1023*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,4,3) * Q(:,5,3) +
1024*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,4,4) * Q(:,5,4) +
1025*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,4,5) * Q(:,5,5)
1026*59599516SKenneth E. Jansenc
1027*59599516SKenneth E. Jansen        STau(:,15, i) = rlamtmp(:,1,i) * Q(:,5,1) * Q(:,5,1) +
1028*59599516SKenneth E. Jansen     &                rlamtmp(:,2,i) * Q(:,5,2) * Q(:,5,2) +
1029*59599516SKenneth E. Jansen     &                rlamtmp(:,3,i) * Q(:,5,3) * Q(:,5,3) +
1030*59599516SKenneth E. Jansen     &                rlamtmp(:,4,i) * Q(:,5,4) * Q(:,5,4) +
1031*59599516SKenneth E. Jansen     &                rlamtmp(:,5,i) * Q(:,5,5) * Q(:,5,5)
1032*59599516SKenneth E. Jansen
1033*59599516SKenneth E. Jansen      enddo
1034*59599516SKenneth E. Jansen
1035*59599516SKenneth E. Jansenc
1036*59599516SKenneth E. Jansenc... Form Primitive Variable Tau as [dY/dV]*tilde{Tau},
1037*59599516SKenneth E. Jansenc... see G.Hauke's thesis appendix for [dY/dV] matrix
1038*59599516SKenneth E. Jansenc
1039*59599516SKenneth E. Jansen      do k = 1, ipord
1040*59599516SKenneth E. Jansen
1041*59599516SKenneth E. Jansen         betaT = cp*T + pt5*(u1**2+u2**2+u3**2) !reuse betaT
1042*59599516SKenneth E. Jansen
1043*59599516SKenneth E. Jansen         Tau(:,1,1,k) = rho*T*(STau(:,1,k)+u1*STau(:,2,k)+
1044*59599516SKenneth E. Jansen     &        u2*STau(:,4,k)+u3*STau(:,7,k)+betaT*STau(:,11,k))
1045*59599516SKenneth E. Jansen         Tau(:,1,2,k) = rho*T*(STau(:,2,k)+u1*STau(:,3,k)+
1046*59599516SKenneth E. Jansen     &        u2*STau(:,5,k)+u3*STau(:,8,k)+betaT*STau(:,12,k))
1047*59599516SKenneth E. Jansen         Tau(:,1,3,k) = rho*T*(STau(:,4,k)+u1*STau(:,5,k)+
1048*59599516SKenneth E. Jansen     &        u2*STau(:,6,k)+u3*STau(:,9,k)+betaT*STau(:,13,k))
1049*59599516SKenneth E. Jansen         Tau(:,1,4,k) = rho*T*(STau(:,7,k)+u1*STau(:,8,k)+
1050*59599516SKenneth E. Jansen     &        u2*STau(:,9,k)+u3*STau(:,10,k)+betaT*STau(:,14,k))
1051*59599516SKenneth E. Jansen         Tau(:,1,5,k) = rho*T*(STau(:,11,k)+u1*STau(:,12,k)+
1052*59599516SKenneth E. Jansen     &        u2*STau(:,13,k)+u3*STau(:,14,k)+betaT*STau(:,15,k))
1053*59599516SKenneth E. Jansen
1054*59599516SKenneth E. Jansen
1055*59599516SKenneth E. Jansen         Tau(:,2,1,k) = T(:)*(STau(:,2,k) + u1(:)*STau(:,11,k))
1056*59599516SKenneth E. Jansen         Tau(:,2,2,k) = T(:)*(STau(:,3,k) + u1(:)*STau(:,12,k))
1057*59599516SKenneth E. Jansen         Tau(:,2,3,k) = T(:)*(STau(:,5,k) + u1(:)*STau(:,13,k))
1058*59599516SKenneth E. Jansen         Tau(:,2,4,k) = T(:)*(STau(:,8,k) + u1(:)*STau(:,14,k))
1059*59599516SKenneth E. Jansen         Tau(:,2,5,k) = T(:)*(STau(:,12,k) + u1(:)*STau(:,15,k))
1060*59599516SKenneth E. Jansen
1061*59599516SKenneth E. Jansen         Tau(:,3,1,k) = T(:)*(STau(:,4,k) + u2(:)*STau(:,11,k))
1062*59599516SKenneth E. Jansen         Tau(:,3,2,k) = T(:)*(STau(:,5,k) + u2(:)*STau(:,12,k))
1063*59599516SKenneth E. Jansen         Tau(:,3,3,k) = T(:)*(STau(:,6,k) + u2(:)*STau(:,13,k))
1064*59599516SKenneth E. Jansen         Tau(:,3,4,k) = T(:)*(STau(:,9,k) + u2(:)*STau(:,14,k))
1065*59599516SKenneth E. Jansen         Tau(:,3,5,k) = T(:)*(STau(:,13,k) + u2(:)*STau(:,15,k))
1066*59599516SKenneth E. Jansen
1067*59599516SKenneth E. Jansen         Tau(:,4,1,k) = T(:)*(STau(:,7,k) + u3(:)*STau(:,11,k))
1068*59599516SKenneth E. Jansen         Tau(:,4,2,k) = T(:)*(STau(:,8,k) + u3(:)*STau(:,12,k))
1069*59599516SKenneth E. Jansen         Tau(:,4,3,k) = T(:)*(STau(:,9,k) + u3(:)*STau(:,13,k))
1070*59599516SKenneth E. Jansen         Tau(:,4,4,k) = T(:)*(STau(:,10,k) + u3(:)*STau(:,14,k))
1071*59599516SKenneth E. Jansen         Tau(:,4,5,k) = T(:)*(STau(:,14,k) + u3(:)*STau(:,15,k))
1072*59599516SKenneth E. Jansen
1073*59599516SKenneth E. Jansen         betaT = T**2
1074*59599516SKenneth E. Jansen
1075*59599516SKenneth E. Jansen         Tau(:,5,1,k) = betaT(:)*STau(:,11,k)
1076*59599516SKenneth E. Jansen         Tau(:,5,2,k) = betaT(:)*STau(:,12,k)
1077*59599516SKenneth E. Jansen         Tau(:,5,3,k) = betaT(:)*STau(:,13,k)
1078*59599516SKenneth E. Jansen         Tau(:,5,4,k) = betaT(:)*STau(:,14,k)
1079*59599516SKenneth E. Jansen         Tau(:,5,5,k) = betaT(:)*STau(:,15,k)
1080*59599516SKenneth E. Jansen
1081*59599516SKenneth E. Jansen      enddo
1082*59599516SKenneth E. Jansen
1083*59599516SKenneth E. Jansenc
1084*59599516SKenneth E. Jansenc...  done with conversion to pressure primitive variables
1085*59599516SKenneth E. Jansenc...  now need to interface with the rest of the computations
1086*59599516SKenneth E. Jansenc
1087*59599516SKenneth E. Jansen
1088*59599516SKenneth E. Jansenc...  finally multiply this tau matrix times the
1089*59599516SKenneth E. Jansenc     two residual vectors
1090*59599516SKenneth E. Jansenc
1091*59599516SKenneth E. Jansenc ... calculate (tau Ly) --> (rLyi)
1092*59599516SKenneth E. Jansenc ... storing rLyi for the DC term
1093*59599516SKenneth E. Jansen
1094*59599516SKenneth E. Jansen
1095*59599516SKenneth E. Jansen        if(iDC .ne. 0) rLyitemp(:,:)=rLyi(:,:,1)
1096*59599516SKenneth E. Jansen
1097*59599516SKenneth E. Jansen        if(ires.eq.3 .or. ires .eq. 1) then
1098*59599516SKenneth E. Jansen           eigmax(:,:) = rLyi(:,:,1) !reuse
1099*59599516SKenneth E. Jansen           rLyi = zero
1100*59599516SKenneth E. Jansen           do k = 1, ipord
1101*59599516SKenneth E. Jansen              do i = 1, nflow
1102*59599516SKenneth E. Jansen                 do  j = 1, nflow
1103*59599516SKenneth E. Jansen                    rLyi(:,i,k) = rLyi(:,i,k)+Tau(:,i,j,k)*eigmax(:,j)
1104*59599516SKenneth E. Jansen                 enddo
1105*59599516SKenneth E. Jansen              enddo
1106*59599516SKenneth E. Jansen           enddo
1107*59599516SKenneth E. Jansen        endif
1108*59599516SKenneth E. Jansen
1109*59599516SKenneth E. Jansen
1110*59599516SKenneth E. Jansen        if(iDC .ne. 0) then
1111*59599516SKenneth E. Jansenc.....calculation of rTLS & raLS for DC term
1112*59599516SKenneth E. Jansenc
1113*59599516SKenneth E. Jansenc.....calculation of (Ly - S).tau^tilda*(Ly - S)
1114*59599516SKenneth E. Jansenc
1115*59599516SKenneth E. Jansen           rTLS = rLYItemp(:,1)     * (rLyi(:,1,1)*dVdY(:,1)
1116*59599516SKenneth E. Jansen     &        + dVdY(:,2)*rLyi(:,2,1) + dVdY(:,4)*rLyi(:,3,1)
1117*59599516SKenneth E. Jansen     &        + rLyi(:,4,1)*dVdY(:,7) + dVdY(:,11)*rLyi(:,5,1))
1118*59599516SKenneth E. Jansen     &        + rLyitemp(:,2)       * (rLyi(:,2,1)*dVdY(:,3)
1119*59599516SKenneth E. Jansen     &        + rLyi(:,3,1)*dVdY(:,5) + dVdY(:,8)*rLyi(:,4,1)
1120*59599516SKenneth E. Jansen     &        + rLyi(:,5,1)*dVdY(:,12))
1121*59599516SKenneth E. Jansen     &        + rLyitemp(:,3)       * (rLyi(:,3,1)*dVdY(:,6)
1122*59599516SKenneth E. Jansen     &        + dVdY(:,9)*rLyi(:,4,1) + dVdY(:,13)*rLyi(:,5,1))
1123*59599516SKenneth E. Jansen     &        + rLyitemp(:,4)       * (rLyi(:,4,1)*dVdY(:,10)
1124*59599516SKenneth E. Jansen     &        + dVdY(:,14)*rLyi(:,5,1))
1125*59599516SKenneth E. Jansen     &        + rLyitemp(:,5)       * (dVdY(:,15)*rLyi(:,5,1))
1126*59599516SKenneth E. Jansen
1127*59599516SKenneth E. Jansenc
1128*59599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S)
1129*59599516SKenneth E. Jansenc
1130*59599516SKenneth E. Jansen           raLS = two*rLyitemp(:,4)*rLyitemp(:,5)*A0inv(:,15)
1131*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,5)*A0inv(:,14)
1132*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,2)*A0inv( :,6)
1133*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,3)*A0inv(:,10)
1134*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,4)*A0inv(:,11)
1135*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,3)*A0inv( :,7)
1136*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,3)*rLyitemp(:,4)*A0inv(:,13)
1137*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,2)*rLyitemp(:,5)*A0inv(:,12)
1138*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,4)*A0inv( :,8)
1139*59599516SKenneth E. Jansen     &          + two*rLyitemp(:,1)*rLyitemp(:,5)*A0inv( :,9)
1140*59599516SKenneth E. Jansen     &          + rLyitemp(:,1)**2*A0inv(:,1)
1141*59599516SKenneth E. Jansen     &          + rLyitemp(:,2)**2*A0inv(:,2)
1142*59599516SKenneth E. Jansen     &          + rLyitemp(:,3)**2*A0inv(:,3)
1143*59599516SKenneth E. Jansen     &          + rLyitemp(:,4)**2*A0inv(:,4)
1144*59599516SKenneth E. Jansen     &          + rLyitemp(:,5)**2*A0inv(:,5)
1145*59599516SKenneth E. Jansenc
1146*59599516SKenneth E. Jansenc.....****************calculation of giju for DC term***************
1147*59599516SKenneth E. Jansenc
1148*59599516SKenneth E. Jansenc.... for the notation of different numbering
1149*59599516SKenneth E. Jansenc
1150*59599516SKenneth E. Jansen           gijdu(:,1)=gijd(:,1)
1151*59599516SKenneth E. Jansen           gijdu(:,2)=gijd(:,3)
1152*59599516SKenneth E. Jansen           gijdu(:,3)=gijd(:,6)
1153*59599516SKenneth E. Jansen           gijdu(:,4)=gijd(:,2)
1154*59599516SKenneth E. Jansen           gijdu(:,5)=gijd(:,4)
1155*59599516SKenneth E. Jansen           gijdu(:,6)=gijd(:,5)
1156*59599516SKenneth E. Jansenc
1157*59599516SKenneth E. Jansenc
1158*59599516SKenneth E. Jansen           detgijI = one/(
1159*59599516SKenneth E. Jansen     &          gijdu(:,1) * gijdu(:,2) * gijdu(:,3)
1160*59599516SKenneth E. Jansen     &          - gijdu(:,1) * gijdu(:,6) * gijdu(:,6)
1161*59599516SKenneth E. Jansen     &          - gijdu(:,4) * gijdu(:,4) * gijdu(:,3)
1162*59599516SKenneth E. Jansen     &          + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two
1163*59599516SKenneth E. Jansen     &          - gijdu(:,5) * gijdu(:,5) * gijdu(:,2)
1164*59599516SKenneth E. Jansen     &          )
1165*59599516SKenneth E. Jansen           giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3)
1166*59599516SKenneth E. Jansen     &               - gijdu(:,6)**2)
1167*59599516SKenneth E. Jansen           giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3)
1168*59599516SKenneth E. Jansen     &               - gijdu(:,5)**2)
1169*59599516SKenneth E. Jansen           giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2)
1170*59599516SKenneth E. Jansen     &               - gijdu(:,4)**2)
1171*59599516SKenneth E. Jansen           giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6)
1172*59599516SKenneth E. Jansen     &               - gijdu(:,4)*gijdu(:,3) )
1173*59599516SKenneth E. Jansen           giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6)
1174*59599516SKenneth E. Jansen     &               - gijdu(:,5)*gijdu(:,2) )
1175*59599516SKenneth E. Jansen           giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5)
1176*59599516SKenneth E. Jansen     &               - gijdu(:,1)*gijdu(:,6) )
1177*59599516SKenneth E. Jansenc
1178*59599516SKenneth E. Jansen        endif                   ! end of iDC.ne.0
1179*59599516SKenneth E. Jansenc
1180*59599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi)
1181*59599516SKenneth E. Jansenc
1182*59599516SKenneth E. Jansen        if(ires.ne.1 ) then
1183*59599516SKenneth E. Jansen           eigmax(:,:) = rLymi(:,:,1)
1184*59599516SKenneth E. Jansen           rLymi = zero
1185*59599516SKenneth E. Jansen           do k = 1, ipord
1186*59599516SKenneth E. Jansen              do i = 1, nflow
1187*59599516SKenneth E. Jansen                 do j = 1, nflow
1188*59599516SKenneth E. Jansen         rLymi(:,i,k) = rLymi(:,i,k)+Tau(:,i,j,k)*eigmax(:,j)
1189*59599516SKenneth E. Jansen                 enddo
1190*59599516SKenneth E. Jansen              enddo
1191*59599516SKenneth E. Jansen           enddo
1192*59599516SKenneth E. Jansen        endif
1193*59599516SKenneth E. Jansenc
1194*59599516SKenneth E. Jansenc  INCORRECT NOW         flops = flops + 255*npro
1195*59599516SKenneth E. Jansenc
1196*59599516SKenneth E. Jansenc
1197*59599516SKenneth E. Jansenc.... return
1198*59599516SKenneth E. Jansenc
1199*59599516SKenneth E. Jansen      return
1200*59599516SKenneth E. Jansen      end
1201*59599516SKenneth E. Jansenc
1202*59599516SKenneth E. Jansen
1203*59599516SKenneth E. Jansen
1204*59599516SKenneth E. Jansen
1205*59599516SKenneth E. Jansen        subroutine e3tauSclr(rho,    rmu,    A0t,
1206*59599516SKenneth E. Jansen     &                       u1,     u2,     u3,
1207*59599516SKenneth E. Jansen     &                       dxidx,  rLyti,  rLymti,
1208*59599516SKenneth E. Jansen     &                       taut,   rk,     raLSt,
1209*59599516SKenneth E. Jansen     &                       rTLSt,  giju)
1210*59599516SKenneth E. Jansenc
1211*59599516SKenneth E. Jansenc----------------------------------------------------------------------
1212*59599516SKenneth E. Jansenc
1213*59599516SKenneth E. Jansenc This routine computes the diagonal Tau for least-squares operator.
1214*59599516SKenneth E. Jansenc This Tau is the one proposed for nearly incompressible flows by
1215*59599516SKenneth E. Jansenc Franca and Frey.  We receive the regular residual L operator and a
1216*59599516SKenneth E. Jansenc modified residual L operator, calculate tau, and return values for
1217*59599516SKenneth E. Jansenc tau and tau times these operators to maintain the format of past
1218*59599516SKenneth E. Jansenc ENSA codes
1219*59599516SKenneth E. Jansenc
1220*59599516SKenneth E. Jansenc input:
1221*59599516SKenneth E. Jansenc  rho    (npro)           : density
1222*59599516SKenneth E. Jansenc  T      (npro)           : temperature
1223*59599516SKenneth E. Jansenc  cp     (npro)           : specific heat at constant pressure
1224*59599516SKenneth E. Jansenc  u1     (npro)           : x1-velocity component
1225*59599516SKenneth E. Jansenc  u2     (npro)           : x2-velocity component
1226*59599516SKenneth E. Jansenc  u3     (npro)           : x3-velocity component
1227*59599516SKenneth E. Jansenc  dxidx  (npro,nsd,nsd)   : inverse of deformation gradient
1228*59599516SKenneth E. Jansenc  rLyti   (npro)          : least-squares residual vector
1229*59599516SKenneth E. Jansenc  rLymti   (npro)         : modified least-squares residual vector
1230*59599516SKenneth E. Jansenc
1231*59599516SKenneth E. Jansenc output:
1232*59599516SKenneth E. Jansenc  rLyti   (npro,nflow)     : least-squares residual vector
1233*59599516SKenneth E. Jansenc  rLymti   (npro,nflow)    : modified least-squares residual vector
1234*59599516SKenneth E. Jansenc  tau    (npro,3)         : 3 taus
1235*59599516SKenneth E. Jansenc
1236*59599516SKenneth E. Jansenc
1237*59599516SKenneth E. Jansenc Zdenek Johan, Summer 1990.  (Modified from e2tau.f)
1238*59599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
1239*59599516SKenneth E. Jansenc----------------------------------------------------------------------
1240*59599516SKenneth E. Jansenc
1241*59599516SKenneth E. Jansen      use turbSA
1242*59599516SKenneth E. Jansen      include "common.h"
1243*59599516SKenneth E. Jansenc
1244*59599516SKenneth E. Jansen      dimension rho(npro),                 T(npro),
1245*59599516SKenneth E. Jansen     &            cp(npro),                  u1(npro),
1246*59599516SKenneth E. Jansen     &            u2(npro),                  u3(npro),
1247*59599516SKenneth E. Jansen     &            dxidx(npro,nsd,nsd),       rk(npro),
1248*59599516SKenneth E. Jansen     &            taut(npro),                rLyti(npro),
1249*59599516SKenneth E. Jansen     &            rLymti(npro)
1250*59599516SKenneth E. Jansenc
1251*59599516SKenneth E. Jansen        dimension rmu(npro),                 A0t(npro),
1252*59599516SKenneth E. Jansen     &		  gijd(npro,6),              uh1(npro),
1253*59599516SKenneth E. Jansen     &		  fact(npro),	             h2o2u(npro),
1254*59599516SKenneth E. Jansen     &            rlytitemp(npro),           raLSt(npro),
1255*59599516SKenneth E. Jansen     &            rTLSt(npro),               gijdu(npro,6),
1256*59599516SKenneth E. Jansen     &            giju(npro,6),              detgijI(npro)
1257*59599516SKenneth E. Jansenc
1258*59599516SKenneth E. Jansenc
1259*59599516SKenneth E. Jansen      call e3gijd( dxidx, gijd )
1260*59599516SKenneth E. Jansen
1261*59599516SKenneth E. Jansenc
1262*59599516SKenneth E. Jansenc  next form the diffusive length scale |u| h_1 = 2 ( ui (gijd)-1 uj)^{1/2}
1263*59599516SKenneth E. Jansenc
1264*59599516SKenneth E. Jansenc   dividing factor for the inverse of gijd
1265*59599516SKenneth E. Jansenc
1266*59599516SKenneth E. Jansen      fact = gijd(:,1) * gijd(:,3) * gijd(:,6)
1267*59599516SKenneth E. Jansen     &     - gijd(:,1) * gijd(:,5) * gijd(:,5)
1268*59599516SKenneth E. Jansen     &     - gijd(:,3) * gijd(:,4) * gijd(:,4)
1269*59599516SKenneth E. Jansen     &     - gijd(:,6) * gijd(:,2) * gijd(:,2)
1270*59599516SKenneth E. Jansen     &     + gijd(:,2) * gijd(:,4) * gijd(:,5) * two
1271*59599516SKenneth E. Jansenc
1272*59599516SKenneth E. Jansen      uh1=    u1*u1*(gijd(:,3)*gijd(:,6)-gijd(:,5)*gijd(:,5))
1273*59599516SKenneth E. Jansen     &     + u2*u2*(gijd(:,1)*gijd(:,6)-gijd(:,4)*gijd(:,4))
1274*59599516SKenneth E. Jansen     &     + u3*u3*(gijd(:,1)*gijd(:,3)-gijd(:,2)*gijd(:,2))
1275*59599516SKenneth E. Jansen     &     + two *(u1*u2*(gijd(:,4)*gijd(:,5)-gijd(:,2)*gijd(:,6))
1276*59599516SKenneth E. Jansen     &     + u1*u3*(gijd(:,2)*gijd(:,5)-gijd(:,4)*gijd(:,3))
1277*59599516SKenneth E. Jansen     &     + u2*u3*(gijd(:,4)*gijd(:,2)-gijd(:,1)*gijd(:,5)))
1278*59599516SKenneth E. Jansenc
1279*59599516SKenneth E. Jansenc   at this point we have (u h1)^2 * inverse coefficient^2 / 4
1280*59599516SKenneth E. Jansenc
1281*59599516SKenneth E. Jansenc                                    ^ fact
1282*59599516SKenneth E. Jansenc
1283*59599516SKenneth E. Jansen
1284*59599516SKenneth E. Jansen      uh1= two * sqrt(uh1/fact)
1285*59599516SKenneth E. Jansen
1286*59599516SKenneth E. Jansenc
1287*59599516SKenneth E. Jansenc  next form the advective length scale |u|/h_2 = 2 ( ui (gijd) uj)^{1/2}
1288*59599516SKenneth E. Jansenc
1289*59599516SKenneth E. Jansen      h2o2u =   u1*u1*gijd(:,1)
1290*59599516SKenneth E. Jansen     &     + u2*u2*gijd(:,3)
1291*59599516SKenneth E. Jansen     &     + u3*u3*gijd(:,6)
1292*59599516SKenneth E. Jansen     &     +(u1*u2*gijd(:,2)
1293*59599516SKenneth E. Jansen     &     + u1*u3*gijd(:,4)
1294*59599516SKenneth E. Jansen     &     + u2*u3*gijd(:,5))*two  + 1.0e-15 !FIX FOR INVALID MESHES
1295*59599516SKenneth E. Jansenc
1296*59599516SKenneth E. Jansenc  at this point we have (2 u / h_2)^2
1297*59599516SKenneth E. Jansenc
1298*59599516SKenneth E. Jansen
1299*59599516SKenneth E. Jansenc       call tnanqe(h2o2u,1,"riaconv ")
1300*59599516SKenneth E. Jansen
1301*59599516SKenneth E. Jansen      h2o2u = one / sqrt(h2o2u) ! this flips it over leaves it h_2/(2u)
1302*59599516SKenneth E. Jansenc
1303*59599516SKenneth E. Jansenc...  momentum tau
1304*59599516SKenneth E. Jansenc
1305*59599516SKenneth E. Jansenc
1306*59599516SKenneth E. Jansenc... rmu will now hold the total (molecular plus eddy) viscosity...
1307*59599516SKenneth E. Jansen      dts=one/(Dtgl*dtsfct)
1308*59599516SKenneth E. Jansen      if(iremoveStabTimeTerm.gt.0) dts = dts*100000  ! remove time term from scalar
1309*59599516SKenneth E. Jansen      taut(:)=min(dts,h2o2u)
1310*59599516SKenneth E. Jansen      taut(:)=taut(:)/rho
1311*59599516SKenneth E. Jansen      taut(:)=min(taut(:),h2o2u*h2o2u*rk*pt66*saSigma/rmu)
1312*59599516SKenneth E. Jansenc
1313*59599516SKenneth E. Jansenc...  finally multiply this tau matrix times the
1314*59599516SKenneth E. Jansenc     two residual vectors
1315*59599516SKenneth E. Jansenc
1316*59599516SKenneth E. Jansenc.... calculate (tau Lyt) --> (rLyti)
1317*59599516SKenneth E. Jansenc
1318*59599516SKenneth E. Jansenc.... storing rLyi for the DC term
1319*59599516SKenneth E. Jansen          rLytitemp=rLyti
1320*59599516SKenneth E. Jansen
1321*59599516SKenneth E. Jansen	if(ires.eq.3 .or. ires .eq. 1) then
1322*59599516SKenneth E. Jansen          rLyti(:) = taut(:) * rLyti(:)
1323*59599516SKenneth E. Jansen
1324*59599516SKenneth E. Jansen        endif
1325*59599516SKenneth E. Jansen        if(iDCSclr(1) .ne. 0) then
1326*59599516SKenneth E. Jansenc..... calculation of rTLS & raLS for DC term
1327*59599516SKenneth E. Jansenc..... calculation of (Ly - S).tau^tilda*(Ly - S)
1328*59599516SKenneth E. Jansenc
1329*59599516SKenneth E. Jansen         rTLSt = rLYtItemp(:)*rLyti(:)
1330*59599516SKenneth E. Jansenc
1331*59599516SKenneth E. Jansenc...... calculation of (Ly - S).A0inv*(Ly - S)
1332*59599516SKenneth E. Jansenc
1333*59599516SKenneth E. Jansen         raLSt = rLYtItemp(:) * rLYtItemp(:)
1334*59599516SKenneth E. Jansenc.....*****************calculation of giju for DC term******************
1335*59599516SKenneth E. Jansenc
1336*59599516SKenneth E. Jansenc.... for the notation of different numbering
1337*59599516SKenneth E. Jansenc
1338*59599516SKenneth E. Jansen           gijdu(:,1)=gijd(:,1)
1339*59599516SKenneth E. Jansen           gijdu(:,2)=gijd(:,3)
1340*59599516SKenneth E. Jansen           gijdu(:,3)=gijd(:,6)
1341*59599516SKenneth E. Jansen           gijdu(:,4)=gijd(:,2)
1342*59599516SKenneth E. Jansen           gijdu(:,5)=gijd(:,4)
1343*59599516SKenneth E. Jansen           gijdu(:,6)=gijd(:,5)
1344*59599516SKenneth E. Jansenc
1345*59599516SKenneth E. Jansenc  we are going to need this in the dc factor later so we calculate it.
1346*59599516SKenneth E. Jansenc
1347*59599516SKenneth E. Jansen         detgijI = one/(
1348*59599516SKenneth E. Jansen     &             gijdu(:,1) * gijdu(:,2) * gijdu(:,3)
1349*59599516SKenneth E. Jansen     &           - gijdu(:,1) * gijdu(:,6) * gijdu(:,6)
1350*59599516SKenneth E. Jansen     &           - gijdu(:,4) * gijdu(:,4) * gijdu(:,3)
1351*59599516SKenneth E. Jansen     &           + gijdu(:,4) * gijdu(:,5) * gijdu(:,6) * two
1352*59599516SKenneth E. Jansen     &           - gijdu(:,5) * gijdu(:,5) * gijdu(:,2)
1353*59599516SKenneth E. Jansen     &                 )
1354*59599516SKenneth E. Jansen          giju(:,1) = detgijI * (gijdu(:,2)*gijdu(:,3)
1355*59599516SKenneth E. Jansen     &              - gijdu(:,6)**2)
1356*59599516SKenneth E. Jansen          giju(:,2) = detgijI * (gijdu(:,1)*gijdu(:,3)
1357*59599516SKenneth E. Jansen     &              - gijdu(:,5)**2)
1358*59599516SKenneth E. Jansen          giju(:,3) = detgijI * (gijdu(:,1)*gijdu(:,2)
1359*59599516SKenneth E. Jansen     &              - gijdu(:,4)**2)
1360*59599516SKenneth E. Jansen          giju(:,4) = detgijI * (gijdu(:,5)*gijdu(:,6)
1361*59599516SKenneth E. Jansen     &              - gijdu(:,4)*gijdu(:,3) )
1362*59599516SKenneth E. Jansen          giju(:,5) = detgijI * (gijdu(:,4)*gijdu(:,6)
1363*59599516SKenneth E. Jansen     &              - gijdu(:,5)*gijdu(:,2) )
1364*59599516SKenneth E. Jansen          giju(:,6) = detgijI * (gijdu(:,4)*gijdu(:,5)
1365*59599516SKenneth E. Jansen     &              - gijdu(:,1)*gijdu(:,6) )
1366*59599516SKenneth E. Jansenc
1367*59599516SKenneth E. Jansen         endif    ! end of iDCSclr(1).ne.0
1368*59599516SKenneth E. Jansenc
1369*59599516SKenneth E. Jansenc.... calculate (tau Lym) --> (rLymi)
1370*59599516SKenneth E. Jansenc
1371*59599516SKenneth E. Jansenc        if(ires.ne.1 ) then
1372*59599516SKenneth E. Jansenc          rLymi(:,1) = tau(:,1) * rLymi(:,1)
1373*59599516SKenneth E. Jansenc          rLymi(:,2) = tau(:,2) * rLymi(:,2)
1374*59599516SKenneth E. Jansenc          rLymi(:,3) = tau(:,2) * rLymi(:,3)
1375*59599516SKenneth E. Jansenc          rLymi(:,4) = tau(:,2) * rLymi(:,4)
1376*59599516SKenneth E. Jansenc          rLymi(:,5) = tau(:,3) * rLymi(:,5)
1377*59599516SKenneth E. Jansenc        endif
1378*59599516SKenneth E. Jansenc
1379*59599516SKenneth E. Jansenc  INCORRECT NOW         flops = flops + 255*npro
1380*59599516SKenneth E. Jansenc
1381*59599516SKenneth E. Jansenc
1382*59599516SKenneth E. Jansenc.... return
1383*59599516SKenneth E. Jansenc
1384*59599516SKenneth E. Jansen      return
1385*59599516SKenneth E. Jansen      end
1386*59599516SKenneth E. Jansen
1387*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
1388*59599516SKenneth E. Jansenc get the metric tensor g_{ij}=xi_{k,i} xi_{k,j}.
1389*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
1390*59599516SKenneth E. Jansen      subroutine e3gijd( dxidx,  gijd )
1391*59599516SKenneth E. Jansen
1392*59599516SKenneth E. Jansen      include "common.h"
1393*59599516SKenneth E. Jansen
1394*59599516SKenneth E. Jansen      real*8  dxidx(npro,nsd,nsd),  gijd(npro,6),
1395*59599516SKenneth E. Jansen     &        tmp1(npro),           tmp2(npro),
1396*59599516SKenneth E. Jansen     &        tmp3(npro)
1397*59599516SKenneth E. Jansenc  form metric tensor g_{ij}=xi_{k,i} xi_{k,j}.  It is a symmetric
1398*59599516SKenneth E. Jansenc  tensor so we only form 6 components and use symmetric matrix numbering.
1399*59599516SKenneth E. Jansenc  (d for down since giju=[gijd]^{-1})
1400*59599516SKenneth E. Jansenc  (Note FARZIN and others use numbering of 1,2,3 being diagonal 456 off)
1401*59599516SKenneth E. Jansen      if (lcsyst .ge. 2) then
1402*59599516SKenneth E. Jansen
1403*59599516SKenneth E. Jansen         gijd(:,1) = dxidx(:,1,1) * dxidx(:,1,1)
1404*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,1)
1405*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,1)
1406*59599516SKenneth E. Jansenc
1407*59599516SKenneth E. Jansen         gijd(:,2) = dxidx(:,1,1) * dxidx(:,1,2)
1408*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,2)
1409*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,2)
1410*59599516SKenneth E. Jansenc
1411*59599516SKenneth E. Jansen         gijd(:,3) = dxidx(:,1,2) * dxidx(:,1,2)
1412*59599516SKenneth E. Jansen     &            + dxidx(:,2,2) * dxidx(:,2,2)
1413*59599516SKenneth E. Jansen     &            + dxidx(:,3,2) * dxidx(:,3,2)
1414*59599516SKenneth E. Jansenc
1415*59599516SKenneth E. Jansen         gijd(:,4) = dxidx(:,1,1) * dxidx(:,1,3)
1416*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,3)
1417*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,3)
1418*59599516SKenneth E. Jansenc
1419*59599516SKenneth E. Jansen         gijd(:,5) = dxidx(:,1,2) * dxidx(:,1,3)
1420*59599516SKenneth E. Jansen     &            + dxidx(:,2,2) * dxidx(:,2,3)
1421*59599516SKenneth E. Jansen     &            + dxidx(:,3,2) * dxidx(:,3,3)
1422*59599516SKenneth E. Jansenc
1423*59599516SKenneth E. Jansen         gijd(:,6) = dxidx(:,1,3) * dxidx(:,1,3)
1424*59599516SKenneth E. Jansen     &            + dxidx(:,2,3) * dxidx(:,2,3)
1425*59599516SKenneth E. Jansen     &        + dxidx(:,3,3) * dxidx(:,3,3)
1426*59599516SKenneth E. Jansenc
1427*59599516SKenneth E. Jansen      else   if (lcsyst .eq. 1) then
1428*59599516SKenneth E. Jansenc
1429*59599516SKenneth E. Jansenc  There is an invariance problem with tets
1430*59599516SKenneth E. Jansenc  It is fixed by the following modifications to gijd
1431*59599516SKenneth E. Jansenc
1432*59599516SKenneth E. Jansen
1433*59599516SKenneth E. Jansen         c1 = 1.259921049894873D+00
1434*59599516SKenneth E. Jansen         c2 = 6.299605249474365D-01
1435*59599516SKenneth E. Jansenc
1436*59599516SKenneth E. Jansen         tmp1(:) = c1 * dxidx(:,1,1) + c2 *(dxidx(:,2,1)+dxidx(:,3,1))
1437*59599516SKenneth E. Jansen         tmp2(:) = c1 * dxidx(:,2,1) + c2 *(dxidx(:,1,1)+dxidx(:,3,1))
1438*59599516SKenneth E. Jansen         tmp3(:) = c1 * dxidx(:,3,1) + c2 *(dxidx(:,1,1)+dxidx(:,2,1))
1439*59599516SKenneth E. Jansen         gijd(:,1) = dxidx(:,1,1) * tmp1
1440*59599516SKenneth E. Jansen     1             + dxidx(:,2,1) * tmp2
1441*59599516SKenneth E. Jansen     2             + dxidx(:,3,1) * tmp3
1442*59599516SKenneth E. Jansenc
1443*59599516SKenneth E. Jansen         tmp1(:) = c1 * dxidx(:,1,2) + c2 *(dxidx(:,2,2)+dxidx(:,3,2))
1444*59599516SKenneth E. Jansen         tmp2(:) = c1 * dxidx(:,2,2) + c2 *(dxidx(:,1,2)+dxidx(:,3,2))
1445*59599516SKenneth E. Jansen         tmp3(:) = c1 * dxidx(:,3,2) + c2 *(dxidx(:,1,2)+dxidx(:,2,2))
1446*59599516SKenneth E. Jansen         gijd(:,2) = dxidx(:,1,1) * tmp1
1447*59599516SKenneth E. Jansen     1             + dxidx(:,2,1) * tmp2
1448*59599516SKenneth E. Jansen     2             + dxidx(:,3,1) * tmp3
1449*59599516SKenneth E. Jansenc
1450*59599516SKenneth E. Jansen         gijd(:,3) = dxidx(:,1,2) * tmp1
1451*59599516SKenneth E. Jansen     1             + dxidx(:,2,2) * tmp2
1452*59599516SKenneth E. Jansen     2             + dxidx(:,3,2) * tmp3
1453*59599516SKenneth E. Jansenc
1454*59599516SKenneth E. Jansen         tmp1(:) = c1 * dxidx(:,1,3) + c2 *(dxidx(:,2,3)+dxidx(:,3,3))
1455*59599516SKenneth E. Jansen         tmp2(:) = c1 * dxidx(:,2,3) + c2 *(dxidx(:,1,3)+dxidx(:,3,3))
1456*59599516SKenneth E. Jansen         tmp3(:) = c1 * dxidx(:,3,3) + c2 *(dxidx(:,1,3)+dxidx(:,2,3))
1457*59599516SKenneth E. Jansen         gijd(:,4) = dxidx(:,1,1) * tmp1
1458*59599516SKenneth E. Jansen     1             + dxidx(:,2,1) * tmp2
1459*59599516SKenneth E. Jansen     2             + dxidx(:,3,1) * tmp3
1460*59599516SKenneth E. Jansenc
1461*59599516SKenneth E. Jansen         gijd(:,5) = dxidx(:,1,2) * tmp1
1462*59599516SKenneth E. Jansen     1             + dxidx(:,2,2) * tmp2
1463*59599516SKenneth E. Jansen     2             + dxidx(:,3,2) * tmp3
1464*59599516SKenneth E. Jansenc
1465*59599516SKenneth E. Jansen         gijd(:,6) = dxidx(:,1,3) * tmp1
1466*59599516SKenneth E. Jansen     1             + dxidx(:,2,3) * tmp2
1467*59599516SKenneth E. Jansen     2             + dxidx(:,3,3) * tmp3
1468*59599516SKenneth E. Jansenc
1469*59599516SKenneth E. Jansen      else
1470*59599516SKenneth E. Jansenc  This is just the hex copied from above.  I have
1471*59599516SKenneth E. Jansenc  to find my notes on invariance factors for wedges
1472*59599516SKenneth E. Jansenc
1473*59599516SKenneth E. Jansen
1474*59599516SKenneth E. Jansen         gijd(:,1) = dxidx(:,1,1) * dxidx(:,1,1)
1475*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,1)
1476*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,1)
1477*59599516SKenneth E. Jansenc
1478*59599516SKenneth E. Jansen         gijd(:,2) = dxidx(:,1,1) * dxidx(:,1,2)
1479*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,2)
1480*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,2)
1481*59599516SKenneth E. Jansenc
1482*59599516SKenneth E. Jansen         gijd(:,3) = dxidx(:,1,2) * dxidx(:,1,2)
1483*59599516SKenneth E. Jansen     &            + dxidx(:,2,2) * dxidx(:,2,2)
1484*59599516SKenneth E. Jansen     &            + dxidx(:,3,2) * dxidx(:,3,2)
1485*59599516SKenneth E. Jansenc
1486*59599516SKenneth E. Jansen         gijd(:,4) = dxidx(:,1,1) * dxidx(:,1,3)
1487*59599516SKenneth E. Jansen     &            + dxidx(:,2,1) * dxidx(:,2,3)
1488*59599516SKenneth E. Jansen     &            + dxidx(:,3,1) * dxidx(:,3,3)
1489*59599516SKenneth E. Jansenc
1490*59599516SKenneth E. Jansen         gijd(:,5) = dxidx(:,1,2) * dxidx(:,1,3)
1491*59599516SKenneth E. Jansen     &            + dxidx(:,2,2) * dxidx(:,2,3)
1492*59599516SKenneth E. Jansen     &            + dxidx(:,3,2) * dxidx(:,3,3)
1493*59599516SKenneth E. Jansenc
1494*59599516SKenneth E. Jansen         gijd(:,6) = dxidx(:,1,3) * dxidx(:,1,3)
1495*59599516SKenneth E. Jansen     &            + dxidx(:,2,3) * dxidx(:,2,3)
1496*59599516SKenneth E. Jansen     &            + dxidx(:,3,3) * dxidx(:,3,3)
1497*59599516SKenneth E. Jansen      endif
1498*59599516SKenneth E. Jansenc
1499*59599516SKenneth E. Jansen      return
1500*59599516SKenneth E. Jansen      end
1501*59599516SKenneth E. Jansen
1502