--- rpl/lapack/lapack/dlasr.f 2011/07/22 07:38:08 1.8 +++ rpl/lapack/lapack/dlasr.f 2011/11/21 20:42:59 1.9 @@ -1,9 +1,208 @@ +*> \brief \b DLASR +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLASR + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA ) +* +* .. Scalar Arguments .. +* CHARACTER DIRECT, PIVOT, SIDE +* INTEGER LDA, M, N +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), C( * ), S( * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLASR applies a sequence of plane rotations to a real matrix A, +*> from either the left or the right. +*> +*> When SIDE = 'L', the transformation takes the form +*> +*> A := P*A +*> +*> and when SIDE = 'R', the transformation takes the form +*> +*> A := A*P**T +*> +*> where P is an orthogonal matrix consisting of a sequence of z plane +*> rotations, with z = M when SIDE = 'L' and z = N when SIDE = 'R', +*> and P**T is the transpose of P. +*> +*> When DIRECT = 'F' (Forward sequence), then +*> +*> P = P(z-1) * ... * P(2) * P(1) +*> +*> and when DIRECT = 'B' (Backward sequence), then +*> +*> P = P(1) * P(2) * ... * P(z-1) +*> +*> where P(k) is a plane rotation matrix defined by the 2-by-2 rotation +*> +*> R(k) = ( c(k) s(k) ) +*> = ( -s(k) c(k) ). +*> +*> When PIVOT = 'V' (Variable pivot), the rotation is performed +*> for the plane (k,k+1), i.e., P(k) has the form +*> +*> P(k) = ( 1 ) +*> ( ... ) +*> ( 1 ) +*> ( c(k) s(k) ) +*> ( -s(k) c(k) ) +*> ( 1 ) +*> ( ... ) +*> ( 1 ) +*> +*> where R(k) appears as a rank-2 modification to the identity matrix in +*> rows and columns k and k+1. +*> +*> When PIVOT = 'T' (Top pivot), the rotation is performed for the +*> plane (1,k+1), so P(k) has the form +*> +*> P(k) = ( c(k) s(k) ) +*> ( 1 ) +*> ( ... ) +*> ( 1 ) +*> ( -s(k) c(k) ) +*> ( 1 ) +*> ( ... ) +*> ( 1 ) +*> +*> where R(k) appears in rows and columns 1 and k+1. +*> +*> Similarly, when PIVOT = 'B' (Bottom pivot), the rotation is +*> performed for the plane (k,z), giving P(k) the form +*> +*> P(k) = ( 1 ) +*> ( ... ) +*> ( 1 ) +*> ( c(k) s(k) ) +*> ( 1 ) +*> ( ... ) +*> ( 1 ) +*> ( -s(k) c(k) ) +*> +*> where R(k) appears in rows and columns k and z. The rotations are +*> performed without ever forming P(k) explicitly. +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] SIDE +*> \verbatim +*> SIDE is CHARACTER*1 +*> Specifies whether the plane rotation matrix P is applied to +*> A on the left or the right. +*> = 'L': Left, compute A := P*A +*> = 'R': Right, compute A:= A*P**T +*> \endverbatim +*> +*> \param[in] PIVOT +*> \verbatim +*> PIVOT is CHARACTER*1 +*> Specifies the plane for which P(k) is a plane rotation +*> matrix. +*> = 'V': Variable pivot, the plane (k,k+1) +*> = 'T': Top pivot, the plane (1,k+1) +*> = 'B': Bottom pivot, the plane (k,z) +*> \endverbatim +*> +*> \param[in] DIRECT +*> \verbatim +*> DIRECT is CHARACTER*1 +*> Specifies whether P is a forward or backward sequence of +*> plane rotations. +*> = 'F': Forward, P = P(z-1)*...*P(2)*P(1) +*> = 'B': Backward, P = P(1)*P(2)*...*P(z-1) +*> \endverbatim +*> +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows of the matrix A. If m <= 1, an immediate +*> return is effected. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns of the matrix A. If n <= 1, an +*> immediate return is effected. +*> \endverbatim +*> +*> \param[in] C +*> \verbatim +*> C is DOUBLE PRECISION array, dimension +*> (M-1) if SIDE = 'L' +*> (N-1) if SIDE = 'R' +*> The cosines c(k) of the plane rotations. +*> \endverbatim +*> +*> \param[in] S +*> \verbatim +*> S is DOUBLE PRECISION array, dimension +*> (M-1) if SIDE = 'L' +*> (N-1) if SIDE = 'R' +*> The sines s(k) of the plane rotations. The 2-by-2 plane +*> rotation part of the matrix P(k), R(k), has the form +*> R(k) = ( c(k) s(k) ) +*> ( -s(k) c(k) ). +*> \endverbatim +*> +*> \param[in,out] A +*> \verbatim +*> A is DOUBLE PRECISION array, dimension (LDA,N) +*> The M-by-N matrix A. On exit, A is overwritten by P*A if +*> SIDE = 'R' or by A*P**T if SIDE = 'L'. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of the array A. LDA >= max(1,M). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup auxOTHERauxiliary +* +* ===================================================================== SUBROUTINE DLASR( SIDE, PIVOT, DIRECT, M, N, C, S, A, LDA ) * -* -- LAPACK auxiliary routine (version 3.2) -- +* -- LAPACK auxiliary routine (version 3.4.0) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* November 2006 +* November 2011 * * .. Scalar Arguments .. CHARACTER DIRECT, PIVOT, SIDE @@ -13,131 +212,6 @@ DOUBLE PRECISION A( LDA, * ), C( * ), S( * ) * .. * -* Purpose -* ======= -* -* DLASR applies a sequence of plane rotations to a real matrix A, -* from either the left or the right. -* -* When SIDE = 'L', the transformation takes the form -* -* A := P*A -* -* and when SIDE = 'R', the transformation takes the form -* -* A := A*P**T -* -* where P is an orthogonal matrix consisting of a sequence of z plane -* rotations, with z = M when SIDE = 'L' and z = N when SIDE = 'R', -* and P**T is the transpose of P. -* -* When DIRECT = 'F' (Forward sequence), then -* -* P = P(z-1) * ... * P(2) * P(1) -* -* and when DIRECT = 'B' (Backward sequence), then -* -* P = P(1) * P(2) * ... * P(z-1) -* -* where P(k) is a plane rotation matrix defined by the 2-by-2 rotation -* -* R(k) = ( c(k) s(k) ) -* = ( -s(k) c(k) ). -* -* When PIVOT = 'V' (Variable pivot), the rotation is performed -* for the plane (k,k+1), i.e., P(k) has the form -* -* P(k) = ( 1 ) -* ( ... ) -* ( 1 ) -* ( c(k) s(k) ) -* ( -s(k) c(k) ) -* ( 1 ) -* ( ... ) -* ( 1 ) -* -* where R(k) appears as a rank-2 modification to the identity matrix in -* rows and columns k and k+1. -* -* When PIVOT = 'T' (Top pivot), the rotation is performed for the -* plane (1,k+1), so P(k) has the form -* -* P(k) = ( c(k) s(k) ) -* ( 1 ) -* ( ... ) -* ( 1 ) -* ( -s(k) c(k) ) -* ( 1 ) -* ( ... ) -* ( 1 ) -* -* where R(k) appears in rows and columns 1 and k+1. -* -* Similarly, when PIVOT = 'B' (Bottom pivot), the rotation is -* performed for the plane (k,z), giving P(k) the form -* -* P(k) = ( 1 ) -* ( ... ) -* ( 1 ) -* ( c(k) s(k) ) -* ( 1 ) -* ( ... ) -* ( 1 ) -* ( -s(k) c(k) ) -* -* where R(k) appears in rows and columns k and z. The rotations are -* performed without ever forming P(k) explicitly. -* -* Arguments -* ========= -* -* SIDE (input) CHARACTER*1 -* Specifies whether the plane rotation matrix P is applied to -* A on the left or the right. -* = 'L': Left, compute A := P*A -* = 'R': Right, compute A:= A*P**T -* -* PIVOT (input) CHARACTER*1 -* Specifies the plane for which P(k) is a plane rotation -* matrix. -* = 'V': Variable pivot, the plane (k,k+1) -* = 'T': Top pivot, the plane (1,k+1) -* = 'B': Bottom pivot, the plane (k,z) -* -* DIRECT (input) CHARACTER*1 -* Specifies whether P is a forward or backward sequence of -* plane rotations. -* = 'F': Forward, P = P(z-1)*...*P(2)*P(1) -* = 'B': Backward, P = P(1)*P(2)*...*P(z-1) -* -* M (input) INTEGER -* The number of rows of the matrix A. If m <= 1, an immediate -* return is effected. -* -* N (input) INTEGER -* The number of columns of the matrix A. If n <= 1, an -* immediate return is effected. -* -* C (input) DOUBLE PRECISION array, dimension -* (M-1) if SIDE = 'L' -* (N-1) if SIDE = 'R' -* The cosines c(k) of the plane rotations. -* -* S (input) DOUBLE PRECISION array, dimension -* (M-1) if SIDE = 'L' -* (N-1) if SIDE = 'R' -* The sines s(k) of the plane rotations. The 2-by-2 plane -* rotation part of the matrix P(k), R(k), has the form -* R(k) = ( c(k) s(k) ) -* ( -s(k) c(k) ). -* -* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) -* The M-by-N matrix A. On exit, A is overwritten by P*A if -* SIDE = 'R' or by A*P**T if SIDE = 'L'. -* -* LDA (input) INTEGER -* The leading dimension of the array A. LDA >= max(1,M). -* * ===================================================================== * * .. Parameters ..