inline lapack_int lu_solve_factored(lapack_int n, lapack_int nrhs, T a[], lapack_int ipiv[], T b[], GETRS getrs) { shift_ipiv_up(n, ipiv); auto info = getrs(LAPACK_COL_MAJOR, 'N', n, nrhs, a, n, ipiv, b, n); shift_ipiv_down(n, ipiv); return info; }
inline lapack_int lu_inverse_factored(lapack_int n, T a[], lapack_int ipiv[], GETRI getri) { shift_ipiv_up(n, ipiv); auto info = getri(LAPACK_COL_MAJOR, n, a, n, ipiv); shift_ipiv_down(n, ipiv); return info; }
inline lapack_int lu_inverse_factored(lapack_int n, T a[], lapack_int ipiv[], T work[], lapack_int lwork, GETRI getri) { shift_ipiv_up(n, ipiv); lapack_int info = 0; getri(&n, a, &n, ipiv, work, &lwork, &info); shift_ipiv_down(n, ipiv); return info; }
inline MKL_INT lu_inverse_factored(MKL_INT n, T a[], MKL_INT ipiv[], T work[], MKL_INT lwork, GETRI getri) { shift_ipiv_up(n, ipiv); MKL_INT info = 0; getri(&n, a, &n, ipiv, work, &lwork, &info); shift_ipiv_down(n, ipiv); return info; }
inline lapack_int lu_solve_factored(lapack_int n, lapack_int nrhs, T a[], lapack_int ipiv[], T b[], GETRS getrs) { shift_ipiv_up(n, ipiv); lapack_int info = 0; char trans ='N'; getrs(&trans, &n, &nrhs, a, &n, ipiv, b, &n, &info); shift_ipiv_down(n, ipiv); return info; }
inline MKL_INT lu_solve_factored(MKL_INT n, MKL_INT nrhs, T a[], MKL_INT ipiv[], T b[], GETRS getrs) { shift_ipiv_up(n, ipiv); MKL_INT info = 0; char trans ='N'; getrs(&trans, &n, &nrhs, a, &n, ipiv, b, &n, &info); shift_ipiv_down(n, ipiv); return info; }
inline MKL_INT lu_inverse_factored(MKL_INT n, T a[], MKL_INT ipiv[], T work[], MKL_INT lwork, void (*getri)(const MKL_INT*, T*, const MKL_INT*, const MKL_INT*, T*, const MKL_INT*, MKL_INT*)) { shift_ipiv_up(n, ipiv); MKL_INT info = 0; getri(&n, a, &n, ipiv, work, &lwork, &info); shift_ipiv_down(n, ipiv); return info; }
inline MKL_INT lu_solve_factored(MKL_INT n, MKL_INT nrhs, T a[], MKL_INT ipiv[], T b[], void (*getrs)(const char*, const MKL_INT*, const MKL_INT*, const T*, const MKL_INT*, const MKL_INT*, T*, const MKL_INT*, MKL_INT*)) { shift_ipiv_up(n, ipiv); MKL_INT info = 0; char trans ='N'; getrs(&trans, &n, &nrhs, a, &n, ipiv, b, &n, &info); shift_ipiv_down(n, ipiv); return info; }