diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index 1b3d7fe971..4e52cd2b5d 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -210,6 +210,7 @@ $(dictionaryListEntry)/dictionaryListEntry.C $(dictionaryListEntry)/dictionaryListEntryIO.C functionEntries = $(dictionary)/functionEntries +$(functionEntries)/negEntry/negEntry.C $(functionEntries)/calcEntry/calcEntry.C $(functionEntries)/codeStream/codeStream.C $(functionEntries)/functionEntry/functionEntry.C diff --git a/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.C b/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.C new file mode 100644 index 0000000000..698bb0be9a --- /dev/null +++ b/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.C @@ -0,0 +1,137 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2018 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 "negEntry.H" +#include "addToMemberFunctionSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionEntries +{ + defineTypeNameAndDebug(negEntry, 0); + + addToMemberFunctionSelectionTable + ( + functionEntry, + negEntry, + execute, + dictionaryIstream + ); + + addToMemberFunctionSelectionTable + ( + functionEntry, + negEntry, + execute, + primitiveEntryIstream + ); +} +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +Foam::string Foam::functionEntries::negEntry::negateVariable +( + const dictionary& parentDict, + Istream& is +) +{ + // Read variable name as a word including the '$' + const word varWord(is); + + if (varWord[0] != '$') + { + FatalIOErrorInFunction + ( + parentDict + ) << "Expected variable name beginning with a '$' but found '" + << varWord << "'" << exit(FatalIOError); + + return string::null; + } + + // Strip the leading '$' from the variable name + const string varName = varWord(1, varWord.size()-1); + + // Lookup the variable name in the parent dictionary.... + const entry* ePtr = parentDict.lookupScopedEntryPtr(varName, true, false); + + if (ePtr && ePtr->isStream()) + { + const token variable(ePtr->stream()); + + // Negate variable + OStringStream os(is.format()); + os << '-' << variable; + + return os.str(); + } + else + { + FatalIOErrorInFunction + ( + parentDict + ) << "Illegal dictionary variable name " << varName << endl + << "Valid dictionary entries are " << parentDict.toc() + << exit(FatalIOError); + + return string::null; + } +} + + +bool Foam::functionEntries::negEntry::execute +( + const dictionary& parentDict, + primitiveEntry& thisEntry, + Istream& is +) +{ + // Reinsert negated variable into entry + IStringStream resultStream(negateVariable(parentDict, is)); + thisEntry.read(parentDict, resultStream); + + return true; +} + + +bool Foam::functionEntries::negEntry::execute +( + dictionary& parentDict, + Istream& is +) +{ + // Reinsert negated variable into dictionary + IStringStream resultStream(negateVariable(parentDict, is)); + parentDict.read(resultStream); + + return true; +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.H b/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.H new file mode 100644 index 0000000000..a0df3855ec --- /dev/null +++ b/src/OpenFOAM/db/dictionary/functionEntries/negEntry/negEntry.H @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2018 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 . + +Class + Foam::functionEntries::negEntry + +Description + Negate a dictionary variable by prefixing with \c #neg + + E.g. + \verbatim + Umean 5.75; + . + . + . + inlet + { + type uniformFixedValue; + uniformValue (#neg $Umean 0 0); + } + \endverbatim + Note the space required between the \c #neg and the '$' + +SourceFiles + negEntry.C + +\*---------------------------------------------------------------------------*/ + +#ifndef negEntry_H +#define negEntry_H + +#include "functionEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionEntries +{ + +/*---------------------------------------------------------------------------*\ + Class negEntry Declaration +\*---------------------------------------------------------------------------*/ + +class negEntry +: + public functionEntry +{ + // Private Member Functions + + //- Lookup variable, negate and return as a string + static string negateVariable + ( + const dictionary& parentDict, + Istream& is + ); + + //- Disallow default bitwise copy construct + negEntry(const negEntry&); + + //- Disallow default bitwise assignment + void operator=(const negEntry&); + + +public: + + //- Runtime type information + ClassName("neg"); + + + // Member Functions + + //- Execute the functionEntry in a sub-dict context + static bool execute(dictionary& parentDict, Istream&); + + //- Execute the functionEntry in a primitiveEntry context + static bool execute + ( + const dictionary& parentDict, + primitiveEntry&, + Istream& + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace functionEntries +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //