5 * Revision 1.1.1.1 1996/02/15 17:48:49 mclareni
9 #include "kernnum/pilot.h"
10 SUBROUTINE CEQN(N,A,IDIM,R,IFAIL,K,B)
12 COMPLEX A(IDIM,N),B(IDIM,K),ONE,DET,S,TEMP,
13 $ B1,Y1,Y2,L11,L21,L22,L31,L32,L33,U12,U13,U23
15 DATA NAME/'CEQN'/,KPRNT/1/
18 C ******************************************************************
20 C REPLACES B BY THE SOLUTION X OF A*X=B, AFTER WHICH A IS UNDEFINED.
22 C (PARAMETERS AS FOR CEQINV.)
24 C CALLS ... CFACT, CFEQN, F010PR, ABEND.
26 C ******************************************************************
28 C TEST FOR PARAMETER ERRORS.
30 IF((N.LT.1).OR.(N.GT.IDIM).OR.(K.LT.1)) GO TO 11
40 C FACTORIZE MATRIX A=L*U.
41 C (FIRST PIVOT SEARCH)
42 T1=ABS(REAL(A(1,1)))+ABS(AIMAG(A(1,1)))
43 T2=ABS(REAL(A(2,1)))+ABS(AIMAG(A(2,1)))
44 T3=ABS(REAL(A(3,1)))+ABS(AIMAG(A(3,1)))
52 1 IF(T3.GE.T1) GO TO 2
63 IF( REAL(TEMP).EQ.0. .AND. AIMAG(TEMP).EQ.0. ) GO TO 10
67 L22=A(M2,2)-A(M2,1)*U12
68 L32=A(M3,2)-A(M3,1)*U12
69 C (SECOND PIVOT SEARCH)
70 T2=ABS(REAL(L22))+ABS(AIMAG(L22))
71 T3=ABS(REAL(L32))+ABS(AIMAG(L32))
81 IF( REAL(L22).EQ.0. .AND. AIMAG(L22).EQ.0. ) GO TO 10
83 U23=L22*(A(M2,3)-L21*U13)
84 TEMP=A(M3,3)-L31*U13-L32*U23
85 IF( REAL(TEMP).EQ.0. .AND. AIMAG(TEMP).EQ.0. ) GO TO 10
88 C SOLVE L*Y=B AND U*X=Y.
91 Y2=L22*(B(M2,J)-L21*Y1)
92 B(3,J)=L33*(B(M3,J)-L31*Y1-L32*Y2)
94 B(1,J)=Y1-U12*B(2,J)-U13*B(3,J)
100 C N=2 CASE BY CRAMERS RULE.
102 DET=A(1,1)*A(2,2)-A(1,2)*A(2,1)
103 IF( REAL(DET).EQ.0. .AND. AIMAG(DET).EQ.0. ) GO TO 12
107 B(1,J)=S*(A(2,2)*B1-A(1,2)*B(2,J))
108 B(2,J)=S*(-A(2,1)*B1+A(1,1)*B(2,J))
114 8 IF( REAL(A(1,1)).EQ.0. .AND. AIMAG(A(1,1)).EQ.0. ) GO TO 12
121 C N.GT.3 CASES. FACTORIZE MATRIX AND SOLVE SYSTEM.
123 10 CALL CFACT(N,A,IDIM,R,IFAIL,DET,JFAIL)
124 IF(IFAIL.NE.0) RETURN
125 CALL CFEQN(N,A,IDIM,R,K,B)
131 CALL F010PR(NAME,N,IDIM,K,KPRNT)