LAPACK  3.4.1
LAPACK: Linear Algebra PACKage
srotm.f
Go to the documentation of this file.
00001 *> \brief \b SROTM
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 SROTM(N,SX,INCX,SY,INCY,SPARAM)
00012 * 
00013 *       .. Scalar Arguments ..
00014 *       INTEGER INCX,INCY,N
00015 *       ..
00016 *       .. Array Arguments ..
00017 *       REAL SPARAM(5),SX(*),SY(*)
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 *>    (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN
00029 *>    (SX**T)
00030 *>
00031 *>    SX(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 USING LY AND INCY.
00033 *>    WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS..
00034 *>
00035 *>    SFLAG=-1.E0     SFLAG=0.E0        SFLAG=1.E0     SFLAG=-2.E0
00036 *>
00037 *>      (SH11  SH12)    (1.E0  SH12)    (SH11  1.E0)    (1.E0  0.E0)
00038 *>    H=(          )    (          )    (          )    (          )
00039 *>      (SH21  SH22),   (SH21  1.E0),   (-1.E0 SH22),   (0.E0  1.E0).
00040 *>    SEE  SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM.
00041 *>
00042 *> \endverbatim
00043 *
00044 *  Arguments:
00045 *  ==========
00046 *
00047 *> \param[in] N
00048 *> \verbatim
00049 *>          N is INTEGER
00050 *>         number of elements in input vector(s)
00051 *> \endverbatim
00052 *>
00053 *> \param[in,out] SX
00054 *> \verbatim
00055 *>          SX is REAL array, dimension N
00056 *>         double precision vector with N elements
00057 *> \endverbatim
00058 *>
00059 *> \param[in] INCX
00060 *> \verbatim
00061 *>          INCX is INTEGER
00062 *>         storage spacing between elements of SX
00063 *> \endverbatim
00064 *>
00065 *> \param[in,out] SY
00066 *> \verbatim
00067 *>          SY is REAL array, dimension N
00068 *>         double precision vector with N elements
00069 *> \endverbatim
00070 *>
00071 *> \param[in] INCY
00072 *> \verbatim
00073 *>          INCY is INTEGER
00074 *>         storage spacing between elements of SY
00075 *> \endverbatim
00076 *>
00077 *> \param[in,out] SPARAM
00078 *> \verbatim
00079 *>          SPARAM is REAL array, dimension 5
00080 *>     SPARAM(1)=SFLAG
00081 *>     SPARAM(2)=SH11
00082 *>     SPARAM(3)=SH21
00083 *>     SPARAM(4)=SH12
00084 *>     SPARAM(5)=SH22
00085 *> \endverbatim
00086 *
00087 *  Authors:
00088 *  ========
00089 *
00090 *> \author Univ. of Tennessee 
00091 *> \author Univ. of California Berkeley 
00092 *> \author Univ. of Colorado Denver 
00093 *> \author NAG Ltd. 
00094 *
00095 *> \date November 2011
00096 *
00097 *> \ingroup single_blas_level1
00098 *
00099 *  =====================================================================
00100       SUBROUTINE SROTM(N,SX,INCX,SY,INCY,SPARAM)
00101 *
00102 *  -- Reference BLAS level1 routine (version 3.4.0) --
00103 *  -- Reference BLAS is a software package provided by Univ. of Tennessee,    --
00104 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
00105 *     November 2011
00106 *
00107 *     .. Scalar Arguments ..
00108       INTEGER INCX,INCY,N
00109 *     ..
00110 *     .. Array Arguments ..
00111       REAL SPARAM(5),SX(*),SY(*)
00112 *     ..
00113 *
00114 *  =====================================================================
00115 *
00116 *     .. Local Scalars ..
00117       REAL SFLAG,SH11,SH12,SH21,SH22,TWO,W,Z,ZERO
00118       INTEGER I,KX,KY,NSTEPS
00119 *     ..
00120 *     .. Data statements ..
00121       DATA ZERO,TWO/0.E0,2.E0/
00122 *     ..
00123 *
00124       SFLAG = SPARAM(1)
00125       IF (N.LE.0 .OR. (SFLAG+TWO.EQ.ZERO)) RETURN
00126       IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN
00127 *
00128          NSTEPS = N*INCX
00129          IF (SFLAG.LT.ZERO) THEN
00130             SH11 = SPARAM(2)
00131             SH12 = SPARAM(4)
00132             SH21 = SPARAM(3)
00133             SH22 = SPARAM(5)
00134             DO I = 1,NSTEPS,INCX
00135                W = SX(I)
00136                Z = SY(I)
00137                SX(I) = W*SH11 + Z*SH12
00138                SY(I) = W*SH21 + Z*SH22
00139             END DO
00140          ELSE IF (SFLAG.EQ.ZERO) THEN
00141             SH12 = SPARAM(4)
00142             SH21 = SPARAM(3)
00143             DO I = 1,NSTEPS,INCX
00144                W = SX(I)
00145                Z = SY(I)
00146                SX(I) = W + Z*SH12
00147                SY(I) = W*SH21 + Z
00148             END DO
00149          ELSE
00150             SH11 = SPARAM(2)
00151             SH22 = SPARAM(5)
00152             DO I = 1,NSTEPS,INCX
00153                W = SX(I)
00154                Z = SY(I)
00155                SX(I) = W*SH11 + Z
00156                SY(I) = -W + SH22*Z
00157             END DO
00158          END IF
00159       ELSE
00160          KX = 1
00161          KY = 1
00162          IF (INCX.LT.0) KX = 1 + (1-N)*INCX
00163          IF (INCY.LT.0) KY = 1 + (1-N)*INCY
00164 *
00165          IF (SFLAG.LT.ZERO) THEN
00166             SH11 = SPARAM(2)
00167             SH12 = SPARAM(4)
00168             SH21 = SPARAM(3)
00169             SH22 = SPARAM(5)
00170             DO I = 1,N
00171                W = SX(KX)
00172                Z = SY(KY)
00173                SX(KX) = W*SH11 + Z*SH12
00174                SY(KY) = W*SH21 + Z*SH22
00175                KX = KX + INCX
00176                KY = KY + INCY
00177             END DO
00178          ELSE IF (SFLAG.EQ.ZERO) THEN
00179             SH12 = SPARAM(4)
00180             SH21 = SPARAM(3)
00181             DO I = 1,N
00182                W = SX(KX)
00183                Z = SY(KY)
00184                SX(KX) = W + Z*SH12
00185                SY(KY) = W*SH21 + Z
00186                KX = KX + INCX
00187                KY = KY + INCY
00188             END DO
00189          ELSE
00190              SH11 = SPARAM(2)
00191              SH22 = SPARAM(5)
00192              DO I = 1,N
00193                 W = SX(KX)
00194                 Z = SY(KY)
00195                 SX(KX) = W*SH11 + Z
00196                 SY(KY) = -W + SH22*Z
00197                 KX = KX + INCX
00198                 KY = KY + INCY
00199             END DO
00200          END IF
00201       END IF
00202       RETURN
00203       END
 All Files Functions