Mapping Irregular Boundaries in 3D

Hi All,

My research requires me to solve problems in irregular domains in both 2D and 3D. For this I am using the D2Q9 and D3Q15 lattices.

The mapping of irregular boundaries can be very fiddly to implement and I was wondering if anyone was aware of any good resources to help me with this. I have done 2D in a reasonably efficient way and am part way through the 3D implementation using ray-cast intersection with the boundary segments. However, the 3D implementation is far from what I would call pretty!

Many thanks,


If I understand right, you wish to implement a “voxelizer”, which converts a surface description of a body (for example in STL format) into a voxel description, which you then can use to instantiate a lattice Boltzmann simulation.

I think that ray-tracing is a common way of doing this. You would probably want to have a look at Fokko Beekhof’s CVMLCPP library[/url] which offers, among other useful things, [url=]a 3D voxelizer based on a ray-tracing technique.

Hi Jonas,

Thank you for your reply. Yes, you are essentially correct. My LBM fluid domains are generally irregular polyhedra with less than 50 surfaces but with combinations of acute, obtuse and reflex angle junctions. This geometry is created by a commercial FEM-DEM code to which I am coupling the LBM, which is why I say I am ‘mapping’ the boundaries rather than just defining them.

I am using the two-stage bounce-back wall boundary with the D3Q15 lattice so I need to define the ‘wall’ nodes as those just outside the fluid domain. With this lattice it is necessary to have the orthogonal neighbour nodes defined as wall nodes and also the third-nearest neighbour nodes (i.e. those at the vertices) defined as wall nodes, otherwise the domain will numerically ‘leak’. For this reason I am not sure if voxelisation will give me exactly what I am after - but it could act as a good basis.

At the moment I am trying to add an ‘inside-outside’ check to my ray-cast to try and define any unclassified wall nodes. It involves coding lots of fiddly geometry but I think I can excuse this because my domain is only mapped once at the start of the solution. A cleverer approach would be nice!