- CFD, Fluid Flow, FEA, Heat/Mass Transfer
- +91 987-11-19-383
- amod.cfd@gmail.com

Multi-phase Flow in OpenFOAM

Multi-phase flows has wide applications in process, automotive, power generation and metal industries including phenemona like mixing, particle-laden flows, CSTR - Contunuously Stirred Tanks Reactor, Water Gas Shift Reaction (WGSR), fluidized bed, fuel injection in engines, bubble columns, mixer vessels, Lagrangian Particle Tracking (LPT). Some of the general characteristics and categories of multi-phase flow are described below before moving to actual application of OpenFOAM utilities.

Multiphase flow regimes are typically grouped into five categories: gas-liquid (which are naturally immiscible) flows and (immiscible) liquid-liquid flows, gas-solid flows, liquid-solid flows, three or more phase flows. As can be seen, the immiscibility is a important criteria. In a multi-phase flow, one of the phase is usually continuous and the other phase(s) are dispersed in it.
Gas-liquid flows are further grouped into many categories depending upon the distribution and shape of gas parcels. Three such types are described below.

Bubbly Flows: it resensts a flow of discrete gaseous or fluid bubbles in a continuous phase.

Slug Flows: This is characterized by flow of large gas bubbles in liquid.

Annular Flows: Here one of the phase if confined to area near the wall forming an annular section.

Some other types of flows are particle-laden flow such as air carrying dust particles, slurry flow where particles are transported in a liquid, hydrotransport which describes densely-distributed solid particles in a continuous liquid such as cement concrete mix. Gas assisted mixing of solid such as fluidized-bed and settling tank where particles tend to sediment near the bottom of the tank forming thick sludge are some other examples of multi-phase flows.

The two dominant method of multi-phase simulations are listed below.

This page summarizes the multi-phase cases supplied with OpenFOAM 1606+.
Some of the resource from the web are listed below. ** IPR: ** the ownership and copyright of these documents lie with the author mentioned in the document.

- This web page from CHALMERS university is a comprehensive list of article, research report and presentations on OpenFOAM
- This is a wiki page which is an excellent attempt to categorize the documents with ease of search.
- Since this page is intended for multiphase phenomena only, some of the PDF files I read and used to get insight into the available utilities in OpenFOAM are linked below. Note that the documents are still owned by respective authors and is produced here for reference only.

There are around 21 utilities (solvers) in OpenFOAM dealing with multiphase cases. They provide a ready-to-use sample cases for various flow configurations. A basic comparison of few utilities are described in the following table. There seems to be a possibility of combining some of the utilities while keeping overall capabilities same.

Excerpts from "**LPT for erosion modeling in OpenFOAM**: Differences between solidParticle and kinematicParcel, and how to add erosion modeling by Alejandro Lopez" - When dealing with the movement of a group of particles inside a fluid, there are basically two different ways to approach the problem. In the Eulerian-Eulerian models, the particles are treated as a continuous phase and conservation equations are solved for the particulate phase. This method is suitable for large particle concentrations, where two-way coupling between the fluid and the particulate phases as well as particle-particle collisions are important. On the other hand, in the Eulerian-Lagrangian approach, the Eulerian continuum equations are solved for the fluid phase, while Newtonâ€™s equations for motion are solved for the particulate phase in order to determine the trajectories of the particles (or groups of particles).

Thus, if both or all the phases are to be modelled as continuous phases, Eulerian approach is used. When a discrete phase (spatially not continuous) is to be modeled, a Lagrangian frame of reference is used in which spherical particles of pre-defined size distribution is dispersed in the continuous phase (the spherical particles may represent parcels of droplets or bubbles). The fluid phase is modeled as a continuum where time-averaged Navier-Stokes equations are solved to get flow field while the discrete phase is solved by tracking a large number of particles (parcels, bubbles, or droplets) through this calculated flow field. Thus, a Lagrangain approach includes and requires:

