Dear all,
I have a question regarding the PARDISO matrix type used in CompMajor.
As I understand the paper, the CM Hessian is guaranteed to be positive semidefinite. However, the implementation configures PARDISO with mtype = 2, i.e. real symmetric positive definite. On some meshes I consistently get PARDISO error -4 during numerical factorization, for example:
./build/CompMajor_bin ./armadillo_cut.obj ./out.obj 1 (armadillo_cut.zip)
Changing only pardiso.set_type(2, true); to pardiso.set_type(-2, true); makes the factorization succeed. Is mtype = 2 intentional?
I am running on Linux with Intel oneMKL. To build the project, I only slightly modified the CMake configuration to use:
cmake_minimum_required(VERSION 3.26)
project(CompMajor)
# Option to enable PARDISO
option(USE_PARDISO "Use Intel MKL PARDISO solver" ON)
# Set libigl paths
set(LIBIGL_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libigl/include)
set(LIBIGL_EXTERNAL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libigl/external)
# Add Eigen include directory
include_directories(
${LIBIGL_INCLUDE_DIR}
${LIBIGL_EXTERNAL_DIR}/eigen
)
# Enable math defines for Windows
if(WIN32)
add_definitions(-D_USE_MATH_DEFINES)
endif()
option(LIBIGL_WITH_OPENGL "Use OpenGL" OFF)
# Your source files
set(SRCFILES
src/Energy.cpp
src/EnergySymDir.cpp
src/Newton.cpp
src/Solver.cpp
src/Utils.cpp
src/main_cmd.cpp
src/PardisoSolver.cpp
)
# set(MKL_ARCH "intel64")
# set(MKL_LINK "static")
# set(MKL_THREADING "sequential")
# find_package(MKL REQUIRED)
find_package(MKL CONFIG REQUIRED PATHS $ENV{MKLROOT})
# set(BLA_VENDOR Intel10_64_dyn)
# find_package(BLAS REQUIRED)
# Create executable
add_executable(${PROJECT_NAME}_bin ${SRCFILES})
# Set C++11 standard
set_target_properties(${PROJECT_NAME}_bin PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
)
IF(USE_PARDISO)
message("Use PARDISO")
set(SRCFILES ${SRCFILES} src/PardisoSolver.cpp)
ENDIF()
target_link_libraries(${PROJECT_NAME}_bin PUBLIC MKL::MKL)
# target_link_libraries(${PROJECT_NAME}_bin PUBLIC BLAS::BLAS)
while otherwise keeping the original code unchanged.
Thanks!
Dear all,
I have a question regarding the PARDISO matrix type used in CompMajor.
As I understand the paper, the CM Hessian is guaranteed to be positive semidefinite. However, the implementation configures PARDISO with
mtype = 2, i.e. real symmetric positive definite. On some meshes I consistently get PARDISO error -4 during numerical factorization, for example:./build/CompMajor_bin ./armadillo_cut.obj ./out.obj 1(armadillo_cut.zip)Changing only
pardiso.set_type(2, true);topardiso.set_type(-2, true);makes the factorization succeed. Ismtype = 2intentional?I am running on Linux with Intel oneMKL. To build the project, I only slightly modified the CMake configuration to use:
while otherwise keeping the original code unchanged.
Thanks!