GAN-PH · SOC ELECTRODE MICROSTRUCTURE GENERATION · UTD

Live Solid Oxide Electrode Simulation

A conditional WGAN-GP learned to satisfy its volume-fraction loss while generating almost no pore phase at all — 47 of 50 structures had zero percolating gas channels. This page reproduces the failure inside a live voxel volume, then shows the differentiable connectivity loss that fixed it. Switch runs, drag the cube, and watch what the gas can — and can't — do.

H₂ enters here ↓gas channel side · z = 0
↑ O²⁻ arrives hereelectrolyte side · z = 35
drag to rotate · scroll / pinch to zoom

View preset

Phase opacity

Cutaway

Simulation

Percolating pore network
None
z = 0 → z = 35 through pore
Active TPB sites
0
of 0 geometric TPB sites
H₂ blocked at surface
0
no pore opening on the gas face
Reactions completed
0
H₂ + O²⁻ → H₂O + 2e⁻ at active TPB
How to read the structure

A solid oxide cell electrode is a three-phase composite. For the cell to produce current, each phase must form an unbroken highway from its own boundary to the reaction site — one missing network and the whole electrode is dead weight.

Ni

Metallic nickel — conducts electrons.
e⁻ reaction site → current collector (z = 0)

YSZ

Yttria-stabilized zirconia — conducts oxygen ions.
O²⁻ electrolyte (z = 35) → reaction site

Pore

Open void — carries fuel in and product out.
H₂ in · H₂O out (z = 0)
Triple-phase boundary (TPB) — the only place a reaction can happen is where all three phases meet at a point. A TPB is active only if its pore connects to the gas channel, its Ni connects to the current collector, and its YSZ connects to the electrolyte. Run A has hundreds of geometric TPB sites — and zero active ones. Try the Pore only preset on Run A to see why.
Why Run A fails

The generator learned to cheat the loss, not the physics

Softmax vs. argmax — the loophole

The generator outputs a per-voxel probability over the three phases, but the actual structure is the per-voxel argmax — winner takes all. The volume-fraction loss was computed on the probabilities.

One generated voxel — and every other voxel, identically
Ni0.40 ✓
YSZ0.30
Pore0.30
VF loss sees 30% pore → satisfied · argmax → Ni wins every voxel → pore collapses to noise

The 30% pore probability kept L_VF happy while contributing nothing to the structure. What survived as pore was a sprinkle of isolated voxels — useless for gas transport. A second bug made it worse: L_SSA was built on a detached tensor, so its gradient never reached the generator at all.

The fix: a connectivity loss the gradient can feel

Connectivity itself (flood fill) isn't differentiable — so L_conn uses two smooth proxies on the pore probabilities:

Isolation penalty

A 3D convolution with a 6-neighbor kernel scores each voxel: pore_prob × (1 − neighbors/6). Lone pore voxels are expensive; connected clusters are cheap — so pore mass migrates into channels.

Face hinge

ReLU(solid − pore + 0.05) on the z = 0 and z = 35 faces. Crucially this stays non-zero even when pore has fully collapsed — it bootstraps pore back into existence at the boundaries, then the isolation penalty grows it inward.

Weighted at w_conn = 50 against the existing 1000·(L_VF + L_SSA), the generator keeps its statistics — and gains a topology.

Measured results — 50 structures per run

From cosmetic statistics to working transport

Similarity to the training distribution is scored with Yu-style S-values via the 4_CNNCT analysis module (connected-component percolation, active-TPB density, transport metrics).

47 / 50 structures
had zero percolating pore network in Run A — gas physically cannot cross the electrode.
60× too low
active TPB density in Run A: 0.009 µm⁻² vs 0.526 µm⁻² in the training data.
Metric (S-value)Run A — baselineRun B — + connectivity
Pore connectivity0.480FAIL0.896OK
Active TPB density0.592FAIL0.863OK
Total TPB density0.610FAIL0.867OK
YSZ connectivity0.773MARGINAL0.889OK
Ni connectivity0.841MARGINAL0.841MARGINAL

S-value thresholds (Yu 2025): ≥ 0.85 OK · 0.70–0.85 Marginal · < 0.70 Fail. Ni is unchanged by design — the face hinge currently targets pore only; extending it to Ni is next.