Wildmeshing Toolkit
Loading...
Searching...
No Matches
output.cpp
Go to the documentation of this file.
1#include "output.hpp"
2
3#include <wmtk/Mesh.hpp>
4#include <fmt/std.h>
5#include <type_traits>
10#include "OutputOptions.hpp"
12
13
15
16void output(
17 const Mesh& mesh,
18 const std::filesystem::path& file,
19 const std::string& position_attr_name)
20{
21 wmtk::logger().info("Saving on {}", file.string());
22
23 if (file.extension().empty()) {
24 assert(!position_attr_name.empty());
25 std::array<bool, 4> out = {{false, false, false, false}};
26 for (int64_t d = 0; d <= mesh.top_cell_dimension(); ++d) {
27 out[d] = true;
28 }
29 ParaviewWriter writer(file, position_attr_name, mesh, out[0], out[1], out[2], out[3]);
30 mesh.serialize(writer);
31 } else if (file.extension() == ".hdf5") {
32 output_hdf5(mesh, file);
33 } else
34 throw std::runtime_error(std::string("Unknown file type: ") + file.string());
35}
36
37void output(
38 const Mesh& mesh,
39 const std::filesystem::path& file,
40 const attribute::MeshAttributeHandle& position_attr)
41{
42 const std::string attr_name = mesh.get_attribute_name(position_attr.as<double>());
43 output(mesh, file, attr_name);
44}
45
46void output_hdf5(const Mesh& mesh, const std::filesystem::path& file)
47{
48 HDF5Writer writer(file);
49 mesh.serialize(writer);
50}
51
52
53
54void output(
55 const Mesh& mesh,
56 const OutputOptions& opts)
57{
58
59 if (opts.type == ".vtu") {
60 assert(
61 opts.position_attribute.index() != std::variant_npos);
62 std::string name = std::visit([](const auto& v) -> std::string{
63 using T = std::decay_t<decltype(v)>;
64 if constexpr(std::is_same_v<T,std::string>) {
65 return v;
66 } else if constexpr(std::is_same_v<T,wmtk::attribute::MeshAttributeHandle>) {
67 return v.name();
68 }
69 }, opts.position_attribute);
70 std::array<bool, 4> out = {{false, false, false, false}};
71 for (int64_t d = 0; d <= mesh.top_cell_dimension(); ++d) {
72 out[d] = true;
73 }
74 ParaviewWriter writer(opts.file,name, mesh, out[0], out[1], out[2], out[3]);
75 mesh.serialize(writer);
76 } else if (opts.type == ".hdf5") {
77 output_hdf5(mesh, opts.file);
78 } else
79 throw std::runtime_error(
80 fmt::format("Unable to write file [{}] of extension [{}]",
81 opts.file, opts.type));
82}
83
84void output(
85 const multimesh::NamedMultiMesh& mesh,
86 const OutputOptions& opts)
87{
88 output(mesh.root(), opts);
89
90 if(opts.mesh_name_path.has_value()) {
91 const auto& path = opts.mesh_name_path.value();
92 std::ofstream ofs(path);
93 ofs<< *mesh.get_names_json();
94 }
95
96}
97
98} // namespace wmtk::components
void serialize(MeshWriter &writer, const Mesh *local_root=nullptr) const
Definition Mesh.cpp:93
int64_t top_cell_dimension() const
Definition Mesh.hpp:978
std::string get_attribute_name(const TypedAttributeHandle< T > &handle) const
Definition Mesh.hpp:935
auto as() const -> const held_handle_type< held_type_from_primitive< T >()> &
std::unique_ptr< nlohmann::json > get_names_json() const
void output_hdf5(const Mesh &mesh, const std::filesystem::path &file)
Write the mesh to file.
Definition output.cpp:46
void output(const Mesh &mesh, const std::filesystem::path &file, const std::string &position_attr_name)
Write the mesh to file.
Definition output.cpp:16
spdlog::logger & logger()
Retrieves the current logger.
Definition Logger.cpp:58
std::optional< std::filesystem::path > mesh_name_path
std::variant< wmtk::attribute::MeshAttributeHandle, std::string > position_attribute