C CHMSMQ    SOURCE    CHAT      05/01/12    22:00:15     5004
      SUBROUTINE CHMSMQ(Z,Y,N,NXDIM,IER)
C=======================================================================
C        ISSU DE TRIOEF ( TRSIMQ)
C
C OBJET: TROUVE LA SOLUTION D'UN ENSEMBLE DE N<=NXDIM EQUATIONS LINEAIRES
C NON HOMOGENES Y=Z.X: TROUVE X
C
C ARGUMENTS: Z(NXDIM,NXDIM): MATRICE DES COEFFICIENTS
C            Y(NYDIM): TABLEAU DES RESIDUS
C            N :DIMENSION ACTUELLE DU TABLEAU Z
C            NXDIM: DIMENSION MAXIMUM DU TABLEAU Z
C
C EST APPELLEE PAR CHMSLV
C IER=8  SI LA MATRICE EST SINGULIERE
C
C    FORTRAN 77
C
C=======================================================================
      IMPLICIT INTEGER(I-N)
      IMPLICIT REAL*8(A-H,O-Z)
      DIMENSION Z(NXDIM,NXDIM),Y(NXDIM)

C     PROVISION FOR N=1
      IF(N.EQ.1) THEN
      Y(1)=Y(1)/Z(1,1)
      RETURN
      ENDIF

C     ELEMENT OF ELIMINATION

      L1=N-1
      DO 10 M=1,L1
      ZMAX=0.D0
      IMAX=0

C     FIND MAX OF COLUMN

      DO 20 I=M,N
        IF(ABS(Z(I,M)).LE.ZMAX) GO TO 20
        IMAX=I
        ZMAX=ABS(Z(I,M))
20    CONTINUE

C     ERROR RETURN

      IF(IMAX.EQ.0) THEN
      IER=8
      RETURN
      ENDIF

C     ROW INTERCHANGE

      IF(IMAX.NE.M) THEN

            V=Y(M)
            Y(M)=Y(IMAX)
            Y(IMAX)=V

            DO 40 J=M,N
               V=Z(M,J)
               Z(M,J)=Z(IMAX,J)
               Z(IMAX,J)=V
40          CONTINUE
      ENDIF


C     DIAGONALIZE

      M1=M+1
      DO 70 I=M1,N
         V=Z(I,M)/Z(M,M)
         Y(I)=Y(I)-V*Y(M)
         DO 65 J=M,N
            Z(I,J)=Z(I,J)-V*Z(M,J)
65       CONTINUE
70    CONTINUE

10    CONTINUE

C     BACK SUBSTITUTE

      Y(N)=Y(N)/Z(N,N)
      L1=N-1
      DO 100 K=1,L1
         I=N-K
         I1=I+1
         DO 90 J=I1,N
            Y(I)=Y(I)-Y(J)*Z(I,J)
 90      CONTINUE
         Y(I)=Y(I)/Z(I,I)
100   CONTINUE

      RETURN
      END


