PolyFEM
Loading...
Searching...
No Matches
DifferentiableNonlinearElasticVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace polyfem::varform
7{
9 {
10 public:
11 using NonlinearElasticVarForm::NonlinearElasticVarForm;
12 void solve(
13 Eigen::MatrixXd &solution,
14 const InitialConditionOverride *initial_condition_override,
15 const ForwardStepCallback &post_step,
16 bool differentiable) override;
17 void prepare() override;
18 void save_vtu(const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override;
19
20 json &get_args() override;
21 const json &get_args() const override;
22 const mesh::Mesh &get_mesh() const override;
24 const assembler::Problem &get_problem() const override;
25 std::string output_file_path(const std::string &path) const override;
26 const Units &get_units() const override;
27 bool is_contact_enabled() const override;
28
29 const FESpace &primary_space() const override;
30 const VarFormBoundaryState &boundary_state() const override;
31 const assembler::Assembler &primary_assembler() const override;
32 const assembler::Mass &mass_assembler() const override;
33 const assembler::AssemblyValsCache &assembly_cache() const override;
35 const StiffnessMatrix &mass_matrix() const override;
36 solver::SolveData *solve_data() override;
37 const solver::SolveData *solve_data() const override;
38 const ipc::CollisionMesh &collision_mesh() const override;
39 const mesh::Obstacle &get_obstacle() const override;
40 const assembler::ViscousDamping *damping_assembler() const override;
42 void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override = nullptr) const override;
43 void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override = nullptr) const override;
44 void initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override = nullptr) const override;
45 Eigen::MatrixXd displacement_gradient() const override;
46
49 void replace_mesh(const std::string &path) override;
50
51 protected:
52 mesh::Mesh &mutable_mesh() override;
55 QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override;
56 void init_forms(const json &args, int dim, Eigen::MatrixXd &solution, double time) override;
57 void solve_tensor_nonlinear(int step, Eigen::MatrixXd &solution, bool init_lagging = true) override;
58
59 private:
61 };
62
64 {
65 public:
66 using DifferentiableNonlinearElasticVarForm::DifferentiableNonlinearElasticVarForm;
67 std::string name() const override { return "NonlinearElasticStatic"; }
68
69 private:
70 void solve_problem(
71 Eigen::MatrixXd &solution,
72 const InitialConditionOverride *initial_condition_override,
73 const ForwardStepCallback &post_step) override;
74 };
75
77 {
78 public:
79 using DifferentiableNonlinearElasticVarForm::DifferentiableNonlinearElasticVarForm;
80 std::string name() const override { return "NonlinearElasticTransient"; }
81
82 private:
83 void solve_problem(
84 Eigen::MatrixXd &solution,
85 const InitialConditionOverride *initial_condition_override,
86 const ForwardStepCallback &post_step) override;
87 };
88} // namespace polyfem::varform
Caches basis evaluation and geometric mapping at every element.
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:50
class to store time stepping data
Definition SolveData.hpp:56
void solve_problem(Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
std::string name() const override
Get the name of the variational formulation.
void solve_problem(Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
std::string name() const override
Get the name of the variational formulation.
void init_forms(const json &args, int dim, Eigen::MatrixXd &solution, double time) override
const assembler::ViscousDampingPrev * damping_prev_assembler() const override
QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override
void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override=nullptr) const override
void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override=nullptr) const override
void solve_tensor_nonlinear(int step, Eigen::MatrixXd &solution, bool init_lagging=true) override
void solve(Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step, bool differentiable) override
const assembler::AssemblyValsCache & assembly_cache() const override
void initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override=nullptr) const override
bool is_contact_enabled() const override
Check if contact is enabled for the variational formulation, for output purposes.
const assembler::AssemblyValsCache & mass_assembly_cache() const override
void save_vtu(const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override
std::string output_file_path(const std::string &path) const override
void replace_mesh(const std::string &path) override
For shock obsorption optimization, mesh is generated by an external inflator program that convert gra...
Optimization-facing interface implemented by differentiated VarForm adapters.
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
std::function< void(int step, const Eigen::MatrixXd &solution)> ForwardStepCallback
Definition VarForm.hpp:55
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