1DORMTR(1) LAPACK routine (version 3.1) DORMTR(1)
2
3
4
6 DORMTR - the general real M-by-N matrix C with SIDE = 'L' SIDE = 'R'
7 TRANS = 'N'
8
10 SUBROUTINE DORMTR( SIDE, UPLO, TRANS, M, N, A, LDA, TAU, C, LDC, WORK,
11 LWORK, INFO )
12
13 CHARACTER SIDE, TRANS, UPLO
14
15 INTEGER INFO, LDA, LDC, LWORK, M, N
16
17 DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK(
18 * )
19
21 DORMTR overwrites the general real M-by-N matrix C with TRANS = 'T':
22 Q**T * C C * Q**T
23
24 where Q is a real orthogonal matrix of order nq, with nq = m if SIDE =
25 'L' and nq = n if SIDE = 'R'. Q is defined as the product of nq-1 ele‐
26 mentary reflectors, as returned by DSYTRD:
27
28 if UPLO = 'U', Q = H(nq-1) . . . H(2) H(1);
29
30 if UPLO = 'L', Q = H(1) H(2) . . . H(nq-1).
31
32
34 SIDE (input) CHARACTER*1
35 = 'L': apply Q or Q**T from the Left;
36 = 'R': apply Q or Q**T from the Right.
37
38 UPLO (input) CHARACTER*1
39 = 'U': Upper triangle of A contains elementary reflectors from
40 DSYTRD; = 'L': Lower triangle of A contains elementary reflec‐
41 tors from DSYTRD.
42
43 TRANS (input) CHARACTER*1
44 = 'N': No transpose, apply Q;
45 = 'T': Transpose, apply Q**T.
46
47 M (input) INTEGER
48 The number of rows of the matrix C. M >= 0.
49
50 N (input) INTEGER
51 The number of columns of the matrix C. N >= 0.
52
53 A (input) DOUBLE PRECISION array, dimension
54 (LDA,M) if SIDE = 'L' (LDA,N) if SIDE = 'R' The vectors which
55 define the elementary reflectors, as returned by DSYTRD.
56
57 LDA (input) INTEGER
58 The leading dimension of the array A. LDA >= max(1,M) if SIDE
59 = 'L'; LDA >= max(1,N) if SIDE = 'R'.
60
61 TAU (input) DOUBLE PRECISION array, dimension
62 (M-1) if SIDE = 'L' (N-1) if SIDE = 'R' TAU(i) must contain the
63 scalar factor of the elementary reflector H(i), as returned by
64 DSYTRD.
65
66 C (input/output) DOUBLE PRECISION array, dimension (LDC,N)
67 On entry, the M-by-N matrix C. On exit, C is overwritten by
68 Q*C or Q**T*C or C*Q**T or C*Q.
69
70 LDC (input) INTEGER
71 The leading dimension of the array C. LDC >= max(1,M).
72
73 WORK (workspace/output) DOUBLE PRECISION array, dimension
74 (MAX(1,LWORK))
75 On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
76
77 LWORK (input) INTEGER
78 The dimension of the array WORK. If SIDE = 'L', LWORK >=
79 max(1,N); if SIDE = 'R', LWORK >= max(1,M). For optimum per‐
80 formance LWORK >= N*NB if SIDE = 'L', and LWORK >= M*NB if SIDE
81 = 'R', where NB is the optimal blocksize.
82
83 If LWORK = -1, then a workspace query is assumed; the routine
84 only calculates the optimal size of the WORK array, returns
85 this value as the first entry of the WORK array, and no error
86 message related to LWORK is issued by XERBLA.
87
88 INFO (output) INTEGER
89 = 0: successful exit
90 < 0: if INFO = -i, the i-th argument had an illegal value
91
92
93
94 LAPACK routine (version 3.1) November 2006 DORMTR(1)