ENH: cleaner output directory for ensight surfaces

- similar to foamToEnsightParts, provide a data/ subdirectory to hold
  the time-varying field information (collated output only).

- widen data mask to avoid possible overflows with many time steps
This commit is contained in:
Mark Olesen
2016-06-30 00:44:14 +02:00
parent a4f6836f3e
commit ad4e8a1f76
2 changed files with 55 additions and 38 deletions

View File

@ -95,14 +95,13 @@ Foam::fileName Foam::ensightSurfaceWriter::write
mkDir(outputDir); mkDir(outputDir);
} }
// const scalar timeValue = Foam::name(this->mesh().time().timeValue());
const scalar timeValue = 0.0; const scalar timeValue = 0.0;
OFstream osCase(outputDir/surfName + ".case"); OFstream osCase(outputDir/surfName + ".case");
ensightGeoFile osGeom ensightGeoFile osGeom
( (
outputDir, outputDir,
surfName + ".0000.mesh", surfName + ".000000.mesh",
writeFormat_ writeFormat_
); );
@ -124,7 +123,7 @@ Foam::fileName Foam::ensightSurfaceWriter::write
<< "filename start number: 0" << nl << "filename start number: 0" << nl
<< "filename increment: 1" << nl << "filename increment: 1" << nl
<< "time values:" << nl << "time values:" << nl
<< timeValue << nl << " " << timeValue << nl
<< nl; << nl;
ensightPartFaces ensPart(0, osGeom.name().name(), points, faces, true); ensightPartFaces ensPart(0, osGeom.name().name(), points, faces, true);

View File

