diff --git a/CMakeLists.txt b/CMakeLists.txt index 691c365c..78e1bb93 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -328,11 +328,15 @@ endif() # Accelerate solver (Include before Eigen) if(POLYSOLVE_WITH_ACCELERATE) - set(BLA_VENDOR Apple) - find_package(BLAS REQUIRED) - find_package(LAPACK REQUIRED) - target_link_libraries(polysolve_linear PRIVATE BLAS::BLAS LAPACK::LAPACK) - target_compile_definitions(polysolve_linear PUBLIC POLYSOLVE_WITH_ACCELERATE) + if(POLYSOLVE_LARGE_INDEX) + message(STATUS "POLYSOLVE_LARGE_INDEX is ON: disabling Apple Accelerate (it only supports 32-bit sparse indices).") + else() + set(BLA_VENDOR Apple) + find_package(BLAS REQUIRED) + find_package(LAPACK REQUIRED) + target_link_libraries(polysolve_linear PRIVATE BLAS::BLAS LAPACK::LAPACK) + target_compile_definitions(polysolve_linear PUBLIC POLYSOLVE_WITH_ACCELERATE) + endif() endif() include(eigen) diff --git a/src/polysolve/linear/Solver.cpp b/src/polysolve/linear/Solver.cpp index b327f057..9bb5070c 100644 --- a/src/polysolve/linear/Solver.cpp +++ b/src/polysolve/linear/Solver.cpp @@ -45,8 +45,12 @@ namespace polysolve::linear #include #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX +// Eigen's PardisoSupport only specializes for int/long long indices, not the +// std::ptrdiff_t (long) StiffnessMatrix used with POLYSOLVE_LARGE_INDEX. #include #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO #include "Pardiso.hpp" #endif @@ -377,6 +381,7 @@ namespace polysolve::linear RETURN_DIRECT_SOLVER_PTR(SPQR, "Eigen::SPQR"); #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX } else if (solver == "Eigen::PardisoLLT") { @@ -390,6 +395,7 @@ namespace polysolve::linear { RETURN_DIRECT_SOLVER_PTR(PardisoLU, "Eigen::PardisoLU"); #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO } else if (solver == "Pardiso") @@ -551,10 +557,12 @@ namespace polysolve::linear "Eigen::SPQR", #endif #ifdef POLYSOLVE_WITH_MKL +#ifndef POLYSOLVE_LARGE_INDEX "Eigen::PardisoLLT", "Eigen::PardisoLDLT", "Eigen::PardisoLU", #endif +#endif #ifdef POLYSOLVE_WITH_PARDISO "Pardiso", #endif