Skip to content

Heat 3D (heat_3d)

The three-dimensional twin of heat_1d and heat_2d, and the model to reach for when the question is whether an architecture survives a volumetric field at all. The physics holds no surprises; the memory does.

Heat 3D

Four evenly spaced z-slices of u at t = T (heat_3d): the diffused field on the periodic cube.

Equation

\[\frac{\partial u}{\partial t} = \alpha \nabla^2 u\]

on the periodic cube.

Operator learning task

\[u(x, y, z, 0) \mapsto u(x, y, z, T)\]

Parameters

Parameter Default Range Description
diffusivity 0.01 (1e-6, 1.0) Thermal diffusivity \(\alpha\)
time_end 1.0 (0.01, 10.0) Final time \(T\)

Usage

from pdeforge import generate_dataset

dataset = generate_dataset(
    model="heat_3d",
    n_samples=200,
    resolution={"x": 64, "y": 64, "z": 64},
    params={"diffusivity": 0.01, "time_end": 1.0},
    seed=42,
    to="heat3d.h5",     # write straight to disk, chunked
)

Solver

The spectral seam is dimension-agnostic: it runs fftn over however many spatial axes the resolution dict declares, so this is heat_1d's code path with one more axis. Propagation stays exact.

Mind the memory

A single \(64^3\) field in float64 is 2 MB, so inputs and outputs together come to 4 MB per sample: a 1000-sample set is 4 GB in RAM if you ask for it all at once. Pass to= to stream chunks to disk, which is what the chunk_size argument exists for.

Data shapes

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