Skip to content
Permalink
Browse files

dictionary::functionEntries::negEntry: new function to negate a dicti…

…onary variable

E.g. in a velocity field file:

    Umean 5.75;
    .
    .
    .
    inlet
    {
        type            uniformFixedValue;
        uniformValue    (#neg $Umean 0 0);
    }
  • Loading branch information...
Henry Weller
Henry Weller committed Jul 26, 2018
1 parent ab31777 commit 932e0176e7daa0cb6ee6a83eb3d85922e310c52f
@@ -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
@@ -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 <http://www.gnu.org/licenses/>.
\*---------------------------------------------------------------------------*/

#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;
}


// ************************************************************************* //
@@ -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 <http://www.gnu.org/licenses/>.
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

// ************************************************************************* //

0 comments on commit 932e017

Please sign in to comment.
You can’t perform that action at this time.