- non-uniform offsets are generated due to truncation errors,
which can lead to problems later on (e.g. redistributePar).
Detect if the offsets are close to being uniform.
This also is to do with redistributePar:
this uses subsetMesh to generate parts to
send to different processors.
2) related to 1558: make sure not to choose 'mapped'
patches to move the processor patches into so
we can use the mapper cloning and correctly
size additional data (e.g. offsets). This should
be generalised to hold for any patch type
holding local data ...
- For slow oscillations it can be more intuitive to specify the
period.
ENH: separate mark/space for Square
- makes it easier to tailor the desired intervals.
BUG: incorrect square wave fraction with negative phase shifts
ENH: additional cosine Function1
STYLE: avoid code duplication by inheriting Cosine/Square from Sine.
- deprecated Feb-2018, but not marked as such.
The set() method originally enforce an additional run-time check
(Fatal if pointer was already set), but this was rarely used.
In fact, the set() method was invariably used in constructors
where the pointer by definition was unset.
Can now mark as deprecated to catch the last of these.
We prefer reset() for similarity with std::unique_ptr
Eg,
FOAM_EXTRA_CXXFLAGS="-DFoam_autoPtr_deprecate_setMethod" wmake
- easier support for non-mandatory functions.
In some boundary conditions it can be desirable to support
additional functions, but not necessarily require them. Make this
easier to support with a Function1, PatchFunction1 NewIfPresent()
selector.
- support for compatibility lookups
- harmonize branching logic and error handling between Function1 and
PatchFunction1.
ENH: refactor a base class for Function1, PatchFunction1
- includes base characteristics, patch or scalar information
ENH: additional creation macros
- makeConcreteFunction1, makeConcretePatchFunction1Type for adding a
non-templated function into the correct templated selection table.
makeScalarPatchFunction1 for similarity with makeScalarFunction1
ENH: support construction of zero-sized IndirectList
- useful when addressing is to be generated in-place after construction.
Eg,
indirectPrimitivePatch myPatches
(
IndirectList<face>(mesh.faces(), Zero),
mesh.points()
);
labelList& patchFaces = myPatches.addressing();
patchFaces.resize(...);
// populate patchFaces
STYLE: add noexcept for zero/one fields and remove old dependency files
COMP: correct typedefs for geometricOneField, geometricZeroField
- uses ocountstream for the output, which swallows all output.
Improves portability
ENH: improved efficiency in countstreambuf
- xsputn() instead of overflow
- more consistent seek* methods
Computes a histogram for the distribution of particle diameters
and corresponding number of particles hitting on a given list of patches.
A minimal example by using `constant/reactingCloud1Properties.cloudFunctions`:
```
patchParticleHistogram1
{
// Mandatory entries (unmodifiable)
type patchParticleHistogram;
patches (<patch1> <patch2> ... <patchN>);
nBins 10;
min 0.1;
max 10.0;
maxStoredParcels 20;
}
```
DOC: heatTransferCoeff models: complete remaining header docs
STYLE: heatTransferCoeff models: use auto specifier when appropriate
Optionally, the Nusselt number (i.e. the ratio of convective to conductive
heat transfer at a boundary in a fluid) can be output:
```math
Nu = \frac{h L}{\kappa}
```
where
```
Nu | Nusselt number
h | Convective heat transfer coefficient of the flow
L | Characteristic length that defines the scale of the physical system
\kappa | Thermal conductivity of the fluid
```
It was observed in a MPPICDyMFoam simulation involving a single particle
in a moving mesh that the barocentric trajectory of the particle follows
an unexpected path at some arbitrary instant in time.
The issue was tracked to "hitEqn()" where cubicEqn/quadraticEqn computes
one of the roots wrongly due to the discriminant limit we set, e.g. for:
0x^3 + 1.4334549e-33 x^2 - 9.0869006e-10 x + 0.0027666538
Although the discriminant limit was carefully selected to avoid various
problems at the time, the new change is required more due to its exposition
to a wider spectrum of applications.
From OpenFOAM Foundation e4d89daf5d
The main issue here was that reconstructPar is serial but coupled() in
cyclicAMIFvPatch.C could return true if both sides of the patch was present
(this->size() && neighbFvPatch().size()). However, this would result in an
evaluate call in cyclicAMIFvPatchField. This would only work if both sides
were completely contained on the same processor. The change in logic prevents
coupled() from returning true when called in serial for a decomposed case.
Signed-off-by: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
- prefix FOAM_MPI and library directories with 'sys-' for system
versions for uniform identication.
WM_MPLIB | libdir (FOAM_MPI) | old naming |
SYSTEMMPI | sys-mpi | mpi |
SYSTEMOPENMPI | sys-openmpi | openmpi-system |
- prefix preferences with 'prefs.' to make them more easily
identifiable, and update bin/tools/create-mpi-config accordingly
Old name: config.{csh,sh}/openmpi
New name: config.{csh,sh}/prefs.openmpi
- additional mpi preferences now available:
* prefs.intelmpi
* prefs.mpich
...
CONFIG: added hook for EASYBUILDMPI (eb-mpi), somewhat like USERMPI
- EasyBuild uses mpicc when compiling, so no explicit wmake rules are
used
ENH: support different major versions for system openmpi
- for example, with
WM_MPLIB=SYSTEMOPENMPI2
defines FOAM_MPI=sys-openmpi2 and thus creates lib/sys-openmpi2
ENH: centralize handling of mpi as 'mpi-rules'
Before:
sinclude $(GENERAL_RULES)/mplib$(WM_MPLIB)
sinclude $(DEFAULT_RULES)/mplib$(WM_MPLIB)
ifeq (,$(FOAM_MPI_LIBBIN))
FOAM_MPI_LIBBIN := $(FOAM_LIBBIN)/$(FOAM_MPI)
endif
After:
include $(GENERAL_RULES)/mpi-rules
- also allows variants such as SYSTEMOPENMPI2 to be handled separately
ENH: provide fallback prefix for cmake detection
STYLE: simplify some shell syntax, avoid uname call in sysFunctions
STYLE: report FOAM_MPI during mpiLib builds
- ensures that subsequent Allwmake scripts know about it.
ENH: add bin/tools/query-detect wrapper for wmake have_* scripts
CONFIG: use project/ThirdParty without additional sanity checks
- no need to test for Allwmake or platforms/ if ThirdParty is located
within the project directory itself.
COMP: add simple mpi test to 00-dummy
- for testing library linkage, etc.
- blockMesh <- extrudeModel <- dynamicMesh
COMP: bad constructor in searchableSphere
- used brace initializer instead of bracket initializer, which
triggered component-wise construction instead of copy/move
construction (gcc 4.8)
STYLE: use uint8_t instead of relying on definition of 'direction'
- first sort the cells into their ijk bins, and restrict testing for
face orientation to those faces with an owner or neighbour that has
an ijk bin.
ENH: ensure polyMesh from PDRblockMesh is marked as AUTO_WRITE
- the particular polyMesh constructor inherits the writeOpt, which
makes is dependent on the caller and thus somewhat fragile for the
top level caller.
- a sphere/spheroid can be specified as a single radius or three radii.
If all three values happen to be identical, they are collapsed to a
single value. Examples,
radius 2;
radius (2 2 2);
radius (2 3 4);
radius (2 2 4);
The search for nearest point on an ellipse or ellipsoid follows the
description given by Geometric Tools (David Eberly), which also
include some pseudo code. The content is CC-BY 4.0
In the search algorithm, symmetry is exploited and the searching is
confined to the first (+x,+y,+z) octant, and the radii are ordered
from largest to smallest.
Searching is optimized for sphere, prolate and oblate spheroids.
- code reduction, documentation, code stubs for spheroid (#1901)
- make searchableSurfaceCollection available as 'collection'
for consistency with other objects
- make handling of verbosity more consistent.
Make all setter return the old value, remove (unused) default
parameter as being counter-intuitive. This makes it easier to
restore the original values.
For example,
const bool oldVerbose = sampler.verbose(false);
...
sampler.verbose(oldVerbose);
- can help when designing/debugging blockMesh layouts
- propagate low-level cellModel methods face() and edge() to cellShape
STYLE: relocate blockMesh OBJ output to application only
- remove blockTopology files in cleanCase function
- improve code consistency in top-level blockMesh, PDRblockMesh
generation.
- consistent with FOAM_SIGFPE etc.
- centralize code as error::useAbort() static function to avoid
scattering the logic throughout the code.
ENH: also accept "0" and "1" string values for Switch
- not the normal path for Switch input (eg, from a dictionary), but
consistent with bool definitions and simplifies string parsing.
This means that `FOAM_SIGFPE=1 application` will now also work.