SUBROUTINE SYINV(A,N1,NN,SE) C C ***************************************************************** C C * C * THIS SUBROUTINE IS USED TO INVERT A SYMETRIC MATRIX * C * BY PARTITIONNING TECHNIQUES * C * * C * A : THE MATRIX TO BE INVERTED (IT IS ALSO THE OUTPUT MATRIX) * C * N1: THE DECLARED SIZE OF THE MATRIX IN THE MAIN PROGRAM * C * NN: THE REQUIRED SIZE OF THE MATRIX TO BE INVERTED * C * SE: VECTOR USED BY THIS SUBROUTINE ONL.SAME SIZE AS A * C * * C * WRITTEN BY S. EL-HAKIM * C ***************************************************************** C IMPLICIT REAL*8(A-H,O-Z) REAL*8 A(N1,N1),SE(N1) DET=A(1,1)*A(2,2)-A(1,2)**2 PX=A(2,2)/DET PY=A(1,1)/DET PXY=-A(1,2)/DET A1=A(1,3)*PX+A(2,3)*PXY A2=A(1,3)*PXY+A(2,3)*PY EP=A(3,3)-A1*A(3,1)-A2*A(3,2) A(1,1)=PX+A1/EP*A1 A(1,2)=PXY+A1/EP*A2 A(2,1)=PXY+A2/EP*A1 A(2,2)=PY+A2/EP*A2 A(1,3)=-A1/EP A(2,3)=-A2/EP A(3,1)=A(1,3) A(3,2)=A(2,3) A(3,3)=1.0/EP N=3 200 N=N+1 M=N-1 DO 11 I=1,M SE(I)=0.0 DO 10 J=1,M 10 SE(I)=SE(I)+A(I,J)*A(J,N) 11 CONTINUE EP=0.0 DO 12 J=1,M 12 EP=EP+A(N,J)*SE(J) EB=A(N,N)-EP EI=1.0/EB DO 100 I=1,M DO 100 J=1,M 100 A(I,J)=A(I,J)+SE(I)*SE(J)*EI DO 150 I=1,M A(I,N)=-SE(I)*EI 150 A(N,I)=A(I,N) A(N,N)=EI IF(NN.GT.N)GO TO 200 RETURN END