version 1.5, 2010/08/13 21:03:41
|
version 1.10, 2012/12/14 14:22:03
|
Line 1
|
Line 1
|
|
*> \brief \b ZDROT |
|
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S ) |
|
* |
|
* .. Scalar Arguments .. |
|
* INTEGER INCX, INCY, N |
|
* DOUBLE PRECISION C, S |
|
* .. |
|
* .. Array Arguments .. |
|
* COMPLEX*16 CX( * ), CY( * ) |
|
* .. |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> Applies a plane rotation, where the cos and sin (c and s) are real |
|
*> and the vectors cx and cy are complex. |
|
*> jack dongarra, linpack, 3/11/78. |
|
*> \endverbatim |
|
* |
|
* Arguments: |
|
* ========== |
|
* |
|
*> \param[in] N |
|
*> \verbatim |
|
*> N is INTEGER |
|
*> On entry, N specifies the order of the vectors cx and cy. |
|
*> N must be at least zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] CX |
|
*> \verbatim |
|
*> CX is COMPLEX*16 array, dimension at least |
|
*> ( 1 + ( N - 1 )*abs( INCX ) ). |
|
*> Before entry, the incremented array CX must contain the n |
|
*> element vector cx. On exit, CX is overwritten by the updated |
|
*> vector cx. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] INCX |
|
*> \verbatim |
|
*> INCX is INTEGER |
|
*> On entry, INCX specifies the increment for the elements of |
|
*> CX. INCX must not be zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] CY |
|
*> \verbatim |
|
*> CY is COMPLEX*16 array, dimension at least |
|
*> ( 1 + ( N - 1 )*abs( INCY ) ). |
|
*> Before entry, the incremented array CY must contain the n |
|
*> element vector cy. On exit, CY is overwritten by the updated |
|
*> vector cy. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] INCY |
|
*> \verbatim |
|
*> INCY is INTEGER |
|
*> On entry, INCY specifies the increment for the elements of |
|
*> CY. INCY must not be zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] C |
|
*> \verbatim |
|
*> C is DOUBLE PRECISION |
|
*> On entry, C specifies the cosine, cos. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] S |
|
*> \verbatim |
|
*> S is DOUBLE PRECISION |
|
*> On entry, S specifies the sine, sin. |
|
*> \endverbatim |
|
* |
|
* Authors: |
|
* ======== |
|
* |
|
*> \author Univ. of Tennessee |
|
*> \author Univ. of California Berkeley |
|
*> \author Univ. of Colorado Denver |
|
*> \author NAG Ltd. |
|
* |
|
*> \date November 2011 |
|
* |
|
*> \ingroup complex16_blas_level1 |
|
* |
|
* ===================================================================== |
SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S ) |
SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S ) |
* |
* |
|
* -- Reference BLAS level1 routine (version 3.4.0) -- |
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- |
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
|
* November 2011 |
|
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INCX, INCY, N |
INTEGER INCX, INCY, N |
DOUBLE PRECISION C, S |
DOUBLE PRECISION C, S |
Line 8
|
Line 111
|
COMPLEX*16 CX( * ), CY( * ) |
COMPLEX*16 CX( * ), CY( * ) |
* .. |
* .. |
* |
* |
* Purpose |
|
* ======= |
|
* |
|
* Applies a plane rotation, where the cos and sin (c and s) are real |
|
* and the vectors cx and cy are complex. |
|
* jack dongarra, linpack, 3/11/78. |
|
* |
|
* Arguments |
|
* ========== |
|
* |
|
* N (input) INTEGER |
|
* On entry, N specifies the order of the vectors cx and cy. |
|
* N must be at least zero. |
|
* Unchanged on exit. |
|
* |
|
* CX (input) COMPLEX*16 array, dimension at least |
|
* ( 1 + ( N - 1 )*abs( INCX ) ). |
|
* Before entry, the incremented array CX must contain the n |
|
* element vector cx. On exit, CX is overwritten by the updated |
|
* vector cx. |
|
* |
|
* INCX (input) INTEGER |
|
* On entry, INCX specifies the increment for the elements of |
|
* CX. INCX must not be zero. |
|
* Unchanged on exit. |
|
* |
|
* CY (input) COMPLEX*16 array, dimension at least |
|
* ( 1 + ( N - 1 )*abs( INCY ) ). |
|
* Before entry, the incremented array CY must contain the n |
|
* element vector cy. On exit, CY is overwritten by the updated |
|
* vector cy. |
|
* |
|
* INCY (input) INTEGER |
|
* On entry, INCY specifies the increment for the elements of |
|
* CY. INCY must not be zero. |
|
* Unchanged on exit. |
|
* |
|
* C (input) DOUBLE PRECISION |
|
* On entry, C specifies the cosine, cos. |
|
* Unchanged on exit. |
|
* |
|
* S (input) DOUBLE PRECISION |
|
* On entry, S specifies the sine, sin. |
|
* Unchanged on exit. |
|
* |
|
* ===================================================================== |
* ===================================================================== |
* |
* |
* .. Local Scalars .. |
* .. Local Scalars .. |
Line 63
|
Line 121
|
* |
* |
IF( N.LE.0 ) |
IF( N.LE.0 ) |
$ RETURN |
$ RETURN |
IF( INCX.EQ.1 .AND. INCY.EQ.1 ) |
IF( INCX.EQ.1 .AND. INCY.EQ.1 ) THEN |
$ GO TO 20 |
|
* |
* |
* code for unequal increments or equal increments not equal |
* code for both increments equal to 1 |
* to 1 |
|
* |
* |
IX = 1 |
DO I = 1, N |
IY = 1 |
CTEMP = C*CX( I ) + S*CY( I ) |
IF( INCX.LT.0 ) |
CY( I ) = C*CY( I ) - S*CX( I ) |
$ IX = ( -N+1 )*INCX + 1 |
CX( I ) = CTEMP |
IF( INCY.LT.0 ) |
END DO |
$ IY = ( -N+1 )*INCY + 1 |
ELSE |
DO 10 I = 1, N |
|
CTEMP = C*CX( IX ) + S*CY( IY ) |
|
CY( IY ) = C*CY( IY ) - S*CX( IX ) |
|
CX( IX ) = CTEMP |
|
IX = IX + INCX |
|
IY = IY + INCY |
|
10 CONTINUE |
|
RETURN |
|
* |
* |
* code for both increments equal to 1 |
* code for unequal increments or equal increments not equal |
|
* to 1 |
* |
* |
20 CONTINUE |
IX = 1 |
DO 30 I = 1, N |
IY = 1 |
CTEMP = C*CX( I ) + S*CY( I ) |
IF( INCX.LT.0 ) |
CY( I ) = C*CY( I ) - S*CX( I ) |
$ IX = ( -N+1 )*INCX + 1 |
CX( I ) = CTEMP |
IF( INCY.LT.0 ) |
30 CONTINUE |
$ IY = ( -N+1 )*INCY + 1 |
|
DO I = 1, N |
|
CTEMP = C*CX( IX ) + S*CY( IY ) |
|
CY( IY ) = C*CY( IY ) - S*CX( IX ) |
|
CX( IX ) = CTEMP |
|
IX = IX + INCX |
|
IY = IY + INCY |
|
END DO |
|
END IF |
RETURN |
RETURN |
END |
END |