Go to the documentation of this file.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
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef meshSearch_H
00037 #define meshSearch_H
00038
00039 #include <meshTools/pointIndexHit.H>
00040 #include <lagrangian/Cloud.H>
00041 #include <lagrangian/passiveParticle.H>
00042
00043
00044
00045 namespace Foam
00046 {
00047
00048
00049 class polyMesh;
00050 class treeDataCell;
00051 class treeDataFace;
00052 class treeDataPoint;
00053 template<class Type> class indexedOctree;
00054
00055
00056
00057
00058
00059 class meshSearch
00060 {
00061
00062
00063
00064 const polyMesh& mesh_;
00065
00066
00067 const bool faceDecomp_;
00068
00069
00070 Cloud<passiveParticle> cloud_;
00071
00072
00073
00074 mutable indexedOctree<treeDataFace>* boundaryTreePtr_;
00075 mutable indexedOctree<treeDataCell>* cellTreePtr_;
00076 mutable indexedOctree<treeDataPoint>* cellCentreTreePtr_;
00077
00078
00079
00080
00081
00082 static bool findNearer
00083 (
00084 const point& sample,
00085 const pointField& points,
00086 label& nearestI,
00087 scalar& nearestDistSqr
00088 );
00089
00090
00091 static bool findNearer
00092 (
00093 const point& sample,
00094 const pointField& points,
00095 const labelList& indices,
00096 label& nearestI,
00097 scalar& nearestDistSqr
00098 );
00099
00100
00101
00102
00103
00104 label findNearestCellTree(const point&) const;
00105
00106
00107 label findNearestCellLinear(const point&) const;
00108
00109
00110
00111 label findNearestCellWalk(const point&, const label) const;
00112
00113
00114 label findCellLinear(const point&) const;
00115
00116
00117
00118
00119 label findNearestFaceTree(const point&) const;
00120
00121 label findNearestFaceLinear(const point&) const;
00122
00123 label findNearestFaceWalk(const point&, const label) const;
00124
00125
00126
00127
00128
00129
00130
00131 label findNearestBoundaryFaceWalk
00132 (
00133 const point& location,
00134 const label seedFaceI
00135 ) const;
00136
00137
00138
00139 vector offset
00140 (
00141 const point& bPoint,
00142 const label bFaceI,
00143 const vector& dir
00144 ) const;
00145
00146
00147
00148 meshSearch(const meshSearch&);
00149
00150
00151 void operator=(const meshSearch&);
00152
00153
00154 public:
00155
00156
00157 ClassName("meshSearch");
00158
00159
00160
00161
00162
00163 static scalar tol_;
00164
00165
00166
00167
00168
00169 meshSearch(const polyMesh& mesh, const bool faceDecomp = true);
00170
00171
00172
00173
00174 ~meshSearch();
00175
00176
00177
00178
00179
00180
00181 const polyMesh& mesh() const
00182 {
00183 return mesh_;
00184 }
00185
00186
00187
00188 const indexedOctree<treeDataFace>& boundaryTree() const;
00189
00190
00191 const indexedOctree<treeDataCell>& cellTree() const;
00192
00193
00194 const indexedOctree<treeDataPoint>& cellCentreTree() const;
00195
00196
00197
00198
00199
00200
00201 bool pointInCell(const point& p, const label celli) const;
00202
00203
00204
00205
00206
00207
00208 label findNearestCell
00209 (
00210 const point& location,
00211 const label seedCellI = -1,
00212 const bool useTreeSearch = true
00213 ) const;
00214
00215 label findNearestFace
00216 (
00217 const point& location,
00218 const label seedFaceI = -1,
00219 const bool useTreeSearch = true
00220 ) const;
00221
00222
00223
00224
00225
00226 label findCell
00227 (
00228 const point& location,
00229 const label seedCellI = -1,
00230 const bool useTreeSearch = true
00231 ) const;
00232
00233
00234
00235
00236
00237 label findNearestBoundaryFace
00238 (
00239 const point& location,
00240 const label seedFaceI = -1,
00241 const bool useTreeSearch = true
00242 ) const;
00243
00244
00245
00246 pointIndexHit intersection(const point& pStart, const point& pEnd)
00247 const;
00248
00249
00250
00251 List<pointIndexHit> intersections
00252 (
00253 const point& pStart,
00254 const point& pEnd
00255 ) const;
00256
00257
00258 bool isInside(const point&) const;
00259
00260
00261
00262 void clearOut();
00263
00264
00265 void correct();
00266 };
00267
00268
00269
00270
00271 }
00272
00273
00274
00275 #endif
00276
00277