SCIRun  5.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
HexVolMesh< Basis > Class Template Reference

#include <HexVolMesh.h>

Inheritance diagram for HexVolMesh< Basis >:
Mesh Datatype MeshTraits< VMesh > Persistent HasId< IdType, IdGenerator >

Classes

struct  Cell
 
struct  Edge
 
struct  EdgeHash
 
class  ElemData
 
struct  Face
 
struct  FaceHash
 
struct  FillNodeNeighbors
 useful functors More...
 
struct  Node
 Index and Iterator types required for Mesh Concept. More...
 
class  PEdge
 Edge information. More...
 
class  PEdgeCell
 
class  PEdgeNode
 Edge information. More...
 
class  PFace
 
class  PFaceCell
 Face information. More...
 
struct  PFaceNode
 
class  Synchronize
 

Public Types

typedef SCIRun::index_type under_type
 
typedef SCIRun::index_type index_type
 
typedef SCIRun::size_type size_type
 
typedef SCIRun::mask_type mask_type
 
typedef boost::shared_ptr
< HexVolMesh< Basis > > 
handle_type
 
typedef Basis basis_type
 
typedef Cell Elem
 
typedef Face DElem
 
- Public Types inherited from Mesh
enum  {
  UNKNOWN = 0, STRUCTURED = 1 << 1, UNSTRUCTURED = 1 << 2, REGULAR = 1 << 3,
  IRREGULAR = 1 << 4
}
 These will become obsolete at some point. More...
 
enum  {
  NONE_E = 0, NODES_E = 1 << 0, EDGES_E = 1 << 1, FACES_E = 1 << 2,
  CELLS_E = 1 << 3, ELEMS_E = 1 << 4, DELEMS_E = 1 << 5, ENODES_E = 1 << 6,
  ALL_ELEMENTS_E = NODES_E | EDGES_E | FACES_E | CELLS_E | ENODES_E | ELEMS_E | DELEMS_E, NORMALS_E = 1 << 7, NODE_NEIGHBORS_E = 1 << 8, ELEM_NEIGHBORS_E = 1 << 9,
  NEIGHBORS_E = NODE_NEIGHBORS_E | ELEM_NEIGHBORS_E, NODE_LOCATE_E = 1 << 10, ELEM_LOCATE_E = 1 << 11, LOCATE_E = NODE_LOCATE_E | ELEM_LOCATE_E,
  EPSILON_E = 1 << 12, BOUNDING_BOX_E = 1 << 12, FIND_CLOSEST_NODE_E = 1 << 13, FIND_CLOSEST_ELEM_E = 1 << 14,
  FIND_CLOSEST_E = FIND_CLOSEST_NODE_E | FIND_CLOSEST_ELEM_E
}
 Synchronize system. More...
 
- Public Types inherited from Datatype
typedef HasIntegerId::id_type id_type
 
- Public Types inherited from HasId< IdType, IdGenerator >
typedef IdType id_type
 
- Public Types inherited from MeshTraits< VMesh >
typedef SCIRun::mask_type mask_type
 
typedef SCIRun::index_type under_type
 
typedef SCIRun::index_type index_type
 
typedef SCIRun::index_type size_type
 
typedef std::vector< index_typearray_type
 
typedef std::vector< size_typedimension_type
 
typedef boost::shared_ptr
< MeshFacade< VMesh > > 
MeshFacadeHandle
 

Public Member Functions

 HexVolMesh ()
 Construct a new mesh. More...
 
 HexVolMesh (const HexVolMesh &copy)
 Copy a mesh, needed for detaching the mesh from a field. More...
 
virtual HexVolMeshclone () const
 
virtual ~HexVolMesh ()
 Destructor. More...
 
virtual VMeshvmesh ()
 Access point to virtual interface. More...
 
MeshFacadeHandle getFacade () const
 
virtual int basis_order ()
 
virtual int dimensionality () const
 Topological dimension. More...
 
virtual int topology_geometry () const
 
virtual Core::Geometry::BBox get_bounding_box () const
 Get the bounding box of the field. More...
 
virtual void get_canonical_transform (Core::Geometry::Transform &t) const
 
virtual void transform (const Core::Geometry::Transform &t)
 Transform a field (transform all nodes using this transformation matrix) More...
 
virtual bool is_editable () const
 Check whether mesh can be altered by adding nodes or elements. More...
 
virtual bool has_normals () const
 Has this mesh normals. More...
 
virtual bool has_face_normals () const
 Has this mesh face normals. More...
 
double get_epsilon () const
 
virtual bool synchronize (mask_type mask)
 
virtual bool unsynchronize (mask_type sync)
 
bool clear_synchronization ()
 
Basis & get_basis ()
 Get the basis class. More...
 
void begin (typename Node::iterator &) const
 begin/end iterators More...
 
void begin (typename Edge::iterator &) const
 
void begin (typename Face::iterator &) const
 
void begin (typename Cell::iterator &) const
 
void end (typename Node::iterator &) const
 
void end (typename Edge::iterator &) const
 
void end (typename Face::iterator &) const
 
void end (typename Cell::iterator &) const
 
void size (typename Node::size_type &) const
 Get the iteration sizes. More...
 
void size (typename Edge::size_type &) const
 
void size (typename Face::size_type &) const
 
void size (typename Cell::size_type &) const
 
void to_index (typename Node::index_type &index, index_type i) const
 
void to_index (typename Edge::index_type &index, index_type i) const
 
void to_index (typename Face::index_type &index, index_type i) const
 
void to_index (typename Cell::index_type &index, index_type i) const
 
void get_nodes (typename Node::array_type &array, typename Node::index_type idx) const
 Get the child topology elements of the given topology. More...
 
void get_nodes (typename Node::array_type &array, typename Edge::index_type idx) const
 
