Revision: | 1.1 |
Committed: | Wed Sep 17 04:01:49 2008 UTC (16 years, 7 months ago) by loizides |
Branch: | MAIN |
CVS Tags: | Mit_032, Mit_031, Mit_025c_branch2, Mit_025c_branch1, Mit_030, Mit_029c, Mit_030_pre1, Mit_029a, Mit_029, Mit_029_pre1, Mit_028a, Mit_025c_branch0, Mit_028, Mit_027a, Mit_027, Mit_026, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, V07-05-00, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, ConvRejection-10-06-09, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, Mit_010, Mit_009c, Mit_009b, Mit_009a, Mit_009, Mit_008, Mit_008pre2, Mit_008pre1, Mit_006b, Mit_006a, Mit_006, Mit_005, Mit_004, HEAD |
Branch point for: | Mit_025c_branch |
Log Message: | Moved MitVertex contents to MitCommon. MitVertex therefore is obsolute and should not be touched anymore. |
# | User | Rev | Content |
---|---|---|---|
1 | loizides | 1.1 | c $Id:$ |
2 | |||
3 | * Inital version of CMS port of CTVMFT (CDF vertex fitter). | ||
4 | |||
5 | SUBROUTINE DINV(N,A,IDIM,R,IFAIL) | ||
6 | REAL R(N),T1,T2,T3 | ||
7 | DOUBLE PRECISION A(IDIM,N),DET,TEMP,S, | ||
8 | $ C11,C12,C13,C21,C22,C23,C31,C32,C33 | ||
9 | CHARACTER*6 NAME | ||
10 | DATA NAME/'DINV'/,KPRNT/0/ | ||
11 | C | ||
12 | C ****************************************************************** | ||
13 | C | ||
14 | C REPLACES A BY ITS INVERSE. | ||
15 | C | ||
16 | C (PARAMETERS AS FOR DEQINV.) | ||
17 | C | ||
18 | C CALLS ... DFACT, DFINV, F010PR, ABEND. | ||
19 | C | ||
20 | C ****************************************************************** | ||
21 | C | ||
22 | C TEST FOR PARAMETER ERRORS. | ||
23 | C | ||
24 | IF((N.LT.1).OR.(N.GT.IDIM)) GO TO 7 | ||
25 | C | ||
26 | C TEST FOR N.LE.3. | ||
27 | C | ||
28 | IF(N.GT.3) GO TO 6 | ||
29 | IFAIL=0 | ||
30 | IF(N.LT.3) GO TO 4 | ||
31 | C | ||
32 | C N=3 CASE. | ||
33 | C | ||
34 | C COMPUTE COFACTORS. | ||
35 | C11=A(2,2)*A(3,3)-A(2,3)*A(3,2) | ||
36 | C12=A(2,3)*A(3,1)-A(2,1)*A(3,3) | ||
37 | C13=A(2,1)*A(3,2)-A(2,2)*A(3,1) | ||
38 | C21=A(3,2)*A(1,3)-A(3,3)*A(1,2) | ||
39 | C22=A(3,3)*A(1,1)-A(3,1)*A(1,3) | ||
40 | C23=A(3,1)*A(1,2)-A(3,2)*A(1,1) | ||
41 | C31=A(1,2)*A(2,3)-A(1,3)*A(2,2) | ||
42 | C32=A(1,3)*A(2,1)-A(1,1)*A(2,3) | ||
43 | C33=A(1,1)*A(2,2)-A(1,2)*A(2,1) | ||
44 | T1=ABS(SNGL(A(1,1))) | ||
45 | T2=ABS(SNGL(A(2,1))) | ||
46 | T3=ABS(SNGL(A(3,1))) | ||
47 | C | ||
48 | C (SET TEMP=PIVOT AND DET=PIVOT*DET.) | ||
49 | IF(T1.GE.T2) GO TO 1 | ||
50 | IF(T3.GE.T2) GO TO 2 | ||
51 | C (PIVOT IS A21) | ||
52 | TEMP=A(2,1) | ||
53 | DET=C13*C32-C12*C33 | ||
54 | GO TO 3 | ||
55 | 1 IF(T3.GE.T1) GO TO 2 | ||
56 | C (PIVOT IS A11) | ||
57 | TEMP=A(1,1) | ||
58 | DET=C22*C33-C23*C32 | ||
59 | GO TO 3 | ||
60 | C (PIVOT IS A31) | ||
61 | 2 TEMP=A(3,1) | ||
62 | DET=C23*C12-C22*C13 | ||
63 | C | ||
64 | C SET ELEMENTS OF INVERSE IN A. | ||
65 | 3 IF(DET.EQ.0D0) GO TO 8 | ||
66 | S=TEMP/DET | ||
67 | A(1,1)=S*C11 | ||
68 | A(1,2)=S*C21 | ||
69 | A(1,3)=S*C31 | ||
70 | A(2,1)=S*C12 | ||
71 | A(2,2)=S*C22 | ||
72 | A(2,3)=S*C32 | ||
73 | A(3,1)=S*C13 | ||
74 | A(3,2)=S*C23 | ||
75 | A(3,3)=S*C33 | ||
76 | RETURN | ||
77 | C | ||
78 | 4 IF(N.LT.2) GO TO 5 | ||
79 | C | ||
80 | C N=2 CASE BY CRAMERS RULE. | ||
81 | C | ||
82 | DET=A(1,1)*A(2,2)-A(1,2)*A(2,1) | ||
83 | IF(DET.EQ.0D0) GO TO 8 | ||
84 | S=1D0/DET | ||
85 | C11 =S*A(2,2) | ||
86 | A(1,2)=-S*A(1,2) | ||
87 | A(2,1)=-S*A(2,1) | ||
88 | A(2,2)=S*A(1,1) | ||
89 | A(1,1)=C11 | ||
90 | RETURN | ||
91 | C | ||
92 | C N=1 CASE. | ||
93 | C | ||
94 | 5 IF(A(1,1).EQ.0D0) GO TO 8 | ||
95 | A(1,1)=1D0/A(1,1) | ||
96 | RETURN | ||
97 | C | ||
98 | C N.GT.3 CASES. FACTORIZE MATRIX AND INVERT. | ||
99 | C | ||
100 | 6 CALL DFACT(N,A,IDIM,R,IFAIL,DET,JFAIL) | ||
101 | IF(IFAIL.NE.0) RETURN | ||
102 | CALL DFINV(N,A,IDIM,R) | ||
103 | RETURN | ||
104 | C | ||
105 | C ERROR EXITS. | ||
106 | C | ||
107 | 7 IFAIL=+1 | ||
108 | *** CALL F010PR(NAME,N,IDIM,K,KPRNT) | ||
109 | RETURN | ||
110 | C | ||
111 | 8 IFAIL=-1 | ||
112 | RETURN | ||
113 | C | ||
114 | END |