diff --git a/cmake/packages/FindMUMPS.cmake b/cmake/packages/FindMUMPS.cmake index 91e743c..cd28900 100644 --- a/cmake/packages/FindMUMPS.cmake +++ b/cmake/packages/FindMUMPS.cmake @@ -255,17 +255,20 @@ if(MUMPS_FOUND AND NOT TARGET mumps) set_property(TARGET mumps APPEND PROPERTY INTERFACE_LINK_LIBRARIES "ptesmumps") - add_library(scalapack UNKNOWN IMPORTED) - set_target_properties(scalapack PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${SCALAPACK_LIBRARY}") - - set_property(TARGET mumps APPEND PROPERTY - INTERFACE_LINK_LIBRARIES "scalapack") - #if(TARGET mkl) - # set_property(TARGET mumps APPEND PROPERTY - # INTERFACE_LINK_LIBRARIES "mkl") - #endif() + if(TARGET mkl) + set_property(TARGET mumps APPEND PROPERTY + INTERFACE_LINK_LIBRARIES "mkl") + else() + add_library(scalapack UNKNOWN IMPORTED) + set_target_properties(scalapack PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${SCALAPACK_LIBRARY}") + + + set_property(TARGET mumps APPEND PROPERTY + INTERFACE_LINK_LIBRARIES "scalapack") + endif() + add_library(gfortran UNKNOWN IMPORTED) set_target_properties(gfortran PROPERTIES diff --git a/modules/external_packages/src/alien/kernels/petsc/CMakeLists.txt b/modules/external_packages/src/alien/kernels/petsc/CMakeLists.txt index 91064ec..0b9d8aa 100644 --- a/modules/external_packages/src/alien/kernels/petsc/CMakeLists.txt +++ b/modules/external_packages/src/alien/kernels/petsc/CMakeLists.txt @@ -120,6 +120,24 @@ ) endif (TARGET superlu) + if (TARGET mumps) + if(USE_AXLSTAR) + generateAxl(alien_external_packages + linear_solver/mumps/PETScSolverConfigMUMPS.axl + linear_solver/mumps/PETScPrecConfigMUMPS.axl + AXL_OPTION_GENERATION_MODE ${AXL_OPTION_GENERATION_TYPE} + NAMESPACE ${NAMESPACE_TYPE} + ${IS_WITH_ARCANE} + ${IS_WITH_MESH} + INSTALL_GENERATED_FILES + ) + endif() + addSources(alien_external_packages + linear_solver/mumps/PETScSolverConfigMUMPSService.cc + linear_solver/mumps/PETScPrecConfigMUMPSService.cc + ) + endif (TARGET mumps) + if (TARGET superlu) linkLibraries(alien_external_packages superlu) endif () @@ -128,6 +146,10 @@ linkLibraries(alien_external_packages superludist) endif () + if (TARGET mumps) + linkLibraries(alien_external_packages mumps) + endif () + if (TARGET metis) linkLibraries(alien_external_packages metis) endif () diff --git a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.cc b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.cc index 3c57c1a..207d583 100644 --- a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.cc +++ b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.cc @@ -2,7 +2,7 @@ * Generated by createNew */ -#include +#include #include /* Pour debugger le ILU, utiliser l'option: @@ -30,9 +30,9 @@ PETScPrecConfigMUMPSService::PETScPrecConfigMUMPSService( #endif PETScPrecConfigMUMPSService::PETScPrecConfigMUMPSService( - IParallelMng* parallel_mng, std::shared_ptr options) + Arccore::MessagePassing::IMessagePassingMng* parallel_mng, std::shared_ptr options) : ArcanePETScPrecConfigMUMPSObject(options) -, PETScConfig(parallel_mng->isParallel()) +, PETScConfig(parallel_mng->commSize() > 1) { ; } diff --git a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.h b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.h index a769e9e..877975c 100644 --- a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.h +++ b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScPrecConfigMUMPSService.h @@ -41,7 +41,7 @@ class ALIEN_EXTERNAL_PACKAGES_EXPORT PETScPrecConfigMUMPSService #endif PETScPrecConfigMUMPSService( - IParallelMng* parallel_mng, std::shared_ptr options); + Arccore::MessagePassing::IMessagePassingMng* parallel_mng, std::shared_ptr options); /** Destructeur de la classe */ virtual ~PETScPrecConfigMUMPSService() {} diff --git a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.cc b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.cc index 55d614a..9473e32 100644 --- a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.cc +++ b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.cc @@ -2,7 +2,7 @@ * Generated by createNew */ -#include +#include #include /*---------------------------------------------------------------------------*/ @@ -21,9 +21,9 @@ PETScSolverConfigMUMPSService::PETScSolverConfigMUMPSService( } #endif PETScSolverConfigMUMPSService::PETScSolverConfigMUMPSService( - IParallelMng* parallel_mng, std::shared_ptr options) + Arccore::MessagePassing::IMessagePassingMng* parallel_mng, std::shared_ptr options) : ArcanePETScSolverConfigMUMPSObject(options) -, PETScConfig(parallel_mng->isParallel()) +, PETScConfig(parallel_mng->commSize() > 1) { } diff --git a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.h b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.h index 185f717..144cb89 100644 --- a/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.h +++ b/modules/external_packages/src/alien/kernels/petsc/linear_solver/mumps/PETScSolverConfigMUMPSService.h @@ -27,7 +27,7 @@ class PETScSolverConfigMUMPSService : public ArcanePETScSolverConfigMUMPSObject, /** Constructeur de la classe */ PETScSolverConfigMUMPSService(const Arcane::ServiceBuildInfo& sbi); - PETScSolverConfigMUMPSService(IParallelMng* parallel_mng, + PETScSolverConfigMUMPSService(Arccore::MessagePassing::IMessagePassingMng* parallel_mng, std::shared_ptr options); /** Destructeur de la classe */ diff --git a/test/Tests/RefSemantic/block/CMakeLists.txt b/test/Tests/RefSemantic/block/CMakeLists.txt index 3e102ca..f8ede83 100644 --- a/test/Tests/RefSemantic/block/CMakeLists.txt +++ b/test/Tests/RefSemantic/block/CMakeLists.txt @@ -120,6 +120,20 @@ foreach (REFMVTESTS --solver-package=petsc --solver=lu ) + + if (TARGET mumps) + alien_test( + BENCH refmvhandlers.block + NAME ${REFMVTESTS}.petsc.mumps + PROCS 4 + COMMAND refmvhandlers.Block${REFMVTESTS} + OPTIONS + --size=100 + --solver-package=petsc + --solver=mumps + ) + endif () + endif () if (TARGET hypre) diff --git a/test/Tests/RefSemantic/scalar/CMakeLists.txt b/test/Tests/RefSemantic/scalar/CMakeLists.txt index 6e50bdd..205c379 100644 --- a/test/Tests/RefSemantic/scalar/CMakeLists.txt +++ b/test/Tests/RefSemantic/scalar/CMakeLists.txt @@ -287,6 +287,20 @@ foreach (REFMVTESTS --solver-package=petsc --solver=lu ) + + if (TARGET mumps) + alien_test( + BENCH refmvhandlers.scalar + NAME ${REFMVTESTS}.petsc.mumps + PROCS 4 + COMMAND refmvhandlers.Scalar${REFMVTESTS} + OPTIONS + --size=100 + --solver-package=petsc + --solver=mumps + ) + endif () + endif (TARGET petsc) if (TARGET hypre) diff --git a/test/Tests/Solver.h b/test/Tests/Solver.h index 4d57f81..ebb2154 100644 --- a/test/Tests/Solver.h +++ b/test/Tests/Solver.h @@ -40,6 +40,10 @@ #include #include #include + +#include +#include + // root linear solver instance #include #include @@ -120,7 +124,18 @@ createSolver(boost::program_options::variables_map& vm) // root petsc service return std::make_shared(pm, root_options); } + if (solver.compare("mumps") == 0) { + // solver service mumps + auto options_solver = std::make_shared(); + // root petsc option + auto root_options = std::make_shared( + PETScLinearSolverOptionsNames::_solver = + std::make_shared(pm, options_solver)); + // root petsc service + return std::make_shared(pm, root_options); + } tm->fatal() << "*** solver " << solver << " not available in test!"; + #else tm->fatal() << "*** package " << solver_package << " not available!"; #endif