Neural Surface Potentials for Fast Flow Approximation

A learned surrogate for the boundary-integral solve of exterior potential flow
Preprint, 2026

Three panels: the dense boundary element solution of the flow past a cow-shaped body on a cutting plane, the network's prediction beside it on the same scale, and the magnitude of their difference.
A body of 5k+ vertices in a wind tunnel with a cutting plane flow line visualization. Classical BIE solve (left), our fast learned estimation (middle), and the magnitude of their difference (right).
๐Ÿ“„ Papercoming soon ๐Ÿ“Ž Supplementary GitHub โ–ถ๏ธ Live demo โœ๏ธ Cite

Abstract

The potential flow around a rigid body moving through an ideal fluid is determined by six harmonic potentials on its surface, one per rigid degree of freedom. Computing them requires a boundary-integral solve per shape, which has to be repeated whenever the body deforms. We present Neural Surface Potentials (NSP), a feed-forward network that predicts all six potentials from a closed triangle mesh without per-mesh precomputation. Two properties of the problem shape the method. By linearity, the six fields give the potential of any rigid motion as a weighted sum. By rotation equivariance, a network with one translational and one rotational output recovers all six fields from three passes on rotated copies of the mesh, and rotation augmentation comes with exact labels at no cost. Trained on about ten thousand shapes, NSP reaches median field errors of 4.0 to 6.7 % on validation shapes and 5.3 to 10.2 % on a harder held-out test set, and it recovers the 6×6 added-mass tensor to a median error of 1.05 % and 1.58 %. All six modes take 105 ms on a mesh of about 6 000 vertices, 34 times faster than the double-precision dense solve that produced the training labels. A simple shape descriptor, the isoperimetric ratio, predicts on which meshes the network is least accurate.

Method

NSP is a PointNet++ encoder-decoder that reads the vertices of a closed triangle mesh, with their positions and normals in a canonical frame, and returns the potential at every vertex without any precomputation. The problem is linear in its boundary data, so the six Kirchhoff potentials, one per rigid degree of freedom, give the potential of any rigid motion as a weighted sum. The problem also commutes with rotations, so a network that predicts one translational and one rotational potential recovers all six from three passes on rotated copies of the mesh. The same identity turns rotation augmentation into exactly labelled training data by randomizing the orientation. The training labels come from a dense boundary-element solve on 10 418 shapes from Thingi10K and Manifold40.

One cat-shaped mesh rotated three ways, each copy passed through the same two-channel network, and the six outputs assembled into the six Kirchhoff potentials.
Inference on an unseen body. The mesh is turned by the cyclic rotation x → z → y → x and the same network runs on each copy. Channel 0 returns a translational potential and channel 1 a rotational one, so three passes give all six modes.
A bunny carrying the potential of a combined translation and rotation, set equal to the weighted sum of six small bunnies, each coloured by one predicted Kirchhoff mode.
Six fields describe every rigid motion. The potential of a body that translates and rotates at once is the weighted sum of the six predicted modes; it differs from a dense solve of the combined problem by 4.07 %. Each small panel has its own colour scale.

Results

4.0–6.7 % median field error across the six modes on 403 validation shapes; 5.3–10.2 % on 77 held-out test shapes
1.05 % median error of the 6×6 added-mass tensor on validation, 1.58 % on test
105 ms for all six modes at about 6 000 vertices, against 3.6 s for the double-precision dense solve on the same GPU
2.6M parameters, a 10.1 MiB checkpoint

Live inference on a deforming body

A body bends and the network predicts its potential φx for every pose.

About the demo
  • It runs a smaller network than the paper's: a single-mode φx model with 1.1M parameters, not the two-channel 2.6M-parameter model. Its mean error on the 403 validation meshes is 6.64 %.
  • Every pose is computed in your browser, with nothing cached: the bend, the canonical frame, the normals, the sampling and the network. The time shown covers all of it and depends on your device.
  • The training set holds a low-poly Stanford bunny; Spot and the armadillo do not appear in it.
  • It needs WebGL and a browser with WebGPU or WebAssembly.

Data, weights and licences

code is MIT; the meshes keep their own terms

The code, training pipeline and this page are MIT; the meshes, the solved fields and the demo's weights are not. The bunny and armadillo are from the Stanford 3D Scanning Repository (acknowledgement to the Stanford Computer Graphics Laboratory, no commercial use); Spot and the figure cat are CC0 and CC BY 4.0 via Oded Stein's collection; the training corpora Thingi10K and Manifold40 are not redistributed. The weights ship for non-commercial research use. The demo loads onnxruntime-web and three.js (both MIT).

BibTeX

@misc{padilla2026nsp,
  title        = {Neural Surface Potentials for Fast Flow Approximation},
  author       = {Padilla, Marcel},
  year         = {2026},
  howpublished = {Preprint, ETH Z\"urich},
  url          = {https://marcelpadilla.com/Neural_Surface_Potential/}
}

This work is not yet published in a journal: the postdoc years leave little time to write it up properly.