Mercurial > octave
comparison libcruft/lapack/zunmbr.f @ 7034:68db500cb558
[project @ 2007-10-16 18:54:19 by jwe]
author | jwe |
---|---|
date | Tue, 16 Oct 2007 18:54:23 +0000 |
parents | 15cddaacbc2d |
children |
comparison
equal
deleted
inserted
replaced
7033:f0142f2afdc6 | 7034:68db500cb558 |
---|---|
1 SUBROUTINE ZUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C, | 1 SUBROUTINE ZUNMBR( VECT, SIDE, TRANS, M, N, K, A, LDA, TAU, C, |
2 $ LDC, WORK, LWORK, INFO ) | 2 $ LDC, WORK, LWORK, INFO ) |
3 * | 3 * |
4 * -- LAPACK routine (version 3.0) -- | 4 * -- LAPACK routine (version 3.1) -- |
5 * Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., | 5 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. |
6 * Courant Institute, Argonne National Lab, and Rice University | 6 * November 2006 |
7 * June 30, 1999 | |
8 * | 7 * |
9 * .. Scalar Arguments .. | 8 * .. Scalar Arguments .. |
10 CHARACTER SIDE, TRANS, VECT | 9 CHARACTER SIDE, TRANS, VECT |
11 INTEGER INFO, K, LDA, LDC, LWORK, M, N | 10 INTEGER INFO, K, LDA, LDC, LWORK, M, N |
12 * .. | 11 * .. |
96 * or P*C or P**H*C or C*P or C*P**H. | 95 * or P*C or P**H*C or C*P or C*P**H. |
97 * | 96 * |
98 * LDC (input) INTEGER | 97 * LDC (input) INTEGER |
99 * The leading dimension of the array C. LDC >= max(1,M). | 98 * The leading dimension of the array C. LDC >= max(1,M). |
100 * | 99 * |
101 * WORK (workspace/output) COMPLEX*16 array, dimension (LWORK) | 100 * WORK (workspace/output) COMPLEX*16 array, dimension (MAX(1,LWORK)) |
102 * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. | 101 * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. |
103 * | 102 * |
104 * LWORK (input) INTEGER | 103 * LWORK (input) INTEGER |
105 * The dimension of the array WORK. | 104 * The dimension of the array WORK. |
106 * If SIDE = 'L', LWORK >= max(1,N); | 105 * If SIDE = 'L', LWORK >= max(1,N); |
107 * if SIDE = 'R', LWORK >= max(1,M). | 106 * if SIDE = 'R', LWORK >= max(1,M); |
108 * For optimum performance LWORK >= N*NB if SIDE = 'L', and | 107 * if N = 0 or M = 0, LWORK >= 1. |
109 * LWORK >= M*NB if SIDE = 'R', where NB is the optimal | 108 * For optimum performance LWORK >= max(1,N*NB) if SIDE = 'L', |
110 * blocksize. | 109 * and LWORK >= max(1,M*NB) if SIDE = 'R', where NB is the |
110 * optimal blocksize. (NB = 0 if M = 0 or N = 0.) | |
111 * | 111 * |
112 * If LWORK = -1, then a workspace query is assumed; the routine | 112 * If LWORK = -1, then a workspace query is assumed; the routine |
113 * only calculates the optimal size of the WORK array, returns | 113 * only calculates the optimal size of the WORK array, returns |
114 * this value as the first entry of the WORK array, and no error | 114 * this value as the first entry of the WORK array, and no error |
115 * message related to LWORK is issued by XERBLA. | 115 * message related to LWORK is issued by XERBLA. |
152 NQ = M | 152 NQ = M |
153 NW = N | 153 NW = N |
154 ELSE | 154 ELSE |
155 NQ = N | 155 NQ = N |
156 NW = M | 156 NW = M |
157 END IF | |
158 IF( M.EQ.0 .OR. N.EQ.0 ) THEN | |
159 NW = 0 | |
157 END IF | 160 END IF |
158 IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN | 161 IF( .NOT.APPLYQ .AND. .NOT.LSAME( VECT, 'P' ) ) THEN |
159 INFO = -1 | 162 INFO = -1 |
160 ELSE IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN | 163 ELSE IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN |
161 INFO = -2 | 164 INFO = -2 |
176 ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN | 179 ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN |
177 INFO = -13 | 180 INFO = -13 |
178 END IF | 181 END IF |
179 * | 182 * |
180 IF( INFO.EQ.0 ) THEN | 183 IF( INFO.EQ.0 ) THEN |
181 IF( APPLYQ ) THEN | 184 IF( NW.GT.0 ) THEN |
182 IF( LEFT ) THEN | 185 IF( APPLYQ ) THEN |
183 NB = ILAENV( 1, 'ZUNMQR', SIDE // TRANS, M-1, N, M-1, | 186 IF( LEFT ) THEN |
184 $ -1 ) | 187 NB = ILAENV( 1, 'ZUNMQR', SIDE // TRANS, M-1, N, M-1, |
188 $ -1 ) | |
189 ELSE | |
190 NB = ILAENV( 1, 'ZUNMQR', SIDE // TRANS, M, N-1, N-1, | |
191 $ -1 ) | |
192 END IF | |
185 ELSE | 193 ELSE |
186 NB = ILAENV( 1, 'ZUNMQR', SIDE // TRANS, M, N-1, N-1, | 194 IF( LEFT ) THEN |
187 $ -1 ) | 195 NB = ILAENV( 1, 'ZUNMLQ', SIDE // TRANS, M-1, N, M-1, |
196 $ -1 ) | |
197 ELSE | |
198 NB = ILAENV( 1, 'ZUNMLQ', SIDE // TRANS, M, N-1, N-1, | |
199 $ -1 ) | |
200 END IF | |
188 END IF | 201 END IF |
202 LWKOPT = MAX( 1, NW*NB ) | |
189 ELSE | 203 ELSE |
190 IF( LEFT ) THEN | 204 LWKOPT = 1 |
191 NB = ILAENV( 1, 'ZUNMLQ', SIDE // TRANS, M-1, N, M-1, | 205 END IF |
192 $ -1 ) | |
193 ELSE | |
194 NB = ILAENV( 1, 'ZUNMLQ', SIDE // TRANS, M, N-1, N-1, | |
195 $ -1 ) | |
196 END IF | |
197 END IF | |
198 LWKOPT = MAX( 1, NW )*NB | |
199 WORK( 1 ) = LWKOPT | 206 WORK( 1 ) = LWKOPT |
200 END IF | 207 END IF |
201 * | 208 * |
202 IF( INFO.NE.0 ) THEN | 209 IF( INFO.NE.0 ) THEN |
203 CALL XERBLA( 'ZUNMBR', -INFO ) | 210 CALL XERBLA( 'ZUNMBR', -INFO ) |
204 RETURN | 211 RETURN |
205 ELSE IF( LQUERY ) THEN | 212 ELSE IF( LQUERY ) THEN |
213 RETURN | |
206 END IF | 214 END IF |
207 * | 215 * |
208 * Quick return if possible | 216 * Quick return if possible |
209 * | 217 * |
210 WORK( 1 ) = 1 | |
211 IF( M.EQ.0 .OR. N.EQ.0 ) | 218 IF( M.EQ.0 .OR. N.EQ.0 ) |
212 $ RETURN | 219 $ RETURN |
213 * | 220 * |
214 IF( APPLYQ ) THEN | 221 IF( APPLYQ ) THEN |
215 * | 222 * |