- calculation of the discrete phase trajectory for both steady and unsteady flows.
- estimation of the effects of turbulence on the dispersion of particles due to vortices and eddies present in the continuous phase.
- account for heating or cooling of the discrete phase including break-up of droplets in aprasy, vaporization and boiling of such droplets.
- the volume fraction of discrete phase should be < 10% even though mass fraction can be higher due to higher density of solids as compared to liquids. Thus, this method will not be appropriate for fluidized bed where volume fraction of discrete phase is > 50%. Note that twoPhaseEulerFoam should be used in such applications. The Euler-Lagangian solver coalChemistryFoam is not related to fluidized beds.

**DPMFoam**: Discrete Phase Model - This is another multi-phase solver which includes the effect of the discrete phase particulate volume fraction on the continuous phase. This utility is recommended for dense particle flow simulation. Though there is no strict and standard definition of 'dense' particle-laden flow, a volume fraction of 10% or higher is usually considered 'dense'. The solver uses existing functionality for particle clouds and their collisions, which directly resolves particle-particle interactions. Official description is "Transient solver for the coupled transport of a single __kinematic particle cloud__ including the effect of the volume fraction of particles on the continuous phase.".
The term 'cloud' represents the overall presence of all particles, whether they're active or not. Since, this is a transient solver, it is based on PIMPLE algorithm. Turbulence models available in this utility are [a] laminar, [b] k-ε RANS and [c] LES as shown in the header file of the source code.

- Gravity - the well-known force present everywhere!
- Buoyancy - force due to density difference of the particle and continous phase.
- Pressure gradient - the force due to pressure difference along the direction of motion of the particle.
- Intertia: The acceleration or deceleration of the particle in a fluid requires also an accelerating or decelerating of a fluid surrounding the particle (important for liquid-particle flows).
- Slip-shear lift force: particles moving in a shear layer experience a transverse lift force due to the nonuniform relative velocity over the particle and the resulting nonuniform pressure distribution
- Slip-rotation lift force: particles, which are freely rotating in a flow, may also experience a lift force due to their rotation (Magnus force and/or Saffman force)
- Thermophoretic force: a thermal force moves fine particles in the direction of negative temperature gradients (important for gas-particle flows)
- The solidParticleCloud class in OpenFOAM is a class that calculates the movement of particles.

Here subscript 'p' denotes 'particle'. Various empirical correlations of drag laws for viscous forces over solid particles are:

**MPPICFoam (MultiPhase Particle-In-Cell method):**This is a "Lagrangian solver" having LPT (Lagrangian Particle Tracking) capabilities and can be used for modelling particles in continuum. This method simulates solid phase as parcels and is used to represent **collisions without resolving particle-particle interactions**. *This solver is identical to DPMFoam, but without the collisions between particles.*. Quote from a post by Bruno Santos on cfd-online.com: ||The solvers DPMFoam and MPPICFoam are virtually identical, except that the first one uses "basicKinematicCollidingCloud" as the base cloud type and the second one uses "basicKinematicMPPICCloud"||

Phase-coupling mechanisms strongly influences the behavior of the continous and dispersed phase. There are 3 different types of couplings present in particle-laden fluid flows.

- One-way coupling: fluid → particles - this is appropriate only with very dilute concentration (< 0.0001% volume fraction) of particles and has no significant effect on turbulence. The flow field is calculated assuming no presence of particle (that is before the particles is injected into the flow) and tracked as they injected into the flow. The particles does not interact with any other particles during its track throughout the flow domain.
- Two-way coupling: fluid ↔ particles - this coupling becomes important when the volume fraction of particles are in the range 0.0001% - 0.10% and affects both dissipation and production of TKE. The flow of fluid is necessarily solved along with the movement for Lagrangian particles.
- Four-way coupling: fluid ↔ particles + particle collisions: the particle - particle interaction becomes important if voume fraction of particles are > 0.10%.
- The particles are assumed to be rigid, spherical and are thus described by diameter, density, coefficient of restitution (rebound properties) and coefficient of friction (tangential drag during collision). Hence, collisions between particles are modeled using keywords identifying properties of spring, friction slider and dash-pot in appropriate dictionaries.

**Lagangian >> MPPICFoam >> injectionChannel** - The computational geometry and animation of particle tracks in a mixing phenomena of two streams of particle-laden gas is described below.

