All problems

Discretisation

Can the mesh change under the solution without changing the answer?

If the interesting physics occupies a thin moving region, resolving the whole domain to that standard is waste. Adaptation is close to mandatory here — and every adaptation is an intervention in the solution, with consequences that are easy to miss because they look like physics.

Adaptive refinementConservationParallel algorithmsEstablished

01background mesh02castellate + carve03snap to surface

FigureThe generation path: background mesh, cells carved against the surface, then boundary vertices projected so the mesh conforms.

Why it is hard

Transferring a solution between meshes must conserve what the equations conserve, and must not introduce a direction the physics did not have. Both are easy to violate in ways that produce plausible asymmetries. There is a performance trap too: adaptation is traditionally orchestrated on the host while the solver runs elsewhere, so the mesh changes exactly where the machine is least able to help.

How we attack it

Express the whole chain — flagging, buffering, level balancing, subdivision, connectivity, transfer, repartitioning — in the same data-parallel primitives as the solver, by addressing cells with space-filling-curve keys so the tree becomes a sorted array. Sorts, scans and scatters replace traversal. Then assert the invariants continuously: closure and positivity on every adaptation, plus controlled tests whose exact answer is known in advance, so an induced asymmetry has nowhere to hide.

What we have established

  • The full chain de-serialises, with deterministic connectivity, so results reproduce run to run.
  • Conservation across an adaptation holds to the limits of floating-point arithmetic, verified every cycle rather than asserted.
  • It works on genuinely unstructured industrial meshes — which took three fixes no structured test suite would expose.