5 * Revision 1.1.1.1 1996/02/15 17:48:49 mclareni
9 #include "kernnum/pilot.h"
10 SUBROUTINE CINV(N,A,IDIM,R,IFAIL)
12 COMPLEX A(IDIM,N),ONE,DET,TEMP,S,
13 $ C11,C12,C13,C21,C22,C23,C31,C32,C33
15 DATA NAME/'CINV'/,KPRNT/0/
18 C ******************************************************************
20 C REPLACES A BY ITS INVERSE.
22 C (PARAMETERS AS FOR CEQINV.)
24 C CALLS ... CFACT, CFINV, F010PR, ABEND.
26 C ******************************************************************
28 C TEST FOR PARAMETER ERRORS.
30 IF((N.LT.1).OR.(N.GT.IDIM)) GO TO 7
41 C11=A(2,2)*A(3,3)-A(2,3)*A(3,2)
42 C12=A(2,3)*A(3,1)-A(2,1)*A(3,3)
43 C13=A(2,1)*A(3,2)-A(2,2)*A(3,1)
44 C21=A(3,2)*A(1,3)-A(3,3)*A(1,2)
45 C22=A(3,3)*A(1,1)-A(3,1)*A(1,3)
46 C23=A(3,1)*A(1,2)-A(3,2)*A(1,1)
47 C31=A(1,2)*A(2,3)-A(1,3)*A(2,2)
48 C32=A(1,3)*A(2,1)-A(1,1)*A(2,3)
49 C33=A(1,1)*A(2,2)-A(1,2)*A(2,1)
50 T1=ABS(REAL(A(1,1)))+ABS(AIMAG(A(1,1)))
51 T2=ABS(REAL(A(2,1)))+ABS(AIMAG(A(2,1)))
52 T3=ABS(REAL(A(3,1)))+ABS(AIMAG(A(3,1)))
54 C (SET TEMP=PIVOT AND DET=PIVOT*DET.)
61 1 IF(T3.GE.T1) GO TO 2
70 C SET ELEMENTS OF INVERSE IN A.
71 3 IF( REAL(DET).EQ.0. .AND. AIMAG(DET).EQ.0. ) GO TO 8
86 C N=2 CASE BY CRAMERS RULE.
88 DET=A(1,1)*A(2,2)-A(1,2)*A(2,1)
89 IF( REAL(DET).EQ.0. .AND. AIMAG(DET).EQ.0. ) GO TO 8
100 5 IF( REAL(A(1,1)).EQ.0. .AND. AIMAG(A(1,1)).EQ.0. ) GO TO 8
104 C N.GT.3 CASES. FACTORIZE MATRIX AND INVERT.
106 6 CALL CFACT(N,A,IDIM,R,IFAIL,DET,JFAIL)
107 IF(IFAIL.NE.0) RETURN
108 CALL CFINV(N,A,IDIM,R)
114 CALL F010PR(NAME,N,IDIM,K,KPRNT)