xref: /phasta/phSolver/incompressible/e3sts.f (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen      subroutine e3StsLhs( xl,  lStsVec )
2*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
3*59599516SKenneth E. Jansenc
4*59599516SKenneth E. Jansenc  compute the terms needed for the left hand side matrices
5*59599516SKenneth E. Jansenc  needed for the conservative projection
6*59599516SKenneth E. Jansenc
7*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
8*59599516SKenneth E. Jansen      use     stats
9*59599516SKenneth E. Jansen      include "common.h"
10*59599516SKenneth E. Jansen
11*59599516SKenneth E. Jansen      integer i
12*59599516SKenneth E. Jansen      real*8  lDir(npro,nshl,3), lStsVec(npro,nshl,nResDims),
13*59599516SKenneth E. Jansen     &        xl(npro,nenl,3)
14*59599516SKenneth E. Jansen
15*59599516SKenneth E. Jansen      call e3StsDir( xl,  lDir )
16*59599516SKenneth E. Jansen
17*59599516SKenneth E. Jansen      do i = 1, nshl
18*59599516SKenneth E. Jansen         lStsVec(:,i,1) = lDir(:,i,1) * lDir(:,i,1)
19*59599516SKenneth E. Jansen         lStsVec(:,i,2) = lDir(:,i,2) * lDir(:,i,2)
20*59599516SKenneth E. Jansen         lStsVec(:,i,3) = lDir(:,i,3) * lDir(:,i,3)
21*59599516SKenneth E. Jansen
22*59599516SKenneth E. Jansen         lStsVec(:,i,4) = lDir(:,i,1) * lDir(:,i,2)
23*59599516SKenneth E. Jansen         lStsVec(:,i,5) = lDir(:,i,2) * lDir(:,i,3)
24*59599516SKenneth E. Jansen         lStsVec(:,i,6) = lDir(:,i,3) * lDir(:,i,1)
25*59599516SKenneth E. Jansen
26*59599516SKenneth E. Jansen         lStsVec(:,i,7) = 0.0
27*59599516SKenneth E. Jansen         lStsVec(:,i,8) = 0.0
28*59599516SKenneth E. Jansen         lStsVec(:,i,9) = 0.0
29*59599516SKenneth E. Jansen         lStsVec(:,i,10) = 0.0
30*59599516SKenneth E. Jansen         lStsVec(:,i,11) = 0.0
31*59599516SKenneth E. Jansen      enddo
32*59599516SKenneth E. Jansen
33*59599516SKenneth E. Jansen      return
34*59599516SKenneth E. Jansen      end
35*59599516SKenneth E. Jansen
36*59599516SKenneth E. Jansen
37*59599516SKenneth E. Jansen      subroutine e3StsRes( xl, rl, lStsVec )
38*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
39*59599516SKenneth E. Jansenc
40*59599516SKenneth E. Jansenc  compute the residual terms for the consistent projection
41*59599516SKenneth E. Jansenc
42*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
43*59599516SKenneth E. Jansen      use     stats
44*59599516SKenneth E. Jansen      include "common.h"
45*59599516SKenneth E. Jansen
46*59599516SKenneth E. Jansen      real*8  xl(npro,nenl,3),  rl(npro,nshl,ndof)
47*59599516SKenneth E. Jansen      real*8  lDir(npro,nshl,3), lStsVec(npro,nshl,nResDims)
48*59599516SKenneth E. Jansen
49*59599516SKenneth E. Jansen      call e3StsDir( xl,  lDir )
50*59599516SKenneth E. Jansen
51*59599516SKenneth E. Jansen      do i = 1, nshl
52*59599516SKenneth E. Jansen         lStsVec(:,i,1) = lDir(:,i,1) * rl(:,i,4)
53*59599516SKenneth E. Jansen         lStsVec(:,i,2) = lDir(:,i,2) * rl(:,i,4)
54*59599516SKenneth E. Jansen         lStsVec(:,i,3) = lDir(:,i,3) * rl(:,i,4)
55*59599516SKenneth E. Jansen
56*59599516SKenneth E. Jansen         lStsVec(:,i,4) = lDir(:,i,1) * rl(:,i,1)
57*59599516SKenneth E. Jansen         lStsVec(:,i,5) = lDir(:,i,2) * rl(:,i,2)
58*59599516SKenneth E. Jansen         lStsVec(:,i,6) = lDir(:,i,3) * rl(:,i,3)
59*59599516SKenneth E. Jansen
60*59599516SKenneth E. Jansen         lStsVec(:,i,7) = lDir(:,i,1) * rl(:,i,2)
61*59599516SKenneth E. Jansen     &                  + lDir(:,i,2) * rl(:,i,1)
62*59599516SKenneth E. Jansen         lStsVec(:,i,8) = lDir(:,i,2) * rl(:,i,3)
63*59599516SKenneth E. Jansen     &                  + lDir(:,i,3) * rl(:,i,2)
64*59599516SKenneth E. Jansen         lStsVec(:,i,9) = lDir(:,i,3) * rl(:,i,1)
65*59599516SKenneth E. Jansen     &        + lDir(:,i,1) * rl(:,i,3)
66*59599516SKenneth E. Jansen         lStsVec(:,i,10) = 0
67*59599516SKenneth E. Jansen         lStsVec(:,i,11) = 0
68*59599516SKenneth E. Jansen      enddo
69*59599516SKenneth E. Jansen
70*59599516SKenneth E. Jansen
71*59599516SKenneth E. Jansen      return
72*59599516SKenneth E. Jansen      end
73*59599516SKenneth E. Jansen
74*59599516SKenneth E. Jansen      subroutine e3StsDir( xl,  lDir )
75*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
76*59599516SKenneth E. Jansenc
77*59599516SKenneth E. Jansenc  compute the normal to each of the nodes
78*59599516SKenneth E. Jansenc
79*59599516SKenneth E. Jansenc-----------------------------------------------------------------------
80*59599516SKenneth E. Jansen      include "common.h"
81*59599516SKenneth E. Jansen
82*59599516SKenneth E. Jansen      real*8  xl(npro,nenl,3), lDir(npro,nshl,3)
83*59599516SKenneth E. Jansen      integer e
84*59599516SKenneth E. Jansen
85*59599516SKenneth E. Jansenc
86*59599516SKenneth E. Jansenc.... linear tets
87*59599516SKenneth E. Jansenc
88*59599516SKenneth E. Jansen      if (nshl .eq. 4 ) then
89*59599516SKenneth E. Jansen         fct = 1.d0 / 6.d0
90*59599516SKenneth E. Jansen         do e = 1, npro
91*59599516SKenneth E. Jansen
92*59599516SKenneth E. Jansen            x12         = xl(e,2,1) - xl(e,1,1)
93*59599516SKenneth E. Jansen            x13         = xl(e,3,1) - xl(e,1,1)
94*59599516SKenneth E. Jansen            x14         = xl(e,4,1) - xl(e,1,1)
95*59599516SKenneth E. Jansen            x23         = xl(e,3,1) - xl(e,2,1)
96*59599516SKenneth E. Jansen            x24         = xl(e,4,1) - xl(e,2,1)
97*59599516SKenneth E. Jansen            x34         = xl(e,4,1) - xl(e,3,1)
98*59599516SKenneth E. Jansen
99*59599516SKenneth E. Jansen            y12         = xl(e,2,2) - xl(e,1,2)
100*59599516SKenneth E. Jansen            y13         = xl(e,3,2) - xl(e,1,2)
101*59599516SKenneth E. Jansen            y14         = xl(e,4,2) - xl(e,1,2)
102*59599516SKenneth E. Jansen            y23         = xl(e,3,2) - xl(e,2,2)
103*59599516SKenneth E. Jansen            y24         = xl(e,4,2) - xl(e,2,2)
104*59599516SKenneth E. Jansen            y34         = xl(e,4,2) - xl(e,3,2)
105*59599516SKenneth E. Jansen
106*59599516SKenneth E. Jansen            z12         = xl(e,2,3) - xl(e,1,3)
107*59599516SKenneth E. Jansen            z13         = xl(e,3,3) - xl(e,1,3)
108*59599516SKenneth E. Jansen            z14         = xl(e,4,3) - xl(e,1,3)
109*59599516SKenneth E. Jansen            z23         = xl(e,3,3) - xl(e,2,3)
110*59599516SKenneth E. Jansen            z24         = xl(e,4,3) - xl(e,2,3)
111*59599516SKenneth E. Jansen            z34         = xl(e,4,3) - xl(e,3,3)
112*59599516SKenneth E. Jansen
113*59599516SKenneth E. Jansenc
114*59599516SKenneth E. Jansenc.. The calculation of the direction of a vertex is based on the average of
115*59599516SKenneth E. Jansenc.. the normals of the neighbor faces(3); And the calculation of the direction
116*59599516SKenneth E. Jansenc.. of the edge is based on the neighbor faces(2);
117*59599516SKenneth E. Jansenc
118*59599516SKenneth E. Jansen	    lDir(e,1,1) = fct * (y14*(z12 - z13) + y12*(z13 - z14)
119*59599516SKenneth E. Jansen     &                         + y13*(-z12 + z14))
120*59599516SKenneth E. Jansen	    lDir(e,1,2) = fct * ( x14*(-z12 + z13) + x13*(z12 - z14)
121*59599516SKenneth E. Jansen     &                          + x12*(-z13 + z14))
122*59599516SKenneth E. Jansen	    lDir(e,1,3) = fct * ( x14*(y12 - y13)
123*59599516SKenneth E. Jansen     &                          + x12*(y13 - y14) + x13*(-y12 + y14))
124*59599516SKenneth E. Jansenc
125*59599516SKenneth E. Jansen	    lDir(e,2,1) = fct * (-(y13*z12) + y14*z12 + y12*z13
126*59599516SKenneth E. Jansen     &                          - y12*z14 + y24*z23 - y23*z24)
127*59599516SKenneth E. Jansen            lDir(e,2,2) = fct * (x13*z12 - x14*z12-x12*z13 + x12*z14
128*59599516SKenneth E. Jansen     &                          - x24*z23 + x23*z24 )
129*59599516SKenneth E. Jansen            lDir(e,2,3) = fct * (-(x13*y12) + x14*y12 + x12*y13
130*59599516SKenneth E. Jansen     &                         - x12*y14 + x24*y23 - x23*y24)
131*59599516SKenneth E. Jansenc
132*59599516SKenneth E. Jansen            lDir(e,3,1) = fct * (y12*z13 - y14*z13 + y13*(-z12 + z14)
133*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
134*59599516SKenneth E. Jansen            lDir(e,3,2) = fct * (-(x12*z13) + x14*z13 + x13*(z12 - z14)
135*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
136*59599516SKenneth E. Jansen            lDir(e,3,3) = fct * (x12*y13 - x14*y13 + x13*(-y12 + y14)
137*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
138*59599516SKenneth E. Jansenc
139*59599516SKenneth E. Jansen            lDir(e,4,1) = fct * (y14*(z12 - z13) - y12*z14 + y13*z14
140*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
141*59599516SKenneth E. Jansen            lDir(e,4,2) = fct * (x14*(-z12 + z13) + x12*z14 - x13*z14
142*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
143*59599516SKenneth E. Jansen            lDir(e,4,3) = fct * (x14*(y12 - y13) - x12*y14 + x13*y14
144*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
145*59599516SKenneth E. Jansenc
146*59599516SKenneth E. Jansen         enddo
147*59599516SKenneth E. Jansenc
148*59599516SKenneth E. Jansenc.... quadratic tets
149*59599516SKenneth E. Jansenc
150*59599516SKenneth E. Jansen      else if (nshl .eq. 10 ) then
151*59599516SKenneth E. Jansen         fct = 1.d0 / 6.d0
152*59599516SKenneth E. Jansen         do e = 1, npro
153*59599516SKenneth E. Jansen
154*59599516SKenneth E. Jansen            x12         = xl(e,2,1) - xl(e,1,1)
155*59599516SKenneth E. Jansen            x13         = xl(e,3,1) - xl(e,1,1)
156*59599516SKenneth E. Jansen            x14         = xl(e,4,1) - xl(e,1,1)
157*59599516SKenneth E. Jansen            x23         = xl(e,3,1) - xl(e,2,1)
158*59599516SKenneth E. Jansen            x24         = xl(e,4,1) - xl(e,2,1)
159*59599516SKenneth E. Jansen            x34         = xl(e,4,1) - xl(e,3,1)
160*59599516SKenneth E. Jansen
161*59599516SKenneth E. Jansen            y12         = xl(e,2,2) - xl(e,1,2)
162*59599516SKenneth E. Jansen            y13         = xl(e,3,2) - xl(e,1,2)
163*59599516SKenneth E. Jansen            y14         = xl(e,4,2) - xl(e,1,2)
164*59599516SKenneth E. Jansen            y23         = xl(e,3,2) - xl(e,2,2)
165*59599516SKenneth E. Jansen            y24         = xl(e,4,2) - xl(e,2,2)
166*59599516SKenneth E. Jansen            y34         = xl(e,4,2) - xl(e,3,2)
167*59599516SKenneth E. Jansen
168*59599516SKenneth E. Jansen            z12         = xl(e,2,3) - xl(e,1,3)
169*59599516SKenneth E. Jansen            z13         = xl(e,3,3) - xl(e,1,3)
170*59599516SKenneth E. Jansen            z14         = xl(e,4,3) - xl(e,1,3)
171*59599516SKenneth E. Jansen            z23         = xl(e,3,3) - xl(e,2,3)
172*59599516SKenneth E. Jansen            z24         = xl(e,4,3) - xl(e,2,3)
173*59599516SKenneth E. Jansen            z34         = xl(e,4,3) - xl(e,3,3)
174*59599516SKenneth E. Jansen
175*59599516SKenneth E. Jansenc
176*59599516SKenneth E. Jansenc.... vertex modes
177*59599516SKenneth E. Jansenc
178*59599516SKenneth E. Jansen	    lDir(e,1,1) = fct * (y14*(z12 - z13) + y12*(z13 - z14)
179*59599516SKenneth E. Jansen     &                         + y13*(-z12 + z14))
180*59599516SKenneth E. Jansen	    lDir(e,1,2) = fct * ( x14*(-z12 + z13) + x13*(z12 - z14)
181*59599516SKenneth E. Jansen     &                          + x12*(-z13 + z14))
182*59599516SKenneth E. Jansen	    lDir(e,1,3) = fct * ( x14*(y12 - y13)
183*59599516SKenneth E. Jansen     &                          + x12*(y13 - y14) + x13*(-y12 + y14))
184*59599516SKenneth E. Jansenc
185*59599516SKenneth E. Jansen	    lDir(e,2,1) = fct * (-(y13*z12) + y14*z12 + y12*z13
186*59599516SKenneth E. Jansen     &                          - y12*z14 + y24*z23 - y23*z24)
187*59599516SKenneth E. Jansen            lDir(e,2,2) = fct * (x13*z12 - x14*z12-x12*z13 + x12*z14
188*59599516SKenneth E. Jansen     &                          - x24*z23 + x23*z24 )
189*59599516SKenneth E. Jansen            lDir(e,2,3) = fct * (-(x13*y12) + x14*y12 + x12*y13
190*59599516SKenneth E. Jansen     &                         - x12*y14 + x24*y23 - x23*y24)
191*59599516SKenneth E. Jansenc
192*59599516SKenneth E. Jansen            lDir(e,3,1) = fct * (y12*z13 - y14*z13 + y13*(-z12 + z14)
193*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
194*59599516SKenneth E. Jansen            lDir(e,3,2) = fct * (-(x12*z13) + x14*z13 + x13*(z12 - z14)
195*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
196*59599516SKenneth E. Jansen            lDir(e,3,3) = fct * (x12*y13 - x14*y13 + x13*(-y12 + y14)
197*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
198*59599516SKenneth E. Jansenc
199*59599516SKenneth E. Jansen            lDir(e,4,1) = fct * (y14*(z12 - z13) - y12*z14 + y13*z14
200*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
201*59599516SKenneth E. Jansen            lDir(e,4,2) = fct * (x14*(-z12 + z13) + x12*z14 - x13*z14
202*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
203*59599516SKenneth E. Jansen            lDir(e,4,3) = fct * (x14*(y12 - y13) - x12*y14 + x13*y14
204*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
205*59599516SKenneth E. Jansenc
206*59599516SKenneth E. Jansenc.... edge modes (quadratic)
207*59599516SKenneth E. Jansenc
208*59599516SKenneth E. Jansen            lDir(e,5,1) = pt25*(-(y13*z12) + y14*z12 + y12*(z13-z14))
209*59599516SKenneth E. Jansen            lDir(e,5,2) = pt25*(x13*z12 - x14*z12 + x12*(-z13 + z14))
210*59599516SKenneth E. Jansen            lDir(e,5,3) = pt25*(-(x13*y12) + x14*y12 + x12*(y13 - y14))
211*59599516SKenneth E. Jansen
212*59599516SKenneth E. Jansen            lDir(e,6,1) = pt25*(-(y13*z12) + y12*z13 + y24*z23-y23*z24)
213*59599516SKenneth E. Jansen            lDir(e,6,2) = pt25*(x13*z12 - x12*z13 - x24*z23 + x23*z24)
214*59599516SKenneth E. Jansen            lDir(e,6,3) = pt25*(-(x13*y12) + x12*y13 + x24*y23-x23*y24)
215*59599516SKenneth E. Jansen
216*59599516SKenneth E. Jansen            lDir(e,7,1) = pt25*((y12 - y14)*z13 + y13*(-z12 + z14))
217*59599516SKenneth E. Jansen            lDir(e,7,2) = pt25*((-x12 + x14)*z13 + x13*(z12 - z14))
218*59599516SKenneth E. Jansen            lDir(e,7,3) = pt25*((x12 - x14)*y13 + x13*(-y12 + y14))
219*59599516SKenneth E. Jansen
220*59599516SKenneth E. Jansen            lDir(e,8,1) = pt25*(y14*(z12 - z13) + (-y12 + y13)*z14)
221*59599516SKenneth E. Jansen            lDir(e,8,2) = pt25*(x14*(-z12 + z13) + (x12 - x13)*z14)
222*59599516SKenneth E. Jansen            lDir(e,8,3) = pt25*(x14*(y12 - y13) + (-x12 + x13)*y14)
223*59599516SKenneth E. Jansen
224*59599516SKenneth E. Jansen            lDir(e,9,1) = pt25*(y14*z12 - y12*z14 + y24*z23 - y23*z24)
225*59599516SKenneth E. Jansen            lDir(e,9,2) = pt25*(-(x14*z12) + x12*z14 - x24*z23+x23*z24)
226*59599516SKenneth E. Jansen            lDir(e,9,3) = pt25*(x14*y12 - x12*y14 + x24*y23 - x23*y24)
227*59599516SKenneth E. Jansen
228*59599516SKenneth E. Jansen            lDir(e,10,1) = pt25*(-(y14*z13) + y13*z14+y24*z23-y23*z24)
229*59599516SKenneth E. Jansen            lDir(e,10,2) = pt25*(x14*z13 - x13*z14-x24*z23 + x23*z24)
230*59599516SKenneth E. Jansen            lDir(e,10,3) = pt25*(-(x14*y13) + x13*y14+x24*y23-x23*y24)
231*59599516SKenneth E. Jansen
232*59599516SKenneth E. Jansen
233*59599516SKenneth E. Jansen         enddo
234*59599516SKenneth E. Jansenc
235*59599516SKenneth E. Jansenc.... cubic tets
236*59599516SKenneth E. Jansenc
237*59599516SKenneth E. Jansen      else if (nshl .eq. 20 ) then
238*59599516SKenneth E. Jansen         fct = 1.d0 / 6.d0
239*59599516SKenneth E. Jansen         do e = 1, npro
240*59599516SKenneth E. Jansen
241*59599516SKenneth E. Jansen            x12         = xl(e,2,1) - xl(e,1,1)
242*59599516SKenneth E. Jansen            x13         = xl(e,3,1) - xl(e,1,1)
243*59599516SKenneth E. Jansen            x14         = xl(e,4,1) - xl(e,1,1)
244*59599516SKenneth E. Jansen            x23         = xl(e,3,1) - xl(e,2,1)
245*59599516SKenneth E. Jansen            x24         = xl(e,4,1) - xl(e,2,1)
246*59599516SKenneth E. Jansenc$$$            x34         = xl(e,4,1) - xl(e,3,1)
247*59599516SKenneth E. Jansen
248*59599516SKenneth E. Jansen            y12         = xl(e,2,2) - xl(e,1,2)
249*59599516SKenneth E. Jansen            y13         = xl(e,3,2) - xl(e,1,2)
250*59599516SKenneth E. Jansen            y14         = xl(e,4,2) - xl(e,1,2)
251*59599516SKenneth E. Jansen            y23         = xl(e,3,2) - xl(e,2,2)
252*59599516SKenneth E. Jansen            y24         = xl(e,4,2) - xl(e,2,2)
253*59599516SKenneth E. Jansenc$$$            y34         = xl(e,4,2) - xl(e,3,2)
254*59599516SKenneth E. Jansen
255*59599516SKenneth E. Jansen            z12         = xl(e,2,3) - xl(e,1,3)
256*59599516SKenneth E. Jansen            z13         = xl(e,3,3) - xl(e,1,3)
257*59599516SKenneth E. Jansen            z14         = xl(e,4,3) - xl(e,1,3)
258*59599516SKenneth E. Jansen            z23         = xl(e,3,3) - xl(e,2,3)
259*59599516SKenneth E. Jansen            z24         = xl(e,4,3) - xl(e,2,3)
260*59599516SKenneth E. Jansenc$$$            z34         = xl(e,4,3) - xl(e,3,3)
261*59599516SKenneth E. Jansen
262*59599516SKenneth E. Jansenc
263*59599516SKenneth E. Jansenc.... vertex modes
264*59599516SKenneth E. Jansenc
265*59599516SKenneth E. Jansen	    lDir(e,1,1) = fct * (y14*(z12 - z13) + y12*(z13 - z14)
266*59599516SKenneth E. Jansen     &                         + y13*(-z12 + z14))
267*59599516SKenneth E. Jansen	    lDir(e,1,2) = fct * ( x14*(-z12 + z13) + x13*(z12 - z14)
268*59599516SKenneth E. Jansen     &                          + x12*(-z13 + z14))
269*59599516SKenneth E. Jansen	    lDir(e,1,3) = fct * ( x14*(y12 - y13)
270*59599516SKenneth E. Jansen     &                          + x12*(y13 - y14) + x13*(-y12 + y14))
271*59599516SKenneth E. Jansenc
272*59599516SKenneth E. Jansen	    lDir(e,2,1) = fct * (-(y13*z12) + y14*z12 + y12*z13
273*59599516SKenneth E. Jansen     &                          - y12*z14 + y24*z23 - y23*z24)
274*59599516SKenneth E. Jansen            lDir(e,2,2) = fct * (x13*z12 - x14*z12-x12*z13 + x12*z14
275*59599516SKenneth E. Jansen     &                          - x24*z23 + x23*z24 )
276*59599516SKenneth E. Jansen            lDir(e,2,3) = fct * (-(x13*y12) + x14*y12 + x12*y13
277*59599516SKenneth E. Jansen     &                         - x12*y14 + x24*y23 - x23*y24)
278*59599516SKenneth E. Jansenc
279*59599516SKenneth E. Jansen            lDir(e,3,1) = fct * (y12*z13 - y14*z13 + y13*(-z12 + z14)
280*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
281*59599516SKenneth E. Jansen            lDir(e,3,2) = fct * (-(x12*z13) + x14*z13 + x13*(z12 - z14)
282*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
283*59599516SKenneth E. Jansen            lDir(e,3,3) = fct * (x12*y13 - x14*y13 + x13*(-y12 + y14)
284*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
285*59599516SKenneth E. Jansenc
286*59599516SKenneth E. Jansen            lDir(e,4,1) = fct * (y14*(z12 - z13) - y12*z14 + y13*z14
287*59599516SKenneth E. Jansen     &                         + y24*z23 - y23*z24)
288*59599516SKenneth E. Jansen            lDir(e,4,2) = fct * (x14*(-z12 + z13) + x12*z14 - x13*z14
289*59599516SKenneth E. Jansen     &                         - x24*z23 + x23*z24)
290*59599516SKenneth E. Jansen            lDir(e,4,3) = fct * (x14*(y12 - y13) - x12*y14 + x13*y14
291*59599516SKenneth E. Jansen     &                         + x24*y23 - x23*y24)
292*59599516SKenneth E. Jansenc
293*59599516SKenneth E. Jansenc.... edge modes (quadratic and cubic)
294*59599516SKenneth E. Jansenc
295*59599516SKenneth E. Jansen            lDir(e,5,1) = pt25*(-(y13*z12) + y14*z12 + y12*(z13-z14))
296*59599516SKenneth E. Jansen            lDir(e,5,2) = pt25*(x13*z12 - x14*z12 + x12*(-z13 + z14))
297*59599516SKenneth E. Jansen            lDir(e,5,3) = pt25*(-(x13*y12) + x14*y12 + x12*(y13 - y14))
298*59599516SKenneth E. Jansen            lDir(e,6,1) = lDir(e,5,1)
299*59599516SKenneth E. Jansen            lDir(e,6,2) = lDir(e,5,2)
300*59599516SKenneth E. Jansen            lDir(e,6,3) = lDir(e,5,3)
301*59599516SKenneth E. Jansen
302*59599516SKenneth E. Jansen            lDir(e,7,1) = pt25*(-(y13*z12) + y12*z13 + y24*z23-y23*z24)
303*59599516SKenneth E. Jansen            lDir(e,7,2) = pt25*(x13*z12 - x12*z13 - x24*z23 + x23*z24)
304*59599516SKenneth E. Jansen            lDir(e,7,3) = pt25*(-(x13*y12) + x12*y13 + x24*y23-x23*y24)
305*59599516SKenneth E. Jansen            lDir(e,8,1) = lDir(e,7,1)
306*59599516SKenneth E. Jansen            lDir(e,8,2) = lDir(e,7,2)
307*59599516SKenneth E. Jansen            lDir(e,8,3) = lDir(e,7,3)
308*59599516SKenneth E. Jansen
309*59599516SKenneth E. Jansen            lDir(e,9,1) = pt25*((y12 - y14)*z13 + y13*(-z12 + z14))
310*59599516SKenneth E. Jansen            lDir(e,9,2) = pt25*((-x12 + x14)*z13 + x13*(z12 - z14))
311*59599516SKenneth E. Jansen            lDir(e,9,3) = pt25*((x12 - x14)*y13 + x13*(-y12 + y14))
312*59599516SKenneth E. Jansen            lDir(e,10,1) = lDir(e,9,1)
313*59599516SKenneth E. Jansen            lDir(e,10,2) = lDir(e,9,2)
314*59599516SKenneth E. Jansen            lDir(e,10,3) = lDir(e,9,3)
315*59599516SKenneth E. Jansen
316*59599516SKenneth E. Jansen            lDir(e,11,1) = pt25*(y14*(z12 - z13) + (-y12 + y13)*z14)
317*59599516SKenneth E. Jansen            lDir(e,11,2) = pt25*(x14*(-z12 + z13) + (x12 - x13)*z14)
318*59599516SKenneth E. Jansen            lDir(e,11,3) = pt25*(x14*(y12 - y13) + (-x12 + x13)*y14)
319*59599516SKenneth E. Jansen            lDir(e,12,1) = lDir(e,11,1)
320*59599516SKenneth E. Jansen            lDir(e,12,2) = lDir(e,11,2)
321*59599516SKenneth E. Jansen            lDir(e,12,3) = lDir(e,11,3)
322*59599516SKenneth E. Jansen
323*59599516SKenneth E. Jansen
324*59599516SKenneth E. Jansen            lDir(e,13,1) = pt25*(y14*z12 - y12*z14 + y24*z23 - y23*z24)
325*59599516SKenneth E. Jansen            lDir(e,13,2) = pt25*(-(x14*z12) + x12*z14-x24*z23+x23*z24)
326*59599516SKenneth E. Jansen            lDir(e,13,3) = pt25*(x14*y12 - x12*y14 + x24*y23 - x23*y24)
327*59599516SKenneth E. Jansen            lDir(e,14,1) = lDir(e,13,1)
328*59599516SKenneth E. Jansen            lDir(e,14,2) = lDir(e,13,2)
329*59599516SKenneth E. Jansen            lDir(e,14,3) = lDir(e,13,3)
330*59599516SKenneth E. Jansen
331*59599516SKenneth E. Jansen            lDir(e,15,1) = pt25*(-(y14*z13) + y13*z14+y24*z23-y23*z24)
332*59599516SKenneth E. Jansen            lDir(e,15,2) = pt25*(x14*z13 - x13*z14-x24*z23 + x23*z24)
333*59599516SKenneth E. Jansen            lDir(e,15,3) = pt25*(-(x14*y13) + x13*y14+x24*y23-x23*y24)
334*59599516SKenneth E. Jansen            lDir(e,16,1) = lDir(e,15,1)
335*59599516SKenneth E. Jansen            lDir(e,16,2) = lDir(e,15,2)
336*59599516SKenneth E. Jansen            lDir(e,16,3) = lDir(e,15,3)
337*59599516SKenneth E. Jansenc
338*59599516SKenneth E. Jansenc.... face modes (cubic)
339*59599516SKenneth E. Jansenc
340*59599516SKenneth E. Jansen            lDir(e,17,1) = pt5*(-(y13*z12) + y12*z13)
341*59599516SKenneth E. Jansen            lDir(e,17,2) = pt5*(x13*z12 - x12*z13)
342*59599516SKenneth E. Jansen            lDir(e,17,3) = pt5*(-(x13*y12) + x12*y13)
343*59599516SKenneth E. Jansen
344*59599516SKenneth E. Jansen            lDir(e,18,1) = pt5*(y14*z12 - y12*z14)
345*59599516SKenneth E. Jansen            lDir(e,18,2) = pt5*(-(x14*z12) + x12*z14)
346*59599516SKenneth E. Jansen            lDir(e,18,3) = pt5*(x14*y12 - x12*y14)
347*59599516SKenneth E. Jansen
348*59599516SKenneth E. Jansen            lDir(e,19,1) = pt5*(y24*z23 - y23*z24)
349*59599516SKenneth E. Jansen            lDir(e,19,2) = pt5*(-(x24*z23) + x23*z24)
350*59599516SKenneth E. Jansen            lDir(e,19,3) = pt5*(x24*y23 - x23*y24)
351*59599516SKenneth E. Jansen
352*59599516SKenneth E. Jansen            lDir(e,20,1) = pt5*(-(y14*z13) + y13*z14)
353*59599516SKenneth E. Jansen            lDir(e,20,2) = pt5*(x14*z13 - x13*z14)
354*59599516SKenneth E. Jansen            lDir(e,20,3) = pt5*(-(x14*y13) + x13*y14)
355*59599516SKenneth E. Jansen
356*59599516SKenneth E. Jansen         enddo
357*59599516SKenneth E. Jansenc
358*59599516SKenneth E. Jansenc.... hexes
359*59599516SKenneth E. Jansenc
360*59599516SKenneth E. Jansen      else if (nenl .eq. 8) then
361*59599516SKenneth E. Jansen         fct = 1.d0 / 12.d0
362*59599516SKenneth E. Jansen         do e = 1, npro
363*59599516SKenneth E. Jansen	    x13		= xl(e,1,1) - xl(e,3,1)
364*59599516SKenneth E. Jansen	    x16		= xl(e,1,1) - xl(e,6,1)
365*59599516SKenneth E. Jansen	    x18		= xl(e,1,1) - xl(e,8,1)
366*59599516SKenneth E. Jansen	    x24		= xl(e,2,1) - xl(e,4,1)
367*59599516SKenneth E. Jansen	    x25		= xl(e,2,1) - xl(e,5,1)
368*59599516SKenneth E. Jansen	    x27		= xl(e,2,1) - xl(e,7,1)
369*59599516SKenneth E. Jansen	    x36		= xl(e,3,1) - xl(e,6,1)
370*59599516SKenneth E. Jansen	    x38		= xl(e,3,1) - xl(e,8,1)
371*59599516SKenneth E. Jansen	    x45		= xl(e,4,1) - xl(e,5,1)
372*59599516SKenneth E. Jansen	    x47		= xl(e,4,1) - xl(e,7,1)
373*59599516SKenneth E. Jansen	    x57		= xl(e,5,1) - xl(e,7,1)
374*59599516SKenneth E. Jansen	    x68		= xl(e,6,1) - xl(e,8,1)
375*59599516SKenneth E. Jansenc
376*59599516SKenneth E. Jansen	    y13		= xl(e,1,2) - xl(e,3,2)
377*59599516SKenneth E. Jansen	    y16		= xl(e,1,2) - xl(e,6,2)
378*59599516SKenneth E. Jansen	    y18		= xl(e,1,2) - xl(e,8,2)
379*59599516SKenneth E. Jansen	    y24		= xl(e,2,2) - xl(e,4,2)
380*59599516SKenneth E. Jansen	    y25		= xl(e,2,2) - xl(e,5,2)
381*59599516SKenneth E. Jansen	    y27		= xl(e,2,2) - xl(e,7,2)
382*59599516SKenneth E. Jansen	    y36		= xl(e,3,2) - xl(e,6,2)
383*59599516SKenneth E. Jansen	    y38		= xl(e,3,2) - xl(e,8,2)
384*59599516SKenneth E. Jansen	    y45		= xl(e,4,2) - xl(e,5,2)
385*59599516SKenneth E. Jansen	    y47		= xl(e,4,2) - xl(e,7,2)
386*59599516SKenneth E. Jansen	    y57		= xl(e,5,2) - xl(e,7,2)
387*59599516SKenneth E. Jansen	    y68		= xl(e,6,2) - xl(e,8,2)
388*59599516SKenneth E. Jansenc
389*59599516SKenneth E. Jansen	    z13		= xl(e,1,3) - xl(e,3,3)
390*59599516SKenneth E. Jansen	    z16		= xl(e,1,3) - xl(e,6,3)
391*59599516SKenneth E. Jansen	    z18		= xl(e,1,3) - xl(e,8,3)
392*59599516SKenneth E. Jansen	    z24		= xl(e,2,3) - xl(e,4,3)
393*59599516SKenneth E. Jansen	    z25		= xl(e,2,3) - xl(e,5,3)
394*59599516SKenneth E. Jansen	    z27		= xl(e,2,3) - xl(e,7,3)
395*59599516SKenneth E. Jansen	    z36		= xl(e,3,3) - xl(e,6,3)
396*59599516SKenneth E. Jansen	    z38		= xl(e,3,3) - xl(e,8,3)
397*59599516SKenneth E. Jansen	    z45		= xl(e,4,3) - xl(e,5,3)
398*59599516SKenneth E. Jansen	    z47		= xl(e,4,3) - xl(e,7,3)
399*59599516SKenneth E. Jansen	    z57		= xl(e,5,3) - xl(e,7,3)
400*59599516SKenneth E. Jansen	    z68		= xl(e,6,3) - xl(e,8,3)
401*59599516SKenneth E. Jansenc
402*59599516SKenneth E. Jansen	x31= -x13
403*59599516SKenneth E. Jansen	x61= -x16
404*59599516SKenneth E. Jansen	x81= -x18
405*59599516SKenneth E. Jansen	x42= -x24
406*59599516SKenneth E. Jansen	x52= -x25
407*59599516SKenneth E. Jansen	x72= -x27
408*59599516SKenneth E. Jansen	x63= -x36
409*59599516SKenneth E. Jansen	x83= -x38
410*59599516SKenneth E. Jansen	x54= -x45
411*59599516SKenneth E. Jansen	x74= -x47
412*59599516SKenneth E. Jansen	x75= -x57
413*59599516SKenneth E. Jansen	x86= -x68
414*59599516SKenneth E. Jansen	y31= -y13
415*59599516SKenneth E. Jansen	y61= -y16
416*59599516SKenneth E. Jansen	y81= -y18
417*59599516SKenneth E. Jansen	y42= -y24
418*59599516SKenneth E. Jansen	y52= -y25
419*59599516SKenneth E. Jansen	y72= -y27
420*59599516SKenneth E. Jansen	y63= -y36
421*59599516SKenneth E. Jansen	y83= -y38
422*59599516SKenneth E. Jansen	y54= -y45
423*59599516SKenneth E. Jansen	y74= -y47
424*59599516SKenneth E. Jansen	y75= -y57
425*59599516SKenneth E. Jansen	y86= -y68
426*59599516SKenneth E. Jansen	z31= -z13
427*59599516SKenneth E. Jansen	z61= -z16
428*59599516SKenneth E. Jansen	z81= -z18
429*59599516SKenneth E. Jansen	z42= -z24
430*59599516SKenneth E. Jansen	z52= -z25
431*59599516SKenneth E. Jansen	z72= -z27
432*59599516SKenneth E. Jansen	z63= -z36
433*59599516SKenneth E. Jansen	z83= -z38
434*59599516SKenneth E. Jansen	z54= -z45
435*59599516SKenneth E. Jansen	z74= -z47
436*59599516SKenneth E. Jansen	z75= -z57
437*59599516SKenneth E. Jansen	z86= -z68
438*59599516SKenneth E. Jansen
439*59599516SKenneth E. Jansen	    lDir(e,1,1) = fct * (-y24 * z45 + y36 * z24 - y68 * z45
440*59599516SKenneth E. Jansen     1				+ z24 * y45 - z36 * y24 + z68 * y45 )
441*59599516SKenneth E. Jansen	    lDir(e,2,1) = fct * (-y16 * z63 + y54 * z16 - y47 * z63
442*59599516SKenneth E. Jansen     1				+ z16 * y63 - z54 * y16 + z47 * y63 )
443*59599516SKenneth E. Jansen	    lDir(e,3,1) = fct * (-y42 * z27 + y18 * z42 - y86 * z27
444*59599516SKenneth E. Jansen     1				+ z42 * y27 - z18 * y42 + z86 * y27 )
445*59599516SKenneth E. Jansen	    lDir(e,4,1) = fct * (-y38 * z81 + y72 * z38 - y25 * z81
446*59599516SKenneth E. Jansen     1				+ z38 * y81 - z72 * y38 + z25 * y81 )
447*59599516SKenneth E. Jansen	    lDir(e,5,1) = fct * (-y61 * z18 + y27 * z61 - y74 * z18
448*59599516SKenneth E. Jansen     1				+ z61 * y18 - z27 * y61 + z74 * y18 )
449*59599516SKenneth E. Jansen	    lDir(e,6,1) = fct * (-y57 * z72 + y81 * z57 - y13 * z72
450*59599516SKenneth E. Jansen     1				+ z57 * y72 - z81 * y57 + z13 * y72 )
451*59599516SKenneth E. Jansen	    lDir(e,7,1) = fct * (-y83 * z36 + y45 * z83 - y52 * z36
452*59599516SKenneth E. Jansen     1				+ z83 * y36 - z45 * y83 + z52 * y36 )
453*59599516SKenneth E. Jansen	    lDir(e,8,1) = fct * (-y75 * z54 + y63 * z75 - y31 * z54
454*59599516SKenneth E. Jansen     1				+ z75 * y54 - z63 * y75 + z31 * y54 )
455*59599516SKenneth E. Jansenc
456*59599516SKenneth E. Jansen	    lDir(e,1,2) = fct * (-z24 * x45 + z36 * x24 - z68 * x45
457*59599516SKenneth E. Jansen     1				+ x24 * z45 - x36 * z24 + x68 * z45 )
458*59599516SKenneth E. Jansen	    lDir(e,2,2) = fct * (-z16 * x63 + z54 * x16 - z47 * x63
459*59599516SKenneth E. Jansen     1				+ x16 * z63 - x54 * z16 + x47 * z63 )
460*59599516SKenneth E. Jansen	    lDir(e,3,2) = fct * (-z42 * x27 + z18 * x42 - z86 * x27
461*59599516SKenneth E. Jansen     1				+ x42 * z27 - x18 * z42 + x86 * z27 )
462*59599516SKenneth E. Jansen	    lDir(e,4,2) = fct * (-z38 * x81 + z72 * x38 - z25 * x81
463*59599516SKenneth E. Jansen     1				+ x38 * z81 - x72 * z38 + x25 * z81 )
464*59599516SKenneth E. Jansen	    lDir(e,5,2) = fct * (-z61 * x18 + z27 * x61 - z74 * x18
465*59599516SKenneth E. Jansen     1				+ x61 * z18 - x27 * z61 + x74 * z18 )
466*59599516SKenneth E. Jansen	    lDir(e,6,2) = fct * (-z57 * x72 + z81 * x57 - z13 * x72
467*59599516SKenneth E. Jansen     1				+ x57 * z72 - x81 * z57 + x13 * z72 )
468*59599516SKenneth E. Jansen	    lDir(e,7,2) = fct * (-z83 * x36 + z45 * x83 - z52 * x36
469*59599516SKenneth E. Jansen     1				+ x83 * z36 - x45 * z83 + x52 * z36 )
470*59599516SKenneth E. Jansen	    lDir(e,8,2) = fct * (-z75 * x54 + z63 * x75 - z31 * x54
471*59599516SKenneth E. Jansen     1				+ x75 * z54 - x63 * z75 + x31 * z54 )
472*59599516SKenneth E. Jansenc
473*59599516SKenneth E. Jansen	    lDir(e,1,3) = fct * (-x24 * y45 + x36 * y24 - x68 * y45
474*59599516SKenneth E. Jansen     1				+ y24 * x45 - y36 * x24 + y68 * x45 )
475*59599516SKenneth E. Jansen	    lDir(e,2,3) = fct * (-x16 * y63 + x54 * y16 - x47 * y63
476*59599516SKenneth E. Jansen     1				+ y16 * x63 - y54 * x16 + y47 * x63 )
477*59599516SKenneth E. Jansen	    lDir(e,3,3) = fct * (-x42 * y27 + x18 * y42 - x86 * y27
478*59599516SKenneth E. Jansen     1				+ y42 * x27 - y18 * x42 + y86 * x27 )
479*59599516SKenneth E. Jansen	    lDir(e,4,3) = fct * (-x38 * y81 + x72 * y38 - x25 * y81
480*59599516SKenneth E. Jansen     1				+ y38 * x81 - y72 * x38 + y25 * x81 )
481*59599516SKenneth E. Jansen	    lDir(e,5,3) = fct * (-x61 * y18 + x27 * y61 - x74 * y18
482*59599516SKenneth E. Jansen     1				+ y61 * x18 - y27 * x61 + y74 * x18 )
483*59599516SKenneth E. Jansen	    lDir(e,6,3) = fct * (-x57 * y72 + x81 * y57 - x13 * y72
484*59599516SKenneth E. Jansen     1				+ y57 * x72 - y81 * x57 + y13 * x72 )
485*59599516SKenneth E. Jansen	    lDir(e,7,3) = fct * (-x83 * y36 + x45 * y83 - x52 * y36
486*59599516SKenneth E. Jansen     1				+ y83 * x36 - y45 * x83 + y52 * x36 )
487*59599516SKenneth E. Jansen	    lDir(e,8,3) = fct * (-x75 * y54 + x63 * y75 - x31 * y54
488*59599516SKenneth E. Jansen     1				+ y75 * x54 - y63 * x75 + y31 * x54 )
489*59599516SKenneth E. Jansenc
490*59599516SKenneth E. Jansen         enddo
491*59599516SKenneth E. Jansen      else
492*59599516SKenneth E. Jansen         write(*,*) 'Error in e3sts: elt type not impl.'
493*59599516SKenneth E. Jansen         stop
494*59599516SKenneth E. Jansen      endif
495*59599516SKenneth E. Jansen
496*59599516SKenneth E. Jansen      return
497*59599516SKenneth E. Jansen      end
498*59599516SKenneth E. Jansen
499*59599516SKenneth E. Jansen
500*59599516SKenneth E. Jansen
501