mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
BUG: sampledSets - ensure results are written on all procs
This commit is contained in:
@ -136,46 +136,63 @@ Foam::fileName Foam::sampledSets::writeSampleFile
|
|||||||
{
|
{
|
||||||
wordList valueSetNames(masterFields.size());
|
wordList valueSetNames(masterFields.size());
|
||||||
List<const Field<Type>*> valueSets(masterFields.size());
|
List<const Field<Type>*> valueSets(masterFields.size());
|
||||||
|
|
||||||
forAll(masterFields, fieldi)
|
forAll(masterFields, fieldi)
|
||||||
{
|
{
|
||||||
const word& fieldName = masterFields[fieldi].name();
|
const word& fieldName = masterFields[fieldi].name();
|
||||||
|
|
||||||
valueSetNames[fieldi] = fieldName;
|
valueSetNames[fieldi] = fieldName;
|
||||||
valueSets[fieldi] = &masterFields[fieldi][setI];
|
|
||||||
|
// 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
|
// Set results
|
||||||
|
|
||||||
setResult("average(" + fieldName + ")", average(*valueSets[fieldi]));
|
setResult("average(" + fieldName + ")", averageValue);
|
||||||
setResult("min(" + fieldName + ")", min(*valueSets[fieldi]));
|
setResult("min(" + fieldName + ")", minValue);
|
||||||
setResult("max(" + fieldName + ")", max(*valueSets[fieldi]));
|
setResult("max(" + fieldName + ")", maxValue);
|
||||||
setResult("size(" + fieldName + ")", valueSets[fieldi]->size());
|
setResult("size(" + fieldName + ")", sizeValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
fileName fName
|
fileName fName;
|
||||||
(
|
if (Pstream::master())
|
||||||
timeDir/formatter.getFileName(masterSampleSet, valueSetNames)
|
{
|
||||||
);
|
fName = timeDir/formatter.getFileName(masterSampleSet, valueSetNames);
|
||||||
|
|
||||||
OFstream ofs(fName);
|
OFstream ofs(fName);
|
||||||
if (ofs.opened())
|
if (ofs.opened())
|
||||||
{
|
{
|
||||||
formatter.write
|
formatter.write
|
||||||
(
|
(
|
||||||
masterSampleSet,
|
masterSampleSet,
|
||||||
valueSetNames,
|
valueSetNames,
|
||||||
valueSets,
|
valueSets,
|
||||||
ofs
|
ofs
|
||||||
);
|
);
|
||||||
return fName;
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
WarningInFunction
|
||||||
WarningInFunction
|
<< "File " << ofs.name() << " could not be opened. "
|
||||||
<< "File " << ofs.name() << " could not be opened. "
|
<< "No data will be written" << endl;
|
||||||
<< "No data will be written" << endl;
|
}
|
||||||
return fileName::null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Pstream::scatter(fName);
|
||||||
|
|
||||||
|
return fName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -325,20 +342,15 @@ void Foam::sampledSets::sampleAndWrite(fieldGroup<Type>& fields)
|
|||||||
|
|
||||||
forAll(masterSampledSets_, setI)
|
forAll(masterSampledSets_, setI)
|
||||||
{
|
{
|
||||||
fileName sampleFile;
|
fileName sampleFile = writeSampleFile
|
||||||
if (Pstream::master())
|
(
|
||||||
{
|
masterSampledSets_[setI],
|
||||||
sampleFile = writeSampleFile
|
masterFields,
|
||||||
(
|
setI,
|
||||||
masterSampledSets_[setI],
|
outputPath_/mesh_.time().timeName(),
|
||||||
masterFields,
|
fields.formatter()
|
||||||
setI,
|
);
|
||||||
outputPath_/mesh_.time().timeName(),
|
|
||||||
fields.formatter()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Pstream::scatter(sampleFile);
|
|
||||||
if (sampleFile.size())
|
if (sampleFile.size())
|
||||||
{
|
{
|
||||||
// Case-local file name with "<case>" to make relocatable
|
// Case-local file name with "<case>" to make relocatable
|
||||||
|
|||||||
Reference in New Issue
Block a user