Microflow 3D project
The Microflow project was started at the beginning of the year 2011 as a part of LAB-CHIP project. It was partially financed by the Polish National Science Center (N N501 042140) till the year 2014 and European Operational Program: Digital Poland (POPC.02.03.01-00-0010 / 16-00) till the year 2019. Now we decide to separate these projects and open the source code. It is a general-purpose CFD solver of the Lattice-Boltzmann method that is written in an easy, C-stylish C++ notation with special attention to microflows and microfluidic system simulation. It is a scientific code with a simple, straightforward structure. The CPU version of code is optimized for clearance of code without special optimizations (but not with the care) for computational performance. The code is not templated (with a small exception to parts that use templated external libraries) and simply parallelized with OpenMP. The interfaces between code parts (pre-processing, MF Database, MF solver, and post-processing) are clearly defined, so the code could be simply and quickly analyzed, extended, modified, tested, and optimized. The pre-processing part handles the sparse computational domain with help of OpenVDB library, within a B-tree-like structure, but the post-processing part uses the VTK library for writing structured data for further seamless analysis in Paraview. For performance, MF solver works on its own data structure named MFThread, that is flexible, extensible, and also fast. It is a dense data structure based on standard std::vector<node> array obtained after transformation from sparse one (VDB B-tree-like). Microflow 3D is not a C++ library, so to use it you do not have to know C++ at all. To extend program capabilities you have to possess only base knowledge on C++ programming, physics of fluid mechanics (also CFD), and the Lattice-Boltzmann method. So, the MF framework is a platform for someone who wants to start his own scientific adventure with 3D LBM without fear of spending tons of time on templated code analysis or for someone who is interested in fluid mechanics, especially of microscale systems.
What was the motivation to write Microflow?
Although the LBM method is relatively simple in implementation, its application to simulation of three-dimensional systems requires an environment that provides stimulation parameters, geometry and which allows the visualization of results. Most real cases are characterized by a sparse data structure and large grid sizes, in which efficient processing is a challenge. Although writing a simple LBM solver code takes no more than a few weeks, developing an effective and flexible input and output interface for sparse 3D data structures is a nontrivial problem. Since I did not find a ready tool for performing scientific experiments (robust and simple to analyze) for the LBM method, I decided to prepare my own. LBM is a really exciting CFD tool in his nutshell - try it!
Implemented major software capabilities:
-
- Fully Lagrangian kinetic solver - lattice-Boltzmann method.
- Written in C++ 17 with cmake (potentially multiplatform) - tested only on Linux x_64 platform.
- Optimized for sparse geometries with OpenVDB library (B-tree hierarchical data structure).
- Quasi compressible (gas) and incompressible (liquid) fluid flow models.
- CPU version with multithreading (OpenMP) (GPU version of code is under development).
- Transients Newtonian flows in 3D geometries.
- Fast and automatic cartesian grid generation and boundary set-up by means of readable and flexible config files.
- BGK and MRT collision models.
- Bounce-back, Dirichlet velocity, velocity 0, Neumann pressure, and periodic boundary conditions.
- VTI/VTK input/output and checkpoint files format.
- STL input geometry file format with grid automatic recursive substraction option.
- Propagation realised on propagation table of pointers to neighboring nodes (sweep algorithm).
- Uses only a single probability density distribution function FQ19 for each node.
Software capabilities planned for implementation in the nearest future (under development):
-
- GPU support.
- Multiphase/multicomponent flows and diffusion.
- Heat transfer.
Project contribution
If you are interested in cooperation or partnership you are welcome to send us a short description of your project. We are open on any kind of cooperation in scientific research projects, especially when their subjects are consistent with our scientific interests.
-
- Bugs finding and reporting through our discussion forum.
- Writing documentation.
- Use of Microflow for research and scientific papers (citations are welcome).
- Code validation.
- Testing Microflow 3D on various hardware configurations.
- Contributing source code.
- Building GUI.
- Building packages for various Linux distributions.
- Helping users on the forum.
- Improving website.
- Motivating us to hard work ;)