15 std::array<utils::ExpressionValue, 3>
value;
22 v.set_unit_type(unit_type);
25 double eval(
const RowVectorNd &pts,
const int dim,
const double t,
const int el_id = -1)
const;
47 std::array<utils::ExpressionValue, 3>
value;
63 void rhs(
const assembler::Assembler &assembler,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
64 void rhs(
const assembler::Assembler &assembler,
const mesh::Mesh &mesh,
const int element_id,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
65 bool is_rhs_zero(
const int fe_space_id = -1)
const override;
67 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 int fe_space_id = -1)
const override;
68 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 int fe_space_id = -1)
const override;
69 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;
79 void update_nodes(
const Eigen::VectorXi &in_node_to_node)
override;
88 void initial_solution(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
89 void initial_velocity(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
90 void initial_acceleration(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
97 void exact(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
98 void exact_grad(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
100 void clear()
override;
103 void update_dirichlet_nodes(
const Eigen::VectorXi &in_node_to_node,
const Eigen::VectorXi &node_ids,
const Eigen::MatrixXd &nodal_dirichlet);
122 std::map<int, std::array<utils::ExpressionValue, 3>>
rhs_;
125 std::array<utils::ExpressionValue, 3>
exact_;
145 void rhs(
const assembler::Assembler &assembler,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
146 void rhs(
const assembler::Assembler &assembler,
const mesh::Mesh &mesh,
const int element_id,
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
147 bool is_rhs_zero(
const int fe_space_id = -1)
const override;
149 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 int fe_space_id = -1)
const override;
150 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 int fe_space_id = -1)
const override;
151 void initial_solution(
const mesh::Mesh &mesh,
const Eigen::MatrixXi &global_ids,
const Eigen::MatrixXd &pts, Eigen::MatrixXd &
val,
const int fe_space_id = -1)
const override;
159 void update_nodes(
const Eigen::VectorXi &in_node_to_node)
override;
170 void exact(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
171 void exact_grad(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const override;
173 void clear()
override;
185 std::map<int, utils::ExpressionValue>
rhs_;
bool is_constant_in_time() 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 int fe_space_id=-1) const override
bool is_nodal_neumann_boundary(const int n_id, const int tag, const int fe_space_id=-1) override
std::vector< ScalarBCValue > neumann_
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
std::vector< Eigen::MatrixXd > nodal_neumann_mat_
void update_nodes(const Eigen::VectorXi &in_node_to_node) override
void dirichlet_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
bool is_nodal_dirichlet_boundary(const int n_id, const int tag, const int fe_space_id=-1) override
std::vector< ScalarInitialValue > body_rhs_
bool is_time_dependent() const override
utils::ExpressionValue exact_
std::array< utils::ExpressionValue, 3 > exact_grad_
bool has_nodal_dirichlet(const int fe_space_id=-1) override
void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
bool has_nodal_neumann(const int fe_space_id=-1) override
std::map< int, utils::ExpressionValue > rhs_
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 int fe_space_id=-1) const override
std::map< int, ScalarBCValue > nodal_dirichlet_
bool is_scalar() const override
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
std::vector< ScalarInitialValue > initial_solution_
bool is_rhs_zero(const int fe_space_id=-1) 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
std::map< int, ScalarBCValue > nodal_neumann_
bool has_exact_sol() const override
std::vector< ScalarBCValue > dirichlet_
void set_parameters(const json ¶ms, const std::string &root_path) override
bool has_boundary(const BoundaryKind kind, const int tag, const int fe_space_id) override
void exact(const Eigen::MatrixXd &pts, 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 int fe_space_id=-1) const override
std::vector< Eigen::MatrixXd > nodal_dirichlet_mat_
void update_pressure_boundary(const int id, const int time_step, const double val)
bool has_boundary(const BoundaryKind kind, const int tag, const int fe_space_id) override
std::map< int, TensorBCValue > nodal_neumann_
std::vector< TensorInitialValue > initial_acceleration_
void set_parameters(const json ¶ms, const std::string &root_path) override
void initial_acceleration(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
std::unordered_map< int, ScalarBCValue > cavity_pressures_
bool is_time_dependent() const override
std::vector< TensorInitialValue > initial_position_
void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
void update_nodes(const Eigen::VectorXi &in_node_to_node) override
std::map< int, int > rhs_size_
std::vector< TensorInitialValue > body_rhs_
std::vector< TensorInitialValue > initial_velocity_
bool all_dimensions_dirichlet(const int fe_space_id) const override
void update_dirichlet_nodes(const Eigen::VectorXi &in_node_to_node, const Eigen::VectorXi &node_ids, const Eigen::MatrixXd &nodal_dirichlet)
std::vector< TensorBCValue > displacements_
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 int fe_space_id=-1) const override
std::vector< ScalarBCValue > normal_aligned_forces_
void set_time_dependent(const bool val)
std::map< int, std::array< utils::ExpressionValue, 3 > > rhs_
bool is_nodal_dimension_dirichlet(const int n_id, const int tag, const int dim, const int fe_space_id=-1) 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 int fe_space_id=-1) const override
std::vector< Eigen::MatrixXd > nodal_neumann_mat_
bool is_nodal_neumann_boundary(const int n_id, const int tag, const int fe_space_id=-1) override
bool is_dimension_dirichet(const int tag, const int dim, const int fe_space_id=-1) const 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
void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const override
std::map< int, TensorBCValue > nodal_dirichlet_
bool has_nodal_neumann(const int fe_space_id=-1) override
std::array< utils::ExpressionValue, 9 > exact_grad_
bool is_constant_in_time() const override
bool is_rhs_zero(const int fe_space_id=-1) const override
void dirichlet_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val, const int fe_space_id=-1) 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
std::vector< ScalarBCValue > pressures_
bool is_nodal_dirichlet_boundary(const int n_id, const int tag, const int fe_space_id=-1) 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 int fe_space_id=-1) const 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 has_nodal_dirichlet(const int fe_space_id=-1) override
void set_units(const assembler::Assembler &assembler, const Units &units) override
bool is_scalar() const override
std::array< utils::ExpressionValue, 3 > exact_
std::vector< Eigen::MatrixXd > nodal_dirichlet_mat_
void initial_velocity(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val, const int fe_space_id=-1) const override
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
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
std::array< utils::ExpressionValue, 3 > value