![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
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