97 int main(
int argc,
char *argv[])
100 timeSelector::addOptions(
true,
false);
101 argList::noParallel();
103 argList::validOptions.insert(
"cellDist",
"");
104 argList::validOptions.insert(
"copyUniform",
"");
105 argList::validOptions.insert(
"fields",
"");
106 argList::validOptions.insert(
"filterPatches",
"");
107 argList::validOptions.insert(
"force",
"");
108 argList::validOptions.insert(
"ifRequired",
"");
113 word regionDir = word::null;
119 Info<<
"Decomposing mesh " << regionName <<
nl <<
endl;
136 if (runTime.timeName() != runTime.constant())
139 <<
"No '" << runTime.constant() <<
"' time present." <<
endl
140 <<
"Valid times are " << runTime.times()
146 Info<<
"Time = " << runTime.timeName() <<
endl;
158 /polyMesh::meshSubDir
173 runTime.time().system(),
182 decompDict.lookup(
"numberOfSubdomains") >> nDomains;
185 if (decomposeFieldsOnly)
188 if (nProcs != nDomains)
191 <<
"Specified -fields, but the case was decomposed with "
192 << nProcs <<
" domains"
194 <<
"instead of " << nDomains
195 <<
" domains as specified in decomposeParDict"
202 bool procDirsProblem =
true;
204 if (ifRequiredDecomposition && nProcs == nDomains)
207 decomposeFieldsOnly =
true;
208 procDirsProblem =
false;
209 forceOverwrite =
false;
211 Info<<
"Using existing processor directories" <<
nl;
216 Info<<
"Removing " << nProcs
217 <<
" existing processor directories" <<
endl;
221 for (label procI = nProcs-1; procI >= 0; --procI)
225 runTime.path()/(
word(
"processor") +
name(procI))
231 procDirsProblem =
false;
237 <<
"Case is already decomposed with " << nProcs
238 <<
" domains, use the -force option or manually" <<
nl
239 <<
"remove processor directories before decomposing. e.g.,"
241 <<
" rm -rf " << runTime.path().c_str() <<
"/processor*"
259 if (!decomposeFieldsOnly)
261 mesh.decomposeMesh(filterPatches);
263 mesh.writeDecomposition();
284 cellDecomposition.write();
286 Info<<
nl <<
"Wrote decomposition to "
287 << cellDecomposition.objectPath()
288 <<
" for use in manual decomposition." <<
endl;
303 zeroGradientFvPatchScalarField::typeName
308 cellDist[celli] = procIds[celli];
313 Info<<
nl <<
"Wrote decomposition as volScalarField to "
314 << cellDist.name() <<
" for use in postprocessing."
360 readFields(pMesh, objects, pointScalarFields);
363 readFields(pMesh, objects, pointVectorFields);
366 readFields(pMesh, objects, pointSphericalTensorFields);
369 readFields(pMesh, objects, pointSymmTensorFields);
372 readFields(pMesh, objects, pointTensorFields);
380 readDir(runTime.timePath()/cloud::prefix, fileName::DIRECTORY)
412 cloud::prefix/cloudDirs[i]
415 IOobject* positionsPtr = sprayObjs.lookup(
"positions");
422 Info<<
"Identified lagrangian data set: " << cloudDirs[i] <<
endl;
424 lagrangianPositions.set
454 lagrangianPositions[cloudI],
458 iter().index() = i++;
460 label celli = iter().cell();
466 <<
"Illegal cell number " << celli
467 <<
" for particle with index " << iter().index()
468 <<
" at position " << iter().position() <<
nl
469 <<
"Cell number should be between 0 and "
471 <<
"On this mesh the particle should be in cell "
476 if (!cellParticles[cloudI][celli])
482 cellParticles[cloudI][celli]->
append(&iter());
492 cloud::prefix/cloudDirs[cloudI]
499 lagrangianLabelFields
506 lagrangianScalarFields
513 lagrangianVectorFields
520 lagrangianSphericalTensorFields
527 lagrangianSymmTensorFields
534 lagrangianTensorFields
541 lagrangianPositions.setSize(cloudI);
542 cellParticles.setSize(cloudI);
543 lagrangianLabelFields.setSize(cloudI);
544 lagrangianScalarFields.setSize(cloudI);
545 lagrangianVectorFields.setSize(cloudI);
546 lagrangianSphericalTensorFields.setSize(cloudI);
547 lagrangianSymmTensorFields.setSize(cloudI);
548 lagrangianTensorFields.setSize(cloudI);
554 if (
isDir(runTime.timePath()/uniformDir))
556 Info<<
"Detected additional non-decomposed files in "
557 << runTime.timePath()/uniformDir
568 for (label procI = 0; procI <
mesh.nProcs(); procI++)
570 Info<<
"Processor " << procI <<
": field transfer" <<
endl;
575 Time::controlDictName,
586 fileName timeDir(processorDb.path()/processorDb.timeName());
598 processorDb.timeName(),
607 "cellProcAddressing",
608 procMesh.facesInstance(),
620 "boundaryProcAddressing",
621 procMesh.facesInstance(),
632 volScalarFields.size()
633 || volVectorFields.
size()
634 || volSphericalTensorFields.
size()
635 || volSymmTensorFields.
size()
636 || volTensorFields.
size()
637 || surfaceScalarFields.
size()
638 || surfaceVectorFields.
size()
639 || surfaceSphericalTensorFields.
size()
640 || surfaceSymmTensorFields.
size()
641 || surfaceTensorFields.
size()
648 "faceProcAddressing",
649 procMesh.facesInstance(),
663 boundaryProcAddressing
666 fieldDecomposer.decomposeFields(volScalarFields);
667 fieldDecomposer.decomposeFields(volVectorFields);
668 fieldDecomposer.decomposeFields(volSphericalTensorFields);
669 fieldDecomposer.decomposeFields(volSymmTensorFields);
670 fieldDecomposer.decomposeFields(volTensorFields);
672 fieldDecomposer.decomposeFields(surfaceScalarFields);
673 fieldDecomposer.decomposeFields(surfaceVectorFields);
674 fieldDecomposer.decomposeFields(surfaceSphericalTensorFields);
675 fieldDecomposer.decomposeFields(surfaceSymmTensorFields);
676 fieldDecomposer.decomposeFields(surfaceTensorFields);
683 pointScalarFields.
size()
684 || pointVectorFields.
size()
685 || pointSphericalTensorFields.
size()
686 || pointSymmTensorFields.
size()
687 || pointTensorFields.
size()
694 "pointProcAddressing",
695 procMesh.facesInstance(),
710 boundaryProcAddressing
713 fieldDecomposer.decomposeFields(pointScalarFields);
714 fieldDecomposer.decomposeFields(pointVectorFields);
715 fieldDecomposer.decomposeFields(pointSphericalTensorFields);
716 fieldDecomposer.decomposeFields(pointSymmTensorFields);
717 fieldDecomposer.decomposeFields(pointTensorFields);
722 forAll(lagrangianPositions, cloudI)
724 if (lagrangianPositions[cloudI].size())
732 lagrangianPositions[cloudI],
733 cellParticles[cloudI]
739 lagrangianLabelFields[cloudI].size()
740 || lagrangianScalarFields[cloudI].size()
741 || lagrangianVectorFields[cloudI].size()
742 || lagrangianSphericalTensorFields[cloudI].size()
743 || lagrangianSymmTensorFields[cloudI].size()
744 || lagrangianTensorFields[cloudI].size()
747 fieldDecomposer.decomposeFields
750 lagrangianLabelFields[cloudI]
752 fieldDecomposer.decomposeFields
755 lagrangianScalarFields[cloudI]
757 fieldDecomposer.decomposeFields
760 lagrangianVectorFields[cloudI]
762 fieldDecomposer.decomposeFields
765 lagrangianSphericalTensorFields[cloudI]
767 fieldDecomposer.decomposeFields
770 lagrangianSymmTensorFields[cloudI]
772 fieldDecomposer.decomposeFields
775 lagrangianTensorFields[cloudI]
783 if (uniformDir.size())
785 const fileName timePath = processorDb.timePath();
787 if (copyUniform ||
mesh.distributed())
791 runTime.timePath()/uniformDir,
798 const string parentPath =
string(
"..")/
"..";
804 parentPath/runTime.timeName()/uniformDir,