14#include <paraviewo/ParaviewWriter.hpp>
15#include <paraviewo/VTUWriter.hpp>
16#include <paraviewo/HDF5VTUWriter.hpp>
22#include <ipc/potentials/normal_adhesion_potential.hpp>
23#include <ipc/potentials/tangential_adhesion_potential.hpp>
78 const bool is_mesh_linear,
79 const bool mesh_has_prisms,
80 const bool is_problem_scalar);
104 const std::vector<basis::ElementBases> &bases,
105 const std::vector<mesh::LocalBoundary> &total_local_boundary,
106 Eigen::MatrixXd &node_positions,
107 Eigen::MatrixXi &boundary_edges,
108 Eigen::MatrixXi &boundary_triangles,
109 std::vector<Eigen::Triplet<double>> &displacement_map_entries);
137 const Eigen::MatrixXd &sol,
138 const Eigen::MatrixXd &pressure,
139 const bool is_time_dependent,
140 const double tend_in,
142 const ExportOptions &opts,
143 const std::string &vis_mesh_path,
144 const std::string &nodes_path,
145 const std::string &solution_path,
146 const std::string &stress_path,
147 const std::string &mises_path,
148 const bool is_contact_enabled)
const;
159 void save_vtu(
const std::string &path,
161 const Eigen::MatrixXd &sol,
162 const Eigen::MatrixXd &pressure,
165 const ExportOptions &opts,
166 const bool is_contact_enabled)
const;
178 const Eigen::MatrixXd &sol,
179 const Eigen::MatrixXd &pressure,
182 const ExportOptions &opts)
const;
195 const Eigen::MatrixXd &sol,
196 const Eigen::MatrixXd &pressure,
199 const ExportOptions &opts,
200 const bool is_contact_enabled)
const;
212 const std::string &export_surface,
214 const Eigen::MatrixXd &sol,
215 const Eigen::MatrixXd &pressure,
218 const ExportOptions &opts,
219 const bool is_contact_enabled)
const;
229 const Eigen::MatrixXd &sol,
231 const ExportOptions &opts)
const;
239 const std::string &path,
241 const Eigen::MatrixXd &sol,
242 const ExportOptions &opts)
const;
251 void save_pvd(
const std::string &name,
const std::function<std::string(
int)> &vtu_names,
252 int time_steps,
double t0,
double dt,
int skip_frame = 1)
const;
281 const std::vector<basis::ElementBases> &bases,
282 const std::vector<basis::ElementBases> &gbases,
283 const std::vector<mesh::LocalBoundary> &total_local_boundary,
284 const Eigen::MatrixXd &solution,
285 const int problem_dim,
286 Eigen::MatrixXd &boundary_vis_vertices,
287 Eigen::MatrixXd &boundary_vis_local_vertices,
288 Eigen::MatrixXi &boundary_vis_elements,
289 Eigen::MatrixXi &boundary_vis_elements_ids,
290 Eigen::MatrixXi &boundary_vis_primitive_ids,
291 Eigen::MatrixXd &boundary_vis_normals,
292 Eigen::MatrixXd &displaced_boundary_vis_normals)
const;
310 const Eigen::VectorXi &disc_orders,
311 const std::vector<basis::ElementBases> &gbases,
312 const std::map<int, Eigen::MatrixXd> &polys,
313 const std::map<
int, std::pair<Eigen::MatrixXd, Eigen::MatrixXi>> &polys_3d,
314 const bool boundary_only,
315 Eigen::MatrixXd &points,
316 Eigen::MatrixXi &tets,
317 Eigen::MatrixXi &el_id,
318 Eigen::MatrixXd &discr)
const;
333 const Eigen::VectorXi &disc_orders,
334 const Eigen::VectorXi &disc_ordersq,
335 const std::vector<basis::ElementBases> &bases,
336 Eigen::MatrixXd &points,
337 std::vector<paraviewo::CellElement> &elements,
338 Eigen::MatrixXi &el_id,
339 Eigen::MatrixXd &discr)
const;
343 const Eigen::MatrixXd &points,
345 const std::string &name,
346 const Eigen::VectorXd &field,
347 paraviewo::ParaviewWriter &writer)
const;
356 void write(
const int i,
const Eigen::MatrixXd &sol);
369 void write(
const int t,
const double forward,
const double remeshing,
const double global_relaxation,
const Eigen::MatrixXd &sol);
main class that contains the polyfem solver and all its state
void write(const int i, const Eigen::MatrixXd &sol)
const solver::SolveData & solve_data
Utilies related to export of geometry.
utils::RefElementSampler ref_element_sampler
used to sample the solution
void build_high_order_vis_mesh(const mesh::Mesh &mesh, const Eigen::VectorXi &disc_orders, const Eigen::VectorXi &disc_ordersq, const std::vector< basis::ElementBases > &bases, Eigen::MatrixXd &points, std::vector< paraviewo::CellElement > &elements, Eigen::MatrixXi &el_id, Eigen::MatrixXd &discr) const
builds high-der visualzation mesh per element all disconnected it also retuns the mapping to element ...
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
Eigen::MatrixXd grid_points_bc
grid mesh boundaries
void export_data(const State &state, const Eigen::MatrixXd &sol, const Eigen::MatrixXd &pressure, const bool is_time_dependent, const double tend_in, const double dt, const ExportOptions &opts, const std::string &vis_mesh_path, const std::string &nodes_path, const std::string &solution_path, const std::string &stress_path, const std::string &mises_path, const bool is_contact_enabled) const
exports everytihng, txt, vtu, etc
void save_vtu(const std::string &path, const State &state, const Eigen::MatrixXd &sol, const Eigen::MatrixXd &pressure, const double t, const double dt, const ExportOptions &opts, const bool is_contact_enabled) const
saves the vtu file for time t
void save_wire(const std::string &name, const State &state, const Eigen::MatrixXd &sol, const double t, const ExportOptions &opts) const
saves the wireframe
void save_points(const std::string &path, const State &state, const Eigen::MatrixXd &sol, const ExportOptions &opts) const
saves the nodal values
void save_volume_vector_field(const State &state, const Eigen::MatrixXd &points, const ExportOptions &opts, const std::string &name, const Eigen::VectorXd &field, paraviewo::ParaviewWriter &writer) const
void save_volume(const std::string &path, const State &state, const Eigen::MatrixXd &sol, const Eigen::MatrixXd &pressure, const double t, const double dt, const ExportOptions &opts) const
saves the volume vtu file
void build_vis_boundary_mesh(const mesh::Mesh &mesh, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &gbases, const std::vector< mesh::LocalBoundary > &total_local_boundary, const Eigen::MatrixXd &solution, const int problem_dim, 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, Eigen::MatrixXd &displaced_boundary_vis_normals) const
builds the boundary mesh for visualization
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) const
builds visualzation mesh, upsampled mesh used for visualization the visualization mesh is a dense mes...
void save_contact_surface(const std::string &export_surface, const State &state, const Eigen::MatrixXd &sol, const Eigen::MatrixXd &pressure, const double t, const double dt_in, const ExportOptions &opts, const bool is_contact_enabled) const
saves the surface vtu file for for constact quantites, eg contact or friction forces
Eigen::MatrixXi grid_points_to_elements
grid mesh mapping to fe elements
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
void build_grid(const polyfem::mesh::Mesh &mesh, const double spacing)
builds the grid to export the solution
void init_sampler(const polyfem::mesh::Mesh &mesh, const double vismesh_rel_area)
unitalize the ref element sampler
Eigen::MatrixXd grid_points
grid mesh points to export solution sampled on a grid
void save_surface(const std::string &export_surface, const State &state, const Eigen::MatrixXd &sol, const Eigen::MatrixXd &pressure, const double t, const double dt_in, const ExportOptions &opts, const bool is_contact_enabled) const
saves the surface vtu file for for surface quantites, eg traction forces
double total_forward_solve_time
double total_global_relaxation_time
void write(const int t, const double forward, const double remeshing, const double global_relaxation, const Eigen::MatrixXd &sol)
double total_remeshing_time
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
class to store time stepping data
polyfem::legacy::State State
bool normal_adhesion_forces
bool export_field(const std::string &field) const
std::vector< std::string > fields
bool tangential_adhesion_forces
bool discretization_order
std::string file_extension() const
return the extension of the output paraview files depending on use_hdf5