← Work 02 / 04
Project 02

Reduced-order neutron transport

A full transport solve is too slow to put inside a design loop. The interesting question is how much of it you can throw away before the answer stops being true.

RoleSole author
ContextQMUL, EMS690U
StackPython, NumPy, SciPy
OutcomeWorking surrogate

The question

Neutron flux in a reactor is governed by the Boltzmann transport equation — seven independent variables, integro-differential, and unforgiving. Solving it properly takes minutes per configuration. Anyone doing design exploration or sensitivity analysis needs thousands of configurations, so the honest solver is exactly the wrong tool for the job it most needs to do.

The standard escape is a reduced-order model. What I wanted to know was where the reduction stops being trustworthy, and whether a learned surrogate could go further than a linear basis without quietly inventing physics.

How it was built

  • Full-order solver — finite-element spatial discretisation with discrete-ordinates (Sn) treatment of the angular variable, verified against analytical benchmarks before anything was built on top of it.
  • Snapshot generation — the solver run across a sampled parameter space to produce the training set the reduction would live or die by.
  • Linear reduction — proper orthogonal decomposition via SVD, with the retained mode count chosen from the singular value spectrum rather than picked to make the result look good.
  • Learned surrogate — a network mapping parameters directly to POD coefficients, so the physics stays in the basis and only the coordinate mapping is learned.
  • Sensitivity analysis — the actual application, and the thing that made the speedup worth having rather than merely impressive.

What came out of it

Solve time dropped from minutes to milliseconds, which is the boring part of the result. The useful part was the error structure: reduced models degrade unevenly, and they degrade worst exactly where the parameter space is most interesting. Knowing the shape of that failure is what makes a surrogate safe to use.

What I'd do differently

The snapshot sampling was uniform over the parameter space, which spends most of the computational budget in regions the model already handles well. Greedy or error-driven sampling would have reached the same accuracy on a fraction of the full-order runs.