- makes fileHandler calling resemble Time more closely
ENH: provide natural_sort less/greater functions
- more succinct than (compare < 0) or (compare > 0).
The corresponding wrappers for UList renamed as list_less, etc
but they were only used in unit tests
ENH: handle (-allRegions | -all-regions, ..) directly when retrieving args
- makes handling independent of aliasing order
STYLE: include <string_view> when including <string>
- the standard does not guarantee which headers (if any) actually
include string_view
Ideally wish to delay construction of the finite-area mesh until
updateCoeffs(), when it is actually needed.
This helps avoid difficult to trace errors and avoids inadvertent
parallel communication during construction from a dictionary.
However, lazy evaluation fails at the later stage while attempting
to load the corresponding initial fields, since the timeIndex has
already advanced.
Use the newly introduced regionModels::allowFaModels() switch
to locally enable or disable lazy evaluation as needed.
This allows selective disabling (eg, in post-processing utilities)
where loading the volume field should not activate the associated
regionFaModel and loading a finite-area mesh too (which may not
exist or be defined at that point).
- less typing than before and avoids relying on bash-specific behaviour
(fixes#3448)
ENH: add -region support for cleanFaMesh and cleanPolyMesh
CONFIG: add bash completion help for -area-region
ENH: general improvements for regionProperties
- robustness and failsafe for foamListRegions, regionProperties
- additional global model switches for regionModels
- add provisional support for selecting MPI_Gatherv
when merging fields in the surface writers.
Uses the 'gatherv' keyword [experimental]
BUG: gatherv/scatterv wrappers used the incorrect data type
- incorrectly checked against UPstream_basic_dataType trait instead of
UPstream_dataType, which resulted in a count mismatch for
user-defined types (eg, vector, tensor,...).
This was not visibly active bug, since previous internal uses of
gatherv were restricted to primitive types.
COMP: make UPstream dataType traits size(...) constexpr
- allows static asserts and/or compile-time selection
of code based on size(1)
- extend the getAllRegionOptions and getAllFaRegionOptions handling
to use the supplied string literals as fallback values.
If regionProperties is missing (or empty) and the -regions/-area-regions
option is supplied with literal names, these will be used directly
instead of being used to filter the regionProperties.
STYLE: support both -all-regions and -allRegions
- activeRequest() checks if given request is still active/pending
- finishedRequest() will now always call MPI_Test when running in
parallel instead of using a fast-path for skipping a null request.
This allows MPI a chance to progress operations even if that
particular request is not active.
- sameProcs() is a convenience wrapper for the following:
* check if indices resolve to the same underlying procs
* check the communicator procs against a list of procs
* to compare two lists of procs.
For example, check if the communicator corresponds to a
host-local communication:
if (UPstream::sameProcs(UPstream::commLocalNode(), myComm)) ...
STYLE: UPstream::Request gets an 'active()' method
- more MPI idiomatic than 'good'
- to avoid the many overload warnings on that platform,
may wish to use
FOAM_EXTRA_CXXFLAGS="-Wno-overloaded-virtual"
GIT: remove some old compilation stub files
- add '<=' and '>=' operators that include rounding.
This means that typical code like the following would not have
considered any rounding:
instantList times = ...;
scalar val = ..;
// No rounding!
if (times[i].value() <= val) { ... }
// NEW: with rounding
if (times[i] <= val) { ... }
// old equivalent:
if (times[i].value() <= val || times[i].equal(val)) { ... }
ENH: provide a default stopInstance for fileOperation::findInstance
- makes it more consistent with Time::findInstance and more convenient
to use
STYLE: minor code style changes to TimePaths etc
- enables partial overwriting of content
- make default construct zero-sized, add reserve_exact() method
- improve sizing behaviour of OCharStream.
Since char buffers will approach the INT_MAX size more quickly than
other content, adapt the following strategy:
| Capacity range | Strategy |
|--------------------|------------------------------|
| 0 < N <= 0.25) | fast growth (2) |
| 0.25 < N <= 0.5) | slower growth (1.5) |
| 0.5 < N <= 0.75) | very slow growth (1.25) |
| 0.75 < N | already large - use max |
- make memory streams header-only (simpler)
- add sub-views and direct seek for span streams
New IOobject convenience methods
- IOobject::instanceValue() : return the IOobject instance as a scalar
value (or 0). Effectively the same as instant(io.instance()).value()
but with far less typing.
- IOobject::fileModificationChecking_masterOnly() : combines checks for
time-stamp and inotify variants
STYLE: minor adjustments for Enum
- can now create an empty entry and add/overwrite with tokens afterwards,
or copy/move construct from a list of tokens.
ENH: provided named token setter methods (disambiguates bool/char/label)
COMP: use 'if constexpr' for FlatOutput
DOC: more description for Field
- num_blocks(), test_set() as per boost
- broadcast(), reduceAnd(), reduceOr() to simplify parallel operations
- matrix-like output for PackedList::writeList()
BUG: Pstream::broadcastList() missing resize on sub-ranks
- latent bug since it was unused in any OpenFOAM code
- align some of the internal handling with each other and with
CompactListList
ENH: add readContentsSize to IOList, IOField etc.
- sometimes just need to know how many elements are stored on disk
without actually caring about the content. In those cases, can
frequently just get that information from the first label token
without needing to read anything else.
- the logic has been revised to allow list copying with nullptr entries.
These previously would have thrown an error.
- remove PtrList trimTrailingNull() method.
It was unused and would result in inconsistent addressing sizes.
FIX: inconsistent sizing used for DynamicList/PtrDynList clearStorage()
- older code did not reset addressable size prior to clearStorage()
or transfer(). Only a latent bug until memory pools are used.
- can be used in most places where checkType=false is used
ENH: add non-const get() method to HashPtrTable
- allows checking and modification (symmetric with PtrList methods)
STYLE: improve annotations in fileOperations headers
- since direct streaming of particles is only ever used internally and
never for disk I/O (which is collated by property), mixed precision
will never occur when constructing a particle from a stream.
Due to padding issues, the previous code would have been faulty anyhow.
Thus remove that code and replace with a simple sanity check.
- 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.
- 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
- 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.
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)
- avoids intermediate allocation and re-assignment to self (#3374)
BUG: checkMesh (application) with questionable memory handling (#3374)
- move the contents of the new points instead of attempting to transfer
the entire list
COMP: replace mapDistribute specializations with if constexpr handling
- simplify future maintenance
- tests for list equality with different but compatible data types.
Eg, when comparing lists of int32 and int64 values.
STYLE: pass UList instead of List references into ListOps functors
ENH: align MPI_Probe non-blocking handling with header description
- the header states that the commsType is non-blocking or not,
but the implementation actually checked for 'buffered' or not.
STYLE: fix some spacing and some documentation