From c91b71b5217d62a12ccf6d727c6e6bc2aebfe0e8 Mon Sep 17 00:00:00 2001 From: andy Date: Fri, 6 Aug 2010 13:20:46 +0100 Subject: [PATCH] ENH: Added support for DimensionedField to reconstructPar --- .../reconstructPar/reconstructPar.C | 71 +++++------ .../reconstruct/fvFieldReconstructor.C | 3 +- .../reconstruct/fvFieldReconstructor.H | 30 +++-- .../fvFieldReconstructorReconstructFields.C | 111 +++++++++++++++++- .../reconstruct/pointFieldReconstructor.C | 3 +- .../reconstruct/pointFieldReconstructor.H | 9 ++ 6 files changed, 182 insertions(+), 45 deletions(-) diff --git a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C index 3734296f51..559bb4a715 100644 --- a/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C +++ b/applications/utilities/parallelProcessing/reconstructPar/reconstructPar.C @@ -179,23 +179,8 @@ int main(int argc, char *argv[]) // Get list of objects from processor0 database IOobjectList objects(procMeshes.meshes()[0], databases[0].timeName()); - - // If there are any FV fields, reconstruct them - - if - ( - objects.lookupClass(volScalarField::typeName).size() - || objects.lookupClass(volVectorField::typeName).size() - || objects.lookupClass(volSphericalTensorField::typeName).size() - || objects.lookupClass(volSymmTensorField::typeName).size() - || objects.lookupClass(volTensorField::typeName).size() - || objects.lookupClass(surfaceScalarField::typeName).size() - || objects.lookupClass(surfaceVectorField::typeName).size() - || objects.lookupClass(surfaceSphericalTensorField::typeName).size() - || objects.lookupClass(surfaceSymmTensorField::typeName).size() - || objects.lookupClass(surfaceTensorField::typeName).size() - ) { + // If there are any FV fields, reconstruct them Info<< "Reconstructing FV fields" << nl << endl; fvFieldReconstructor fvReconstructor @@ -207,6 +192,32 @@ int main(int argc, char *argv[]) procMeshes.boundaryProcAddressing() ); + fvReconstructor.reconstructFvVolumeInternalFields + ( + objects, + selectedFields + ); + fvReconstructor.reconstructFvVolumeInternalFields + ( + objects, + selectedFields + ); + fvReconstructor.reconstructFvVolumeInternalFields + ( + objects, + selectedFields + ); + fvReconstructor.reconstructFvVolumeInternalFields + ( + objects, + selectedFields + ); + fvReconstructor.reconstructFvVolumeInternalFields + ( + objects, + selectedFields + ); + fvReconstructor.reconstructFvVolumeFields ( objects, @@ -258,22 +269,13 @@ int main(int argc, char *argv[]) objects, selectedFields ); - } - else - { - Info<< "No FV fields" << nl << endl; + + if (fvReconstructor.nReconstructed() == 0) + { + Info<< "No FV fields" << nl << endl; + } } - - // If there are any point fields, reconstruct them - if - ( - objects.lookupClass(pointScalarField::typeName).size() - || objects.lookupClass(pointVectorField::typeName).size() - || objects.lookupClass(pointSphericalTensorField::typeName).size() - || objects.lookupClass(pointSymmTensorField::typeName).size() - || objects.lookupClass(pointTensorField::typeName).size() - ) { Info<< "Reconstructing point fields" << nl << endl; @@ -318,10 +320,11 @@ int main(int argc, char *argv[]) objects, selectedFields ); - } - else - { - Info<< "No point fields" << nl << endl; + + if (pointReconstructor.nReconstructed() == 0) + { + Info<< "No point fields" << nl << endl; + } } diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.C b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.C index 9a8138f5c8..ad92a345aa 100644 --- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.C +++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.C @@ -40,7 +40,8 @@ Foam::fvFieldReconstructor::fvFieldReconstructor procMeshes_(procMeshes), faceProcAddressing_(faceProcAddressing), cellProcAddressing_(cellProcAddressing), - boundaryProcAddressing_(boundaryProcAddressing) + boundaryProcAddressing_(boundaryProcAddressing), + nReconstructed_(0) {} diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H index f959738fd8..81d40b634d 100644 --- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H +++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructor.H @@ -71,6 +71,9 @@ class fvFieldReconstructor //- List of processor boundary addressing lists const PtrList& boundaryProcAddressing_; + //- Number of fields reconstructed + label nReconstructed_; + // Private Member Functions @@ -134,20 +137,33 @@ public: // Member Functions + //- Return number of fields reconstructed + label nReconstructed() const + { + return nReconstructed_; + } + + //- Reconstruct volume internal field + template + tmp > + reconstructFvVolumeInternalField(const IOobject& fieldIoObject); + //- Reconstruct volume field template tmp > - reconstructFvVolumeField - ( - const IOobject& fieldIoObject - ); + reconstructFvVolumeField(const IOobject& fieldIoObject); //- Reconstruct surface field template tmp > - reconstructFvSurfaceField + reconstructFvSurfaceField(const IOobject& fieldIoObject); + + //- Reconstruct and write all/selected volume internal fields + template + void reconstructFvVolumeInternalFields ( - const IOobject& fieldIoObject + const IOobjectList& objects, + const HashSet& selectedFields ); //- Reconstruct and write all/selected volume fields @@ -158,7 +174,7 @@ public: const HashSet& selectedFields ); - //- Reconstruct and write all/selected volume fields + //- Reconstruct and write all/selected surface fields template void reconstructFvSurfaceFields ( diff --git a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C index e01840cd7e..def5b3b1cd 100644 --- a/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C +++ b/src/parallel/reconstruct/reconstruct/fvFieldReconstructorReconstructFields.C @@ -33,6 +33,75 @@ License // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +template +Foam::tmp > +Foam::fvFieldReconstructor::reconstructFvVolumeInternalField +( + const IOobject& fieldIoObject +) +{ + // Read the field for all the processors + PtrList > procFields + ( + procMeshes_.size() + ); + + forAll(procMeshes_, procI) + { + procFields.set + ( + procI, + new DimensionedField + ( + IOobject + ( + fieldIoObject.name(), + procMeshes_[procI].time().timeName(), + procMeshes_[procI], + IOobject::MUST_READ, + IOobject::NO_WRITE + ), + procMeshes_[procI] + ) + ); + } + + + // Create the internalField + Field internalField(mesh_.nCells()); + + forAll(procMeshes_, procI) + { + const DimensionedField& procField = procFields[procI]; + + // Set the cell values in the reconstructed field + internalField.rmap + ( + procField.field(), + cellProcAddressing_[procI] + ); + } + + return tmp > + ( + new DimensionedField + ( + IOobject + ( + fieldIoObject.name(), + mesh_.time().timeName(), + mesh_, + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh_, + procFields[0].dimensions(), + internalField + ) + ); +} + + template Foam::tmp > Foam::fvFieldReconstructor::reconstructFvVolumeField @@ -451,7 +520,41 @@ Foam::fvFieldReconstructor::reconstructFvSurfaceField } -// Reconstruct and write all/selected volume fields +template +void Foam::fvFieldReconstructor::reconstructFvVolumeInternalFields +( + const IOobjectList& objects, + const HashSet& selectedFields +) +{ + const word& fieldClassName = DimensionedField::typeName; + + IOobjectList fields = objects.lookupClass(fieldClassName); + + if (fields.size()) + { + Info<< " Reconstructing " << fieldClassName << "s\n" << endl; + + forAllConstIter(IOobjectList, fields, fieldIter) + { + if + ( + !selectedFields.size() + || selectedFields.found(fieldIter()->name()) + ) + { + Info<< " " << fieldIter()->name() << endl; + + reconstructFvVolumeInternalField(*fieldIter())().write(); + + nReconstructed_++; + } + } + Info<< endl; + } +} + + template void Foam::fvFieldReconstructor::reconstructFvVolumeFields ( @@ -479,13 +582,15 @@ void Foam::fvFieldReconstructor::reconstructFvVolumeFields Info<< " " << fieldIter()->name() << endl; reconstructFvVolumeField(*fieldIter())().write(); + + nReconstructed_++; } } Info<< endl; } } -// Reconstruct and write all/selected surface fields + template void Foam::fvFieldReconstructor::reconstructFvSurfaceFields ( @@ -513,6 +618,8 @@ void Foam::fvFieldReconstructor::reconstructFvSurfaceFields Info<< " " << fieldIter()->name() << endl; reconstructFvSurfaceField(*fieldIter())().write(); + + nReconstructed_++; } } Info<< endl; diff --git a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.C b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.C index 7de433c8a9..71ef2f2204 100644 --- a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.C +++ b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.C @@ -39,7 +39,8 @@ Foam::pointFieldReconstructor::pointFieldReconstructor procMeshes_(procMeshes), pointProcAddressing_(pointProcAddressing), boundaryProcAddressing_(boundaryProcAddressing), - patchPointAddressing_(procMeshes.size()) + patchPointAddressing_(procMeshes.size()), + nReconstructed_(0) { // Inverse-addressing of the patch point labels. labelList pointMap(mesh_.size(), -1); diff --git a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H index f9e703cc93..faafb1d291 100644 --- a/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H +++ b/src/parallel/reconstruct/reconstruct/pointFieldReconstructor.H @@ -68,6 +68,9 @@ class pointFieldReconstructor //- Point patch addressing labelListListList patchPointAddressing_; + //- Number of fields reconstructed + label nReconstructed_; + // Private Member Functions @@ -130,6 +133,12 @@ public: // Member Functions + //- Return number of fields reconstructed + label nReconstructed() const + { + return nReconstructed_; + } + //- Reconstruct field template tmp >