PolyFEM
Loading...
Searching...
No Matches
OperatorSplittingVarForm.hpp
Go to the documentation of this file.
1#pragma once
2
4
8
9namespace polyfem::varform
10{
12 {
13 public:
14 using VarForm::VarForm;
15 std::string name() const override { return "OperatorSplitting"; }
16
17 void init(const std::string &formulation, const Units &units, const json &args, const std::string &out_path) override;
18 void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override;
19 void export_data(const Eigen::MatrixXd &solution) const override;
20 io::OutputSpace output_space() const override;
21 io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override;
22 void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override;
23 void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override;
24
25 std::vector<io::OutputField> output_fields(
26 const io::OutputSample &sample,
27 const Eigen::MatrixXd &solution,
28 const io::OutputFieldOptions &options) const override;
29
30 protected:
31 void reset() override;
32 void load_mesh(const mesh::Mesh &mesh, const json &args) override;
33 void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override;
34 void assemble_rhs(const mesh::Mesh &mesh) override;
35 void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override;
36 void solve_problem(
37 Eigen::MatrixXd &sol,
38 const InitialConditionOverride *initial_condition_override,
39 const ForwardStepCallback &post_step) override;
40 void build_rhs_assembler() override;
41
42 private:
43 int primary_ndof() const;
44 int pressure_block_size() const;
45 int stacked_ndof() const;
46
47 void prepare_initial_solution(Eigen::MatrixXd &sol) const;
48 void split_solution(const Eigen::MatrixXd &stacked, Eigen::MatrixXd &primary, Eigen::MatrixXd &pressure) const;
49 void stack_solution(const Eigen::MatrixXd &primary, const Eigen::MatrixXd &pressure, Eigen::MatrixXd &stacked) const;
50
53
56
60
61 std::shared_ptr<assembler::RhsAssembler> rhs_assembler_;
62
64 Eigen::MatrixXd rhs_;
65
66 std::shared_ptr<assembler::Assembler> primary_assembler_ = nullptr;
67 std::shared_ptr<assembler::Mass> mass_assembler_ = nullptr;
68 std::shared_ptr<assembler::MixedAssembler> mixed_assembler_ = nullptr;
69 std::shared_ptr<assembler::Assembler> pressure_assembler_ = nullptr;
70
71 bool use_avg_pressure = true;
72 double avg_mass_ = 0;
73 double t0 = 0;
74 int time_steps = 0;
75 double dt = 0;
76 };
77} // 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
A finite-element space for one scalar- or vector-valued field.
Definition FESpace.hpp:59
std::shared_ptr< assembler::Mass > mass_assembler_
void split_solution(const Eigen::MatrixXd &stacked, Eigen::MatrixXd &primary, Eigen::MatrixXd &pressure) const
void save_json(const Eigen::MatrixXd &solution, std::ostream &out) const override
Save the solution to a JSON file, for output purposes.
void prepare_initial_solution(Eigen::MatrixXd &sol) const
void export_data(const Eigen::MatrixXd &solution) const override
void build_basis(mesh::Mesh &mesh, const bool iso_parametric, const json &args) override
std::shared_ptr< assembler::MixedAssembler > mixed_assembler_
std::shared_ptr< assembler::Assembler > primary_assembler_
void assemble_rhs(const mesh::Mesh &mesh) override
std::shared_ptr< assembler::RhsAssembler > rhs_assembler_
void deserialize_checkpoint(const io::CheckpointReader &reader, Eigen::MatrixXd &solution) override
std::shared_ptr< assembler::Assembler > pressure_assembler_
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 stack_solution(const Eigen::MatrixXd &primary, const Eigen::MatrixXd &pressure, Eigen::MatrixXd &stacked) const
void serialize_checkpoint(io::CheckpointWriter &writer, const Eigen::MatrixXd &solution, const io::CheckpointMetadata &metadata) const override
void solve_problem(Eigen::MatrixXd &sol, const InitialConditionOverride *initial_condition_override, const ForwardStepCallback &post_step) override
io::OutputSpace output_space() const override
Get the output space of the variational formulation, for output purposes.
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.
std::string name() const override
Get the name of the variational formulation.
io::OutStatsData compute_errors(const Eigen::MatrixXd &solution) override
Get the error statistics of the variational formulation, for output purposes.
void load_mesh(const mesh::Mesh &mesh, const json &args) override
void assemble_mass_mat(const mesh::Mesh &mesh, const json &args) override
VarForm(const io::ResourceIO &resources)
Definition VarForm.hpp:60
std::function< void(int step, const Eigen::MatrixXd &solution)> ForwardStepCallback
Definition VarForm.hpp:53
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