New solid body motion mesh update optimisations
Summary
New/refactored code to enable partial geometry updates for solid-body motion cases.
Details of new models (If applicable)
Adds a new solidBody
geometry scheme, applicable for e.g. rotating AMI/ACMI cases:
geometry
{
type solidBody;
// Optional
partialUpdate yes; // default = yes
cacheMotion yes; // default = yes
}
Instead of performing a complete mesh clear-out we selectively update only the geometry attached to moving points, under the assumption that there are no topological updates/the motion can be described as solid-body motion.
Performance improvements (time) are case specific, e.g. the smaller the fraction of moving cells compared to the total cell count, the larger the benefit for the mesh update phase.
The additional entries control:
-
partialUpdate
: if set tofalse
, perform a complete mesh clear-out on mesh changes -
cacheMotion
: if set totrue
, cache the addressing for the moving points, faces and cells across all time steps
Backwards compatibility
The basic
option is the default and is applied if the geometry
sub-dictionary is not supplied:
geometry
{
type basic;
}
Selecting this option should recover v2112 (and earlier versions) behaviour.
Risks
- Refactored mesh updates
- mesh flux is now calculated by the
fvGeometryScheme
- mesh flux is now calculated by the
- Added partial geometry updates
- see
primitiveMeshTools.H
functionsupdateFaceCentresAndAreas
andupdateCellCentresAndVols
- see
- Need to test
snappyHexMesh
cases - the updates did not initially play nicely with the layer addition phase
Testing
- Tests performed on:
pimpleFoam/RAS/propeller tutorial
-
singleWheel
(internal)