- Can occur with some user names, or mounted paths.
Resolve by using '?' for the separation character.
Since '?' is a shell-glob, it is highly unlikely to occur appear in
filenames. Additionally, it is not a meta-character in standard sed,
nor in the GNU extension (which uses '\?').
changed flag which caused infinite while loop. Background info:
- findCellZoneTopo tries to find for all named surface intersections
which side of the face is in the faceZone
- i.e. it tries to make the cellZone consistent with the faceZone
(to fix small problems)
- this had some logic to assign the neighbour cellZone to the owner cellZone
- which didn't check for the neighbour being the same value as the owner
- but still set a 'changed' flag which caused the loop to never end.
ENH: wallDist - added option to evaluate every XXX steps
Added functionality to update the wall distance every XXX steps
Note: only applies to movePoints() - topology change bypasses the update interval and triggers a re-calculation
Syntax:
```
wallDist
{
method ...
updateInterval 5; // optional - default is 1
}
```
Test case: [mixerVesselAMI2D.tgz](/uploads/c0bee1decc0337018272f3566b6a4416/mixerVesselAMI2D.tgz)
See merge request !62
All of the access methods for autoPtr include validity checks and will
fail if the underlying point is NULL. In some cases, however, we'd
like to retain the automatic deletion mechanism, but still address a
nullptr. This is mostly for cases in which a file-stream should be
allocated, but only on the master process. For these cases we'd still
like to pass through and reference the underlying pointer (eg, to
obtain the correct method call) without tripping the pointer check
mechanism. If we attempt to use the ptr() method, the autoPtr memory
management is bypassed and we risk memory leaks.
Instead provide an alternative mechanism to obtain the raw underlying
pointers/references. Use rawPtr() and rawRef() for these potentially
useful, but also potentially dangerous, operations.
- Normally use '()' to deference. This has extra safety and issues a
fatal error if the underlying pointer is not valid.
However, in some cases we are happy with getting a null reference.
The refOrNull() method returns the reference without any checking.
Usage example:
autoPtr<OFstream> osPtr;
if (Pstream::master())
{
osPtr.reset(new OFstream(...));
}
writeViaMaster(osPtr.refOrNull());
- The writeViaMaster() call takes an OFstream reference,
but this is only used directly on the master.
The slaves will pass things through to the master.
- Less looping when detecting lagrangian clouds and their fields.
- Avoid using Time::setTime() and IOobjectList in tight loops.
They both kill performance immensely.
ENH: provide a -noLagrangian option to foamToEnsight and foamToEnsightParts
for even more control.
- The new field needs initialization with a dimensioned<Type> not just
the dimensionSet.
- The new field was also incorrectly being registered, which could
cause issues later.
Old code:
Found 10990 time steps
Search for moving mesh ... no moving mesh detected.
Startup in 329.09 s
Updated:
Found 10990 time steps
Search for moving mesh ... no moving mesh detected.
Startup in 1.6 s
- Cause was checking "polyMesh/points" via an IOobject.
Short-circuit with a check for a polyMesh/ directory first.
Limit the check to the master-node as well to further reduce
load on the file-system.
------------------------------
ENH: improve per-step conversion times for foamToEnsight.
Old code:
Converting 11001 time steps
Time [0] = 0 Wrote in 1.53 s
Time [1] = 1 Wrote in 1.52 s
...
Time [100] = 100 Elapsed time 205.35 s
Updated:
Converting 11001 time steps
Time [0] = 0 Wrote in 1.4 s
Time [1] = 1 Wrote in 0.07 s
...
Time [100] = 100 Elapsed time 42.4 s
- Speedup by hashing test results from the first conversion step
instead of checking each time.
Check data on all nodes to avoid problems with incomplete writes.
------------------------------
BUG: moving mesh detection failed for foamToEnsightParts
- adjusted to agree with updated foamToEnsight
------------------------------
Note:
- foamToEnsightParts (serial) still has about twice the throughput of
foamToEnsight.
- bugfix (empty patches), and added detection of steady-state
scheme.
Caveat: when called via execFlowFunctionObjects will always produce a
zero field, since the oldTime field is not available for this mode.
Extrapolate internal field to walls for post-processing.
Uses as new syntax for handling the naming of multiple fields.
The input fields are selected via a wordReList.
For example,
fields (U "(T|k|epsilon|omega)");
The names of the resulting output fields use placeholder tokens for
flexibility. For example,
result zeroGradient(@@);
The '@@' placeholder is replaced by the name of the input field.
Eg,
fields (U T);
result zeroGradient(@@);
-> zeroGradient(U), zeroGradient(T)
Or,
fields (U T);
result @@nearWall;
-> UnearWall, TnearWall
NOTE:
The function object will skip over fields that only have
processor, empty, zeroGradient patches. The operation does not
make much sense for these, and it avoids inadvertently
re-processing fields twice.
- implemented using magSqr() instead of sqr().
For scalar fields they are the same, but can be useful
if this function object is extended for more field types.
- 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
==================================================