CFDEM(R)coupling Documentation



The CFDEM(R)coupling documentation is organized into the following sections. If you find any errors or omissions in this manual or have suggestions for useful information to add, please send an email to the developers so the CFDEM(R)coupling documentation can be improved.

About CFDEM(R)coupling

CFDEM(R)coupling provides an open source parallel coupled CFD-DEM framework combining the strengths of LIGGGHTS(R) DEM code and the Open Source CFD package OpenFOAM(R)(*). The CFDEM(R)coupling toolbox allows to expand standard CFD solvers of OpenFOAM(R)(*) to include a coupling to the DEM code LIGGGHTS(R). In this toolbox the particle representation within the CFD solver is organized by “cloud” classes. Key functionalities are organised in sub-models (e.g. force models, data exchange models, etc.) which can easily be selected and combined by dictionary settings.

The coupled solvers run fully parallel on distributed-memory clusters. Features are:

  • its modular approach allows users to easily implement new models
  • its MPI parallelization enables to use it for large scale problems
  • the forum on CFD-DEM gives the possibility to exchange with other users / developers
  • the use of GIT allows to easily update to the latest version
  • basic documentation is provided

The file structure:

  • src directory including the source files of the coupling toolbox and models
  • applications directory including the solver files for coupled CFD-DEM simulations
  • doc directory including the documentation of CFDEM(R)coupling
  • tutorials directory including basic tutorial cases showing the functionality

Details on installation are given on the CFDEM(R)project WWW Site . The functionality of this CFD-DEM framework is described via tutorial cases showing how to use different solvers and models.

CFDEM(R)coupling stands for Computational Fluid Dynamics (CFD) -Discrete Element Method (DEM) coupling.

CFDEM(R)coupling is an open-source code, distributed freely under the terms of the GNU Public License (GPL).

Core development of CFDEM(R)coupling is done by Christoph Goniva and Christoph Kloss, both at DCS Computing GmbH, 2012

This documentation was written by Christoph Goniva, DCS Computing GmbH, 2012

(*) This offering is not approved or endorsed by OpenCFD Limited, the producer of the OpenFOAM software and owner of the OPENFOAM® and OpenCFD® trade marks.


Please follow the installation routine provided at In order to get the latest code version, please use the git repository at (githubAccess).



Each solver of the CFDEM(R)coupling comes with at least one tutorial example, showing its functionality and correct usage. Provided that the installation is correct, the tutorials can be run via “” shell scripts. These scripts perform all necessary steps (preprocessing, run, postprocessing, visualization).


The tutorials can be found in the directory $CFDEM_PROJECT_DIR/tutorials, which can be reached by typing “cfdemTut”


Each case is structured in a directory called “CFD” covering the CFD relevant settings and data, and a dirctory called “DEM” covering the DEM relevant settings and data. This allows to easily expand a pure CFD or DEM simulation case to a coupled case.


Provided that the installation is correct, the tutorials can be run via “” shell script, executed by typing ”./”. The successful run of the script might need some third party software (e.g. octave, evince, etc.).


The main settings of a simulation are done via dictionaries:

The DEM setup of each case is defined by a LIGGGHTS(R) input file located in $caseDir/DEM (e.g. in.liggghts_init). For details on the LIGGGHTS(R) setup, please have a look at the LIGGGHTS(R) manual.

Standard CFD settings are defined in $caseDir/CFD/constant (e.g. transportProperties, RASproperties, etc.) and $caseDir/CFD/system (e.g. fvSchemes, controlDict). You can find more information on that in OpenFOAM(R)(*) documentations (*).

Settings of the coupling routines are defined in $caseDir/CFD/constant/couplingProperies (e.g. force models, data exchange model, etc.) and $caseDir/CFD/constant/liggghtsCommands (allows to execute a LIGGGHTS(R) command during a coupled simulation).

“couplingProperties” dictionary


In the “couplingProperties” dictionary the setup of the coupling routines of the CFD-DEM simulation are defined.

Location: $caseDir/CFD/constant


The dictionary is divided into two parts, “sub-models & settings” and “sub-model properties”.

In “sub-models & settings” the following routines must be specified:

  • modelType
  • couplingInterval
  • voidFractionModel
  • locateModel
  • meshMotionModel
  • regionModel
  • IOModel
  • dataExchangeModel
  • averagingModel
  • forceModels
  • momCoupleModels
  • turbulenceModelType

