PolyFEM
Loading...
Searching...
No Matches
DifferentiableLinearElasticVarForm.cpp
Go to the documentation of this file.
2
3namespace polyfem::varform
4{
9
11 Eigen::MatrixXd &solution,
12 const InitialConditionOverride *initial_condition_override,
13 const ForwardStepCallback &post_step,
14 const bool)
15 {
16 LinearElasticVarForm::solve(solution, initial_condition_override, post_step);
17 }
18
23
25 const std::string &path,
26 const Eigen::MatrixXd &solution,
27 const double time,
28 const double dt) const
29 {
32 const auto opts = LinearElasticVarForm::export_options(space);
34 path, space, LinearElasticVarForm::output_field_function(solution, opts), time, dt, opts);
35 }
36
39
41 {
42 assert(mesh_ && "The mesh must be loaded before it is accessed");
43 return *mesh_;
44 }
45
47 {
48 assert(problem && "The problem must be initialized before it is accessed");
49 return *problem;
50 }
51
53 {
54 assert(problem && "The problem must be initialized before it is accessed");
55 return *problem;
56 }
57
58 const std::string &DifferentiableLinearElasticVarForm::get_root_path() const { return root_path; }
59
60 std::string DifferentiableLinearElasticVarForm::input_path(const std::string &path, const bool only_if_exists) const
61 {
62 return LinearElasticVarForm::resolve_input_path(path, only_if_exists);
63 }
64
65 std::string DifferentiableLinearElasticVarForm::output_file_path(const std::string &path) const
66 {
68 }
69
72
75
77 {
78 assert(primary_assembler_ && "The primary assembler must be initialized before it is accessed");
79 return *primary_assembler_;
80 }
81
83 {
84 assert(mass_assembler_ && "The mass assembler must be initialized before it is accessed");
85 return *mass_assembler_;
86 }
87
93
95 Eigen::MatrixXd &solution,
96 const InitialConditionOverride *override) const
97 {
99 }
100
102 Eigen::MatrixXd &velocity,
103 const InitialConditionOverride *override) const
104 {
105 LinearElasticVarForm::initial_velocity(velocity, override);
106 }
107
109 Eigen::MatrixXd &acceleration,
110 const InitialConditionOverride *override) const
111 {
112 LinearElasticVarForm::initial_acceleration(acceleration, override);
113 }
114
116 {
117 assert(mesh_ && "Vertex positions can only be updated after loading a mesh");
118 return *mesh_;
119 }
120
131
141
143 const int discr_order,
144 const int discr_orderq,
145 const int geometry_discr_order) const
146 {
147 return LinearElasticVarForm::n_boundary_samples(discr_order, discr_orderq, geometry_discr_order);
148 }
149} // namespace polyfem::varform
Caches basis evaluation and geometric mapping at every element.
void save_vtu(const std::string &path, const OutputSpace &space, const OutputFieldFunction &output_fields, const double t, const double dt, const ExportOptions &opts) const
saves the vtu file for time t
Definition OutData.cpp:2162
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Definition Mesh.hpp:49
class to store time stepping data
Definition SolveData.hpp:55
std::shared_ptr< solver::InertiaForm > inertia_form
std::shared_ptr< solver::BodyForm > body_form
std::shared_ptr< solver::ElasticForm > elastic_form
std::shared_ptr< time_integrator::ImplicitTimeIntegrator > time_integrator
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
std::string input_path(const std::string &path, bool only_if_exists=false) const override
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
std::shared_ptr< assembler::Assembler > primary_assembler_
assembler::AssemblyValsCache ass_vals_cache_
std::shared_ptr< assembler::Mass > mass_assembler_
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 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
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
std::string name() const override
Get the name of the variational formulation.
std::string resolve_input_path(const std::string &path, const bool only_if_exists=false) const
Definition VarForm.cpp:1105
void prepare()
Prepare all discretization and assembly data without running a solve.
Definition VarForm.cpp:304
std::shared_ptr< assembler::Problem > problem
current problem, it contains rhs and bc
Definition VarForm.hpp:214
virtual bool is_contact_enabled() const
Check if contact is enabled for the variational formulation, for output purposes.
Definition VarForm.hpp:98
void solve(Eigen::MatrixXd &sol, const InitialConditionOverride *initial_condition_override=nullptr, const ForwardStepCallback &post_step={})
Solve the variational formulation and store the solution in the given matrix.
Definition VarForm.cpp:639
std::unique_ptr< mesh::Mesh > mesh_
Definition VarForm.hpp:226
io::OutGeometryData::ExportOptions export_options(const io::OutputSpace &space) const
Definition VarForm.cpp:898
io::OutGeometryData output_geometry_
Definition VarForm.hpp:230
io::OutputFieldFunction output_field_function(const Eigen::MatrixXd &solution, const io::OutGeometryData::ExportOptions &opts) const
Definition VarForm.cpp:907
QuadratureOrders n_boundary_samples(const int discr_order, const int discr_orderq, const int gdiscr_order) const
Definition VarForm.cpp:255
std::string resolve_output_path(const std::string &path) const
Definition VarForm.cpp:1110
void ensure_output_sampler() const
Definition VarForm.cpp:884
std::function< void(int step, const Eigen::MatrixXd &solution)> ForwardStepCallback
Definition VarForm.hpp:49
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