Connectivity Analysis¶
Total porosity counts every pore voxel. Transport only uses some of them. Connectivity analysis splits the pore space, and the solid, by how each connected cluster meets the faces of the image: which clusters span the sample, which are open to the outside on one side only, and which are sealed inside. These are the numbers to compare with gas pycnometry (open porosity), with the porosity a flow simulation actually uses, and with what cleaning would remove.
- Measures the connected clusters of pore and of solid, and how each meets the image's faces
- Method connected-component labelling with face connectivity, with PoreSpy
- Reports total, closed, blind and percolating porosity; solid connectivity
- How to run it Connectivity Analysis in the User guide
Definition¶
Pores are grouped into clusters of voxels that share a face (6-connectivity: edge or corner contact doesn't join them). Boundaries are open, with no periodic wrap, and all six faces of the image count as openings. Every fraction is a share of the whole image volume (bulk), so the classes can be compared directly with the total porosity. Closed and blind clusters are found with PoreSpy's closed-pore and surface-pore routines.1
| Class | Definition |
|---|---|
| Total porosity | pore voxels / bulk voxels |
| Closed porosity | voxels in clusters that touch no face of the image |
| Blind / surface porosity | voxels in clusters with exactly one connected opening to the outside. The opening may wrap round an edge or a corner. A cluster whose openings connect only through its interior has more than one, and isn't blind. |
| Percolating porosity along X | voxels in clusters that touch both X faces. The same for Y and Z. |
| Non-percolating porosity along X | all other pore voxels: total minus percolating |
| Percolating clusters along X | number of separate clusters spanning X |
| Any direction | the same three, for clusters spanning at least one axis. A cluster spanning two axes counts once. |
Some consequences of these definitions:
- Closed and blind overlap with non-percolating. Both are non-percolating, but non-percolating also includes clusters that are neither, such as a tunnel with two openings that never spans the sample.
- Dead ends inside a spanning cluster count as percolating. Classes are decided per cluster, not per voxel, so a dead-end branch of a spanning cluster is percolating even though no flow passes through it.
- Open porosity in the pycnometry sense, the pore space a gas can reach, is total minus closed.
- Which faces you cut matters. A cluster that's closed in the full core may be blind or percolating in a cropped image, because cropping creates new openings.
Solid phase¶
The same analysis runs on the solid phase in every job:
| Measure | Definition |
|---|---|
| Solid volume fraction | solid voxels / bulk |
| Floating solid (no boundary contact) | solid in clusters touching no face: inclusions with no connection to the frame |
| Solid with one connected boundary contact | solid in clusters with one connected boundary contact, the same rule as blind pores |
| Solid clusters | number of separate solid clusters |
| All solid connected | Yes if the solid is one cluster, No if several, and No solid voxels if there's no solid |
| Largest solid cluster | the largest solid cluster / bulk |
| Solid outside the largest cluster | all other solid / bulk |
| Solid percolation | percolating and non-percolating solid fractions and cluster counts along X, Y, Z and any direction, as for pores |
"Floating" and "connected" are different questions. One inclusion inside a pore is floating but leaves the solid all connected. Two slabs that both reach the faces aren't floating, yet the solid isn't all connected. Touching a face of a cropped image says nothing about mechanical support in the real sample.
Identities the result satisfies¶
These hold by construction, so they're a quick check on a downloaded result:
- Percolating + non-percolating equals the phase fraction, along every axis.
- Pore fraction + solid fraction equals 1.
- Largest solid cluster + the rest equals the solid fraction.
Every fraction is dimensionless, and nothing depends on the voxel size.
Reading the result¶
- Cleaning removes non-spanning pore clusters and floating solid. This analysis tells you how much each would remove.
- Permeability and diffusivity count every pore voxel in the porosity they report, but only percolating clusters carry flux.
References¶
-
J. T. Gostick et al., "PoreSpy: A Python toolkit for quantitative analysis of porous media images," Journal of Open Source Software 4 (2019) 1296. doi:10.21105/joss.01296 ↩