Go to the documentation of this file.
34 void Foam::loopControl::clear()
48 void Foam::loopControl::read(
const dictionary&
dict)
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())
97 bool 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;
144 Foam::loopControl::loopControl
162 Foam::loopControl::loopControl
182 Foam::loopControl::loopControl
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() <<
": ";
dictionary * findDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX)
Find and return a sub-dictionary pointer if present.
wordRes onLoop_
Function object names to fire during the loop (at executeInterval)
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
A class for handling words, derived from Foam::string.
bool read(const char *buf, int32_t &val)
Same as readInt32.
const word dictName("faMeshDefinition")
wordRes onConverged_
Function object names to fire on convergence.
A class for managing arbitrary loops with the ability to invoke function object execution.
~loopControl()
Destructor.
dictionary convergenceDict_
Dictionary for checking convergence (all regions)
Ostream & operator<<(Ostream &, const boundaryPatch &p)
Write boundaryPatch as dictionary entries (without surrounding braces)
label nCycles() const
The total number of cycles.
Foam::PtrList< Foam::fvMesh > meshes(regionNames.size())
const word & name() const
Name of the loop control.
Selector class for finite volume solution solution. fvMesh is derived from fvSolution so that all fie...
static Pair< scalar > maxResidual(const fvMesh &fvmesh, const entry &dataDictEntry)
A class for managing sub-loops referencing Time.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
OBJstream os(runTime.globalPath()/outputName)
dictionary subOrEmptyDict(const word &keyword, enum keyType::option matchOpt=keyType::REGEX, const bool mandatory=false) const
bool converged_
Convergence tests passed.
const dictionary & solutionDict() const
Return the selected sub-dictionary of solvers if the "select".
label index() const
The current cycle index.
forAllConstIters(mixture.phases(), phase)
void clear()
Clear the list, i.e. set size to zero.
label total_
The total number of cycles in the sub-cycle.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
T getOrDefault(const word &keyword, const T &deflt, enum keyType::option matchOpt=keyType::REGEX) const
void clear()
Clear the dictionary.
label interval_
The interval to execute onLoop function-objects.
bool readIfPresent(const word &keyword, T &val, enum keyType::option matchOpt=keyType::REGEX) const