###
Choosing the closest real (complex conjugate) eigenvalue(s) to a given real (complex) value

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

To choose a real eigenvalue or a pair of complex conjugate
eigenvalues at "minimal" distance to a given real or complex
value.

**Specification**
SUBROUTINE SB01BX( REIG, N, XR, XI, WR, WI, S, P )
C .. Scalar Arguments ..
LOGICAL REIG
INTEGER N
DOUBLE PRECISION P, S, XI ,XR
C .. Array Arguments ..
DOUBLE PRECISION WI(*), WR(*)

**Arguments**
**Mode Parameters**

REIG LOGICAL
Specifies the type of eigenvalues as follows:
= .TRUE., a real eigenvalue is to be selected;
= .FALSE., a pair of complex eigenvalues is to be
selected.

**Input/Output Parameters**
N (input) INTEGER
The number of eigenvalues contained in the arrays WR
and WI. N >= 1.
XR,XI (input) DOUBLE PRECISION
If REIG = .TRUE., XR must contain the real value and XI
is assumed zero and therefore not referenced.
If REIG = .FALSE., XR must contain the real part and XI
the imaginary part, respectively, of the complex value.
WR,WI (input/output) DOUBLE PRECISION array, dimension (N)
On entry, if REIG = .TRUE., WR must contain the real
eigenvalues from which an eigenvalue at minimal distance
to XR is to be selected. In this case, WI is considered
zero and therefore not referenced.
On entry, if REIG = .FALSE., WR and WI must contain the
real and imaginary parts, respectively, of the eigenvalues
from which a pair of complex conjugate eigenvalues at
minimal "distance" to XR + jXI is to be selected.
The eigenvalues of each pair of complex conjugate
eigenvalues must appear consecutively.
On exit, the elements of these arrays are reordered such
that the selected eigenvalue(s) is (are) found in the
last element(s) of these arrays.
S,P (output) DOUBLE PRECISION
If REIG = .TRUE., S (and also P) contains the value of
the selected real eigenvalue.
If REIG = .FALSE., S and P contain the sum and product,
respectively, of the selected complex conjugate pair of
eigenvalues.

**Further Comments**
For efficiency reasons, |x| + |y| is used for a complex number
x + jy, instead of its modulus.

**Example**
**Program Text**

None

**Program Data**
None

**Program Results**
None

**Return to Supporting Routines index**