84
84
* > \param[in] INCV
85
85
* > \verbatim
86
86
* > INCV is INTEGER
87
- * > The increment between elements of v. INCV < > 0.
87
+ * > The increment between elements of v. INCV > 0.
88
88
* > \endverbatim
89
89
* >
90
90
* > \param[in] TAU
@@ -149,7 +149,7 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
149
149
* ..
150
150
* .. Local Scalars ..
151
151
LOGICAL APPLYLEFT
152
- INTEGER I, LASTV, LASTC
152
+ INTEGER I, J, LASTV, LASTC, FIRSTV
153
153
* ..
154
154
* .. External Subroutines ..
155
155
EXTERNAL CGEMV, CGERC, CSCAL
@@ -165,7 +165,7 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
165
165
* .. Executable Statements ..
166
166
*
167
167
APPLYLEFT = LSAME( SIDE, ' L' )
168
- LASTV = 1
168
+ FIRSTV = 1
169
169
LASTC = 0
170
170
IF ( TAU.NE. ZERO ) THEN
171
171
! Set up variables for scanning V. LASTV begins pointing to the end
@@ -175,15 +175,11 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
175
175
ELSE
176
176
LASTV = N
177
177
END IF
178
- IF ( INCV.GT. 0 ) THEN
179
- I = 1 + (LASTV-1 ) * INCV
180
- ELSE
181
- I = 1
182
- END IF
178
+ I = 1
183
179
! Look for the last non- zero row in V.
184
- DO WHILE ( LASTV.GT. 1 .AND. V( I ).EQ. ZERO )
185
- LASTV = LASTV - 1
186
- I = I - INCV
180
+ DO WHILE ( LASTV.GT. FIRSTV .AND. V( I ).EQ. ZERO )
181
+ FIRSTV = FIRSTV + 1
182
+ I = I + INCV
187
183
END DO
188
184
IF ( APPLYLEFT ) THEN
189
185
! Scan for the last non- zero column in C(1 :lastv,:).
@@ -200,51 +196,53 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
200
196
*
201
197
* Form H * C
202
198
*
203
- IF ( LASTV.EQ. 1 ) THEN
199
+ IF ( LASTV.EQ. FIRSTV ) THEN
204
200
*
205
- * C(1 ,1:lastc) := ( 1 - tau ) * C(1 ,1:lastc)
201
+ * C(lastv ,1:lastc) := ( 1 - tau ) * C(lastv ,1:lastc)
206
202
*
207
- CALL CSCAL( LASTC, ONE - TAU, C, LDC )
203
+ CALL CSCAL( LASTC, ONE - TAU, C( LASTV, 1 ) , LDC )
208
204
ELSE
209
205
*
210
- * w(1:lastc,1) := C(1 :lastv-1,1:lastc)**T * v(1 :lastv-1,1)
206
+ * w(1:lastc,1) := C(firstv :lastv-1,1:lastc)**T * v(firstv :lastv-1,1)
211
207
*
212
- CALL CGEMV( ' Conjugate transpose' , LASTV - 1 , LASTC,
213
- $ ONE, C, LDC, V, INCV, ZERO, WORK, 1 )
208
+ CALL CGEMV( ' Conjugate transpose' , LASTV - FIRSTV, LASTC,
209
+ $ ONE, C( FIRSTV, 1 ), LDC, V( I ), INCV, ZERO,
210
+ $ WORK, 1 )
214
211
*
215
212
* w(1:lastc,1) += C(lastv,1:lastc)**H * v(lastv,1)
216
213
*
217
- DO I = 1 , LASTC
218
- WORK( I ) = WORK( I ) + CONJG ( C( LASTV, I ) )
214
+ DO J = 1 , LASTC
215
+ WORK( J ) = WORK( J ) + CONJG ( C( LASTV, J ) )
219
216
END DO
220
217
*
221
218
* C(lastv,1:lastc) += - tau * v(lastv,1) * w(1:lastc,1)**H
222
219
*
223
- DO I = 1 , LASTC
224
- C( LASTV, I ) = C( LASTV, I )
225
- $ - TAU * CONJG ( WORK( I ) )
220
+ DO J = 1 , LASTC
221
+ C( LASTV, J ) = C( LASTV, J )
222
+ $ - TAU * CONJG ( WORK( J ) )
226
223
END DO
227
224
*
228
- * C(1 :lastv-1,1:lastc) += - tau * v(1 :lastv-1,1) * w(1:lastc,1)**H
225
+ * C(firstv :lastv-1,1:lastc) += - tau * v(firstv :lastv-1,1) * w(1:lastc,1)**H
229
226
*
230
- CALL CGERC( LASTV - 1 , LASTC, - TAU, V, INCV, WORK, 1 , C ,
231
- $ LDC)
227
+ CALL CGERC( LASTV - FIRSTV , LASTC, - TAU, V( I ), INCV ,
228
+ $ WORK, 1 , C( FIRSTV, 1 ), LDC)
232
229
END IF
233
230
ELSE
234
231
*
235
232
* Form C * H
236
233
*
237
- IF ( LASTV.EQ. 1 ) THEN
234
+ IF ( LASTV.EQ. FIRSTV ) THEN
238
235
*
239
- * C(1:lastc,1 ) := ( 1 - tau ) * C(1:lastc,1 )
236
+ * C(1:lastc,lastv ) := ( 1 - tau ) * C(1:lastc,lastv )
240
237
*
241
- CALL CSCAL( LASTC, ONE - TAU, C, 1 )
238
+ CALL CSCAL( LASTC, ONE - TAU, C( 1 , LASTV ) , 1 )
242
239
ELSE
243
240
*
244
- * w(1:lastc,1) := C(1:lastc,1 :lastv-1) * v(1 :lastv-1,1)
241
+ * w(1:lastc,1) := C(1:lastc,firstv :lastv-1) * v(firstv :lastv-1,1)
245
242
*
246
- CALL CGEMV( ' No transpose' , LASTC, LASTV - 1 , ONE, C,
247
- $ LDC, V, INCV, ZERO, WORK, 1 )
243
+ CALL CGEMV( ' No transpose' , LASTC, LASTV - FIRSTV, ONE,
244
+ $ C( 1 , FIRSTV ), LDC, V( I ), INCV, ZERO,
245
+ $ WORK, 1 )
248
246
*
249
247
* w(1:lastc,1) += C(1:lastc,lastv) * v(lastv,1)
250
248
*
@@ -254,10 +252,10 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
254
252
*
255
253
CALL CAXPY( LASTC, - TAU, WORK, 1 , C( 1 , LASTV ), 1 )
256
254
*
257
- * C(1:lastc,1 :lastv-1) += - tau * w(1:lastc,1) * v(1 :lastv-1)**H
255
+ * C(1:lastc,firstv :lastv-1) += - tau * w(1:lastc,1) * v(firstv :lastv-1)**H
258
256
*
259
- CALL CGERC( LASTC, LASTV - 1 , - TAU, WORK, 1 , V,
260
- $ INCV, C, LDC )
257
+ CALL CGERC( LASTC, LASTV - FIRSTV , - TAU, WORK, 1 , V( I ) ,
258
+ $ INCV, C( 1 , FIRSTV ) , LDC )
261
259
END IF
262
260
END IF
263
261
RETURN
0 commit comments