git push -u origin main
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
SUBROUTINE LINEQS(A,B,X,N,NR)
|
||||
C =============================
|
||||
C
|
||||
C Solution of the linear system A*X=B
|
||||
C by Gaussian elimination with partial pivoting
|
||||
C
|
||||
C Input: A - matrix of the linear system, with actual size (N x N),
|
||||
C and maximum size (NR x NR)
|
||||
C B - the rhs vector
|
||||
C Output: X - solution vector
|
||||
C Note that matrix A and vector B are destroyed here !
|
||||
C
|
||||
INCLUDE 'PARAMS.FOR'
|
||||
DIMENSION A(NR,NR),B(NR),X(NR),D(MLEVEL)
|
||||
DIMENSION IP(MLEVEL)
|
||||
DO 70 I=1,N
|
||||
DO 10 J=1,N
|
||||
10 D(J)=A(J,I)
|
||||
IM1=I-1
|
||||
IF(IM1.LT.1) GO TO 40
|
||||
DO 30 J=1,IM1
|
||||
IT=IP(J)
|
||||
A(J,I)=D(IT)
|
||||
D(IT)=D(J)
|
||||
JP1=J+1
|
||||
DO 20 K=JP1,N
|
||||
20 D(K)=D(K)-A(K,J)*A(J,I)
|
||||
30 CONTINUE
|
||||
40 AM=ABS(D(I))
|
||||
IP(I)=I
|
||||
DO 50 K=I,N
|
||||
IF(AM.GE.ABS(D(K))) GO TO 50
|
||||
IP(I)=K
|
||||
AM=ABS(D(K))
|
||||
50 CONTINUE
|
||||
IT=IP(I)
|
||||
A(I,I)=D(IT)
|
||||
D(IT)=D(I)
|
||||
IP1=I+1
|
||||
IF(IP1.GT.N) GO TO 80
|
||||
DO 60 K=IP1,N
|
||||
60 A(K,I)=D(K)/A(I,I)
|
||||
70 CONTINUE
|
||||
80 DO 100 I=1,N
|
||||
IT=IP(I)
|
||||
X(I)=B(IT)
|
||||
B(IT)=B(I)
|
||||
IP1=I+1
|
||||
IF(IP1.GT.N) GO TO 110
|
||||
DO 90 J=IP1,N
|
||||
90 B(J)=B(J)-A(J,I)*X(I)
|
||||
100 CONTINUE
|
||||
110 DO 140 I=1,N
|
||||
K=N-I+1
|
||||
SUM=0.
|
||||
KP1=K+1
|
||||
IF(KP1.GT.N) GO TO 130
|
||||
DO 120 J=KP1,N
|
||||
120 SUM=SUM+A(K,J)*X(J)
|
||||
130 X(K)=(X(K)-SUM)/A(K,K)
|
||||
140 CONTINUE
|
||||
RETURN
|
||||
END
|
||||
Reference in New Issue
Block a user