Both point- and surfaceNoise utilities can operate on multiple input
files. However, if the files had the same name, the output would be
overwritten. To avoid this, the output files are now written to a
sub-directory including the path '/input<input-file-index>/', e.g.
postProcessing/noise/surfaceNoise/input0/nearWall/[fft|oneThirdOctave]
An optional 'outputPrefix' can be included (defaults to empty), e.g.
when set to 'test1':
postProcessing/noise/test1/surfaceNoise/input0/nearWall/[fft|oneThirdOctave]
- Limit output to frequency range given by fLower and fUpper (if supplied)
- Enable noise models to be run outside of $FOAM_CASE directory
- if relative paths are used, $FOAM_CASE is prepended to the noise
dict and input file names
- Enable output to be customised, e.g.
// Optional write options dictionary (all default to 'yes')
writeOptions
{
writePrmsf no;
writeSPL yes;
writePSD yes;
writePSDf no;
writeOctaves yes;
}
- The code create a box with a (0,0,0) point.
The new definition is more logical and makes it very easy to grow
the bounding box to include new points. It also simplifies much of
the logic in the constructors.
- Use ROOTVGREAT instead of VGREAT for sizing greatBox and invertedBox.
Avoids some overflow issues reported by Mattijs (thus GREAT has been
used in treeBoundBox), but might still need further revision.
- to the referenced object via a method name, which may be clearer
than deferencing the iterator
[key, value] => iter.key(), *iter
[key, value] => iter.key(), iter()
[key, value] => iter.key(), iter.object()
- Constructor for bounding box of a single point.
- add(boundBox), add(point) ...
-> Extend box to enclose the second box or point(s).
Eg,
bb.add(pt);
vs.
bb.min() = Foam::min(bb.min(), pt);
bb.max() = Foam::max(bb.max(), pt);
Also works with other bounding boxes.
Eg,
bb.add(bb2);
// OR
bb += bb2;
vs.
bb.min() = Foam::min(bb.min(), bb2.min());
bb.max() = Foam::max(bb.max(), bb2.max());
'+=' operator allows the reduction to be used in parallel
gather/scatter operations.
A global '+' operator is not currently needed.
Note: may be useful in the future to have a 'clear()' method
that resets to a zero-sized (inverted) box.
STYLE: make many bounding box constructors explicit
reduce()
- parallel reduction of min/max values.
Reduces coding for the callers.
Eg,
bb.reduce();
instead of the previous method:
reduce(bb.min(), minOp<point>());
reduce(bb.max(), maxOp<point>());
STYLE:
- use initializer list for creating static content
- use point::min/point::max when defining standard boxes
- no reason to use post-increment in forAll() macro.
- use C++11 cbegin()/cend() method names for forAll*Iter() macros.
These method names have been in OpenFOAM since 2009 and are also
used by C++11 containers.
STYLE: nullptr instead of 0 in UList
Examples,
wmakePrintBuild -plus
Check if value is known
(ie, everything configured and also OpenFOAM+):
if wmakePrintBuild -plus >/dev/null 2>&1
then
echo YES
else
echo NO
fi
Check if version is new enough
if ofver=$(wmakePrintBuild -plus 2>/dev/null) && [ "$ofver" -ge 1612 ]
then
echo YES
else
echo NO
fi
Conditionals
ofver=$(wmakePrintBuild -plus 2>/dev/null)
case "${ofver:=0}" in
1612)
echo "something for 1612
;;
1706)
echo "something for 1706
;;
esac
- as originally intended years ago, but never actually done.
- use 'foamPvCore' instead of 'vtkPVReaders' to avoid potential name
collisions with any 'vtk*' files and since we may reuse these
functions in other foam-paraview modules (not just readers).
STYLE: use same font size/colour for patch-names as for point-numbers
BUG: repair issue with single time-step
- paraview time-selector returns '0' as the requested time if there is
only one time step. However, if we have skipped the 0/ directory,
this single time step is likely a non-zero value.
- makes it easier to use as a wordHashSet replacement for situations
where we want to avoid duplicates but retain the input order.
- support construction from HashTable, which means it works like the
HashTable::sortedToc but with its own hashing for these keys.
- expose rehash() method for the user. There is normally no need for
using it directly, but also no reason to lock it away as private.