- eliminate ensightAsciiStream, ensightBinaryStream, ensightStream in favour of using ensightFile and ensightGeoFile classes throughout. - encapsulate mesh-parts sorting with the ensightCells, ensightFaces class. - handle of patches/faceZones entirely within ensightMesh for a lighter interaction with field output. Both faceZones and point fields need more testing to see if they behave properly for all cases. - move some output functionality into its own namespace 'ensightOutput', move into a library. - use the ensightCase class to open new ensight output streams in the proper sub-directory locations.
94 lines
2.5 KiB
C
94 lines
2.5 KiB
C
// check all time directories for the following:
|
|
|
|
// The fields for each cloud:
|
|
HashTable<HashTable<word>> cloudFields;
|
|
|
|
// Identify if lagrangian data exist at any time step.
|
|
if (timeDirs.size() && !noLagrangian)
|
|
{
|
|
const fileName& baseDir = mesh.time().path();
|
|
const fileName& cloudPrefix = regionPrefix/cloud::prefix;
|
|
|
|
Info<< "Searching for lagrangian ... " << flush;
|
|
|
|
forAll(timeDirs, timeI)
|
|
{
|
|
const word& timeName = timeDirs[timeI].name();
|
|
|
|
// DO NOT USE -->> runTime.setTime(timeDirs[timeI], timeI); <<--
|
|
// It incurs a large overhead when done so frequently.
|
|
|
|
fileNameList cloudDirs = readDir
|
|
(
|
|
baseDir/timeName/cloudPrefix,
|
|
fileName::DIRECTORY
|
|
);
|
|
|
|
forAll(cloudDirs, cloudI)
|
|
{
|
|
const word& cloudName = cloudDirs[cloudI];
|
|
|
|
IOobjectList cloudObjs
|
|
(
|
|
mesh,
|
|
timeName,
|
|
cloudPrefix/cloudName
|
|
);
|
|
|
|
// clouds always require "positions"
|
|
if (cloudObjs.found("positions"))
|
|
{
|
|
HashTable<HashTable<word>>::iterator cloudIter =
|
|
cloudFields.find(cloudName);
|
|
|
|
if (cloudIter == cloudFields.end())
|
|
{
|
|
// A newly discovered cloud
|
|
cloudFields.insert(cloudName, HashTable<word>());
|
|
cloudIter = cloudFields.find(cloudName);
|
|
}
|
|
|
|
forAllConstIter(IOobjectList, cloudObjs, fieldIter)
|
|
{
|
|
const IOobject& obj = *fieldIter();
|
|
|
|
// Add field and field type
|
|
cloudIter().insert
|
|
(
|
|
obj.name(),
|
|
obj.headerClassName()
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// prune out "positions" again since it gets treated specially
|
|
forAllIter(HashTable<HashTable<word>>, cloudFields, cloudIter)
|
|
{
|
|
cloudIter().erase("positions");
|
|
}
|
|
|
|
if (cloudFields.empty())
|
|
{
|
|
Info<< "none detected." << endl;
|
|
}
|
|
}
|
|
|
|
|
|
// sorted list of cloud names
|
|
const wordList cloudNames(cloudFields.sortedToc());
|
|
|
|
if (cloudNames.size())
|
|
{
|
|
// complete the echo information
|
|
Info<< "(";
|
|
forAll(cloudNames, cloudNo)
|
|
{
|
|
Info<< ' ' << cloudNames[cloudNo];
|
|
}
|
|
Info<< " ) " << endl;
|
|
}
|
|
|
|
// ************************************************************************* //
|