C C********************** SUBROUTINE BANACH(N,NMAX,A,X,osob) C********************** C Banachiewicz implicit real*8 (a-h,o-z) include 'DIMENSIONS' DIMENSION A(NMAX,NMAX),X(NMAX),D(MAXRES6) COMMON /BANII/ D logical osob osob=.false. if (dabs(a(1,1)).lt.1.0d-15) then osob=.true. return endif D(1)=1./A(1,1) DO 80 I=2,N A(I,1)=A(1,I) DO 81 J=2,I-1 XX=A(J,I) DO 82 K=1,J-1 XX=XX-A(I,K)*A(J,K) 82 CONTINUE A(I,J)=XX 81 CONTINUE XX=A(I,I) JJJJ=I-1 DO 83 J=1,JJJJ AIJ=A(I,J) AIJD=AIJ*D(J) A(I,J)=AIJD XX=XX-AIJ*AIJD 83 CONTINUE if (dabs(xx).lt.1.0d-15) then osob=.true. return endif D(I)=1./XX 80 CONTINUE C CALL BANAII(N,NMAX,A,X) RETURN END C************************ SUBROUTINE BANAII(N,NMAX,A,X) C************************ implicit real*8 (a-h,o-z) include 'DIMENSIONS' DIMENSION A(NMAX,NMAX),X(NMAX),D(MAXRES6) COMMON /BANII/ D DO 90 I=1,N Z=X(I) JJJJ=I-1 DO 91 J=JJJJ,1,-1 Z=Z-A(I,J)*X(J) 91 CONTINUE X(I)=Z 90 CONTINUE DO 92 I=N,1,-1 Z=X(I)*D(I) JJJJ=I+1 DO 93 J=JJJJ,N Z=Z-A(J,I)*X(J) 93 CONTINUE X(I)=Z 92 CONTINUE RETURN END C SUBROUTINE MATINVERT(N,NMAX,A,A1,osob) implicit real*8 (a-h,o-z) include 'DIMENSIONS' DIMENSION A(NMAX,NMAX),A1(NMAX,NMAX),D(MAXRES6) COMMON /BANII/ D DIMENSION X(NMAX) logical osob DO I=1,N X(I)=0.0 ENDDO X(1)=1.0 CALL BANACH(N,NMAX,A,X,osob) if (osob) return DO I=1,N A1(I,1)=X(I) ENDDO DO I=2,N DO J=1,N X(J)=0.0 ENDDO X(I)=1.0 CALL BANAII(N,NMAX,A,X) DO J=1,N A1(J,I)=X(J) ENDDO ENDDO RETURN END