LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
drotm.f
Go to the documentation of this file.
00001 *> \brief \b DROTM
00002 *
00003 *  =========== DOCUMENTATION ===========
00004 *
00005 * Online html documentation available at 
00006 *            http://www.netlib.org/lapack/explore-html/ 
00007 *
00008 *  Definition:
00009 *  ===========
00010 *
00011 *       SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
00012 * 
00013 *       .. Scalar Arguments ..
00014 *       INTEGER INCX,INCY,N
00015 *       ..
00016 *       .. Array Arguments ..
00017 *       DOUBLE PRECISION DPARAM(5),DX(*),DY(*)
00018 *       ..
00019 *  
00020 *
00021 *> \par Purpose:
00022 *  =============
00023 *>
00024 *> \verbatim
00025 *>
00026 *>    APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX
00027 *>
00028 *>    (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN
00029 *>    (DY**T)
00030 *>
00031 *>    DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE
00032 *>    LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY.
00033 *>    WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS..
00034 *>
00035 *>    DFLAG=-1.D0     DFLAG=0.D0        DFLAG=1.D0     DFLAG=-2.D0
00036 *>
00037 *>      (DH11  DH12)    (1.D0  DH12)    (DH11  1.D0)    (1.D0  0.D0)
00038 *>    H=(          )    (          )    (          )    (          )
00039 *>      (DH21  DH22),   (DH21  1.D0),   (-1.D0 DH22),   (0.D0  1.D0).
00040 *>    SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM.
00041 *> \endverbatim
00042 *
00043 *  Arguments:
00044 *  ==========
00045 *
00046 *> \param[in] N
00047 *> \verbatim
00048 *>          N is INTEGER
00049 *>         number of elements in input vector(s)
00050 *> \endverbatim
00051 *>
00052 *> \param[in,out] DX
00053 *> \verbatim
00054 *>          DX is DOUBLE PRECISION array, dimension N
00055 *>         double precision vector with N elements
00056 *> \endverbatim
00057 *>
00058 *> \param[in] INCX
00059 *> \verbatim
00060 *>          INCX is INTEGER
00061 *>         storage spacing between elements of DX
00062 *> \endverbatim
00063 *>
00064 *> \param[in,out] DY
00065 *> \verbatim
00066 *>          DY is DOUBLE PRECISION array, dimension N
00067 *>         double precision vector with N elements
00068 *> \endverbatim
00069 *>
00070 *> \param[in] INCY
00071 *> \verbatim
00072 *>          INCY is INTEGER
00073 *>         storage spacing between elements of DY
00074 *> \endverbatim
00075 *>
00076 *> \param[in,out] DPARAM
00077 *> \verbatim
00078 *>          DPARAM is DOUBLE PRECISION array, dimension 5
00079 *>     DPARAM(1)=DFLAG
00080 *>     DPARAM(2)=DH11
00081 *>     DPARAM(3)=DH21
00082 *>     DPARAM(4)=DH12
00083 *>     DPARAM(5)=DH22
00084 *> \endverbatim
00085 *
00086 *  Authors:
00087 *  ========
00088 *
00089 *> \author Univ. of Tennessee 
00090 *> \author Univ. of California Berkeley 
00091 *> \author Univ. of Colorado Denver 
00092 *> \author NAG Ltd. 
00093 *
00094 *> \date November 2011
00095 *
00096 *> \ingroup double_blas_level1
00097 *
00098 *  =====================================================================
00099       SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM)
00100 *
00101 *  -- Reference BLAS level1 routine (version 3.4.0) --
00102 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
00103 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00104 *     November 2011
00105 *
00106 *     .. Scalar Arguments ..
00107       INTEGER INCX,INCY,N
00108 *     ..
00109 *     .. Array Arguments ..
00110       DOUBLE PRECISION DPARAM(5),DX(*),DY(*)
00111 *     ..
00112 *
00113 *  =====================================================================
00114 *
00115 *     .. Local Scalars ..
00116       DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,TWO,W,Z,ZERO
00117       INTEGER I,KX,KY,NSTEPS
00118 *     ..
00119 *     .. Data statements ..
00120       DATA ZERO,TWO/0.D0,2.D0/
00121 *     ..
00122 *
00123       DFLAG = DPARAM(1)
00124       IF (N.LE.0 .OR. (DFLAG+TWO.EQ.ZERO)) RETURN
00125       IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN
00126 *
00127          NSTEPS = N*INCX
00128          IF (DFLAG.LT.ZERO) THEN
00129             DH11 = DPARAM(2)
00130             DH12 = DPARAM(4)
00131             DH21 = DPARAM(3)
00132             DH22 = DPARAM(5)
00133             DO I = 1,NSTEPS,INCX
00134                W = DX(I)
00135                Z = DY(I)
00136                DX(I) = W*DH11 + Z*DH12
00137                DY(I) = W*DH21 + Z*DH22
00138             END DO
00139          ELSE IF (DFLAG.EQ.ZERO) THEN
00140             DH12 = DPARAM(4)
00141             DH21 = DPARAM(3)
00142             DO I = 1,NSTEPS,INCX
00143                W = DX(I)
00144                Z = DY(I)
00145                DX(I) = W + Z*DH12
00146                DY(I) = W*DH21 + Z
00147             END DO
00148          ELSE
00149             DH11 = DPARAM(2)
00150             DH22 = DPARAM(5)
00151             DO I = 1,NSTEPS,INCX
00152                W = DX(I)
00153                Z = DY(I)
00154                DX(I) = W*DH11 + Z
00155                DY(I) = -W + DH22*Z
00156             END DO
00157          END IF
00158       ELSE
00159          KX = 1
00160          KY = 1
00161          IF (INCX.LT.0) KX = 1 + (1-N)*INCX
00162          IF (INCY.LT.0) KY = 1 + (1-N)*INCY
00163 *
00164          IF (DFLAG.LT.ZERO) THEN
00165             DH11 = DPARAM(2)
00166             DH12 = DPARAM(4)
00167             DH21 = DPARAM(3)
00168             DH22 = DPARAM(5)
00169             DO I = 1,N
00170                W = DX(KX)
00171                Z = DY(KY)
00172                DX(KX) = W*DH11 + Z*DH12
00173                DY(KY) = W*DH21 + Z*DH22
00174                KX = KX + INCX
00175                KY = KY + INCY
00176             END DO
00177          ELSE IF (DFLAG.EQ.ZERO) THEN
00178             DH12 = DPARAM(4)
00179             DH21 = DPARAM(3)
00180             DO I = 1,N
00181                W = DX(KX)
00182                Z = DY(KY)
00183                DX(KX) = W + Z*DH12
00184                DY(KY) = W*DH21 + Z
00185                KX = KX + INCX
00186                KY = KY + INCY
00187             END DO
00188          ELSE
00189              DH11 = DPARAM(2)
00190              DH22 = DPARAM(5)
00191              DO I = 1,N
00192                 W = DX(KX)
00193                 Z = DY(KY)
00194                 DX(KX) = W*DH11 + Z
00195                 DY(KY) = -W + DH22*Z
00196                 KX = KX + INCX
00197                 KY = KY + INCY
00198             END DO
00199          END IF
00200       END IF
00201       RETURN
00202       END
 All Files Functions