20 #ifndef __mast_level_set_intersection_h__ 21 #define __mast_level_set_intersection_h__ 30 #include "libmesh/elem.h" 63 const libMesh::Elem& e,
65 unsigned int max_elem_id,
66 unsigned int max_node_id);
77 const libMesh::Elem&
elem()
const;
145 const std::vector<const libMesh::Elem*>&
148 const std::vector<const libMesh::Elem*>&
165 const libMesh::Point&
176 std::unique_ptr<libMesh::Elem>
185 const libMesh::Elem& e,
190 (
const libMesh::Elem& e,
191 std::vector<std::pair<libMesh::Point, libMesh::Point> >& side_nondim_points,
192 std::map<const libMesh::Node*, libMesh::Point>& node_coord_map);
196 const libMesh::Elem& e,
198 const std::map<
const libMesh::Node*, std::pair<Real, bool> >&
207 const libMesh::Point& p1,
255 #endif // __mast_level_set_intersection_h__ MAST::LevelSet2DIntersectionMode _mode
Real _find_intersection_on_straight_edge(const libMesh::Point &p0, const libMesh::Point &p1, const MAST::FieldFunction< Real > &phi, const Real t)
bool _if_elem_on_negative_phi
true if element is completely on the negative side of level set with no intersection ...
virtual ~LevelSetIntersection()
unsigned int edge_on_boundary() const
unsigned int get_side_on_interface(const libMesh::Elem &e) const
std::unique_ptr< libMesh::Elem > _first_order_elem(const libMesh::Elem &e)
creates a first order element from the given high-order element.
bool _if_elem_on_positive_phi
true if element is completely on the positive side of level set with no intersection ...
std::map< const libMesh::Elem *, int > _elem_sides_on_interface
unsigned int node_on_boundary() const
const unsigned int _max_elem_divs
const libMesh::Point & get_nondimensional_coordinate_for_node(const libMesh::Node &n) const
const std::vector< const libMesh::Elem * > & get_sub_elems_negative_phi() const
void _add_node_local_coords(const libMesh::Elem &e, std::vector< std::pair< libMesh::Point, libMesh::Point > > &side_nondim_points, std::map< const libMesh::Node *, libMesh::Point > &node_coord_map)
MAST::LevelSet2DIntersectionMode get_intersection_mode() const
void _find_quad4_intersections(const MAST::FieldFunction< Real > &phi, const libMesh::Elem &e, const Real t, const std::map< const libMesh::Node *, std::pair< Real, bool > > &node_phi_vals)
void init(const MAST::FieldFunction< Real > &phi, const libMesh::Elem &e, const Real t, unsigned int max_elem_id, unsigned int max_node_id)
const libMesh::Elem * _elem
std::vector< libMesh::Elem * > _new_elems
const libMesh::Elem & elem() const
std::vector< const libMesh::Elem * > _positive_phi_elems
bool if_intersection_through_elem() const
Real get_node_phi_value(const libMesh::Node *n) const
std::map< const libMesh::Node *, libMesh::Point > _node_local_coords
unsigned int _max_mesh_node_id
std::vector< libMesh::Node * > _new_nodes
This creates the base class for functions that have a saptial and temporal dependence, and provide sensitivity operations with respect to the functions and parameters.
bool has_side_on_interface(const libMesh::Elem &e) const
bool if_elem_on_negative_phi() const
Real get_positive_phi_volume_fraction() const
bool if_elem_has_positive_phi_region() const
void get_corner_nodes_on_negative_phi(std::set< const libMesh::Node * > &nodes) const
unsigned int _node_num_on_boundary
bool if_elem_has_boundary() const
const std::vector< const libMesh::Elem * > & get_sub_elems_positive_phi() const
bool if_elem_on_positive_phi() const
std::vector< const libMesh::Elem * > _negative_phi_elems
std::map< const libMesh::Node *, std::pair< Real, bool > > _node_phi_vals
unsigned int _max_mesh_elem_id
void _init_on_first_order_ref_elem(const MAST::FieldFunction< Real > &phi, const libMesh::Elem &e, const Real t)
initializes on a reference element that is a first-order counterpart of the given high-order element...
void clear()
clears the data structures
unsigned int _edge_num_on_boundary
LevelSet2DIntersectionMode