@ -64,6 +64,7 @@ Foam::fileName Foam::ensightSurfaceWriter::writeUncollated
// - VAR2/SURF1.0001.VAR2 // - VAR2/SURF1.0001.VAR2
const fileName baseDir = outputDir/varName; const fileName baseDir = outputDir/varName;
const fileName timeDir = outputDir.name();
if (!isDir(baseDir)) if (!isDir(baseDir))
{ {
@ -71,19 +72,19 @@ Foam::fileName Foam::ensightSurfaceWriter::writeUncollated
} }
// const scalar timeValue = Foam::name(this->mesh().time().timeValue()); // const scalar timeValue = Foam::name(this->mesh().time().timeValue());
const scalar timeValue = 0.0; const scalar timeValue = readScalar(IStringStream(timeDir)());
OFstream osCase(baseDir/surfName + ".case"); OFstream osCase(baseDir/surfName + ".case");
ensightGeoFile osGeom ensightGeoFile osGeom
( (
baseDir, baseDir,
surfName + ".0000.mesh", surfName + ".000000.mesh",
writeFormat_ writeFormat_
); );
ensightFile osField ensightFile osField
( (
baseDir, baseDir,
surfName + ".0000." + varName, surfName + ".000000." + varName,
writeFormat_ writeFormat_
); );
@ -101,9 +102,10 @@ Foam::fileName Foam::ensightSurfaceWriter::writeUncollated
<< nl << nl
<< "VARIABLE" << nl << "VARIABLE" << nl
<< ensightPTraits<Type>::typeName << " per " << ensightPTraits<Type>::typeName << " per "
<< word(isNodeValues ? "node:" : "element:") << setw(10) << 1 << word(isNodeValues ? "node:" : "element:")
<< " " << varName << setw(3) << 1
<< " " << surfName.c_str() << ".****." << varName << nl << setw(15) << varName
<< " " << surfName.c_str() << ".********." << varName << nl
<< nl << nl
<< "TIME" << nl << "TIME" << nl
<< "time set: 1" << nl << "time set: 1" << nl
@ -111,8 +113,8 @@ Foam::fileName Foam::ensightSurfaceWriter::writeUncollated
<< "filename start number: 0" << nl << "filename start number: 0" << nl
<< "filename increment: 1" << nl << "filename increment: 1" << nl
<< "time values:" << nl << "time values:" << nl
<< timeValue << nl << " " << timeValue
<< nl; << nl << nl << "# end" << nl;
ensightPartFaces ensPart(0, osGeom.name().name(), points, faces, true); ensightPartFaces ensPart(0, osGeom.name().name(), points, faces, true);
osGeom << ensPart; osGeom << ensPart;
@ -145,13 +147,13 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
// eg, something like this: // eg, something like this:
// - SURF1/SURF1.case // - SURF1/SURF1.case
// - SURF1/SURF1.0000.mesh // - SURF1/SURF1.0000.mesh
// - SURF1/SURF1.0001.VAR1 // - SURF1/SURF1/data/0000/VAR1
// - SURF1/SURF1.0001.VAR2 // - SURF1/SURF1/data/0000/VAR2
// and // and
// - SURF2/SURF2.case // - SURF2/SURF2.case
// - SURF2/SURF2.0000.mesh // - SURF2/SURF2.0000.mesh
// - SURF2/SURF2.0001.VAR1 // - SURF2/SURF2/data/0000/VAR1
// - SURF2/SURF2.0001.VAR2 // - SURF2/SURF2/data/0000/VAR2
const fileName baseDir = outputDir.path()/surfName; const fileName baseDir = outputDir.path()/surfName;
const fileName timeDir = outputDir.name(); const fileName timeDir = outputDir.name();
@ -162,11 +164,10 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
} }
// surfName already validated // surfName already validated
const fileName meshFile(baseDir/surfName + ".0000.mesh"); const fileName meshFile(baseDir/surfName + ".000000.mesh");
const scalar timeValue = readScalar(IStringStream(timeDir)()); const scalar timeValue = readScalar(IStringStream(timeDir)());
label timeIndex = 0; label timeIndex = 0;
// Do case file // Do case file
{ {
dictionary dict; dictionary dict;
@ -235,9 +236,11 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
{ {
Info<< "Writing state file to fieldsDict" << endl; Info<< "Writing state file to fieldsDict" << endl;
} }
{
OFstream os(baseDir/"fieldsDict"); OFstream os(baseDir/"fieldsDict");
os << dict; os << "// summary of ensight times/fields" << nl << nl;
dict.write(os, false);
}
OFstream osCase(baseDir/surfName + ".case"); OFstream osCase(baseDir/surfName + ".case");
@ -269,9 +272,9 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
osCase osCase
<< fieldType << " per " << fieldType << " per "
<< word(isNodeValues ? "node:" : "element:") << word(isNodeValues ? "node:" : "element:")
<< setw(10) << 1 << setw(3) << 1
<< setw(15) << varName << setw(15) << varName
<< " " << surfName.c_str() << ".****." << varName << " data/******/" << varName
<< nl; << nl;
} }
osCase << nl; osCase << nl;
@ -283,16 +286,18 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
<< "filename start number: 0" << nl << "filename start number: 0" << nl
<< "filename increment: 1" << nl << "filename increment: 1" << nl
<< "time values:" << nl; << "time values:" << nl;
label count = 0;
forAll(times, timeI) forAll(times, timeI)
{ {
osCase << setw(12) << times[timeI] << " "; osCase << ' ' << setw(12) << times[timeI];
if (timeI != 0 && (timeI % 6) == 0) if (++count % 6 == 0)
{ {
osCase << nl; osCase << nl;
} }
} }
osCase << nl; osCase << nl << nl << "# end" << nl;
} }
} }
@ -316,15 +321,20 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
{ {
OStringStream os; OStringStream os;
os.stdStream().fill('0'); os.stdStream().fill('0');
os << setw(4) << timeIndex; os << setw(6) << timeIndex;
timeString = os.str(); timeString = os.str();
} }
fileName dataDir = baseDir/"data"/timeString;
// as per mkdir -p "data/000000"
mkDir(dataDir);
// Write field // Write field
ensightFile osField ensightFile osField
( (
baseDir, dataDir,
surfName + "." + timeString + "." + varName, varName,
writeFormat_ writeFormat_
); );
if (verbose) if (verbose)
@ -334,6 +344,14 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
osField.writeKeyword(ensightPTraits<Type>::typeName); osField.writeKeyword(ensightPTraits<Type>::typeName);
ensPart.writeField(osField, values, isNodeValues); ensPart.writeField(osField, values, isNodeValues);
// place a timestamp in the directory for future reference
{
OFstream timeStamp(dataDir/"time");
timeStamp
<< "# timestep time" << nl
<< dataDir.name() << " " << timeValue << nl;
}
return baseDir/surfName + ".case"; return baseDir/surfName + ".case";
} }