diff --git a/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C b/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C index c9441dd28c1c4cd7b7855d8c5a5da149007776da..6dde9d05fd7b1232c2a1134688311cc3f0f780a1 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C +++ b/src/sampling/sampledSet/sampledSets/sampledSetsTemplates.C @@ -136,46 +136,63 @@ 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; - 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 - 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) - ); - - OFstream ofs(fName); - if (ofs.opened()) + fileName fName; + if (Pstream::master()) { - formatter.write - ( - masterSampleSet, - valueSetNames, - valueSets, - ofs - ); - return fName; - } - else - { - WarningInFunction - << "File " << ofs.name() << " could not be opened. " - << "No data will be written" << endl; - return fileName::null; + fName = timeDir/formatter.getFileName(masterSampleSet, valueSetNames); + + OFstream ofs(fName); + if (ofs.opened()) + { + formatter.write + ( + masterSampleSet, + valueSetNames, + valueSets, + ofs + ); + } + else + { + WarningInFunction + << "File " << ofs.name() << " could not be opened. " + << "No data will be written" << endl; + } } + + Pstream::scatter(fName); + + return fName; } @@ -325,20 +342,15 @@ void Foam::sampledSets::sampleAndWrite(fieldGroup<Type>& fields) forAll(masterSampledSets_, setI) { - fileName sampleFile; - if (Pstream::master()) - { - sampleFile = writeSampleFile - ( - masterSampledSets_[setI], - masterFields, - setI, - outputPath_/mesh_.time().timeName(), - fields.formatter() - ); - } + fileName sampleFile = writeSampleFile + ( + masterSampledSets_[setI], + masterFields, + setI, + outputPath_/mesh_.time().timeName(), + fields.formatter() + ); - Pstream::scatter(sampleFile); if (sampleFile.size()) { // Case-local file name with "<case>" to make relocatable