void get_nodes (typename Node::array_type &array, typename Face::index_type idx) const
 
void get_nodes (typename Node::array_type &array, typename Cell::index_type idx) const
 
void get_edges (typename Edge::array_type &array, typename Node::index_type idx) const
 
void get_edges (typename Edge::array_type &array, typename Edge::index_type idx) const
 
void get_edges (typename Edge::array_type &array, typename Face::index_type idx) const
 
void get_edges (typename Edge::array_type &array, typename Cell::index_type idx) const
 
void get_faces (typename Face::array_type &array, typename Node::index_type idx) const
 
void get_faces (typename Face::array_type &array, typename Edge::index_type idx) const
 
void get_faces (typename Face::array_type &array, typename Face::index_type idx) const
 
void get_faces (typename Face::array_type &array, typename Cell::index_type idx) const
 
void get_cells (typename Cell::array_type &array, typename Node::index_type idx) const
 
void get_cells (typename Cell::array_type &array, typename Edge::index_type idx) const
 
void get_cells (typename Cell::array_type &array, typename Face::index_type idx) const
 
void get_cells (typename Cell::array_type &array, typename Cell::index_type idx) const
 
void get_elems (typename Elem::array_type &array, typename Node::index_type idx) const
 
void get_elems (typename Elem::array_type &array, typename Edge::index_type idx) const
 
void get_elems (typename Elem::array_type &array, typename Face::index_type idx) const
 
void get_elems (typename Elem::array_type &array, typename Cell::index_type idx) const
 
void get_delems (typename DElem::array_type &array, typename Node::index_type idx) const
 
void get_delems (typename DElem::array_type &array, typename Edge::index_type idx) const
 
void get_delems (typename DElem::array_type &array, typename Face::index_type idx) const
 
void get_delems (typename DElem::array_type &array, typename Cell::index_type idx) const
 
template<class VECTOR , class INDEX >
void pwl_approx_edge (std::vector< VECTOR > &coords, INDEX ci, unsigned int which_edge, unsigned int div_per_unit) const
 
template<class VECTOR , class INDEX >
void pwl_approx_face (std::vector< std::vector< VECTOR > > &coords, INDEX ci, unsigned int which_face, unsigned int div_per_unit) const
 
void get_center (Core::Geometry::Point &result, typename Node::index_type idx) const
 get the center point (in object space) of an element More...
 
void get_center (Core::Geometry::Point &result, typename Edge::index_type idx) const
 
void get_center (Core::Geometry::Point &result, typename Face::index_type idx) const
 
void get_center (Core::Geometry::Point &result, typename Cell::index_type idx) const
 
double get_size (typename Node::index_type) const
 Get the size of an element (length, area, volume) More...
 
double get_size (typename Edge::index_type idx) const
 
double get_size (typename Face::index_type idx) const
 
double get_size (typename Cell::index_type idx) const
 
double get_length (typename Edge::index_type idx) const
 More specific names for get_size. More...
 
double get_area (typename Face::index_type idx) const
 
double get_volume (typename Cell::index_type idx) const
 
bool get_neighbor (typename Elem::index_type &neighbor, typename Elem::index_type elem, typename DElem::index_type delem) const
 Get neighbors of an element or a node. More...
 
void get_neighbors (std::vector< typename Node::index_type > &array, typename Node::index_type node) const
 These are more general neighbor functions. More...
 
bool get_neighbors (std::vector< typename Elem::index_type > &array, typename Elem::index_type elem, typename DElem::index_type delem) const
 
void get_neighbors (typename Elem::array_type &array, typename Elem::index_type elem) const
 
bool locate (typename Node::index_type &idx, const Core::Geometry::Point &p) const
 Locate a point in a mesh, find which is the closest node. More...
 
bool locate (typename Edge::index_type &idx, const Core::Geometry::Point &p) const
 
bool locate (typename Face::index_type &idx, const Core::Geometry::Point &p) const
 
bool locate (typename Cell::index_type &idx, const Core::Geometry::Point &p) const
 
bool locate (typename Elem::index_type &elem, std::vector< double > &coords, const Core::Geometry::Point &p) const
 
int get_weights (const Core::Geometry::Point &p, typename Node::array_type &l, double *w) const
 
int get_weights (const Core::Geometry::Point &, typename Edge::array_type &, double *) const
 
int get_weights (const Core::Geometry::Point &, typename Face::array_type &, double *) const
 
int get_weights (const Core::Geometry::Point &p, typename Cell::array_type &l, double *w) const
 
void get_point (Core::Geometry::Point &result, typename Node::index_type index) const
 Access the nodes of the mesh. More...
 
void set_point (const Core::Geometry::Point &point, typename Node::index_type index)
 
void get_random_point (Core::Geometry::Point &p, typename Elem::index_type i, FieldRNG &r) const
 
void get_normal (Core::Geometry::Vector &, typename Node::index_type) const
 Normals for visualizations. More...
 
template<class VECTOR , class INDEX1 , class INDEX2 >
void get_normal (Core::Geometry::Vector &result, VECTOR &coords, INDEX1 eidx, INDEX2 fidx) const
 Get the normals at the outside of the element. More...
 
Node::index_type add_point (const Core::Geometry::Point &p)
 Add a new node to the mesh. More...
 
Node::index_type add_node (const Core::Geometry::Point &p)
 
template<class ARRAY >
Elem::index_type add_elem (ARRAY a)
 Add a new element to the mesh. More...
 
void node_reserve (size_type s)
 
void elem_reserve (size_type s)
 
void resize_nodes (size_type s)
 
void resize_elems (size_type s)
 
template<class VECTOR , class INDEX >
bool get_coords (VECTOR &coords, const Core::Geometry::Point &p, INDEX idx) const
 
template<class VECTOR , class INDEX >
void interpolate (Core::Geometry::Point &pt, const VECTOR &coords, INDEX idx) const
 
