diff --git a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C index c90594ff24..9fb3a646d6 100644 --- a/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C +++ b/applications/utilities/errorEstimation/estimateScalarError/estimateScalarError.C @@ -39,24 +39,17 @@ Description int main(int argc, char *argv[]) { + timeSelector::addOptions(); -# include "addTimeOptions.H" # include "setRootCase.H" - - Info<< "\nEstimating error in scalar transport equation\n" << endl; - # include "createTime.H" - // Get times list - instantList Times = runTime.times(); - -# include "checkTimeOptions.H" - - runTime.setTime(Times[startTime], startTime); + instantList timeDirs = timeSelector::select0(runTime, args); # include "createMesh.H" - Info<< "Reading transportProperties\n" << endl; + Info<< "\nEstimating error in scalar transport equation\n" + << "Reading transportProperties\n" << endl; IOdictionary transportProperties ( @@ -79,9 +72,9 @@ int main(int argc, char *argv[]) ); - for (label i=startTime; iSetNumberOfOutputPorts(2); - vtkMultiBlockDataSet *lagrangian; - lagrangian = vtkMultiBlockDataSet::New(); + vtkMultiBlockDataSet *lagrangian = vtkMultiBlockDataSet::New(); lagrangian->ReleaseData(); this->GetExecutive()->SetOutputData(1, lagrangian); @@ -204,9 +203,9 @@ int vtkPV3FoamReader::RequestInformation ); } - double timeRange[2]; if (nTimeSteps) { + double timeRange[2]; timeRange[0] = timeSteps[0]; timeRange[1] = timeSteps[nTimeSteps-1]; @@ -273,19 +272,53 @@ int vtkPV3FoamReader::RequestData } } - // take port0 as the lead for other outputs - vtkInformation *outInfo = outputVector->GetInformationObject(0); + // Get the requested time step. + // We only support requests for a single time step + + int nRequestTime = 0; + double requestTime[nInfo]; + + // taking port0 as the lead for other outputs would be nice, but fails when + // a filter is added - we need to check everything + // but since PREVIOUS_UPDATE_TIME_STEPS() is protected, relay the logic + // to the vtkPV3Foam::setTime() method + for (int infoI = 0; infoI < nInfo; ++infoI) + { + vtkInformation *outInfo = outputVector->GetInformationObject(infoI); + + if + ( + outInfo->Has + ( + vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS() + ) + && outInfo->Length + ( + vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS() + ) >= 1 + ) + { + requestTime[nRequestTime++] = outInfo->Get + ( + vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS() + )[0]; + } + } + + if (nRequestTime) + { + foamData_->setTime(nRequestTime, requestTime); + } vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast ( - outInfo->Get + outputVector->GetInformationObject(0)->Get ( vtkMultiBlockDataSet::DATA_OBJECT() ) ); - vtkMultiBlockDataSet* lagrangianOutput = vtkMultiBlockDataSet::SafeDownCast ( outputVector->GetInformationObject(1)->Get @@ -294,24 +327,6 @@ int vtkPV3FoamReader::RequestData ) ); - if (outInfo->Has(vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS())) - { - // Get the requested time step. - // We only support requests for a single time step - int nRequestedTimeSteps = outInfo->Length - ( - vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS() - ); - if (nRequestedTimeSteps >= 1) - { - double *requestedTimeSteps = outInfo->Get - ( - vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS() - ); - - foamData_->setTime(requestedTimeSteps[0]); - } - } if (Foam::vtkPV3Foam::debug) { diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C index 4c4016c364..624358b4a0 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.C @@ -90,12 +90,21 @@ void Foam::vtkPV3Foam::reduceMemory() -int Foam::vtkPV3Foam::setTime(const double& requestedTime) +int Foam::vtkPV3Foam::setTime(int nRequest, const double requestTimes[]) { if (debug) { - Info<< " Foam::vtkPV3Foam::setTime(" << requestedTime << ")" - << endl; + Info<< " Foam::vtkPV3Foam::setTime("; + for (int requestI = 0; requestI < nRequest; ++requestI) + { + if (requestI) + { + Info<< ", "; + } + + Info<< requestTimes[requestI]; + } + Info << ") - previousIndex = " << timeIndex_ << endl; } Time& runTime = dbPtr_(); @@ -103,12 +112,26 @@ int Foam::vtkPV3Foam::setTime(const double& requestedTime) // Get times list instantList Times = runTime.times(); - int nearestIndex = Time::findClosestTimeIndex(Times, requestedTime); + int nearestIndex = timeIndex_; + + for (int requestI = 0; requestI < nRequest; ++requestI) + { + int index = Time::findClosestTimeIndex(Times, requestTimes[requestI]); + + if (index >= 0 && index != timeIndex_) + { + nearestIndex = index; + break; + } + } + + if (nearestIndex < 0) { nearestIndex = 0; } + // see what has changed if (timeIndex_ != nearestIndex) { @@ -138,10 +161,11 @@ int Foam::vtkPV3Foam::setTime(const double& requestedTime) if (debug) { - Info<< " Foam::vtkPV3Foam::setTime() - selected time " - << Times[nearestIndex].name() << " index=" << nearestIndex - << " meshChanged=" << meshChanged_ - << " fieldsChanged=" << fieldsChanged_ << endl; + Info<< " Foam::vtkPV3Foam::setTime() - selectedTime=" + << Times[nearestIndex].name() << " index=" << timeIndex_ + << "/" << Times.size() + << " meshChanged=" << Switch(meshChanged_) + << " fieldsChanged=" << Switch(fieldsChanged_) << endl; } return nearestIndex; diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H index 59e7e86b59..c6dd65af9e 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3Foam.H @@ -133,6 +133,7 @@ class vtkPV3Foam return block_; } + //- Assign block number, return previous value int block(int blockNo) { int prev = block_; @@ -718,9 +719,11 @@ public: //- Remove patch names from the display void removePatchNames(vtkRenderer* renderer); - //- set the runTime to the requested time, returns the timeIndex - // sets to "constant" on error and returns -1 - int setTime(const double& requestedTime); + //- set the runTime to the first plausible request time, + // returns the timeIndex + // sets to "constant" on error + int setTime(int count, const double requestTimes[]); + //- The current time index int timeIndex() const diff --git a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H index 8ef698872d..7e28460a46 100644 --- a/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H +++ b/applications/utilities/postProcessing/graphics/PV3FoamReader/vtkPV3Foam/vtkPV3FoamUpdateInfoFields.H @@ -40,7 +40,10 @@ void Foam::vtkPV3Foam::updateInfoFields { if (debug) { - Info<< " Foam::vtkPV3Foam::updateInfoFields" << endl; + Info<< " Foam::vtkPV3Foam::updateInfoFields <" + << meshType::Mesh::typeName + << "> [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" + << endl; } stringList enabledEntries; diff --git a/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C b/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C index 34ebbc75dc..65356b382b 100644 --- a/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C +++ b/applications/utilities/postProcessing/miscellaneous/engineCompRatio/engineCompRatio.C @@ -40,57 +40,50 @@ Description int main(int argc, char *argv[]) { + #include "setRootCase.H" + #include "createEngineTime.H" + #include "createEngineMesh.H" -# include "setRootCase.H" -# include "createEngineTime.H" -# include "createEngineMesh.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // scalar eps = 1.0e-10; scalar fullCycle = 360.0; scalar ca0 = -180.0; scalar ca1 = 0.0; - scalar ca = runTime.theta(); - while (ca > ca0) + while (runTime.theta() > ca0) { ca0 += fullCycle; ca1 += fullCycle; } - if (mag(ca - ca0) > eps) + while (mag(runTime.theta() - ca0) > eps) { - while(mag(ca - ca0) > eps) - { - ca = runTime.theta(); - scalar t0 = runTime.userTimeToTime(ca0 - ca); - runTime.setDeltaT(t0); - runTime++; - Info << "CA = " << ca << endl; - mesh.move(); - } + scalar t0 = runTime.userTimeToTime(ca0 - runTime.theta()); + runTime.setDeltaT(t0); + runTime++; + Info<< "CA = " << runTime.theta() << endl; + mesh.move(); } scalar Vmax = sum(mesh.V().field()); - while(mag(ca-ca1) > eps) + while (mag(runTime.theta()-ca1) > eps) { - ca = runTime.theta(); - scalar t1 = runTime.userTimeToTime(ca1-ca); + scalar t1 = runTime.userTimeToTime(ca1-runTime.theta()); runTime.setDeltaT(t1); runTime++; - Info << "CA = " << runTime.theta() << endl; + Info<< "CA = " << runTime.theta() << endl; mesh.move(); } scalar Vmin = sum(mesh.V().field()); - Info << "\nVmax = " << Vmax; - Info << ", Vmin = " << Vmin << endl; - Info << "Vmax/Vmin = " << Vmax/Vmin << endl; - Info << "\n end\n"; + Info<< "\nVmax = " << Vmax; + Info<< ", Vmin = " << Vmin << endl; + Info<< "Vmax/Vmin = " << Vmax/Vmin << endl; + Info<< "\nEnd" << endl; return 0; } diff --git a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C index bb41fb60d4..26d66de83e 100644 --- a/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C +++ b/applications/utilities/postProcessing/miscellaneous/ptot/ptot.C @@ -36,25 +36,18 @@ Description int main(int argc, char *argv[]) { + timeSelector::addOptions(); -# include "addTimeOptions.H" # include "setRootCase.H" - # include "createTime.H" - // Get times list - instantList Times = runTime.times(); - - // set startTime and endTime depending on -time and -latestTime options -# include "checkTimeOptions.H" - - runTime.setTime(Times[startTime], startTime); + instantList timeDirs = timeSelector::select0(runTime, args); # include "createMesh.H" - for (label i=startTime; i