1
SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV,
2
$ T, LDT, C, LDC, WORK, LDWORK )
5
* -- LAPACK auxiliary routine (version 3.2) --
6
* -- LAPACK is a software package provided by Univ. of Tennessee, --
7
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
9
* Modified by R. Clint Whaley for inclusion in ATLAS Dec 2009.
11
* .. Scalar Arguments ..
12
CHARACTER DIRECT, SIDE, STOREV, TRANS
13
INTEGER K, LDC, LDT, LDV, LDWORK, M, N
15
* .. Array Arguments ..
16
DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ),
23
* DLARFB applies a real block reflector H or its transpose H' to a
24
* real m by n matrix C, from either the left or the right.
29
* SIDE (input) CHARACTER*1
30
* = 'L': apply H or H**T from the Left
31
* = 'R': apply H or H**T from the Right
33
* TRANS (input) CHARACTER*1
34
* = 'N': apply H (No transpose)
35
* = 'T': apply H**T (Transpose)
37
* DIRECT (input) CHARACTER*1
38
* Indicates how H is formed from a product of elementary
40
* = 'F': H = H(1) H(2) . . . H(k) (Forward)
41
* = 'B': H = H(k) . . . H(2) H(1) (Backward)
43
* STOREV (input) CHARACTER*1
44
* Indicates how the vectors which define the elementary
45
* reflectors are stored:
50
* The number of rows of the matrix C.
53
* The number of columns of the matrix C.
56
* The order of the matrix T (= the number of elementary
57
* reflectors whose product defines the block reflector).
59
* V (input) DOUBLE PRECISION array, dimension
60
* (LDV,K) if STOREV = 'C'
61
* (LDV,M) if STOREV = 'R' and SIDE = 'L'
62
* (LDV,N) if STOREV = 'R' and SIDE = 'R'
63
* The matrix V. See further details.
66
* The leading dimension of the array V.
67
* If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M);
68
* if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N);
69
* if STOREV = 'R', LDV >= K.
71
* T (input) DOUBLE PRECISION array, dimension (LDT,K)
72
* The triangular k by k matrix T in the representation of the
76
* The leading dimension of the array T. LDT >= K.
78
* C (input/output) DOUBLE PRECISION array, dimension (LDC,N)
79
* On entry, the m by n matrix C.
80
* On exit, C is overwritten by H*C or H'*C or C*H or C*H'.
83
* The leading dimension of the array C. LDC >= max(1,M).
85
* WORK (workspace) DOUBLE PRECISION array, dimension (LDWORK,K)
87
* LDWORK (input) INTEGER
88
* The leading dimension of the array WORK.
89
* If SIDE = 'L', LDWORK >= max(1,N);
90
* if SIDE = 'R', LDWORK >= max(1,M).
92
* =====================================================================
95
INTEGER ATLASROWMAJOR, ATLASCOLMAJOR
96
PARAMETER (ATLASROWMAJOR=101, ATLASCOLMAJOR=102)
97
INTEGER ATLASNOTRANS, ATLASTRANS, ATLASCONJTRANS
98
PARAMETER (ATLASNOTRANS=111, ATLASTRANS=112, ATLASCONJTRANS=113)
99
INTEGER ATLASUPPER, ATLASLOWER
100
PARAMETER (ATLASUPPER=121, ATLASLOWER=122)
101
INTEGER ATLASNONUNIT, ATLASUNIT
102
PARAMETER (ATLASNONUNIT=131, ATLASUNIT=132)
103
INTEGER ATLASLEFT, ATLASRIGHT
104
PARAMETER (ATLASLEFT=141, ATLASRIGHT=142)
105
* .. Local variables ..
106
INTEGER ISIDE, ITRANS, IDIRECT, ISTORE
108
* .. Executable Statements ..
110
* Quick return if possible
112
IF( M.LE.0 .OR. N.LE.0 )
114
IF (SIDE.EQ.'R' .OR. SIDE.EQ.'r') THEN
119
IF (TRANS.EQ.'N' .OR. TRANS.EQ.'n') THEN
120
ITRANS = ATLASNOTRANS
124
IF (DIRECT.EQ.'F' .OR. DIRECT.EQ.'f') THEN
129
IF (STOREV.EQ.'R' .OR. STOREV.EQ.'r') THEN
135
CALL ATL_F77WRAP_DLARFB(ISIDE, ITRANS, IDIRECT, ISTORE, M, N, K,
136
$ V, LDV, T, LDT, C, LDC, WORK, LDWORK)