29 inline const std::string &
name()
const {
return name_; }
36 virtual 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 = 0;
37 virtual 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 {}
38 virtual 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 {}
51 virtual void exact(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const {};
52 virtual void exact_grad(
const Eigen::MatrixXd &pts,
const double t, Eigen::MatrixXd &
val)
const {};
77 const int fe_space_id,
78 const std::vector<basis::ElementBases> &bases,
79 const std::vector<mesh::LocalBoundary> &local_boundary,
80 std::vector<mesh::LocalBoundary> &selected_local_boundary,
81 std::vector<int> &boundary_nodes);
87 const int fe_space_id,
88 const std::vector<mesh::LocalBoundary> &local_boundary,
89 std::unordered_map<
int, std::vector<mesh::LocalBoundary>> &local_pressure_cavity);
95 const int fe_space_id,
97 std::vector<int> &nodes);
102 const int n_bases,
const std::vector<basis::ElementBases> &bases,
const std::vector<basis::ElementBases> &geom_bases,
const std::vector<basis::ElementBases> &pressure_bases,
103 std::vector<mesh::LocalBoundary> &local_boundary, std::vector<int> &boundary_nodes,
104 std::vector<mesh::LocalBoundary> &local_neumann_boundary,
105 std::vector<mesh::LocalBoundary> &local_pressure_boundary,
106 std::unordered_map<
int, std::vector<mesh::LocalBoundary>> &local_pressure_cavity,
107 std::vector<int> &pressure_boundary_nodes,
108 std::vector<int> &dirichlet_nodes, std::vector<int> &neumann_nodes);
virtual 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
void setup_bc(const mesh::Mesh &mesh, const int n_bases, const std::vector< basis::ElementBases > &bases, const std::vector< basis::ElementBases > &geom_bases, const std::vector< basis::ElementBases > &pressure_bases, std::vector< mesh::LocalBoundary > &local_boundary, std::vector< int > &boundary_nodes, std::vector< mesh::LocalBoundary > &local_neumann_boundary, std::vector< mesh::LocalBoundary > &local_pressure_boundary, std::unordered_map< int, std::vector< mesh::LocalBoundary > > &local_pressure_cavity, std::vector< int > &pressure_boundary_nodes, std::vector< int > &dirichlet_nodes, std::vector< int > &neumann_nodes)
bool has_boundary(const BoundaryKind kind, const int tag)
virtual bool has_nodal_neumann()
void setup_bc(const mesh::Mesh &mesh, const BoundaryKind kind, const int fe_space_id, const std::vector< basis::ElementBases > &bases, const std::vector< mesh::LocalBoundary > &local_boundary, std::vector< mesh::LocalBoundary > &selected_local_boundary, std::vector< int > &boundary_nodes)
virtual 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
virtual bool is_rhs_zero() const =0
const std::string & name() const
std::vector< int > normal_aligned_neumann_boundary_ids_
virtual 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
virtual bool is_dimension_dirichet(const int tag, const int dim) const
virtual void set_parameters(const json ¶ms, const std::string &root_path)
bool updated_dirichlet_node_ordering_
virtual bool all_dimensions_dirichlet() const
void setup_pressure_cavity_bc(const mesh::Mesh &mesh, const int fe_space_id, const std::vector< mesh::LocalBoundary > &local_boundary, std::unordered_map< int, std::vector< mesh::LocalBoundary > > &local_pressure_cavity)
virtual void exact_grad(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const
virtual void initial_density(const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const
virtual double pressure_cavity_bc(const int boundary_id, const double t) const
virtual void initial_acceleration(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const
virtual bool is_scalar() const =0
virtual void set_units(const assembler::Assembler &assembler, const Units &units)
virtual void update_nodes(const Eigen::VectorXi &in_node_to_node)
std::vector< int > pressure_boundary_ids_
virtual bool has_exact_sol() const =0
virtual void rhs(const assembler::Assembler &assembler, const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const =0
virtual bool is_nodal_neumann_boundary(const int n_id, const int tag)
virtual bool might_have_no_dirichlet()
virtual void dirichlet_nodal_value(const mesh::Mesh &mesh, const int node_id, const RowVectorNd &pt, const double t, Eigen::MatrixXd &val) const
std::vector< int > splitting_pressure_boundary_ids_
virtual void initial_velocity(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const
std::vector< int > boundary_ids_
virtual bool is_constant_in_time() const
virtual void exact(const Eigen::MatrixXd &pts, const double t, Eigen::MatrixXd &val) const
virtual bool is_nodal_dirichlet_boundary(const int n_id, const int tag)
virtual bool is_nodal_dimension_dirichlet(const int n_id, const int tag, const int dim) const
virtual bool is_boundary_pressure(const int boundary_id) const
virtual bool is_time_dependent() const
void setup_nodal_bc(const mesh::Mesh &mesh, const BoundaryKind kind, const int fe_space_id, const int n_bases, std::vector< int > &nodes)
virtual void initial_solution(const mesh::Mesh &mesh, const Eigen::MatrixXi &global_ids, const Eigen::MatrixXd &pts, Eigen::MatrixXd &val) const
virtual 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 =0
virtual void init(const mesh::Mesh &mesh)
std::vector< int > neumann_boundary_ids_
std::vector< int > pressure_cavity_ids_
virtual bool has_nodal_dirichlet()
Abstract mesh class to capture 2d/3d conforming and non-conforming meshes.
Eigen::Matrix< double, 1, Eigen::Dynamic, Eigen::RowMajor, 1, 3 > RowVectorNd