mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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);
|
||||||
|
|||||||
@ -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_
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -97,22 +98,23 @@ Foam::fileName Foam::ensightSurfaceWriter::writeUncollated
|
|||||||
<< "type: ensight gold" << nl
|
<< "type: ensight gold" << nl
|
||||||
<< nl
|
<< nl
|
||||||
<< "GEOMETRY" << nl
|
<< "GEOMETRY" << nl
|
||||||
<< "model: 1 " << osGeom.name().name() << nl
|
<< "model: 1 " << osGeom.name().name() << nl
|
||||||
<< 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
|
||||||
<< "number of steps: 1" << nl
|
<< "number of steps: 1" << nl
|
||||||
<< "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");
|
{
|
||||||
os << dict;
|
OFstream os(baseDir/"fieldsDict");
|
||||||
|
os << "// summary of ensight times/fields" << nl << nl;
|
||||||
|
dict.write(os, false);
|
||||||
|
}
|
||||||
|
|
||||||
OFstream osCase(baseDir/surfName + ".case");
|
OFstream osCase(baseDir/surfName + ".case");
|
||||||
|
|
||||||
@ -251,7 +254,7 @@ Foam::fileName Foam::ensightSurfaceWriter::writeCollated
|
|||||||
<< "type: ensight gold" << nl
|
<< "type: ensight gold" << nl
|
||||||
<< nl
|
<< nl
|
||||||
<< "GEOMETRY" << nl
|
<< "GEOMETRY" << nl
|
||||||
<< "model: 1 " << meshFile.name() << nl
|
<< "model: 1 " << meshFile.name() << nl
|
||||||
<< nl
|
<< nl
|
||||||
<< "VARIABLE" << nl;
|
<< "VARIABLE" << nl;
|
||||||
|
|
||||||
@ -269,30 +272,32 @@ 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;
|
||||||
|
|
||||||
osCase
|
osCase
|
||||||
<< "TIME" << nl
|
<< "TIME" << nl
|
||||||
<< "time set: 1" << nl
|
<< "time set: 1" << nl
|
||||||
<< "number of steps: " << timeIndex+1 << nl
|
<< "number of steps: " << timeIndex+1 << nl
|
||||||
<< "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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user