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
00037
00038
00039
00040 #ifndef directMappedPatchBase_H
00041 #define directMappedPatchBase_H
00042
00043 #include <OpenFOAM/pointField.H>
00044 #include <OpenFOAM/Tuple2.H>
00045 #include <meshTools/pointIndexHit.H>
00046
00047
00048
00049 namespace Foam
00050 {
00051
00052 class polyPatch;
00053 class polyMesh;
00054 class mapDistribute;
00055
00056
00057
00058
00059
00060 class directMappedPatchBase
00061 {
00062
00063 public:
00064
00065
00066 enum sampleMode
00067 {
00068 NEARESTCELL,
00069 NEARESTPATCHFACE,
00070 NEARESTFACE
00071 };
00072
00073
00074
00075
00076
00077
00078 typedef Tuple2<pointIndexHit, Tuple2<scalar, label> > nearInfo;
00079
00080 class nearestEqOp
00081 {
00082
00083 public:
00084
00085 void operator()(nearInfo& x, const nearInfo& y) const
00086 {
00087 if (y.first().hit())
00088 {
00089 if (!x.first().hit())
00090 {
00091 x = y;
00092 }
00093 else if (y.second().first() < x.second().first())
00094 {
00095 x = y;
00096 }
00097 }
00098 }
00099 };
00100
00101 private:
00102
00103
00104
00105 static const NamedEnum<sampleMode, 3> sampleModeNames_;
00106
00107
00108 const polyPatch& patch_;
00109
00110
00111 const word sampleRegion_;
00112
00113
00114 const sampleMode mode_;
00115
00116
00117 const word samplePatch_;
00118
00119
00120 const bool uniformOffset_;
00121
00122
00123 const vector offset_;
00124
00125
00126 const vectorField offsets_;
00127
00128
00129 const bool sameRegion_;
00130
00131
00132
00133
00134
00135
00136
00137
00138 mutable autoPtr<mapDistribute> mapPtr_;
00139
00140
00141
00142
00143
00144 void collectSamples
00145 (
00146 pointField&,
00147 labelList& patchFaceProcs,
00148 labelList& patchFaces,
00149 pointField& patchFc
00150 ) const;
00151
00152
00153 void findSamples
00154 (
00155 const pointField&,
00156 labelList& sampleProcs,
00157 labelList& sampleIndices,
00158 pointField& sampleLocations
00159 ) const;
00160
00161
00162 void calcMapping() const;
00163
00164
00165 public:
00166
00167
00168 TypeName("directMappedPatchBase");
00169
00170
00171
00172
00173
00174 directMappedPatchBase(const polyPatch&);
00175
00176
00177 directMappedPatchBase
00178 (
00179 const polyPatch& pp,
00180 const word& sampleRegion,
00181 const sampleMode sampleMode,
00182 const word& samplePatch,
00183 const vectorField& offset
00184 );
00185
00186
00187 directMappedPatchBase
00188 (
00189 const polyPatch& pp,
00190 const word& sampleRegion,
00191 const sampleMode sampleMode,
00192 const word& samplePatch,
00193 const vector& offset
00194 );
00195
00196
00197 directMappedPatchBase(const polyPatch&, const dictionary&);
00198
00199
00200 directMappedPatchBase(const polyPatch&, const directMappedPatchBase&);
00201
00202
00203
00204 virtual ~directMappedPatchBase();
00205
00206
00207
00208
00209 void clearOut();
00210
00211
00212 const sampleMode& mode() const
00213 {
00214 return mode_;
00215 }
00216
00217
00218 const word& sampleRegion() const
00219 {
00220 return sampleRegion_;
00221 }
00222
00223
00224 const word& samplePatch() const
00225 {
00226 return samplePatch_;
00227 }
00228
00229
00230 const vectorField& offsets() const
00231 {
00232 return offsets_;
00233 }
00234
00235
00236 const mapDistribute& map() const
00237 {
00238 if (mapPtr_.empty())
00239 {
00240 calcMapping();
00241 }
00242 return mapPtr_();
00243 }
00244
00245
00246 bool sameRegion() const
00247 {
00248 return sameRegion_;
00249 }
00250
00251
00252 const polyMesh& sampleMesh() const;
00253
00254
00255 const polyPatch& samplePolyPatch() const;
00256
00257
00258 virtual void write(Ostream&) const;
00259 };
00260
00261
00262
00263
00264 }
00265
00266
00267
00268 #endif
00269
00270