00001 // File: $Id$ 00002 // Author: John Wu <John.Wu at ACM.org> 00003 // Lawrence Berkeley National Laboratory 00004 // Copyright 2000-2012 the Regents of the University of California 00005 #ifndef IBIS_MESHQUERY_H 00006 #define IBIS_MESHQUERY_H 00007 00008 00009 00010 #include "query.h" 00011 00012 namespace ibis { // extend ibis name space 00013 class meshQuery; 00014 } // namespace 00015 00019 class FASTBIT_CXX_DLLSPEC ibis::meshQuery : public ibis::query { 00020 public: 00021 virtual ~meshQuery(); 00023 meshQuery(const char* uid, const part* et, const char* pref=0); 00025 meshQuery(const char* dir, const ibis::partList& tl) : query(dir, tl) {}; 00026 00027 int getHitsAsLines(std::vector<uint32_t>& lines) const { 00028 return getHitsAsLines(lines, partition()->getMeshShape());} 00029 int getHitsAsLines(std::vector<uint32_t>& lines, 00030 const std::vector<uint32_t>& dim) const; 00031 static int labelLines(uint32_t nd, 00032 const std::vector<uint32_t>& lines, 00033 std::vector<uint32_t>& labels); 00034 00035 int getHitsAsBlocks(std::vector< std::vector<uint32_t> >& reg, 00036 const bool merge=false) const; 00037 int getHitsAsBlocks(std::vector< std::vector<uint32_t> >& reg, 00038 const std::vector<uint32_t>& dim, 00039 const bool merge=false) const; 00040 00041 int getPointsOnBoundary(std::vector< std::vector<uint32_t> >& bdy, 00042 const std::vector<uint32_t>& dim) const; 00043 int getPointsOnBoundary(std::vector< std::vector<uint32_t> >& bdy) const; 00044 00045 static int bitvectorToCoordinates(const ibis::bitvector& bv, 00046 const std::vector<uint32_t>& dim, 00047 std::vector<uint32_t>& coords); 00048 static int labelBlocks 00049 (const std::vector< std::vector<uint32_t> >& blocks, 00050 std::vector<uint32_t>& labels); 00051 00052 protected: 00053 int linesIn1D(std::vector<uint32_t>& lines) const; 00054 int linesIn2D(std::vector<uint32_t>& lines, 00055 const std::vector<uint32_t>& dim) const; 00056 int linesIn3D(std::vector<uint32_t>& lines, 00057 const std::vector<uint32_t>& dim) const; 00058 int linesIn4D(std::vector<uint32_t>& lines, 00059 const std::vector<uint32_t>& dim) const; 00060 int linesInND(std::vector<uint32_t>& lines, 00061 const std::vector<uint32_t>& dim) const; 00062 00063 static int labelLines1(const std::vector<uint32_t>& lines, 00064 std::vector<uint32_t>& labels); 00065 static int labelLines2(const std::vector<uint32_t>& lines, 00066 std::vector<uint32_t>& labels); 00067 static int labelLines3(const std::vector<uint32_t>& lines, 00068 std::vector<uint32_t>& labels); 00069 static int labelLines4(const std::vector<uint32_t>& lines, 00070 std::vector<uint32_t>& labels); 00071 static int labelLinesN(uint32_t nd, 00072 const std::vector<uint32_t>& lines, 00073 std::vector<uint32_t>& labels); 00074 00075 int toBlocks1(const ibis::bitvector& bv, 00076 std::vector< std::vector<uint32_t> >& reg) const; 00077 int toBlocks2(const ibis::bitvector& bv, 00078 const std::vector<uint32_t>& dim, 00079 std::vector< std::vector<uint32_t> >& reg) const; 00080 int toBlocks3(const ibis::bitvector& bv, 00081 const std::vector<uint32_t>& dim, 00082 std::vector< std::vector<uint32_t> >& reg) const; 00083 int toBlocksN(const ibis::bitvector& bv, 00084 const std::vector<uint32_t>& dim, 00085 std::vector< std::vector<uint32_t> >& reg) const; 00086 void block2d(uint32_t last, const std::vector<uint32_t>& dim, 00087 std::vector<uint32_t>& block, 00088 std::vector< std::vector<uint32_t> >& reg) const; 00089 void block3d(uint32_t last, const uint32_t n2, const uint32_t n3, 00090 const std::vector<uint32_t>& dim, 00091 std::vector<uint32_t>& block, 00092 std::vector< std::vector<uint32_t> >& reg) const; 00093 void blocknd(uint32_t last, 00094 const std::vector<uint32_t>& scl, 00095 const std::vector<uint32_t>& dim, 00096 std::vector<uint32_t>& block, 00097 std::vector< std::vector<uint32_t> >& reg) const; 00098 void merge2DBlocks(std::vector< std::vector<uint32_t> >& reg) const; 00099 void merge3DBlocks(std::vector< std::vector<uint32_t> >& reg) const; 00100 void mergeNDBlocks(std::vector< std::vector<uint32_t> >& reg) const; 00101 00102 int findPointsOnBoundary(const ibis::bitvector& bv, 00103 const std::vector<uint32_t>& dim, 00104 std::vector< std::vector<uint32_t> >& bdy) const; 00105 void boundary2d(const std::vector<uint32_t>& dim, 00106 const std::vector< std::vector<uint32_t> >& rang, 00107 std::vector< std::vector<uint32_t> >& bdy) const; 00108 void boundary2d1(const std::vector<uint32_t>& dim, 00109 const std::vector< std::vector<uint32_t> >& rang, 00110 std::vector< std::vector<uint32_t> >& bdy) const; 00111 void boundary3d(const std::vector<uint32_t>& dim, 00112 const std::vector< std::vector<uint32_t> >& rang, 00113 std::vector< std::vector<uint32_t> >& bdy) const; 00114 void boundarynd(const std::vector<uint32_t>& dim, 00115 const std::vector< std::vector<uint32_t> >& rang, 00116 std::vector< std::vector<uint32_t> >& bdy) const; 00117 00118 static uint32_t afind(ibis::array_t<uint32_t>& rep, uint32_t s); 00119 static void aset(ibis::array_t<uint32_t>& rep, 00120 uint32_t s, uint32_t r); 00121 static uint32_t aflatten(ibis::array_t<uint32_t>& rep); 00122 static int label1DBlocks 00123 (const std::vector< std::vector<uint32_t> >& blocks, 00124 std::vector<uint32_t>& labels); 00125 static int label2DBlocks 00126 (const std::vector< std::vector<uint32_t> >& blocks, 00127 std::vector<uint32_t>& labels); 00128 static int label3DBlocks 00129 (const std::vector< std::vector<uint32_t> >& blocks, 00130 std::vector<uint32_t>& labels); 00131 static int label4DBlocks 00132 (const std::vector< std::vector<uint32_t> >& blocks, 00133 std::vector<uint32_t>& labels); 00134 00135 private: 00136 meshQuery(); 00137 meshQuery(const meshQuery&); 00138 meshQuery& operator=(const meshQuery&); 00139 }; // class ibis::meshQuery 00140 #endif // IBIS_MESHQUERY_H
![]() |