From 04d9ec232c111b5cd5839f368062d6a8702e81b8 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 30 Mar 2010 08:19:56 +0100 Subject: [PATCH 1/3] ENH: Use scheduled transfer for one to many comms --- .../matrices/LUscalarMatrix/LUscalarMatrixTemplates.C | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/OpenFOAM/matrices/LUscalarMatrix/LUscalarMatrixTemplates.C b/src/OpenFOAM/matrices/LUscalarMatrix/LUscalarMatrixTemplates.C index 5f10a569ee..d7d995cd9c 100644 --- a/src/OpenFOAM/matrices/LUscalarMatrix/LUscalarMatrixTemplates.C +++ b/src/OpenFOAM/matrices/LUscalarMatrix/LUscalarMatrixTemplates.C @@ -92,7 +92,7 @@ void Foam::LUscalarMatrix::solve(Field& sourceSol) const { OPstream::write ( - Pstream::blocking, + Pstream::scheduled, slave, reinterpret_cast ( @@ -106,7 +106,7 @@ void Foam::LUscalarMatrix::solve(Field& sourceSol) const { IPstream::read ( - Pstream::blocking, + Pstream::scheduled, Pstream::masterNo(), reinterpret_cast(sourceSol.begin()), sourceSol.byteSize() From 9d216d5280f4f0c0c17a345415cf8ab43e40f1f7 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 30 Mar 2010 08:20:22 +0100 Subject: [PATCH 2/3] STYLE: Remove unused debug code --- .../vtkPV3blockMesh/vtkPV3blockMeshConvert.C | 5 ----- 1 file changed, 5 deletions(-) diff --git a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C index 3ee9a64c5e..e29c1ac08d 100644 --- a/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C +++ b/applications/utilities/postProcessing/graphics/PV3Readers/PV3blockMeshReader/vtkPV3blockMesh/vtkPV3blockMeshConvert.C @@ -166,11 +166,6 @@ void Foam::vtkPV3blockMesh::convertMeshEdges continue; } - OStringStream ostr; - - ostr<< edges[edgeI].start() << ":" << edges[edgeI].end() << " - " - << edges[edgeI].type(); - // search each block forAll(blkMesh, blockI) { From 1a741a2259c878db61f2c87a4b334730b9dc0a53 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 30 Mar 2010 08:26:45 +0100 Subject: [PATCH 3/3] BUG: numbering on lagrangian files was not uptodate with field vtk files If no particles are in cloud it does not get written. Hence it would also not output a vtk file. Changed now to always output lagrangian data. --- .../dataConversion/foamToVTK/foamToVTK.C | 102 +++++++++++++----- .../foamToVTK/lagrangianWriter.C | 34 +++--- .../foamToVTK/lagrangianWriter.H | 3 +- 3 files changed, 99 insertions(+), 40 deletions(-) diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C index 872f639510..71d74f266e 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/foamToVTK.C @@ -376,6 +376,44 @@ int main(int argc, char *argv[]) // mesh wrapper; does subsetting and decomposition vtkMesh vMesh(mesh, cellSetName); + + // Scan for all possible lagrangian clouds + HashSet allCloudDirs; + forAll(timeDirs, timeI) + { + runTime.setTime(timeDirs[timeI], timeI); + fileNameList cloudDirs + ( + readDir + ( + runTime.timePath()/regionPrefix/cloud::prefix, + fileName::DIRECTORY + ) + ); + forAll(cloudDirs, i) + { + IOobjectList sprayObjs + ( + mesh, + runTime.timeName(), + cloud::prefix/cloudDirs[i] + ); + + IOobject* positionsPtr = sprayObjs.lookup("positions"); + + if (positionsPtr) + { + if (allCloudDirs.insert(cloudDirs[i])) + { + Info<< "At time: " << runTime.timeName() + << " detected cloud directory : " << cloudDirs[i] + << endl; + } + } + } + } + + forAll(timeDirs, timeI) { runTime.setTime(timeDirs[timeI], timeI); @@ -927,38 +965,33 @@ int main(int argc, char *argv[]) // //--------------------------------------------------------------------- - fileNameList cloudDirs - ( - readDir - ( - runTime.timePath()/regionPrefix/cloud::prefix, - fileName::DIRECTORY - ) - ); - - forAll(cloudDirs, i) + forAllConstIter(HashSet, allCloudDirs, iter) { + const fileName& cloudName = iter.key(); + + // Always create the cloud directory. + mkDir(fvPath/cloud::prefix/cloudName); + + fileName lagrFileName + ( + fvPath/cloud::prefix/cloudName/cloudName + + "_" + timeDesc + ".vtk" + ); + + Info<< " Lagrangian: " << lagrFileName << endl; + + IOobjectList sprayObjs ( mesh, runTime.timeName(), - cloud::prefix/cloudDirs[i] + cloud::prefix/cloudName ); IOobject* positionsPtr = sprayObjs.lookup("positions"); if (positionsPtr) { - mkDir(fvPath/cloud::prefix/cloudDirs[i]); - - fileName lagrFileName - ( - fvPath/cloud::prefix/cloudDirs[i]/cloudDirs[i] - + "_" + timeDesc + ".vtk" - ); - - Info<< " Lagrangian: " << lagrFileName << endl; - wordList labelNames(sprayObjs.names(labelIOField::typeName)); Info<< " labels :"; print(Info, labelNames); @@ -1000,18 +1033,19 @@ int main(int argc, char *argv[]) vMesh, binary, lagrFileName, - cloudDirs[i] + cloudName, + false ); // Write number of fields writer.writeParcelHeader ( labelNames.size() - + scalarNames.size() - + vectorNames.size() - + sphereNames.size() - + symmNames.size() - + tensorNames.size() + + scalarNames.size() + + vectorNames.size() + + sphereNames.size() + + symmNames.size() + + tensorNames.size() ); // Fields @@ -1022,6 +1056,20 @@ int main(int argc, char *argv[]) writer.writeIOField(symmNames); writer.writeIOField(tensorNames); } + else + { + lagrangianWriter writer + ( + vMesh, + binary, + lagrFileName, + cloudName, + true + ); + + // Write number of fields + writer.writeParcelHeader(0); + } } } diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.C b/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.C index 75733f3340..4c56273815 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.C +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.C @@ -37,7 +37,8 @@ Foam::lagrangianWriter::lagrangianWriter const vtkMesh& vMesh, const bool binary, const fileName& fName, - const word& cloudName + const word& cloudName, + const bool dummyCloud ) : vMesh_(vMesh), @@ -52,19 +53,28 @@ Foam::lagrangianWriter::lagrangianWriter writeFuns::writeHeader(os_, binary_, mesh.time().caseName()); os_ << "DATASET POLYDATA" << std::endl; - Cloud parcels(mesh, cloudName_, false); - - nParcels_ = parcels.size(); - - os_ << "POINTS " << parcels.size() << " float" << std::endl; - - DynamicList partField(3*parcels.size()); - - forAllConstIter(Cloud, parcels, elmnt) + if (dummyCloud) { - writeFuns::insert(elmnt().position(), partField); + nParcels_ = 0; + + os_ << "POINTS " << nParcels_ << " float" << std::endl; + } + else + { + Cloud parcels(mesh, cloudName_, false); + + nParcels_ = parcels.size(); + + os_ << "POINTS " << nParcels_ << " float" << std::endl; + + DynamicList partField(3*parcels.size()); + + forAllConstIter(Cloud, parcels, elmnt) + { + writeFuns::insert(elmnt().position(), partField); + } + writeFuns::write(os_, binary_, partField); } - writeFuns::write(os_, binary_, partField); } diff --git a/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.H b/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.H index 292228a98b..acb91a685c 100644 --- a/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.H +++ b/applications/utilities/postProcessing/dataConversion/foamToVTK/lagrangianWriter.H @@ -81,7 +81,8 @@ public: const vtkMesh&, const bool binary, const fileName&, - const word& + const word&, + const bool dummyCloud );