Jeffrey A. Cunningham
Associate Professor

University of South Florida

Department of Civil and Environmental Engineering

Environmental and Water Resources Engineering (EWRE) Division

4202 E. Fowler Ave., ENB 118

Tampa, FL  33620


Office:     ENC (Engineering Bldg III), room 3215

Phone:     813-974-9540

Fax:        813-974-2957





Research Projects (current)

Project list was last updated on: November 2013

Catalytic treatment of contaminated soil (with Bobby Panczer, MS student)

Transport of reactive contaminants in groundwater (with Dr Itza Mendoza-Sanchez)

Sequestration of CO2 in geologic formations (with Prof Shadab Anwar; Prof Mark Stewart; Prof Maya Trotz; Dr Roland Okwen)

Fate and transport of endocrine-disrupting compounds in the vadose zone (with Dr Won-Seok Kim; Joel Engleson, PhD candidate)

Novel treatment process for swine wastewater (with Prof Sarina Ergas; Adib Amini, Maureen Kinyua, and Veronica Aponte, graduate students)

Recovery of metals from spent batteries (with Ehsan Vahidi, PhD student)

Survey of lead (Pb) contamination in groundwater wells in Madagascar (with Brad Akers, master’s degree student)


Lattice Boltzmann modeling

(revised April 2014) Since 1 October 2013, I have been a visiting scientist at CSIRO in Perth, Australia, while on sabbatical from USF.  During my sabbatical, I have been trying to teach myself lattice Boltzmann modeling (LBM).  LBM is a technique for describing the flow of fluids, including multi-phase fluids, and it is a powerful method for describing flow in complicated geometries – like the pores of a porous medium.  The idea is that pore-scale models of multi-phase flow will be useful for a variety of remediation applications and in models for estimating long-term risk from oil spills.

As I get better at this technique, I will post some results and some codes here.

Flow in a pore with sinusoidally varying pore width:

Main code:       sinusoidal_pore.m

Subroutines:     calc_f_eq.m                      calc_macroscopic_variables_5.m
check_mass_balance.m       stream_2.m
periodic_left_right.m           periodic_top_bottom.m

Example of output/results: A very interesting finding is that when the Reynolds number is high enough, non-turbulent eddies form within the wide cavities of the pore.  At lower Re, no eddies form – flow is “creeping”.  The figures below show streamlines generated by one of my LBM codes (files available above).  These results are a little different from those of Kitanidis and Dykaar (1997, Transport in Porous Media).



Flow through granular porous media:

Main code:       grains.m

Input file:         grains_data_1.dat

Examples of output/results: The code grains.m models the flow of a single fluid through a user-specified porous medium, provided in an input file (like, for example, grains_data_1.dat).  The code computes the velocity field of the fluid through the porous medium.  This code is still based on an assumption of periodic boundary conditions, which are probably the easiest boundary conditions in LBM.



Effects of different boundary conditions:

Lattice Boltzmann models can employ different boundary conditions.  The figures and codes above all employ periodic boundary conditions – flow that exits the domain on the right boundary re-enters on the left.  However, different types of boundaries are possible, and the results of the simulations could differ depending on the boundary conditions selected.  Compare the streamlines in the three figures below, which use three different types of boundaries.

Main codes:      grains.m (periodic boundaries), grains_constant_rho_left_right.m (constant-pressure boundaries), grains_open_right_boundary.m

Subroutines:     periodic_top_bottom_2.m     periodic_left_right.m
constant_rho_left_right.m    constant_rho_left_open_right_6.m



Flow between two parallel plates:

A classic problem in fluid mechanics and engineering is the determination of the velocity profile of a fluid in laminar flow between two parallel plates (of infinite areal extent). 

This type of flow is sometimes called Poiseuille flow, after the scientist Poiseuille (see also Hagen-Poiseuille flow in a circular pipe).  There is an analytical solution to the problem, which means that we can use this problem to “benchmark” the performance of LBM simulations.

Code:              poiseuille_periodic_2.m

Examples of outputs/results: Lattice Boltzmann modeling can predict the correct velocity profile of the fluid, as shown below.  That is not too surprising.  More interesting is an analysis of the error of the LBM simulations.  If we calculate error according to


       then we get the very interesting result that the error is proportional to the number of fluid nodes (N) raised to the power –2.  This is analogous to a finite-difference scheme being second-order accurate, except that LBM is not based on finite differences.  I have not yet figured out why LBM exhibits this behavior, but the pattern is very clear. 



Immiscible displacement of an oil droplet from a granular porous medium:

I created a movie that shows water flushing an oil droplet out of a granular porous medium.  If the movie plays properly, I’ll post the codes that I used to generate it.  First I am just going to try to get the movie to display properly…click on the link below, and see what happens….


OK, that seems to work – at least, it works on my computer, so I hope it works on yours – I will try to get the codes posted soon.


More coming soon, I hope….