In addition to the methods outlined earlier to post-process particle tracks, the "Block Extract" features can be directly applied on the kinematicCloud to extract the particles as shown below. This can be done at each time step or the final time step of the simulation.

For particle tracking in ParaView, [a] either the utility particleTracks can be used or [b] convert the case to VTK format using foamToVTK utility. Copy the particleTrackProperties dictionary into the /constant directory and execute the utility: particleTracks. This will generate necessary files to visualize the particle trajectories in ParaView. The location of the file particleTrackProperties is:

$FOAM_UTILITIES/postProcessing/lagrangian/particleTracks/particleTrackProperties

Both the particleTracks and foamToVTK utility will create a folder named VTK in the case directory which will have futher sub-level folders. The folder VTK/lagrangian/kinematicCloud will contain a file kinematicCloud_TTT.vtk files where TTT is the time step. For particle tracking visualization, one needs to open this file. Then, use Glyph utility to visualize the tracks - with various Gyph type options [Sphere, arrow, cone, box...] available.

The particles coloured by velocity magnitude plotted using VTK files are shown below.

**Lagangian >> simpleReactingParcelFoam >> verticalChannel **: a steady state Lagrangian - Eulerian solver for chemical reaction, combustion and particle clouds.

Two-phase flows are often broadly categorised by the physical states of the constituent components and by the topology of the interfaces. Thus, a two-phase flow can be classified as gas-solid, gas-liquid, solid-liquid and liquid-liquid in the case of two immiscible liquids . Similarly, a flow can be broadly classfied topologically as separated, dispersed or transitional.

Description as per source code interFoam.c: *Solver for 2 incompressible, isothermal immiscible fluids using a VOF (volume of fluid) phase-fraction based interface capturing approach. The momentum and other fluid properties are of the "mixture" and a single momentum equation is solved. Turbulence modelling is generic, i.e. laminar, RAS or LES may be selected. * For two-fluid approach see twoPhaseEulerFoam.

The following video is an attempt to model air entrainment using multiphase flow. In the left video, you may notice how spherical bubbles are formed due air entrained by water stream entering into the bottle. The interface of the air bubble and water is sharp. This feature is not as prominent in the simulation primarily due to corse mesh. Capturing a sharp interface between gas and liquid will require a very fine mesh. Some improvements planned are:

- Make the domain shape and size identical: as of now they are in 2:1 ratio to keep the number of mesh counts low.
- Match the boundary conditions such as velocity and its profile at inlet, turbulence parameters at inlet.

**multiPhase >> interFoam >> ras >> angledDuct** - Flow of water in an empty angled duct: immiscible two phase flow - there are 3 three implementation with LAMINAR, LES and RAS turbulence as tutorial cases. One of the tutorial with RAS implementation is shown below where water enters into the inlet and fills the duct as it moves towards the outlet.

Volume fraction at t = 0:

The animation of change in water volume fraction with time can be downloaded from here.

Geometry and boundary condition:

Volume fraction of water at t = 0:

The settings of tutorial with official version is as follows:

Geometry and Volume fraction of water at t = 0:

Specification of miscible and immiscible phases:

Volume fraction of miscible phases after 2 [s]:

Basic Mesh: Level-0

Mesh with level-3 refinement near throat

Close-up view of final mesh near throat

This is an Eulerian-Eulerian solver for two (including compressible) fluid phases where one phase is continuous say water and the other phase is dispersed say gas bubbles or solid particles. It may or may not involve heat transfer. Fluidised bed simulations can be performed using this solver. Note that the flow of solids (the particle bed is bubbling) is being modeled here though it is gas assisted and not the granular flow of solid by its own weight.

For two phase flows involving fluids, the thermophysicalProperties are specified by adding suffix after the dictionary 'thermophysicalProperties' such as thermophysicalProperties.air, thermophysicalProperties.water. Special variables for this solver:

- Theta.particles: Granular temperature of solids phase
- alpha.air: Volume fraction of air phase
- alpha.particles: Volume fraction of solid phase

Three or more phases, interface capturing capabilities configured to work with LES and not RANS. Phases can be segregated or dispersed. As per source code: "Solver for a system of many compressible fluid phases including heat-transfer". The application to 2D geometry of a mixing vessel is shown below. This is based on Multiple Reference Frame (MRF) method for sliding interfaces - set by dictionary constant/MRFProperties.

