Skip to content

Multishift QZ with AED #421

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 50 commits into from
Apr 15, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c21d77d
add double precision QZ code
thijssteel May 20, 2020
8ce4a70
remove some extra subroutines
thijssteel May 20, 2020
7b0afdf
some more cleanup
thijssteel May 21, 2020
49d9be2
add the new QZ solver to dggev3
thijssteel May 22, 2020
701a890
also add the files to cmake, not only make
thijssteel May 22, 2020
81211e4
attempt to improve code coverage
thijssteel May 22, 2020
9f3c00c
attempt to fix coverage (again)
thijssteel May 22, 2020
a6e2f3e
use ilaenv, better errors and sweet sweet recusion
thijssteel May 23, 2020
03fe5c4
add new files to cmake list
thijssteel May 23, 2020
433a5b5
fix dumb mistake
thijssteel May 23, 2020
ffef71f
fix the tests
thijssteel May 24, 2020
4a26b58
kapot
thijssteel May 27, 2020
2d276d9
fix a few bugs
thijssteel May 28, 2020
1034f10
update deflation criterium in AED to reflect dlaqr3
thijssteel May 28, 2020
e310909
change the parameters a little to increase coverage
thijssteel May 28, 2020
b7e5cfa
some small fixes
thijssteel May 29, 2020
4f7bee6
some more improvements
thijssteel May 31, 2020
a7c0cbd
some formatting + solve overflow in dlaqz2
thijssteel Jun 25, 2020
df064ff
remove dlaqz3
thijssteel Jun 25, 2020
3acfdcf
add single precision implementation
thijssteel Jun 26, 2020
a40095f
fix makefile for single precision
thijssteel Jun 26, 2020
a1b3ff0
add complex implementation
thijssteel Jun 30, 2020
0f687d8
add single precision implementation
thijssteel Jun 30, 2020
4e81cd8
experiment with recursion in zlaqz0
thijssteel Jun 30, 2020
e055cc1
Better recursion and formatting
thijssteel Jun 30, 2020
cc8cc4a
bug fixes
thijssteel Jun 30, 2020
cfeaf17
some linting
thijssteel Jul 3, 2020
20e8b88
fix bug in bulge chase
thijssteel Jul 3, 2020
2804480
add recursion level
thijssteel Jul 3, 2020
328db71
fix makefile
thijssteel Jul 4, 2020
ce08176
add xlaqz0 to schur form drivers
thijssteel Jul 5, 2020
f503700
some style updates and comments
thijssteel Jul 7, 2020
868da61
improve deflation criterion in xhgeqz
thijssteel Jul 7, 2020
c8da8d5
update the formatting a little and add a recursive keyword to some of…
thijssteel Nov 10, 2020
e683b55
replace some nan checks with the relevant helper function (avoids com…
thijssteel Nov 10, 2020
b19715e
some small fixes
thijssteel Nov 12, 2020
e29a36b
update the parameters
thijssteel Nov 16, 2020
9e18f6b
fix intent in xlaqz1
thijssteel Jan 5, 2021
eb8f726
Revert "update the parameters"
thijssteel Jan 7, 2021
ffd75e8
remove unused variables
thijssteel Feb 10, 2021
37efac8
update the comments a little
thijssteel Feb 14, 2021
6166577
small indentation fix
thijssteel Feb 15, 2021
e9d5504
add declarations for external routines in QZ code
thijssteel Feb 15, 2021
6811c56
sort shifts to avoid splitting imaginary double shift
thijssteel Mar 3, 2021
93fd62f
Revert "improve deflation criterion in xhgeqz"
thijssteel Mar 4, 2021
9c5165c
Updates DGGEV to use @thijssteel's new routine DGLAQZ0, and DGGHD3 in…
weslleyspereira Mar 12, 2021
6c434e7
Fix bugs; Modifies remaining xGGEV routines; Improve LWORK computation
weslleyspereira Mar 15, 2021
77a97c4
Merge pull request #1 from weslleyspereira/try-dggev-with-multishift-aed
thijssteel Mar 17, 2021
0b8015e
fix error exit tests
thijssteel Mar 18, 2021
3bbb3e8
Revert "Merge pull request #1 from weslleyspereira/try-dggev-with-mul…
weslleyspereira Mar 31, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions SRC/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ set(SLASRC
sggglm.f sgghrd.f sgghd3.f sgglse.f sggqrf.f
sggrqf.f sggsvd3.f sggsvp3.f sgtcon.f sgtrfs.f sgtsv.f
sgtsvx.f sgttrf.f sgttrs.f sgtts2.f shgeqz.f
slaqz0.f slaqz1.f slaqz2.f slaqz3.f slaqz4.f
shsein.f shseqr.f slabrd.f slacon.f slacn2.f
slaein.f slaexc.f slag2.f slags2.f slagtm.f slagv2.f slahqr.f
slahr2.f slaic1.f slaln2.f slals0.f slalsa.f slalsd.f
Expand Down Expand Up @@ -193,6 +194,7 @@ set(CLASRC
chesv_aa.f chetrf_aa.f chetrs_aa.f
chesv_aa_2stage.f chetrf_aa_2stage.f chetrs_aa_2stage.f
chgeqz.f chpcon.f chpev.f chpevd.f
claqz0.f claqz1.f claqz2.f claqz3.f
chpevx.f chpgst.f chpgv.f chpgvd.f chpgvx.f chprfs.f chpsv.f
chpsvx.f
chptrd.f chptrf.f chptri.f chptrs.f chsein.f chseqr.f clabrd.f
Expand Down Expand Up @@ -283,6 +285,7 @@ set(DLASRC
dggglm.f dgghrd.f dgghd3.f dgglse.f dggqrf.f
dggrqf.f dggsvd3.f dggsvp3.f dgtcon.f dgtrfs.f dgtsv.f
dgtsvx.f dgttrf.f dgttrs.f dgtts2.f dhgeqz.f
dlaqz0.f dlaqz1.f dlaqz2.f dlaqz3.f dlaqz4.f
dhsein.f dhseqr.f dlabrd.f dlacon.f dlacn2.f
dlaein.f dlaexc.f dlag2.f dlags2.f dlagtm.f dlagv2.f dlahqr.f
dlahr2.f dlaic1.f dlaln2.f dlals0.f dlalsa.f dlalsd.f
Expand Down Expand Up @@ -386,6 +389,7 @@ set(ZLASRC
zhesv_aa.f zhetrf_aa.f zhetrs_aa.f
zhesv_aa_2stage.f zhetrf_aa_2stage.f zhetrs_aa_2stage.f
zhgeqz.f zhpcon.f zhpev.f zhpevd.f
zlaqz0.f zlaqz1.f zlaqz2.f zlaqz3.f
zhpevx.f zhpgst.f zhpgv.f zhpgvd.f zhpgvx.f zhprfs.f zhpsv.f
zhpsvx.f
zhptrd.f zhptrf.f zhptri.f zhptrs.f zhsein.f zhseqr.f zlabrd.f
Expand Down
4 changes: 4 additions & 0 deletions SRC/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ SLASRC = \
sggglm.o sgghrd.o sgghd3.o sgglse.o sggqrf.o \
sggrqf.o sggsvd3.o sggsvp3.o sgtcon.o sgtrfs.o sgtsv.o \
sgtsvx.o sgttrf.o sgttrs.o sgtts2.o shgeqz.o \
slaqz0.o slaqz1.o slaqz2.o slaqz3.o slaqz4.o \
shsein.o shseqr.o slabrd.o slacon.o slacn2.o \
slaein.o slaexc.o slag2.o slags2.o slagtm.o slagv2.o slahqr.o \
slahr2.o slaic1.o slaln2.o slals0.o slalsa.o slalsd.o \
Expand Down Expand Up @@ -223,6 +224,7 @@ CLASRC = \
chesv_aa.o chetrf_aa.o chetrs_aa.o clahef_aa.o \
chesv_aa_2stage.o chetrf_aa_2stage.o chetrs_aa_2stage.o \
chgeqz.o chpcon.o chpev.o chpevd.o \
claqz0.o claqz1.o claqz2.o claqz3.o \
chpevx.o chpgst.o chpgv.o chpgvd.o chpgvx.o chprfs.o chpsv.o \
chpsvx.o \
chptrd.o chptrf.o chptri.o chptrs.o chsein.o chseqr.o clabrd.o \
Expand Down Expand Up @@ -317,6 +319,7 @@ DLASRC = \
dggglm.o dgghrd.o dgghd3.o dgglse.o dggqrf.o \
dggrqf.o dggsvd3.o dggsvp3.o dgtcon.o dgtrfs.o dgtsv.o \
dgtsvx.o dgttrf.o dgttrs.o dgtts2.o dhgeqz.o \
dlaqz0.o dlaqz1.o dlaqz2.o dlaqz3.o dlaqz4.o \
dhsein.o dhseqr.o dlabrd.o dlacon.o dlacn2.o \
dlaein.o dlaexc.o dlag2.o dlags2.o dlagtm.o dlagv2.o dlahqr.o \
dlahr2.o dlaic1.o dlaln2.o dlals0.o dlalsa.o dlalsd.o \
Expand Down Expand Up @@ -423,6 +426,7 @@ ZLASRC = \
zhesv_aa.o zhetrf_aa.o zhetrs_aa.o zlahef_aa.o \
zhesv_aa_2stage.o zhetrf_aa_2stage.o zhetrs_aa_2stage.o \
zhgeqz.o zhpcon.o zhpev.o zhpevd.o \
zlaqz0.o zlaqz1.o zlaqz2.o zlaqz3.o \
zhpevx.o zhpgst.o zhpgv.o zhpgvd.o zhpgvx.o zhprfs.o zhpsv.o \
zhpsvx.o \
zhptrd.o zhptrf.o zhptri.o zhptrs.o zhsein.o zhseqr.o zlabrd.o \
Expand Down
12 changes: 6 additions & 6 deletions SRC/cgges3.f
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@
*> The QZ iteration failed. (A,B) are not in Schur
*> form, but ALPHA(j) and BETA(j) should be correct for
*> j=INFO+1,...,N.
*> > N: =N+1: other than QZ iteration failed in CHGEQZ
*> > N: =N+1: other than QZ iteration failed in CLAQZ0
*> =N+2: after reordering, roundoff changed values of
*> some complex eigenvalues so that leading
*> eigenvalues in the Generalized Schur form no
Expand Down Expand Up @@ -312,7 +312,7 @@ SUBROUTINE CGGES3( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B,
REAL DIF( 2 )
* ..
* .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHD3, CHGEQZ, CLACPY,
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHD3, CLAQZ0, CLACPY,
$ CLASCL, CLASET, CTGSEN, CUNGQR, CUNMQR, SLABAD,
$ XERBLA
* ..
Expand Down Expand Up @@ -392,9 +392,9 @@ SUBROUTINE CGGES3( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B,
CALL CGGHD3( JOBVSL, JOBVSR, N, 1, N, A, LDA, B, LDB, VSL,
$ LDVSL, VSR, LDVSR, WORK, -1, IERR )
LWKOPT = MAX( LWKOPT, N + INT ( WORK( 1 ) ) )
CALL CHGEQZ( 'S', JOBVSL, JOBVSR, N, 1, N, A, LDA, B, LDB,
CALL CLAQZ0( 'S', JOBVSL, JOBVSR, N, 1, N, A, LDA, B, LDB,
$ ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK, -1,
$ RWORK, IERR )
$ RWORK, 0, IERR )
LWKOPT = MAX( LWKOPT, INT ( WORK( 1 ) ) )
IF( WANTST ) THEN
CALL CTGSEN( 0, ILVSL, ILVSR, BWORK, N, A, LDA, B, LDB,
Expand Down Expand Up @@ -509,9 +509,9 @@ SUBROUTINE CGGES3( JOBVSL, JOBVSR, SORT, SELCTG, N, A, LDA, B,
* Perform QZ algorithm, computing Schur vectors if desired
*
IWRK = ITAU
CALL CHGEQZ( 'S', JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB,
CALL CLAQZ0( 'S', JOBVSL, JOBVSR, N, ILO, IHI, A, LDA, B, LDB,
$ ALPHA, BETA, VSL, LDVSL, VSR, LDVSR, WORK( IWRK ),
$ LWORK+1-IWRK, RWORK( IRWRK ), IERR )
$ LWORK+1-IWRK, RWORK( IRWRK ), 0, IERR )
IF( IERR.NE.0 ) THEN
IF( IERR.GT.0 .AND. IERR.LE.N ) THEN
INFO = IERR
Expand Down
14 changes: 7 additions & 7 deletions SRC/cggev3.f
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ SUBROUTINE CGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA,
LOGICAL LDUMMA( 1 )
* ..
* .. External Subroutines ..
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHD3, CHGEQZ, CLACPY,
EXTERNAL CGEQRF, CGGBAK, CGGBAL, CGGHD3, CLAQZ0, CLACPY,
$ CLASCL, CLASET, CTGEVC, CUNGQR, CUNMQR, SLABAD,
$ XERBLA
* ..
Expand Down Expand Up @@ -338,17 +338,17 @@ SUBROUTINE CGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA,
CALL CGGHD3( JOBVL, JOBVR, N, 1, N, A, LDA, B, LDB, VL,
$ LDVL, VR, LDVR, WORK, -1, IERR )
LWKOPT = MAX( LWKOPT, N+INT( WORK( 1 ) ) )
CALL CHGEQZ( 'S', JOBVL, JOBVR, N, 1, N, A, LDA, B, LDB,
CALL CLAQZ0( 'S', JOBVL, JOBVR, N, 1, N, A, LDA, B, LDB,
$ ALPHA, BETA, VL, LDVL, VR, LDVR, WORK, -1,
$ RWORK, IERR )
$ RWORK, 0, IERR )
LWKOPT = MAX( LWKOPT, N+INT( WORK( 1 ) ) )
ELSE
CALL CGGHD3( 'N', 'N', N, 1, N, A, LDA, B, LDB, VL, LDVL,
$ VR, LDVR, WORK, -1, IERR )
LWKOPT = MAX( LWKOPT, N+INT( WORK( 1 ) ) )
CALL CHGEQZ( 'E', JOBVL, JOBVR, N, 1, N, A, LDA, B, LDB,
CALL CLAQZ0( 'E', JOBVL, JOBVR, N, 1, N, A, LDA, B, LDB,
$ ALPHA, BETA, VL, LDVL, VR, LDVR, WORK, -1,
$ RWORK, IERR )
$ RWORK, 0, IERR )
LWKOPT = MAX( LWKOPT, N+INT( WORK( 1 ) ) )
END IF
WORK( 1 ) = CMPLX( LWKOPT )
Expand Down Expand Up @@ -471,9 +471,9 @@ SUBROUTINE CGGEV3( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHA, BETA,
ELSE
CHTEMP = 'E'
END IF
CALL CHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB,
CALL CLAQZ0( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB,
$ ALPHA, BETA, VL, LDVL, VR, LDVR, WORK( IWRK ),
$ LWORK+1-IWRK, RWORK( IRWRK ), IERR )
$ LWORK+1-IWRK, RWORK( IRWRK ), 0, IERR )
IF( IERR.NE.0 ) THEN
IF( IERR.GT.0 .AND. IERR.LE.N ) THEN
INFO = IERR
Expand Down
Loading