C ________________________________________________________ C | | C | SOLVE A GENERAL COMPLEX FACTORED SYSTEM | C | | C | INPUT: | C | | C | A --CFACT'S OUTPUT | C | | C | B --COMPLEX RIGHT SIDE | C | | C | OUTPUT: | C | | C | X --SOLUTION (CAN BE IDENTIFIED WITH B | C | ALTHOUGH THE RIGHT SIDE IS DESTROYED) | C | | C | BUILTIN FUNCTIONS: CABS,INT | C |________________________________________________________| C SUBROUTINE CSOLVE(X,A,B) COMPLEX A(1),B(1),X(1),T INTEGER I,J,K,L,M,N I = INT(A(1)) IF ( IABS(I) .EQ. 1239 ) GOTO 10 WRITE(6,*) 'ERROR: MUST FACTOR BEFORE SOLVING' STOP C ----------------------------- C |*** FORWARD ELIMINATION ***| C ----------------------------- 10 N = INT(A(2)) M = N + 1 J = 4 - M IF ( I .LT. 0. ) GOTO 80 DO 20 I = 1,N 20 X(I) = B(I) K = 1 30 J = J + M IF ( CABS(A(J+K)) .EQ. 0. ) GOTO 80 IF ( K .EQ. N ) GOTO 50 L = INT(A(J)) T = X(L) X(L) = X(K) X(K) = T K = K + 1 IF ( CABS(T) .EQ. 0. ) GOTO 30 DO 40 I = K,N 40 X(I) = X(I) - T*A(I+J) GOTO 30 C -------------------------------------- C |*** BACK SUBSTITUTION BY COLUMNS ***| C -------------------------------------- 50 T = X(K)/A(J+K) 60 X(K) = T IF ( K .EQ. 1 ) RETURN K = K - 1 DO 70 I = 1,K 70 X(I) = X(I) - T*A(I+J) J = J - M GOTO 50 C ----------------------------- C |*** COMPUTE NULL VECTOR ***| C ----------------------------- 80 K = 0 90 K = K + 1 J = J + M IF ( CABS(A(J+K)) .NE. 0. ) GOTO 90 DO 100 I = 1,N 100 X(I) = 0. T = 1. GOTO 60 END