home *** CD-ROM | disk | FTP | other *** search
- C
- C ..................................................................
- C
- C SUBROUTINE FACTR
- C
- C PURPOSE
- C FACTORIZATION OF THE MATRIX A INTO A PRODUCT OF A LOWER
- C TRIANGULAR MATRIX L AND AN UPPER TRIANGULAR MATRIX U. L HAS
- C UNIT DIAGONAL WHICH IS NOT STORED.
- C
- C USAGE
- C CALL FACTR(A,PER,N,IA,IER)
- C
- C DESCRIPTION OF PARAMETERS
- C A MATRIX A
- C PER ONE DIMENSIONAL ARRAY WHERE PERMUTATIONS OF ROWS OF
- C THE MATRIX ARE STORED
- C DIMENSION OF PER MUST BE GREATER THAN OR EQUAL TO N
- C N ORDER OF THE MATRIX A
- C IA SIZE OF THE FIRST DIMENSION ASSIGNED TO THE ARRAY A
- C IN THE CALLING PROGRAM WHEN THE MATRIX IS IN DOUBLE
- C SUBSCRIPTED DATA STORAGE MODE. IA=N WHEN THE MATRIX
- C IS IN SSP VECTOR STORAGE MODE.
- C IER ERROR INDICATOR WHICH IS ZERO IF THERE IS NO ERROR,
- C AND IS THREE IF THE PROCEDURE FAILS.
- C
- C REMARKS
- C THE ORIGINAL MATRIX, A,IS REPLACED BY THE TRIANGULAR FACTORS
- C
- C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED
- C NONE
- C
- C METHOD
- C SUCCESSIVE COMPUTATION OF THE COLUMNS OF L AND THE
- C CORRESPONDING ROWS OF U.
- C
- C REFERENCES
- C J. H. WILKINSON - THE ALGEBRAIC EIGENVALUE PROBLEM -
- C CLARENDON PRESS, OXFORD, 1965. H. J. BOWDLER, R. S. MARTIN,
- C G. PETERS, AND J. H. WILKINSON - 'SOLUTION OF REAL AND
- C COMPLEX SYSTEMS OF LINEAR EQUATIONS', NUMERISCHE MATHEMATIK,
- C VOL. 8, NO. 3, 1966, P. 217-234.
- C
- C ..................................................................
- C
- SUBROUTINE FACTR(A,PER,N,IA,IER)
- DIMENSION A(1),PER(1)
- DOUBLE PRECISION DP
- C
- C COMPUTATION OF WEIGHTS FOR EQUILIBRATION
- C
- DO 20 I=1,N
- X=0.
- IJ=I
- DO 10 J=1,N
- IF (ABS(A(IJ))-X)10,10,5
- 5 X=ABS(A(IJ))
- 10 IJ=IJ+IA
- IF (X) 110,110,20
- 20 PER(I)=1./X
- I0=0
- DO 100 I=1,N
- IM1=I-1
- IP1=I+1
- IPIVOT=I
- X=0.
- C
- C COMPUTATION OF THE ITH COLUMN OF L
- C
- DO 50 K=I,N
- KI=I0+K
- DP=A(KI)
- IF (I-1) 110,40,25
- 25 KJ=K
- DO 30 J=1,IM1
- IJ=I0+J
- DP=DP-1.D0*A(KJ)*A(IJ)
- 30 KJ=KJ+IA
- A(KI)=DP
- C
- C SEARCH FOR EQUILIBRATED PIVOT
- C
- 40 IF (X-DABS(DP)*PER(K))45,50,50
- 45 IPIVOT=K
- X=DABS(DP)*PER(K)
- 50 CONTINUE
- IF (X)110,110,55
- C
- C PERMUTATION OF ROWS IF REQUIRED
- C
- 55 IF (IPIVOT-I) 110,70,57
- 57 KI=IPIVOT
- IJ=I
- DO 60 J=1,N
- X=A(IJ)
- A(IJ)=A(KI)
- A(KI)=X
- KI=KI+IA
- 60 IJ=IJ+IA
- PER(IPIVOT)=PER(I)
- 70 PER(I)=IPIVOT
- IF (I-N) 72,100,100
- 72 IJ=I0+I
- X=A(IJ)
- C
- C COMPUTATION OF THE ITH ROW OF U
- C
- K0=I0+IA
- DO 90 K=IP1,N
- KI=I0+K
- A(KI)=A(KI)/X
- IF (I-1)110,90,75
- 75 IJ=I
- KI=K0+I
- DP=A(KI)
- DO 80 J=1,IM1
- KJ=K0+J
- DP=DP-1.D0*A(IJ)*A(KJ)
- 80 IJ=IJ+IA
- A(KI)=DP
- 90 K0=K0+IA
- 100 I0=I0+IA
- IER=0
- RETURN
- 110 IER=3
- RETURN
- END