Skip to content
Snippets Groups Projects
Commit 4e48beff authored by Mark OLESEN's avatar Mark OLESEN
Browse files

ENH: support "one-shot" changes to the dictionary inputMode (issue #429)

- Instead of relying on #inputMode to effect a global change it is now
  possible (and recommended) to a temporary change in the inputMode
  for the following entry.

     #default   : provide default value if entry is not already defined
     #overwrite : silently remove a previously existing entry
     #warn      : warn about duplicate entries
     #error     : error if any duplicate entries occur
     #merge     : merge sub-dictionaries when possible (the default mode)

  This is generally less cumbersome than the switching the global
  inputMode. For example to provide a set of fallback values.

      #includeIfPresent "user-files"
      ...
      #default value uniform 10;

  vs.

      #includeIfPresent "user-files"
      #inputMode protect
      ...
      value uniform 10;
      #inputMode merge    // _Assuming_ we actually had this before

  These directives can also be used to suppress the normal dictionary
  merge semantics:

     #overwrite dict { entry val; ... }
parent 2fdc6b16
Branches
Tags
No related merge requests found
Showing
with 185 additions and 25 deletions
......@@ -13,18 +13,19 @@ FoamFile
object testDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#inputMode merge
#includeIfPresent "someUnknownFile"
#includeIfPresent "$FOAM_CASE/someUnknownFile"
#includeIfPresent "$FOAM_CASE/someUnknownFile-$FOAM_CASENAME"
internalField uniform 1;
// use 'protect' to supply defaults
#inputMode protect
internalField uniform 10;
dimensions [ 0 2 -2 0 0 0 0 ];
#inputMode merge
// supply defaults
#default internalField uniform 10;
#default dimensions [ 1 2 -2 0 0 0 0 ];
#overwrite dimensions [ 0 2 -2 0 0 0 0 ];
// #warn dimensions [ 0 2 -2 0 0 0 0 ];
// #error dimensions [ 0 2 -2 0 0 0 0 ];
active
{
......@@ -86,12 +87,12 @@ boundaryField
#remove inactive
inlet_7 { ${${varType}}} // Test indirection/recursive expansion
#inputMode overwrite
inlet_8 { $active }
#overwrite inlet_8 { type none; }
}
// NB: the inputMode has a global scope
#inputMode merge
#include "testDict2"
foo
......
......@@ -14,8 +14,6 @@ FoamFile
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#inputMode merge;
surfaceConformation
{
pointPairDistanceCoeff 0.1;
......
......@@ -41,6 +41,51 @@ namespace functionEntries
dictionaryIstream,
inputMode
);
addNamedToMemberFunctionSelectionTable
(
functionEntry,
inputModeDefault,
execute,
dictionaryIstream,
default
);
addNamedToMemberFunctionSelectionTable
(
functionEntry,
inputModeMerge,
execute,
dictionaryIstream,
merge
);
addNamedToMemberFunctionSelectionTable
(
functionEntry,
inputModeOverwrite,
execute,
dictionaryIstream,
overwrite
);
addNamedToMemberFunctionSelectionTable
(
functionEntry,
inputModeWarn,
execute,
dictionaryIstream,
warn
);
addNamedToMemberFunctionSelectionTable
(
functionEntry,
inputModeError,
execute,
dictionaryIstream,
error
);
}
}
......@@ -90,4 +135,54 @@ bool Foam::functionEntries::inputMode::execute
}
bool Foam::functionEntries::inputModeDefault::execute
(
dictionary& parentDict,
Istream& is
)
{
return entry::New(parentDict, is, entry::inputMode::PROTECT);
}
bool Foam::functionEntries::inputModeMerge::execute
(
dictionary& parentDict,
Istream& is
)
{
return entry::New(parentDict, is, entry::inputMode::MERGE);
}
bool Foam::functionEntries::inputModeOverwrite::execute
(
dictionary& parentDict,
Istream& is
)
{
return entry::New(parentDict, is, entry::inputMode::OVERWRITE);
}
bool Foam::functionEntries::inputModeWarn::execute
(
dictionary& parentDict,
Istream& is
)
{
return entry::New(parentDict, is, entry::inputMode::WARN);
}
bool Foam::functionEntries::inputModeError::execute
(
dictionary& parentDict,
Istream& is
)
{
return entry::New(parentDict, is, entry::inputMode::ERROR);
}
// ************************************************************************* //
......@@ -84,6 +84,86 @@ public:
};
/*---------------------------------------------------------------------------*\
Class inputModeDefault Declaration
\*---------------------------------------------------------------------------*/
//- Temporarily change inputMode to %protect for the following entry
class inputModeDefault
:
public functionEntry
{
public:
//- Execute in a sub-dict context
static bool execute(dictionary& parentDict, Istream& is);
};
/*---------------------------------------------------------------------------*\
Class inputModeMerge Declaration
\*---------------------------------------------------------------------------*/
//- Temporarily change inputMode to %merge for the following entry
class inputModeMerge
:
public functionEntry
{
public:
//- Execute in a sub-dict context
static bool execute(dictionary& parentDict, Istream& is);
};
/*---------------------------------------------------------------------------*\
Class inputModeOverwrite Declaration
\*---------------------------------------------------------------------------*/
//- Temporarily change inputMode to %overwrite for the following entry
class inputModeOverwrite
:
public functionEntry
{
public:
//- Execute in a sub-dict context
static bool execute(dictionary& parentDict, Istream& is);
};
/*---------------------------------------------------------------------------*\
Class inputModeWarn Declaration
\*---------------------------------------------------------------------------*/
//- Temporarily change inputMode to %warn for the following entry
class inputModeWarn
:
public functionEntry
{
public:
//- Execute in a sub-dict context
static bool execute(dictionary& parentDict, Istream& is);
};
/*---------------------------------------------------------------------------*\
Class inputModeError Declaration
\*---------------------------------------------------------------------------*/
//- Temporarily change inputMode to %error for the following entry
class inputModeError
:
public functionEntry
{
public:
//- Execute in a sub-dict context
static bool execute(dictionary& parentDict, Istream& is);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace functionEntries
......
......@@ -12,6 +12,4 @@ maxCo 12;
maxDeltaT 1;
#inputMode merge
// ************************************************************************* //
......@@ -12,6 +12,4 @@ maxCo 2.5;
maxDeltaT 0.3;
#inputMode merge
// ************************************************************************* //
......@@ -12,6 +12,4 @@ maxCo 8;
maxDeltaT 1;
#inputMode merge
// ************************************************************************* //
......@@ -12,6 +12,4 @@ maxCo 5;
maxDeltaT 1;
#inputMode merge
// ************************************************************************* //
......@@ -12,6 +12,4 @@ maxCo 12;
maxDeltaT 1;
#inputMode merge
// ************************************************************************* //
......@@ -12,6 +12,4 @@ turbulentKE 37;
turbulentOmega 32;
turbulentEpsilon 30;
#inputMode merge
// ************************************************************************* //
......@@ -10,6 +10,5 @@ flowVelocity (10 0 0);
pressure 0;
turbulentKE 1.5;
turbulentEpsilon 0.88;
#inputMode merge
// ************************************************************************* //
......@@ -11,6 +11,5 @@ pressure 0;
turbulentKE 0.375;
turbulentOmega 3.6;
turbulentEpsilon 0.12;
#inputMode merge
// ************************************************************************* //
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