class VoronoiFibers(num_points=None, points=None, fiber_rad=10, resolution=0.01, shape=[1, 1, 1], linear_scale=None, name=None, **kwargs)[source]

Resembles a fibrous paper or mat with straight intersecting fibers.

Two geometries are created: DelaunayGeometry defines the pore space with pores connected by a Delaunay tesselation and VoronoiGeometry defines the fiber space with fibers forming the edges of the Voronoi diagram. The two geometries are complimentary and can be accessed individually via the project associated with this network object.

This class is a subclass of the DelaunayVoronoiDual network, and many of the parameters behave in the exact same way. However, currently a rectangular shape is the only one supported. Additionally, an image is created for calculating size data and two parameters relate to this: fiber_rad and resolution as detailed below.

  • num_points (integer) – The number of random base points to distribute inside the domain. These points will become connected by the Delaunay triangulation. The points will be generated by calling generate_base_points in topotools.

  • points (array_like (num_points x 3)) – A list of coordinates for pre-generated points, typically produced using generate_base_points in topotools. Note that base points should extend beyond the domain so that degenerate Voronoi points can be trimmed. Note: the spherical and cylindrical options cannot be used here.

  • shape (array_like) –

    The size and shape of the domain using for generating and trimming excess points. It’s treated as the outer corner of rectangle [x, y, z] whose opposite corner lies at [0, 0, 0].

    By default, a domain size of [1, 1, 1] is used.

  • fiber_rad (float) – fiber radius to apply to Voronoi edges when calculating pore and throat sizes

  • resolution (boolean) – Determines the size of each voxel in the image. Care should be made to appropriately set the resolution based on the fiber_radius and the shape of the domain so as to remain within memory constraints.

  • linear_scale (array_like (len 3)) – This is applied to the domain size before placing the points and then reversed afterwards and has the effect of introducing anisotropy into an otherwise uniformly distributed point distribution. By default no scaling is applied. Applying [1, 1, 2] will stretch the domain by a factor of 2 in the z-direction and this will have the affect of aligning fibers in the x and y directions once scaling is reversed.


This approach to modeling fibrous materials was first presented by Thompson [1] for simulating fluid imbibition in sorbent paper products. Gostick [2], and Tranter et al.[3, 4] have subsequently used it to model electrodes in fuel cells.

[1] K. E. Thompson, AlChE J., 48, 1369 (2002) [2] J. T. Gostick, Journal of the Electrochemical Society 2013, 160, F731. [3] T. G. Tranter et al. Fuel Cells, 2016, 16, 4, 504-515 [4] T. G. Tranter et al. Transport in Porous Media, 2018, 121, 3, 597-620


Points will be automatically generated if none are given:

>>> import openpnm as op
>>> ws = op.Workspace()
>>> ws.clear()
>>> prj = op.materials.VoronoiFibers(num_points=10,
...                                  shape=[1e-4, 1e-4, 1e-4],
...                                  fiber_rad=5e-6,
...                                  resolution=2e-6)