SB03OV

Construction of a complex plane rotation to annihilate a real number, modifying a complex number

[Specification] [Arguments] [Method] [References] [Comments] [Example]

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
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index