functionObjects::volRegion: Improved parallel efficiency

Based on patch contributed by Kevin Nordin-Bates
Resolves bug-report https://bugs.openfoam.org/view.php?id=2401
This commit is contained in:
Henry Weller
2016-12-19 19:20:09 +00:00
parent 6cae0fdacb
commit 83a874cdba

View File

@ -84,52 +84,52 @@ Type Foam::functionObjects::fieldValues::volFieldValue::processValues
{ {
case opSum: case opSum:
{ {
result = sum(values); result = gSum(values);
break; break;
} }
case opSumMag: case opSumMag:
{ {
result = sum(cmptMag(values)); result = gSum(cmptMag(values));
break; break;
} }
case opAverage: case opAverage:
{ {
result = sum(values)/values.size(); result = gSum(values)/nCells();
break; break;
} }
case opWeightedAverage: case opWeightedAverage:
{ {
result = sum(weightField*values)/sum(weightField); result = gSum(weightField*values)/gSum(weightField);
break; break;
} }
case opVolAverage: case opVolAverage:
{ {
result = sum(V*values)/sum(V); result = gSum(V*values)/this->V();
break; break;
} }
case opWeightedVolAverage: case opWeightedVolAverage:
{ {
result = sum(weightField*V*values)/sum(weightField*V); result = gSum(weightField*V*values)/gSum(weightField*V);
break; break;
} }
case opVolIntegrate: case opVolIntegrate:
{ {
result = sum(V*values); result = gSum(V*values);
break; break;
} }
case opMin: case opMin:
{ {
result = min(values); result = gMin(values);
break; break;
} }
case opMax: case opMax:
{ {
result = max(values); result = gMax(values);
break; break;
} }
case opCoV: case opCoV:
{ {
Type meanValue = sum(values*V)/sum(V); Type meanValue = gSum(values*V)/this->V();
const label nComp = pTraits<Type>::nComponents; const label nComp = pTraits<Type>::nComponents;
@ -139,7 +139,7 @@ Type Foam::functionObjects::fieldValues::volFieldValue::processValues
scalar mean = component(meanValue, d); scalar mean = component(meanValue, d);
scalar& res = setComponent(result, d); scalar& res = setComponent(result, d);
res = sqrt(sum(V*sqr(vals - mean))/sum(V))/mean; res = sqrt(gSum(V*sqr(vals - mean))/this->V())/mean;
} }
break; break;
@ -173,15 +173,10 @@ bool Foam::functionObjects::fieldValues::volFieldValue::writeValues
weightField = setFieldValues<scalar>(weightFieldName_, true); weightField = setFieldValues<scalar>(weightFieldName_, true);
} }
// Combine onto master Type result = processValues(values, V, weightField);
combineFields(values);
combineFields(V);
combineFields(weightField);
if (Pstream::master()) if (Pstream::master())
{ {
Type result = processValues(values, V, weightField);
// Add to result dictionary, over-writing any previous entry // Add to result dictionary, over-writing any previous entry
resultDict_.add(fieldName, result, true); resultDict_.add(fieldName, result, true);