32
33
34
36
37
38
39#include "implicit_f.inc"
40
41
42
44 . x1(3),x2(3),x3(3),pp(3,3)
45 INTEGER IERROR
46
47
48
50 . u(3),v(3),w(3),
51 . nn,pnor1,pnor2,pnorm1,det,det1,det2,det3
52
53 ierror = 0
54
55 u(1) = x2(1) - x1(1)
56 u(2) = x2(2) - x1(2)
57 u(3) = x2(3) - x1(3)
58 v(1) = x3(1) - x1(1)
59 v(2) = x3(2) - x1(2)
60 v(3) = x3(3) - x1(3)
61 w(1) = u(2)*v(3)-u(3)*v(2)
62 w(2) = u(3)*v(1)-u(1)*v(3)
63 w(3) = u(1)*v(2)-u(2)*v(1)
64 v(1) = w(2)*u(3)-w(3)*u(2)
65 v(2) = w(3)*u(1)-w(1)*u(3)
66 v(3) = w(1)*u(2)-w(2)*u(1)
67
68
69
70 pnor1=sqrt(u(1)*u(1)+u(2)*u(2)+u(3)*u(3))
71 IF (pnor1 < em20) THEN
72 ierror=1
73
74
75
76
77
78
79 RETURN
80 END IF
81
82 pnor2=sqrt(v(1)*v(1)+v(2)*v(2)+v(3)*v(3))
83 IF (pnor2 > em20) THEN
84 pnorm1=one/(pnor1*pnor2)
85 det1=abs((u(2)*v(3)-u(3)*v(2))*pnorm1)
86 det2=abs((u(3)*v(1)-u(1)*v(3))*pnorm1)
87 det3=abs((u(1)*v(2)-u(2)*v(1))*pnorm1)
88 det=
max(det1,det2,det3)
89 ELSE
90 det=zero
91 ENDIF
92 IF (det < em5) THEN
93 ierror=2
94
95
96
97
98 IF(abs(u(2)) > em5) THEN
99 v(1)=abs(u(1))+ten
100 ELSE
101 v(2)=ten
102 ENDIF
103 ENDIF
104
105 w(1) = u(2)*v(3)-u(3)*v(2)
106 w(2) = u(3)*v(1)-u(1)*v(3)
107 w(3) = u(1)*v(2)-u(2)*v(1)
108
109 nn = one/
max(em20,sqrt(u(1)*u(1)+u(2)*u(2)+u(3)*u(3)))
110 u(1) = u(1)*nn
111 u(2) = u(2)*nn
112 u(3) = u(3)*nn
113 nn = one/
max(em20,sqrt(v(1)*v(1)+v(2)*v(2)+v(3)*v(3)))
114 v(1) = v(1)*nn
115 v(2) = v(2)*nn
116 v(3) = v(3)*nn
117 nn = one/
max(em20,sqrt(w(1)*w(1)+w(2)*w(2)+w(3)*w(3)))
118 w(1) = w(1)*nn
119 w(2) = w(2)*nn
120 w(3) = w(3)*nn
121
122 pp(1,1)=u(1)
123 pp(2,1)=u(2)
124 pp(3,1)=u(3)
125 pp(1,2)=v(1)
126 pp(2,2)=v(2)
127 pp(3,2)=v(3)
128 pp(1,3)=w(1)
129 pp(2,3)=w(2)
130 pp(3,3)=w(3)
131
132 RETURN