PolyFEM
Loading...
Searching...
No Matches
DifferentiableLinearElasticVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
5
6namespace polyfem::varform
7{
9 {
10 public:
11 using LinearElasticVarForm::LinearElasticVarForm;
12 std::string name() const override;
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 void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override = nullptr) const override;
40 void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override = nullptr) const override;
41 void initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override = nullptr) const override;
42
43 protected:
44 mesh::Mesh &mutable_mesh() override;
47 QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override;
48 };
49} // 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 initial_acceleration(Eigen::MatrixXd &acceleration, const InitialConditionOverride *override=nullptr) const override
std::string name() const override
Get the name of the variational formulation.
bool is_contact_enabled() const override
Check if contact is enabled for the variational formulation, for output purposes.
void initial_velocity(Eigen::MatrixXd &velocity, const InitialConditionOverride *override=nullptr) const override
void initial_solution(Eigen::MatrixXd &solution, const InitialConditionOverride *override=nullptr) const override
QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override
void save_vtu(const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override
const assembler::AssemblyValsCache & assembly_cache() const override
void solve(Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step, bool differentiable) override
std::string output_file_path(const std::string &path) const override
const assembler::AssemblyValsCache & mass_assembly_cache() 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