16th June 2011

OpenFOAM 2.0.0: Particle Tracking

Discrete Element Modelling

In this version of OpenFOAM an implementation of the discrete element method (DEM) has been introduced for particle simulations. The implementation of DEM includes the following features.

  • runs efficiently in parallel with no restriction on the shape or size of mesh cells, and with interactions occurring between particles (and walls) in non-neighbouring processor domains.
  • detailed collision models that can include deformation, friction, rolling, cohesion, etc., for example, a spring-slider-dashpot model;
  • particles retain information about current collisions from one time step to the next;
  • each particle can undergo multiple, simultaneous collisions;
  • different sized particles and “representative” particles, i.e. single computational particles that represent several real particles;
  • automatic time sub-cycling to guarantee stability;
  • complete coupling with the continuum phase.

The image below demonstrates the emptying of a hopper, simulated in parallel on 4 processors.


Source code

  • lagrangian librar
  • lagrangianIntermediate library
  • icoUncoupledKinematicParcelFoam solver


  • Hopper emptying –

Tracking Algorithm

faceTetsIn previous versions of OpenFOAM, the particle tracking algorithm moved particles successfully and efficiently in meshes of unstructured, arbitrarily polyhedral cells, in parallel, even in cases where faces of cells were significantly non-flat. Its primary limitation was that it was only applicable where all cells were strictly convex and, in the worst case, concave cells caused a solver to hang indefinitely. Such cells often exist in meshes generated by automatic tools, such as snappyHexMesh, especially at all refinement interfaces where it naturally produces cells that are not strictly convex. To overcome this limitation, the tracking algorithm has been re-written to track particles on an implicit decomposition of each cell into tetrahera as shown.

The tracking algorithm is now guaranteed reliable provided the decomposed tetrahedra have positive volume. When generating a mesh with snappyHexMesh, the quality is guaranteed by specifying a positive level in meshQualityControls, e.g.

    minTetQuality 1e-30;

For any mesh, e.g. one imported into OpenFOAM from a third-party mesh generation tool, the quality of tetrahedra can be checked using the checkMesh utility with the -allGeometry option, which must report “Face tets OK” for tracking to be successful:

> checkMesh -allGeometry
Face tets OK.

The new tracking algorithm is 10-15% faster on regular meshes than before. On meshes that were borderline acceptable for the previous tracking algorithm, particle were prone to getting ‘stuck’ in a cell and the rescue operation for such particles was very costly in computer time. Therefore users may considerable (many times) speedups using the new algorithm on such borderline meshes. In addition, wherever a continuum field is interpolated to a particle position, i.e. to calculate drag on a particle, the tet-decomposed cells is required for reasons of accuracy. Interpolation is therefore faster because the decomposed tets already exist for the tracking itself.

Source code

  • lagrangian library

Migration of Diesel Spray

In OpenFOAM v1.6, the Lagrangian particle tracking was rewritten to allow layers of modelling to be built into the library in a highly modular way. The modelling includes particle kinematics (injection, dispersion, drag, etc.), thermodynamics and reactions, which can interact with the carrier phase.

In this release we have migrated almost all of the “old” Lagrangian design to the new structure. In particular, spray modelling for diesel injection, included in the dieselSpray library, has been migrated to the new structure through the creation of a new lagrangianSpray library that contains models for atomization, breakup and collision of particles. Combined with the existing models in the lagrangianIntermediate library, e.g. for dispersion, injection, particle forces (gravity, drag, etc.), diesel spray can now be simulated without the specialised dieselSpray library.

The dieselFoam solver uses the dieselSpray library to simulate combustion of diesel spray. A new sprayFoam solver has now been introduced that can simulate flow and combustion in any spray using the lagrangianSpray library and other lagrangian libraries. The aachenBomb tutorial, formerly and example case for the dieselFoam solver, has now been set up for sprayFoam to allow comparison between the old and new libraries.

Source code

  • lagrangianSpray library
  • sprayFoam solver


  • Aachen bomb examples

Steady Particle-Tracking

A steady-state implementation of particle tracking, for problems such as steady-state combustion, has been created using the local-time stepping (LTS) approach, also used in interface-tracking. The implementation is in a prototype solver LTSReactingParcelFoam that has been tested on some problems, but requires further testing and/or development. Certainly for some problems, a specialist steady-state version of particle tracking can reduce computational cost significantly over conventional transient solution.

Source code

  • LTSReactingParcelFoam solver


  • Counter-flow flame
  • Vertical channel