
      SUBROUTINE WGT (M, X, SCALR, N, INDX)
C***BEGIN PROLOGUE  WGT
C***PURPOSE  Builds an array of indices of vector elements that are 
C            greater than a specified scalar
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WGT-S, DWGT-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WGT builds an array of indices of vector elements that are 
C   greater than a specified scalar.
C
C
C   P A R A M E T E R S
C
C   M      (Input) Integer (M .GT. 0)
C          The number of elements of the input vector. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   SCALR  (Input) Real
C          The scalar used for comparison with vector elements.
C          Indices i are selected if X(i) .GT. SCALR.
C
C   N      (Output) Integer
C          The number of elements of X that satisfy relationship with
C          scalar.
C
C   INDX   (Output) Integer array of length N
C          Array containing indices of vector elements that satisfy
C          relationship with scalar.
C
C
C   CAUTION : constraints on the input variables are not checked by
C             this routine.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WGT
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER INDX, M, N
      REAL    SCALR, X
C
      DIMENSION X(M), INDX(*)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER I
C
C***FIRST EXECUTABLE STATEMENT WGT
C
      N = 0
C
      DO 10 I=1,M
         IF (X(I) .GT. SCALR) THEN
            N = N + 1
            INDX(N) = I
         ENDIF
  10  CONTINUE
C
      RETURN
      END

      SUBROUTINE WGTHR (N, X, INDX, Y)
C***BEGIN PROLOGUE  WGTHR
C***PURPOSE  Performs a gather by index on a given vector
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WGTHR-S, DWGTHR-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WGTHR performs a gather by index on a given vector based on the
C   indices provided in an array: Y(i) = X(INDX(i)), i=1,...,N.
C
C
C   P A R A M E T E R S
C
C   N      (Input) Integer (N .GT. 0)
C          The number of elements to be gathered from the input vector
C          X. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   INDX   (Input) Integer array of length N
C          Array specifying indices of elements to be gathered from 
C          the input vector.
C
C   Y      (Output) Real array of length N
C          The array containing the compressed vector once the gather is
C          completed.  Y(i) = X(INDX(i)), i=1,...,N.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WGTHR
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER INDX, N
      REAL    X, Y
C
      DIMENSION X(*), Y(N), INDX(N)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER J
C
C***FIRST EXECUTABLE STATEMENT WGTHR
C
      IF (N .LE. 0) RETURN
C
      DO 10 J=1,N
         Y(J) = X(INDX(J))
  10  CONTINUE
C
      RETURN
      END

      SUBROUTINE WGTLE (M, X, SCALR1, SCALR2, N, INDX)
C***BEGIN PROLOGUE  WGTLE
C***PURPOSE  Builds an array of indices of vector elements that are 
C            greater than a given scalar and less than or equal to a
C            second given scalar
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WGTLE-S, DWGTLE-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WGTLE builds an array of indices of vector elements that are 
C   greater than a given scalar and less than or equal to a second
C   given scalar.
C
C
C   P A R A M E T E R S
C
C   M      (Input) Integer (M .GT. 0)
C          The number of elements of the input vector. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   SCALR1,
C   SCALR2 (Input) Real
C          The scalars used for comparison with vector elements.
C          Indices i are selected if SCALR1 .LT. X(i) .LE. SCALR2.
C
C   N      (Output) Integer
C          The number of elements of X that satisfy relationship with
C          scalars.
C
C   INDX   (Output) Integer array of length N
C          Array containing indices of vector elements that satisfy
C          relationship with scalars.
C
C
C   CAUTION : constraints on the input variables are not checked by
C             this routine.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WGTLE
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER INDX, M, N
      REAL    SCALR1, SCALR2, X
C
      DIMENSION X(M), INDX(*)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER I
      REAL    ELEMT
C
C***FIRST EXECUTABLE STATEMENT WGTLE
C
      N = 0
C
      DO 10 I=1,M
         ELEMT = X(I)
         IF (ELEMT .GT. SCALR1 .AND. ELEMT .LE. SCALR2) THEN
            N = N + 1
            INDX(N) = I
         ENDIF
  10  CONTINUE
C
      RETURN
      END

      SUBROUTINE WLE (M, X, SCALR, N, INDX)
C***BEGIN PROLOGUE  WLE
C***PURPOSE  Builds an array of indices of vector elements that are 
C            less than  or equal to a given scalar
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WLE-S, DWLE-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WLE builds an array of indices of vector elements that are 
C   less than or equal to a given scalar.
C
C
C   P A R A M E T E R S
C
C   M      (Input) Integer (M .GT. 0)
C          The number of elements of the input vector. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   SCALR  (Input) Real
C          The scalar used for comparison with vector elements.
C          Indices i are selected if X(i) .LE. SCALR.
C
C   N      (Output) Integer
C          The number of elements of X that satisfy relationship with
C          scalars.
C
C   INDX   (Output) Integer array of length N
C          Array containing indices of vector elements that satisfy
C          relationship with scalars.
C
C
C   CAUTION : constraints on the input variables are not checked by
C             this routine.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WLE
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER INDX, M, N
      REAL    SCALR, X
C
      DIMENSION X(M), INDX(*)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER I
C
C***FIRST EXECUTABLE STATEMENT WGE
C
      N = 0
C
      DO 10 I = 1,M
         IF (X(I) .LE. SCALR) THEN
            N = N + 1
            INDX(N) = I
         ENDIF
  10  CONTINUE
