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 #ifndef fvMeshDistribute_H
00053 #define fvMeshDistribute_H
00054
00055 #include <OpenFOAM/Field.H>
00056
00057 #include <finiteVolume/fvMeshSubset.H>
00058
00059
00060
00061 namespace Foam
00062 {
00063
00064
00065 class mapAddedPolyMesh;
00066 class mapDistributePolyMesh;
00067
00068
00069
00070
00071
00072 class fvMeshDistribute
00073 {
00074
00075
00076
00077 fvMesh& mesh_;
00078
00079
00080
00081 const scalar mergeTol_;
00082
00083
00084
00085
00086
00087 static labelList select
00088 (
00089 const bool selectEqual,
00090 const labelList& values,
00091 const label value
00092 );
00093
00094
00095 static void checkEqualWordList(const string&, const wordList&);
00096
00097
00098 static wordList mergeWordList(const wordList&);
00099
00100
00101
00102
00103
00104 label findNonEmptyPatch() const;
00105
00106
00107 label addProcPatch(const word& patchName, const label nbrProc);
00108
00109
00110 template<class GeoField>
00111 void addPatchFields(const word& patchFieldType);
00112
00113
00114 void deleteTrailingPatch();
00115
00116
00117 template<class GeoField>
00118 void deleteTrailingPatchFields();
00119
00120
00121 template <class T, class Mesh>
00122 void saveBoundaryFields
00123 (
00124 PtrList<FieldField<fvsPatchField, T> >& bflds
00125 ) const;
00126
00127
00128 template <class T, class Mesh>
00129 void mapBoundaryFields
00130 (
00131 const mapPolyMesh& map,
00132 const PtrList<FieldField<fvsPatchField, T> >& oldBflds
00133 );
00134
00135
00136 template<class GeoField, class PatchFieldType>
00137 void initPatchFields
00138 (
00139 const typename GeoField::value_type& initVal
00140 );
00141
00142
00143
00144 autoPtr<mapPolyMesh> deleteProcPatches(const label patchI);
00145
00146
00147
00148
00149
00150
00151 autoPtr<mapPolyMesh> repatch
00152 (
00153 const labelList& newPatchID,
00154 labelListList& constructFaceMap
00155 );
00156
00157
00158
00159
00160 autoPtr<mapPolyMesh> mergeSharedPoints
00161 (
00162 labelListList& constructPointMap
00163 );
00164
00165
00166
00167
00168 void getNeighbourData
00169 (
00170 const labelList& distribution,
00171 labelList& sourceFace,
00172 labelList& sourceProc,
00173 labelList& sourceNewProc
00174 ) const;
00175
00176
00177 static void subsetBoundaryData
00178 (
00179 const fvMesh& mesh,
00180 const labelList& faceMap,
00181 const labelList& cellMap,
00182
00183 const labelList& oldDistribution,
00184 const labelList& oldFaceOwner,
00185 const labelList& oldFaceNeighbour,
00186 const label oldInternalFaces,
00187
00188 const labelList& sourceFace,
00189 const labelList& sourceProc,
00190 const labelList& sourceNewProc,
00191
00192 labelList& subFace,
00193 labelList& subProc,
00194 labelList& subNewProc
00195 );
00196
00197
00198
00199 static void findCouples
00200 (
00201 const primitiveMesh&,
00202 const labelList& sourceFace,
00203 const labelList& sourceProc,
00204
00205 const label domain,
00206 const primitiveMesh& domainMesh,
00207 const labelList& domainFace,
00208 const labelList& domainProc,
00209
00210 labelList& masterCoupledFaces,
00211 labelList& slaveCoupledFaces
00212 );
00213
00214
00215
00216 static labelList mapBoundaryData
00217 (
00218 const primitiveMesh& mesh,
00219 const mapAddedPolyMesh& map,
00220 const labelList& boundaryData0,
00221 const label nInternalFaces1,
00222 const labelList& boundaryData1
00223 );
00224
00225
00226
00227
00228
00229 autoPtr<mapPolyMesh> doRemoveCells
00230 (
00231 const labelList& cellsToRemove,
00232 const label oldInternalPatchI
00233 );
00234
00235
00236
00237 void addProcPatches
00238 (
00239 const labelList&,
00240 labelList& procPatchID
00241 );
00242
00243
00244 static labelList getProcBoundaryPatch
00245 (
00246 const labelList& neighbourNewProc,
00247 const labelList& procPatchID
00248 );
00249
00250
00251 static void sendMesh
00252 (
00253 const label domain,
00254 const fvMesh& mesh,
00255 const wordList& pointZoneNames,
00256 const wordList& facesZoneNames,
00257 const wordList& cellZoneNames,
00258 const labelList& sourceFace,
00259 const labelList& sourceProc,
00260 const labelList& sourceNewProc,
00261 OSstream& toDomain
00262 );
00263
00264 template<class GeoField>
00265 static void sendFields
00266 (
00267 const label domain,
00268 const wordList& fieldNames,
00269 const fvMeshSubset&,
00270 OSstream& toNbr
00271 );
00272
00273
00274 static autoPtr<fvMesh> receiveMesh
00275 (
00276 const label domain,
00277 const wordList& pointZoneNames,
00278 const wordList& facesZoneNames,
00279 const wordList& cellZoneNames,
00280 const Time& runTime,
00281 labelList& domainSourceFace,
00282 labelList& domainSourceProc,
00283 labelList& domainSourceNewProc,
00284 ISstream& fromNbr
00285 );
00286
00287
00288 template<class GeoField>
00289 static void receiveFields
00290 (
00291 const label domain,
00292 const wordList& fieldNames,
00293 fvMesh&,
00294 PtrList<GeoField>&,
00295 const dictionary& fieldDicts
00296 );
00297
00298
00299 template <class Container, class T>
00300 static void exchange
00301 (
00302 const List<Container >& sendBufs,
00303 List<Container >& recvBufs,
00304 labelListList& sizes
00305 );
00306
00307
00308 fvMeshDistribute(const fvMeshDistribute&);
00309
00310
00311 void operator=(const fvMeshDistribute&);
00312
00313 public:
00314
00315 ClassName("fvMeshDistribute");
00316
00317
00318
00319
00320
00321 fvMeshDistribute(fvMesh& mesh, const scalar mergeTol);
00322
00323
00324
00325
00326
00327 static labelList countCells(const labelList&);
00328
00329
00330
00331 autoPtr<mapDistributePolyMesh> distribute(const labelList& dist);
00332
00333
00334
00335
00336 static void printCoupleInfo
00337 (
00338 const primitiveMesh&,
00339 const labelList&,
00340 const labelList&,
00341 const labelList&
00342 );
00343
00344
00345 template<class GeoField>
00346 static void printFieldInfo(const fvMesh&);
00347
00348
00349 static void printMeshInfo(const fvMesh&);
00350 };
00351
00352
00353
00354
00355 }
00356
00357
00358
00359 #ifdef NoRepository
00360 # include <dynamicMesh/fvMeshDistributeTemplates.C>
00361 #endif
00362
00363
00364
00365 #endif
00366
00367