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