28 char help[] =
"ogs6 with PETSc \n";
30 PetscInitialize(&argc, &argv,
nullptr, help);
31 MPI_Comm_set_errhandler(PETSC_COMM_WORLD, MPI_ERRORS_RETURN);
46struct LinearSolverLibrarySetupLis final
49 LinearSolverLibrarySetupLis(
int argc,
char* argv[])
51 lis_initialize(&argc, &argv);
54 ~LinearSolverLibrarySetupLis()
65struct LinearSolverLibrarySetupEigen final
66 :
public ApplicationsLib::LinearSolverLibrarySetup
68 LinearSolverLibrarySetupEigen(
int ,
char* [])
71 const char* omp_num_threads_env = std::getenv(
"OMP_NUM_THREADS");
72 if (omp_num_threads_env)
74 INFO(
"OMP_NUM_THREADS is set to: {:s}", omp_num_threads_env);
78 WARN(
"OMP_NUM_THREADS is not set, falling back to: {:d}",
79 omp_get_max_threads());
82 INFO(
"Eigen use {:d} threads", Eigen::nbThreads());
84 ~LinearSolverLibrarySetupEigen()
override
97 DBUG(
"Tearing down linear solver library setup.");
101 int argc,
char* argv[])
103 static std::weak_ptr<LinearSolverLibrarySetup> instance;
104 static std::mutex mutex;
107 std::lock_guard lock{mutex};
109 std::shared_ptr lsls = instance.lock();
113 DBUG(
"Initializing linear solver library for the first time");
115 std::make_shared<detail::LinearSolverLibrarySetupImpl>(argc, argv);
124 DBUG(
"Initializing linear solver library for the {}th time",
126#if defined(USE_PETSC) || defined(USE_LIS)
131 "Reusing a LinearSolverLibrarySetup has not been defined for "
132 "PETSc or LIS. In the present build configuration you cannot run "
133 "two separate OGS simulations in the same process.");
143 assert(!instance.owner_before(lsls) && !lsls.owner_before(instance));
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
LinearSolverLibrarySetupPETSc LinearSolverLibrarySetupImpl
void cleanupGlobalMatrixProviders()
OGS_EXPORT_SYMBOL static std::shared_ptr< LinearSolverLibrarySetup > create(int argc, char *argv[])
virtual ~LinearSolverLibrarySetup()
LinearSolverLibrarySetupPETSc(int argc, char *argv[])
~LinearSolverLibrarySetupPETSc()