C
C   Herbert M. Pickett
C   Adapted from subset of BLAS routines in LINPAK
C   Convert double to single
C
      FUNCTION IDAMAX(N,SX,INCX)
C
C     FINDS THE INDEX OF ELEMENT HAVING MAX. ABSOLUTE VALUE.
C
      REAL  SX(*),SMAX
      INTEGER IDAMAX,N,INCX,ISAMAX
C
      IDAMAX = ISAMAX(N,SX,INCX)
      RETURN
      END
      FUNCTION DASUM(N,SX,INCX)
C
C     TAKES THE SUM OF THE ABSOLUTE VALUES.
C
      REAL  DASUM,SX(*),SASUM
      INTEGER INCX,N
C
      DASUM=0
      IF(N.LE.0) RETURN
      DASUM=SASUM(N,SX,INCX)
      RETURN
      END
      SUBROUTINE DAXPY(N,SA,SX,INCX,SY,INCY)
C
C     CONSTANT TIMES A VECTOR PLUS A VECTOR.
C
      REAL  SX(*),SY(*),SA
      INTEGER INCX,INCY,IX,IY,N
C
      IF(N.LE.0)RETURN
      IF (SA .EQ. 0) RETURN
      CALL SAXPY(N,SA,SX,INCX,SY,INCY)
      RETURN
      END
      SUBROUTINE  DCOPY(N,SX,INCX,SY,INCY)
C
C     COPIES A VECTOR, X, TO A VECTOR, Y.
C
      REAL  SX(*),SY(*)
      INTEGER INCX,INCY,IX,IY,N
C
      IF(N.LE.0)RETURN
      CALL SCOPY(N,SX,INCX,SY,INCY)
      RETURN
      END
      FUNCTION DDOT(N,SX,INCX,SY,INCY)
C
C     FORMS THE DOT PRODUCT OF TWO VECTORS.
C
      REAL  DDOT,SX(*),SY(*),SDOT
      INTEGER INCX,INCY,IX,IY,N
C
      IF(N.LE.0)THEN
          DDOT=0
          RETURN
      ENDIF
      DDOT=SDOT(N,SX,INCX,SY,INCY)
      RETURN
      END
      SUBROUTINE  DSCAL(N,SA,SX,INCX)
C
C     SCALES A VECTOR BY A CONSTANT.
C
      REAL  SA,SX(*)
      INTEGER INCX,N,NINCX
C
      IF(N.LE.0)  RETURN
      IF(SA.EQ.1) RETURN
      CALL SCAL(N,SA,SX,INCX)
      RETURN
      END
      SUBROUTINE  DSWAP (N,SX,INCX,SY,INCY)
C
C     INTERCHANGES TWO VECTORS.
C
      REAL  SX(*),SY(*)
      INTEGER INCX,INCY,IX,IY,N
C
      IF(N.LE.0)RETURN
      CALL SSWAP(N,SX,INCX,SY,INCY)
      RETURN
      END
      SUBROUTINE  DROT (N,SX,INCX,SY,INCY,C,S)
C
C     APPLIES A PLANE ROTATION.
C
      REAL  SX(*),SY(*),C,S
      INTEGER INCX,INCY,N
C
      IF(N.LE.0)RETURN
      CALL SROT(N,SX,INCX,SY,INCY,C,S)
      RETURN
      END

