**Purpose**

To apply the Householder transformations Pj stored in factored form into the columns of the array X, to the desired columns of the matrix U by premultiplication, and/or the Householder transformations Qj stored in factored form into the rows of the array X, to the desired columns of the matrix V by premultiplication. The Householder transformations Pj and Qj are stored as produced by LAPACK Library routine DGEBRD.

SUBROUTINE MB04XY( JOBU, JOBV, M, N, X, LDX, TAUP, TAUQ, U, $ LDU, V, LDV, INUL, INFO ) C .. Scalar Arguments .. CHARACTER JOBU, JOBV INTEGER INFO, LDU, LDV, LDX, M, N C .. Array Arguments .. LOGICAL INUL(*) DOUBLE PRECISION TAUP(*), TAUQ(*), U(LDU,*), V(LDV,*), $ X(LDX,*)

**Mode Parameters**

JOBU CHARACTER*1 Specifies whether to transform the columns in U as follows: = 'N': Do not transform the columns in U; = 'A': Transform the columns in U (U has M columns); = 'S': Transform the columns in U (U has min(M,N) columns). JOBV CHARACTER*1 Specifies whether to transform the columns in V as follows: = 'N': Do not transform the columns in V; = 'A': Transform the columns in V (V has N columns); = 'S': Transform the columns in V (V has min(M,N) columns).

M (input) INTEGER The number of rows of the matrix X. M >= 0. N (input) INTEGER The number of columns of the matrix X. N >= 0. X (input) DOUBLE PRECISION array, dimension (LDX,N) The leading M-by-N part contains in the columns of its lower triangle the Householder transformations Pj, and in the rows of its upper triangle the Householder transformations Qj in factored form. X is modified by the routine but restored on exit. LDX INTEGER The leading dimension of the array X. LDX >= MAX(1,M). TAUP (input) DOUBLE PRECISION array, dimension (MIN(M,N)) The scalar factors of the Householder transformations Pj. TAUQ (input) DOUBLE PRECISION array, dimension (MIN(M,N)) The scalar factors of the Householder transformations Qj. U (input/output) DOUBLE PRECISION array, dimension (LDU,*) On entry, U contains the M-by-M (if JOBU = 'A') or M-by-min(M,N) (if JOBU = 'S') matrix U. On exit, the Householder transformations Pj have been applied to each column i of U corresponding to a parameter INUL(i) = .TRUE. NOTE that U is not referenced if JOBU = 'N'. LDU INTEGER The leading dimension of the array U. LDU >= MAX(1,M), if JOBU = 'A' or JOBU = 'S'; LDU >= 1, if JOBU = 'N'. V (input/output) DOUBLE PRECISION array, dimension (LDV,*) On entry, V contains the N-by-N (if JOBV = 'A') or N-by-min(M,N) (if JOBV = 'S') matrix V. On exit, the Householder transformations Qj have been applied to each column i of V corresponding to a parameter INUL(i) = .TRUE. NOTE that V is not referenced if JOBV = 'N'. LDV INTEGER The leading dimension of the array V. LDV >= MAX(1,M), if JOBV = 'A' or JOBV = 'S'; LDV >= 1, if JOBV = 'N'. INUL (input) LOGICAL array, dimension (MAX(M,N)) INUL(i) = .TRUE. if the i-th column of U and/or V is to be transformed, and INUL(i) = .FALSE., otherwise. (1 <= i <= MAX(M,N)).

INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.

The Householder transformations Pj or Qj are applied to the columns of U or V indexed by I for which INUL(I) = .TRUE..

The algorithm is backward stable.

None

**Program Text**

None

None

None