**Purpose**

To generate the real orthogonal matrices Q_1, Q_2, ..., Q_p, which are defined as the product of ihi-ilo elementary reflectors of order n, as returned by SLICOT Library routine MB03VD: Q_j = H_j(ilo) H_j(ilo+1) . . . H_j(ihi-1).

SUBROUTINE MB03VY( N, P, ILO, IHI, A, LDA1, LDA2, TAU, LDTAU, $ DWORK, LDWORK, INFO ) C .. Scalar Arguments .. INTEGER IHI, ILO, INFO, LDA1, LDA2, LDTAU, LDWORK, N, P C .. Array Arguments .. DOUBLE PRECISION A( LDA1, LDA2, * ), DWORK( * ), TAU( LDTAU, * )

**Input/Output Parameters**

N (input) INTEGER The order of the matrices Q_1, Q_2, ..., Q_p. N >= 0. P (input) INTEGER The number p of transformation matrices. P >= 1. ILO (input) INTEGER IHI (input) INTEGER The values of the indices ilo and ihi, respectively, used in the previous call of the SLICOT Library routine MB03VD. 1 <= ILO <= max(1,N); min(ILO,N) <= IHI <= N. A (input/output) DOUBLE PRECISION array, dimension (LDA1,LDA2,N) On entry, the leading N-by-N strictly lower triangular part of A(*,*,j) must contain the vectors which define the elementary reflectors used for reducing A_j, as returned by SLICOT Library routine MB03VD, j = 1, ..., p. On exit, the leading N-by-N part of A(*,*,j) contains the N-by-N orthogonal matrix Q_j, j = 1, ..., p. LDA1 INTEGER The first leading dimension of the array A. LDA1 >= max(1,N). LDA2 INTEGER The second leading dimension of the array A. LDA2 >= max(1,N). TAU (input) DOUBLE PRECISION array, dimension (LDTAU,P) The leading N-1 elements in the j-th column must contain the scalar factors of the elementary reflectors used to form the matrix Q_j, as returned by SLICOT Library routine MB03VD. LDTAU INTEGER The leading dimension of the array TAU. LDTAU >= max(1,N-1).

DWORK DOUBLE PRECISION array, dimension (LDWORK) On exit, if INFO = 0, DWORK(1) returns the optimal value of LDWORK. LDWORK INTEGER The length of the array DWORK. LDWORK >= MAX(1,N). For optimum performance LDWORK should be larger. If LDWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the DWORK array, returns this value as the first entry of the DWORK array, and no error message related to LDWORK is issued by XERBLA.

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

Each matrix Q_j is generated as the product of the elementary reflectors used for reducing A_j. Standard LAPACK routines for Hessenberg and QR decompositions are used.

[1] Bojanczyk, A.W., Golub, G. and Van Dooren, P. The periodic Schur decomposition: algorithms and applications. Proc. of the SPIE Conference (F.T. Luk, Ed.), 1770, pp. 31-42, 1992. [2] Sreedhar, J. and Van Dooren, P. Periodic Schur form and some matrix equations. Proc. of the Symposium on the Mathematical Theory of Networks and Systems (MTNS'93), Regensburg, Germany (U. Helmke, R. Mennicken and J. Saurer, Eds.), Vol. 1, pp. 339-362, 1994.

The algorithm is numerically stable.

None

**Program Text**

None

None

None