meshQuery.h
Go to the documentation of this file.
00001 // File: $Id$
00002 // Author: John Wu <John.Wu at ACM.org>
00003 //         Lawrence Berkeley National Laboratory
00004 // Copyright 2000-2011 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

Make It A Bit Faster
Contact us
Disclaimers
FastBit source code
FastBit mailing list archive