C
      RETURN
      END

      SUBROUTINE WNGT (M, X, SCALR, KEY)
C***BEGIN PROLOGUE  WNGT 
C***PURPOSE  Determines whether elements of a given vector are greater
C            than a given scalar
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WNGT-S, DWNGT-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WNGT determines whether elements of a given vector are greater
C   than a given scalar.
C
C
C   P A R A M E T E R S
C
C   M      (Input) Integer (M .GT. 0)
C          The number of elements of the input vector. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   SCALR  (Input) Real
C          The scalar used for comparison with vector elements.
C
C   KEY    (Output) Integer
C          If KEY=0 then no vector elements satisfy X(i).GT.SCALR.
C          If KEY>0 then some vector elements satisfy X(i).GT.SCALR;
C          the first to do so is X(KEY).
C
C
C   CAUTION : constraints on the input variables are not checked by
C             this routine.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WNGT
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER KEY, M
      REAL    SCALR, X
C
      DIMENSION X(M)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER I
C
C***FIRST EXECUTABLE STATEMENT  WNGT
C
C     ... QUICK CHECK (VECTORIZABLE)
C
      KEY = 0
      DO 10 I=1,M
         IF (X(I) .GT. SCALR) KEY = 1
   10 CONTINUE
C
C     ... IF CHECK FAILED THEN FIND INDEX OF FIRST FAILURE
C
      IF (KEY .NE. 0) THEN
         KEY = 0
         DO 20 I=1,M
            IF (X(I) .GT. SCALR) THEN
               KEY = I
               GO TO 30
            ENDIF
   20    CONTINUE
      ENDIF
C
   30 CONTINUE
      RETURN
      END
      SUBROUTINE WNLE (M, X, SCALR, KEY)
C***BEGIN PROLOGUE  WNLE 
C***PURPOSE  Determines whether elements of a given vector are less
C            than or equal to a given scalar
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WNLE-S, DWNLE-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WNLE determines whether elements of a given vector are less than
C   or equal to a given scalar.
C
C
C   P A R A M E T E R S
C
C   M      (Input) Integer (M .GT. 0)
C          The number of elements of the input vector. 
C
C   X      (Input) Real array of length M
C          The input vector.
C
C   SCALR  (Input) Real
C          The scalar used for comparison with vector elements.
C
C   KEY    (Output) Integer
C          If KEY=0 then no vector elements satisfy X(i).LE.SCALR.
C          If KEY>0 then some vector elements satisfy X(i).LE.SCALR;
C          the first to do so is X(KEY).
C
C
C   CAUTION : constraints on the input variables are not checked by
C             this routine.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WNLE
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER KEY, M
      REAL    SCALR, X
C
      DIMENSION X(M)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER I
C
C***FIRST EXECUTABLE STATEMENT  WNLE
C
C     ... QUICK CHECK (VECTORIZABLE)
C
      KEY = 0
      DO 10 I=1,M
         IF (X(I) .LE. SCALR) KEY = 1
   10 CONTINUE
C
C     ... IF CHECK FAILED THEN FIND INDEX OF FIRST FAILURE
C
      IF (KEY .NE. 0) THEN
         KEY = 0
         DO 20 I=1,M
            IF (X(I) .LE. SCALR) THEN
               KEY = I
               GO TO 30
            ENDIF
   20    CONTINUE
      ENDIF
C
   30 CONTINUE
      RETURN
      END

      SUBROUTINE WSCTR (N, Y, INDX, X)
C***BEGIN PROLOGUE  WSCTR
C***PURPOSE  Performs a scatter by index on a given vector
C***LIBRARY   VFNLIB
C***TYPE      SINGLE PRECISION (WSCTR-S, DWSCTR-D)
C***AUTHOR  SAUNDERS, B. V., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C           BOISVERT, R. F., (NIST)
C             COMPUTING AND APPLIED MATHEMATICS LABORATORY
C             NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY
C             GAITHERSBURG, MD 20899
C***DESCRIPTION
C
C   WSCTR performs a scatter by index on a given vector based on the
C   indices provided in an array: X(INDX(i)) = Y(i), i=1,...,N.
C
C
C   P A R A M E T E R S
C
C   N      (Input) Integer (N .GT. 0)
C          The number of elements in the input vector Y. 
C
C   Y      (Input) Real array of length N
C          The compressed vector.
C
C   INDX   (Input) Integer array of length N
C          Array of indices of positions elements of compressed
C          vector will occupy when scattered into vector X.
C
C   X      (Output) Real array 
C          The vector to receive the scattered elements of Y.
C          X(INDX(i)) = Y(i), i=1,...,N.  Only elements of X
C          whose indices are in INDX are changed.
C
C***ROUTINES CALLED  (NONE)
C***REVISION HISTORY  (YYMMDD)
C   910226  DATE WRITTEN
C***END PROLOGUE  WSCTR
C
C
C     ----------
C     PARAMETERS
C     ----------
C
      INTEGER INDX, N
      REAL    Y, X
C
      DIMENSION Y(N), X(*), INDX(N)
C
C     ---------------
C     LOCAL VARIABLES
C     ---------------
C
      INTEGER J
C
C***FIRST EXECUTABLE STATEMENT WGTHR
C
      IF (N .LE. 0) RETURN
C
      DO 10 J=1,N
         X(INDX(J)) = Y(J)
  10  CONTINUE
C
      RETURN
      END
