• No results found

Numerical Solution Methods

CHAPTER 3 METHODOLOGY

3.7 Numerical Solution Methods

3.7.1 Large Eddy Simulation Numerical Solver

The filtered governing equations and the SGS closure model were solved using the LES- BOFFIN (Boundary Fitted Flow Integrator) code (Jones et al., 2002). The flow solver implements a boundary conforming general curvilinear coordinate system with a co- located variable storage arrangement that is based on a fully implicit low Mach number formulation and is second order accurate in space and time. For the momentum equation convection expressions, an energy-conserving discretisation scheme is applied. Every other spatial derivative is approximated by a standard second-order central difference. Time derivatives are approximated by a three-point backward difference scheme with a variable time step to ensure that the maximum Courant number, based on the filtered velocity, always lies between 0.1 and 0.3 (Di Mare and Jones, 2003) as this is required for the maintenance of high accuracy (Choi and Moin, 1994). A two-step, second-order, time- accurate approximate factorisation method is used to determine the pressure and ensure mass conservation in conjunction with a Rhie and Chow (1983) pressure smoothing technique to prevent even-odd node uncoupling of the pressure and velocity fields. The system of algebraic equations resulting from the discretisation is solved using the matrix preconditioned conjugate gradient method BI-CGSTAB (Delnoij et al., 1999) for the matrix of velocity vectors, and ICCG (Descamps et al., 2008) for the pressure.

More information on the numerical algorithm and how it is implemented can be found in Jones et al. (2002) and references cited therein. In order to generate the flow conditions described in this study, it became necessary to modify the existing LES-BOFFIN code. The main modification was ensuring that the mean flow pressure gradient was constant throughout the simulations and adjusted dynamically to maintain a stable mass flux through the flow geometry in each case, as discussed earlier in section 3.2.4.

The solution of fluid dynamic problems in any CFD code involves three steps: pre- processing, solution and post-processing. These are briefly introduced below:

93

• Pre-processing – The user specifies the problem by assigning all the necessary information. This includes the geometry of the computational domain, from which a suitable volumetric computational mesh is generated, and the properties of the computational grid, number of phases, properties of materials, physical and chemical phenomena involved, transport and constitutive equations, time step, numerical schemes and the initial and boundary conditions. The stretching functions that can be used to produce the boundary-fitted non-orthogonal block-structured grid, with matching interfaces and collocated variable arrangement, include linear, power, hyperbolic, trigonometric (sine, cosine) and exponential functions. The computational mesh, boundary conditions for the flow geometry and the fluid material properties together create input files to the solver.

• Solution phase – At this stage, the code integrates the differential transport equations over each computational cell, applying the Gauss and Leibnitz theorems to yield a set of integral equations that express conservation laws on a control-volume basis. The code then converts these equations into algebraic equations by using discretization techniques that approximate some terms of the equations (for instance, the accumulation terms) or the values of some variables (for instance, cell-face values of variables used in convective fluxes) with finite differences. Finally, the code solves iteratively the set of algebraic equations and finds the cell-centre values of the flow variables.

• Post-processing phase – The user analyses and interprets the simulated results, generates plots, diagrams and creates snapshots as well as animations by using data management and graphics tools.

In this work, new terms for the bubble-fluid and bubble-bubble interactions were implemented in the code. The programming language required in the BOFFIN code is FORTRAN (Jones et al., 2002). The code was significantly modified since it was previously used for solid particle flows of low mass loadings. Therefore, additional force models, coefficients and closures that are needed for bubbly multiphase flow problems of both low and high mass loadings were implemented, as were algorithms to determine bubble- bubble collisions, coalescence and breakup.

94

This flow solver has been applied extensively in the LES of reacting (Jones et al., 2014) and non-reacting (Bini and Jones, 2008; Njobuenwu and Fairweather, 2015) turbulent flows. Further details of the numerical methods used in BOFFIN are also given in these references.

3.7.2 Lagrangian Bubble Tracker

The bubble tracking algorithm tracks the path of a bubble through the channel by updating its three-dimensional trajectory with time and by computing the bubble velocity from the instantaneous solution of the fluid’s velocity field. The expression obtained through the implementation of the fourth-order Runge-Kutta scheme on Eq. (3.37) is used to determine the bubble position in the flow. In this procedure, Eq. (3.37) is integrated twice in time to determine the bubble position at every time step. The first integration is performed in order to calculate the bubble velocity in the computational space (Faires and Burden, 1994). In order to determine the new position of the bubble, this equation is integrated once more, and performing this efficienlty is crucially important for the overall performance of the code. It functions by determining the bubble position, followed by the interpolation of the fluid flow data at this location, and then integrating the equation of motion. From these steps, the effect of the bubble-wall collisions can also be calculated.

The bubbles were introduced into the flow at the start of a simulation, prior to which the carrier phase had reached a statistically steady state. The bubbles were injected in parcels across the inlet plane of the channel with initial locations uniformly distributed across this plane and with initial velocities set equal to those of the local fluid velocity at each bubble location. Once the fluid velocity at the bubble location had been established, the equation of motion for each bubble was solved using a fourth-order Runge-Kutta scheme for the integration. At the bubble’s position, a trilinear interpolation scheme was utilised to obtain the fluid velocity, 𝑢, the unresolved turbulence kinetic energy, 𝑘𝑠𝑔𝑠, and the fluid rotation, 𝜔. Both the fluid and bubbles were re-introduced back into the flow on exit from the channel, with periodic boundary conditions set in both the streamwise and spanwise directions. The flow was driven using a fixed pressure gradient imposed in the streamwise direction.

95