PolyFEM
Loading...
Searching...
No Matches
NonlinearElasticVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
4
8
9#include <ipc/collision_mesh.hpp>
10
11#include <functional>
12
13namespace polyfem::varform
14{
16 {
17 public:
18 void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override;
19
20 bool is_contact_enabled() const override
21 {
22 return args.contains("contact") && args["contact"].contains("enabled") && args["contact"]["enabled"].get<bool>();
23 }
24
25 io::OutputSpace output_space() const override;
26 std::vector<io::OutputField> output_fields(
27 const io::OutputSample &sample,
28 const Eigen::MatrixXd &solution,
29 const io::OutputFieldOptions &options) const override;
30
31 protected:
32 void reset() override;
33 void load_mesh(const mesh::Mesh &mesh, const json &args) override;
34 void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override;
35 void build_rhs_assembler() override;
36 void init_solve(Eigen::MatrixXd &sol, const double t);
37 void init_forms(const json &args, const int dim, Eigen::MatrixXd &sol, const double t);
38 void solve_tensor_nonlinear(int step, Eigen::MatrixXd &sol, const bool init_lagging = true);
39
40 std::shared_ptr<assembler::PressureAssembler> build_pressure_assembler() const;
41 void build_collision_mesh(const mesh::Mesh &mesh, const json &args);
44 const mesh::Mesh &mesh,
45 const int n_bases,
46 const std::vector<basis::ElementBases> &bases,
47 const std::vector<basis::ElementBases> &geom_bases,
48 const std::vector<mesh::LocalBoundary> &total_local_boundary,
50 const json &args,
51 const std::function<std::string(const std::string &)> &resolve_input_path,
52 const Eigen::VectorXi &in_node_to_node,
53 ipc::CollisionMesh &collision_mesh);
54
55 ipc::CollisionMesh collision_mesh;
56 std::shared_ptr<assembler::PressureAssembler> elasticity_pressure_assembler = nullptr;
57 std::shared_ptr<assembler::ViscousDamping> damping_assembler = nullptr;
58 std::shared_ptr<assembler::ViscousDampingPrev> damping_prev_assembler = nullptr;
59
61
63 std::vector<std::shared_ptr<solver::Form>> forms;
65
66 int n_obstacle_vertices() const override { return obstacle.n_vertices(); }
67 };
68
70 {
71 public:
72 std::string name() const override { return "NonlinearElasticTransient"; }
73
74 private:
75 void solve_problem(Eigen::MatrixXd &sol) override;
76 };
77
79 {
80 public:
81 std::string name() const override { return "NonlinearElasticStatic"; }
82
83 private:
84 void solve_problem(Eigen::MatrixXd &sol) override;
85 };
86} // namespace polyfem::varform
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:41
class to store time stepping data
Definition SolveData.hpp:59
std::string name() const override
Get the name of the variational formulation.
std::string name() const override
Get the name of the variational formulation.
std::shared_ptr< assembler::PressureAssembler > elasticity_pressure_assembler
void init_forms(const json &args, const int dim, Eigen::MatrixXd &sol, const double t)
std::vector< io::OutputField > output_fields(const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options) const override
Get the output fields of the variational formulation, for output purposes.
std::shared_ptr< assembler::ViscousDamping > damping_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.
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override
std::shared_ptr< assembler::ViscousDampingPrev > damping_prev_assembler
void load_mesh(const mesh::Mesh &mesh, const json &args) override
void solve_tensor_nonlinear(int step, Eigen::MatrixXd &sol, const bool init_lagging=true)
bool is_contact_enabled() const override
Check if contact is enabled for the variational formulation, for output purposes.
void init_solve(Eigen::MatrixXd &sol, const double t)
void build_collision_mesh(const mesh::Mesh &mesh, const json &args)
std::vector< std::shared_ptr< solver::Form > > forms
std::shared_ptr< assembler::PressureAssembler > build_pressure_assembler() const
std::string resolve_input_path(const std::string &path, const bool only_if_exists=false) const
Definition VarForm.cpp:1057
nlohmann::json json
Definition Common.hpp:9