Commit 9d593adc authored by Mark OLESEN's avatar Mark OLESEN Committed by Andrew Heather
Browse files

ENH: relax the (zeroGradient, ddt2) replacement token requirement (#1330)

- when a single (non-regex) source field is specified, it is now
  possible to specify the result name without any '@@' substitution
  tokens
parent 2ce1ca48
......@@ -50,13 +50,15 @@ namespace functionObjects
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
bool Foam::functionObjects::ddt2::checkFormatName(const word& str)
bool Foam::functionObjects::ddt2::checkFormatName
(
const std::string& str
)
{
if (str.find("@@") == string::npos)
if (std::string::npos == str.find("@@"))
{
WarningInFunction
<< "Bad result naming "
<< "(no '@@' token found), deactivating."
<< "Bad result naming (no '@@' token found)."
<< nl << endl;
return false;
......@@ -64,10 +66,8 @@ bool Foam::functionObjects::ddt2::checkFormatName(const word& str)
else if (str == "@@")
{
WarningInFunction
<< "Bad result naming "
<< "(only a '@@' token found), deactivating."
<< nl
<< endl;
<< "Bad result naming (only a '@@' token found)."
<< nl << endl;
return false;
}
......@@ -145,7 +145,12 @@ bool Foam::functionObjects::ddt2::read(const dictionary& dict)
( mag_ ? "mag(ddt(@@))" : "magSqr(ddt(@@))" )
);
if (checkFormatName(resultName_))
// Expect '@@' token for result, unless a single (non-regex) source field
if
(
(selectFields_.size() == 1 && selectFields_.first().isLiteral())
|| checkFormatName(resultName_)
)
{
blacklist_.set
(
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -62,7 +62,8 @@ Usage
A list of fields can contain exact names or regular expressions.
The token '\@\@' in the result name is replaced by the name of the source
field.
field. In the special case of a single source field (specified as
a non-regex), the '\@\@' token checking is suppressed.
The function object will skip over fields that appear to have
already been processed (ie, their names are similar to the output names).
......@@ -100,7 +101,7 @@ class ddt2
{
// Private data
//- Name of fields to process
//- Name of fields to process.
wordRes selectFields_;
//- Formatting for the result fields.
......@@ -120,8 +121,8 @@ class ddt2
// Private Member Functions
//- Check that the word contains the appropriate substitution token(s).
static bool checkFormatName(const word& str);
//- Check that string contains the appropriate substitution token(s).
static bool checkFormatName(const std::string& str);
//- Accept unless field name appears to have already been processed
......
......@@ -49,13 +49,15 @@ namespace functionObjects
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
bool Foam::functionObjects::zeroGradient::checkFormatName(const word& str)
bool Foam::functionObjects::zeroGradient::checkFormatName
(
const std::string& str
)
{
if (str.find("@@") == string::npos)
if (std::string::npos == str.find("@@"))
{
WarningInFunction
<< "Bad result naming "
<< "(no '@@' token found), deactivating."
<< "Bad result naming (no '@@' token found)."
<< nl << endl;
return false;
......@@ -63,10 +65,8 @@ bool Foam::functionObjects::zeroGradient::checkFormatName(const word& str)
else if (str == "@@")
{
WarningInFunction
<< "Bad result naming "
<< "(only a '@@' token found), deactivating."
<< nl
<< endl;
<< "Bad result naming (only a '@@' token found)."
<< nl << endl;
return false;
}
......@@ -118,7 +118,13 @@ bool Foam::functionObjects::zeroGradient::read(const dictionary& dict)
Info<< type() << " fields: " << selectFields_ << nl;
resultName_ = dict.lookupOrDefault<word>("result", type() + "(@@)");
return checkFormatName(resultName_);
// Require '@@' token for result, unless a single (non-regex) source field
return
(
(selectFields_.size() == 1 && selectFields_.first().isLiteral())
|| checkFormatName(resultName_)
);
}
......
......@@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016-2018 OpenCFD Ltd.
\\ / A nd | Copyright (C) 2016-2019 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
......@@ -58,7 +58,8 @@ Usage
A list of fields can contain exact names or regular expressions.
The token '\@\@' in the result name is replaced by the name of the source
field.
field. In the special case of a single source field (specified as
a non-regex), the '\@\@' token checking is suppressed.
The function object will skip over fields that would not benefit
- ie, only processor, empty, zeroGradient, symmetry patches.
......@@ -95,20 +96,20 @@ class zeroGradient
{
// Private data
//- Name of fields to process
//- Name of fields to process.
wordRes selectFields_;
//- Formatting for the result fields.
word resultName_;
//- Hashed names of result fields, and their type
//- Hashed names of result fields, and their type.
HashTable<word> results_;
// Private Member Functions
//- Check that the word contains the appropriate substitution token(s).
static bool checkFormatName(const word& str);
//- Check that string contains the appropriate substitution token(s).
static bool checkFormatName(const std::string& str);
//- Accept unless field only has constraint patches
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment