Search Site | Contact Details | FAQ

ADAS Subroutine lumsis

      SUBROUTINE LUMSIS(N)
      
      IMPLICIT REAL*8 (A-H,O-Z)
C-----------------------------------------------------------------------
C PURPOSE: Finds the solutions of a set of linear equations
C
C N- a number of equations inthe set + 1
C AK(I,J)-coefficients in equations
C BK(I) - right side terms of equations
C When solutions are found they will be written into array BK(I) in
C the common block
C
C-----------------------------------------------------------------------
C
C ADAS305 version. Developed from JETSHP.STARK.FORT (H P Summers).
C
C VERSION  : 1.1
C DATE     : 24-02-2005
C MODIFIED : Martin O'Mullane
C             - First version.
C
C VERSION  : 1.2
C DATE     : 16-05-2007
C MODIFIED : Allan Whiteford
C             - Updated comments as part of subroutine documentation
C               procedure.
C
C----------------------------------------------------------------------
      COMMON /CX/ AK(65,65),BK(65)
C*********
C**   EXPANSION OF MATRIX AK
C*********

      DO 200 I=1,N-1
      AK(N,I)=FLOAT(I)
200   AK(I,N)=BK(I)

C*****   MAX OF MAIN MINORS

      DO 202 K=1,N-2
      AMAX=AK(K,K)
      IMAX=K
      JMAX=K
      DO 206 I=K,N-1
      DO 206 J=K,N-1
      IF (DABS(AMAX).GE.DABS(AK(I,J))) GOTO 206
      AMAX=AK(I,J)
      JMAX=J
      IMAX=I
206   CONTINUE

C***** LINES INTERCHANGE

      IF(IMAX.EQ.K) GOTO 210
      DO 212 J1=1,N
      AB=AK(IMAX,J1)
      AK(IMAX,J1)=AK(K,J1)
212   AK(K,J1)=AB

C***** ROWS INTERCHANGE

210   IF(JMAX.EQ.K) GOTO 202
      DO 216 I1=1,N
      AB=AK(I1,JMAX)
      AK(I1,JMAX)=AK(I1,K)
216   AK(I1,K)=AB
202   CONTINUE

C******* FIRST FORMATION BK

      DO 218 I=1,N-1
218   BK(I)=AK(I,N)

C*****
C****   LU EXPANSION
C*********

      DO 120 K=1,N-2
      AB=1.E00/AK(K,K)
      DO 122 J=K,N-2
122   AK(K,J+1)=AK(K,J+1)*AB

      DO 120 J=K+1,N-1
      DO 120 I=K+1,N-1
120   AK(I,J)=AK(I,J)-AK(I,K)*AK(K,J)

C**** SOLUTION OF THE SYSTEM

      BK(1)=BK(1)/AK(1,1)
      DO 105 I=2,N-1
      DO 106 J=1,I-1
106   BK(I)=BK(I)-AK(I,J)*BK(J)
105   BK(I)=BK(I)/AK(I,I)

      DO 107 I=N-2,1,-1
      DO 107 J=I+1,N-1
107   BK(I)=BK(I)-AK(I,J)*BK(J)

C*******     SECOND FORMATION OF BK

      DO 240 J=1,N-1
      DO 241 IB=1,N-1
      IF(IB.NE.IDINT(DABS(AK(N,J)))) GOTO 241
      II=IB
      GOTO 240
241   CONTINUE
240   AK(II,N)=BK(J)
      DO 242 J=1,N-1
242   BK(J)=AK(J,N)
      RETURN
      END
      INTEGER             N
© Copyright 1995-2024 The ADAS Project
Comments and questions to: adas-at-adas.ac.uk