Purpose
To construct a complex plane rotation such that, for a complex number a and a real number b, ( conjg( c ) s )*( a ) = ( d ), ( -s c ) ( b ) ( 0 ) where d is always real and is overwritten on a, so that on return the imaginary part of a is zero. b is unaltered. This routine has A and C declared as REAL, because it is intended for use within a real Lyapunov solver and the REAL declarations mean that a standard Fortran DOUBLE PRECISION version may be readily constructed. However A and C could safely be declared COMPLEX in the calling program, although some systems may give a type mismatch warning.Specification
SUBROUTINE SB03OV( A, B, SMALL, C, S ) C .. Scalar Arguments .. DOUBLE PRECISION B, S, SMALL C .. Array Arguments .. DOUBLE PRECISION A(2), C(2)Arguments
Input/Output Parameters
A (input/output) DOUBLE PRECISION array, dimension (2) On entry, A(1) and A(2) must contain the real and imaginary part, respectively, of the complex number a. On exit, A(1) contains the real part of d, and A(2) is set to zero. B (input) DOUBLE PRECISION The real number b. SMALL (input) DOUBLE PRECISION A small real number. If the norm d of [ a; b ] is smaller than SMALL, then the rotation is taken as a unit matrix, and A(1) and A(2) are set to d and 0, respectively. C (output) DOUBLE PRECISION array, dimension (2) C(1) and C(2) contain the real and imaginary part, respectively, of the complex number c, the cosines of the plane rotation. S (output) DOUBLE PRECISION The real number s, the sines of the plane rotation.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None