diff --git a/include/openmc/settings.h b/include/openmc/settings.h index ce2e7b10a..e873e3d3e 100644 --- a/include/openmc/settings.h +++ b/include/openmc/settings.h @@ -29,6 +29,7 @@ namespace settings { #ifdef LIBMESH extern std::unique_ptr LMI; +extern libMesh::Parallel::Communicator* libmesh_comm; #endif // Boolean flags diff --git a/src/initialize.cpp b/src/initialize.cpp index fcb6d98b1..7ec7ab0f5 100644 --- a/src/initialize.cpp +++ b/src/initialize.cpp @@ -68,7 +68,11 @@ int openmc_init(int argc, char* argv[], const void* intracomm) #endif // initialize libmesh -if (!settings::LMI) settings::LMI = std::make_unique(argc, argv, n_threads); +if (!settings::LMI && !libMesh::initialized()) +{ + settings::LMI = std::make_unique(argc, argv, n_threads); + settings::libmesh_comm = &(settings::LMI->comm()); +} #endif diff --git a/src/mesh.cpp b/src/mesh.cpp index 72abb6d16..7306d40f0 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -2190,10 +2190,11 @@ LibMesh::centroid(int bin) const { std::string LibMesh::library() const { return "libmesh"; } void LibMesh::initialize() { - // always 3 for unstructured meshes + // always 3 for unstructured meshes n_dimension_ = 3; - m_ = std::unique_ptr(new libMesh::Mesh(settings::LMI->comm(), 3)); + m_ = std::make_unique(*settings::libmesh_comm, 3); + m_->read(filename_); m_->prepare_for_use(); diff --git a/src/settings.cpp b/src/settings.cpp index 3326f0029..4a2b3432d 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -39,6 +39,7 @@ namespace settings { #ifdef LIBMESH std::unique_ptr LMI; +libMesh::Parallel::Communicator* libmesh_comm; #endif // Default values for boolean flags