34
35
36
37#include "implicit_f.inc"
38
39
40
41
43 . x1, x2, x3, x4, x5, x6, x7, x8,
44 . y1, y2, y3, y4, y5, y6, y7, y8,
45 . z1, z2, z3, z4, z5, z6, z7, z8,
46 . e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z
47
48
49
51 . p1x,p2x,p3x, p4x,p1y,p2y,p3y,p4y,p1z,p2z,p3z, p4z,
52 . rx,ry,rz,sx,sy,sz, cc,c1,c2
53
54 p1x = x1+x5
55 p1y = y1+y5
56 p1z = z1+z5
57 p2x = x2+x6
58 p2y = y2+y6
59 p2z = z2+z6
60 p3x = x3+x7
61 p3y = y3+y7
62 p3z = z3+z7
63 p4x = x4+x8
64 p4y = y4+y8
65 p4z = z4+z8
66
67 rx = p2x + p3x - p1x - p4x
68 ry = p2y + p3y - p1y - p4y
69 rz = p2z + p3z - p1z - p4z
70 sx = p3x + p4x - p1x - p2x
71 sy = p3y + p4y - p1y - p2y
72 sz = p3z + p4z - p1z - p2z
73
74 e3x = ry * sz - rz * sy
75 e3y = rz * sx - rx * sz
76 e3z = rx * sy - ry * sx
77 cc = one /
max(em20,sqrt(e3x*e3x + e3y*e3y + e3z*e3z))
78 e3x = e3x * cc
79 e3y = e3y * cc
80 e3z = e3z * cc
81
82 c1 = rx*rx + ry*ry + rz*rz
83 c2 = sx*sx + sy*sy + sz*sz
84 IF (c1 /= zero) THEN
85 cc = sqrt(c2/c1)
86 e1x = rx*cc+(sy*e3z-sz*e3y)
87 e1y = ry*cc+(sz*e3x-sx*e3z)
88 e1z = rz*cc+(sx*e3y-sy*e3x)
89 ELSEIF (c2 /= zero) THEN
90 cc = sqrt(c1/c2)
91 e1x = rx+(sy*e3z-sz*e3y)*cc
92 e1y = ry+(sz*e3x-sx*e3z)*cc
93 e1z = rz+(sx*e3y-sy*e3x)*cc
94 END IF
95
96 cc = sqrt(e1x*e1x + e1y*e1y + e1z*e1z)
97 IF (cc /= zero) cc = one / cc
98 e1x = e1x*cc
99 e1y = e1y*cc
100 e1z = e1z*cc
101 e2x = e3y * e1z - e3z * e1y
102 e2y = e3z * e1x - e3x * e1z
103 e2z = e3x * e1y - e3y * e1x
104
105 RETURN