![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef SPHERE_DECOMP_HPP
00002 #define SPHERE_DECOMP_HPP
00003
00004 #include "moab/Interface.hpp"
00005
00006 class SphereDecomp
00007 {
00008 public:
00009 SphereDecomp( moab::Interface* impl );
00010
00011 moab::ErrorCode build_sphere_mesh( const char* sphere_radii_tag_name, moab::EntityHandle* hex_set = NULL );
00012
00013 private:
00014 //! compute subdivision vertices on entities of specified dimension
00015 moab::ErrorCode compute_nodes( const int dim );
00016
00017 //! subdivide tets based on subdiv vertices, returning in lists according
00018 //! to whether they're inside or outside spheres
00019 moab::ErrorCode build_hexes( std::vector< moab::EntityHandle >& sphere_hexes,
00020 std::vector< moab::EntityHandle >& interstic_hexes );
00021
00022 //! subdivide an individual tet
00023 moab::ErrorCode subdivide_tet( moab::EntityHandle tet,
00024 std::vector< moab::EntityHandle >& sphere_hexes,
00025 std::vector< moab::EntityHandle >& interstic_hexes );
00026
00027 //! retrieve the subdivision vertices for a given entity in a given tet,
00028 //! placing them in the array oriented wrt the tet
00029 moab::ErrorCode retrieve_subdiv_verts( moab::EntityHandle tet,
00030 moab::EntityHandle this_ent,
00031 const moab::EntityHandle* tet_conn,
00032 const int dim,
00033 moab::EntityHandle* subdiv_verts );
00034
00035 //! tag used to hold sphere radii (assigned to vertices)
00036 moab::Tag sphereRadiiTag;
00037
00038 //! used to store subdiv vertices for a given d>0 entity
00039 moab::Tag subdivVerticesTag;
00040
00041 //! MOAB interface ptr
00042 moab::Interface* mbImpl;
00043 };
00044 #endif