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
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 #ifndef meshReader_H
00057 #define meshReader_H
00058
00059 #include <OpenFOAM/polyMesh.H>
00060 #include <OpenFOAM/HashTable.H>
00061 #include <OpenFOAM/IOstream.H>
00062
00063 #include <conversion/cellTable.H>
00064
00065
00066
00067 namespace Foam
00068 {
00069
00070
00071
00072
00073
00074 class meshReader
00075 {
00076 protected:
00077
00078
00079 class cellFaceIdentifier
00080 {
00081 public:
00082
00083
00084
00085 label cell;
00086
00087
00088 label face;
00089
00090
00091
00092
00093
00094 cellFaceIdentifier() : cell(-1), face(-1) {}
00095
00096
00097 cellFaceIdentifier(label c, label f) : cell(c), face(f) {}
00098
00099
00100
00101
00102
00103 bool used() const
00104 {
00105 return (cell >= 0 && face >= 0);
00106 }
00107
00108
00109 bool unused() const
00110 {
00111 return (cell < 0 || face < 0);
00112 }
00113
00114
00115
00116
00117 bool operator!=(const cellFaceIdentifier& cf) const
00118 {
00119 return (cell != cf.cell || face != cf.face);
00120 }
00121
00122 bool operator==(const cellFaceIdentifier& cf) const
00123 {
00124 return (cell == cf.cell && face == cf.face);
00125 }
00126
00127
00128
00129 friend Ostream& operator<<
00130 (
00131 Ostream& os,
00132 const cellFaceIdentifier& cf
00133 )
00134 {
00135 os << "(" << cf.cell << "/" << cf.face << ")";
00136 return os;
00137 }
00138 };
00139
00140
00141 private:
00142
00143
00144
00145
00146
00147
00148 mutable labelListList* pointCellsPtr_;
00149
00150
00151 label nInternalFaces_;
00152
00153
00154 labelList patchStarts_;
00155 labelList patchSizes_;
00156
00157
00158 List<labelPair> interfaces_;
00159
00160
00161 List<List<cellFaceIdentifier> > baffleIds_;
00162
00163
00164 faceList meshFaces_;
00165
00166
00167 cellList cellPolys_;
00168
00169
00170 HashTable<List<label>, word, string::hash> monitoringSets_;
00171
00172
00173
00174
00175
00176 meshReader(const meshReader&);
00177
00178
00179 void operator=(const meshReader&);
00180
00181
00182 void calcPointCells() const;
00183
00184 const labelListList& pointCells() const;
00185
00186
00187 void createPolyCells();
00188
00189
00190 void addPolyBoundaryFace
00191 (
00192 const label cellId,
00193 const label cellFaceId,
00194 const label nCreatedFaces
00195 );
00196
00197
00198 void addPolyBoundaryFace
00199 (
00200 const cellFaceIdentifier& identifier,
00201 const label nCreatedFaces
00202 );
00203
00204
00205 void addCellZones(polyMesh&) const;
00206
00207
00208 void addFaceZones(polyMesh&) const;
00209
00210
00211
00212 void createPolyBoundary();
00213
00214
00215 List<polyPatch*> polyBoundaryPatches(const polyMesh&);
00216
00217
00218
00219 void clearExtraStorage();
00220
00221 void writeInterfaces(const objectRegistry&) const;
00222
00223
00224 void writeMeshLabelList
00225 (
00226 const objectRegistry& registry,
00227 const word& propertyName,
00228 const labelList& list,
00229 IOstream::streamFormat fmt = IOstream::ASCII
00230 ) const;
00231
00232
00233 faceListList& cellFaces() const
00234 {
00235 return const_cast<faceListList&>(cellFaces_);
00236 }
00237
00238
00239 protected:
00240
00241
00242
00243
00244 static const cellModel* unknownModel;
00245 static const cellModel* tetModel;
00246 static const cellModel* pyrModel;
00247 static const cellModel* prismModel;
00248 static const cellModel* hexModel;
00249
00250
00251 fileName geometryFile_;
00252
00253
00254 scalar scaleFactor_;
00255
00256
00257 pointField points_;
00258
00259
00260 labelList origCellId_;
00261
00262
00263
00264 List<List<cellFaceIdentifier> > boundaryIds_;
00265
00266
00267 wordList patchTypes_;
00268
00269
00270 wordList patchNames_;
00271
00272
00273 wordList patchPhysicalTypes_;
00274
00275
00276 faceListList cellFaces_;
00277
00278
00279 faceList baffleFaces_;
00280
00281
00282 labelList cellTableId_;
00283
00284
00285 cellTable cellTable_;
00286
00287
00288
00289
00290
00291 virtual bool readGeometry(const scalar scaleFactor = 1.0) = 0;
00292
00293 public:
00294
00295
00296
00297
00298 static void warnDuplicates(const word& context, const wordList&);
00299
00300
00301
00302
00303
00304 meshReader(const fileName&, const scalar scaleFactor = 1.0);
00305
00306
00307
00308 virtual ~meshReader();
00309
00310
00311
00312
00313
00314 virtual autoPtr<polyMesh> mesh(const objectRegistry&);
00315
00316
00317 void writeAux(const objectRegistry&) const;
00318
00319
00320 void writeMesh
00321 (
00322 const polyMesh&,
00323 IOstream::streamFormat fmt = IOstream::BINARY
00324 ) const;
00325 };
00326
00327
00328
00329
00330 }
00331
00332 #endif
00333
00334