Skip to content

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 to false, perform a complete mesh clear-out on mesh changes
  • cacheMotion : if set to true, 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
  • Added partial geometry updates
    • see primitiveMeshTools.H functions updateFaceCentresAndAreas and updateCellCentresAndVols
  • 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)
Edited by Andrew Heather

Merge request reports