--- /dev/null
+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
+
+