OGS
BinaryToPVTU.cpp
Go to the documentation of this file.
1
13#include <mpi.h>
14#include <spdlog/spdlog.h>
15#include <tclap/CmdLine.h>
16#include <vtkMPIController.h>
17#include <vtkSmartPointer.h>
18
19#include "BaseLib/CPUTime.h"
20#include "BaseLib/FileTools.h"
21#include "BaseLib/RunTime.h"
22#include "InfoLib/GitInfo.h"
26
27int main(int argc, char* argv[])
28{
29 TCLAP::CmdLine cmd(
30 "Reads the binary mesh format and writes the data as vtus/pvtu.\n"
31 "OpenGeoSys-6 software, version " +
33 ".\n"
34 "Copyright (c) 2012-2024, OpenGeoSys Community "
35 "(http://www.opengeosys.org)",
37 TCLAP::ValueArg<std::string> mesh_input(
38 "i", "mesh-input-file-base",
39 "the base name of the files containing the input mesh, i.e., the file "
40 "name without the string beginning with '_partitioned' and ending with "
41 "'.bin'",
42 true, "", "base_file_name_of_input_mesh");
43 cmd.add(mesh_input);
44
45 TCLAP::ValueArg<std::string> output_directory_arg(
46 "o", "output",
47 "output directory name and output base file name without extensions",
48 true, "", "directory/base_file_name_without_extensions");
49 cmd.add(output_directory_arg);
50
51 TCLAP::ValueArg<std::string> log_level_arg(
52 "l", "log-level",
53 "the verbosity of logging messages: none, error, warn, info, debug, "
54 "all",
55 false,
56#ifdef NDEBUG
57 "info",
58#else
59 "all",
60#endif
61 "LOG_LEVEL");
62 cmd.add(log_level_arg);
63
64 cmd.parse(argc, argv);
65
66 BaseLib::setConsoleLogLevel(log_level_arg.getValue());
67 spdlog::set_pattern("%^%l:%$ %v");
68 spdlog::set_error_handler(
69 [](const std::string& msg)
70 {
71 std::cerr << "spdlog error: " << msg << std::endl;
72 OGS_FATAL("spdlog logger error occurred.");
73 });
74
75 // init MPI
76 MPI_Init(&argc, &argv);
77
78 // start the timer
79 BaseLib::RunTime run_timer;
80 run_timer.start();
81 BaseLib::CPUTime CPU_timer;
82 CPU_timer.start();
83
84 // add mpi_rank to logger output
85 int mpi_rank;
86 MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
87 spdlog::set_pattern(fmt::format("[{}] %^%l:%$ %v", mpi_rank));
88
89 // init vtkMPI
90 vtkSmartPointer<vtkMPIController> controller =
91 vtkSmartPointer<vtkMPIController>::New();
92 controller->Initialize(&argc, &argv, 1);
93 vtkMPIController::SetGlobalController(controller);
94
96 dynamic_cast<MeshLib::NodePartitionedMesh*>(
97 MeshLib::IO::readMeshFromFile(mesh_input.getValue()));
98 INFO("Mesh '{:s}' read: {:d} nodes, {:d} elements.",
99 mesh->getName(),
100 mesh->getNumberOfNodes(),
101 mesh->getNumberOfElements());
102 INFO("Mesh read runtime: {:g} s.", run_timer.elapsed());
103 INFO("Mesh read CPU time: {:g} s.", CPU_timer.elapsed());
104
105 // Write output file
106 auto const file_name = output_directory_arg.getValue() + ".vtu";
107 DBUG("Writing output to '{:s}'.", file_name);
108
109 MeshLib::IO::VtuInterface vtu_interface(mesh);
110 vtu_interface.writeToFile(file_name);
111
112 INFO("Total runtime: {:g} s.", run_timer.elapsed());
113 INFO("Total CPU time: {:g} s.", CPU_timer.elapsed());
114
115 MPI_Finalize();
116
117 return EXIT_SUCCESS;
118}
int main(int argc, char *argv[])
Definition of the CPUTime class.
#define OGS_FATAL(...)
Definition Error.h:26
Filename manipulation routines.
Git information.
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:35
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30
Definition of mesh class for partitioned mesh (by node) for parallel computing within the framework o...
Definition of the RunTime class.
Implementation of the VtuInterface class.
Count CPU time.
Definition CPUTime.h:23
void start()
Start the timer.
Definition CPUTime.h:26
double elapsed() const
Get the elapsed time after started.
Definition CPUTime.h:29
Count the running time.
Definition RunTime.h:29
double elapsed() const
Get the elapsed time in seconds.
Definition RunTime.h:42
void start()
Start the timer.
Definition RunTime.h:32
Reads and writes VtkXMLUnstructuredGrid-files (vtu) to and from OGS data structures....
bool writeToFile(std::filesystem::path const &file_path)
const std::string getName() const
Get name of the mesh.
Definition Mesh.h:103
std::size_t getNumberOfNodes() const
Get the number of nodes.
Definition Mesh.h:100
std::size_t getNumberOfElements() const
Get the number of elements.
Definition Mesh.h:97
void setConsoleLogLevel(std::string const &level_string)
Definition Logging.cpp:37
GITINFOLIB_EXPORT const std::string ogs_version
MeshLib::Mesh * readMeshFromFile(const std::string &file_name, bool const compute_element_neighbors)
Definition of readMeshFromFile function.