13 std::array<utils::ExpressionValue, 3>
value;
20 v.set_unit_type(unit_type);
23 double eval(
const RowVectorNd &pts,
const int dim,
const double t,
const int el_id = -1)
const;
45 void rhs(
const assembler::Assembler &assembler,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
48 for (
int i = 0; i < 3; ++i)
50 if (!
rhs_[i].is_zero())
56 void dirichlet_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
57 void neumann_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const Eigen::MatrixXd &normals,
const double t, Eigen::MatrixXd &
val)
const override;
58 void pressure_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const Eigen::MatrixXd &normals,
const double t, Eigen::MatrixXd &
val)
const override;
68 void update_nodes(
const Eigen::VectorXi &in_node_to_node)
override;
77 void initial_solution(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val)
const override;
78 void initial_velocity(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val)
const override;
86 void exact(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
87 void exact_grad(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
89 void clear()
override;
111 std::array<utils::ExpressionValue, 3>
rhs_;
112 std::array<utils::ExpressionValue, 3>
exact_;
128 void rhs(
const assembler::Assembler &assembler,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
131 void dirichlet_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
132 void neumann_bc(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &uv,
const Eigen::MatrixXd &pts,
const Eigen::MatrixXd &normals,
const double t, Eigen::MatrixXd &
val)
const override;
133 void initial_solution(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val)
const override;
141 void update_nodes(
const Eigen::VectorXi &in_node_to_node)
override;
152 void exact(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
153 void exact_grad(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
155 void clear()
override;
bool is_nodal_neumann_boundary(const int n_id, const int tag) override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
bool has_nodal_dirichlet() override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
std::vector< std::pair< int, utils::ExpressionValue > > initial_solution_
bool is_constant_in_time() const override
void set_parameters(const json ¶ms) override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::vector< ScalarBCValue > neumann_
void update_nodes(const Eigen::VectorXi &in_node_to_node) override
bool is_rhs_zero() const override
bool is_nodal_dirichlet_boundary(const int n_id, const int tag) override
void dirichlet_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val) const override
bool is_time_dependent() const override
utils::ExpressionValue exact_
std::array< utils::ExpressionValue, 3 > exact_grad_
bool has_nodal_neumann() override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::map< int, ScalarBCValue > nodal_dirichlet_
bool is_scalar() const override
void set_units(const assembler::Assembler &assembler, const Units &units) override
void set_time_dependent(const bool val)
bool might_have_no_dirichlet() override
utils::ExpressionValue rhs_
std::map< int, ScalarBCValue > nodal_neumann_
void neumann_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const Eigen::MatrixXd &normal, const double t, Eigen::MatrixXd &val) const override
bool has_exact_sol() const override
void neumann_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const Eigen::MatrixXd &normals, const double t, Eigen::MatrixXd &val) const override
std::vector< ScalarBCValue > dirichlet_
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::vector< Eigen::MatrixXd > nodal_dirichlet_mat_
void update_pressure_boundary(const int id, const int time_step, const double val)
std::map< int, TensorBCValue > nodal_neumann_
std::unordered_map< int, ScalarBCValue > cavity_pressures_
void neumann_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const Eigen::MatrixXd &normals, const double t, Eigen::MatrixXd &val) const override
std::vector< std::pair< int, std::array< utils::ExpressionValue, 3 > > > initial_position_
bool is_time_dependent() const override
void set_parameters(const json ¶ms) override
bool all_dimensions_dirichlet() const override
void update_nodes(const Eigen::VectorXi &in_node_to_node) override
void initial_velocity(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
bool all_dimensions_dirichlet_
std::vector< std::pair< int, std::array< utils::ExpressionValue, 3 > > > initial_acceleration_
std::vector< std::pair< int, std::array< utils::ExpressionValue, 3 > > > initial_velocity_
std::vector< TensorBCValue > displacements_
std::vector< ScalarBCValue > normal_aligned_forces_
void set_time_dependent(const bool val)
bool is_nodal_dirichlet_boundary(const int n_id, const int tag) override
bool is_rhs_zero() const override
bool has_nodal_neumann() override
void neumann_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const Eigen::MatrixXd &normal, const double t, Eigen::MatrixXd &val) const override
void initial_acceleration(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
bool has_nodal_dirichlet() override
void pressure_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const Eigen::MatrixXd &normals, const double t, Eigen::MatrixXd &val) const override
bool is_dimension_dirichet(const int tag, const int dim) const override
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::map< int, TensorBCValue > nodal_dirichlet_
std::array< utils::ExpressionValue, 3 > rhs_
std::array< utils::ExpressionValue, 9 > exact_grad_
bool is_constant_in_time() const override
std::vector< TensorBCValue > forces_
void update_dirichlet_boundary(const int id, const int time_step, const Eigen::VectorXd &val)
double pressure_cavity_bc(const int boundary_id, const double t) const override
void dirichlet_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val) const override
void dirichlet_bc(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &uv, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::vector< ScalarBCValue > pressures_
bool is_nodal_neumann_boundary(const int n_id, const int tag) override
bool has_exact_sol() const override
bool might_have_no_dirichlet() override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
bool is_nodal_dimension_dirichlet(const int n_id, const int tag, const int dim) const override
void set_units(const assembler::Assembler &assembler, const Units &units) override
bool is_scalar() const override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::array< utils::ExpressionValue, 3 > exact_
std::vector< Eigen::MatrixXd > nodal_dirichlet_mat_
const std::string & name() const
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
void set_unit_type(const std::string &unit_type)
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd
std::shared_ptr< utils::Interpolation > interpolation
void set_unit_type(const std::string &unit_type)
double eval(const RowVectorNd &pts, const double t) const
utils::ExpressionValue value
Eigen::Matrix< bool, 1, 3 > dirichlet_dimension
std::vector< std::shared_ptr< utils::Interpolation > > interpolation
void set_unit_type(const std::string &unit_type)
std::array< utils::ExpressionValue, 3 > value
double eval(const RowVectorNd &pts, const int dim, const double t, const int el_id=-1) const