From 52085e41d98bc4f26914642cdc41b7ae96e87b14 Mon Sep 17 00:00:00 2001 From: julian Date: Mon, 23 Sep 2024 09:34:20 +0200 Subject: [PATCH 1/9] aufgabenverteilung create preconditioner --- solver_util.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/solver_util.h b/solver_util.h index 0bba410..124be62 100644 --- a/solver_util.h +++ b/solver_util.h @@ -311,16 +311,16 @@ namespace Util { //TODO:Tim create sgs } else if(type == "egs"){ - // create egs + //TODO:Lukas } else if(type == "cgs"){ - // create cgs + //TODO:Myrto } else if(type == "ssc"){ //TODO:Duy create ssc } else if(type == "gmg"){ - // create gmg + //TODO: Julian } else if(type == "schur"){ //TODO:Duy create schur From 36f24a2eff9019ff5a47dd42aaef4e8660cb5c94 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Fri, 6 Dec 2024 09:10:01 +0100 Subject: [PATCH 2/9] Switch to CXX14. --- CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f7c53ff..43d205e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,15 @@ set(pluginName Util) set(SOURCES domain_util.cpp util_plugin.cpp) -set (CMAKE_CXX_STANDARD 17) +set (CMAKE_CXX_STANDARD 14) + +# Note: +# In C++ 17, std::unary_function has been removed. Unfortunately, UG4's boost is outdated... +# FYI Starting with 1.76.0 Configure boost: +# https://www.boost.org/doc/libs/1_76_0/libs/config/doc/html/boost_config/boost_macro_reference.html +# set (CMAKE_CXX_STANDARD 17) +# add_compile_definitions(BOOST_NO_CXX98_FUNCTION_BASE) + ################################################################################ # The code below doesn't have to be changed (usually) ################################################################################ From 6b9d74a922415decaf5ad73df4446e85a8d053a9 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Fri, 6 Dec 2024 09:12:28 +0100 Subject: [PATCH 3/9] Fixes for compatibility between UG_USE_JSON and UG_USE_PYBIND11. --- solver_util.h | 5 +++++ util_plugin.cpp | 52 +++++++++++++++++++++++++++---------------------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/solver_util.h b/solver_util.h index 124be62..218d053 100644 --- a/solver_util.h +++ b/solver_util.h @@ -5,6 +5,9 @@ #ifndef UG4_SOLVER_UTIL_H #define UG4_SOLVER_UTIL_H +#ifdef UG_USE_JSON + + #include #include "common/common.h" @@ -438,4 +441,6 @@ class SolverUtilFunctionProvider{ }; } //namespace util } //namespace ug + +#endif // UG_USE_JSON #endif //UG4_SOLVER_UTIL_H diff --git a/util_plugin.cpp b/util_plugin.cpp index 719726e..d5659bf 100644 --- a/util_plugin.cpp +++ b/util_plugin.cpp @@ -138,7 +138,7 @@ static void DomainAlgebra(TRegistry& reg, string grp) string suffix = GetDomainAlgebraSuffix(); string tag = GetDomainAlgebraTag(); - +#ifdef UG_USE_JSON { typedef SolverUtilFunctionProvider T; @@ -150,6 +150,7 @@ static void DomainAlgebra(TRegistry& reg, string grp) .set_construct_as_smart_pointer(true); reg.add_class_to_group(name, "SolverUtilFunctionProvider", tag); } +#endif /*{ // This is more complicated, as the return type should be included in name. std::string grpname = std::string("CreatePreconditioner"); @@ -163,6 +164,7 @@ static void DomainAlgebra(TRegistry& reg, string grp) // reg.add_function(grpname.append(suffix), // static_cast(*)(const std::string&, int, const std::vector &)> // (&CreateDomain), grpname); +#ifdef UG_USE_JSON { //typedef Domain domain_type; typedef SolverUtil T; @@ -173,6 +175,7 @@ static void DomainAlgebra(TRegistry& reg, string grp) .set_construct_as_smart_pointer(true); reg.add_class_to_group(name, "SolverUtil", tag); } +#endif } @@ -251,23 +254,26 @@ static void Dimension(TRegistry& reg, string grp) * @param reg registry * @param parentGroup group for sorting of functionality */ -template -static void Algebra(Registry& reg, string grp) +template +static void Algebra(TRegistry& reg, string grp) { -// useful defines + // useful defines string suffix = GetAlgebraSuffix(); string tag = GetAlgebraTag(); - typedef typename TAlgebra::vector_type vector_type; - { - // This is more complicated, as the return type should be included in name. - { - std::string grpname = std::string("CreateConvCheck"); - reg.add_function(grpname.append(suffix), - static_cast>(*)(nlohmann::json &)> - (&CreateConvCheck < TAlgebra > ), grpname); - } + typedef typename TAlgebra::vector_type vector_type; - } +#ifdef UG_USE_JSON + { + // This is more complicated, as the return type should be included in name. + { + std::string grpname = std::string("CreateConvCheck"); + reg.add_function(grpname.append(suffix), + static_cast>(*)(nlohmann::json &)> + (&CreateConvCheck < TAlgebra > ), grpname); + } + + } +#endif } @@ -296,7 +302,7 @@ static void Common(Registry& reg, string grp) template -void RegisterBridge_Util(TRegistry& reg, string grp) +void RegisterBridge_Util(TRegistry* reg, string grp) { grp.append("/Util"); typedef Util::Functionality Functionality; @@ -305,16 +311,16 @@ void RegisterBridge_Util(TRegistry& reg, string grp) #ifndef UG_USE_PYBIND11 //RegisterCommon(*reg,grp); //RegisterDimensionDependent(*reg,grp); - RegisterDomainAlgebraDependent(reg,grp); - RegisterDomainDependent(reg,grp); - RegisterAlgebraDependent(reg,grp); + RegisterDomainAlgebraDependent(*reg,grp); + RegisterDomainDependent(*reg,grp); + RegisterAlgebraDependent(*reg,grp); #else //RegisterCommon(*reg,grp); //RegisterDimensionDependent(*reg,grp); - RegisterDomainDependent(reg,grp); - RegisterAlgebraDependent(*reg,grp); - RegisterDomainAlgebraDependent(*reg,grp); + RegisterDomainDependent(*reg,grp); + RegisterAlgebraDependent(*reg,grp); + RegisterDomainAlgebraDependent(*reg,grp); #endif } @@ -328,7 +334,7 @@ void RegisterBridge_Util(TRegistry& reg, string grp) extern "C" void InitUGPlugin_Util(Registry* reg, string grp) { - RegisterBridge_Util(*reg, grp); + RegisterBridge_Util(reg, grp); } extern "C" UG_API void @@ -340,7 +346,7 @@ FinalizeUGPlugin_Util() namespace UtilBridge{ void InitUGPlugin(ug::pybind::Registry* reg, string grp) { - RegisterBridge_Util(*reg, grp); + RegisterBridge_Util(reg, grp); } } #endif From b9c4621a9a74610d8d1d8f1ac7b5e800fc824ec0 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Fri, 6 Dec 2024 10:13:41 +0100 Subject: [PATCH 4/9] Use namespace ug::Util --- util_plugin.cpp | 8 ++++---- util_plugin.h | 4 +--- util_plugin_pybind.cpp | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/util_plugin.cpp b/util_plugin.cpp index d5659bf..00bbe73 100644 --- a/util_plugin.cpp +++ b/util_plugin.cpp @@ -302,7 +302,7 @@ static void Common(Registry& reg, string grp) template -void RegisterBridge_Util(TRegistry* reg, string grp) +void RegisterBridge_Util_(TRegistry* reg, string grp) { grp.append("/Util"); typedef Util::Functionality Functionality; @@ -334,7 +334,7 @@ void RegisterBridge_Util(TRegistry* reg, string grp) extern "C" void InitUGPlugin_Util(Registry* reg, string grp) { - RegisterBridge_Util(reg, grp); + RegisterBridge_Util_(reg, grp); } extern "C" UG_API void @@ -343,10 +343,10 @@ FinalizeUGPlugin_Util() #ifdef UG_USE_PYBIND11 // Expose for pybind11. -namespace UtilBridge{ +namespace Util { void InitUGPlugin(ug::pybind::Registry* reg, string grp) { - RegisterBridge_Util(reg, grp); + RegisterBridge_Util_(reg, grp); } } #endif diff --git a/util_plugin.h b/util_plugin.h index b29da89..a377d37 100644 --- a/util_plugin.h +++ b/util_plugin.h @@ -13,12 +13,10 @@ extern "C" void FinalizeUGPlugin_Util(); #include "bindings/pybind/ug_pybind.h" namespace ug { -namespace bridge { -namespace UtilBridge{ +namespace Util{ void InitUGPlugin(ug::pybind::Registry* reg, std::string grp); } } -} #endif diff --git a/util_plugin_pybind.cpp b/util_plugin_pybind.cpp index 544feaa..6c13bb4 100644 --- a/util_plugin_pybind.cpp +++ b/util_plugin_pybind.cpp @@ -13,7 +13,7 @@ PYBIND11_MODULE(pyutil, m) ug::pybind::Registry registry(m); std::string name("Utilities"); - ug::bridge::UtilBridge::InitUGPlugin(®istry, name); + ug::Util::InitUGPlugin(®istry, name); } #endif From bc155f82e2287ac558fd77f38f545600f2b50637 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Tue, 13 May 2025 10:44:19 +0200 Subject: [PATCH 5/9] Disable minimum cmake version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43d205e..9dd6440 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ set (CMAKE_CXX_STANDARD 14) ################################################################################ # The code below doesn't have to be changed (usually) ################################################################################ -cmake_minimum_required(VERSION 2.6) +# cmake_minimum_required(VERSION 2.6) project(UG_PLUGIN_${pluginName}) From d49f7e7ff3b9351cad46b75828ff9c33debfb853 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Thu, 14 May 2026 16:29:43 +0200 Subject: [PATCH 6/9] Linkage fix. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9dd6440..7cedb58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,12 +82,12 @@ if(USE_PYBIND11) add_library(${pluginName} STATIC ${SOURCES}) SET(myPluginSources util_plugin_pybind.cpp) - # SET(myLibraries ug4 SuperLU6) + SET(myLibraries ${pluginName} ${targetLibraryName}) # targetLibraryName is either ug4 or ug4_s # First argument must match module name in PYBIND11_MODULE call python_add_library(pyutil MODULE ${myPluginSources} ${SOURCES} WITH_SOABI) # ug4pybind_add_module(pyutil ${myPluginSources} ${myLibraries}) - target_link_libraries (pyutil PRIVATE ${pluginName} ug4_s) + target_link_libraries (pyutil PRIVATE ${myLibraries}) set_target_properties(pyutil PROPERTIES INSTALL_RPATH "$ORIGIN/..:$ORIGIN/../../../lib") install(TARGETS pyutil LIBRARY DESTINATION ug4py COMPONENT pymodules) endif(USE_PYBIND11) From c091425529fb7fd347bfea5a35cfa139ecc6d899 Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Mon, 18 May 2026 16:48:10 +0200 Subject: [PATCH 7/9] Fixing linker path (for shared libs). --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cedb58..7cac7e1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,6 +88,10 @@ if(USE_PYBIND11) python_add_library(pyutil MODULE ${myPluginSources} ${SOURCES} WITH_SOABI) # ug4pybind_add_module(pyutil ${myPluginSources} ${myLibraries}) target_link_libraries (pyutil PRIVATE ${myLibraries}) - set_target_properties(pyutil PROPERTIES INSTALL_RPATH "$ORIGIN/..:$ORIGIN/../../../lib") + if(APPLE) + set_target_properties(pyutil PROPERTIES INSTALL_RPATH "@loader_path:@loader_path/../lib") + elseif(LINUX) + set_target_properties(pyutil PROPERTIES INSTALL_RPATH "$ORIGIN:$ORIGIN/../lib") + end() install(TARGETS pyutil LIBRARY DESTINATION ug4py COMPONENT pymodules) endif(USE_PYBIND11) From 2b6a54884f3d507ea9d6af14533672834ec3fc3a Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Mon, 18 May 2026 17:21:21 +0200 Subject: [PATCH 8/9] end() => endif() --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cac7e1..4998938 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,6 @@ if(USE_PYBIND11) set_target_properties(pyutil PROPERTIES INSTALL_RPATH "@loader_path:@loader_path/../lib") elseif(LINUX) set_target_properties(pyutil PROPERTIES INSTALL_RPATH "$ORIGIN:$ORIGIN/../lib") - end() + endif() install(TARGETS pyutil LIBRARY DESTINATION ug4py COMPONENT pymodules) endif(USE_PYBIND11) From 7b8c21afb09499893357b84e34c76c7690d2cefb Mon Sep 17 00:00:00 2001 From: Arne Naegel Date: Tue, 19 May 2026 08:16:33 +0200 Subject: [PATCH 9/9] RPATH update --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4998938..b7671cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,8 +89,10 @@ if(USE_PYBIND11) # ug4pybind_add_module(pyutil ${myPluginSources} ${myLibraries}) target_link_libraries (pyutil PRIVATE ${myLibraries}) if(APPLE) - set_target_properties(pyutil PROPERTIES INSTALL_RPATH "@loader_path:@loader_path/../lib") - elseif(LINUX) + set_target_properties(pyutil PROPERTIES + INSTALL_RPATH "@loader_path;@loader_path/../lib" + BUILD_WITH_INSTALL_RPATH TRUE) + elseif(LINUX AND NOT APPLE) set_target_properties(pyutil PROPERTIES INSTALL_RPATH "$ORIGIN:$ORIGIN/../lib") endif() install(TARGETS pyutil LIBRARY DESTINATION ug4py COMPONENT pymodules)