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:
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user