diff --git a/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C b/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C index 5cafecddff..b421782f29 100644 --- a/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C +++ b/applications/utilities/preProcessing/setExprBoundaryFields/setExprBoundaryFields.C @@ -231,18 +231,21 @@ int main(int argc, char *argv[]) dictionary& patchDict = boundaryFieldDict.subDict(patchName); - expressions::exprString expr + auto valueExpr_ ( - currDict.get("expression"), - currDict, - true // strip comments + expressions::exprString::getEntry + ( + "expression", + currDict, + true // strip comments + ) ); Info<< "Set boundaryField/" << patchName << '/' << targetName << nl << "with expression" << nl << "<<<<" << nl - << expr.c_str() << nl + << valueExpr_.c_str() << nl << ">>>>" << nl; expressions::patchExprDriver driver(currDict, mesh); @@ -255,7 +258,7 @@ int main(int argc, char *argv[]) ); driver.clearVariables(); - driver.parse(expr); + driver.parse(valueExpr_); // Serializing via Field::writeEntry etc OStringStream serialize; diff --git a/applications/utilities/preProcessing/setExprFields/setExprFields.C b/applications/utilities/preProcessing/setExprFields/setExprFields.C index 402b6679f5..98be5699bb 100644 --- a/applications/utilities/preProcessing/setExprFields/setExprFields.C +++ b/applications/utilities/preProcessing/setExprFields/setExprFields.C @@ -64,7 +64,6 @@ word fieldGeoType(const FieldAssociation geoType) case FieldAssociation::VOLUME_DATA : return "cells"; break; default: break; } - return "unknown"; } @@ -75,7 +74,7 @@ struct setExprFieldsControl bool dryRun; bool debugParsing; bool cacheVariables; - bool useDimensions; + bool hasDimensions; bool createNew; bool keepPatches; bool correctPatches; @@ -123,13 +122,12 @@ void doCorrectBoundaryConditions {} -template -void setField +template +bool setField ( const word& fieldName, - const Mesh& mesh, - const GeoField& result, - const scalarField& cond, + const GeoField& evaluated, + const boolField& fieldMask, const dimensionSet& dims, const wordList& valuePatches, @@ -139,6 +137,8 @@ void setField Info<< "setField(" << fieldName << "): " << pTraits::typeName << endl; + const auto& mesh = evaluated.mesh(); + tmp toutput; if (ctrl.createNew) @@ -171,55 +171,57 @@ void setField auto& output = toutput.ref(); - label setCells = 0; + label numValuesChanged = 0; - if (cond.empty()) + // Internal field + if (fieldMask.empty()) { - // No condition - set all - output = result; + // No field-mask - set entire internal field + numValuesChanged = output.size(); - setCells = output.size(); + output.primitiveFieldRef() = evaluated; } else { - forAll(output, celli) + auto& internal = output.primitiveFieldRef(); + + forAll(internal, idx) { - if (expressions::boolOp()(cond[celli])) + if (fieldMask[idx]) { - output[celli] = result[celli]; - ++setCells; + internal[idx] = evaluated[idx]; + ++numValuesChanged; } } } - const label totalCells = returnReduce(output.size(), plusOp