10#include <tclap/CmdLine.h>
13#include <range/v3/algorithm/minmax.hpp>
14#include <range/v3/range/conversion.hpp>
15#include <range/v3/view/filter.hpp>
16#include <range/v3/view/iota.hpp>
33 auto const elem_list =
34 ranges::views::iota(std::size_t{0}, mat_ids.size()) |
35 ranges::views::filter([&](std::size_t i)
36 {
return mat_ids[i] != mat_id; }) |
37 ranges::to<std::vector>;
42int main(
int argc,
char* argv[])
45 "Takes a mesh with multiple MaterialIDs and writes elements of a given "
46 "ID into a new mesh. If no ID is specified, meshes for each existing "
47 "MaterialID are created.\n\n"
48 "OpenGeoSys-6 software, version " +
51 "Copyright (c) 2012-2025, OpenGeoSys Community "
52 "(http://www.opengeosys.org)",
54 TCLAP::ValueArg<std::size_t> arg_mat_id(
56 "The MaterialID for which elements should be extracted into a new "
58 false, 0,
"MATERIAL_ID");
60 TCLAP::ValueArg<std::string> output_arg(
61 "o",
"output",
"Output (.vtu). Name of the output mesh",
true,
"",
64 TCLAP::ValueArg<std::string> input_arg(
65 "i",
"input",
"Input (.vtu). Name of the input mesh",
true,
"",
69 cmd.add(log_level_arg);
70 cmd.parse(argc, argv);
75 std::string
const input_name = input_arg.getValue();
76 std::string
const output_name = output_arg.getValue();
80 std::unique_ptr<MeshLib::Mesh>
const mesh(
84 ERR(
"Error reading input mesh. Aborting...");
89 if (mat_ids ==
nullptr)
91 ERR(
"No material IDs found in mesh. Aborting...");
95 auto const [min, max] = ranges::minmax(*mat_ids);
98 ERR(
"Mesh only contains one material, no extraction required.");
102 if (arg_mat_id.isSet())
104 min_id =
static_cast<int>(arg_mat_id.getValue());
105 if (min_id < min || min_id > max)
107 ERR(
"Specified material ID does not exist.");
118 std::ofstream ostream;
119 if (min_id != max_id)
121 ostream.open(base_name +
"_Layers.txt");
124 for (
int i = min_id; i <= max_id; ++i)
126 INFO(
"Extracting material group {:d}...", i);
128 if (mat_group ==
nullptr)
130 WARN(
"No elements with material group {:d} found.", i);
134 std::string
const file_name(base_name +
"_Layer" + std::to_string(i) +
137 if (ostream.is_open())
139 ostream << file_name <<
"\n";
142 if (ostream.is_open())
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Definition of the Mesh class.
Implementation of the VtuInterface class.
Reads and writes VtkXMLUnstructuredGrid-files (vtu) to and from OGS data structures....
bool writeToFile(std::filesystem::path const &file_path)
Properties & getProperties()
PropertyVector< T > const * getPropertyVector(std::string_view name) const
TCLAP::ValueArg< std::string > makeLogLevelArg()
void initOGSLogger(std::string const &log_level)
std::string getFileExtension(const std::string &path)
std::string dropFileExtension(std::string const &filename)
GITINFOLIB_EXPORT const std::string ogs_version
MeshLib::Mesh * readMeshFromFile(const std::string &file_name, bool const compute_element_neighbors)
PropertyVector< int > const * materialIDs(Mesh const &mesh)
Definition of readMeshFromFile function.