diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 6fb8e69b9694d21261a44b8513f033386f6cbc7e..21ba1cdfa1c7bbb13dc7d3cdc05710323cb8afd6 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -55,6 +55,9 @@ Usage \param -fields \n Use existing geometry decomposition and convert fields only. + \param -sets \n + Decompose cellSets, faceSets, pointSets. + \param -force \n Remove any existing \a processor subdirectories before decomposing the geometry. @@ -127,6 +130,11 @@ int main(int argc, char *argv[]) "use existing geometry decomposition and convert fields only" ); argList::addBoolOption + ( + "sets", + "decompose cellSets, faceSets, pointSets" + ); + argList::addBoolOption ( "force", "remove existing processor*/ subdirs before decomposing the geometry" @@ -146,6 +154,7 @@ int main(int argc, char *argv[]) bool writeCellDist = args.optionFound("cellDist"); bool copyUniform = args.optionFound("copyUniform"); bool decomposeFieldsOnly = args.optionFound("fields"); + bool decomposeSets = args.optionFound("sets"); bool forceOverwrite = args.optionFound("force"); bool ifRequiredDecomposition = args.optionFound("ifRequired"); @@ -312,7 +321,7 @@ int main(int argc, char *argv[]) { mesh.decomposeMesh(); - mesh.writeDecomposition(); + mesh.writeDecomposition(decomposeSets); if (writeCellDist) { diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index 15cbd85d11eae6b7bc74b968312f7bdffab3d333..4eda411482090d25f72fd88f4f2c209d0f6a5fb7 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -34,6 +34,10 @@ License #include "globalMeshData.H" #include "DynamicList.H" #include "fvFieldDecomposer.H" +#include "IOobjectList.H" +#include "cellSet.H" +#include "faceSet.H" +#include "pointSet.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -123,7 +127,7 @@ Foam::domainDecomposition::~domainDecomposition() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -bool Foam::domainDecomposition::writeDecomposition() +bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) { Info<< "\nConstructing processor meshes" << endl; @@ -160,6 +164,37 @@ bool Foam::domainDecomposition::writeDecomposition() } + PtrList<const cellSet> cellSets; + PtrList<const faceSet> faceSets; + PtrList<const pointSet> pointSets; + if (decomposeSets) + { + // Read sets + IOobjectList objects(*this, facesInstance(), "polyMesh/sets"); + { + IOobjectList cSets(objects.lookupClass(cellSet::typeName)); + forAllConstIter(IOobjectList, cSets, iter) + { + cellSets.append(new cellSet(*iter())); + } + } + { + IOobjectList fSets(objects.lookupClass(faceSet::typeName)); + forAllConstIter(IOobjectList, fSets, iter) + { + faceSets.append(new faceSet(*iter())); + } + } + { + IOobjectList pSets(objects.lookupClass(pointSet::typeName)); + forAllConstIter(IOobjectList, pSets, iter) + { + pointSets.append(new pointSet(*iter())); + } + } + } + + label maxProcCells = 0; label totProcFaces = 0; label maxProcPatches = 0; @@ -732,6 +767,52 @@ bool Foam::domainDecomposition::writeDecomposition() procMesh.write(); + + + if (decomposeSets) + { + forAll(cellSets, i) + { + const cellSet& cs = cellSets[i]; + cellSet set(procMesh, cs.name(), cs.size()/nProcs_); + forAll(curCellLabels, i) + { + if (cs.found(curCellLabels[i])) + { + set.insert(i); + } + } + set.write(); + } + forAll(faceSets, i) + { + const faceSet& cs = faceSets[i]; + faceSet set(procMesh, cs.name(), cs.size()/nProcs_); + forAll(curFaceLabels, i) + { + if (cs.found(mag(curFaceLabels[i])-1)) + { + set.insert(i); + } + } + set.write(); + } + forAll(pointSets, i) + { + const pointSet& cs = pointSets[i]; + pointSet set(procMesh, cs.name(), cs.size()/nProcs_); + forAll(curPointLabels, i) + { + if (cs.found(curPointLabels[i])) + { + set.insert(i); + } + } + set.write(); + } + } + + // Write points if pointsInstance differing from facesInstance if (facesInstancePointsPtr_.valid()) { diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H index e5fb53808605fc5db2fe797881726cb8289dfc38..9487aefef0322164300a47041eaf35b57ef53e6b 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -172,7 +172,7 @@ public: void decomposeMesh(); //- Write decomposition - bool writeDecomposition(); + bool writeDecomposition(const bool decomposeSets); //- Cell-processor decomposition labels const labelList& cellToProc() const