From 25dafe92eabc66b731877ba2f13dd28c9fc8fd21 Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Mon, 16 Apr 2012 11:36:13 +0100 Subject: [PATCH] ENH: decomposePar: add -time option. --- .../decomposePar/decomposePar.C | 1084 ++++++++--------- 1 file changed, 541 insertions(+), 543 deletions(-) diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 02acd592365..c7b96b44b36 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -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-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -43,7 +43,10 @@ Usage Copy any \a uniform directories too. \param -constant \n - Override controlDict settings and use constant directory. + \param -time xxx:yyy \n + Override controlDict settings and decompose selected times. Does not + re-decompose the mesh i.e. does not handle moving mesh or changing + mesh cases. \param -fields \n Use existing geometry decomposition and convert fields only. @@ -123,11 +126,9 @@ int main(int argc, char *argv[]) "ifRequired", "only decompose geometry if the number of domains has changed" ); - argList::addBoolOption - ( - "constant", - "include the 'constant/' dir in the times list" - ); + + // Include explicit constant options, have zero from time range + timeSelector::addOptions(true, false); #include "setRootCase.H" @@ -146,23 +147,10 @@ int main(int argc, char *argv[]) bool forceOverwrite = args.optionFound("force"); bool ifRequiredDecomposition = args.optionFound("ifRequired"); + // Set time from database #include "createTime.H" - - // Allow -constant to override controlDict settings. - if (args.optionFound("constant")) - { - instantList timeDirs = timeSelector::select0(runTime, args); - if (runTime.timeName() != runTime.constant()) - { - FatalErrorIn(args.executable()) - << "No '" << runTime.constant() << "' time present." << endl - << "Valid times are " << runTime.times() - << exit(FatalError); - } - } - - - Info<< "Time = " << runTime.timeName() << endl; + // Allow override of time + instantList times = timeSelector::selectIfPresent(runTime, args); // determine the existing processor count directly label nProcs = 0; @@ -334,475 +322,407 @@ int main(int argc, char *argv[]) } - // Search for list of objects for this time - IOobjectList objects(mesh, runTime.timeName()); - - // Construct the vol fields - // ~~~~~~~~~~~~~~~~~~~~~~~~ - PtrList<volScalarField> volScalarFields; - readFields(mesh, objects, volScalarFields); - - PtrList<volVectorField> volVectorFields; - readFields(mesh, objects, volVectorFields); - - PtrList<volSphericalTensorField> volSphericalTensorFields; - readFields(mesh, objects, volSphericalTensorFields); - - PtrList<volSymmTensorField> volSymmTensorFields; - readFields(mesh, objects, volSymmTensorFields); - - PtrList<volTensorField> volTensorFields; - readFields(mesh, objects, volTensorFields); - - - // Construct the dimensioned fields - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PtrList<DimensionedField<scalar, volMesh> > dimScalarFields; - readFields(mesh, objects, dimScalarFields); - - PtrList<DimensionedField<vector, volMesh> > dimVectorFields; - readFields(mesh, objects, dimVectorFields); - - PtrList<DimensionedField<sphericalTensor, volMesh> > - dimSphericalTensorFields; - readFields(mesh, objects, dimSphericalTensorFields); - - PtrList<DimensionedField<symmTensor, volMesh> > dimSymmTensorFields; - readFields(mesh, objects, dimSymmTensorFields); - - PtrList<DimensionedField<tensor, volMesh> > dimTensorFields; - readFields(mesh, objects, dimTensorFields); - - - // Construct the surface fields - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PtrList<surfaceScalarField> surfaceScalarFields; - readFields(mesh, objects, surfaceScalarFields); - PtrList<surfaceVectorField> surfaceVectorFields; - readFields(mesh, objects, surfaceVectorFields); - PtrList<surfaceSphericalTensorField> surfaceSphericalTensorFields; - readFields(mesh, objects, surfaceSphericalTensorFields); - PtrList<surfaceSymmTensorField> surfaceSymmTensorFields; - readFields(mesh, objects, surfaceSymmTensorFields); - PtrList<surfaceTensorField> surfaceTensorFields; - readFields(mesh, objects, surfaceTensorFields); - - - // Construct the point fields - // ~~~~~~~~~~~~~~~~~~~~~~~~~~ - pointMesh pMesh(mesh); - - PtrList<pointScalarField> pointScalarFields; - readFields(pMesh, objects, pointScalarFields); - - PtrList<pointVectorField> pointVectorFields; - readFields(pMesh, objects, pointVectorFields); - - PtrList<pointSphericalTensorField> pointSphericalTensorFields; - readFields(pMesh, objects, pointSphericalTensorFields); - - PtrList<pointSymmTensorField> pointSymmTensorFields; - readFields(pMesh, objects, pointSymmTensorFields); - - PtrList<pointTensorField> pointTensorFields; - readFields(pMesh, objects, pointTensorFields); - - - // Construct the Lagrangian fields - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - fileNameList cloudDirs - ( - readDir(runTime.timePath()/cloud::prefix, fileName::DIRECTORY) - ); - - // Particles - PtrList<Cloud<indexedParticle> > lagrangianPositions(cloudDirs.size()); - // Particles per cell - PtrList< List<SLList<indexedParticle*>*> > cellParticles(cloudDirs.size()); - - PtrList<PtrList<labelIOField> > lagrangianLabelFields(cloudDirs.size()); - PtrList<PtrList<labelFieldCompactIOField> > lagrangianLabelFieldFields - ( - cloudDirs.size() - ); - PtrList<PtrList<scalarIOField> > lagrangianScalarFields(cloudDirs.size()); - PtrList<PtrList<scalarFieldCompactIOField> > lagrangianScalarFieldFields - ( - cloudDirs.size() - ); - PtrList<PtrList<vectorIOField> > lagrangianVectorFields(cloudDirs.size()); - PtrList<PtrList<vectorFieldCompactIOField> > lagrangianVectorFieldFields - ( - cloudDirs.size() - ); - PtrList<PtrList<sphericalTensorIOField> > lagrangianSphericalTensorFields - ( - cloudDirs.size() - ); - PtrList<PtrList<sphericalTensorFieldCompactIOField> > - lagrangianSphericalTensorFieldFields(cloudDirs.size()); - PtrList<PtrList<symmTensorIOField> > lagrangianSymmTensorFields - ( - cloudDirs.size() - ); - PtrList<PtrList<symmTensorFieldCompactIOField> > - lagrangianSymmTensorFieldFields - ( - cloudDirs.size() - ); - PtrList<PtrList<tensorIOField> > lagrangianTensorFields - ( - cloudDirs.size() - ); - PtrList<PtrList<tensorFieldCompactIOField> > lagrangianTensorFieldFields - ( - cloudDirs.size() - ); - - label cloudI = 0; - - forAll(cloudDirs, i) + // Loop over all times + forAll(times, timeI) { - IOobjectList sprayObjs + runTime.setTime(times[timeI], timeI); + + Info<< "Time = " << runTime.timeName() << endl; + + // Search for list of objects for this time + IOobjectList objects(mesh, runTime.timeName()); + + + // Construct the vol fields + // ~~~~~~~~~~~~~~~~~~~~~~~~ + PtrList<volScalarField> volScalarFields; + readFields(mesh, objects, volScalarFields); + PtrList<volVectorField> volVectorFields; + readFields(mesh, objects, volVectorFields); + PtrList<volSphericalTensorField> volSphericalTensorFields; + readFields(mesh, objects, volSphericalTensorFields); + PtrList<volSymmTensorField> volSymmTensorFields; + readFields(mesh, objects, volSymmTensorFields); + PtrList<volTensorField> volTensorFields; + readFields(mesh, objects, volTensorFields); + + + // Construct the dimensioned fields + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PtrList<DimensionedField<scalar, volMesh> > dimScalarFields; + readFields(mesh, objects, dimScalarFields); + PtrList<DimensionedField<vector, volMesh> > dimVectorFields; + readFields(mesh, objects, dimVectorFields); + PtrList<DimensionedField<sphericalTensor, volMesh> > + dimSphericalTensorFields; + readFields(mesh, objects, dimSphericalTensorFields); + PtrList<DimensionedField<symmTensor, volMesh> > dimSymmTensorFields; + readFields(mesh, objects, dimSymmTensorFields); + PtrList<DimensionedField<tensor, volMesh> > dimTensorFields; + readFields(mesh, objects, dimTensorFields); + + + // Construct the surface fields + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + PtrList<surfaceScalarField> surfaceScalarFields; + readFields(mesh, objects, surfaceScalarFields); + PtrList<surfaceVectorField> surfaceVectorFields; + readFields(mesh, objects, surfaceVectorFields); + PtrList<surfaceSphericalTensorField> surfaceSphericalTensorFields; + readFields(mesh, objects, surfaceSphericalTensorFields); + PtrList<surfaceSymmTensorField> surfaceSymmTensorFields; + readFields(mesh, objects, surfaceSymmTensorFields); + PtrList<surfaceTensorField> surfaceTensorFields; + readFields(mesh, objects, surfaceTensorFields); + + + // Construct the point fields + // ~~~~~~~~~~~~~~~~~~~~~~~~~~ + pointMesh pMesh(mesh); + + PtrList<pointScalarField> pointScalarFields; + readFields(pMesh, objects, pointScalarFields); + PtrList<pointVectorField> pointVectorFields; + readFields(pMesh, objects, pointVectorFields); + PtrList<pointSphericalTensorField> pointSphericalTensorFields; + readFields(pMesh, objects, pointSphericalTensorFields); + PtrList<pointSymmTensorField> pointSymmTensorFields; + readFields(pMesh, objects, pointSymmTensorFields); + PtrList<pointTensorField> pointTensorFields; + readFields(pMesh, objects, pointTensorFields); + + + // Construct the Lagrangian fields + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + fileNameList cloudDirs ( - mesh, - runTime.timeName(), - cloud::prefix/cloudDirs[i] + readDir(runTime.timePath()/cloud::prefix, fileName::DIRECTORY) ); - IOobject* positionsPtr = sprayObjs.lookup("positions"); + // Particles + PtrList<Cloud<indexedParticle> > lagrangianPositions(cloudDirs.size()); + // Particles per cell + PtrList< List<SLList<indexedParticle*>*> > cellParticles + ( + cloudDirs.size() + ); - if (positionsPtr) - { - // Read lagrangian particles - // ~~~~~~~~~~~~~~~~~~~~~~~~~ + PtrList<PtrList<labelIOField> > lagrangianLabelFields + ( + cloudDirs.size() + ); + PtrList<PtrList<labelFieldCompactIOField> > lagrangianLabelFieldFields + ( + cloudDirs.size() + ); + PtrList<PtrList<scalarIOField> > lagrangianScalarFields + ( + cloudDirs.size() + ); + PtrList<PtrList<scalarFieldCompactIOField> > lagrangianScalarFieldFields + ( + cloudDirs.size() + ); + PtrList<PtrList<vectorIOField> > lagrangianVectorFields + ( + cloudDirs.size() + ); + PtrList<PtrList<vectorFieldCompactIOField> > lagrangianVectorFieldFields + ( + cloudDirs.size() + ); + PtrList<PtrList<sphericalTensorIOField> > + lagrangianSphericalTensorFields + ( + cloudDirs.size() + ); + PtrList<PtrList<sphericalTensorFieldCompactIOField> > + lagrangianSphericalTensorFieldFields(cloudDirs.size()); + PtrList<PtrList<symmTensorIOField> > lagrangianSymmTensorFields + ( + cloudDirs.size() + ); + PtrList<PtrList<symmTensorFieldCompactIOField> > + lagrangianSymmTensorFieldFields + ( + cloudDirs.size() + ); + PtrList<PtrList<tensorIOField> > lagrangianTensorFields + ( + cloudDirs.size() + ); + PtrList<PtrList<tensorFieldCompactIOField> > lagrangianTensorFieldFields + ( + cloudDirs.size() + ); - Info<< "Identified lagrangian data set: " << cloudDirs[i] << endl; + label cloudI = 0; - lagrangianPositions.set + forAll(cloudDirs, i) + { + IOobjectList sprayObjs ( - cloudI, - new Cloud<indexedParticle> - ( - mesh, - cloudDirs[i], - false - ) + mesh, + runTime.timeName(), + cloud::prefix/cloudDirs[i] ); + IOobject* positionsPtr = sprayObjs.lookup("positions"); - // Sort particles per cell - // ~~~~~~~~~~~~~~~~~~~~~~~ + if (positionsPtr) + { + // Read lagrangian particles + // ~~~~~~~~~~~~~~~~~~~~~~~~~ - cellParticles.set - ( - cloudI, - new List<SLList<indexedParticle*>*> + Info<< "Identified lagrangian data set: " << cloudDirs[i] + << endl; + + lagrangianPositions.set ( - mesh.nCells(), - static_cast<SLList<indexedParticle*>*>(NULL) - ) - ); + cloudI, + new Cloud<indexedParticle> + ( + mesh, + cloudDirs[i], + false + ) + ); - label i = 0; - forAllIter - ( - Cloud<indexedParticle>, - lagrangianPositions[cloudI], - iter - ) - { - iter().index() = i++; + // Sort particles per cell + // ~~~~~~~~~~~~~~~~~~~~~~~ - label celli = iter().cell(); + cellParticles.set + ( + cloudI, + new List<SLList<indexedParticle*>*> + ( + mesh.nCells(), + static_cast<SLList<indexedParticle*>*>(NULL) + ) + ); - // Check - if (celli < 0 || celli >= mesh.nCells()) - { - FatalErrorIn(args.executable()) - << "Illegal cell number " << celli - << " for particle with index " << iter().index() - << " at position " << iter().position() << nl - << "Cell number should be between 0 and " - << mesh.nCells()-1 << nl - << "On this mesh the particle should be in cell " - << mesh.findCell(iter().position()) - << exit(FatalError); - } + label i = 0; - if (!cellParticles[cloudI][celli]) + forAllIter + ( + Cloud<indexedParticle>, + lagrangianPositions[cloudI], + iter + ) { - cellParticles[cloudI][celli] = new SLList<indexedParticle*> - (); + iter().index() = i++; + + label celli = iter().cell(); + + // Check + if (celli < 0 || celli >= mesh.nCells()) + { + FatalErrorIn(args.executable()) + << "Illegal cell number " << celli + << " for particle with index " << iter().index() + << " at position " << iter().position() << nl + << "Cell number should be between 0 and " + << mesh.nCells()-1 << nl + << "On this mesh the particle should be in cell " + << mesh.findCell(iter().position()) + << exit(FatalError); + } + + if (!cellParticles[cloudI][celli]) + { + cellParticles[cloudI][celli] = + new SLList<indexedParticle*>(); + } + + cellParticles[cloudI][celli]->append(&iter()); } - cellParticles[cloudI][celli]->append(&iter()); - } + // Read fields + // ~~~~~~~~~~~ - // Read fields - // ~~~~~~~~~~~ - - IOobjectList lagrangianObjects - ( - mesh, - runTime.timeName(), - cloud::prefix/cloudDirs[cloudI] - ); + IOobjectList lagrangianObjects + ( + mesh, + runTime.timeName(), + cloud::prefix/cloudDirs[cloudI] + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianLabelFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianLabelFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianLabelFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianLabelFieldFields + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianScalarFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianScalarFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianScalarFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianScalarFieldFields + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianVectorFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianVectorFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianVectorFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianVectorFieldFields + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianSphericalTensorFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianSphericalTensorFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianSphericalTensorFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSphericalTensorFieldFields + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianSymmTensorFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianSymmTensorFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianSymmTensorFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSymmTensorFieldFields + ); - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianTensorFields - ); + lagrangianFieldDecomposer::readFields + ( + cloudI, + lagrangianObjects, + lagrangianTensorFields + ); - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianTensorFieldFields - ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianTensorFieldFields + ); - cloudI++; + cloudI++; + } } - } - lagrangianPositions.setSize(cloudI); - cellParticles.setSize(cloudI); - lagrangianLabelFields.setSize(cloudI); - lagrangianLabelFieldFields.setSize(cloudI); - lagrangianScalarFields.setSize(cloudI); - lagrangianScalarFieldFields.setSize(cloudI); - lagrangianVectorFields.setSize(cloudI); - lagrangianVectorFieldFields.setSize(cloudI); - lagrangianSphericalTensorFields.setSize(cloudI); - lagrangianSphericalTensorFieldFields.setSize(cloudI); - lagrangianSymmTensorFields.setSize(cloudI); - lagrangianSymmTensorFieldFields.setSize(cloudI); - lagrangianTensorFields.setSize(cloudI); - lagrangianTensorFieldFields.setSize(cloudI); - - - // Any uniform data to copy/link? - fileName uniformDir("uniform"); - - if (isDir(runTime.timePath()/uniformDir)) - { - Info<< "Detected additional non-decomposed files in " - << runTime.timePath()/uniformDir - << endl; - } - else - { - uniformDir.clear(); - } - - Info<< endl; - - // split the fields over processors - for (label procI = 0; procI < mesh.nProcs(); procI++) - { - Info<< "Processor " << procI << ": field transfer" << endl; - - // open the database - Time processorDb - ( - Time::controlDictName, - args.rootPath(), - args.caseName()/fileName(word("processor") + name(procI)) - ); + lagrangianPositions.setSize(cloudI); + cellParticles.setSize(cloudI); + lagrangianLabelFields.setSize(cloudI); + lagrangianLabelFieldFields.setSize(cloudI); + lagrangianScalarFields.setSize(cloudI); + lagrangianScalarFieldFields.setSize(cloudI); + lagrangianVectorFields.setSize(cloudI); + lagrangianVectorFieldFields.setSize(cloudI); + lagrangianSphericalTensorFields.setSize(cloudI); + lagrangianSphericalTensorFieldFields.setSize(cloudI); + lagrangianSymmTensorFields.setSize(cloudI); + lagrangianSymmTensorFieldFields.setSize(cloudI); + lagrangianTensorFields.setSize(cloudI); + lagrangianTensorFieldFields.setSize(cloudI); + + + // Any uniform data to copy/link? + fileName uniformDir("uniform"); + + if (isDir(runTime.timePath()/uniformDir)) + { + Info<< "Detected additional non-decomposed files in " + << runTime.timePath()/uniformDir + << endl; + } + else + { + uniformDir.clear(); + } - processorDb.setTime(runTime); + Info<< endl; - // remove files remnants that can cause horrible problems - // - mut and nut are used to mark the new turbulence models, - // their existence prevents old models from being upgraded + // split the fields over processors + for (label procI = 0; procI < mesh.nProcs(); procI++) { - fileName timeDir(processorDb.path()/processorDb.timeName()); - - rm(timeDir/"mut"); - rm(timeDir/"nut"); - } + Info<< "Processor " << procI << ": field transfer" << endl; - // read the mesh - fvMesh procMesh - ( - IOobject + // open the database + Time processorDb ( - regionName, - processorDb.timeName(), - processorDb - ) - ); + Time::controlDictName, + args.rootPath(), + args.caseName()/fileName(word("processor") + name(procI)) + ); - labelIOList faceProcAddressing - ( - IOobject - ( - "faceProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); + processorDb.setTime(runTime); - labelIOList cellProcAddressing - ( - IOobject - ( - "cellProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); + // remove files remnants that can cause horrible problems + // - mut and nut are used to mark the new turbulence models, + // their existence prevents old models from being upgraded + { + fileName timeDir(processorDb.path()/processorDb.timeName()); - labelIOList boundaryProcAddressing - ( - IOobject - ( - "boundaryProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::MUST_READ, - IOobject::NO_WRITE - ) - ); + rm(timeDir/"mut"); + rm(timeDir/"nut"); + } - // FV fields - { - fvFieldDecomposer fieldDecomposer + // read the mesh + fvMesh procMesh ( - mesh, - procMesh, - faceProcAddressing, - cellProcAddressing, - boundaryProcAddressing + IOobject + ( + regionName, + processorDb.timeName(), + processorDb + ) ); - fieldDecomposer.decomposeFields(volScalarFields); - fieldDecomposer.decomposeFields(volVectorFields); - fieldDecomposer.decomposeFields(volSphericalTensorFields); - fieldDecomposer.decomposeFields(volSymmTensorFields); - fieldDecomposer.decomposeFields(volTensorFields); - - fieldDecomposer.decomposeFields(surfaceScalarFields); - fieldDecomposer.decomposeFields(surfaceVectorFields); - fieldDecomposer.decomposeFields(surfaceSphericalTensorFields); - fieldDecomposer.decomposeFields(surfaceSymmTensorFields); - fieldDecomposer.decomposeFields(surfaceTensorFields); - } - - // Dimensioned fields - { - dimFieldDecomposer fieldDecomposer + labelIOList faceProcAddressing ( - mesh, - procMesh, - faceProcAddressing, - cellProcAddressing + IOobject + ( + "faceProcAddressing", + procMesh.facesInstance(), + procMesh.meshSubDir, + procMesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) ); - fieldDecomposer.decomposeFields(dimScalarFields); - fieldDecomposer.decomposeFields(dimVectorFields); - fieldDecomposer.decomposeFields(dimSphericalTensorFields); - fieldDecomposer.decomposeFields(dimSymmTensorFields); - fieldDecomposer.decomposeFields(dimTensorFields); - } - - - // Point fields - if - ( - pointScalarFields.size() - || pointVectorFields.size() - || pointSphericalTensorFields.size() - || pointSymmTensorFields.size() - || pointTensorFields.size() - ) - { - labelIOList pointProcAddressing + labelIOList cellProcAddressing ( IOobject ( - "pointProcAddressing", + "cellProcAddressing", procMesh.facesInstance(), procMesh.meshSubDir, procMesh, @@ -811,138 +731,216 @@ int main(int argc, char *argv[]) ) ); - pointMesh procPMesh(procMesh); - - pointFieldDecomposer fieldDecomposer + labelIOList boundaryProcAddressing ( - pMesh, - procPMesh, - pointProcAddressing, - boundaryProcAddressing + IOobject + ( + "boundaryProcAddressing", + procMesh.facesInstance(), + procMesh.meshSubDir, + procMesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) ); - fieldDecomposer.decomposeFields(pointScalarFields); - fieldDecomposer.decomposeFields(pointVectorFields); - fieldDecomposer.decomposeFields(pointSphericalTensorFields); - fieldDecomposer.decomposeFields(pointSymmTensorFields); - fieldDecomposer.decomposeFields(pointTensorFields); - } + // FV fields + { + fvFieldDecomposer fieldDecomposer + ( + mesh, + procMesh, + faceProcAddressing, + cellProcAddressing, + boundaryProcAddressing + ); + fieldDecomposer.decomposeFields(volScalarFields); + fieldDecomposer.decomposeFields(volVectorFields); + fieldDecomposer.decomposeFields(volSphericalTensorFields); + fieldDecomposer.decomposeFields(volSymmTensorFields); + fieldDecomposer.decomposeFields(volTensorFields); + + fieldDecomposer.decomposeFields(surfaceScalarFields); + fieldDecomposer.decomposeFields(surfaceVectorFields); + fieldDecomposer.decomposeFields(surfaceSphericalTensorFields); + fieldDecomposer.decomposeFields(surfaceSymmTensorFields); + fieldDecomposer.decomposeFields(surfaceTensorFields); + } - // If there is lagrangian data write it out - forAll(lagrangianPositions, cloudI) - { - if (lagrangianPositions[cloudI].size()) + // Dimensioned fields { - lagrangianFieldDecomposer fieldDecomposer + dimFieldDecomposer fieldDecomposer ( mesh, procMesh, faceProcAddressing, - cellProcAddressing, - cloudDirs[cloudI], - lagrangianPositions[cloudI], - cellParticles[cloudI] + cellProcAddressing ); - // Lagrangian fields - { - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianLabelFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianLabelFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianScalarFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianScalarFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianVectorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianVectorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianSphericalTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianSphericalTensorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianSymmTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianSymmTensorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields + fieldDecomposer.decomposeFields(dimScalarFields); + fieldDecomposer.decomposeFields(dimVectorFields); + fieldDecomposer.decomposeFields(dimSphericalTensorFields); + fieldDecomposer.decomposeFields(dimSymmTensorFields); + fieldDecomposer.decomposeFields(dimTensorFields); + } + + + // Point fields + if + ( + pointScalarFields.size() + || pointVectorFields.size() + || pointSphericalTensorFields.size() + || pointSymmTensorFields.size() + || pointTensorFields.size() + ) + { + labelIOList pointProcAddressing + ( + IOobject ( - cloudDirs[cloudI], - lagrangianTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields + "pointProcAddressing", + procMesh.facesInstance(), + procMesh.meshSubDir, + procMesh, + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ); + + pointMesh procPMesh(procMesh); + + pointFieldDecomposer fieldDecomposer + ( + pMesh, + procPMesh, + pointProcAddressing, + boundaryProcAddressing + ); + + fieldDecomposer.decomposeFields(pointScalarFields); + fieldDecomposer.decomposeFields(pointVectorFields); + fieldDecomposer.decomposeFields(pointSphericalTensorFields); + fieldDecomposer.decomposeFields(pointSymmTensorFields); + fieldDecomposer.decomposeFields(pointTensorFields); + } + + + // If there is lagrangian data write it out + forAll(lagrangianPositions, cloudI) + { + if (lagrangianPositions[cloudI].size()) + { + lagrangianFieldDecomposer fieldDecomposer ( + mesh, + procMesh, + faceProcAddressing, + cellProcAddressing, cloudDirs[cloudI], - lagrangianTensorFieldFields[cloudI] + lagrangianPositions[cloudI], + cellParticles[cloudI] ); + + // Lagrangian fields + { + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianLabelFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianLabelFieldFields[cloudI] + ); + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianScalarFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianScalarFieldFields[cloudI] + ); + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianVectorFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianVectorFieldFields[cloudI] + ); + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianSphericalTensorFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianSphericalTensorFieldFields[cloudI] + ); + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianSymmTensorFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianSymmTensorFieldFields[cloudI] + ); + fieldDecomposer.decomposeFields + ( + cloudDirs[cloudI], + lagrangianTensorFields[cloudI] + ); + fieldDecomposer.decomposeFieldFields + ( + cloudDirs[cloudI], + lagrangianTensorFieldFields[cloudI] + ); + } } } - } - // Any non-decomposed data to copy? - if (uniformDir.size()) - { - const fileName timePath = processorDb.timePath(); - - if (copyUniform || mesh.distributed()) - { - cp - ( - runTime.timePath()/uniformDir, - timePath/uniformDir - ); - } - else + // Any non-decomposed data to copy? + if (uniformDir.size()) { - // link with relative paths - const string parentPath = string("..")/".."; + const fileName timePath = processorDb.timePath(); - fileName currentDir(cwd()); - chDir(timePath); - ln - ( - parentPath/runTime.timeName()/uniformDir, - uniformDir - ); - chDir(currentDir); + if (copyUniform || mesh.distributed()) + { + cp + ( + runTime.timePath()/uniformDir, + timePath/uniformDir + ); + } + else + { + // link with relative paths + const string parentPath = string("..")/".."; + + fileName currentDir(cwd()); + chDir(timePath); + ln + ( + parentPath/runTime.timeName()/uniformDir, + uniformDir + ); + chDir(currentDir); + } } } } - Info<< "\nEnd.\n" << endl; return 0; -- GitLab