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