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 #ifndef coupledPolyPatch_H
00038 #define coupledPolyPatch_H
00039
00040 #include <OpenFOAM/polyPatch.H>
00041
00042
00043
00044 namespace Foam
00045 {
00046
00047
00048
00049
00050
00051 class coupledPolyPatch
00052 :
00053 public polyPatch
00054 {
00055 public:
00056
00057 enum transformType
00058 {
00059 UNKNOWN,
00060 ROTATIONAL,
00061 TRANSLATIONAL
00062 };
00063 static const NamedEnum<transformType, 3> transformTypeNames;
00064
00065
00066 private:
00067
00068
00069
00070
00071 mutable vectorField separation_;
00072
00073
00074 mutable tensorField forwardT_;
00075
00076
00077 mutable tensorField reverseT_;
00078
00079 public:
00080
00081
00082
00083
00084 static scalar matchTol;
00085
00086
00087 protected:
00088
00089
00090
00091
00092
00093
00094
00095
00096 void calcTransformTensors
00097 (
00098 const vectorField& Cf,
00099 const vectorField& Cr,
00100 const vectorField& nf,
00101 const vectorField& nr,
00102 const scalarField& smallDist,
00103 const scalar absTol = matchTol,
00104 const transformType = UNKNOWN
00105 ) const;
00106
00107
00108 virtual void initGeometry() = 0;
00109
00110
00111 virtual void calcGeometry() = 0;
00112
00113
00114 virtual void initMovePoints(const pointField&) = 0;
00115
00116
00117 virtual void movePoints(const pointField&) = 0;
00118
00119
00120 virtual void initUpdateMesh() = 0;
00121
00122
00123 virtual void updateMesh() = 0;
00124
00125
00126
00127 static void writeOBJ(Ostream& os, const point& pt);
00128
00129
00130 static void writeOBJ(Ostream&, const pointField&, const labelList&);
00131
00132
00133 static void writeOBJ
00134 (
00135 const fileName&,
00136 const UList<face>&,
00137 const pointField&
00138 );
00139
00140
00141 static void writeOBJ
00142 (
00143 Ostream& os,
00144 const point& p0,
00145 const point& p1,
00146 label& vertI
00147 );
00148
00149
00150 static pointField calcFaceCentres
00151 (
00152 const UList<face>&,
00153 const pointField&
00154 );
00155
00156
00157 static pointField getAnchorPoints
00158 (
00159 const UList<face>&,
00160 const pointField&
00161 );
00162
00163
00164 bool inPatch
00165 (
00166 const labelList& oldToNew,
00167 const label oldFaceI
00168 ) const;
00169
00170
00171
00172 static label whichPatch
00173 (
00174 const labelList& patchStarts,
00175 const label faceI
00176 );
00177
00178
00179
00180 static scalarField calcFaceTol
00181 (
00182 const UList<face>& faces,
00183 const pointField& points,
00184 const pointField& faceCentres
00185 );
00186
00187
00188
00189 static label getRotation
00190 (
00191 const pointField& points,
00192 const face& f,
00193 const point& anchor,
00194 const scalar tol
00195 );
00196
00197
00198 public:
00199
00200
00201 TypeName("coupled");
00202
00203
00204
00205
00206
00207 coupledPolyPatch
00208 (
00209 const word& name,
00210 const label size,
00211 const label start,
00212 const label index,
00213 const polyBoundaryMesh& bm
00214 );
00215
00216
00217 coupledPolyPatch
00218 (
00219 const word& name,
00220 const dictionary& dict,
00221 const label index,
00222 const polyBoundaryMesh& bm
00223 );
00224
00225
00226 coupledPolyPatch(const coupledPolyPatch&, const polyBoundaryMesh&);
00227
00228
00229
00230 coupledPolyPatch
00231 (
00232 const coupledPolyPatch& pp,
00233 const polyBoundaryMesh& bm,
00234 const label index,
00235 const label newSize,
00236 const label newStart
00237 );
00238
00239
00240
00241
00242 virtual ~coupledPolyPatch();
00243
00244
00245
00246
00247
00248
00249
00250 virtual bool coupled() const
00251 {
00252 return true;
00253 }
00254
00255
00256
00257 bool separated() const
00258 {
00259 return separation_.size();
00260 }
00261
00262
00263
00264 const vectorField& separation() const
00265 {
00266 return separation_;
00267 }
00268
00269
00270
00271 bool parallel() const
00272 {
00273 return forwardT_.empty();
00274 }
00275
00276
00277 const tensorField& forwardT() const
00278 {
00279 return forwardT_;
00280 }
00281
00282
00283 const tensorField& reverseT() const
00284 {
00285 return reverseT_;
00286 }
00287
00288
00289
00290
00291 virtual void initOrder(const primitivePatch&) const = 0;
00292
00293
00294
00295
00296
00297
00298 virtual bool order
00299 (
00300 const primitivePatch&,
00301 labelList& faceMap,
00302 labelList& rotation
00303 ) const = 0;
00304 };
00305
00306
00307
00308
00309 }
00310
00311
00312
00313 #endif
00314
00315