ENH: expand data mask for foamToEnsight (issue #231)

- Default is a width of 8 characters, but this can be extended up to 31
  characters via the '-width' command-line option.

- Now use a similar structure as foamToEnsightParts for the masking.
  This reduces the clutter within the directory, makes it easier to
  selectively delete some time steps (using shell commands).

- Added in a "time" information data in each sub-directory to
  make it possible to reconstruct the case file with an external
  script.

- Conversion of cloud data should now also work in parallel
  (may need more testing).

- Support binary output for cloud data.

- Better avoidance of illegal ensight variable names.
  But still partially incomplete (due to patch fields).

==================================================
Example of NEW file structure:

    EnSight/verticalChannel.case        # case name
    EnSight/geometry                    # for non-moving geometry

    EnSight/data/                       # time-varying data
    EnSight/data/00000000/
    EnSight/data/00000001/
    ...

  Fields are stored by name within the data/********/ directories:

    EnSight/data/00000001/time          # human-readable time info
    EnSight/data/00000001/U
    EnSight/data/00000001/p
    ...
    EnSight/data/00000001/geometry      # for moving geometry

  Clouds are stored at the next sub-directory level:

    EnSight/data/00000001/lagrangian/<cloudName>/positions
    EnSight/data/00000001/lagrangian/<cloudName>/U
    ...

==================================================
The old structure was significantly more cluttered:

    EnSight/verticalChannel.case
    EnSight/verticalChannel.0000.mesh
    EnSight/verticalChannel.0001.p
    EnSight/verticalChannel.0001.<cloudName>
    EnSight/verticalChannel.0001.<cloudName>.U

==================================================
This commit is contained in:
Mark Olesen
2016-09-13 18:26:00 +02:00
parent d56924624b
commit 9de4a75813
21 changed files with 844 additions and 833 deletions

View File

@ -1,25 +1,25 @@
// check for "points" in any of the result directories
bool meshMoving = false;
if (Times.size() > 1)
if (timeDirs.size() > 1)
{
// We already loaded a mesh (usually from constant). See if any other
// points files
forAll(Times, timeI)
forAll(timeDirs, timeI)
{
if (Times[timeI].name() != mesh.pointsInstance())
if (timeDirs[timeI].name() != mesh.pointsInstance())
{
IOobject io
meshMoving = IOobject
(
"points",
Times[timeI].name(),
timeDirs[timeI].name(),
polyMesh::meshSubDir,
mesh,
IOobject::NO_READ
);
if (io.typeHeaderOk<pointIOField>(true))
).typeHeaderOk<pointIOField>(true);
if (meshMoving)
{
meshMoving = true;
break;
}
}