In “sub-model properties” sub-dictionaries might be defined to specify model specific parameters.


Reasonable example settings for the “couplingProperties” dictionary are given in the tutorial cases.


“modelType” refers to the formulation of the equations to be solved. Choose “A”, “B” or “Bfull”, according to Zhou et al. (2010): “Discrete particle simulation of particle-fluid flow: model formulations and their applicability”, JFM. “A” requires the use of the force models gradPForce and viscForce, whereas “B” requires the force model “Archimedes”. “Bfull” refers to model type I, “A” refers to model type II and “B” refers to type III in the nomenclature used by Zhou et al.


The coupling interval determines the time passing between two CFD-DEM data exchanges.

A useful procedure would be: 1) Set the DEM timestep in the file according to the needs of the pure DEM problem. 2) Set the “couplingInterval”, which refers to the DEM timesteps. Depending on the problem you will need to have a close (small couplingInterval) or loose coupling. 3) Choose the CFD timestep in the controlDict. It must be equal to or smaller than the coupling time, otherwise you will get the error: “Error - TS bigger than coupling interval!”.

Example: DEMts=0.00001s, couplingInterval=10 exchange data (=couple) will happen every 0.0001s.

“liggghtsCommands” dictionary


In the “liggghtsCommands” dictionary LIGGGHTS(R) commands being executed during a coupled CFD-DEM simulation are specified.

Location: $caseDir/CFD/constant


The dictionary is divided into two parts, first a list of “liggghtsCommandModels” is defined, then the settings for each model must be specified.


Reasonable example settings for the “liggghtsCommands” dictionary are given in the tutorial cases.


This section lists all CFDEMcoupling sub-models and solvers alphabetically, with a separate listing below of styles within certain commands.

IOModel IOModel_basicIO
IOModel_noIO IOModel_sophIO
IOModel_trackIO averagingModel
averagingModel_dense averagingModel_dilute
cfdemSolverIB cfdemSolverPiso
cfdemSolverPisoSTM cfdemSolverPisoScalar
clockModel clockModel_noClock
clockModel_standardClock couple/cfd
couple/cfd/force couple/cfd/force/implicit
dataExchangeModel dataExchangeModel_noDataExchange
dataExchangeModel_oneWayVTK dataExchangeModel_twoWayFiles
dataExchangeModel_twoWayMPI forceModel
forceModel_Archimedes forceModel_ArchimedesIB
forceModel_DiFeliceDrag forceModel_GidaspowDrag
forceModel_KochHillDrag forceModel_LaEuScalarTemp
forceModel_MeiLift forceModel_SchillerNaumannDrag
forceModel_ShirgaonkarIB forceModel_checkCouplingInterval
forceModel_fieldStore forceModel_fieldTimeAverage
forceModel_gradPForce forceModel_noDrag
forceModel_particleCellVolume forceModel_particleVolume
forceModel_scalarGeneralExchange forceModel_virtualMassForce
forceModel_viscForce forceModel_volWeightedAverage
forceSubModel forceSubModel_ImEx
liggghtsCommandModel liggghtsCommandModel_execute
liggghtsCommandModel_readLiggghtsData liggghtsCommandModel_runLiggghts
liggghtsCommandModel_setDEMGravity liggghtsCommandModel_writeLiggghts
locateModel locateModel_engineSearch
locateModel_engineSearchIB locateModel_standardSearch
meshMotionModel meshMotionModel_noMeshMotion
momCoupleModel momCoupleModel_explicitCouple
momCoupleModel_implicitCouple momCoupleModel_noCouple
probeModel probeModel_noProbe
probeModel_particleProbe regionModel
regionModel_allRegion scalarTransportModel
scalarTransportModel_generalManual smoothingModel
smoothingModel_constDiffSmoothing smoothingModel_noSmoothing
voidfractionModel voidfractionModel_GaussVoidFraction
voidfractionModel_IBVoidFraction voidfractionModel_bigParticleVoidFraction
voidfractionModel_centreVoidFraction voidfractionModel_dividedVoidFraction
voidfractionModel_noVoidFractionVoidFraction voidfractionModel_trilinearVoidFraction