From fb0e5201d2aece9ef52bf1d0abae5daee63621a0 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Wed, 7 Aug 2024 11:41:05 +0100 Subject: [PATCH] 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. --- src/functionObjects/utilities/residuals/residuals.H | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/functionObjects/utilities/residuals/residuals.H b/src/functionObjects/utilities/residuals/residuals.H index c68fc02ea2..a28d7f3ec1 100644 --- a/src/functionObjects/utilities/residuals/residuals.H +++ b/src/functionObjects/utilities/residuals/residuals.H @@ -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();