Skip to content

Stochastic Allen-Cahn 2D (stochastic_allen_cahn_2d)

Phase separation with thermal fluctuations, and the model where the ensemble genuinely branches. Noise nucleates and roughens interfaces, and strong enough noise flips whole domains between the \(\pm 1\) wells. Two realisations from the same initial condition can therefore end up in different macroscopic states, which is a qualitatively different kind of uncertainty from the perturbative spread of the linear models.

Stochastic Allen-Cahn 2D

Two realisations from the same initial condition (stochastic_allen_cahn_2d): the domain pattern is not shared.

Equation

\[du = \left[\varepsilon\,\nabla^2 u + u - u^3\right] dt + \sigma\,dW(t, x, y)\]

on the periodic box.

Operator learning task

\[u_0 \mapsto \{u_T^{(1)}, u_T^{(2)}, \dots\}\]

Parameters

Parameter Default Range Description
epsilon 0.01 (0.001, 0.5) Interface parameter
noise_intensity 0.05 (0.0, 2.0) Noise amplitude \(\sigma\)
n_realizations 10 (1, 1000) Realisations per initial condition
time_end 2.0 (0.05, 100.0) Final time

Usage

from pdeforge import generate_dataset

dataset = generate_dataset(
    model="stochastic_allen_cahn_2d",
    n_samples=100,
    resolution={"x": 64, "y": 64},
    params={"epsilon": 0.01, "noise_intensity": 0.05, "n_realizations": 20},
    seed=42,
)
dataset.outputs.shape   # (100, 20, 64, 64)

Solver

Exponential integrator for the linear part, meaning diffusion together with the linear reaction term, explicit cubic, and Euler-Maruyama noise. At \(\sigma \to 0\) the deterministic phase-separation dynamics is recovered.

Behaviour

The distribution over outcomes is multimodal, and that breaks the usual uncertainty summaries. An ensemble mean taken across realisations that settled into different domain patterns is a blurred field belonging to no member, and a per-point variance reports a large number everywhere the members disagree without saying that they disagree about the pattern rather than the value. Conditional-distribution methods have something real to do here in a way they do not for stochastic_heat_2d.

Noise intensity sets how often branching happens. At the default 0.05 the interfaces roughen but domains rarely flip; raising it towards 0.5 makes flips routine.

Data shapes

dataset.inputs.shape   # (n_samples, ny, nx)
dataset.outputs.shape  # (n_samples, n_realizations, ny, nx)