OGS
readMeshFromFile.cpp
Go to the documentation of this file.
1
14#include "readMeshFromFile.h"
15
16#ifdef USE_PETSC
17#include <petsc.h>
18#endif
19
20#include <boost/algorithm/string/erase.hpp>
21
22#include "BaseLib/FileTools.h"
23#include "BaseLib/Logging.h"
24#include "BaseLib/StringTools.h"
27#include "MeshLib/Mesh.h"
28
29#ifdef USE_PETSC
32#endif
33
34namespace
35{
36MeshLib::Mesh* readMeshFromFileSerial(const std::string& file_name,
37 bool const compute_element_neighbors)
38{
39 if (BaseLib::hasFileExtension(".msh", file_name))
40 {
42 return meshIO.loadMeshFromFile(file_name);
43 }
44
45 if (BaseLib::hasFileExtension(".vtu", file_name))
46 {
48 file_name, compute_element_neighbors);
49 }
50
51 if (BaseLib::hasFileExtension(".vtk", file_name))
52 {
54 file_name, compute_element_neighbors);
55 }
56
57 ERR("readMeshFromFile(): Unknown mesh file format in file {:s}.",
58 file_name);
59 return nullptr;
60}
61} // namespace
62
63namespace MeshLib
64{
65namespace IO
66{
67MeshLib::Mesh* readMeshFromFile(const std::string& file_name,
68 bool const compute_element_neighbors)
69{
70#ifdef USE_PETSC
71 int mpi_init;
72 MPI_Initialized(&mpi_init);
73 if (mpi_init == 1)
74 {
75 int world_size;
76 MPI_Comm_size(MPI_COMM_WORLD, &world_size);
77 if (world_size > 1)
78 {
79 MeshLib::IO::NodePartitionedMeshReader read_pmesh(MPI_COMM_WORLD);
80 const std::string file_name_base =
82 return read_pmesh.read(file_name_base);
83 }
84 if (world_size == 1)
85 {
86 std::unique_ptr<Mesh> mesh{
87 readMeshFromFileSerial(file_name, compute_element_neighbors)};
88
89 if (!mesh)
90 {
91 return nullptr;
92 }
93
94 return new MeshLib::NodePartitionedMesh(*mesh);
95 }
96 return nullptr;
97 }
98#endif
99 return readMeshFromFileSerial(file_name, compute_element_neighbors);
100}
101
102} // end namespace IO
103} // end namespace MeshLib
Filename manipulation routines.
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:45
Definition of the MeshIO class.
Definition of the Mesh class.
Declare a class to read node-wise partitioned mesh with MPI functions.
Definition of mesh class for partitioned mesh (by node) for parallel computing within the framework o...
Definition of string helper functions.
Implementation of the VtuInterface class.
Interface for handling mesh files from OGS-5 and below. (*.msh files)
Definition MeshIO.h:37
MeshLib::Mesh * loadMeshFromFile(const std::string &file_name)
Read mesh from file.
Definition MeshIO.cpp:278
MeshLib::NodePartitionedMesh * read(const std::string &file_name_base)
Create a NodePartitionedMesh object, read data to it, and return a pointer to it. Data files are in b...
static MeshLib::Mesh * readVTUFile(std::string const &file_name, bool const compute_element_neighbors=false)
static MeshLib::Mesh * readVTKFile(std::string const &file_name, bool const compute_element_neighbors=false)
std::string dropFileExtension(std::string const &filename)
bool hasFileExtension(std::string const &extension, std::string const &filename)
MeshLib::Mesh * readMeshFromFile(const std::string &file_name, bool const compute_element_neighbors)
MeshLib::Mesh * readMeshFromFileSerial(const std::string &file_name, bool const compute_element_neighbors)
Definition of readMeshFromFile function.