Applicable to rotational cases:
- stores AMI weights and addressing on the first revolution
- cached evaluations performed on subsequent revolutions to reduce computational
costs
Cached values are stored in angular bins, specified using the [optional]
`cacheSize` entry when defining the patch in the polyMesh/boundary file, e.g.
AMI1
{
type cyclicAMI;
AMIMethod faceAreaWeightAMI;
neighbourPatch AMI2;
cacheSize 360; // New entry
transform rotational;
rotationAxis (0 0 1);
rotationCentre (0 0 0);
}
Note that the transform must also be set to rotational; the additional
`rotationAxis` and `rotationCentre` entries are used to construct a local AMI
co-ordinate system to determine the rotation angle as the mesh moves.
360 bins are created in the example above, equating to a uniform bin width
of 1 degree.
- appears to hit single precision overflow with clang-15 in
face::center(), cellModel::center() and blockMesh createPoints().
The blockMesh might be particularly sensitive, since the points are
frequently defined in millimeters (scaled later), which results
in large intermediate summations.
Similar to primitiveMesh checks, use double precision for these
calculations.
ENH: support vector += and -= from compatible types
- eg, doubleVector += floatVector is now supported.
This streamlines some coding for mixed precision.
- To avoid lots of boilerplate, do not yet attempt to support general
operations such as `operator+(doubleVector, floatVector)`
until they become necessary.
- since pointConstraint is a tuple of (label, vector) not simply use
readRawLabel, readRawScalar since the tuple will also include
trailing padding and/or padding between its members
FIX: remove flawed handling of non-native precision for directionInfo
- packing of (label, vector) makes handling of non-native content
non-trivial (#3412). Content is only streamed, not written to disk,
so replace with a fatalCheck.
- local templates and 'if constexpr' to simplify logic and reduce
reliance on pre-processor defines.
FIX: readScalarOrDefault used scalarToken() not number() token
- will rarely (or never) be triggered, but was inconsistent
- as seen in #3201, using count() based on the ostringstream tellp
is not reliable since it is not updated with reset or copying.
STYLE: minor changes to string/char/span streams
- update docs to only mention string_view
- use auto return, without extra trailing 'decltype'
ENH: add IOstream size check helper methods
* checkNativeSizes() : test only
* fatalCheckNativeSizes() : an assert with FatalIOError
- find patch by name and return pointer to it. Similar to cfindZone()
ENH: robuster PatchFunction1 handling for uniformFixedValuePointPatchField
COMP: use 'if constexpr' with is_contiguous check
STYLE: consistent patch slicing parameters
- slice UList values, not List values
- base DimensionedField on DynamicField instead of Field to allow
convenient resizing
- initial infrastructure for unified GeometricField handling with
the boundaryEvaluate() method
Co-authored-by: <Mark.Olesen@keysight.com>
- regular or forced assignment from `zero` does not need dimension
checking:
Old: U = dimensionedVector(U.dimensions(), Zero);
New: U = Zero;
this eliminates a fair bit of clutter and simplifies new coding
without losing general dimension checking capabilities.
- reserve() did not set the addressable size to the current capacity
before resizing, which meant that the delete[] would not have the
true allocated size. Only affects memory-pool usage (#3381), which
is not yet integrated
ENH: remove unused DynamicList '*_unsafe()' methods
- can result in a mismatch between allocated and addressed sizes,
which becomes important for memory-pool usage.
Triggers function object to execute on the first time step.
Example usage:
minMax1
{
type fieldMinMax;
libs (fieldFunctionObjects);
writeControl onStart;
fields (".*");
}
Ref: EP2608
Correcting bug introduced when trying to keep the old communicator.
We do not need local communicator if all ranks of comm have
some faces. Not all ranks of the already local communicator.
- previous handling of forced inclusion of the master would taint the
logic about single vs multiple ranks.
- be fussier about avoing creation of a local communicator when not
needed.
STYLE: rename internal switch from localComm_ to useLocalComm_
- less confusing (it is a switch, not the communicator itself)
- setting the warnComm is useful for diagnosing multi-world issues but
triggers many false warnings when used in combination with AMI local
communicators.
COMP: unresolved pTraits<long int> for reductions on i586 systems
- now always just use int64_t instead of off_t and time_t
for master reductions.
Note that this is not the only place where the off_t definition
causes compilation issues (cf. fileOperation::broadcastCopy)