PolyFEM
Loading...
Searching...
No Matches
DifferentiableScalarVarForm.cpp
Go to the documentation of this file.
2
3namespace polyfem::varform
4{
6 {
7 return ScalarVarForm::name();
8 }
9
11 Eigen::MatrixXd &solution,
12 const InitialConditionOverride *initial_condition_override,
13 const ForwardStepCallback &post_step,
14 const bool)
15 {
16 ScalarVarForm::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 = ScalarVarForm::export_options(space);
34 path, space, ScalarVarForm::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 &DifferentiableScalarVarForm::get_root_path() const { return root_path; }
59
60 std::string DifferentiableScalarVarForm::input_path(const std::string &path, const bool only_if_exists) const
61 {
62 return ScalarVarForm::resolve_input_path(path, only_if_exists);
63 }
64
65 std::string DifferentiableScalarVarForm::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 {
96 assert(mesh_ && "Vertex positions can only be updated after loading a mesh");
97 return *mesh_;
98 }
99
108
116
118 const int discr_order,
119 const int discr_orderq,
120 const int geometry_discr_order) const
121 {
122 return ScalarVarForm::n_boundary_samples(discr_order, discr_orderq, geometry_discr_order);
123 }
124} // 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
const assembler::AssemblyValsCache & mass_assembly_cache() const override
std::string input_path(const std::string &path, bool only_if_exists=false) const override
std::string output_file_path(const std::string &path) const override
const assembler::Mass & mass_assembler() const override
QuadratureOrders boundary_samples(int discr_order, int discr_orderq, int geometry_discr_order) const override
const VarFormBoundaryState & boundary_state() const override
void save_vtu(const std::string &path, const Eigen::MatrixXd &solution, double time, double dt) const override
std::string name() const override
Get the name of the variational formulation.
const StiffnessMatrix & mass_matrix() const override
const assembler::AssemblyValsCache & assembly_cache() const override
const assembler::Assembler & primary_assembler() const override
void solve(Eigen::MatrixXd &solution, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step, bool differentiable) override
bool is_contact_enabled() const override
Check if contact is enabled for the variational formulation, for output purposes.
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
std::shared_ptr< time_integrator::ImplicitTimeIntegrator > time_integrator
std::shared_ptr< assembler::Mass > mass_assembler_
std::string name() const override
Get the name of the variational formulation.
assembler::AssemblyValsCache mass_ass_vals_cache_
assembler::AssemblyValsCache ass_vals_cache_
std::shared_ptr< assembler::Assembler > primary_assembler_
std::shared_ptr< assembler::RhsAssembler > rhs_assembler_
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
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