Over the years I have done quite a few things with FOAM and collaborated with a lot of interesting people. This page will hopefully evolve into a comprehensive list of thing I have done and my current research interests.
All of the research presented below has been done using OpenFOAM. As a result, over the last 12 years or so I have implemented big chunks of the code (around 50% on the latest count). The highlights include a-posteriori error estimation, FVM numerics, a Finite Element solver for polyhedral meshes, automatic mesh motion, topological mesh changes, parallelism (domain decomposition), solver technology, and matrix-free solvers.
A majority of my work in numerics has been related to the Finite Volume method. Things that occupy my mind at the moment can be divided into four groups. Papers on some of the subjects below are listed on the Publications page.
Doing modelling and model implementation is always a lot of fun - for a few weeks you can forget about matrix forms and mess about with different terms and equation coupling. Some of the most impressive models I have done so far:
|
Fluid-structure interaction in a single software implementation
Using the fact that OpenFOAM capabilities cover both the
fluids and structural analysis, it is natural and easy
to assemble fluid-structure interaction solvers. For
further convenience, OpenFOAM also contains complete
volume and surface coupling tools in serial execution
and on parallel computers, without involving external
solvers. Moreover, the
automatic mesh motion solver
is used to compute the deformation of the fluid mesh
based on the boundary motion obtained by interpolation form the
structure side. |
|
Heat and mass transfer in drying of cement-bonded castables
A collaborative project with Universita degli Studi di Trieste, a German industrial sponsor and Wikki Ltd. on modelling of cement castables. The equation set is similar to the biscuit baking model and includes mass conservation of liquid water, water vapour and air, energy equation and a set of chemical reactions following the release of chemically bonded liquid water. |
|
Droplet-wall interaction
Some of the most recent work involves a set of free surface capturing simulations of normal and angled droplet impact into a wall. A parametric study is still under way, including cases with the presence of the wall film. A set of experimental data under consideration has been kindly provided by prof. Tropea's research group an the Technical University Darmstadt, together with some analytical solutions. Droplet sizes vary from 2 mm to 50 microns in diameter. |
|
Ship tank sloshing
Sloshing in tanks of Liquid Natural Gas (LNG) marine tankers is an interesting and important engineering problem. Challenges include capturing of free surface and forces on the tank shell, implementation of excitation bu the motion of the ship on high seas, effects of shifting centre of gravity of the ship due to sloshing etc. The model includes handling of the free surface in the RANS turbulence modelling through a modified version of the k-epsilon model. |
|
Free surface flows
I have been involved in free surface modelling work, both using surface capturing and surface tracking. This usually produces the nicest CFD animations! The two approaches are surface tracking, where the position of a free surface is tracked in a mesh covering both phases by solving an equation for a scalar ("volume-of-fluid"); and surface capturing, where the interface is meshed and then moved and deformed as a part of the solution. The real challenge in both approaches is the simultaneous handling of topological changes (interface break-up) and high surface tension. |
|
Finite volume stress analysis
The point of using the FVM in stress analysis is to attack complex non-linear systems and solid-fluid interaction using consistent numerics. So far, I have been involved only with relatively simple non-linear cases (contact, non-linear materials, but I'm hoping to extend this work in the future (large deformations, arbitrary crack propagation etc. OpenFOAM provides surface detection algorithms (useful for lots of things) and implements a contact stress code. Looks like fun, it is pretty intuitive and makes for nice pictures. I would really like to extend its capabilities some time. |
|
Polar ice dynamics
The ice is forced by the wind and sea currents and several other things (Coriolis force, mean geostrophic surface angle etc.). Its thickness changes through melting and growth, governed by thermodynamics. As the ice sheet is only about 2-3 meters thick (on average), it can be treated as a 2-D continuum. Its strength is also relatively low, so it cracks, ridges and opens leads of open water. Currently, this kind of thing is modelled as a highly non-linear viscous-plastic continuum. The numerics implemented in OpenFOAM combines the Weller-Jasak FV stress analysis algorithm with the supersonic pressure-strength formulation and is pretty nice! Thanks, Jenny! |
|
Reynolds-averaged turbulence modelling
I have also done a lot of "standard turbulence model"
implementation.
OpenFOAM
currently has at least a dozen RANS models and about as
many LES models - this is just a proof of how easy it is
to implement them and tell nothing about how good they
actually are The basics are well known and OpenFOAM has been widely used, with excellent results. It is very important to have good numerics and a very efficient code; a big computer also helps! Latest work of Eugene de Villiers et al seems to open the door for a wider use of LES in free surface flow modelling, which looks very interesting indeed. |
|
Biscuit baking model.
Implemented for a commercial client: describes the heat and mass transfer inside the dough, evaporation of water, transport of air and vapour through the dough, formation of a crust and rising of the biscuit. This is a good example of what OpenFOAM can do: a completely new set of equations describing a phenomenon I know very little about and we can still put together a custom application for the purpose. |
|
Convection discretisation The game is quite simple to define but difficult to resolve: convect a prescribed profile through the domain given an arbitrary velocity field while causing no violation of bounds and minimum distortion of the profile. It is easily seen that no standard (primitive) differencing scheme solves the problem, and that the solution requires non-linearity even though the problem is linear. A whole theory of TVD, NVD, reconstruction etc. has been developed, but, to my taste, the problem remains. My attempt is the Gamma differencing scheme, the simplest solution I could come up with that still preserves boundedness and behaves in a predictable manner. |
|
Bounded discretisation of the Laplacian operator An interesting issue in the FV discretisation is the problem with the boundedness of discretised Laplacian on bad meshes. Here, the non-orthogonal contribution violates the bounds; there are several fixes to the problem but no guarantees. It would be nice and should be possible to formulate an unconditionally bounded formulation which is more than first-order accurate irrespective of the mesh. |
|
FVM versus FEM
A big interest for me here is the consequence of using FV-type discretisation on coupled and non-linear problems typically tackled by the FEM. The big benefit and possible algorithmic improvements may come from the use of segregation and "making it work" instead of going for block solution and direct solvers before all other avenues have been explored. In order to move my FV meshes well, I had to write a FEM solver for arbitrarily unstructured meshes. It is second order, segregated and works quite well. Some FEM linear stress analysis results are also available. Recently, we have started using the solver in big transient runs for DNS of air-water bubbles. with and without surface tension. |
|
Finite Area Method
The 2-D equivalent of the FVM, designed to allow the solution of transport equations on a curved surface in 3-D. Main applications of this method are surface-based transport problems, like wall films in internal combustion engines and transport of surfactant chemicals on the interface between the two fluids. The work is still ongoing, mainly done by Dr. Zeljko Tukovic, FSB Zagreb, Croatia. The picture shows DNS of a 1 mm air bubble in water (bottom side). The surface of the bubble is coloured by the concentration of surfactant chemicals, which locally modify the surface tension coefficient for the system and are transported by the flow velocity on the interface. |
|
A-posteriori error estimation for the FVM
The subject of my PhD. For the interested people, I recommend having a look at my list of publications. In short, the best error estimate I have made is the Residual Error Estimate. It works be creating the FV equivalent of a residual and has the same dimensionality as the field you are estimating the error on (e.g. m/s for velocity). It is simple and reliable and available in some commercial CFD codes, as well as OpenFOAM. There are several extensions (one providing error bounds and another, formulated on the faces). The error estimate has been extensively used to drive adaptive mesh refinement, with acceptable results. |
|
In-cylinder flow simulation
Addition of topological mesh modifiers, layer addition/removal surfaces and sliding interfaces to OpenFOAM allows me to set up moving mesh problems with topological changes. The one of immediate interest is the simulation of the exhaust and intake stroke in internal combustion engines. The handling and easy setup of valve action should help the users who are keen on performing complete cycle combustion simulations in IC engines. |
|
Automatic mesh motion
This is something I'm quite proud of and it's being used regularly in OpenFOAM. The issue we are trying to tackle are transient solutions in domains with moving boundaries, where the boundary motion may be known in advance or be solution-dependent. Therefore, the user should only be required to specify the motion of boundaries and the rest of the mesh should be adjusted automatically. Zeljko and I do this routinely, using a second-order FEM solver on polyhedral cells, it's great fun and produces interesting pictures. The next question is how far we can take it. |
|
Dynamic mesh changes
The dynamic mesh engine in OpenFOAM is described in detail in the Development section. Basically, it provides the functions to add/modify or remove a point, face or a cell. On top of this, one can create mesh modifiers, e.g. sliding interfaces, layer addition, removal, etc. and other complex operations, such as embedded refinement or load balancing. The principle works well and looks promising. I am currently doing in-cylinder meshes with moving valves and hoping that an automatic mesher will make my job much easier in the future (see below). |
|
Automatic polyhedral mesh generation
The story plays out in two levels. Firstly: "take a give mesh and start chewing it to do what you need". I call this the dynamic mesh approach, as from the numerics point of view I want to keep the mesh alive. When this fails (secondly): "make a new mesh, pretend it's the same old one you had before, move the results onto it and carry on with the simulation". A good code should have both, which implies a built-in automatic mesh generator. Optimal cell shape for the FVM. The ongoing discussion on the relative quality of different cell shapes for the FV simulations. It can be shown that for convection-dominated problems, hexahedral cells create lower numerical errors than other shapes. |
|
Error-driven mesh adaptivity
Another part of my PhD work. I have implemented a 3-D adaptive mesh refinement algorithm which allows error-driven refinement and arbitrary coarsening in order to test the behaviour of error estimates and error-driven adaptivity in general. It is a bit limited (enforces 1-irregularity and does not generalise to polyhedral meshes, but it served the purpose. It's ripe for a re-write, probably using the dynamic mesh engine described above. |
|
Iterative solvers: Conjugate Gradient and Algebraic Multigrid
Iterative solvers are the work-horse of FVM numerics; the choice of solver depends very much on your taste. My interest and experience lies mainly in the arena of CG and AMG solvers. An important concern here is parallelisation: if the solver does not work well on massively parallel computers in the domain decomposition mode, you're probably better off looking elsewhere. For Algebraic Multigrid, I am interested in the differences in behaviour between the "agglomerated" and "graph reduction" techniques. A promising area of research would be to see if it is possible to create the correct off-diagonal scaling for the agglomerated solver, but currently there's no time... |
|
Direct multi-frontal solvers, block solvers
So far, this is just something I need to look into, just to fill in the holes in my understanding. The real challenge is to develop a massively parallelisable direct solver or to show that there always exists an efficient segregated solution strategy. My interest here is the relative performance of direct and iterative solvers over a range of mesh sizes, benefits to be gained from "fully converged" solutions in iterative algorithms (if any), architecture of the direct solver and possibility of parallelisation. |
|
Segregation, matrix-free and block solution
For some problems, e.g. beam bending (but only for linear elastic materials and small deformations), the segregated FVM has proven to be very inefficient and the block solution is known to work. My interest here is to tackle the linear grad - grad transpose problem with a block solution strategy and to evaluate the relative performance of iterative and direct solvers. In the past, I have done some work on matrix-free methods, but the results were disappointing. The solver I have tried was the matrix-free version of Conjugate Gradient with no preconditioning, and it behaved as expected: some sort of preconditioning is absolutely essential, which implies that at least a part of the matrix needs to be built. |
Current work-in-progress is related to valve action for internal combustion engine simulations in OpenFOAM, including a combination of automatic mesh motion and topological changes. I am hoping to pack up the interface in a way that allows both easy setup and understanding of the details of valve action, with sufficient parameters to adjust the mesh quality (if necessary). At the same time, this is a severe test of topological modifiers in OpenFOAM.
My "next lot of work" in the FVM (I hope) will be all about block solvers, from the actual choice of solver, code organisation, discretisation (grad + grad transpose and p-U coupling) and the dreaded boundary conditions.