template<class VECTOR1 , class INDEX , class VECTOR2 >
void derivate (const VECTOR1 &coords, INDEX idx, VECTOR2 &J) const
 
template<class VECTOR , class INDEX >
double det_jacobian (const VECTOR &coords, INDEX idx) const
 
template<class VECTOR , class INDEX >
void jacobian (const VECTOR &coords, INDEX idx, double *J) const
 
template<class VECTOR , class INDEX >
double inverse_jacobian (const VECTOR &coords, INDEX idx, double *Ji) const
 
template<class INDEX >
double scaled_jacobian_metric (INDEX idx) const
 
template<class INDEX >
double jacobian_metric (INDEX idx) const
 
template<class INDEX >
bool find_closest_node (double &pdist, Core::Geometry::Point &result, INDEX &node, const Core::Geometry::Point &p) const
 
template<class INDEX >
bool find_closest_node (double &pdist, Core::Geometry::Point &result, INDEX &node, const Core::Geometry::Point &p, double maxdist) const
 
template<class ARRAY >
bool find_closest_nodes (ARRAY &nodes, const Core::Geometry::Point &p, double maxdist) const
 
template<class ARRAY1 , class ARRAY2 >
bool find_closest_nodes (ARRAY1 &distances, ARRAY2 &nodes, const Core::Geometry::Point &p, double maxdist) const
 
template<class INDEX , class ARRAY >
bool find_closest_elem (double &pdist, Core::Geometry::Point &result, ARRAY &coords, INDEX &elem, const Core::Geometry::Point &p) const
 Find the closest element to a point. More...
 
template<class INDEX , class ARRAY >
bool find_closest_elem (double &pdist, Core::Geometry::Point &result, ARRAY &coords, INDEX &elem, const Core::Geometry::Point &p, double maxdist) const
 Find the closest element to a point. More...
 
template<class INDEX >
bool find_closest_elem (double &pdist, Core::Geometry::Point &result, INDEX &elem, const Core::Geometry::Point &p) const
 
template<class ARRAY >
bool find_closest_elems (double &, Core::Geometry::Point &, ARRAY &, const Core::Geometry::Point &) const
 Find the closest elements to a point. More...
 
virtual void io (Piostream &)
 Export this class using the old Pio system. More...
 
virtual std::string dynamic_type_name () const
 
virtual const TypeDescriptionget_type_description () const
 
bool get_face (typename Face::index_type &array, typename Node::index_type n1, typename Node::index_type n2, typename Node::index_type n3, typename Node::index_type n4) const
 Trying figure out which face is made out of 4 nodes (?) More...
 
template<class Iter , class Functor >
void fill_points (Iter begin, Iter end, Functor fill_ftor)
 
template<class Iter , class Functor >
void fill_cells (Iter begin, Iter end, Functor fill_ftor)
 
template<class Iter , class Functor >
void fill_neighbors (Iter begin, Iter end, Functor fill_ftor)
 
template<class Iter , class Functor >
void fill_data (Iter begin, Iter end, Functor fill_ftor)
 
Node::index_type add_find_point (const Core::Geometry::Point &p, double err=1.0e-6)
 
Elem::index_type add_hex (typename Node::index_type a, typename Node::index_type b, typename Node::index_type c, typename Node::index_type d, typename Node::index_type e, typename Node::index_type f, typename Node::index_type g, typename Node::index_type h)
 
Elem::index_type add_hex (const Core::Geometry::Point &p0, const Core::Geometry::Point &p1, const Core::Geometry::Point &p2, const Core::Geometry::Point &p3, const Core::Geometry::Point &p4, const Core::Geometry::Point &p5, const Core::Geometry::Point &p6, const Core::Geometry::Point &p7)
 
std::vector
< Core::Geometry::Point > & 
get_points ()
 must detach, if altering points! More...
 
int compute_checksum ()
 
- Public Member Functions inherited from Mesh
 Mesh ()
 
 Mesh (const Mesh &copy)
 
virtual ~Mesh ()
 
void io (Piostream &stream)
 Persistent I/O. More...
 
- Public Member Functions inherited from Datatype
 Datatype ()
 
virtual ~Datatype ()
 
 Datatype (const Datatype &other)
 
Datatypeoperator= (const Datatype &rhs)
 
template<typename T >
const T * as () const
 
- Public Member Functions inherited from Persistent
virtual ~Persistent ()
 
- Public Member Functions inherited from HasId< IdType, IdGenerator >
 HasId ()
 
IdType id () const
 

Static Public Member Functions

static const std::string type_name (int n=-1)
 Core functionality for getting the name of a templated mesh class. More...
 
static const TypeDescriptionnode_type_description ()
 
static const TypeDescriptionedge_type_description ()
 
static const TypeDescriptionface_type_description ()
 
static const TypeDescriptioncell_type_description ()
 
static const TypeDescriptionelem_type_description ()
 
static Persistentmaker ()
 This function returns a maker for Pio. More...
 
static MeshHandle mesh_maker ()
 This function returns a handle for the virtual interface. More...
 
- Static Public Member Functions inherited from Mesh
static const std::string type_name (int n=-1)
 
- Static Public Member Functions inherited from Persistent
static PersistentTypeIDPtr find_derived (const std::string &classname, const std::string &basename)
 
static bool is_base_of (const std::string &parent, const std::string &type)
 
static void add_class (const std::string &type, const std::string &parent, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0)
 
static void add_mesh_class (const std::string &type, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0)
 
static void add_field_class (const std::string &type, Persistent *(*maker)(), Persistent *(*bc_maker1)()=0, Persistent *(*bc_maker2)()=0)
 

Static Public Attributes

static PersistentTypeID hexvolmesh_typeid
 These IDs are created as soon as this class will be instantiated. More...
 
