version 1.5, 2010/08/13 21:03:41
|
version 1.15, 2023/08/07 08:38:44
|
Line 1
|
Line 1
|
SUBROUTINE ZDROT( N, CX, INCX, CY, INCY, C, S ) |
*> \brief \b ZDROT |
|
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE ZDROT( N, ZX, INCX, ZY, INCY, C, S ) |
|
* |
|
* .. Scalar Arguments .. |
|
* INTEGER INCX, INCY, N |
|
* DOUBLE PRECISION C, S |
|
* .. |
|
* .. Array Arguments .. |
|
* COMPLEX*16 ZX( * ), ZY( * ) |
|
* .. |
|
* |
|
* |
|
*> \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] ZX |
|
*> \verbatim |
|
*> ZX is COMPLEX*16 array, dimension at least |
|
*> ( 1 + ( N - 1 )*abs( INCX ) ). |
|
*> Before entry, the incremented array ZX must contain the n |
|
*> element vector cx. On exit, ZX 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 |
|
*> ZX. INCX must not be zero. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] ZY |
|
*> \verbatim |
|
*> ZY is COMPLEX*16 array, dimension at least |
|
*> ( 1 + ( N - 1 )*abs( INCY ) ). |
|
*> Before entry, the incremented array ZY must contain the n |
|
*> element vector cy. On exit, ZY 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 |
|
*> ZY. 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. |
|
* |
|
*> \ingroup complex16_blas_level1 |
|
* |
|
* ===================================================================== |
|
SUBROUTINE ZDROT( N, ZX, INCX, ZY, INCY, C, S ) |
|
* |
|
* -- Reference BLAS level1 routine -- |
|
* -- Reference BLAS is a software package provided by Univ. of Tennessee, -- |
|
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
INTEGER INCX, INCY, N |
INTEGER INCX, INCY, N |
DOUBLE PRECISION C, S |
DOUBLE PRECISION C, S |
* .. |
* .. |
* .. Array Arguments .. |
* .. Array Arguments .. |
COMPLEX*16 CX( * ), CY( * ) |
COMPLEX*16 ZX( * ), ZY( * ) |
* .. |
* .. |
* |
* |
* 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 118
|
* |
* |
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 both increments equal to 1 |
|
* |
|
DO I = 1, N |
|
CTEMP = C*ZX( I ) + S*ZY( I ) |
|
ZY( I ) = C*ZY( I ) - S*ZX( I ) |
|
ZX( I ) = CTEMP |
|
END DO |
|
ELSE |
* |
* |
* code for unequal increments or equal increments not equal |
* code for unequal increments or equal increments not equal |
* to 1 |
* to 1 |
* |
* |
IX = 1 |
IX = 1 |
IY = 1 |
IY = 1 |
IF( INCX.LT.0 ) |
IF( INCX.LT.0 ) |
$ IX = ( -N+1 )*INCX + 1 |
$ IX = ( -N+1 )*INCX + 1 |
IF( INCY.LT.0 ) |
IF( INCY.LT.0 ) |
$ IY = ( -N+1 )*INCY + 1 |
$ IY = ( -N+1 )*INCY + 1 |
DO 10 I = 1, N |
DO I = 1, N |
CTEMP = C*CX( IX ) + S*CY( IY ) |
CTEMP = C*ZX( IX ) + S*ZY( IY ) |
CY( IY ) = C*CY( IY ) - S*CX( IX ) |
ZY( IY ) = C*ZY( IY ) - S*ZX( IX ) |
CX( IX ) = CTEMP |
ZX( IX ) = CTEMP |
IX = IX + INCX |
IX = IX + INCX |
IY = IY + INCY |
IY = IY + INCY |
10 CONTINUE |
END DO |
|
END IF |
RETURN |
RETURN |
* |
* |
* code for both increments equal to 1 |
* End of ZDROT |
* |
* |
20 CONTINUE |
|
DO 30 I = 1, N |
|
CTEMP = C*CX( I ) + S*CY( I ) |
|
CY( I ) = C*CY( I ) - S*CX( I ) |
|
CX( I ) = CTEMP |
|
30 CONTINUE |
|
RETURN |
|
END |
END |