34void Foam::loopControl::clear()
59 timeStart = time_.userTimeToTime(timeStart);
64 && time_.value() >= (timeStart - 0.5*time_.deltaTValue())
71 timeEnd = time_.userTimeToTime(timeEnd);
76 && time_.value() <= (timeEnd + 0.5*time_.deltaTValue())
97bool Foam::loopControl::checkConverged()
const
99 if (convergenceDict_.empty())
104 HashTable<const fvMesh*>
meshes = time_.lookupClass<
const fvMesh>();
106 bool achieved =
true;
107 bool checked =
false;
111 const fvMesh& regionMesh = *(meshIter.val());
113 const dictionary& solverDict = regionMesh.solverPerformanceDict();
114 for (
const entry& dataDictEntry : solverDict)
116 const word& variableName = dataDictEntry.keyword();
118 const scalar absTol =
119 convergenceDict_.getOrDefault<scalar>(variableName, -1);
125 Pair<scalar> residuals =
133 achieved = achieved && (residuals.first() < absTol);
138 return checked && achieved;
185 const word& algorithmName,
222 bool active = (index_ < total_);
228 converged_ = checkConverged();
232 time_.functionObjects().execute(onConverged_, index_);
238 interval_ && !(index_ % interval_)
242 time_.functionObjects().execute(onLoop_, index_);
249 if (!converged_ && !onEnd_.empty())
251 time_.functionObjects().execute(onEnd_, index_);
263 os << ctrl.
name() <<
": ";
void clear()
Clear the list, i.e. set size to zero.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
virtual bool read()
Re-read model coefficients if they have changed.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
dictionary * findDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX)
Find and return a sub-dictionary pointer if present.
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
bool readIfPresent(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX) const
void clear()
Clear the dictionary.
Selector class for finite volume solution solution. fvMesh is derived from fvSolution so that all fie...
A class for managing arbitrary loops with the ability to invoke function object execution.
~loopControl()
Destructor.
const word & name() const
Name of the loop control.
label interval_
The interval to execute onLoop function-objects.
wordRes onConverged_
Function object names to fire on convergence.
dictionary convergenceDict_
Dictionary for checking convergence (all regions)
wordRes onLoop_
Function object names to fire during the loop (at executeInterval)
bool converged_
Convergence tests passed.
static Pair< scalar > maxResidual(const fvMesh &fvmesh, const entry &dataDictEntry)
const dictionary & solutionDict() const
A class for managing sub-loops referencing Time.
label nCycles() const
The total number of cycles.
label index() const
The current cycle index.
label total_
The total number of cycles in the sub-cycle.
A class for handling words, derived from Foam::string.
Foam::PtrList< Foam::fvMesh > meshes(regionNames.size())
OBJstream os(runTime.globalPath()/outputName)
const word dictName("faMeshDefinition")
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
#define forAllConstIters(container, iter)
Iterate across all elements of the container object with const access.