BoxCollection.hpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef BOXCOLLECTION_HPP_
00029 #define BOXCOLLECTION_HPP_
00030
00031 #include "Node.hpp"
00032 #include "Element.hpp"
00033
00034
00039 template<unsigned DIM>
00040 class Box
00041 {
00042 private:
00044 c_vector<double, 2*DIM> mMinAndMaxValues;
00045
00047 std::set< Node<DIM>* > mNodesContained;
00048
00050 std::set< Element<DIM,DIM>* > mElementsContained;
00051
00052 public:
00053
00059 Box(c_vector<double, 2*DIM>& rMinAndMaxValues);
00060
00062 c_vector<double, 2*DIM>& rGetMinAndMaxValues();
00063
00068 void AddNode(Node<DIM>* pNode);
00069
00074 void RemoveNode(Node<DIM>* pNode);
00075
00080 void AddElement(Element<DIM,DIM>* pElement);
00081
00083 std::set< Node<DIM>* >& rGetNodesContained();
00084
00086 std::set< Element<DIM,DIM>* >& rGetElementsContained();
00087 };
00088
00089
00094 template<unsigned DIM>
00095 class BoxCollection
00096 {
00097 private:
00099 std::vector< Box<DIM> > mBoxes;
00100
00102 c_vector<double, 2*DIM> mDomainSize;
00103
00105 double mBoxWidth;
00106
00108 c_vector<unsigned, DIM> mNumBoxesEachDirection;
00109
00111 std::vector< std::set<unsigned> > mLocalBoxes;
00112
00113 public:
00114
00121 BoxCollection(double boxWidth, c_vector<double, 2*DIM> domainSize);
00122
00127 unsigned CalculateContainingBox(Node<DIM>* pNode);
00128
00133 unsigned CalculateContainingBox(c_vector<double, DIM>& rLocation);
00134
00139 Box<DIM>& rGetBox(unsigned boxIndex);
00140
00142 unsigned GetNumBoxes();
00143
00148 void SetupLocalBoxesHalfOnly();
00149
00151 void SetupAllLocalBoxes();
00152
00157 std::set<unsigned> GetLocalBoxes(unsigned boxIndex);
00158
00168 void CalculateNodePairs(std::vector<Node<DIM>*>& rNodes, std::set<std::pair<Node<DIM>*, Node<DIM>*> >& rNodePairs);
00169 };
00170
00171
00172 #endif