# Boundary Conditions¶

class LbBoundary(name=None)

Base class that all boundaries should derive from.

Parameters

name – optional name of the boundary.

Return a list of (name, type) tuples for additional data items required in this boundary These data items can either be initialized in separate kernel see additional_data_kernel_init or by Python callbacks - see additional_data_callback

Return a callback function called with a boundary data setter object and returning a dict of data-name to data for each element that should be initialized

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

class NoSlip(name=None)

No-Slip, (half-way) simple bounce back boundary condition, enforcing zero velocity at obstacle. Extended for use with any streaming pattern.

Parameters

name – optional name of the boundary.

class FreeSlip(stencil, normal_direction=None, name=None)

Free-Slip boundary condition, which enforces a zero normal fluid velocity $$u_n = 0$$ but places no restrictions on the tangential fluid velocity $$u_t$$.

Parameters
• stencil – LBM stencil which is used for the simulation

• normal_direction – optional normal direction. If the Free slip boundary is applied to a certain side in the domain it is not necessary to calculate the normal direction since it can be stated for all boundary cells. This reduces the memory space for the index array significantly.

• name – optional name of the boundary.

Used internally only. For the FreeSlip boundary the information of the normal direction for each pdf direction is needed. This information is stored in the index vector.

Return a callback function called with a boundary data setter object and returning a dict of data-name to data for each element that should be initialized

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

class UBB(velocity, adapt_velocity_to_force=False, dim=None, name=None, data_type='double')

Velocity bounce back boundary condition, enforcing specified velocity at obstacle

Parameters
• velocity – can either be a constant, an access into a field, or a callback function. The callback functions gets a numpy record array with members, ‘x’,’y’,’z’, ‘dir’ (direction) and ‘velocity’ which has to be set to the desired velocity of the corresponding link

• adapt_velocity_to_force – adapts the velocity to the correct equilibrium when the lattice Boltzmann method holds a forcing term. If no forcing term is set and adapt_velocity_to_force is set to True it has no effect.

• dim – number of spatial dimensions

• name – optional name of the boundary.

In case of the UBB boundary additional data is a velocity vector. This vector is added to each cell to realize velocity profiles for the inlet.

Initialise additional data of the boundary. For an example see tutorial 02 or lbmpy.geometry.add_pipe_inflow_boundary

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

Returns

list containing LbmWeightInfo and NeighbourOffsetArrays

property velocity_is_callable

Returns True is velocity is callable. This means the velocity should be initialised via a callback function. This is useful if the inflow velocity should have a certain profile for instance

class SimpleExtrapolationOutflow(normal_direction, stencil, name=None)

Simple Outflow boundary condition , equation F.1 (listed below). This boundary condition extrapolates missing populations from the last layer of fluid cells onto the boundary by copying them in the normal direction.

$f_{\overline{1}jkxyzt} = f_{\overline{1}jk(x - \Delta x)yzt}$
Parameters
• normal_direction – direction vector normal to the outflow

• stencil – stencil used by the lattice boltzmann method

• name – optional name of the boundary.

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

Returns

list containing NeighbourOffsetArrays

class ExtrapolationOutflow(normal_direction, lb_method, dt=1, dx=1, name=None, streaming_pattern='pull', zeroth_timestep=Timestep.BOTH, initial_density=None, initial_velocity=None, data_type='double')

Outflow boundary condition , equation F.2, with u neglected (listed below). This boundary condition interpolates populations missing on the boundary in normal direction. For this interpolation, the PDF values of the last time step are used. They are interpolated between fluid cell and boundary cell. To get the PDF values from the last time step an index array is used which stores them.

$f_{\overline{1}jkxyzt} = f_{\overline{1}jk(x - \Delta x)yz(t - \Delta t)} c \theta^{\frac{1}{2}} \frac{\Delta t}{\Delta x} + \left(1 - c \theta^{\frac{1}{2}} \frac{\Delta t}{\Delta x} \right) f_{\overline{1}jk(x - \Delta x)yzt}$
Parameters
• normal_direction – direction vector normal to the outflow

• lb_method – the lattice boltzman method to be used in the simulation

• dt – lattice time step size

• dx – lattice spacing distance

• name – optional name of the boundary.

• streaming_pattern – Streaming pattern to be used in the simulation

• zeroth_timestep – for in-place patterns, whether the initial setup corresponds to an even or odd time step

• initial_density – floating point constant or callback taking spatial coordinates (x, y [,z]) as positional arguments, specifying the initial density on boundary nodes

• initial_velocity – tuple of floating point constants or callback taking spatial coordinates (x, y [,z]) as positional arguments, specifying the initial velocity on boundary nodes

Used internally only. For the ExtrapolationOutflow information of the previous PDF values is needed. This information is stored in the index vector.

Return a callback function called with a boundary data setter object and returning a dict of data-name to data for each element that should be initialized

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

Returns

list containing NeighbourOffsetArrays

class FixedDensity(density, name=None)

Boundary condition that fixes the density/pressure at the obstacle.

Parameters
• density – value of the density which should be set.

• name – optional name of the boundary.

class DiffusionDirichlet(concentration, name=None, data_type='double')

Boundary condition for advection-diffusion problems that fixes the concentration at the obstacle.

Parameters
• concentration – value of the concentration which should be set.

• name – optional name of the boundary.

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

Returns

list containing LbmWeightInfo

class NeumannByCopy(name=None)

Neumann boundary condition which is implemented by coping the PDF values to achieve similar values at the fluid and the boundary node

Return a list of code nodes that will be added in the generated code before the index field loop.

Parameters

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()

Returns

list containing NeighbourOffsetArrays

class StreamInConstant(constant, name=None)

Boundary condition that takes a constant and overrides the boundary PDFs with this value. This is used for debugging mainly.

Parameters
• constant – value which should be set for the PDFs at the boundary cell.

• name – optional name of the boundary.

lb_method – Lattice Boltzmann method. See lbmpy.creationfunctions.create_lb_method()