1      SUBROUTINE CROSS(B,C,A)
2C     =======================
3C
4C
5      DIMENSION A(3),B(3),C(3)
6      A(1)=B(2)*C(3)-C(2)*B(3)
7      A(2)=B(3)*C(1)-C(3)*B(1)
8      A(3)=B(1)*C(2)-C(1)*B(2)
9      RETURN
10      END
11C
12      FUNCTION DOT(A,B)
13C     ================
14C
15C     DOT PRODUCT OF TWO VECTORS
16C
17      DIMENSION A(3),B(3)
18      DOT=A(1)*B(1)+A(2)*B(2)+A(3)*B(3)
19      RETURN
20      END
21	SUBROUTINE MATMUL(A,B,C)
22C	========================
23C
24C	MULTIPLY 2 3X3 MATRICES
25C
26C	A=BC
27C
28	REAL A(3,3),B(3,3),C(3,3)
29	DO 1 I=1,3
30	DO 2 J=1,3
31	S=0
32	DO 3 K=1,3
333	S=S+B(I,K)*C(K,J)
342	A(I,J)=S
351	CONTINUE
36	RETURN
37	END
38	SUBROUTINE MATVEC(V,A,B)
39C	========================
40C
41C	POST-MULTIPLY A 3X3 MATRIX BY A VECTOR
42C
43C	V=AB
44C
45	REAL A(3,3),B(3),V(3)
46	DO 1 I=1,3
47	S=0
48	DO 2 J=1,3
492	S=S+A(I,J)*B(J)
501	V(I)=S
51	RETURN
52	END
53	SUBROUTINE MINV(A,B,D)
54C	======================
55C
56C	INVERT A GENERAL 3X3 MATRIX AND RETURN DETERMINANT IN D
57C
58C	A=(B)-1
59C
60	REAL A(3,3),B(3,3),C(3,3)
61	CALL CROSS(B(1,2),B(1,3),C(1,1))
62	CALL CROSS(B(1,3),B(1,1),C(1,2))
63	CALL CROSS(B(1,1),B(1,2),C(1,3))
64	D=DOT(B(1,1),C(1,1))
65C
66C	TEST DETERMINANT
67C
68	IF(ABS(D).GT.1.E-30)GO TO 10
69	D=0.0
70	RETURN
71C
72C	DETERMINANT IS NON-ZERO
73C
7410	DO 20 I=1,3
75	DO 20 J=1,3
7620	A(I,J)=C(J,I)/D
77	RETURN
78	END
79C
80      SUBROUTINE SCALEV(A,X,B)
81C     ========================
82C
83C     SCALE A VECTOR B WITH SCALAR X AND PUT RESULT IN A
84C
85      DIMENSION A(3),B(3)
86      DO 10 I=1,3
87      A(I)=B(I)*X
88   10 CONTINUE
89      RETURN
90      END
91	SUBROUTINE TRANSP(A,B)
92C	======================
93C
94C	TRANSPOSE A 3X3 MATRIX
95C
96C	A=BT
97C
98	REAL A(3,3),B(3,3)
99	DO 1 I=1,3
100	DO 1 J=1,3
1011	A(I,J)=B(J,I)
102	RETURN
103	END
104      SUBROUTINE UNIT(V)
105C     =================
106C
107C
108      REAL V(3)
109C****VECTOR V REDUCED TO UNIT VECTOR
110      VMOD=V(1)**2+V(2)**2+V(3)**2
111      VMOD=SQRT(VMOD)
112      DO 1 I=1,3
113    1 V(I)=V(I)/VMOD
114      RETURN
115      END
116      SUBROUTINE VDIF(A,B,C)
117C     =====================
118C
119C
120C     SUBTRACT TWO VECTORS
121C
122      DIMENSION A(3),B(3),C(3)
123      DO 10 I=1,3
124      A(I)=B(I)-C(I)
125   10 CONTINUE
126      RETURN
127      END
128      SUBROUTINE VSET(A,B)
129C     ====================
130C
131C
132C     MOVE A VECTOR FROM B TO A
133C
134      DIMENSION A(3),B(3)
135      DO 10 I=1,3
136   10 A(I)=B(I)
137      RETURN
138      END
139      SUBROUTINE VSUM(A,B,C)
140C     ======================
141C
142C
143C     ADD TWO VECTORS
144C
145      DIMENSION A(3),B(3),C(3)
146      DO 10 I=1,3
147      A(I)=B(I)+C(I)
148   10 CONTINUE
149      RETURN
150      END
151