inline lapack_int lu_factor(lapack_int m, T a[], lapack_int ipiv[], GETRF getrf) { lapack_int info = 0; getrf(&m, &m, a, &m, ipiv, &info); shift_ipiv_down(m, 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); auto info = getrs(LAPACK_COL_MAJOR, 'N', n, nrhs, a, n, ipiv, b, n); shift_ipiv_down(n, ipiv); return info; }
inline MKL_INT lu_factor(MKL_INT m, T a[], MKL_INT ipiv[], GETRF getrf) { MKL_INT info = 0; getrf(&m, &m, a, &m, ipiv, &info); shift_ipiv_down(m, 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_factor(MKL_INT m, T a[], MKL_INT ipiv[], void (*getrf)(const MKL_INT*, const MKL_INT*, T*, const MKL_INT*, MKL_INT*, MKL_INT*)) { std::complex<double> x = 5; MKL_INT info = 0; getrf(&m, &m, a, &m, ipiv, &info); shift_ipiv_down(m, 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; }
inline lapack_int lu_factor(lapack_int m, T a[], lapack_int ipiv[], GETRF getrf) { auto info = getrf(LAPACK_COL_MAJOR, m, m, a, m, ipiv); shift_ipiv_down(m, ipiv); return info; }