8484* > \param[in] INCV
8585* > \verbatim
8686* > INCV is INTEGER
87- * > The increment between elements of v. INCV < > 0.
87+ * > The increment between elements of v. INCV > 0.
8888* > \endverbatim
8989* >
9090* > \param[in] TAU
@@ -149,7 +149,7 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
149149* ..
150150* .. Local Scalars ..
151151 LOGICAL APPLYLEFT
152- INTEGER I, LASTV, LASTC
152+ INTEGER I, J, LASTV, LASTC, FIRSTV
153153* ..
154154* .. External Subroutines ..
155155 EXTERNAL CGEMV, CGERC, CSCAL
@@ -165,7 +165,7 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
165165* .. Executable Statements ..
166166*
167167 APPLYLEFT = LSAME( SIDE, ' L' )
168- LASTV = 1
168+ FIRSTV = 1
169169 LASTC = 0
170170 IF ( TAU.NE. ZERO ) THEN
171171! 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 )
175175 ELSE
176176 LASTV = N
177177 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
183179! 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
187183 END DO
188184 IF ( APPLYLEFT ) THEN
189185! 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 )
200196*
201197* Form H * C
202198*
203- IF ( LASTV.EQ. 1 ) THEN
199+ IF ( LASTV.EQ. FIRSTV ) THEN
204200*
205- * C(1 ,1:lastc) := ( 1 - tau ) * C(1 ,1:lastc)
201+ * C(lastv ,1:lastc) := ( 1 - tau ) * C(lastv ,1:lastc)
206202*
207- CALL CSCAL( LASTC, ONE - TAU, C, LDC )
203+ CALL CSCAL( LASTC, ONE - TAU, C( LASTV, 1 ) , LDC )
208204 ELSE
209205*
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)
211207*
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 )
214211*
215212* w(1:lastc,1) += C(lastv,1:lastc)**H * v(lastv,1)
216213*
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 ) )
219216 END DO
220217*
221218* C(lastv,1:lastc) += - tau * v(lastv,1) * w(1:lastc,1)**H
222219*
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 ) )
226223 END DO
227224*
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
229226*
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)
232229 END IF
233230 ELSE
234231*
235232* Form C * H
236233*
237- IF ( LASTV.EQ. 1 ) THEN
234+ IF ( LASTV.EQ. FIRSTV ) THEN
238235*
239- * C(1:lastc,1 ) := ( 1 - tau ) * C(1:lastc,1 )
236+ * C(1:lastc,lastv ) := ( 1 - tau ) * C(1:lastc,lastv )
240237*
241- CALL CSCAL( LASTC, ONE - TAU, C, 1 )
238+ CALL CSCAL( LASTC, ONE - TAU, C( 1 , LASTV ) , 1 )
242239 ELSE
243240*
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)
245242*
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 )
248246*
249247* w(1:lastc,1) += C(1:lastc,lastv) * v(lastv,1)
250248*
@@ -254,10 +252,10 @@ SUBROUTINE CLARF1L( SIDE, M, N, V, INCV, TAU, C, LDC, WORK )
254252*
255253 CALL CAXPY( LASTC, - TAU, WORK, 1 , C( 1 , LASTV ), 1 )
256254*
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
258256*
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 )
261259 END IF
262260 END IF
263261 RETURN
0 commit comments