Repository navigation
Conversation
Port of Reference-LAPACK PR OpenMathLib#1424. DSTEBR and SSTEBR compute all eigenvalues of a real symmetric tridiagonal matrix with a values-only divide-and-conquer method. Only the first and last boundary rows of each local eigenvector block are propagated across merge levels, so no *LAEDA-style full-block store/replay is needed. The workspace is O(N): LWORK >= MAX(16*N, 2*N + SMLSIZ**2 + 2*SMLSIZ - 2) and LIWORK >= 7*N for N > SMLSIZ; blocks with N <= SMLSIZ fall back to *STERF. DSTEBR and SSTEBR are new routines and do not change the behavior of *STEDC or *STERF. New public routines: DSTEBR, SSTEBR. Private helpers: *LAED0_BR, *LAED4_BR, *LAED7_BR/*LAED8_BR, *LAED9_BR. LAPACKE gains LAPACKE_dstebr, LAPACKE_sstebr and their _work variants. DCHKST and SCHKST gain test (38), varying SMLSIZ to exercise merges.
Collaborator
|
Thanks - adding new LAPACK routines here entails producing C versions of them for the Androids and Fortran haters that walk among us. I plan to import the latest LAPACK changes soon |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds two new public routines,
DSTEBRandSSTEBR, that compute alleigenvalues of a real symmetric tridiagonal matrix with a values-only
divide-and-conquer method. This is a port of the routines accepted in
Reference-LAPACK PR #1424.
Only the first and last boundary rows of each local eigenvector block are
propagated across merge levels, instead of storing complete secular
eigenvector blocks for
*LAEDA-style replay. The workspace is therefore O(N):LWORK >= MAX(16*N, 2*N + SMLSIZ**2 + 2*SMLSIZ - 2),LIWORK >= 7*NforN > SMLSIZN <= SMLSIZfall back to*STERFDSTEBR/SSTEBRare new routines and do not change the behavior of*STEDCor
*STERF.New files
lapack-netlib/SRC/dstebr.f,sstebr.flapack-netlib/SRC/dlaed0_br.f/slaed0_br.f(also define*LAED0_MERGE_PAIR,*STEQR_BOUNDARY_BR)lapack-netlib/SRC/dlaed4_br.f/slaed4_br.flapack-netlib/SRC/dlaed7_br.f/slaed7_br.f(also define*LAED8_BR)lapack-netlib/SRC/dlaed9_br.f/slaed9_br.flapack-netlib/LAPACKE/src/lapacke_dstebr.c,lapacke_dstebr_work.c,lapacke_sstebr.c,lapacke_sstebr_work.cUpdated files
lapack-netlib/SRC/Makefile,lapack-netlib/SRC/CMakeLists.txt,cmake/lapack.cmakelapack-netlib/TESTING/EIG/dchkst.f,schkst.f: test (38),| D1 - D5 | / ( |D1| ulp )with D1 from*STEQR('V'), varying SMLSIZover 2, 8, 25 so merges run even with the small sizes in
sep.inlapack-netlib/LAPACKE/include/lapack.h,lapacke.h,LAPACKE/src/Makefile,LAPACKE/src/CMakeLists.txtexports/gensymbol: exportdstebr/sstebrand the LAPACKE wrappersTesting
DSTERFandDSTEDC('N'): 0 failures.SSTERF: max difference 1.8e-6.LAPACKE_dstebr/LAPACKE_sstebrcalled from C: values match.-fimplicit-none -fcheck=alland with-fdefault-integer-8 -Werror=conversion.Compatibility
No existing public interface changes, and no change to
*STEDCor*STERFbehavior.