PolyFEM
Loading...
Searching...
No Matches
NavierStokesFSI.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <functional>
7
8namespace polyfem::assembler
9{
11 {
12 public:
13 enum Space : int
14 {
19 };
20
21 using BodyForceEvaluator = std::function<void(
22 int element_id,
23 const Eigen::MatrixXd &physical_points,
24 double time,
25 Eigen::MatrixXd &values)>;
26
52
53 const Eigen::VectorXd &velocity() const { return x(Velocity); }
54 const Eigen::VectorXd &pressure() const { return x(Pressure); }
55 const Eigen::VectorXd &mesh_displacement() const { return x(MeshDisplacement); }
56
57 const Eigen::VectorXd &velocity_tilde;
58 const Eigen::VectorXd &mesh_velocity;
60 const double spatial_weight;
61 const bool include_inertia;
62 const bool picard;
64 };
65
67 {
68 public:
70 std::string name() const override { return "NavierStokesFSIVelocity"; }
71 std::map<std::string, ParamFunc> parameters() const override;
72 void add_multimaterial(const int index, const json &params, const Units &units, const std::string &root_path) override;
73 double compute_energy(const MultiSpacesNLAssemblerData &) const override;
74 Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override;
75 Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override;
76 bool is_fluid() const override { return true; }
77 bool is_tensor() const override { return true; }
78
79 private:
82 };
83
85 {
86 public:
87 std::string name() const override { return "NavierStokesFSIMixed"; }
88 std::map<std::string, ParamFunc> parameters() const override { return {}; }
89 double compute_energy(const MultiSpacesNLAssemblerData &) const override;
90 Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override;
91 Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override;
92 void set_size(const int size) override { size_ = size; }
93 };
94
96 {
97 public:
98 std::string name() const override { return "NavierStokesFSIPressure"; }
99 std::map<std::string, ParamFunc> parameters() const override { return {}; }
100 double compute_energy(const MultiSpacesNLAssemblerData &) const override { return 0; }
101 Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override;
102 Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override;
103 void set_size(const int) override { size_ = 1; }
104 };
105
107 {
108 public:
109 std::string name() const override { return "NavierStokesFSIInertia"; }
110 std::map<std::string, ParamFunc> parameters() const override;
111 void add_multimaterial(const int index, const json &params, const Units &units, const std::string &root_path) override;
112 double compute_energy(const MultiSpacesNLAssemblerData &) const override;
113 Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override;
114 Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override;
115 bool is_fluid() const override { return true; }
116 bool is_tensor() const override { return true; }
117
118 private:
120 };
121} // namespace polyfem::assembler
ElementAssemblyValues vals
Definition Assembler.cpp:25
int x
Local data shared by assemblers involving an arbitrary number of FE spaces.
std::vector< std::reference_wrapper< const Eigen::VectorXd > > Coefficients
const Eigen::VectorXd & x_prev(const int space) const
std::vector< std::reference_wrapper< const ElementAssemblyValues > > Values
Local nonlinear assembler for an arbitrary number of FE spaces.
NavierStokesFSIAssemblerData(Values vals, Coefficients x, Coefficients x_prev, const double t, const double dt, const QuadratureVector &da, const Eigen::VectorXd &velocity_tilde, const Eigen::VectorXd &mesh_velocity, const double dmesh_velocity_dmesh_displacement, const double spatial_weight, const bool include_inertia, const bool picard, BodyForceEvaluator body_force_evaluator={})
const Eigen::VectorXd & mesh_displacement() const
std::function< void(int element_id, const Eigen::MatrixXd &physical_points, double time, Eigen::MatrixXd &values)> BodyForceEvaluator
Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override
Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override
double compute_energy(const MultiSpacesNLAssemblerData &) const override
std::map< std::string, ParamFunc > parameters() const override
void add_multimaterial(const int index, const json &params, const Units &units, const std::string &root_path) override
void set_size(const int size) override
Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override
std::map< std::string, ParamFunc > parameters() const override
Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override
double compute_energy(const MultiSpacesNLAssemblerData &) const override
double compute_energy(const MultiSpacesNLAssemblerData &) const override
std::map< std::string, ParamFunc > parameters() const override
Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override
Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override
void add_multimaterial(const int index, const json &params, const Units &units, const std::string &root_path) override
Eigen::MatrixXd assemble_hessian(const MultiSpacesNLAssemblerData &data, int row_space, int col_space) const override
Eigen::VectorXd assemble_gradient(const MultiSpacesNLAssemblerData &data) const override
double compute_energy(const MultiSpacesNLAssemblerData &) const override
std::map< std::string, ParamFunc > parameters() const override
Used for test only.
Eigen::Matrix< double, Eigen::Dynamic, 1, 0, MAX_QUAD_POINTS, 1 > QuadratureVector
Definition Types.hpp:17
nlohmann::json json
Definition Common.hpp:9