LBM Examples

Cavitation simulation

This example deals with a multiphase simulation of an LBM fluid under a cavitation condition. There are no boundary conditions imposed. In Mechsys LBM when no boundary conditions are imposed, then periodic boundary conditions are applied by default Therefore there is no Setup function or UserData structure as in the previous example.
                                    int main(int argc, char **argv) try
                                    {
                                        size_t Nproc = 1; 
                                        if (argc==2) Nproc=atoi(argv[1]);
                                        size_t nx = 100;
                                        size_t ny = 100;
                                        size_t nz = 100;
                                        double nu = 1.0/6.0;
                                        double dx = 1.0;
                                        double dt = 1.0;
                                        double Tf = 10000.0;
                                        LBM::Domain Dom(D3Q15, nu, iVec3_t(nx,ny,nz), dx, dt);
                                        Dom.Lat[0].G      = -200.0;
                                        
                                    	for (size_t i=0; i<nx; ++i)
                                    	for (size_t j=0; j<ny; ++j)
                                    	for (size_t k=0; k<nz; ++k)
                                    	{
                                    		
                                    		double rho0 = (200.0 +(1.0*rand())/RAND_MAX)*dx*dx;
                                    		Dom.Lat[0].GetCell(iVec3_t(i,j,k))->Initialize (rho0, OrthoSys::O);
                                    	}
                                    
                                    	// Solve
                                        Dom.Solve(Tf,50.0,NULL,NULL,"bubble",true,Nproc);
                                    }
                                    MECHSYS_CATCH
                                

As can be seeing the example is considerably shorter and simpler than the previous one. One key difference is that it is in 3D and the LBM scheme chosen is D3Q15. Another key difference is the values assigned to the parameter Dom.Lat[0].G of -200. This parameter comes from the way LBM models multiphase fluids. The implementation follows the description of the LBM text book Lattice Boltzmann Modeling An Introduction for Geoscientists Engineers.

To obtain a cavitation, the fluid density has do be distributed randomly across the domain. In this case a random density between 200 and 201 is distributed in each cell:

                                    	for (size_t i=0; i<nx; ++i)
                                    	for (size_t j=0; j<ny; ++j)
                                    	for (size_t k=0; k<nz; ++k)
                                    	{
                                    		
                                    		double rho0 = (200.0 +(1.0*rand())/RAND_MAX)*dx*dx;
                                    		Dom.Lat[0].GetCell(iVec3_t(i,j,k))->Initialize (rho0, OrthoSys::O);
                                    	}
                                

Simulation result

The cavitation phenomenon will happen because the density has neither the gas or liquid phase equilibrium value. The fluid then naturally will produce a free surface separating both phases. To visualize the surface, an isovolume filter should be imposed over the density field in the VisIt software. The result should resemble this video.