PolyFEM
Loading...
Searching...
No Matches
OutData.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <polyfem/Common.hpp>
4
6
8
11
12#include <paraviewo/ParaviewWriter.hpp>
13#include <paraviewo/VTUWriter.hpp>
14#include <paraviewo/HDF5VTUWriter.hpp>
15
17
18#include <Eigen/Dense>
19
20namespace paraviewo
21{
22 class VTMWriter;
23}
24
25namespace polyfem::io
26{
29 {
30 public:
33 {
34 std::vector<std::string> fields; // fields to export, empty means all
35
36 bool volume;
37 bool surface;
38 bool wire;
39 bool points;
44
50
52
54
60 ExportOptions(const json &args,
61 const bool is_mesh_linear,
62 const bool mesh_has_prisms,
63 const bool is_problem_scalar);
64
67 inline std::string file_extension() const
68 {
69 return use_hdf5 ? ".hdf" : ".vtu";
70 }
71
72 bool export_field(const std::string &field) const;
73 };
74
84 static void extract_boundary_mesh(
85 const mesh::Mesh &mesh,
86 const int n_bases,
87 const std::vector<basis::ElementBases> &bases,
88 const std::vector<mesh::LocalBoundary> &total_local_boundary,
89 Eigen::MatrixXd &node_positions,
90 Eigen::MatrixXi &boundary_edges,
91 Eigen::MatrixXi &boundary_triangles,
92 std::vector<Eigen::Triplet<double>> &displacement_map_entries);
93
103 const mesh::Mesh &mesh,
104 const int n_bases,
105 const std::vector<basis::ElementBases> &bases,
106 const std::vector<mesh::LocalBoundary> &total_local_boundary,
107 Eigen::MatrixXd &node_positions,
108 Eigen::MatrixXi &boundary_edges,
109 Eigen::MatrixXi &boundary_triangles,
110 std::vector<Eigen::Triplet<double>> &displacement_map_entries,
111 const int sampling_order = 0);
112
116 void init_sampler(const polyfem::mesh::Mesh &mesh, const double vismesh_rel_area);
117
121 void build_grid(const polyfem::mesh::Mesh &mesh, const double spacing);
122
131 void export_data(
132 const OutputSpace &space,
133 const OutputFieldFunction &output_fields,
134 const bool is_time_dependent,
135 const double tend_in,
136 const double dt,
137 const ExportOptions &opts,
138 const std::string &vis_mesh_path) const;
139
147 void save_vtu(const std::string &path,
148 const OutputSpace &space,
149 const OutputFieldFunction &output_fields,
150 const double t,
151 const double dt,
152 const ExportOptions &opts) const;
153
157 void save_vtu(const std::string &path,
158 const OutputSpace &space,
159 const OutputFieldFunction &output_fields,
160 const double t,
161 const double dt,
162 const ExportOptions &opts,
163 paraviewo::VTMWriter &vtm,
164 const std::string &block_prefix) const;
165
173 void save_volume(const std::string &path,
174 const OutputSpace &space,
175 const OutputFieldFunction &output_fields,
176 const double t,
177 const double dt,
178 const ExportOptions &opts) const;
179
187 void save_surface(const std::string &export_surface,
188 const OutputSpace &space,
189 const OutputFieldFunction &output_fields,
190 const double t,
191 const double dt_in,
192 const ExportOptions &opts) const;
193
202 const std::string &export_surface,
203 const OutputSpace &space,
204 const OutputFieldFunction &output_fields,
205 const double t,
206 const double dt_in,
207 const ExportOptions &opts) const;
208
215 void save_wire(const std::string &name,
216 const OutputSpace &space,
217 const OutputFieldFunction &output_fields,
218 const double t,
219 const ExportOptions &opts) const;
220
226 void save_points(
227 const std::string &path,
228 const OutputSpace &space,
229 const OutputFieldFunction &output_fields,
230 const ExportOptions &opts) const;
231
239 void save_pvd(const std::string &name, const std::function<std::string(int)> &vtu_names,
240 int time_steps, double t0, double dt, int skip_frame = 1) const;
241
242 private:
245
247 Eigen::MatrixXd grid_points;
249 Eigen::MatrixXi grid_points_to_elements;
251 Eigen::MatrixXd grid_points_bc;
252
264 const mesh::Mesh &mesh,
265 const std::vector<basis::ElementBases> &gbases,
266 const std::vector<mesh::LocalBoundary> &total_local_boundary,
267 Eigen::MatrixXd &boundary_vis_vertices,
268 Eigen::MatrixXd &boundary_vis_local_vertices,
269 Eigen::MatrixXi &boundary_vis_elements,
270 Eigen::MatrixXi &boundary_vis_elements_ids,
271 Eigen::MatrixXi &boundary_vis_primitive_ids,
272 Eigen::MatrixXd &boundary_vis_normals) const;
273
288 void build_vis_mesh(
289 const mesh::Mesh &mesh,
290 const Eigen::VectorXi &disc_orders,
291 const std::vector<basis::ElementBases> &gbases,
292 const std::map<int, Eigen::MatrixXd> &polys,
293 const std::map<int, std::pair<Eigen::MatrixXd, Eigen::MatrixXi>> &polys_3d,
294 const bool boundary_only,
295 Eigen::MatrixXd &points,
296 Eigen::MatrixXi &tets,
297 Eigen::MatrixXi &el_id,
298 Eigen::MatrixXd &discr,
299 Eigen::MatrixXd &local_points) const;
300
312 const mesh::Mesh &mesh,
313 const Eigen::VectorXi &output_orders,
314 const std::vector<basis::ElementBases> &bases,
315 Eigen::MatrixXd &points,
316 std::vector<paraviewo::CellElement> &elements,
317 Eigen::MatrixXi &el_id,
318 Eigen::MatrixXd &discr,
319 Eigen::MatrixXd &local_points) const;
320 };
321
322} // namespace polyfem::io
Utilies related to export of geometry.
Definition OutData.hpp:29
void build_vis_boundary_mesh(const mesh::Mesh &mesh, const std::vector< basis::ElementBases > &gbases, const std::vector< mesh::LocalBoundary > &total_local_boundary, Eigen::MatrixXd &boundary_vis_vertices, Eigen::MatrixXd &boundary_vis_local_vertices, Eigen::MatrixXi &boundary_vis_elements, Eigen::MatrixXi &boundary_vis_elements_ids, Eigen::MatrixXi &boundary_vis_primitive_ids, Eigen::MatrixXd &boundary_vis_normals) const
builds the boundary mesh for visualization
Definition OutData.cpp:1438
Eigen::MatrixXd grid_points_bc
grid mesh boundaries
Definition OutData.hpp:251
void build_high_order_vis_mesh(const mesh::Mesh &mesh, const Eigen::VectorXi &output_orders, const std::vector< basis::ElementBases > &bases, Eigen::MatrixXd &points, std::vector< paraviewo::CellElement > &elements, Eigen::MatrixXi &el_id, Eigen::MatrixXd &discr, Eigen::MatrixXd &local_points) const
builds high-der visualzation mesh per element all disconnected it also retuns the mapping to element ...
Definition OutData.cpp:1839
Eigen::MatrixXd grid_points
grid mesh points to export solution sampled on a grid
Definition OutData.hpp:247
static void extract_boundary_mesh_sampled(const mesh::Mesh &mesh, const int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< mesh::LocalBoundary > &total_local_boundary, Eigen::MatrixXd &node_positions, Eigen::MatrixXi &boundary_edges, Eigen::MatrixXi &boundary_triangles, std::vector< Eigen::Triplet< double > > &displacement_map_entries, const int sampling_order=0)
extracts a collision proxy sampling every boundary face on a uniform lattice of the globally maximal ...
Definition OutData.cpp:434
void save_volume(const std::string &path, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const double dt, const ExportOptions &opts) const
saves the volume vtu file
Definition OutData.cpp:2254
void build_vis_mesh(const mesh::Mesh &mesh, const Eigen::VectorXi &disc_orders, const std::vector< basis::ElementBases > &gbases, const std::map< int, Eigen::MatrixXd > &polys, const std::map< int, std::pair< Eigen::MatrixXd, Eigen::MatrixXi > > &polys_3d, const bool boundary_only, Eigen::MatrixXd &points, Eigen::MatrixXi &tets, Eigen::MatrixXi &el_id, Eigen::MatrixXd &discr, Eigen::MatrixXd &local_points) const
builds visualzation mesh, upsampled mesh used for visualization the visualization mesh is a dense mes...
Definition OutData.cpp:1664
void build_grid(const polyfem::mesh::Mesh &mesh, const double spacing)
builds the grid to export the solution
Definition OutData.cpp:2653
void save_wire(const std::string &name, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const ExportOptions &opts) const
saves the wireframe
Definition OutData.cpp:2535
static void extract_boundary_mesh(const mesh::Mesh &mesh, const int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< mesh::LocalBoundary > &total_local_boundary, Eigen::MatrixXd &node_positions, Eigen::MatrixXi &boundary_edges, Eigen::MatrixXi &boundary_triangles, std::vector< Eigen::Triplet< double > > &displacement_map_entries)
extracts the boundary mesh
Definition OutData.cpp:737
void save_pvd(const std::string &name, const std::function< std::string(int)> &vtu_names, int time_steps, double t0, double dt, int skip_frame=1) const
save a PVD of a time dependent simulation
Definition OutData.cpp:2640
void save_contact_surface(const std::string &export_surface, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const double dt_in, const ExportOptions &opts) const
saves the surface vtu file for for constact quantites, eg contact or friction forces
Definition OutData.cpp:2495
void export_data(const OutputSpace &space, const OutputFieldFunction &output_fields, const bool is_time_dependent, const double tend_in, const double dt, const ExportOptions &opts, const std::string &vis_mesh_path) const
exports everytihng, txt, vtu, etc
Definition OutData.cpp:2103
void save_points(const std::string &path, const OutputSpace &space, const OutputFieldFunction &output_fields, const ExportOptions &opts) const
saves the nodal values
Definition OutData.cpp:2586
void save_vtu(const std::string &path, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const double dt, const ExportOptions &opts) const
saves the vtu file for time t
Definition OutData.cpp:2164
void init_sampler(const polyfem::mesh::Mesh &mesh, const double vismesh_rel_area)
unitalize the ref element sampler
Definition OutData.cpp:2648
void save_surface(const std::string &export_surface, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const double dt_in, const ExportOptions &opts) const
saves the surface vtu file for for surface quantites, eg traction forces
Definition OutData.cpp:2424
Eigen::MatrixXi grid_points_to_elements
grid mesh mapping to fe elements
Definition OutData.hpp:249
utils::RefElementSampler ref_element_sampler
used to sample the solution
Definition OutData.hpp:244
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:50
std::function< std::vector< OutputField >(const OutputSample &)> OutputFieldFunction
nlohmann::json json
Definition Common.hpp:9
std::string file_extension() const
return the extension of the output paraview files depending on use_hdf5
Definition OutData.hpp:67
std::vector< std::string > fields
Definition OutData.hpp:34
bool export_field(const std::string &field) const
Definition OutData.cpp:2130