BUG: sampledSets - ensure results are written on all procs

This commit is contained in:
Andrew Heather 2021-12-07 21:08:43 +00:00
parent 65bc8d1140
commit f6ccd77d8c

View File

@ -136,26 +136,40 @@ Foam::fileName Foam::sampledSets::writeSampleFile
{
wordList valueSetNames(masterFields.size());
List<const Field<Type>*> valueSets(masterFields.size());
forAll(masterFields, fieldi)
{
const word& fieldName = masterFields[fieldi].name();
valueSetNames[fieldi] = fieldName;
// Values only available on master
Type averageValue, minValue, maxValue;
label sizeValue;
if (Pstream::master())
{
valueSets[fieldi] = &masterFields[fieldi][setI];
averageValue = average(*valueSets[fieldi]);
minValue = min(*valueSets[fieldi]);
maxValue = max(*valueSets[fieldi]);
sizeValue = valueSets[fieldi]->size();
}
Pstream::scatter(averageValue);
Pstream::scatter(minValue);
Pstream::scatter(maxValue);
Pstream::scatter(sizeValue);
// Set results
setResult("average(" + fieldName + ")", average(*valueSets[fieldi]));
setResult("min(" + fieldName + ")", min(*valueSets[fieldi]));
setResult("max(" + fieldName + ")", max(*valueSets[fieldi]));
setResult("size(" + fieldName + ")", valueSets[fieldi]->size());
setResult("average(" + fieldName + ")", averageValue);
setResult("min(" + fieldName + ")", minValue);
setResult("max(" + fieldName + ")", maxValue);
setResult("size(" + fieldName + ")", sizeValue);
}
fileName fName
(
timeDir/formatter.getFileName(masterSampleSet, valueSetNames)
);
fileName fName;
if (Pstream::master())
{
fName = timeDir/formatter.getFileName(masterSampleSet, valueSetNames);
OFstream ofs(fName);
if (ofs.opened())
@ -167,17 +181,20 @@ Foam::fileName Foam::sampledSets::writeSampleFile
valueSets,
ofs
);
return fName;
}
else
{
WarningInFunction
<< "File " << ofs.name() << " could not be opened. "
<< "No data will be written" << endl;
return fileName::null;
}
}
Pstream::scatter(fName);
return fName;
}
template<class T>
void Foam::sampledSets::combineSampledValues
@ -325,10 +342,7 @@ void Foam::sampledSets::sampleAndWrite(fieldGroup<Type>& fields)
forAll(masterSampledSets_, setI)
{
fileName sampleFile;
if (Pstream::master())
{
sampleFile = writeSampleFile
fileName sampleFile = writeSampleFile
(
masterSampledSets_[setI],
masterFields,
@ -336,9 +350,7 @@ void Foam::sampledSets::sampleAndWrite(fieldGroup<Type>& fields)
outputPath_/mesh_.time().timeName(),
fields.formatter()
);
}
Pstream::scatter(sampleFile);
if (sampleFile.size())
{
// Case-local file name with "<case>" to make relocatable