Mass Conservation: LBM vs. FVM

Hello everyone!

I am new to CFD, LBM and Palabos and in the last few weeks i performed some LBM-3D-Simulations with Palabos. I have some basic questions conserning the mass conservation (and other conserved quatities) in LBM.

My simulations are very simple so far: i have a velocity inlet condition and a pressure/pressure-outlet condition at the outlet. In the simulation domain there are a few obstacles that lead to a non homogenious velocity profile at the outlet. This means that backflow occurs and so far it crashes my whole simulation. It is not possible for me to place the outlet far away from the obstacles because of memory limatation and computing time (grid-refinement in 3D is not yet ready in Palabos 1.5v1 as faras i know).

I read in a lot of papers that LBM does conserve mass and momentum, but how is it possible then that the velocity of the backflow at the outlet becomes much larger than the velocity at any other point of my simulations? In FVM this does not occur, as far as i know because it is a conservative method and the backflow can not simply circumvent the mass conservation.

Could you please explain the difference in mass conservation in FVM and LBM to me? Well, one possible solution for my problem would be to integrate over the whole Boundary and make sure the mass is conserved. Unfortunately this would break the parallelization (as far as i know), and is hence not implemented in Palabos?

I also tried to apply a velocity boundary condition at the outlet, but then the average density is decreasing during the simulation. I think this is because there is no reference density/pressure at any point in the domain then. Since the pressure is part of the solution an will decrease in the direction of flow, lets say in a pipe, the momentum in LBM is also not conserved because of the following:

Let the Area at inlet and outlet be equal, and the Fluid an incompressible one, like water. Then the average velocity at the inlet and outlet should also be the same:

A_in=A_out=A
U_in=U_out=U

Now the density is “the same” as the pressure in LBM. But the pressure will adjust its value during the simulation accorinding to the solution. In a pipe, p_in > p_out is valid and therefore in LBM: rho_in > rho_out. With this the momentum density should not be equal:

rho_in * U != rho_out * U

As far as i can imagine the mass- and momentum conservation is somewhere “hidden” in LB-methods. The density in the simulation and equilibrium distribution function should be rather viewed as the pressure and not the density. I read the paper from Shan et al. with Hermite-Polynomials and the conservation is introduced via moments of the distribution function in the equilibirum distribution function. But f_eq is only a local quantitiy, how can then its conservation laws affect the whole simulation domain?

I also read a lot in this forum and found people having similar problems with backflow from the outlet. The solution i propose is deduced form the “FluidPressureOutlet3D”-BC implemented in Palabos. One part of this BC sets a constant pressure through an additional relaxation towards a new equilibrium distribution function with the constant density f_eq(rho_0). What i did is to copy that part of the code to a new BC-implementation, lets call it NewPressureOutlet3D and apply it one cell-layer before the velocity-BC. Because of the velocity BC no backflow occurs (by definition) and because of NewPressureOutlet3D the density is held constant one cell-layer before the outlet. With this the average density will not increase or decrease permanently in time. The simulations with this combined BC run stable, but the velocity-BC forces the flow in a condition it is not ready yet. If you are not interested in the flow near the outlet boundary, this BC might be an option for you.

To implement NewPressureOutlet3D you just have to copy the code from FluidPressureOutlet3D and delete the part that copies the unknown distributions from neighbouring cells. Then you have to add the names of your new c+±file in the header.h and header.hh files in the boundaryCondition folder.

I hope i could help with this and i also hope to get help from you :slight_smile:

kind regards
papaB