![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef ELEMENT_SEQUENCE_HPP
00002 #define ELEMENT_SEQUENCE_HPP
00003
00004 #include "EntitySequence.hpp"
00005 #include "SequenceData.hpp"
00006 #include "moab/CN.hpp"
00007
00008 namespace moab
00009 {
00010
00011 class ElementSequence : public EntitySequence
00012 {
00013 public:
00014 ElementSequence( EntityHandle start, EntityID count, unsigned int nodes_per_elem, SequenceData* dat )
00015 : EntitySequence( start, count, dat ), nodesPerElement( nodes_per_elem )
00016 {
00017 }
00018
00019 virtual ~ElementSequence() {}
00020
00021 inline unsigned int nodes_per_element() const
00022 {
00023 return nodesPerElement;
00024 }
00025
00026 virtual ErrorCode get_connectivity( EntityHandle handle,
00027 std::vector< EntityHandle >& connect,
00028 bool topological = false ) const = 0;
00029
00030 virtual ErrorCode get_connectivity( EntityHandle handle,
00031 EntityHandle const*& connect,
00032 int& connect_length,
00033 bool topological = false,
00034 std::vector< EntityHandle >* storage = 0 ) const = 0;
00035
00036 virtual ErrorCode set_connectivity( EntityHandle handle, EntityHandle const* connect, int connect_length ) = 0;
00037
00038 inline EntityHandle const* get_connectivity_array() const;
00039
00040 virtual EntityHandle* get_connectivity_array() = 0;
00041
00042 inline bool has_mid_edge_nodes() const;
00043 inline bool has_mid_face_nodes() const;
00044 inline bool has_mid_volume_nodes() const;
00045
00046 protected:
00047 ElementSequence( ElementSequence& split_from, EntityHandle here )
00048 : EntitySequence( split_from, here ), nodesPerElement( split_from.nodesPerElement )
00049 {
00050 }
00051
00052 private:
00053 unsigned nodesPerElement;
00054 };
00055
00056 inline EntityHandle const* ElementSequence::get_connectivity_array() const
00057 {
00058 return const_cast< ElementSequence* >( this )->get_connectivity_array();
00059 }
00060
00061 inline bool ElementSequence::has_mid_edge_nodes() const
00062 {
00063 return CN::HasMidEdgeNodes( type(), nodes_per_element() );
00064 }
00065
00066 inline bool ElementSequence::has_mid_face_nodes() const
00067 {
00068 return CN::HasMidFaceNodes( type(), nodes_per_element() );
00069 }
00070
00071 inline bool ElementSequence::has_mid_volume_nodes() const
00072 {
00073 return CN::HasMidRegionNodes( type(), nodes_per_element() );
00074 }
00075
00076 } // namespace moab
00077
00078 #endif