diff --git a/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C b/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C
index d6d240ba9e..5d63cb6769 100644
--- a/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C
+++ b/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C
@@ -24,7 +24,7 @@ License
along with OpenFOAM. If not, see .
Application
- setExprFields
+ setExprBoundaryFields
Group
grpPreProcessingUtilities
@@ -61,6 +61,11 @@ int main(int argc, char *argv[])
// No -constant, no special treatment for 0/
timeSelector::addOptions(false);
+ argList::addBoolOption
+ (
+ "ascii",
+ "Write in ASCII format instead of the controlDict setting"
+ );
argList::addOption
(
"dict",
@@ -114,10 +119,11 @@ int main(int argc, char *argv[])
instantList times = timeSelector::select0(runTime, args);
- if (times.size() < 1)
+ if (times.empty())
{
FatalErrorInFunction
- << "No times selected." << exit(FatalError);
+ << "No times selected." << nl
+ << exit(FatalError);
}
#include "createNamedMesh.H"
@@ -125,6 +131,12 @@ int main(int argc, char *argv[])
#include "setSystemMeshDictionaryIO.H"
IOdictionary setExprDict(dictIO);
+ IOstreamOption streamOpt(runTime.writeFormat());
+ if (args.found("ascii"))
+ {
+ streamOpt.format(IOstream::ASCII);
+ }
+
forAll(times, timei)
{
runTime.setTime(times[timei], timei);
@@ -270,7 +282,7 @@ int main(int argc, char *argv[])
if (!dryrun)
{
Info<< "Write " << fieldDict.filePath() << nl;
- fieldDict.regIOobject::write();
+ fieldDict.regIOobject::writeObject(streamOpt, true);
}
}
}
diff --git a/applications/utilities/preProcessing/setExprFields/setExprFields.C b/applications/utilities/preProcessing/setExprFields/setExprFields.C
index 0865b407af..983beb284c 100644
--- a/applications/utilities/preProcessing/setExprFields/setExprFields.C
+++ b/applications/utilities/preProcessing/setExprFields/setExprFields.C
@@ -75,11 +75,12 @@ struct setExprFieldsControl
bool dryRun;
bool debugParsing;
bool cacheVariables;
- bool useDimension;
+ bool useDimensions;
bool createNew;
bool keepPatches;
bool correctPatches;
bool correctBCs;
+ IOstreamOption streamOpt;
};
@@ -218,9 +219,9 @@ void setField
doCorrectBoundaryConditions(ctrl.correctBCs, output);
- if (ctrl.useDimension)
+ if (ctrl.useDimensions)
{
- Info<< "Setting dimension to " << dims << endl;
+ Info<< "Setting dimensions to " << dims << endl;
output.dimensions().reset(dims);
}
@@ -231,7 +232,7 @@ void setField
else
{
Info<< "Writing to " << output.name() << nl;
- output.write();
+ output.writeObject(ctrl.streamOpt, true);
}
}
@@ -539,6 +540,11 @@ int main(int argc, char *argv[])
// No -constant, no special treatment for 0/
timeSelector::addOptions(false);
+ argList::addBoolOption
+ (
+ "ascii",
+ "Write in ASCII format instead of the controlDict setting"
+ );
argList::addOption
(
"dict",
@@ -567,7 +573,7 @@ int main(int argc, char *argv[])
(
"field",
"name",
- "The field to overwrite"
+ "The field to create/overwrite"
" (command-line operation)",
true // Advanced option
);
@@ -589,12 +595,14 @@ int main(int argc, char *argv[])
);
argList::addOption
(
- "dimension",
+ "dimensions",
"dims",
"The dimensions for created fields"
" (command-line operation)",
true // Advanced option
);
+ argList::addOptionCompat("dimensions", {"dimension", 2012});
+
argList::addBoolOption
(
"debug-parser",
@@ -632,7 +640,8 @@ int main(int argc, char *argv[])
argList::addBoolOption
(
"dummy-phi",
- "(command-line operation)",
+ "Provide a zero phi field"
+ " (command-line operation)",
true // Advanced option
);
@@ -663,13 +672,14 @@ int main(int argc, char *argv[])
instantList times = timeSelector::select0(runTime, args);
- if (times.size() < 1)
+ if (times.empty())
{
FatalErrorInFunction
- << "No times selected." << exit(FatalError);
+ << "No times selected." << nl
+ << exit(FatalError);
}
- // Disable dimension checking during operation
+ // Disable dimension checking during operations
dimensionSet::debug = false;
#include "createNamedMesh.H"
@@ -684,38 +694,53 @@ int main(int argc, char *argv[])
if (useCommandArgs)
{
+ bool fatalCombination = false;
+
if (args.found("dict"))
{
+ fatalCombination = true;
FatalErrorInFunction
<< "Cannot specify both dictionary and command-line arguments"
- << nl
- << endl;
+ << nl << endl;
}
if (args.found("create") && args.found("keepPatches"))
{
+ fatalCombination = true;
FatalErrorInFunction
<< "Cannot specify both 'create' and 'keepPatches'" << nl
<< endl;
}
+
+ if (!args.found("expression"))
+ {
+ fatalCombination = true;
+ FatalErrorInFunction
+ << "Missing mandatory 'expression' option'" << nl
+ << endl;
+ }
+ if (fatalCombination)
+ {
+ FatalError
+ << exit(FatalError);
+ }
}
else
{
- // Carp about inapplicable options
+ // Carp about inapplicable options (non-fatal)
wordHashSet badOptions
({
- "create", "keepPatches", "valuePatches",
- "dimension", "condition", "expression"
+ "create", "keepPatches", "value-patches",
+ "condition", "expression", "dimensions"
});
-
badOptions.retain(args.options());
if (!badOptions.empty())
{
+ // Non-fatal (warning)
FatalErrorInFunction
- << "Using a dictionary. Cannot specify command options:" << nl
- << nl
+ << "Using a dictionary. Cannot specify these options:" << nl
<< flatOutput(badOptions.sortedToc()) << nl
<< endl;
}
@@ -736,7 +761,7 @@ int main(int argc, char *argv[])
if (timei == 0)
{
wordList preloadFields;
- args.readListIfPresent("load-fields", preloadFieldNames);
+ args.readListIfPresent("load-fields", preloadFields);
readFieldsHandler(mesh).execute(preloadFields);
}
@@ -766,7 +791,7 @@ int main(int argc, char *argv[])
runTime.functionObjects().start();
}
- if (args.found("field"))
+ if (useCommandArgs)
{
const word fieldName(args.get("field"));
@@ -783,26 +808,27 @@ int main(int argc, char *argv[])
ctrl.keepPatches = args.found("keepPatches");
ctrl.correctPatches = !args.found("noCorrectPatches");
ctrl.correctBCs = args.found("correctResultBoundaryFields");
- ctrl.useDimension = args.found("dimension");
+ ctrl.useDimensions = args.found("dimensions");
+ ctrl.streamOpt.format(runTime.writeFormat());
+ if (args.found("ascii"))
+ {
+ ctrl.streamOpt.format(IOstream::ASCII);
+ }
expressions::exprString
expression
(
- args[expression],
+ args["expression"],
dictionary::null
);
expressions::exprString condition;
- if (args.found("condition"))
- {
- args.readIfPresent("condition", condition);
- }
+ args.readIfPresent("condition", condition);
dimensionSet dims;
-
- if (ctrl.useDimension)
+ if (ctrl.useDimensions)
{
- ITstream is(args.lookup("dimension"));
+ ITstream is(args.lookup("dimensions"));
is >> dims;
}
@@ -814,7 +840,7 @@ int main(int argc, char *argv[])
condition,
dictionary::null,
dims,
- args.getList("valuePatches", false),
+ args.getList("value-patches", false),
ctrl
);
@@ -852,8 +878,14 @@ int main(int argc, char *argv[])
ctrl.createNew = dict.getOrDefault("create", false);
ctrl.keepPatches = dict.getOrDefault("keepPatches", false);
+
ctrl.correctPatches = !args.found("noCorrectPatches");
ctrl.correctBCs = args.found("correctResultBoundaryFields");
+ ctrl.streamOpt.format(runTime.writeFormat());
+ if (args.found("ascii"))
+ {
+ ctrl.streamOpt.format(IOstream::ASCII);
+ }
if (ctrl.createNew && ctrl.keepPatches)
{
@@ -891,17 +923,20 @@ int main(int argc, char *argv[])
);
}
- ctrl.useDimension = dict.found("dimension");
-
dimensionSet dims;
- if (ctrl.useDimension)
{
- dict.lookup("dimension") >> dims;
+ const entry* dimPtr = dict.findCompat
+ (
+ "dimensions", {{"dimension", 2012}},
+ keyType::LITERAL
+ );
+ if (dimPtr)
+ {
+ dimPtr->stream() >> dims;
+ }
+ ctrl.useDimensions = bool(dimPtr);
}
- wordList valuePatches;
- dict.readIfPresent("valuePatches", valuePatches);
-
if (verbose && !timei)
{
// Report once
@@ -916,7 +951,7 @@ int main(int argc, char *argv[])
condition,
dict,
dims,
- valuePatches,
+ dict.getOrDefault("valuePatches", wordList()),
ctrl
);
diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprBoundaryFieldsDict b/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprBoundaryFieldsDict
index 4cf97c4ea8..329ea5b588 100644
--- a/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprBoundaryFieldsDict
+++ b/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprBoundaryFieldsDict
@@ -25,7 +25,7 @@ updateBCs
{
target value;
variables ( "rho=1.2" );
- expression #{ 0.5*rho*cbrt(mag(U)) #};
+ expression #{ 0.5*rho*pow(mag(U),3) #};
}
expressions
diff --git a/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprFieldsDict b/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprFieldsDict
index 73092c745f..a72d5c797c 100644
--- a/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprFieldsDict
+++ b/tutorials/incompressible/simpleFoam/turbineSiting/system/setExprFieldsDict
@@ -20,7 +20,8 @@ readFields ( U );
_value1
{
variables ( "rho=1.2" );
- expression #{ 0.5*rho*cbrt(mag(U)) #};
+ expression #{ 0.5*rho*pow(mag(U),3) #};
+ dimensions [ kg s^-3 ];
}
expressions