diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index b50db4a76c..a3f6786861 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -64,11 +64,17 @@ Usage #include "IOobjectList.H" #include "domainDecomposition.H" #include "labelIOField.H" +#include "labelFieldIOField.H" #include "scalarIOField.H" +#include "scalarFieldIOField.H" #include "vectorIOField.H" +#include "vectorFieldIOField.H" #include "sphericalTensorIOField.H" +#include "sphericalTensorFieldIOField.H" #include "symmTensorIOField.H" +#include "symmTensorFieldIOField.H" #include "tensorIOField.H" +#include "tensorFieldIOField.H" #include "pointFields.H" #include "readFields.H" @@ -374,20 +380,42 @@ int main(int argc, char *argv[]) PtrList< List*> > cellParticles(cloudDirs.size()); PtrList > lagrangianLabelFields(cloudDirs.size()); + PtrList > lagrangianLabelFieldFields + ( + cloudDirs.size() + ); PtrList > lagrangianScalarFields(cloudDirs.size()); + PtrList > lagrangianScalarFieldFields + ( + cloudDirs.size() + ); PtrList > lagrangianVectorFields(cloudDirs.size()); + PtrList > lagrangianVectorFieldFields + ( + cloudDirs.size() + ); PtrList > lagrangianSphericalTensorFields ( cloudDirs.size() ); + PtrList > + lagrangianSphericalTensorFieldFields(cloudDirs.size()); PtrList > lagrangianSymmTensorFields ( cloudDirs.size() ); + PtrList > lagrangianSymmTensorFieldFields + ( + cloudDirs.size() + ); PtrList > lagrangianTensorFields ( cloudDirs.size() ); + PtrList > lagrangianTensorFieldFields + ( + cloudDirs.size() + ); label cloudI = 0; @@ -487,6 +515,13 @@ int main(int argc, char *argv[]) lagrangianLabelFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianLabelFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -494,6 +529,14 @@ int main(int argc, char *argv[]) lagrangianScalarFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianScalarFieldFields + ); + + lagrangianFieldDecomposer::readFields ( cloudI, @@ -501,6 +544,13 @@ int main(int argc, char *argv[]) lagrangianVectorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianVectorFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -508,6 +558,13 @@ int main(int argc, char *argv[]) lagrangianSphericalTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSphericalTensorFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -515,6 +572,13 @@ int main(int argc, char *argv[]) lagrangianSymmTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianSymmTensorFieldFields + ); + lagrangianFieldDecomposer::readFields ( cloudI, @@ -522,6 +586,13 @@ int main(int argc, char *argv[]) lagrangianTensorFields ); + lagrangianFieldDecomposer::readFieldFields + ( + cloudI, + lagrangianObjects, + lagrangianTensorFieldFields + ); + cloudI++; } } @@ -529,11 +600,17 @@ int main(int argc, char *argv[]) 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? @@ -725,11 +802,17 @@ int main(int argc, char *argv[]) if ( lagrangianLabelFields[cloudI].size() + || lagrangianLabelFieldFields[cloudI].size() || lagrangianScalarFields[cloudI].size() + || lagrangianScalarFieldFields[cloudI].size() || lagrangianVectorFields[cloudI].size() + || lagrangianVectorFieldFields[cloudI].size() || lagrangianSphericalTensorFields[cloudI].size() + || lagrangianSphericalTensorFieldFields[cloudI].size() || lagrangianSymmTensorFields[cloudI].size() + || lagrangianSymmTensorFieldFields[cloudI].size() || lagrangianTensorFields[cloudI].size() + || lagrangianTensorFieldFields[cloudI].size() ) { fieldDecomposer.decomposeFields @@ -737,31 +820,61 @@ int main(int argc, char *argv[]) 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] + ); } } } diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H index 52b2c23503..43d2b1645c 100644 --- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H +++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposer.H @@ -37,6 +37,7 @@ SourceFiles #define lagrangianFieldDecomposer_H #include "Cloud.H" +#include "IOFieldField.H" #include "indexedParticle.H" #include "passiveParticle.H" @@ -102,6 +103,19 @@ public: // PtrList >& lagrangianFields ); + template + static void readFieldFields + ( + const label cloudI, + const IOobjectList& lagrangianObjects, + PtrList + < + PtrList, Type> > + >& lagrangianFields +// PtrList, Type > >& lagrangianFields + ); + + //- Decompose volume field template tmp > decomposeField @@ -110,12 +124,27 @@ public: const IOField& field ) const; + template + tmp, Type> > decomposeFieldField + ( + const word& cloudName, + const IOFieldField, Type>& field + ) const; + + template void decomposeFields ( const word& cloudName, const PtrList& fields ) const; + + template + void decomposeFieldFields + ( + const word& cloudName, + const PtrList& fields + ) const; }; diff --git a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C index 172be9c3c0..e479057d7c 100644 --- a/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C +++ b/applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerDecomposeFields.C @@ -63,6 +63,56 @@ void Foam::lagrangianFieldDecomposer::readFields } +template +void Foam::lagrangianFieldDecomposer::readFieldFields +( + const label cloudI, + const IOobjectList& lagrangianObjects, + PtrList, Type> > >& lagrangianFields +) +{ + // Search list of objects for lagrangian fields + IOobjectList lagrangianTypeObjectsA + ( + lagrangianObjects.lookupClass(IOField >::typeName) + ); + + IOobjectList lagrangianTypeObjectsB + ( + lagrangianObjects.lookupClass(IOFieldField, Type>::typeName) + ); + + lagrangianFields.set + ( + cloudI, + new PtrList, Type> > + ( + lagrangianTypeObjectsA.size() + lagrangianTypeObjectsB.size() + ) + ); + + label lagrangianFieldi=0; + + forAllIter(IOobjectList, lagrangianTypeObjectsA, iter) + { + lagrangianFields[cloudI].set + ( + lagrangianFieldi++, + new IOFieldField, Type>(*iter()) + ); + } + + forAllIter(IOobjectList, lagrangianTypeObjectsB, iter) + { + lagrangianFields[cloudI].set + ( + lagrangianFieldi++, + new IOFieldField, Type>(*iter()) + ); + } +} + + template Foam::tmp > Foam::lagrangianFieldDecomposer::decomposeField @@ -94,6 +144,37 @@ Foam::lagrangianFieldDecomposer::decomposeField } +template +Foam::tmp, Type> > +Foam::lagrangianFieldDecomposer::decomposeFieldField +( + const word& cloudName, + const IOFieldField, Type>& field +) const +{ + // Create and map the internal field values + Field > procField(field, particleIndices_); + + // Create the field for the processor + return tmp, Type> > + ( + new IOFieldField, Type> + ( + IOobject + ( + field.name(), + procMesh_.time().timeName(), + cloud::prefix/cloudName, + procMesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + procField + ) + ); +} + + template void Foam::lagrangianFieldDecomposer::decomposeFields ( @@ -111,4 +192,21 @@ void Foam::lagrangianFieldDecomposer::decomposeFields } +template +void Foam::lagrangianFieldDecomposer::decomposeFieldFields +( + const word& cloudName, + const PtrList& fields +) const +{ + if (particleIndices_.size()) + { + forAll(fields, fieldI) + { + decomposeFieldField(cloudName, fields[fieldI])().write(); + } + } +} + + // ************************************************************************* // diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C index 3a3b64b13b..3734296f51 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C +++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C @@ -402,6 +402,13 @@ int main(int argc, char *argv[]) procMeshes.meshes(), sprayObjs ); + reconstructLagrangianFieldFields