diff --git a/applications/utilities/parallelProcessing/redistributePar/Make/files b/applications/utilities/parallelProcessing/redistributePar/Make/files index 73b91011bd..1d35e92c09 100644 --- a/applications/utilities/parallelProcessing/redistributePar/Make/files +++ b/applications/utilities/parallelProcessing/redistributePar/Make/files @@ -1,12 +1,12 @@ -passivePositionParticleCloud.C +passivePositionParticleCloud.cxx -parLagrangianDistributor.C -parLagrangianDistributorFields.C +parLagrangianDistributor.cxx +parLagrangianDistributorFields.cxx -parPointFieldDistributor.C -parFaFieldDistributorCache.C -parFvFieldDistributor.C -parFvFieldDistributorFields.C +parPointFieldDistributor.cxx +parFaFieldDistributorCache.cxx +parFvFieldDistributor.cxx +parFvFieldDistributorFields.cxx loadOrCreateMesh.C redistributePar.C diff --git a/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.H b/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.H index 5942aba3a1..fc0b14ae98 100644 --- a/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.H +++ b/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2022 OpenCFD Ltd. + Copyright (C) 2022-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -30,7 +30,7 @@ Description Simple container to manage read/write, redistribute finiteArea fields. SourceFiles - parFaFieldDistributorCache.C + parFaFieldDistributorCache.cxx \*---------------------------------------------------------------------------*/ @@ -71,6 +71,20 @@ class parFaFieldDistributorCache // Private Member Functions + //- Read distributed fields + template + void readImpl + ( + const Time& baseRunTime, + const fileName& proc0CaseName, + const bool decompose, // i.e. read from undecomposed case + + const BoolListType& areaMeshOnProc, + refPtr& readHandler, + const fileName& areaMeshInstance, + faMesh& mesh + ); + //- Redistribute and write fields of given type (file-scope use) template static void redistributeAndWrite @@ -102,9 +116,24 @@ public: ( const Time& baseRunTime, const fileName& proc0CaseName, - const bool decompose, // i.e. read from undecomposed case + //! read from undecomposed case? + const bool decompose, + //! Existence of the processor-local mesh (bitset) + const bitSet& areaMeshOnProc, + refPtr& readHandler, + const fileName& areaMeshInstance, + faMesh& mesh + ); - const boolList& areaMeshOnProc, + //- Read distributed fields + void read + ( + const Time& baseRunTime, + const fileName& proc0CaseName, + //! read from undecomposed case? + const bool decompose, + //! Existence of the processor-local mesh (bool list) + const boolUList& areaMeshOnProc, refPtr& readHandler, const fileName& areaMeshInstance, faMesh& mesh diff --git a/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.C b/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.cxx similarity index 83% rename from applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.C rename to applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.cxx index 7810e571ff..aa9ca6fc56 100644 --- a/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.C +++ b/applications/utilities/parallelProcessing/redistributePar/parFaFieldDistributorCache.cxx @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2022 OpenCFD Ltd. + Copyright (C) 2022-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -55,15 +55,14 @@ void Foam::parFaFieldDistributorCache::redistributeAndWrite } -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::parFaFieldDistributorCache::read +template +void Foam::parFaFieldDistributorCache::readImpl ( const Time& baseRunTime, const fileName& proc0CaseName, const bool decompose, // i.e. read from undecomposed case - const boolList& areaMeshOnProc, + const BoolListType& areaMeshOnProc, refPtr& readHandler, const fileName& areaMeshInstance, faMesh& mesh @@ -75,14 +74,14 @@ void Foam::parFaFieldDistributorCache::read autoPtr subsetterPtr; // Missing an area mesh somewhere? - if (areaMeshOnProc.found(false)) + if (!areaMeshOnProc.all()) { const bool oldParRun = UPstream::parRun(false); const int oldCache = fileOperation::cacheLevel(0); // A zero-sized mesh with boundaries. // This is used to create zero-sized fields. - subsetterPtr.reset(new faMeshSubset(mesh, zero{})); + subsetterPtr.reset(new faMeshSubset(mesh, Foam::zero{})); fileOperation::cacheLevel(oldCache); UPstream::parRun(oldParRun); // Restore parallel state @@ -162,6 +161,60 @@ void Foam::parFaFieldDistributorCache::read } +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::parFaFieldDistributorCache::read +( + const Time& baseRunTime, + const fileName& proc0CaseName, + const bool decompose, // i.e. read from undecomposed case + + const bitSet& areaMeshOnProc, + refPtr& readHandler, + const fileName& areaMeshInstance, + faMesh& mesh +) +{ + readImpl + ( + baseRunTime, + proc0CaseName, + decompose, + + areaMeshOnProc, + readHandler, + areaMeshInstance, + mesh + ); +} + + +void Foam::parFaFieldDistributorCache::read +( + const Time& baseRunTime, + const fileName& proc0CaseName, + const bool decompose, // i.e. read from undecomposed case + + const boolUList& areaMeshOnProc, + refPtr& readHandler, + const fileName& areaMeshInstance, + faMesh& mesh +) +{ + readImpl + ( + baseRunTime, + proc0CaseName, + decompose, + + areaMeshOnProc, + readHandler, + areaMeshInstance, + mesh + ); +} + + void Foam::parFaFieldDistributorCache::redistributeAndWrite ( const faMeshDistributor& distributor, diff --git a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.H b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.H index 1c070863c2..26545e372e 100644 --- a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.H +++ b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.H @@ -35,9 +35,9 @@ Description baseMesh is non-zero cells on processor0 only. SourceFiles - parFvFieldDistributor.C - parFvFieldDistributorFields.C - parFvFieldDistributorTemplates.C + parFvFieldDistributor.cxx + parFvFieldDistributor.txx + parFvFieldDistributorFields.cxx \*---------------------------------------------------------------------------*/ @@ -228,7 +228,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "parFvFieldDistributorTemplates.C" +# include "parFvFieldDistributor.txx" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.C b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.C rename to applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.txx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorTemplates.C rename to applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributor.txx diff --git a/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorFields.C b/applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorFields.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorFields.C rename to applications/utilities/parallelProcessing/redistributePar/parFvFieldDistributorFields.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.H b/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.H index f79054a9f8..06b98ee284 100644 --- a/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.H +++ b/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.H @@ -33,9 +33,9 @@ Description Runs in parallel. Redistributes from fromMesh to toMesh. SourceFiles - parLagrangianDistributor.C - parLagrangianDistributorFields.C - parLagrangianDistributorTemplates.C + parLagrangianDistributor.cxx + parLagrangianDistributor.txx + parLagrangianDistributorFields.cxx \*---------------------------------------------------------------------------*/ @@ -226,7 +226,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "parLagrangianDistributorTemplates.C" +# include "parLagrangianDistributor.txx" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.C b/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.C rename to applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorTemplates.C b/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.txx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorTemplates.C rename to applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributor.txx diff --git a/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorFields.C b/applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorFields.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorFields.C rename to applications/utilities/parallelProcessing/redistributePar/parLagrangianDistributorFields.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.H b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.H index 357a0ef5a4..83588f8275 100644 --- a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.H +++ b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.H @@ -46,8 +46,8 @@ Description Runs in parallel. Redistributes from srcMesh to tgtMesh. SourceFiles - parPointFieldDistributor.C - parPointFieldDistributorTemplates.C + parPointFieldDistributor.cxx + parPointFieldDistributor.txx \*---------------------------------------------------------------------------*/ @@ -266,7 +266,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository -# include "parPointFieldDistributorTemplates.C" +# include "parPointFieldDistributor.txx" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.C b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.C rename to applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C b/applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.txx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributorTemplates.C rename to applications/utilities/parallelProcessing/redistributePar/parPointFieldDistributor.txx diff --git a/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.H b/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.H index 86aac80056..1957379832 100644 --- a/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.H +++ b/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.H @@ -30,7 +30,7 @@ Description A Cloud of passive position particles SourceFiles - passivePositionParticleCloud.C + passivePositionParticleCloud.cxx \*---------------------------------------------------------------------------*/ @@ -79,7 +79,7 @@ public: passivePositionParticleCloud ( const polyMesh& mesh, - const Foam::zero, + Foam::zero, const word& cloudName = cloud::defaultName ) : diff --git a/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.C b/applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.cxx similarity index 100% rename from applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.C rename to applications/utilities/parallelProcessing/redistributePar/passivePositionParticleCloud.cxx diff --git a/applications/utilities/parallelProcessing/redistributePar/redistributeLagrangian.H b/applications/utilities/parallelProcessing/redistributePar/redistributeLagrangian.H index 8fa5d1143b..e74ae955de 100644 --- a/applications/utilities/parallelProcessing/redistributePar/redistributeLagrangian.H +++ b/applications/utilities/parallelProcessing/redistributePar/redistributeLagrangian.H @@ -48,13 +48,11 @@ PtrList readLagrangian ( const fvMesh& mesh, - const wordList& cloudNames, + const UList& cloudNames, const boolUList& haveClouds, const wordRes& selectedFields ) { - PtrList clouds(cloudNames.size()); - if (!cloudNames.empty()) { (void)mesh.tetBasePtIs(); @@ -72,16 +70,16 @@ readLagrangian // Setup clouds + PtrList clouds(cloudNames.size()); + forAll(cloudNames, i) { - //Pout<< "Loading cloud " << cloudNames[i] << endl; - clouds.set - ( - i, - new unmappedPassivePositionParticleCloud(mesh, cloudNames[i], false) - ); + const auto& cloudName = cloudNames[i]; + //Pout<< "Loading cloud " << cloudName << endl; - //for (passivePositionParticle& p : clouds[i])) + auto& cloud = clouds.emplace_set(i, mesh, cloudName, false); + + //for (passivePositionParticle& p : cloud) //{ // Pout<< "Particle position:" << p.position() // << " cell:" << p.cell() @@ -89,12 +87,12 @@ readLagrangian // << endl; //} - IOobjectList cloudObjs(clouds[i], clouds[i].time().timeName()); + IOobjectList cloudObjs(cloud, cloud.time().timeName()); parLagrangianDistributor::readAllFields ( - clouds[i], - haveClouds[i], + cloud, + haveClouds.test(i), cloudObjs, selectedFields ); diff --git a/applications/utilities/parallelProcessing/redistributePar/unmappedPassivePositionParticleCloud.H b/applications/utilities/parallelProcessing/redistributePar/unmappedPassivePositionParticleCloud.H index 0ac69d6f94..1cad0e185e 100644 --- a/applications/utilities/parallelProcessing/redistributePar/unmappedPassivePositionParticleCloud.H +++ b/applications/utilities/parallelProcessing/redistributePar/unmappedPassivePositionParticleCloud.H @@ -31,9 +31,6 @@ Description passivePositionParticleCloud but with autoMap and writing disabled. Only used for its objectRegistry to store lagrangian fields -SourceFiles - unmappedPassivePositionParticleCloud.C - \*---------------------------------------------------------------------------*/ #ifndef Foam_unmappedPassivePositionParticleCloud_H @@ -73,7 +70,7 @@ public: unmappedPassivePositionParticleCloud ( const polyMesh& mesh, - const Foam::zero, + Foam::zero, const word& cloudName = cloud::defaultName ) : diff --git a/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.H b/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.H index d58e882758..914a1d055a 100644 --- a/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.H +++ b/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2022-2023 OpenCFD Ltd. + Copyright (C) 2022-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -30,7 +30,7 @@ Description Common methods/utilities for field decomposers/distributors etc. SourceFiles - fieldsDistributorTemplates.C + fieldsDistributor.txx \*---------------------------------------------------------------------------*/ @@ -61,9 +61,11 @@ class fieldsDistributor template static void readFieldsImpl ( - refPtr* readHandlerPtr, // Can be nullptr + //! Optional filehandler (nullptr if unused). NB: pointer to refPtr! + refPtr* readHandlerPtr, const BoolListType& haveMeshOnProc, - const MeshSubsetter* subsetter, // Can be nullptr + //! Optional subsetting (nullptr if unused) + const MeshSubsetter* subsetter, const typename GeoField::Mesh& mesh, IOobjectList& allObjects, PtrList& fields, @@ -127,7 +129,8 @@ public: static void readFields ( const bitSet& haveMeshOnProc, - const MeshSubsetter* subsetter, // Can be nullptr + //! Optional subsetting (nullptr if unused) + const MeshSubsetter* subsetter, const typename GeoField::Mesh& mesh, IOobjectList& allObjects, PtrList& fields, @@ -140,13 +143,28 @@ public: static void readFields ( const boolUList& haveMeshOnProc, - const MeshSubsetter* subsetter, // Can be nullptr + //! Optional subsetting (nullptr if unused) + const MeshSubsetter* subsetter, const typename GeoField::Mesh& mesh, IOobjectList& allObjects, PtrList& fields, const bool deregister = false ); + //- Read volume/surface/point/area fields that may or may not exist + //- on all processors + template + static void readFields + ( + const bitSet& haveMeshOnProc, + const typename GeoField::Mesh& mesh, + //! Optional subsetting (can be nullptr) + const autoPtr& subsetter, + IOobjectList& allObjects, + PtrList& fields, + const bool deregister = false + ); + //- Read volume/surface/point/area fields that may or may not exist //- on all processors template @@ -154,6 +172,22 @@ public: ( const boolUList& haveMeshOnProc, const typename GeoField::Mesh& mesh, + //! Optional subsetting (can be nullptr) + const autoPtr& subsetter, + IOobjectList& allObjects, + PtrList& fields, + const bool deregister = false + ); + + //- Read volume/surface/point/area fields that may or may not exist + //- on all processors + template + static void readFields + ( + const bitSet& haveMeshOnProc, + refPtr& readHandler, + const typename GeoField::Mesh& mesh, + //! Optional subsetting (can be nullptr) const autoPtr& subsetter, IOobjectList& allObjects, PtrList& fields, @@ -168,6 +202,7 @@ public: const boolUList& haveMeshOnProc, refPtr& readHandler, const typename GeoField::Mesh& mesh, + //! Optional subsetting (can be nullptr) const autoPtr& subsetter, IOobjectList& allObjects, PtrList& fields, @@ -183,7 +218,7 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository - #include "fieldsDistributorTemplates.C" + #include "fieldsDistributor.txx" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributorTemplates.C b/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.txx similarity index 90% rename from src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributorTemplates.C rename to src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.txx index 1bd35abd3b..3697299ec2 100644 --- a/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributorTemplates.C +++ b/src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.txx @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2022-2024 OpenCFD Ltd. + Copyright (C) 2022-2025 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -209,7 +209,7 @@ void Foam::fieldsDistributor::readFieldsImpl { const word& name = masterNames[i]; IOobject& io = *objects[name]; - io.writeOpt(IOobject::AUTO_WRITE); + io.writeOpt(IOobjectOption::AUTO_WRITE); // Load field (but not oldTime) readField(io, mesh, i, fields); @@ -244,7 +244,7 @@ void Foam::fieldsDistributor::readFieldsImpl { const word& name = masterNames[i]; IOobject& io = *objects[name]; - io.writeOpt(IOobject::AUTO_WRITE); + io.writeOpt(IOobjectOption::AUTO_WRITE); // Load field (but not oldTime) readField(io, mesh, i, fields); @@ -318,9 +318,9 @@ void Foam::fieldsDistributor::readFieldsImpl "none", mesh.time().timeName(), mesh.thisDb(), - IOobject::NO_READ, - IOobject::AUTO_WRITE, - IOobject::REGISTER + IOobjectOption::NO_READ, + IOobjectOption::AUTO_WRITE, + IOobjectOption::REGISTER ); forAll(fieldDicts, i) @@ -412,6 +412,31 @@ void Foam::fieldsDistributor::readFields } +template +void Foam::fieldsDistributor::readFields +( + const bitSet& haveMeshOnProc, + const typename GeoField::Mesh& mesh, + const autoPtr& subsetter, + IOobjectList& allObjects, + PtrList& fields, + const bool deregister +) +{ + readFieldsImpl + ( + nullptr, // readHandler + haveMeshOnProc, + subsetter.get(), + + mesh, + allObjects, + fields, + deregister + ); +} + + template void Foam::fieldsDistributor::readFields ( @@ -437,6 +462,32 @@ void Foam::fieldsDistributor::readFields } +template +void Foam::fieldsDistributor::readFields +( + const bitSet& haveMeshOnProc, + refPtr& readHandler, + const typename GeoField::Mesh& mesh, + const autoPtr& subsetter, + IOobjectList& allObjects, + PtrList& fields, + const bool deregister +) +{ + readFieldsImpl + ( + &readHandler, + haveMeshOnProc, + subsetter.get(), + + mesh, + allObjects, + fields, + deregister + ); +} + + template void Foam::fieldsDistributor::readFields (