From 04e512140c9412814bc8fe0f8d3f90c54d1e73c2 Mon Sep 17 00:00:00 2001 From: andy Date: Mon, 30 Jan 2012 17:39:37 +0000 Subject: [PATCH] BUG: Lagrangian post-processing model not outputting in chronological order - mantis #357 --- .../PatchPostProcessing/PatchPostProcessing.C | 36 +++++++++++++++---- .../PatchPostProcessing/PatchPostProcessing.H | 3 ++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C index 2b60f241b5..b2e878055c 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.C @@ -26,6 +26,7 @@ License #include "PatchPostProcessing.H" #include "Pstream.H" #include "stringListOps.H" +#include "ListOps.H" #include "ListListOps.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -55,9 +56,12 @@ void Foam::PatchPostProcessing::write() { forAll(patchData_, i) { + List > procTimes(Pstream::nProcs()); + procTimes[Pstream::myProcNo()] = times_[i]; + Pstream::gatherList(procTimes); + List > procData(Pstream::nProcs()); procData[Pstream::myProcNo()] = patchData_[i]; - Pstream::gatherList(procData); if (Pstream::master()) @@ -100,18 +104,33 @@ void Foam::PatchPostProcessing::write() procData, accessOp >() ); - sort(globalData); + + List globalTimes; + globalTimes = ListListOps::combine > + ( + procTimes, + accessOp >() + ); + + labelList indices; + sortedOrder(globalTimes, indices); string header("# Time currentProc " + parcelType::propHeader); patchOutFile<< header.c_str() << nl; - forAll(globalData, dataI) + forAll(globalTimes, i) { - patchOutFile<< globalData[dataI].c_str() << nl; + label dataI = indices[i]; + + patchOutFile + << globalTimes[dataI] << ' ' + << globalData[dataI].c_str() + << nl; } } patchData_[i].clearStorage(); + times_[i].clearStorage(); } } @@ -128,6 +147,7 @@ Foam::PatchPostProcessing::PatchPostProcessing CloudFunctionObject(dict, owner, typeName), maxStoredParcels_(readScalar(this->coeffDict().lookup("maxStoredParcels"))), patchIDs_(), + times_(), patchData_() { const wordList allPatchNames = owner.mesh().boundaryMesh().names(); @@ -167,6 +187,7 @@ Foam::PatchPostProcessing::PatchPostProcessing } patchData_.setSize(patchIDs_.size()); + times_.setSize(patchIDs_.size()); } @@ -179,6 +200,7 @@ Foam::PatchPostProcessing::PatchPostProcessing CloudFunctionObject(ppm), maxStoredParcels_(ppm.maxStoredParcels_), patchIDs_(ppm.patchIDs_), + times_(ppm.times_), patchData_(ppm.patchData_) {} @@ -203,9 +225,11 @@ void Foam::PatchPostProcessing::postPatch const label localPatchI = applyToPatch(patchI); if (localPatchI != -1 && patchData_[localPatchI].size() < maxStoredParcels_) { + times_[localPatchI].append(this->owner().time().value()); + OStringStream data; - data<< this->owner().time().timeName() << ' ' << Pstream::myProcNo() - << ' ' << p; + data<< Pstream::myProcNo() << ' ' << p; + patchData_[localPatchI].append(data.str()); } } diff --git a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H index 83aaa1663b..9945d24b58 100644 --- a/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H +++ b/src/lagrangian/intermediate/submodels/CloudFunctionObjects/PatchPostProcessing/PatchPostProcessing.H @@ -61,6 +61,9 @@ class PatchPostProcessing //- List of patch indices to post-process labelList patchIDs_; + //- List of time for each data record + List > times_; + //- List of output data per patch List > patchData_;