diff --git a/kwant/linalg/lapack.pyx b/kwant/linalg/lapack.pyx index e64ad281d3b6980d178453c2f2fb8d64deaf9ec4..18444ccba4e89fd03976fd03f91814877466bd67 100644 --- a/kwant/linalg/lapack.pyx +++ b/kwant/linalg/lapack.pyx @@ -873,6 +873,9 @@ def strsen(np.ndarray[l_logical] select, <float *>work.data, &lwork, <int *>iwork.data, &liwork, &info) + if info > 0: + raise LinAlgError("Reordering failed; problem is very ill-conditioned") + assert info == 0, "Argument error in strsen" if wi.nonzero()[0].size: @@ -927,6 +930,9 @@ def dtrsen(np.ndarray[l_logical] select, <double *>work.data, &lwork, <int *>iwork.data, &liwork, &info) + if info > 0: + raise LinAlgError("Reordering failed; problem is very ill-conditioned") + assert info == 0, "Argument error in dtrsen" if wi.nonzero()[0].size: @@ -976,6 +982,9 @@ def ctrsen(np.ndarray[l_logical] select, <float complex *>w.data, &M, NULL, NULL, <float complex *>work.data, &lwork, &info) + if info > 0: + raise LinAlgError("Reordering failed; problem is very ill-conditioned") + assert info == 0, "Argument error in ctrsen" return filter_args((True, Q is not None, calc_ev), (T, Q, w)) @@ -1020,6 +1029,9 @@ def ztrsen(np.ndarray[l_logical] select, <double complex *>w.data, &M, NULL, NULL, <double complex *>work.data, &lwork, &info) + if info > 0: + raise LinAlgError("Reordering failed; problem is very ill-conditioned") + assert info == 0, "Argument error in ztrsen" return filter_args((True, Q is not None, calc_ev), (T, Q, w))