PolyFEM
Loading...
Searching...
No Matches
ScalarVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
4
7
8#include <memory>
9
10namespace polysolve::linear
11{
12 class Solver;
13}
14
15namespace polyfem::varform
16{
17 class ScalarVarForm : public VarForm
18 {
20
21 public:
22 using VarForm::VarForm;
23 std::string name() const override { return "Scalar"; }
24
25 void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override;
26 void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override;
27 void export_data(const Eigen::MatrixXd &solution) const override;
28 io::OutputSpace output_space() const override;
29 io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override;
30 void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override;
31 void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override;
32
33 std::vector<io::OutputField> output_fields(
34 const io::OutputSample &sample,
35 const Eigen::MatrixXd &solution,
36 const io::OutputFieldOptions &options) const override;
37
38 protected:
39 void reset() override;
40 void load_mesh(const mesh::Mesh &mesh, const json &args) override;
41 void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override;
42 void assemble_rhs(const mesh::Mesh &mesh) override;
43 void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override;
44
45 protected:
46 void build_rhs_assembler() override;
47
53 std::shared_ptr<assembler::RhsAssembler> rhs_assembler_;
56 double avg_mass_ = 0;
57 Eigen::MatrixXd rhs_;
58
59 std::shared_ptr<assembler::Assembler> primary_assembler_ = nullptr;
60 std::shared_ptr<assembler::Mass> mass_assembler_ = nullptr;
61 std::shared_ptr<assembler::HRZMass> pure_mass_assembler_ = nullptr;
63
64 double t0 = 0;
65 int time_steps = 0;
66 double dt = 0;
67
68 void prepare_initial_solution(Eigen::MatrixXd &solution) const;
69
70 void build_stiffness_mat(StiffnessMatrix &stiffness);
71
72 void solve_problem(
73 Eigen::MatrixXd &sol,
74 const InitialConditionOverride *initial_condition_override,
75 const ForwardStepCallback &post_step) override;
77 const std::unique_ptr<polysolve::linear::Solver> &solver,
79 Eigen::VectorXd &b,
80 const bool compute_spectrum,
81 Eigen::MatrixXd &sol);
83 const std::unique_ptr<polysolve::linear::Solver> &solver,
85 Eigen::VectorXd &b,
86 const bool compute_spectrum,
87 const QuadratureOrders &boundary_samples,
88 const double time,
89 Eigen::MatrixXd &sol);
90 void solve_static(Eigen::MatrixXd &sol, const ForwardStepCallback &post_step);
91 void solve_transient(Eigen::MatrixXd &sol, const ForwardStepCallback &post_step);
92
93 std::shared_ptr<time_integrator::ImplicitTimeIntegrator> time_integrator;
94 };
95} // namespace polyfem::varform
Caches basis evaluation and geometric mapping at every element.
all stats from polyfem
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
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override
Save the solution to a JSON file, for output purposes.
std::shared_ptr< assembler::HRZMass > pure_mass_assembler_
std::shared_ptr< time_integrator::ImplicitTimeIntegrator > time_integrator
void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override
std::shared_ptr< assembler::Mass > mass_assembler_
void solve_problem(Eigen::MatrixXd &sol, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override
Get the error statistics of the variational formulation, for output purposes.
void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override
std::string name() const override
Get the name of the variational formulation.
void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override
void solve_linear_system_with_constraints(const std::unique_ptr< polysolve::linear::Solver > &solver, StiffnessMatrix &A, Eigen::VectorXd &b, const bool compute_spectrum, const QuadratureOrders &boundary_samples, const double time, Eigen::MatrixXd &sol)
assembler::AssemblyValsCache pure_mass_ass_vals_cache_
assembler::AssemblyValsCache mass_ass_vals_cache_
assembler::AssemblyValsCache ass_vals_cache_
void export_data(const Eigen::MatrixXd &solution) const override
void assemble_rhs(const mesh::Mesh &mesh) override
std::vector< io::OutputField > output_fields(const io::OutputSample &sample, const Eigen::MatrixXd &solution, const io::OutputFieldOptions &options) const override
Get the output fields of the variational formulation, for output purposes.
void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override
void build_stiffness_mat(StiffnessMatrix &stiffness)
void solve_linear_system(const std::unique_ptr< polysolve::linear::Solver > &solver, StiffnessMatrix &A, Eigen::VectorXd &b, const bool compute_spectrum, Eigen::MatrixXd &sol)
void prepare_initial_solution(Eigen::MatrixXd &solution) const
std::shared_ptr< assembler::Assembler > primary_assembler_
std::shared_ptr< assembler::RhsAssembler > rhs_assembler_
void solve_static(Eigen::MatrixXd &sol, const ForwardStepCallback &post_step)
void solve_transient(Eigen::MatrixXd &sol, const ForwardStepCallback &post_step)
friend class polyfem::test::VarFormTestAccess
void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override
Initialize the variational formulation with the given parameters.
void load_mesh(const mesh::Mesh &mesh, const json &args) override
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
VarForm(const io::ResourceIO &resources)
Definition VarForm.hpp:60
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