Skip to content

grasingerm/lbxflow

Repository files navigation

lbxflow

DOI

Modelling two-dimensional complex flow using the lattice Boltzmann method

lattice Boltzmann method

Lattice Boltzmann method is a computational technique that streams and collides "psuedo particles", or particle frequency distributions, on a lattice to approximate hydrodynamics.

Dependencies

  • Julia language (recently updated for julia 1.x.x)

Julia language

  • PyCall
  • PyPlot
  • HDF5
  • JLD
  • ArgParse
  • ProfileView
  • Roots
  • YAML

Quick Start

Install the both the julia language and python. Note: the install script assumes an Ubuntu environment and that pip is installed.

git clone https://github.com/grasingerm/lbxflow.git
cd lbxflow
julia scripts/install_dependencies.jl
julia lbxflow.jl --help
julia lbxflow.jl -vf example_sims/poiseuille/poiseuille_velocity-profile.yaml

Documentation

An introductory tutorial is available in the doc directory. Currently documentation is sparse, but the source files are all well documented and I am responsive to questions and feedback. Example input files are available in the example_sims directory.

Citations

There is a paper associated with lbxflow. If you found this code useful for your research, please be kind enough to cite it, using the DOI https://doi.org/10.1016/j.compfluid.2018.02.008, or the following BiBTeX entry:

@article{grasinger2018numerical,
    title = {Numerical investigation of the accuracy, stability, and efficiency of lattice Boltzmann methods in simulating non-Newtonian flow},
    author = {Matthew Grasinger and Scott Overacker and John Brigham},
    journal = {Computers & Fluids},
    volume = {166},
    pages = {253-274},
    year = {2018},
    issn = {0045-7930},
    doi = {https://doi.org/10.1016/j.compfluid.2018.02.008}
}

Bugs

Please report all bugs and issues using the github ticketing system.

TODO list

  • add capability for 3D simulations
  • add animations and plots using gnuplot and Gadfly
  • implement free surface flow
  • break collision functions down into forcing method, constitutive eqn, etc.
  • create alt. stream/collide methods using grids of obstacle flags
  • write user documentation
  • parallelize streaming and collision steps, multiscale mapping, and BCs
  • wrap simulation code in a module
  • profile simulation steps to identify bottlenecks
  • write some tests?
  • write mrt collision functions with "hard coded" default inverse transformation matrix
  • verify Newtonian Poiseuille flow
  • debug BCs at inlet/outlet (bounceback, periodic)
  • implement MRT scheme for Bingham plastic flow
  • clean up api
  • make an autosave feature
  • should be able to "catch" from exceptions and/or keyboard interrupt
  • should be able to restart from interrupted model where left off
  • clean up existing BCs / more general BCs
  • develop post processing and animations
  • implement HB-Bingham constitutive model used in Fluent