functionObjects::residuals: Prevent exectution at the start

Residuals are only available once some equations have been solved, so it
is not valid for this function to execute until the end of the first
timestep.

This also prevents a bug in which the residuals function trggers the
construction of a Residuals mesh object during the writing of the file
header. This only happens on the master process, and therefore leads to
the master having more objects in its database than the other processes.
If this results in the object table being resized then this can change
the iteration order, which can in turn break mapping procedures (in NCC,
topology change, mesh-to-mesh mapping, ...) which rely on fields being
accessed from the database in a consistent order.
This commit is contained in:
Will Bainbridge
2024-08-07 11:41:05 +01:00
parent 74a1c352b2
commit fb0e5201d2

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2015-2022 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2015-2024 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -139,6 +139,12 @@ public:
return wordList::null();
}
//- There are no residuals to report at the start of a run
virtual bool executeAtStart() const
{
return false;
}
//- Execute, currently does nothing
virtual bool execute();