PoreStore
Start computing with PoreStore¶
Everything you need to understand what PoreStore computes, and to run it from your own code. From a greyscale scan to transport properties, pore sizes and pore structure.
import requests
api = f"{host}/api/v1/teams/{team_id}"
auth = {"Authorization": f"Api-Key {key}"}
job = requests.post(
f"{api}/analysis-jobs/",
headers=auth,
json={
"image_id": image_id,
"analysis_type": "permeability",
"parameters": {
"direction": "x",
"queue_name": "walberla",
"max_iterations": 20000,
},
},
).json()
# … poll the job until its status is "completed", then:
url = f"{api}/analysis-jobs/{job['id']}/result/"
result = requests.get(url, headers=auth).json()
print(result["metrics"]["solution"]["k_m2"])
Operations
Choose what to compute¶
The groups follow the app's Tools catalogue. Every operation page states the equations, boundary conditions and solver settings behind the number it reports.
Multiphase¶
Fluid invasion and transport.
Coming soon Injection Relative Permeability Relative Diffusivity
Networks¶
Pores and connections.
Network Extraction beta Network Validation beta
Coming soon Network Extraction Network Validation
Workflow
From image to result¶
Follow the workflow, or jump to what you need.
1Get started
What PoreStore computes, and the ideas every page relies on.
2Prepare the image
Upload a scan, segment it into pore and solid, and clean it up.
3Analyse
Run an operation, and read exactly which problem it solved.
4Automate
Run the same operations from your own code through the API.
5Look things up
Parameters, the API schema, terms, sources and what changed.
Before you compare numbers
Know which problem was solved¶
Two tools can report the "same" property and disagree, because they define it or set it up differently. Every operation page states PoreStore's choices; these are the ones that most often explain a difference.
Permeability uses periodic lateral faces on every backend. The backends differ in where they impose pressure and how they measure the gradient.
Diffusivity and conductivity use closed lateral faces. \(D_\text{eff}/D_0\) includes porosity, with the tortuosity factor \(\tau\) and the formation factor \(F\) reported alongside; conductivity solves the same problem in the solid.
Pore size has four definitions: the largest sphere that fits, the throat mercury must pass to get in, straight chords, and distance to the wall. One sample gives four different sizes.
Porosity \(\varphi\) counts every pore voxel, isolated pores included, but only connected pores carry flow. Cleaning the image moves it from total towards effective porosity.
A pore network's permeability depends on the shape assumed for its pores and throats. Validation reports the network's values so you can compare them with the image's.
Network Validation → beta
Segmentation sets every number downstream. Otsu, Li and local thresholds can split the same scan differently, and noise left in the binary image counts as pore or solid.
Everything is computed in voxels and converted with the image's current voxel size when you read it, so a corrected voxel size never needs a rerun.