Conductivity¶
The relative conductivity of the solid phase, \(\sigma_\text{eff}/\sigma_s\), measures how well the solid skeleton conducts heat or electric current, compared with a block of the same solid with no pores. It's the diffusivity calculation run on the solid instead of the pores.
- Solves Laplace's equation for the potential in the solid, with insulating pores
- Backends Tortuosity.jl (default) and TauFactor, on GPU
- Reports \(\sigma_\text{eff}/\sigma_s\), the solid volume fraction \(\varphi_s\) and the solid tortuosity factor \(\tau_s\), with the potential field
- How to run it Conductivity in the User guide
The problem being solved¶
With a uniform, isotropic solid conductivity \(\sigma_s\) and insulating pores, the steady potential \(\psi\) (temperature or voltage) satisfies Laplace's equation in the solid phase \(\Omega_s\):
| Boundary | Condition |
|---|---|
| Inlet face (low index) | \(\psi = 1\) |
| Outlet face (high index) | \(\psi = 0\) |
| Lateral faces | no flux, \(\partial\psi/\partial n = 0\) |
| Solid–pore surfaces | no flux: the pores insulate |
It's exactly the diffusivity problem with the phases swapped. It runs directly on your segmented image: PoreStore takes the solid as the conducting phase and passes it to the same solver, with the same discretisation, boundary placement, convergence tests and accuracy target. The stored image isn't changed, and there's no solid-phase copy to prepare.
From the flux through the sample, normalised by the whole cross-section:
where \(\varphi\) is the porosity, \(\varphi_s\) the solid volume fraction and \(\tau_s\) the solid tortuosity factor. Like \(D_\text{eff}/D_0\), the ratio already includes the volume fraction: it's the bulk property to use in a continuum model. Its reciprocal, \(\sigma_s/\sigma_\text{eff}\), is the solid-phase analogue of a formation factor.
PoreStore doesn't know \(\sigma_s\), so it reports the ratio. To get a physical conductivity, multiply the reported ratio by the intrinsic conductivity of your solid. Everything is dimensionless, so the voxel size doesn't affect the result.
The backends¶
Both backends are the diffusivity backends, with the same settings and the same convergence tests. See the diffusivity backends for how Tortuosity.jl and TauFactor12 discretise the problem, where each puts the fixed values, and how each converges.
| Tortuosity.jl | TauFactor | |
|---|---|---|
| Discretisation | Cell-centred finite volume, 7-point stencil | Cell-centred finite difference, 6-neighbour stencil |
| Fixed potentials | Centres of the first and last voxel planes, \(L = N - 1\) | Outer faces of the image, \(L = N\) |
| Settings | Target accuracy \(\delta_J\), Solver tolerance \(\delta_c\) | Target accuracy \(\delta_J\), Maximum iterations \(n_\text{max}\) |
| Missed target | Completes with the accuracy it reached | Fails |
The Target accuracy is the relative error you accept in \(\sigma_\text{eff}/\sigma_s\) and \(\tau_s\), tested as the flux balance error \(r_J\) through the solid.
Assumptions to check¶
- Insulating pores. Fine for an air- or vacuum-filled pore space around a much more conductive solid. For an electrolyte-filled pore space, the pores conduct, and diffusivity on the pore phase is the right analysis.
- Contact resistance is ignored. Solid voxels that share a face conduct perfectly between them. In sintered or packed materials, grain contacts can dominate the real conductivity.
- Floating solid conducts nothing, but counts in \(\varphi_s\), so it raises \(\tau_s\). Connectivity analysis reports how much solid floats.
- No through-path. If no solid path joins inlet to outlet, the job is refused before its solver starts, by the same check as diffusivity applied to the solid, with solid voxels connected only through shared faces. When the check can't finish, the solver runs without it and, with no through-path, reports the ratio and \(\tau_s\) as 0.
Accuracy and convergence¶
As for diffusivity: Tortuosity.jl completes with the accuracy it reached once its extra solving runs out, and TauFactor fails if it hasn't converged after \(n_\text{max}\) iterations. The flux balance error in the result is the accuracy you got. See Accuracy and convergence.
Reading the result¶
- Headline. The relative conductivity \(\sigma_\text{eff}/\sigma_s\), with the solid volume fraction and the solid tortuosity factor beside it. There's no formation factor row.
- Solid columns give \(\tau_s = 1\). Straight solid running along the conduction axis gives 1. Anything that lengthens or narrows the solid paths, or adds solid that carries no flux, raises \(\tau_s\).
- The potential field lives in the solid: 1 at the inlet face, 0 at the outlet face, with the pores masked. A steep drop across a few planes marks a bottleneck in the solid network.
x. The sample was run through PoreStore's own solver code with the app's suggested settings. Left: the potential on the middle slice. It lives in the solid, so here the grey voxels are the pores. Right: its mean over the solid voxels of each plane.References¶
-
S. J. Cooper, A. Bertei, P. R. Shearing, J. A. Kilner, N. P. Brandon, "TauFactor: An open-source application for calculating tortuosity factors from tomographic data," SoftwareX 5 (2016) 203–210. doi:10.1016/j.softx.2016.09.002 ↩
-
S. Kench, I. Squires, S. J. Cooper, "TauFactor 2: A GPU accelerated python tool for microstructural analysis," Journal of Open Source Software 8 (2023) 5358. doi:10.21105/joss.05358 ↩