functionObjects::volFieldValue: Filter processors without zone cells for max/min

Resolves bug-report https://bugs.openfoam.org/view.php?id=4014
This commit is contained in:
Henry Weller
2023-09-04 11:57:27 +01:00
parent 17771b88d5
commit 58f82fccbd
3 changed files with 24 additions and 13 deletions

View File

@ -194,22 +194,22 @@ bool Foam::functionObjects::fieldValues::volFieldValue::processValues
{ {
case operationType::min: case operationType::min:
{ {
compareScalars(values, result, lessOp<scalar>()); compareScalars(values, vGreat, result, lessOp<scalar>());
return true; return true;
} }
case operationType::minMag: case operationType::minMag:
{ {
compareScalars(mag(values), result, lessOp<scalar>()); compareScalars(mag(values), vGreat, result, lessOp<scalar>());
return true; return true;
} }
case operationType::max: case operationType::max:
{ {
compareScalars(values, result, greaterOp<scalar>()); compareScalars(values, -vGreat, result, greaterOp<scalar>());
return true; return true;
} }
case operationType::maxMag: case operationType::maxMag:
{ {
compareScalars(mag(values), result, greaterOp<scalar>()); compareScalars(mag(values), -vGreat, result, greaterOp<scalar>());
return true; return true;
} }
default: default:

View File

@ -193,6 +193,7 @@ protected:
void compareScalars void compareScalars
( (
const scalarField& values, const scalarField& values,
const scalar emptyVal,
Result<scalar>& result, Result<scalar>& result,
const Op& op const Op& op
) const; ) const;

View File

@ -79,23 +79,33 @@ template<class Op>
void Foam::functionObjects::fieldValues::volFieldValue::compareScalars void Foam::functionObjects::fieldValues::volFieldValue::compareScalars
( (
const scalarField& values, const scalarField& values,
const scalar emptyVal,
Result<scalar>& result, Result<scalar>& result,
const Op& op const Op& op
) const ) const
{ {
label i = 0; // Check if the zone on this processor is non-zero sized
forAll(values, j) if (values.size())
{ {
if (op(values[j], values[i])) label i = 0;
forAll(values, j)
{ {
i = j; if (op(values[j], values[i]))
{
i = j;
}
} }
result.value = values[i];
result.celli = celli(i);
result.cc = fieldValue::mesh_.C()[result.celli];
}
else
{
result.value = emptyVal;
} }
result.value = values[i];
result.celli = celli(i);
result.proci = Pstream::parRun() ? Pstream::myProcNo() : -1; result.proci = Pstream::parRun() ? Pstream::myProcNo() : -1;
result.cc = fieldValue::mesh_.C()[result.celli];
reduce reduce
( (
@ -147,12 +157,12 @@ bool Foam::functionObjects::fieldValues::volFieldValue::processValues
{ {
case operationType::minMag: case operationType::minMag:
{ {
compareScalars(mag(values), result, lessOp<scalar>()); compareScalars(mag(values), vGreat, result, lessOp<scalar>());
return true; return true;
} }
case operationType::maxMag: case operationType::maxMag:
{ {
compareScalars(mag(values), result, greaterOp<scalar>()); compareScalars(mag(values), -vGreat, result, greaterOp<scalar>());
return true; return true;
} }
default: default: