5 * Revision 1.1.1.1 1996/02/15 17:48:49 mclareni
9 #include "kernnum/pilot.h"
10 SUBROUTINE DEQN(N,A,IDIM,R,IFAIL,K,B)
12 DOUBLE PRECISION A(IDIM,N),B(IDIM,K),DET,S,TEMP,
13 $ B1,Y1,Y2,L11,L21,L22,L31,L32,L33,U12,U13,U23
15 DATA NAME/'DEQN'/,KPRNT/1/
17 C ******************************************************************
19 C REPLACES B BY THE SOLUTION X OF A*X=B, AFTER WHICH A IS UNDEFINED.
21 C (PARAMETERS AS FOR DEQINV.)
23 C CALLS ... DFACT, DFEQN, F010PR, ABEND.
25 C ******************************************************************
27 C TEST FOR PARAMETER ERRORS.
29 IF((N.LT.1).OR.(N.GT.IDIM).OR.(K.LT.1)) GO TO 11
39 C FACTORIZE MATRIX A=L*U.
40 C (FIRST PIVOT SEARCH)
51 1 IF(T3.GE.T1) GO TO 2
62 IF(TEMP.EQ.0D0) GO TO 10
66 L22=A(M2,2)-A(M2,1)*U12
67 L32=A(M3,2)-A(M3,1)*U12
68 C (SECOND PIVOT SEARCH)
69 IF( ABS(SNGL(L22)) .GE. ABS(SNGL(L32)) ) GO TO 4
78 IF(L22.EQ.0D0) GO TO 10
80 U23=L22*(A(M2,3)-L21*U13)
81 TEMP=A(M3,3)-L31*U13-L32*U23
82 IF(TEMP.EQ.0D0) GO TO 10
85 C SOLVE L*Y=B AND U*X=Y.
88 Y2=L22*(B(M2,J)-L21*Y1)
89 B(3,J)=L33*(B(M3,J)-L31*Y1-L32*Y2)
91 B(1,J)=Y1-U12*B(2,J)-U13*B(3,J)
97 C N=2 CASE BY CRAMERS RULE.
99 DET=A(1,1)*A(2,2)-A(1,2)*A(2,1)
100 IF(DET.EQ.0D0) GO TO 12
104 B(1,J)=S*(A(2,2)*B1-A(1,2)*B(2,J))
105 B(2,J)=S*(-A(2,1)*B1+A(1,1)*B(2,J))
111 8 IF(A(1,1).EQ.0D0) GO TO 12
118 C N.GT.3 CASES. FACTORIZE MATRIX AND SOLVE SYSTEM.
120 10 CALL DFACT(N,A,IDIM,R,IFAIL,DET,JFAIL)
121 IF(IFAIL.NE.0) RETURN
122 CALL DFEQN(N,A,IDIM,R,K,B)
128 CALL F010PR(NAME,N,IDIM,K,KPRNT)