diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C index 7ff31db0eca3fa6caae875008875c13f106b89e8..4cd984f0ccc59999e923e9214516db3f18cc238b 100644 --- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C +++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -126,7 +126,8 @@ Foam::pimpleControl::pimpleControl(fvMesh& mesh) nCorrPIMPLE_(0), nCorrPISO_(0), corrPISO_(0), - turbOnFinalIterOnly_(true) + turbOnFinalIterOnly_(true), + converged_(false) { read(); @@ -194,12 +195,27 @@ bool Foam::pimpleControl::loop() } bool completed = false; - if (criteriaSatisfied()) + if (converged_ || criteriaSatisfied()) { - Info<< algorithmName_ << ": converged in " << corr_ - 1 << " iterations" - << endl; - completed = true; - corr_ = 0; + if (converged_) + { + Info<< algorithmName_ << ": converged in " << corr_ - 1 + << " iterations" << endl; + + mesh_.data::remove("finalIteration"); + corr_ = 0; + converged_ = false; + + completed = true; + } + else + { + Info<< algorithmName_ << ": iteration " << corr_ << endl; + storePrevIterFields(); + + mesh_.data::add("finalIteration", true); + converged_ = true; + } } else { diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H index 9a5912e4fb703a655fbbb06dc0b8c9f6ecd60309..6cb9d3a21f652df26ddf6251473c7281de0e7611 100644 --- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H +++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -66,6 +66,9 @@ protected: //- Flag to indicate whether to only solve turbulence on final iter bool turbOnFinalIterOnly_; + //- Converged flag + bool converged_; + // Protected Member Functions diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H index 1fe609873175cd745d297b3ba2133b151348dcfc..1d8917de89b34dfa38f65ef411f555de35ffe303 100644 --- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H +++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -73,14 +73,14 @@ inline bool Foam::pimpleControl::storeInitialResiduals() const inline bool Foam::pimpleControl::finalIter() const { - return corr_ == nCorrPIMPLE_; + return converged_ || (corr_ == nCorrPIMPLE_); } inline bool Foam::pimpleControl::finalInnerIter() const { return - corr_ == nCorrPIMPLE_ + finalIter() && corrPISO_ == nCorrPISO_ && corrNonOrtho_ == nNonOrthCorr_ + 1; }