- Static Public Attributes inherited from Mesh
static PersistentTypeID type_id
 

Protected Types

typedef std::map< PFace,
typename Face::index_type,
FaceHash
face_ht
 
typedef std::map< PFaceNode,
typename Face::index_type,
FaceHash
face_nt
 
typedef std::map< PEdge,
typename Edge::index_type,
EdgeHash
edge_ht
 
typedef std::map< PEdgeNode,
typename Edge::index_type,
EdgeHash
edge_nt
 
typedef std::vector< PFaceCellface_ct
 
typedef std::vector< PEdgeCelledge_ct
 

Protected Member Functions

template<class ARRAY , class INDEX >
void get_nodes_from_edge (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_nodes_from_face (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_nodes_from_cell (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_nodes_from_elem (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_edges_from_face (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_edges_from_cell (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_edges_from_elem (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_faces_from_cell (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_cells_from_node (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_edges_from_node (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_faces_from_edge (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_faces_from_node (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_cells_from_edge (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
void get_cells_from_face (ARRAY &array, INDEX idx) const
 
template<class ARRAY , class INDEX >
bool get_cell_from_nodes (INDEX &, ARRAY &) const
 
template<class ARRAY , class INDEX >
bool get_face_from_nodes (INDEX &idx, ARRAY &array) const
 
template<class ARRAY , class INDEX >
bool get_edge_from_nodes (INDEX &idx, ARRAY &array) const
 
template<class ARRAY , class INDEX >
void set_nodes_by_elem (ARRAY &array, INDEX idx)
 
template<class INDEX1 , class INDEX2 >
bool get_elem_neighbor (INDEX1 &neighbor, INDEX1 elem, INDEX2 delem) const
 
template<class ARRAY , class INDEX1 , class INDEX2 >
bool get_elem_neighbors (ARRAY &array, INDEX1 elem, INDEX2 delem) const
 
template<class ARRAY , class INDEX >
void get_elem_neighbors (ARRAY &array, INDEX elem) const
 
template<class ARRAY , class INDEX >
void get_node_neighbors (ARRAY &array, INDEX node) const
 We should optimize this function more. More...
 
template<class INDEX >
bool locate_node (INDEX &node, const Core::Geometry::Point &p) const
 
template<class INDEX >
bool locate_edge (INDEX &edge, const Core::Geometry::Point &p) const
 
template<class INDEX >
bool locate_face (INDEX &face, const Core::Geometry::Point &p) const
 
template<class INDEX >
bool locate_elem (INDEX &elem, const Core::Geometry::Point &p) const
 
template<class ARRAY >
bool locate_elems (ARRAY &array, const Core::Geometry::BBox &b) const
 
template<class INDEX , class ARRAY >
bool locate_elem (INDEX &elem, ARRAY &coords, const Core::Geometry::Point &p) const
 
template<class INDEX >
void get_node_center (Core::Geometry::Point &p, INDEX idx) const
 
template<class INDEX >
void get_edge_center (Core::Geometry::Point &p, INDEX idx) const
 
template<class INDEX >
void get_face_center (Core::Geometry::Point &p, INDEX idx) const
 
template<class INDEX >
void get_cell_center (Core::Geometry::Point &p, INDEX idx) const
 
void compute_node_neighbors ()
 
void compute_edges ()
 
void compute_faces ()
 
void compute_node_grid ()
 
void compute_elem_grid ()
 
void compute_bounding_box ()
 
void insert_elem_into_grid (typename Elem::index_type ci)
 
void remove_elem_from_grid (typename Elem::index_type ci)
 
void insert_node_into_grid (typename Node::index_type ci)
 
void remove_node_from_grid (typename Node::index_type ci)
 
const Core::Geometry::Pointpoint (typename Node::index_type i) const
 
template<class INDEX >
bool inside (INDEX idx, const Core::Geometry::Point &p) const
 
void hash_edge (typename Node::index_type n1, typename Node::index_type n2, index_type combind_index, edge_ht &table) const
 
void hash_face (typename Node::index_type n1, typename Node::index_type n2, typename Node::index_type n3, typename Node::index_type n4, index_type combined_index, face_ht &table) const
 
template<class INDEX >
bool order_face_nodes (INDEX &n1, INDEX &n2, INDEX &n3, INDEX &n4) const
 

Protected Attributes

std::vector
< Core::Geometry::Point
points_
 all the nodes. More...
 
std::vector< under_typecells_
 each 8 indecies make up a Hex More...
 
face_ct faces_
 
face_nt face_table_
 
edge_ct edges_
 
edge_nt edge_table_
 
std::vector< std::vector
< typename Cell::index_type > > 
node_neighbors_
 
std::vector< unsigned char > boundary_faces_
 
boost::shared_ptr< SearchGridT
< index_type > > 
node_grid_
 
boost::shared_ptr< SearchGridT
< index_type > > 
elem_grid_
 
Core::Thread::Mutex synchronize_lock_
 
Core::Thread::ConditionVariable synchronize_cond_
 
mask_type synchronized_
 
mask_type synchronizing_
 
Basis basis_
 
Core::Geometry::BBox bbox_
 
double epsilon_
 
double epsilon2_
 
double epsilon3_
 
boost::shared_ptr< VMeshvmesh_
 Pointer to virtual interface. More...
 

Static Protected Attributes

static const int sz_int = sizeof(int) * 8
 

Friends

template<class MESH >
class VHexVolMesh
 Make sure the virtual interface has access. More...
 
template<class MESH >
class VMeshShared
 
template<class MESH >
class VUnstructuredMesh
 
class ElemData
 
class Synchronize
 

Detailed Description

template<class Basis>
class SCIRun::HexVolMesh< Basis >

Functions for creating the virtual interface Declare the functions that instantiate the virtual interface

Member Typedef Documentation

typedef Basis basis_type
typedef Face DElem
typedef std::vector<PEdgeCell> edge_ct
protected
typedef std::map<PEdge, typename Edge::index_type, EdgeHash> edge_ht
protected
typedef std::map<PEdgeNode, typename Edge::index_type, EdgeHash> edge_nt
protected
typedef Cell Elem

Elem refers to the most complex topological object DElem refers to object just below Elem in the topological hierarchy

typedef std::vector<PFaceCell> face_ct
protected
typedef std::map<PFace, typename Face::index_type, FaceHash> face_ht
protected

Define the hash_map type, as this is not yet an approved type under Windows it is located in stdext

typedef std::map<PFaceNode, typename Face::index_type, FaceHash> face_nt
protected
typedef boost::shared_ptr<HexVolMesh<Basis> > handle_type

Constructor & Destructor Documentation

Construct a new mesh.

Initialize the virtual interface when the mesh is created

HexVolMesh ( const HexVolMesh< Basis > &  copy)

Copy a mesh, needed for detaching the mesh from a field.

Ugly construction circumventing const

We need to lock before we can copy these as these structures are generate dynamically when they are needed.

Create a new virtual interface for this copy all pointers have changed hence create a new virtual interface class

~HexVolMesh ( )
virtual

Destructor.

Member Function Documentation

Elem::index_type add_elem ( ARRAY  a)
inline

Add a new element to the mesh.

HexVolMesh< Basis >::Node::index_type add_find_point ( const Core::Geometry::Point p,
double  err = 1.0e-6 
)
HexVolMesh< Basis >::Elem::index_type add_hex ( typename Node::index_type  a,
typename Node::index_type  b,
typename Node::index_type  c,
typename Node::index_type  d,
typename Node::index_type  e,
typename Node::index_type  f,
typename Node::index_type  g,
typename Node::index_type  h 
)
HexVolMesh< Basis >::Elem::index_type add_hex ( const Core::Geometry::Point p0,
const Core::Geometry::Point p1,
const Core::Geometry::Point p2,
const Core::Geometry::Point p3,
const Core::Geometry::Point p4,
const Core::Geometry::Point p5,
const Core::Geometry::Point p6,
const Core::Geometry::Point p7 
)
Node::index_type add_node ( const Core::Geometry::Point p)
inline
HexVolMesh< Basis >::Node::index_type add_point ( const Core::Geometry::Point p)

Add a new node to the mesh.

virtual int basis_order ( )
inlinevirtual

This one should go at some point, should be reroute through the virtual interface

Reimplemented from Mesh.

void begin ( typename Node::iterator itr) const

begin/end iterators

void begin ( typename Edge::iterator itr) const
void begin ( typename Face::iterator itr) const
void begin ( typename Cell::iterator itr) const
const TypeDescription * cell_type_description ( )
static
bool clear_synchronization ( )
virtual HexVolMesh* clone ( ) const
inlinevirtual

Clone function for detaching the mesh and automatically generating a new version if needed.

Implements Mesh.

void compute_bounding_box ( )
protected
int compute_checksum ( )
void compute_edges ( )
protected
void compute_elem_grid ( )
protected
void compute_faces ( )
protected
void compute_node_grid ( )
protected
void compute_node_neighbors ( )
protected
void derivate ( const VECTOR1 &  coords,
INDEX  idx,
VECTOR2 &  J 
) const
inline

Interpolate the derivate of the function, This infact will return the jacobian of the local to global coordinate transformation. This function is mainly intended for the non linear elements

double det_jacobian ( const VECTOR &  coords,
INDEX  idx 
) const
inline

Get the determinant of the jacobian, which is the local volume of an element and is intended to help with the integration of functions over an element.

virtual int dimensionality ( ) const
inlinevirtual

Topological dimension.

virtual std::string dynamic_type_name ( ) const
inlinevirtual
const TypeDescription * edge_type_description ( )
static
void elem_reserve ( size_type  s)
inline
static const TypeDescription* elem_type_description ( )
inlinestatic
void end ( typename Node::iterator itr) const
void end ( typename Edge::iterator itr) const
void end ( typename Face::iterator itr) const
void end ( typename Cell::iterator itr) const
const TypeDescription * face_type_description ( )
static
void fill_cells ( Iter  begin,
Iter  end,
Functor  fill_ftor 
)
void fill_data ( Iter  begin,
Iter  end,
Functor  fill_ftor 
)
void fill_neighbors ( Iter  begin,
Iter  end,
Functor  fill_ftor 
)
void fill_points ( Iter  begin,
Iter  end,
Functor  fill_ftor 
)

Functions for Cubit WE SHOULD MAKE THESE GENERAL AND IN EVERY MESHTYPE

bool find_closest_elem ( double &  pdist,
Core::Geometry::Point result,
ARRAY &  coords,
INDEX &  elem,
const Core::Geometry::Point p 
) const
inline

Find the closest element to a point.

bool find_closest_elem ( double &  pdist,
Core::Geometry::Point result,
ARRAY &  coords,
INDEX &  elem,
const Core::Geometry::Point p,
double  maxdist 
) const
inline

Find the closest element to a point.

If there are no nodes we cannot find a closest point

Check whether the estimate given in idx is the point we are looking for

We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells

bool find_closest_elem ( double &  pdist,
Core::Geometry::Point result,
INDEX &  elem,
const Core::Geometry::Point p 
) const
inline
bool find_closest_elems ( double &  ,
Core::Geometry::Point ,
ARRAY &  ,
const Core::Geometry::Point  
) const
inline

Find the closest elements to a point.

bool find_closest_node ( double &  pdist,
Core::Geometry::Point result,
INDEX &  node,
const Core::Geometry::Point p 
) const
inline
bool find_closest_node ( double &  pdist,
Core::Geometry::Point result,
INDEX &  node,
const Core::Geometry::Point p,
double  maxdist 
) const
inline

If there are no nodes we cannot find the closest one

We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells

If we are closer than eps^2 we found a node close enough

bool find_closest_nodes ( ARRAY &  nodes,
const Core::Geometry::Point p,
double  maxdist 
) const
inline
bool find_closest_nodes ( ARRAY1 &  distances,
ARRAY2 &  nodes,
const Core::Geometry::Point p,
double  maxdist 
) const
inline
double get_area ( typename Face::index_type  idx) const
inline
Basis& get_basis ( )
inline

Get the basis class.

Core::Geometry::BBox get_bounding_box ( ) const
virtual

Get the bounding box of the field.

void get_canonical_transform ( Core::Geometry::Transform t) const
virtual

Return the transformation that takes a 0-1 space bounding box to the current bounding box of this mesh.

void get_cell_center ( Core::Geometry::Point p,
INDEX  idx 
) const
inlineprotected

NEED TO CLEAN UP THIS CODE NEED TO FILTER OUT DEGENERATE ELEMENTS

bool get_cell_from_nodes ( INDEX &  ,
ARRAY &   
) const
inlineprotected
void get_cells ( typename Cell::array_type array,
typename Node::index_type  idx 
) const
inline
void get_cells ( typename Cell::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_cells ( typename Cell::array_type array,
typename Face::index_type  idx 
) const
inline
void get_cells ( typename Cell::array_type array,
typename Cell::index_type  idx 
) const
inline
void get_cells_from_edge ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_cells_from_face ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_cells_from_node ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_center ( Core::Geometry::Point result,
typename Node::index_type  idx 
) const
inline

get the center point (in object space) of an element

void get_center ( Core::Geometry::Point result,
typename Edge::index_type  idx 
) const
inline
void get_center ( Core::Geometry::Point result,
typename Face::index_type  idx 
) const
inline
void get_center ( Core::Geometry::Point result,
typename Cell::index_type  idx 
) const
inline
bool get_coords ( VECTOR &  coords,
const Core::Geometry::Point p,
INDEX  idx 
) const
inline

Get the local coordinates for a certain point within an element This function uses a couple of newton iterations to find the local coordinate of a point

void get_delems ( typename DElem::array_type array,
typename Node::index_type  idx 
) const
inline
void get_delems ( typename DElem::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_delems ( typename DElem::array_type array,
typename Face::index_type  idx 
) const
inline
void get_delems ( typename DElem::array_type array,
typename Cell::index_type  idx 
) const
inline
void get_edge_center ( Core::Geometry::Point p,
INDEX  idx 
) const
inlineprotected
bool get_edge_from_nodes ( INDEX &  idx,
ARRAY &  array 
) const
inlineprotected
void get_edges ( typename Edge::array_type array,
typename Node::index_type  idx 
) const
inline
void get_edges ( typename Edge::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_edges ( typename Edge::array_type array,
typename Face::index_type  idx 
) const
inline
void get_edges ( typename Edge::array_type array,
typename Cell::index_type  idx 
) const
inline
void get_edges_from_cell ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_edges_from_elem ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_edges_from_face ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_edges_from_node ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
bool get_elem_neighbor ( INDEX1 &  neighbor,
INDEX1  elem,
INDEX2  delem 
) const
inlineprotected
bool get_elem_neighbors ( ARRAY &  array,
INDEX1  elem,
INDEX2  delem 
) const
inlineprotected
void get_elem_neighbors ( ARRAY &  array,
INDEX  elem 
) const
inlineprotected
void get_elems ( typename Elem::array_type array,
typename Node::index_type  idx 
) const
inline
void get_elems ( typename Elem::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_elems ( typename Elem::array_type array,
typename Face::index_type  idx 
) const
inline
void get_elems ( typename Elem::array_type array,
typename Cell::index_type  idx 
) const
inline
double get_epsilon ( ) const
inline
bool get_face ( typename Face::index_type array,
typename Node::index_type  n1,
typename Node::index_type  n2,
typename Node::index_type  n3,
typename Node::index_type  n4 
) const

Trying figure out which face is made out of 4 nodes (?)

void get_face_center ( Core::Geometry::Point p,
INDEX  idx 
) const
inlineprotected

NEED TO CLEAN UP THIS CODE NEED TO FILTER OUT DEGENERATE FACES

bool get_face_from_nodes ( INDEX &  idx,
ARRAY &  array 
) const
inlineprotected
void get_faces ( typename Face::array_type array,
typename Node::index_type  idx 
) const
inline
void get_faces ( typename Face::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_faces ( typename Face::array_type array,
typename Face::index_type  idx 
) const
inline
void get_faces ( typename Face::array_type array,
typename Cell::index_type  idx 
) const
inline
void get_faces_from_cell ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_faces_from_edge ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_faces_from_node ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
double get_length ( typename Edge::index_type  idx) const
inline

More specific names for get_size.

bool get_neighbor ( typename Elem::index_type neighbor,
typename Elem::index_type  elem,
typename DElem::index_type  delem 
) const
inline

Get neighbors of an element or a node.

THIS ONE IS FLAWED AS IN 3D SPACE FOR AND ELEMENT TYPE THAT IS NOT A VOLUME. HENCE IT WORKS HERE, BUT GENERALLY IT IS FLAWED AS IT ASSUMES ONLY ONE NEIGHBOR, WHEREAS FOR ANYTHING ELSE THAN A FACE THERE CAN BE MULTIPLE

void get_neighbors ( std::vector< typename Node::index_type > &  array,
typename Node::index_type  node 
) const
inline

These are more general neighbor functions.

bool get_neighbors ( std::vector< typename Elem::index_type > &  array,
typename Elem::index_type  elem,
typename DElem::index_type  delem 
) const
inline
void get_neighbors ( typename Elem::array_type array,
typename Elem::index_type  elem 
) const
inline
void get_node_center ( Core::Geometry::Point p,
INDEX  idx 
) const
inlineprotected
void get_node_neighbors ( ARRAY &  array,
INDEX  node 
) const
inlineprotected

We should optimize this function more.

void get_nodes ( typename Node::array_type array,
typename Node::index_type  idx 
) const
inline

Get the child topology elements of the given topology.

void get_nodes ( typename Node::array_type array,
typename Edge::index_type  idx 
) const
inline
void get_nodes ( typename Node::array_type array,
typename Face::index_type  idx 
) const
inline
void get_nodes ( typename Node::array_type array,
typename Cell::index_type  idx 
) const
inline
void get_nodes_from_cell ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_nodes_from_edge ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_nodes_from_elem ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_nodes_from_face ( ARRAY &  array,
INDEX  idx 
) const
inlineprotected
void get_normal ( Core::Geometry::Vector ,
typename Node::index_type   
) const
inline

Normals for visualizations.

void get_normal ( Core::Geometry::Vector result,
VECTOR &  coords,
INDEX1  eidx,
INDEX2  fidx 
) const
inline

Get the normals at the outside of the element.

void get_point ( Core::Geometry::Point result,
typename Node::index_type  index 
) const
inline

Access the nodes of the mesh.

std::vector<Core::Geometry::Point>& get_points ( )
inline

must detach, if altering points!

void get_random_point ( Core::Geometry::Point p,
typename Elem::index_type  i,
FieldRNG r 
) const
double get_size ( typename Node::index_type  ) const
inline

Get the size of an element (length, area, volume)

double get_size ( typename Edge::index_type  idx) const
inline
double get_size ( typename Face::index_type  idx) const
inline
Todo:
: This code is incorrect need to create a better call in basis functions
double get_size ( typename Cell::index_type  idx) const
inline
const TypeDescription * get_type_description ( ) const
virtual

Type description, used for finding names of the mesh class for dynamic compilation purposes. Some of this should be obsolete Persistent IO

Implements Mesh.

double get_volume ( typename Cell::index_type  idx) const
inline
int get_weights ( const Core::Geometry::Point p,
typename Node::array_type l,
double *  w 
) const

These should become obsolete soon, they do not follow the concept of the basis functions....

int get_weights ( const Core::Geometry::Point p,
typename Edge::array_type l,
double *  w 
) const
inline
int get_weights ( const Core::Geometry::Point ,
typename Face::array_type ,
double *   
) const
inline
int get_weights ( const Core::Geometry::Point p,
typename Cell::array_type l,
double *  w 
) const
MeshFacadeHandle getFacade ( ) const
inlinevirtual

Implements Mesh.

virtual bool has_face_normals ( ) const
inlinevirtual

Has this mesh face normals.

virtual bool has_normals ( ) const
inlinevirtual

Has this mesh normals.

void hash_edge ( typename Node::index_type  n1,
typename Node::index_type  n2,
index_type  combind_index,
edge_ht table 
) const
inlineprotected
void hash_face ( typename Node::index_type  n1,
typename Node::index_type  n2,
typename Node::index_type  n3,
typename Node::index_type  n4,
index_type  combined_index,
face_ht table 
) const
inlineprotected
void insert_elem_into_grid ( typename Elem::index_type  ci)
protected
Todo:
: This can crash if you insert a new cell outside of the grid.
void insert_node_into_grid ( typename Node::index_type  ci)
protected
Todo:
: This can crash if you insert a new cell outside of the grid.
bool inside ( INDEX  idx,
const Core::Geometry::Point p 
) const
inlineprotected
void interpolate ( Core::Geometry::Point pt,
const VECTOR &  coords,
INDEX  idx 
) const
inline

Find the location in the global coordinate system for a local coordinate This function is the opposite of get_coords.

double inverse_jacobian ( const VECTOR &  coords,
INDEX  idx,
double *  Ji 
) const
inline

Get the inverse jacobian of the transformation. This one is needed to translate local gradients into global gradients. Hence it is crucial for calculating gradients of fields, or constructing finite elements.

void io ( Piostream stream)
virtual

Export this class using the old Pio system.

Reimplemented from Persistent.

virtual bool is_editable ( ) const
inlinevirtual

Check whether mesh can be altered by adding nodes or elements.

void jacobian ( const VECTOR &  coords,
INDEX  idx,
double *  J 
) const
inline

Get the jacobian of the transformation. In case one wants the non inverted version of this matrix. This is currentl here for completeness of the interface

double jacobian_metric ( INDEX  idx) const
inline
bool locate ( typename Node::index_type idx,
const Core::Geometry::Point p 
) const
inline

Locate a point in a mesh, find which is the closest node.

bool locate ( typename Edge::index_type idx,
const Core::Geometry::Point p 
) const
inline
bool locate ( typename Face::index_type idx,
const Core::Geometry::Point p 
) const
inline
bool locate ( typename Cell::index_type idx,
const Core::Geometry::Point p 
) const
inline
bool locate ( typename Elem::index_type elem,
std::vector< double > &  coords,
const Core::Geometry::Point p 
) const
inline
bool locate_edge ( INDEX &  edge,
const Core::Geometry::Point p 
) const
inlineprotected
Todo:
: Fix this function, needs to use search grid
bool locate_elem ( INDEX &  elem,
const Core::Geometry::Point p 
) const
inlineprotected
Todo:
: Generate bounding boxes for elements and integrate this into the

If there are no nodes we cannot find a closest point

Check whether the estimate given in idx is the point we are looking for

bool locate_elem ( INDEX &  elem,
ARRAY &  coords,
const Core::Geometry::Point p 
) const
inlineprotected
Todo:
: Generate bounding boxes for elements and integrate this into the

If there are no nodes we cannot find a closest point

Check whether the estimate given in idx is the point we are looking for

bool locate_elems ( ARRAY &  array,
const Core::Geometry::BBox b 
) const
inlineprotected
bool locate_face ( INDEX &  face,
const Core::Geometry::Point p 
) const
inlineprotected
Todo:
: Fix this function, needs to use search grid
bool locate_node ( INDEX &  node,
const Core::Geometry::Point p 
) const
inlineprotected

If there are no nodes we cannot find a closest point

Check first guess

We need to do a full shell without any elements that are closer to make sure there no closer elements in neighboring searchgrid cells

static Persistent* maker ( )
inlinestatic

This function returns a maker for Pio.

static MeshHandle mesh_maker ( )
inlinestatic

This function returns a handle for the virtual interface.

void node_reserve ( size_type  s)
inline

Functions to improve memory management. Often one knows how many nodes/elements one needs, prereserving memory is often possible.

const TypeDescription * node_type_description ( )
static
bool order_face_nodes ( INDEX &  n1,
INDEX &  n2,
INDEX &  n3,
INDEX &  n4 
) const
inlineprotected
const Core::Geometry::Point& point ( typename Node::index_type  i) const
inlineprotected
void pwl_approx_edge ( std::vector< VECTOR > &  coords,
INDEX  ci,
unsigned int  which_edge,
unsigned int  div_per_unit 
) const
inline

Generate the list of points that make up a sufficiently accurate piecewise linear approximation of an edge.

void pwl_approx_face ( std::vector< std::vector< VECTOR > > &  coords,
INDEX  ci,
unsigned int  which_face,
unsigned int  div_per_unit 
) const
inline

Generate the list of points that make up a sufficiently accurate piecewise linear approximation of an face.

void remove_elem_from_grid ( typename Elem::index_type  ci)
protected
void remove_node_from_grid ( typename Node::index_type  ci)
protected
void resize_elems ( size_type  s)
inline
void resize_nodes ( size_type  s)
inline
double scaled_jacobian_metric ( INDEX  idx) const
inline
void set_nodes_by_elem ( ARRAY &  array,
INDEX  idx 
)
inlineprotected
void set_point ( const Core::Geometry::Point point,
typename Node::index_type  index 
)
inline
void size ( typename Node::size_type s) const

Get the iteration sizes.

void size ( typename Edge::size_type s) const
void size ( typename Face::size_type s) const
void size ( typename Cell::size_type s) const
bool synchronize ( mask_type  mask)
virtual

Compute tables for doing topology, these need to be synchronized before doing a lot of operations.

Reimplemented from Mesh.

void to_index ( typename Node::index_type index,
index_type  i 
) const
inline

These are here to convert indices to unsigned int counters. Some how the decision was made to use multi dimensional indices in some fields, these functions should deal with different pointer types. Use the virtual interface to avoid all this non sense.

void to_index ( typename Edge::index_type index,
index_type  i 
) const
inline
void to_index ( typename Face::index_type index,
index_type  i 
) const
inline
void to_index ( typename Cell::index_type index,
index_type  i 
) const
inline
virtual int topology_geometry ( ) const
inlinevirtual

What kind of mesh is this structured = no connectivity data regular = no node location data

void transform ( const Core::Geometry::Transform t)
virtual

Transform a field (transform all nodes using this transformation matrix)

const std::string type_name ( int  n = -1)
static

Core functionality for getting the name of a templated mesh class.

bool unsynchronize ( mask_type  sync)
virtual

Reimplemented from Mesh.

virtual VMesh* vmesh ( )
inlinevirtual

Access point to virtual interface.

Reimplemented from Mesh.

Friends And Related Function Documentation

friend class ElemData
friend

Somehow the information of how to interpolate inside an element ended up in a separate class, as they need to share information this construction was created to transfer data. Hopefully in the future this class will disappear again.

friend class Synchronize
friend
friend class VHexVolMesh
friend

Make sure the virtual interface has access.

friend class VMeshShared
friend
friend class VUnstructuredMesh
friend

Member Data Documentation

Basis basis_
protected
Core::Geometry::BBox bbox_
protected
std::vector<unsigned char> boundary_faces_
protected
std::vector<under_type> cells_
protected

each 8 indecies make up a Hex

edge_nt edge_table_
protected
edge_ct edges_
protected

container for edge storage. Must be computed each time nodes or cells change.

boost::shared_ptr<SearchGridT<index_type> > elem_grid_
protected
double epsilon2_
protected
double epsilon3_
protected
double epsilon_
protected
face_nt face_table_
protected
face_ct faces_
protected

container for face storage. Must be computed each time nodes or cells change.

PersistentTypeID hexvolmesh_typeid
static

These IDs are created as soon as this class will be instantiated.

boost::shared_ptr<SearchGridT<index_type> > node_grid_
protected

This grid is used as an acceleration structure to expedite calls to locate. For each cell in the grid, we store a list of which tets overlap that grid cell – to find the tet which contains a point, we simply find which grid cell contains that point, and then search just those tets that overlap that grid cell.

std::vector<std::vector<typename Cell::index_type> > node_neighbors_
protected
std::vector<Core::Geometry::Point> points_
protected

all the nodes.

Core::Thread::ConditionVariable synchronize_cond_
protected
Core::Thread::Mutex synchronize_lock_
protected
mask_type synchronized_
protected
mask_type synchronizing_
protected
const int sz_int = sizeof(int) * 8
staticprotected

hash the egde's node_indecies such that edges with the same nodes hash to the same value. nodes are sorted on edge construction.

boost::shared_ptr<VMesh> vmesh_
protected

Pointer to virtual interface.


The documentation for this class was generated from the following file: