![]() |
Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
00001 #ifndef __smoab_detail_ReduceSpectralMesh_h
00002 #define __smoab_detail_ReduceSpectralMesh_h
00003
00004 #include "SimpleMoab.h"
00005 #include "vtkCellType.h"
00006
00007 #include
00008 #include
00009
00010 namespace smoab
00011 {
00012 namespace detail
00013 {
00014
00015 class ReduceSpectralMesh
00016 {
00017 public:
00018 ReduceSpectralMeshReduceHighOrderCell( smoab::Range const& cells, moab::Interface* moab )
00019 : LinearCellConnectivity(), HighOrderCellConnectivity()
00020 {
00021 int count = 0;
00022 const std::size_t cellSize = cells.size();
00023 while( count != cellSize )
00024 {
00025 EntityHandle* connectivity;
00026 int numVerts = 0, iterationCount = 0;
00027 //use the highly efficent calls, since we know that are of the same dimension
00028 moab->connect_iterate( cells.begin() + count, cells.end(), connectivity, numVerts, iterationCount );
00029 //if we didn't read anything, break!
00030 if( iterationCount == 0 )
00031 {
00032 break;
00033 }
00034
00035 //identify the cell type that we currently have,
00036 //store that along with the connectivity in a temp storage vector
00037 const moab::EntityType type = moab->type_from_handle( *cells.begin() + count );
00038
00039 //instead of storing the connectivity in a single array,
00040 //what my goal is to have multiple vectors. The first vector
00041 //will hold all the linear cells, while the second vector
00042 //will hold the high order cells.
00043
00044 //Since connect_iterate returns the number of cells of a given
00045 //type that we have read we can also store the RunLegthInfo
00046 //for all the cells allowing us to apply transformations to the
00047 //high order cells efficently in bulk.
00048
00049 //while all these cells are contiously of the same type,
00050 //quadric hexs in vtk have 20 points, but moab has 21 so we
00051 //need to store this difference
00052 }
00053 }
00054
00055 private:
00056 std::vector< EntityHandle > LinearCellConnectivity;
00057 std::vector< EntityHandle > HighOrderCellConnectivity;
00058
00059 std::vector< detail::ContinousCellInfo > LinearCellInfo;
00060 std::vector< detail::ContinousCellInfo > HighOrderCellInfo;
00061 }
00062 } //namespace smoab::detail
00063
00064 #endif