|
- *> \brief \b DROTM
- *
- * =========== DOCUMENTATION ===========
- *
- * Online html documentation available at
- * http://www.netlib.org/lapack/explore-html/
- *
- * Definition:
- * ===========
- *
- * SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
- *
- * .. Scalar Arguments ..
- * INTEGER INCX,INCY,N
- * ..
- * .. Array Arguments ..
- * DOUBLE PRECISION DPARAM(5),DX(*),DY(*)
- * ..
- *
- *
- *> \par Purpose:
- * =============
- *>
- *> \verbatim
- *>
- *> APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
- *>
- *> (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN
- *> (DY**T)
- *>
- *> DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
- *> LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY.
- *> WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS..
- *>
- *> DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0
- *>
- *> (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0)
- *> H=( ) ( ) ( ) ( )
- *> (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0).
- *> SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM.
- *> \endverbatim
- *
- * Arguments:
- * ==========
- *
- *> \param[in] N
- *> \verbatim
- *> N is INTEGER
- *> number of elements in input vector(s)
- *> \endverbatim
- *>
- *> \param[in,out] DX
- *> \verbatim
- *> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCX ) )
- *> \endverbatim
- *>
- *> \param[in] INCX
- *> \verbatim
- *> INCX is INTEGER
- *> storage spacing between elements of DX
- *> \endverbatim
- *>
- *> \param[in,out] DY
- *> \verbatim
- *> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1 )*abs( INCY ) )
- *> \endverbatim
- *>
- *> \param[in] INCY
- *> \verbatim
- *> INCY is INTEGER
- *> storage spacing between elements of DY
- *> \endverbatim
- *>
- *> \param[in] DPARAM
- *> \verbatim
- *> DPARAM is DOUBLE PRECISION array, dimension (5)
- *> DPARAM(1)=DFLAG
- *> DPARAM(2)=DH11
- *> DPARAM(3)=DH21
- *> DPARAM(4)=DH12
- *> DPARAM(5)=DH22
- *> \endverbatim
- *
- * Authors:
- * ========
- *
- *> \author Univ. of Tennessee
- *> \author Univ. of California Berkeley
- *> \author Univ. of Colorado Denver
- *> \author NAG Ltd.
- *
- *> \date November 2017
- *
- *> \ingroup double_blas_level1
- *
- * =====================================================================
- SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
- *
- * -- Reference BLAS level1 routine (version 3.8.0) --
- * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
- * November 2017
- *
- * .. Scalar Arguments ..
- INTEGER INCX,INCY,N
- * ..
- * .. Array Arguments ..
- DOUBLE PRECISION DPARAM(5),DX(*),DY(*)
- * ..
- *
- * =====================================================================
- *
- * .. Local Scalars ..
- DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,TWO,W,Z,ZERO
- INTEGER I,KX,KY,NSTEPS
- * ..
- * .. Data statements ..
- DATA ZERO,TWO/0.D0,2.D0/
- * ..
- *
- DFLAG = DPARAM(1)
- IF (N.LE.0 .OR. (DFLAG+TWO.EQ.ZERO)) RETURN
- IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN
- *
- NSTEPS = N*INCX
- IF (DFLAG.LT.ZERO) THEN
- DH11 = DPARAM(2)
- DH12 = DPARAM(4)
- DH21 = DPARAM(3)
- DH22 = DPARAM(5)
- DO I = 1,NSTEPS,INCX
- W = DX(I)
- Z = DY(I)
- DX(I) = W*DH11 + Z*DH12
- DY(I) = W*DH21 + Z*DH22
- END DO
- ELSE IF (DFLAG.EQ.ZERO) THEN
- DH12 = DPARAM(4)
- DH21 = DPARAM(3)
- DO I = 1,NSTEPS,INCX
- W = DX(I)
- Z = DY(I)
- DX(I) = W + Z*DH12
- DY(I) = W*DH21 + Z
- END DO
- ELSE
- DH11 = DPARAM(2)
- DH22 = DPARAM(5)
- DO I = 1,NSTEPS,INCX
- W = DX(I)
- Z = DY(I)
- DX(I) = W*DH11 + Z
- DY(I) = -W + DH22*Z
- END DO
- END IF
- ELSE
- KX = 1
- KY = 1
- IF (INCX.LT.0) KX = 1 + (1-N)*INCX
- IF (INCY.LT.0) KY = 1 + (1-N)*INCY
- *
- IF (DFLAG.LT.ZERO) THEN
- DH11 = DPARAM(2)
- DH12 = DPARAM(4)
- DH21 = DPARAM(3)
- DH22 = DPARAM(5)
- DO I = 1,N
- W = DX(KX)
- Z = DY(KY)
- DX(KX) = W*DH11 + Z*DH12
- DY(KY) = W*DH21 + Z*DH22
- KX = KX + INCX
- KY = KY + INCY
- END DO
- ELSE IF (DFLAG.EQ.ZERO) THEN
- DH12 = DPARAM(4)
- DH21 = DPARAM(3)
- DO I = 1,N
- W = DX(KX)
- Z = DY(KY)
- DX(KX) = W + Z*DH12
- DY(KY) = W*DH21 + Z
- KX = KX + INCX
- KY = KY + INCY
- END DO
- ELSE
- DH11 = DPARAM(2)
- DH22 = DPARAM(5)
- DO I = 1,N
- W = DX(KX)
- Z = DY(KY)
- DX(KX) = W*DH11 + Z
- DY(KY) = -W + DH22*Z
- KX = KX + INCX
- KY = KY + INCY
- END DO
- END IF
- END IF
- RETURN
- END
|