CSROT 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.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer(kind=ilp), | intent(in) | :: | n | |||
complex(kind=sp), | intent(inout) | :: | cx(*) | |||
integer(kind=ilp), | intent(in) | :: | incx | |||
complex(kind=sp), | intent(inout) | :: | cy(*) | |||
integer(kind=ilp), | intent(in) | :: | incy | |||
real(kind=sp), | intent(in) | :: | c | |||
real(kind=sp), | intent(in) | :: | s |
pure subroutine stdlib_csrot( n, cx, incx, cy, incy, c, s ) !! CSROT 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. ! -- 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 integer(ilp), intent(in) :: incx, incy, n real(sp), intent(in) :: c, s ! Array Arguments complex(sp), intent(inout) :: cx(*), cy(*) ! ===================================================================== ! Local Scalars integer(ilp) :: i, ix, iy complex(sp) :: ctemp ! Executable Statements if( n<=0 )return if( incx==1 .and. incy==1 ) then ! code for both increments equal to 1 do i = 1, n ctemp = c*cx( i ) + s*cy( i ) cy( i ) = c*cy( i ) - s*cx( i ) cx( i ) = ctemp end do else ! code for unequal increments or equal increments not equal ! to 1 ix = 1 iy = 1 if( incx<0 )ix = ( -n+1 )*incx + 1 if( incy<0 )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 end subroutine stdlib_csrot