PolyFEM
Loading...
Searching...
No Matches
DifferentiableNonlinearElasticVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
6
7namespace polyfem::varform
8{
10 {
11 public:
12 using NonlinearElasticVarForm::NonlinearElasticVarForm;
13 void solve(
14 Eigen::MatrixXd &solution,
15 const InitialConditionOverride *initial_condition_override,
16 const ForwardStepCallback &post_step,
17 bool differentiable) override;
18 void prepare() override;
19 void save_vtu(const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override;
20
21 json &get_args() override;
22 const json &get_args() const override;
23 const mesh::Mesh &get_mesh() const override;
25 const assembler::Problem &get_problem() const override;
26 std::string output_file_path(const std::string &path) const override;
27 const Units &get_units() const override;
28 bool is_contact_enabled() const override;
29
30 const FESpace &primary_space() const override;
31 const VarFormBoundaryState &boundary_state() const override;
32 const assembler::Assembler &primary_assembler() const override;
33 const assembler::Mass &mass_assembler() const override;
34 const assembler::AssemblyValsCache &assembly_cache() const override;
36 const StiffnessMatrix &mass_matrix() const override;
37 solver::SolveData *solve_data() override;
38 const solver::SolveData *solve_data() const override;
39 const ipc::CollisionMesh &collision_mesh() const override;
40 const mesh::Obstacle &get_obstacle() const override;
41 const assembler::ViscousDamping *damping_assembler() const override;
43 void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override = nullptr) const override;
44 void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override = nullptr) const override;
45 void initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override = nullptr) const override;
46 Eigen::MatrixXd displacement_gradient() const override;
47
48 protected:
49 mesh::Mesh &mutable_mesh() override;
52 QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override;
53 void init_forms(const json &args, int dim, Eigen::MatrixXd &solution, double time) override;
54 void solve_tensor_nonlinear(int step, Eigen::MatrixXd &solution, bool init_lagging = true) override;
55
56 protected:
58 Eigen::MatrixXd &solution,
59 double time,
60 const InitialConditionOverride *initial_condition_override);
61 void solve_homogenization_step(Eigen::MatrixXd &solution, const ForwardStepCallback &post_step);
62
63 private:
66 Eigen::MatrixXd displacement_gradient_;
67 };
68
70 {
71 public:
72 using DifferentiableNonlinearElasticVarForm::DifferentiableNonlinearElasticVarForm;
73 std::string name() const override { return "NonlinearElasticStatic"; }
74
75 private:
76 void solve_problem(
77 Eigen::MatrixXd &solution,
78 const InitialConditionOverride *initial_condition_override,
79 const ForwardStepCallback &post_step) override;
80 };
81
83 {
84 public:
85 using DifferentiableNonlinearElasticVarForm::DifferentiableNonlinearElasticVarForm;
86 std::string name() const override { return "NonlinearElasticTransient"; }
87
88 private:
89 void solve_problem(
90 Eigen::MatrixXd &solution,
91 const InitialConditionOverride *initial_condition_override,
92 const ForwardStepCallback &post_step) override;
93 };
94} // 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_homogenization_solve(Eigen::MatrixXd &solution, double time, const InitialConditionOverride *initial_condition_override)
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 solve_homogenization_step(Eigen::MatrixXd &solution, const ForwardStepCallback &post_step)
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
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:53
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