      SUBROUTINE MATOUT(MODE,X,N,NDIM,M,ITX,IT,LUN)
C
C     SUBROUTINE USED TO OUTPUT AND LABEL THE ELEMENTS OF A:
C     MODE = 1    VECTOR
C            2    MATRIX (NORMAL STORAGE MODE)
C            3    MATRIX (SYMMETRIC STORAGE MODE)
C
C     SIX SIGNIFICANT DIGITS ARE OUTPUT
C     FORMAT IS FOR A 130 COLUMN PAGE
C
C     X     MATRIX
C     N     ROW DIMENSION OF X (FOR MODE = 1,3, N=1)
C     NDIM  ACTUAL ROW DIMENSION OF X IN CALLING PROGRAM
C     M     COLUMN DIMENSION OF X OR LENGTH OF VECTOR
C           FOR MODE = 3, THE LENGTH OF THE ARRAY THAT CONTAINS
C           X IN SYMMETRIC STORAGE MODE
C     ITX   SEVEN CHARACTER LABEL OF THE ARRAY BEING OUTPUT
C     IT    EIGHTY CHARACTER DESCRIPTION OF THE ARRAY BEING OUTPUT
C     LUN   LOGICAL UNIT NUMBER OF THE OUTPUT DEVICE
C
      IMPLICIT REAL*8(A-H,O-Z)
      IMPLICIT INTEGER(I-N)
C
      DIMENSION X(1), IT(80)
      CHARACTER*7 ITX
      CHARACTER*1 IT
      IF ((N.EQ.0).OR.(M.EQ.0)) RETURN
      DO 10 I=2,80
           J = I-1
           IF (IT(I).EQ.'.') GO TO 20
   10 CONTINUE
   20 WRITE (LUN,30) (IT(I),I=1,J)
   30 FORMAT (/,1X,15(1H*),/,1X,15H*MATOUT OUTPUT*,80A1)
      WRITE (LUN,40)
   40 FORMAT (1X,15(1H*),/)
      GO TO (50,90,140), MODE
C
C     OUTPUT A VECTOR, N=1, M=LENGTH
C
   50 MM = MIN(M,9)
      MMM = 1
   60 WRITE (LUN,70) (ITX,I,I=MMM,MM)
   70 FORMAT (/,14X,9(1X,A7,1H(,I3,1H)))
      WRITE (LUN,80) (X(I),I=MMM,MM)
   80 FORMAT (14X,9G13.6)
      IF (MM.EQ.M) RETURN
      MMM = MMM+9
      MM = MIN(M,MM+9)
      GO TO 60
C
C     OUTPUT A MATRIX, NORMAL STORAGE MODE X(N,M) X[NDIM,M]
C
   90 DO 130 J=1,N
           MM = MIN(M,9)
           MMM = 1
  100      WRITE (LUN,110) (ITX,I,I=MMM,MM)
  110 FORMAT (/,14X,9(1X,A5,3H(*,,I3,1H)))
           K = J+NDIM*(MMM-1)
           L = J+NDIM*(MM-1)
           WRITE (LUN,120) ITX,J,(X(I),I=K,L,NDIM)
  120 FORMAT (1X,A5,1H(,I3,3H,*),1X,9G13.6)
           IF (MM.EQ.M) GO TO 130
           MMM = MMM+9
           MM = MIN(M,MM+9)
           GO TO 100
C
  130 CONTINUE
      RETURN
C
C     OUTPUT A MATRIX, SYMMETRIC STORAGE MODE
C            N=1, M = TOTAL LENGTH OF THE ARRAY
C
  140 NN = INT(SQRT(1.0+8.0*FLOAT(M))-1.0)/2
      DO 160 J=1,NN
           MM = MIN(J,9)
           MMM = 1
  150      WRITE (LUN,110) (ITX,I,I=MMM,MM)
           K = (J-1)*(J-2)/2+J-1+MMM
           L = (J-1)*(J-2)/2+J-1+MM
           WRITE (LUN,120) ITX,J,(X(I),I=K,L)
           IF (MM.EQ.J) GO TO 160
           MMM = MMM+9
           MM = MIN(J,MM+9)
           GO TO 150
C
  160 CONTINUE
      RETURN
      END