The simulation of this categories require following 5 files in 'constant' folder -

- chemistryProperties - required to include chemical reactions when 'chemistry' is switched on (for example refer to tutorial case reactingTwoPhaseEulerFoam >> RAS >> bubbleColumnEvaporatingReacting),
- environmentalProperties - specifies gravity,
- combustionProperties - to activate combustion models such as PaSR / XiFoam,
- thermophysicalProperties - specifies type of mixtures and its properties, gas phase reaction scheme, presence of inert species,
- phaseProperties - this dictionary file is specific to this solver and is used to describe interaction between the phases,
- MRFProperties - in case geometry is dealing with rotating domains such as mixer vessel.

A sample 'phaseProperties' dictionary file with comments as per tutorials, online literatures and information available in approppriate *.C and *H file can be acccessed here.

The computational domain for case reactingTwoPhaseEulerFoam >> RAS >>bubbleColumnEvaporatingReacting is shown below. This case simulates Water Gas Shift Reaction (WGSR)taking place in a bubble column reactor. The reacting fluids are mixture of air and CO as reacting gas and liquid water with dissolved air. The reaction products are CO_{2} and H_{2} along with water vapor. Like in any other Eulerian solver, the flow of phases are modeled with Eulerian-Eulerian approach along with separate species mass fraction transport equations for each species namely CO, H_{2}O, air, CO_{2} and H_{2}. This tutuorial deals with a 3D block with a 0.15 x 0.10 [m^{2}] base and a length of 1 [m]. The reactor is filled with water till half of the overall height and have 0.1% dissolved air. Air (with mass fraction of CO = 0.10) enters from the bottom inlet at 0.1 [m/s]. The system is initially assumed to be at 400 [K]. The overall reaction involved is: 0.93CO + 0.24H_{2}O -> 0.69CO_{2} + H_{2}

This utility deals with multi-phase flow simulation where phases need to be considered compressible. The suffix 'interFoam' suggest that it is based on Volume-Of-Fluid (VOF) approach. The tutorial case multiphase >> compressibleInterFoam >> laminar >> depthCharge2D deals with a large high-temperature (578 [K]) and pressureized (10 [bar]) air bubble trapped under a water column in a closed cavity. This can be considered a simplified version of high intensity detonation inside water. The computational domain is shown below.

As in any VOF simulation with mesh non-optimal mesh refinement, the interface between air and water is not as sharp as observed in real-life examples (refer to the bottle filling animation above). The variation of volume fraction of water (alpha) with time is demonstrated in the following animation. Note how water is raised till upper wall. Also note symmetry during initial stage which gets disturbed once water hits the upper wall and starts falling down. During later stage of simulation, there are zone where the volume fraction of water is in the range 0.5 which is not realistic as water and air are assumed to immiscible and the volume fracion has to be either 0 or 1.

LAMINAR | RANS |

constant/turbulenceProperties file | |

simulationType laminar; | simulationType RAS; RAS { RASModel kEpsilon; turbulence on; printCoeffs on; } |

0/ folder | |

* | Add following file and modify boundary names: epsilon k alphat nut nuTilda |

system/fvScheme | |

divSchemes { div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; div(rhoPhi,U) Gauss upwind; div(rhoPhi,T) Gauss upwind; div(rhoPhi,K) Gauss upwind; div(phi,p) Gauss upwind; div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } |
divSchemes { div(phi,alpha) Gauss vanLeer; div(phirb,alpha) Gauss linear; div(rhoPhi,U) Gauss upwind; div(rhoPhi,T) Gauss upwind; div(rhoPhi,K) Gauss upwind; div(phi,p) Gauss upwind; div(rhoPhi,k) Gauss upwind;
div(rhoPhi,epsilon) Gauss upwind; div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear; } |

system/fvSolution | |

"(T|B).*" { solver smoothSolver; smoother symGaussSeidel; tolerance 1e-08; relTol 0; } |
"(T|k|epsilon|nuTilda|omega|B).*" {solver smoothSolver; smoother symGaussSeidel; tolerance 1e-08; relTol 0; } |

