Diff for /rpl/lapack/lapack/dlasr.f between versions 1.8 and 1.9

version 1.8, 2011/07/22 07:38:08 version 1.9, 2011/11/21 20:42:59
Line 1 Line 1
   *> \brief \b DLASR
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at 
   *            http://www.netlib.org/lapack/explore-html/ 
   *
   *> \htmlonly
   *> Download DLASR + dependencies 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasr.f"> 
   *> [TGZ]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasr.f"> 
   *> [ZIP]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasr.f"> 
   *> [TXT]</a>
   *> \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 )        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,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     November 2006  *     November 2011
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          DIRECT, PIVOT, SIDE        CHARACTER          DIRECT, PIVOT, SIDE
Line 13 Line 212
       DOUBLE PRECISION   A( LDA, * ), C( * ), S( * )        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 ..  *     .. Parameters ..

Removed from v.1.8  
changed lines
  Added in v.1.9


CVSweb interface <joel.bertrand@systella.fr>