diff --git a/MathLib/CMakeLists.txt b/MathLib/CMakeLists.txt index 47b12d73e5b7f08e55261e5f249fc17bfe6c2e5e..bf640b887abedb211dfcf22c823f7264f1fba27c 100644 --- a/MathLib/CMakeLists.txt +++ b/MathLib/CMakeLists.txt @@ -65,10 +65,12 @@ set_target_properties(MathLib PROPERTIES LINKER_LANGUAGE CXX) target_link_libraries(MathLib AssemblerLib - sundials_cvode - sundials_nvecserial ) +if (CVODE_FOUND) + target_link_libraries(MathLib ${CVODE_LIBRARIES}) +endif() + if(METIS_FOUND) target_link_libraries(MathLib ${METIS_LIBRARIES}) endif() diff --git a/MathLib/ODE/CVodeSolver.cpp b/MathLib/ODE/CVodeSolver.cpp index 5e4c584b3123ee5e930fa278f46e5eb1d734aa02..5217b904c389ed20cfd19d84d7426e8108373796 100644 --- a/MathLib/ODE/CVodeSolver.cpp +++ b/MathLib/ODE/CVodeSolver.cpp @@ -6,7 +6,9 @@ * http://www.opengeosys.org/project/license * */ - + +#ifdef CVODE_FOUND + #include "CVodeSolver.h" #include <cassert> @@ -346,3 +348,5 @@ double CVodeSolver::getTime() const CVodeSolver::~CVodeSolver() = default; } // namespace MathLib + +#endif // CVODE_FOUND diff --git a/MathLib/ODE/ConcreteOdeSolver.h b/MathLib/ODE/ConcreteOdeSolver.h index 891f7bafd9d3d813a2e656a55fd481950f015fd0..af5a69bc8834f07c3be08e591eb6a4a7b2347aa0 100644 --- a/MathLib/ODE/ConcreteOdeSolver.h +++ b/MathLib/ODE/ConcreteOdeSolver.h @@ -17,7 +17,9 @@ #include "OdeSolver.h" #include "Handles.h" +#ifdef CVODE_FOUND #include "CVodeSolver.h" +#endif namespace MathLib { @@ -117,9 +119,13 @@ template <unsigned NumEquations, typename... FunctionArguments> std::unique_ptr<OdeSolver<NumEquations, FunctionArguments...>> createOdeSolver( BaseLib::ConfigTree const& config) { +#ifdef CVODE_FOUND return std::unique_ptr<OdeSolver<NumEquations, FunctionArguments...>>( new ConcreteOdeSolver<NumEquations, CVodeSolver, FunctionArguments...>( config)); +#else + return nullptr; +#endif // CVODE_FOUND } } // namespace MathLib diff --git a/Tests/MathLib/TestCVode.cpp b/Tests/MathLib/TestCVode.cpp index 46f6ac01022651a19ae30a6254cb2dc8473abdce..16be0e062e8e9665c0d5b0b6b1c0d998bd4bf5be 100644 --- a/Tests/MathLib/TestCVode.cpp +++ b/Tests/MathLib/TestCVode.cpp @@ -7,6 +7,8 @@ * */ +#ifdef CVODE_FOUND + #include <gtest/gtest.h> #include "MathLib/ODE/CVodeSolver.h" @@ -235,3 +237,5 @@ TEST(MathLibCVodeTest, ExponentialWithJacobianNewton) // std::printf("time: %g\n", time_reached); } } + +#endif // CVODE_FOUND diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 7bd6def3dba1d2639582dbd0ba22dc45699ae2ef..84d163bdf6d2695f7b34232def9002c375b72c20 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -149,3 +149,6 @@ endif() ## Sundials cvode ode-solver library find_package(CVODE) +if(CVODE_FOUND) + add_definitions(-DCVODE_FOUND) +endif() # CVODE_FOUND diff --git a/scripts/cmake/cmake/FindCVODE.cmake b/scripts/cmake/cmake/FindCVODE.cmake index 2d6f3ea01af990d69f51abf88d195442af6cc32d..78d4b50965400c75d07848a46eac42d83e288067 100644 --- a/scripts/cmake/cmake/FindCVODE.cmake +++ b/scripts/cmake/cmake/FindCVODE.cmake @@ -20,15 +20,26 @@ find_path(CVODE_INCLUDE_DIRS sundials_types.h PATH_SUFFIXES include include/sundials ) -find_library(CVODE_LIBRARIES +find_library(CVODE_LIBRARY NAMES sundials_cvode ENV CVODE_ROOT PATH_SUFFIXES lib Lib ) +find_library(CVODE_NVECSERIAL + NAMES sundials_nvecserial + ENV CVODE_ROOT + PATH_SUFFIXES lib Lib +) + find_package_handle_standard_args(CVODE DEFAULT_MSG - CVODE_LIBRARIES + CVODE_LIBRARY + CVODE_NVECSERIAL CVODE_INCLUDE_DIRS ) -mark_as_advanced(CVODE_INCLUDE_DIRS CVODE_LIBRARIES) +if(CVODE_FOUND) + set(CVODE_LIBRARIES sundials_cvode sundials_nvecserial) +endif() + +mark_as_advanced(CVODE_INCLUDE_DIRS CVODE_LIBRARY CVODE_NVECSERIAL)