From 35f4d2da07b5a3c02b01713c8a2ea1135f553fef Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Fri, 25 Nov 2016 21:49:56 +0000 Subject: [PATCH] functionObjects::fieldExpression: Correct and improve warning messages postProcess -func MachNo previously generated the warning Executing functionObjects --> FOAM Warning : functionObjects::MachNo MachNo cannot find required field U which is incorrect; the field 'U' is available but the thermophysicalProperties is not. Now 'postProcess' generates the warning: Executing functionObjects --> FOAM Warning : functionObjects::MachNo MachNo cannot find required object thermophysicalProperties of type fluidThermo --> FOAM Warning : functionObjects::MachNo MachNo failed to execute. Resolves bug-report http://bugs.openfoam.org/view.php?id=2352 --- src/functionObjects/field/MachNo/MachNo.C | 4 +- .../field/fieldExpression/fieldExpression.C | 11 +--- .../field/fieldExpression/fieldExpression.H | 11 +++- .../fieldExpressionTemplates.C | 52 +++++++++++++++++++ 4 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C diff --git a/src/functionObjects/field/MachNo/MachNo.C b/src/functionObjects/field/MachNo/MachNo.C index b3fbccee6..190496e07 100644 --- a/src/functionObjects/field/MachNo/MachNo.C +++ b/src/functionObjects/field/MachNo/MachNo.C @@ -52,11 +52,11 @@ bool Foam::functionObjects::MachNo::calc() if ( foundObject(fieldName_) - && mesh_.foundObject(fluidThermo::dictName) + && foundObject(fluidThermo::dictName) ) { const fluidThermo& thermo = - mesh_.lookupObject(fluidThermo::dictName); + lookupObject(fluidThermo::dictName); const volVectorField& U = lookupObject(fieldName_); diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.C b/src/functionObjects/field/fieldExpression/fieldExpression.C index 8c65e4088..6bb432ca3 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpression.C +++ b/src/functionObjects/field/fieldExpression/fieldExpression.C @@ -39,13 +39,6 @@ namespace functionObjects // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // -bool Foam::functionObjects::fieldExpression::calc() -{ - NotImplemented; - return false; -} - - void Foam::functionObjects::fieldExpression::setResultName ( const word& typeName, @@ -121,8 +114,8 @@ bool Foam::functionObjects::fieldExpression::execute() if (!calc()) { Warning - << "functionObject " << type() << ": Cannot find required field " - << fieldName_ << endl; + << " functionObjects::" << type() << " " << name() + << " failed to execute." << endl; // Clear the result field from the objectRegistry if present clear(); diff --git a/src/functionObjects/field/fieldExpression/fieldExpression.H b/src/functionObjects/field/fieldExpression/fieldExpression.H index 3c8647c03..04c44419b 100644 --- a/src/functionObjects/field/fieldExpression/fieldExpression.H +++ b/src/functionObjects/field/fieldExpression/fieldExpression.H @@ -71,10 +71,13 @@ protected: // Protected member functions - virtual bool calc(); + virtual bool calc() = 0; void setResultName(const word& typeName, const word& defaultArg); + template + bool foundObject(const word& name); + private: @@ -133,6 +136,12 @@ public: // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // +#ifdef NoRepository + #include "fieldExpressionTemplates.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + #endif // ************************************************************************* // diff --git a/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C new file mode 100644 index 000000000..442834b6e --- /dev/null +++ b/src/functionObjects/field/fieldExpression/fieldExpressionTemplates.C @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "fieldExpression.H" + +// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // + +template +bool Foam::functionObjects::fieldExpression::foundObject +( + const word& name +) +{ + if (fvMeshFunctionObject::foundObject(name)) + { + return true; + } + else + { + Warning + << " functionObjects::" << type() << " " << this->name() + << " cannot find required object " << name << " of type " + << Type::typeName << endl; + + return false; + } +} + + +// ************************************************************************* //