Professional Documents
Culture Documents
7 4 8
% if ~is_interior_solid_node(j,i)
Initialize density and fs (assuming
zero velocity)
%define initial density and fs
rho=ones(LY,LX);
eq
f a x wa ( x ) 1 3 2
e a u 9 e a u 2
3 u 2
4 2
c 2 c 2c
// Computing macroscopic density, rho, and velocity, u=(ux,uy).
for( j=0; j<LY; j++)
{
for( i=0; i<LX; i++)
{
u_x[j][i] = 0.0;
u_y[j][i] = 0.0;
f
rho[j][i] = 0.0;
if( !is_solid_node[j][i])
{ a
for( a=0; a<9; a++) a
{
rho[j][i] += f[j][i][a];
fe
u_x[j][i] += ex[a]*f[j][i][a];
u_y[j][i] += ey[a]*f[j][i][a];
} a a
u_x[j][i] /= rho[j][i]; u a
}
u_y[j][i] /= rho[j][i];
}
}
Periodic Boundaries
• On boundary,
‘neighboring’ point is
on opposite boundary
ip = ( i<LX-1)?( i+1):( 0 );
in = ( i>0 )?( i-1):( LX-1);
jp = ( j<LY-1)?( j+1):( 0 );
jn = ( j>0 )?( j-1):( LY-1);
where
LHS = (COND)?(TRUE_RHS):(FALSE_RHS);
means
if( COND) { LHS=TRUE_RHS;} else{ LHS=FALSE_RHS;}
// Compute the equilibrium distribution function, feq.
f1=3.;
f2=9./2.;
ea u 9 e a u 3 u 2
2
f3=3./2.;
for( j=0; j<LY; j++) f
a
eq
x w a ( x ) 1 3 2
4
{ c 2 c 2 c2
for( i=0; i<LX; i++)
{
if( !is_solid_node[j][i])
{
rt0 = (4./9. )*rhoij;
rt1 = (1./9. )*rhoij;
rt2 = (1./36.)*rhoij;
ueqxij = uxij; //Can add forcing here; see MATLAB code
ueqyij = uyij;
uxsq = ueqxij * ueqxij;
uysq = ueqyij * ueqyij;
uxuy5 = ueqxij + ueqyij;
uxuy6 = -ueqxij + ueqyij;
uxuy7 = -ueqxij + -ueqyij;
uxuy8 = ueqxij + -ueqyij;
usq = uxsq + uysq;
feqij[0] = rt0*( 1. - f3*usq);
feqij[1] = rt1*( 1. + f1*ueqxij + f2*uxsq - f3*usq);
feqij[2] = rt1*( 1. + f1*ueqyij + f2*uysq - f3*usq);
feqij[3] = rt1*( 1. - f1*ueqxij + f2*uxsq - f3*usq);
feqij[4] = rt1*( 1. - f1*ueqyij + f2*uysq - f3*usq);
feqij[5] = rt2*( 1. + f1*uxuy5 + f2*uxuy5*uxuy5 - f3*usq);
feqij[6] = rt2*( 1. + f1*uxuy6 + f2*uxuy6*uxuy6 - f3*usq);
feqij[7] = rt2*( 1. + f1*uxuy7 + f2*uxuy7*uxuy7 - f3*usq);
feqij[8] = rt2*( 1. + f1*uxuy8 + f2*uxuy8*uxuy8 - f3*usq);
}
}
}
e
f a x wa (x) 1 3 2
eq u 9 e u 2
3 u 2
2
a a
4
c 2 c 2 c
Collide
// Collision step.
for( j=0; j<LY; j++)
for( i=0; i<LX; i++)
if( !is_solid_node[j][i])
for( a=0; a<9; a++)
{
fij[a] = fij[a] + ( fij[a] - feqij[a])/tau;
}
f a x, t t f a x, t
t f a x, t f a
eq
x, t
Bounceback Boundaries
• Bounceback boundaries are particularly simple
• Played a major role in making LBM popular
among modelers interested in simulating fluids
in domains characterized by complex
geometries such as those found in porous media
• Their beauty is that one simply needs to
designate a particular node as a solid obstacle
and no special programming treatment is
required
Two type of solids:
Bounceback
Boundaries
Collision (solid nodes):
Bounceback
// Standard bounceback.
temp = fij[1]; fij[1] = fij[3]; fij[3] = temp;
temp = fij[2]; fij[2] = fij[4]; fij[4] = temp;
temp = fij[5]; fij[5] = fij[7]; fij[7] = temp;
temp = fij[6]; fij[6] = fij[8]; fij[8] = temp;
// Streaming step.
for( j=0; j<LY; j++)
{
jn = (j>0 )?(j-1):(LY-1)
jp = (j<LY-1)?(j+1):(0 )
F
ueqxij = u_x(j,i)+tau*g; %add forcing
u
F
ueq u u u