PolyFEM
Loading...
Searching...
No Matches
ElasticVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
4
6
7namespace polyfem::mesh
8{
9 class Obstacle;
10}
11
12namespace polyfem::solver
13{
14 class ContactForm;
15 class Form;
16} // namespace polyfem::solver
17
19{
20 class ImplicitTimeIntegrator;
21}
22
23namespace polyfem::varform
24{
25 class ElasticVarForm : public VarForm
26 {
29
30 public:
31 using VarForm::VarForm;
32 void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override;
33
34 void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override;
35 void export_data(const Eigen::MatrixXd &solution) const override;
36 io::OutputSpace output_space() const override;
37 io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override;
38 void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override;
39 void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override;
40
41 protected:
42 void reset() override;
43 void load_mesh(const mesh::Mesh &mesh, const json &args) override;
44 void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override;
45 void build_elastic_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args, const int fe_space_id);
46 void assemble_rhs(const mesh::Mesh &mesh) override;
47 void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override;
48 void build_rhs_assembler() override;
49
51 Eigen::MatrixXd &solution,
52 const InitialConditionOverride *override = nullptr,
53 const std::string &state_prefix = "") const;
55 Eigen::MatrixXd &velocity,
56 const InitialConditionOverride *override = nullptr,
57 const std::string &state_prefix = "") const;
59 Eigen::MatrixXd &acceleration,
60 const InitialConditionOverride *override = nullptr,
61 const std::string &state_prefix = "") const;
63 std::vector<int> elastic_primitive_to_node() const;
64 std::vector<int> elastic_node_to_primitive() const;
65 void build_mesh_matrices(Eigen::MatrixXd &V, Eigen::MatrixXi &F) const;
67 const double t0,
68 const double dt,
69 const int t,
70 const Eigen::MatrixXd &solution,
71 const time_integrator::ImplicitTimeIntegrator *time_integrator) const;
72 std::vector<io::OutputField> elastic_output_fields(
73 const io::OutputSample &sample,
74 const Eigen::MatrixXd &solution,
75 const io::OutputFieldOptions &options,
76 const mesh::Obstacle *obstacle,
77 const time_integrator::ImplicitTimeIntegrator *time_integrator,
78 const std::vector<std::pair<std::string, std::shared_ptr<solver::Form>>> &named_forms,
79 const solver::Form *elastic_form,
80 const solver::ContactForm *contact_form = nullptr) const;
82 std::vector<io::OutputField> &fields,
83 const io::OutputSample &sample,
84 const Eigen::MatrixXd &solution,
85 const io::OutputFieldOptions &options,
86 const mesh::Obstacle *obstacle = nullptr) const;
87 Eigen::MatrixXd displaced_output_normals(
88 const io::OutputSample &sample,
89 const Eigen::MatrixXd &solution) const;
90
91 virtual int n_obstacle_vertices() const { return 0; }
92
95
99
100 std::shared_ptr<assembler::RhsAssembler> rhs_assembler_;
101
104
105 double avg_mass_ = 0;
106 Eigen::MatrixXd rhs_;
107
108 std::shared_ptr<assembler::Assembler> primary_assembler_ = nullptr;
109 std::shared_ptr<assembler::Mass> mass_assembler_ = nullptr;
110 std::shared_ptr<assembler::HRZMass> pure_mass_assembler_ = nullptr;
111
112 double t0 = 0;
113 int time_steps = 0;
114 double dt = 0;
115 };
116} // namespace polyfem::varform
int V
Caches basis evaluation and geometric mapping at every element.
all stats from polyfem
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:50
Form representing the contact potential and forces.
Implicit time integrator of a second order ODE (equivently a system of coupled first order ODEs).
void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override
assembler::AssemblyValsCache pure_mass_ass_vals_cache_
void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override
void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override
Save the solution to a JSON file, for output purposes.
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
void build_elastic_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args, const int fe_space_id)
std::vector< int > elastic_primitive_to_node() const
io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override
Get the error statistics of the variational formulation, for output purposes.
void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override
std::shared_ptr< assembler::Assembler > primary_assembler_
void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override
Initialize the variational formulation with the given parameters.
Eigen::MatrixXd displaced_output_normals(const io::OutputSample &sample, const Eigen::MatrixXd &solution) const
std::vector< int > elastic_node_to_primitive() const
QuadratureOrders elastic_boundary_samples() const
assembler::AssemblyValsCache ass_vals_cache_
void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override
std::vector< io::OutputField > elastic_output_fields(const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options, const mesh::Obstacle *obstacle, const time_integrator::ImplicitTimeIntegrator *time_integrator, const std::vector< std::pair< std::string, std::shared_ptr< solver::Form > > > &named_forms, const solver::Form *elastic_form, const solver::ContactForm *contact_form=nullptr) const
std::shared_ptr< assembler::HRZMass > pure_mass_assembler_
std::shared_ptr< assembler::Mass > mass_assembler_
void save_elastic_step_state(const double t0, const double dt, const int t, const Eigen::MatrixXd &solution, const time_integrator::ImplicitTimeIntegrator *time_integrator) const
std::shared_ptr< assembler::RhsAssembler > rhs_assembler_
assembler::AssemblyValsCache mass_ass_vals_cache_
void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") const
void load_mesh(const mesh::Mesh &mesh, const json &args) override
virtual int n_obstacle_vertices() const
void initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") const
void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override=nullptr, const std::string &state_prefix="") const
void assemble_rhs(const mesh::Mesh &mesh) override
friend class polyfem::test::VarFormTestAccess
void append_primary_output_fields(std::vector< io::OutputField > &fields, const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options, const mesh::Obstacle *obstacle=nullptr) const
void build_mesh_matrices(Eigen::MatrixXd &V, Eigen::MatrixXi &F) const
void export_data(const Eigen::MatrixXd &solution) const override
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
VarForm(const io::ResourceIO &resources)
Definition VarForm.hpp:60
std::array< int, 2 > QuadratureOrders
Definition Types.hpp:19
nlohmann::json json
Definition Common.hpp:9
Eigen::SparseMatrix< double, Eigen::ColMajor > StiffnessMatrix
Definition Types.hpp:24
Temporary compatibility wrapper for boundary data belonging to one FE space.
Definition FESpace.hpp:152