A complete list of tutorial cases related to Lagrangian Particle Tracking (LPT) and multiphase flow is summarized in following tables.

lagrangian | coalChemistryFoam | simplifiedSiwek | |

DPMFoam | Goldschmidt | ||

icoUncoupledKinematicParcelDyMFoam | mixerVesselAMI2D | ||

icoUncoupledKinematicParcelFoam | hopperEmptying | ||

hopperInitialState | |||

MPPICFoam | column | ||

cyclone | |||

Goldschmidt | |||

injectionChannel | |||

reactingParcelFilmFoam | cylinder | ||

hotBoxes | |||

rivuletPanel | |||

splashPanel | |||

reactingParcelFoam | counterFlowFlame2DLTS | ||

filter | |||

parcelInBox | |||

verticalChannel | |||

verticalChannelLTS | |||

simpleReactingParcelFoam | verticalChannel | ||

sprayFoam | aachenBomb | ||

multiphase | cavitatingFoam | LES | throttle |

throttle3D | |||

RAS | throttle | ||

compressibleInterDyMFoam | RAS | sloshingTank2D | |

compressibleInterFoam | laminar | depthCharge2D | |

depthCharge3D | |||

compressibleMultiphaseInterFoam | laminar | damBreak4phase | |

driftFluxFoam | RAS | dahl | |

mixerVessel2D | |||

tank3D | |||

interDyMFoam | laminar | damBreakWithObstacle | |

sloshingCylinder | |||

sloshingTank2D | |||

sloshingTank2D3DoF | |||

sloshingTank3D | |||

sloshingTank3D3DoF | |||

sloshingTank3D6DoF | |||

testTubeMixer | |||

RAS | DTCHull | ||

DTCHullWave | |||

floatingObject | |||

mixerVesselAMI | |||

multiphase | interFoam | laminar | capillaryRise |

damBreak | |||

mixerVessel2D | |||

wave | |||

LES | nozzleFlow2D | ||

RAS | angledDuct | ||

damBreak | |||

damBreakPorousBaffle | |||

DTCHull | |||

waterChannel | |||

weirOverflow | |||

damBreakRAS | |||

interMixingFoam | laminar | damBreak | |

interPhaseChangeDyMFoam | propeller | ||

interPhaseChangeFoam | cavitatingBullet | ||

multiphaseEulerFoam | bubbleColumn | ||

damBreak4phase | |||

damBreak4phaseFine | |||

mixerVessel2D | |||

multiphaseInterDyMFoam | laminar | mixerVesselAMI2D | |

multiphaseInterFoam | laminar | damBreak4phase | |

damBreak4phaseFine | |||

mixerVessel2D | |||

potentialFreeSurfaceDyMFoam | oscillatingBox | ||

potentialFreeSurfaceFoam | oscillatingBox | ||

reactingMultiphaseEulerFoam | laminar | bubbleColumn | |

mixerVessel2D | |||

multiphase | reactingTwoPhaseEulerFoam | laminar | bubbleColumn |

bubbleColumnEvaporating | |||

bubbleColumnEvaporatingDissolving | |||

bubbleColumnIATE | |||

fluidisedBed | |||

injection | |||

mixerVessel2D | |||

steamInjection | |||

LES | bubbleColumn | ||

RAS | bubbleColumn | ||

bubbleColumnEvaporatingReacting | |||

fluidisedBed | |||

LBend | |||

wallBoiling | |||

wallBoilingIATE | |||

twoLiquidMixingFoam | lockExchange | ||

twoPhaseEulerFoam | laminar | bubbleColumn | |

bubbleColumnIATE | |||

fluidisedBed | |||

injection | |||

mixerVessel2D | |||

LES | bubbleColumn | ||

RAS | bubbleColumn | ||

fluidisedBed |

The content on CFDyna.com is being constantly refined and improvised with on-the-job experience, testing, and training. Examples might be simplified to improve insight into the physics and basic understanding. Linked pages, articles, references, and examples are constantly reviewed to reduce errors, but we cannot warrant full correctness of all content.

Copyright © 2017 - All Rights Reserved - CFDyna.com

Template by OS Templates