55* Online html documentation available at
66* http://www.netlib.org/lapack/explore-html/
77*
8- * > \htmlonly
98* > Download SGGEV3 + dependencies
109* > <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/sggev3.f">
1110* > [TGZ]</a>
1211* > <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/sggev3.f">
1312* > [ZIP]</a>
1413* > <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/sggev3.f">
1514* > [TXT]</a>
16- * > \endhtmlonly
1715*
1816* Definition:
1917* ===========
225223 SUBROUTINE SGGEV3 ( JOBVL , JOBVR , N , A , LDA , B , LDB , ALPHAR ,
226224 $ ALPHAI , BETA , VL , LDVL , VR , LDVR , WORK , LWORK ,
227225 $ INFO )
226+ IMPLICIT NONE
228227*
229228* -- LAPACK driver routine --
230229* -- LAPACK is a software package provided by Univ. of Tennessee, --
@@ -259,13 +258,16 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
259258 LOGICAL LDUMMA( 1 )
260259* ..
261260* .. External Subroutines ..
262- EXTERNAL SGEQRF, SGGBAK, SGGBAL, SGGHD3, SLAQZ0, SLACPY,
263- $ SLASCL, SLASET, SORGQR, SORMQR, STGEVC
261+ EXTERNAL SGEQRF, SGGBAK, SGGBAL,
262+ $ SGGHD3, SLAQZ0, SLACPY,
263+ $ SLASCL, SLASET, SORGQR,
264+ $ SORMQR, STGEVC
264265* ..
265266* .. External Functions ..
266267 LOGICAL LSAME
267268 REAL SLAMCH, SLANGE, SROUNDUP_LWORK
268- EXTERNAL LSAME, SLAMCH, SLANGE, SROUNDUP_LWORK
269+ EXTERNAL LSAME, SLAMCH, SLANGE,
270+ $ SROUNDUP_LWORK
269271* ..
270272* .. Intrinsic Functions ..
271273 INTRINSIC ABS, MAX, SQRT
@@ -327,18 +329,23 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
327329 LWKOPT = MAX ( LWKMIN, 3 * N+ INT ( WORK( 1 ) ) )
328330 CALL SORMQR( ' L' , ' T' , N, N, N, B, LDB, WORK, A, LDA, WORK,
329331 $ - 1 , IERR )
330- LWKOPT = MAX ( LWKOPT, 3 * N+ INT ( WORK( 1 ) ) )
331- CALL SGGHD3( JOBVL, JOBVR, N, 1 , N, A, LDA, B, LDB, VL, LDVL,
332- $ VR, LDVR, WORK, - 1 , IERR )
333332 LWKOPT = MAX ( LWKOPT, 3 * N+ INT ( WORK( 1 ) ) )
334333 IF ( ILVL ) THEN
335334 CALL SORGQR( N, N, N, VL, LDVL, WORK, WORK, - 1 , IERR )
336335 LWKOPT = MAX ( LWKOPT, 3 * N+ INT ( WORK( 1 ) ) )
336+ END IF
337+ IF ( ILV ) THEN
338+ CALL SGGHD3( JOBVL, JOBVR, N, 1 , N, A, LDA, B, LDB, VL,
339+ $ LDVL, VR, LDVR, WORK, - 1 , IERR )
340+ LWKOPT = MAX ( LWKOPT, 3 * N+ INT ( WORK( 1 ) ) )
337341 CALL SLAQZ0( ' S' , JOBVL, JOBVR, N, 1 , N, A, LDA, B, LDB,
338342 $ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR,
339343 $ WORK, - 1 , 0 , IERR )
340344 LWKOPT = MAX ( LWKOPT, 2 * N+ INT ( WORK( 1 ) ) )
341345 ELSE
346+ CALL SGGHD3( ' N' , ' N' , N, 1 , N, A, LDA, B, LDB, VL, LDVL,
347+ $ VR, LDVR, WORK, - 1 , IERR )
348+ LWKOPT = MAX ( LWKOPT, 3 * N+ INT ( WORK( 1 ) ) )
342349 CALL SLAQZ0( ' E' , JOBVL, JOBVR, N, 1 , N, A, LDA, B, LDB,
343350 $ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR,
344351 $ WORK, - 1 , 0 , IERR )
@@ -431,7 +438,8 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
431438 IF ( ILVL ) THEN
432439 CALL SLASET( ' Full' , N, N, ZERO, ONE, VL, LDVL )
433440 IF ( IROWS.GT. 1 ) THEN
434- CALL SLACPY( ' L' , IROWS-1 , IROWS-1 , B( ILO+1 , ILO ), LDB,
441+ CALL SLACPY( ' L' , IROWS-1 , IROWS-1 ,
442+ $ B( ILO+1 , ILO ), LDB,
435443 $ VL( ILO+1 , ILO ), LDVL )
436444 END IF
437445 CALL SORGQR( IROWS, IROWS, IROWS, VL( ILO, ILO ), LDVL,
@@ -449,11 +457,16 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
449457*
450458* Eigenvectors requested -- work on whole matrix.
451459*
452- CALL SGGHD3( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL,
453- $ LDVL, VR, LDVR, WORK( IWRK ), LWORK+1 - IWRK, IERR )
460+ CALL SGGHD3( JOBVL, JOBVR, N, ILO, IHI,
461+ $ A, LDA,
462+ $ B, LDB, VL,
463+ $ LDVL, VR, LDVR,
464+ $ WORK( IWRK ), LWORK+1 - IWRK, IERR )
454465 ELSE
455- CALL SGGHD3( ' N' , ' N' , IROWS, 1 , IROWS, A( ILO, ILO ), LDA,
456- $ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR,
466+ CALL SGGHD3( ' N' , ' N' , IROWS, 1 , IROWS,
467+ $ A( ILO, ILO ), LDA,
468+ $ B( ILO, ILO ), LDB, VL,
469+ $ LDVL, VR, LDVR,
457470 $ WORK( IWRK ), LWORK+1 - IWRK, IERR )
458471 END IF
459472*
@@ -492,7 +505,8 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
492505 ELSE
493506 CHTEMP = ' R'
494507 END IF
495- CALL STGEVC( CHTEMP, ' B' , LDUMMA, N, A, LDA, B, LDB, VL, LDVL,
508+ CALL STGEVC( CHTEMP, ' B' , LDUMMA, N, A, LDA, B, LDB, VL,
509+ $ LDVL,
496510 $ VR, LDVR, N, IN , WORK( IWRK ), IERR )
497511 IF ( IERR.NE. 0 ) THEN
498512 INFO = N + 2
@@ -575,8 +589,10 @@ SUBROUTINE SGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR,
575589 110 CONTINUE
576590*
577591 IF ( ILASCL ) THEN
578- CALL SLASCL( ' G' , 0 , 0 , ANRMTO, ANRM, N, 1 , ALPHAR, N, IERR )
579- CALL SLASCL( ' G' , 0 , 0 , ANRMTO, ANRM, N, 1 , ALPHAI, N, IERR )
592+ CALL SLASCL( ' G' , 0 , 0 , ANRMTO, ANRM, N, 1 , ALPHAR, N,
593+ $ IERR )
594+ CALL SLASCL( ' G' , 0 , 0 , ANRMTO, ANRM, N, 1 , ALPHAI, N,
595+ $ IERR )
580596 END IF
581597*
582598 IF ( ILBSCL ) THEN
0 commit comments