36
36
* > \verbatim
37
37
* >
38
38
* > DLARFB_GETT applies a real Householder block reflector H from the
39
- * > left to a real (K+M)-by-N "triangular-pentagonal" matrix, which is
39
+ * > left to a real (K+M)-by-N "triangular-pentagonal" matrix
40
40
* > composed of two block matrices: an upper trapezoidal K-by-N matrix A
41
41
* > stored in the array A, and a rectangular M-by-(N-K) matrix B, stored
42
42
* > in the array B. The block reflector H is stored in a compact
50
50
* > \param[in] IDENT
51
51
* > \verbatim
52
52
* > IDENT is CHARACTER*1
53
- * > = 'I': V1 is an identity matrix and not stored.
54
- * > = 'N': V1 is unit lower-triangular and
55
- * > stored in the left K-by-K block of A.
53
+ * > If IDENT = not 'I', or not 'i', then V1 is unit
54
+ * > lower-triangular and stored in the left K-by-K block of
55
+ * > the input matrix A,
56
+ * > If IDENT = 'I' or 'i', then V1 is an identity matrix and
57
+ * > not stored.
56
58
* > See Further Details section.
57
59
* > \endverbatim
58
60
* >
98
100
* >
99
101
* > On entry:
100
102
* > a) In the K-by-N upper-trapezoidal part A: input matrix A.
101
- * > b) In the columns below the diagonal: columns of V1,
102
- * > (Ones are not stored on the diagonal).
103
+ * > b) In the columns below the diagonal: columns of V1
104
+ * > (ones are not stored on the diagonal).
103
105
* >
104
106
* > On exit:
105
107
* > A is overwritten by rectangular K-by-N product H*A.
174
176
* >
175
177
* > \verbatim
176
178
* >
177
- * > (1) Description of an Algebraic Operation.
179
+ * > (1) Description of the Algebraic Operation.
178
180
* >
179
181
* > The matrix A is a K-by-N matrix composed of two column block
180
182
* > matrices, A1, which is K-by-K, and A2, which is K-by-(N-K):
194
196
* > a) ( A_in ) consists of two block columns:
195
197
* > ( B_in )
196
198
* >
197
- * > ( A_in ) = (( A1_in ) ( A2_in ))
198
- * > ( B_in ) (( 0 ) ( B2_in )),
199
+ * > ( A_in ) = (( A1_in ) ( A2_in )) = (( A1_in ) ( A2_in ))
200
+ * > ( B_in ) (( B1_in ) ( B2_in )) (( 0 ) ( B2_in )),
199
201
* >
200
202
* > where the column blocks are:
201
203
* >
202
204
* > ( A1_in ) is a K-by-K upper-triangular matrix stored in the
203
- * > upper triangular part of the array A(1:K,1:K),
204
- * > ( B1_in ) is an M-by-K rectangular ZERO matrix and not stored;
205
+ * > upper triangular part of the array A(1:K,1:K).
206
+ * > ( B1_in ) is an M-by-K rectangular ZERO matrix and not stored.
205
207
* >
206
208
* > ( A2_in ) is a K-by-(N-K) rectangular matrix stored
207
- * > in the array A(1:K,K+1:N),
209
+ * > in the array A(1:K,K+1:N).
208
210
* > ( B2_in ) is an M-by-(N-K) rectangular matrix stored
209
- * > in the array B(1:M,K+1:N),
211
+ * > in the array B(1:M,K+1:N).
210
212
* >
211
213
* > b) V = ( V1 )
212
214
* > ( V2 )
213
215
* >
214
- * > where V1 :
215
- * > 1) if IDENT == 'I', is a K-by-K identity matrix, not stored;
216
- * > 2) if IDENT != 'I', is a K-by-K unit lower-triangular matrix,
217
- * > stored in the lower-triangular part of the array
218
- * > A(1:K,1:K) (ones are not stored),
219
- * > and V2 is an M-by-K rectangular stored the array B(1:M,1:K),
220
- * > (because on input B1_in is a rectangular zero
221
- * > matrix that is not stored and the space is
222
- * > used to store V2),
216
+ * > where:
217
+ * > 1) if IDENT == 'I',V1 is a K-by-K identity matrix, not stored;
218
+ * > 2) if IDENT != 'I',V1 is a K-by-K unit lower-triangular matrix,
219
+ * > stored in the lower-triangular part of the array
220
+ * > A(1:K,1:K) (ones are not stored),
221
+ * > and V2 is an M-by-K rectangular stored the array B(1:M,1:K),
222
+ * > (because on input B1_in is a rectangular zero
223
+ * > matrix that is not stored and the space is
224
+ * > used to store V2).
223
225
* >
224
226
* > c) T is a K-by-K upper-triangular matrix stored
225
227
* > in the array T(1:K,1:K).
234
236
* >
235
237
* > where the column blocks are:
236
238
* >
237
- * > ( A1_out ) is a K-by-K square matrix stored in the array
238
- * > A(1:K,1:K) (upper-triangular if V1 is ZERO matrix)
239
+ * > ( A1_out ) is a K-by-K square matrix, or a K-by-K
240
+ * > upper-triangular matrix, if V1 is an
241
+ * > identity matrix. AiOut is stored in
242
+ * > the array A(1:K,1:K).
239
243
* > ( B1_out ) is an M-by-K rectangular matrix stored
240
244
* > in the array B(1:M,K:N).
241
245
* >
242
246
* > ( A2_out ) is a K-by-(N-K) rectangular matrix stored
243
- * > in the array A(1:K,K+1:N),
247
+ * > in the array A(1:K,K+1:N).
244
248
* > ( B2_out ) is an M-by-(N-K) rectangular matrix stored
245
249
* > in the array B(1:M,K+1:N).
246
250
* >
258
262
* >
259
263
* > The computation for column block 1:
260
264
* >
261
- * > A1 : = A1 - V1*T*(V1**T)*A1
265
+ * > A1_out : = A1_in - V1*T*(V1**T)*A1_in
262
266
* >
263
- * > B1 : = - V2*T*(V1**T)*A1
267
+ * > B1_out : = - V2*T*(V1**T)*A1_in
264
268
* >
265
269
* > The computation for column block 2, which exists if N > K:
266
270
* >
267
- * > A2 : = A2 - V1*T*( (V1**T)*A2 + (V2**T)*B2 )
271
+ * > A2_out : = A2_in - V1*T*( (V1**T)*A2_in + (V2**T)*B2_in )
268
272
* >
269
- * > B2 : = B2 - V2*T*( (V1**T)*A2 + (V2**T)*B2 )
273
+ * > B2_out : = B2_in - V2*T*( (V1**T)*A2_in + (V2**T)*B2_in )
270
274
* >
271
275
* > If IDENT == 'I':
272
276
* >
273
277
* > The operation for column block 1:
274
278
* >
275
- * > A1 : = A1 - V1*T**A1
279
+ * > A1_out : = A1_in - V1*T**A1_in
276
280
* >
277
- * > B1 : = - V2*T**A1
281
+ * > B1_out : = - V2*T**A1_in
278
282
* >
279
283
* > The computation for column block 2, which exists if N > K:
280
284
* >
281
- * > A2 : = A2 - T*( A2 + (V2**T)*B2 )
285
+ * > A2_out : = A2_in - T*( A2_in + (V2**T)*B2_in )
282
286
* >
283
- * > B2 : = B2 - V2*T*( A2 + (V2**T)*B2 )
287
+ * > B2_out : = B2_in - V2*T*( A2_in + (V2**T)*B2_in )
284
288
* >
285
- * > (2) Description of an Algorithmic Computation.
289
+ * > (2) Description of the Algorithmic Computation.
286
290
* >
287
291
* > In the first step, we compute column block 2, i.e. A2 and B2.
288
292
* > Here, we need to use the K-by-(N-K) rectangular workspace
@@ -409,7 +413,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
409
413
PARAMETER ( ONE = 1.0D+0 , ZERO = 0.0D+0 )
410
414
* ..
411
415
* .. Local Scalars ..
412
- LOGICAL LIDENT
416
+ LOGICAL LNOTIDENT
413
417
INTEGER I, J
414
418
* ..
415
419
* .. EXTERNAL FUNCTIONS ..
@@ -426,7 +430,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
426
430
IF ( M.LT. 0 .OR. N.LE. 0 .OR. K.EQ. 0 .OR. K.GT. N )
427
431
$ RETURN
428
432
*
429
- LIDENT = LSAME( IDENT, ' I' )
433
+ LNOTIDENT = .NOT. LSAME( IDENT, ' I' )
430
434
*
431
435
* ------------------------------------------------------------------
432
436
*
@@ -446,7 +450,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
446
450
CALL DCOPY( K, A( 1 , K+ J ), 1 , WORK( 1 , J ), 1 )
447
451
END DO
448
452
449
- IF ( .NOT. LIDENT ) THEN
453
+ IF ( LNOTIDENT ) THEN
450
454
*
451
455
* col2_(2) Compute W2: = (V1**T) * W2 = (A1**T) * W2,
452
456
* V1 is not an identy matrix, but unit lower-triangular
@@ -479,7 +483,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
479
483
$ WORK, LDWORK, ONE, B( 1 , K+1 ), LDB )
480
484
END IF
481
485
*
482
- IF ( .NOT. LIDENT ) THEN
486
+ IF ( LNOTIDENT ) THEN
483
487
*
484
488
* col2_(6) Compute W2: = V1 * W2 = A1 * W2,
485
489
* V1 is not an identity matrix, but unit lower-triangular,
@@ -526,7 +530,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
526
530
END DO
527
531
END DO
528
532
*
529
- IF ( .NOT. LIDENT ) THEN
533
+ IF ( LNOTIDENT ) THEN
530
534
*
531
535
* col1_(2) Compute W1: = (V1**T) * W1 = (A1**T) * W1,
532
536
* V1 is not an identity matrix, but unit lower-triangular
@@ -552,7 +556,7 @@ SUBROUTINE DLARFB_GETT( IDENT, M, N, K, T, LDT, A, LDA, B, LDB,
552
556
$ B, LDB )
553
557
END IF
554
558
*
555
- IF ( .NOT. LIDENT ) THEN
559
+ IF ( LNOTIDENT ) THEN
556
560
*
557
561
* col1_(5) Compute W1: = V1 * W1 = A1 * W1,
558
562
* V1 is not an identity matrix, but unit lower-triangular
0 commit comments