Skip to content

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.

Quickstart Get an API key API reference

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"])
curl -X POST "$HOST/api/v1/teams/$TEAM_ID/analysis-jobs/" \
  -H "Authorization: Api-Key $KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "image_id": "'"$IMAGE_ID"'",
    "analysis_type": "permeability",
    "parameters": {
      "direction": "x",
      "queue_name": "walberla",
      "max_iterations": 20000
    }
  }'

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.

threshold greyscale scan pore and solid

Segmentation

Remove noise and separate phases.

Coming soon Noise Filtering

trim, clean floating solid in the box trimmed and cleaned

Preparation

Image preparation.

Δp L flow Q

Transport

Movement through pores.

r50 r pore radius

Structure

Pores, grains and interfaces.

Coming soon Grain Size Interfacial Surface Area

chords ℓ chord length

Statistics

Distributions and profiles.

mercury enters from every face Pc Snwp

Multiphase

Fluid invasion and transport.

Coming soon Injection Relative Permeability Relative Diffusivity

φ whole sample s region size

REV

Sample-size effects.

Coming soon REV Diffusivity REV Permeability

pore throat

Networks

Pores and connections.

Coming soon Network Extraction Network Validation

cut plane SEM View X-Ray View along z

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.

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.

Permeability →

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.

Diffusivity →

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.

Pore Size →

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.

Image Cleaning →

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.

Segmentation →

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.

Units →