512×384 的计算网格,5000 步/秒的推进速率,渲染帧率稳在 60fps,跑在一块移动端显卡上,不需要安装任何软件,打开网页就能用。
这是 ausm-webgpu 的实测结果。它是一个完全运行在浏览器里的二维可压缩流体动力学求解器,用 WebGPU 实现了 AUSM 系列通量格式,支持从低速亚音速到 Mach 10 以上的超音速流场模拟。
计算流体力学在浏览器里为什么难做
CFD(计算流体力学)求解器是航空、汽车、能源等行业的核心工具,传统上运行在专业工作站或计算集群上,依赖 MATLAB、OpenFOAM、Fluent 这类软件。它对浮点计算量的要求极高,一个中等规模的翼型绕流模拟,单步就要对网格上的每个单元做一轮通量计算、重构和时间推进。
浏览器环境的瓶颈过去一直卡在 WebGL 上。WebGL 的计算着色器能力有限,无法高效表达 CFD 求解器所需的通用并行计算逻辑,数据读写模式也与 CFD 的访存模式不匹配。WebGPU 的出现改变了这一点,它提供了真正的 compute shader 支持,允许在 GPU 上组织任意结构的并行计算。

ausm-webgpu 的做法
整套求解器的核心思路是:把 CFD 的完整流水线——网格生成、通量计算、时间推进、可视化——全部用 WebGPU compute shader 实现,CPU 只负责参数传递和交互控制,计算和渲染完全留在 GPU 上完成。
网格生成阶段
求解翼型绕流问题的第一步是生成贴体网格(body-fitted mesh)。ausm-webgpu 使用椭圆型偏微分方程(PDE)求解 O 型网格,网格线从翼型表面向外辐射,在翼型曲面附近自然加密,在远场稀疏。这种曲线坐标系下的网格能让边界条件处理更规整,是航空 CFD 的标准做法。O 型网格特别适合处理封闭翼型轮廓,翼型几何支持两种输入:NACA 4 位数字系列的参数生成,以及 Selig 和 Lednicer 格式的 .dat 文件加载。
流场求解阶段
通量计算是 CFD 求解的核心,ausm-webgpu 实现了 AUSM 系列三种格式:AUSM+-up、SLAU 和 SLAU2。AUSM(Advection Upstream Splitting Method,迎风分裂法)系列格式的特点是将对流通量和压力通量分开处理,在宽流速范围内都能保持数值稳定,这是它能覆盖 Mach 0.1 到 10+ 的原因——许多其他格式在低马赫数下会出现压力-速度解耦问题,AUSM 系列通过专门的低速预处理项避免了这一问题。
空间重构采用 MUSCL(Monotonic Upstream-centered Scheme for Conservation Laws)方法,对每个单元界面两侧的原始变量做二阶精度的线性重构,再配合限制器防止虚假振荡。时间推进使用 TVD RK3(Total Variation Diminishing Runge-Kutta 三阶)格式,时间步长由 CFL 条件自动计算,无需手动指定。
整套求解流程完全在 compute shader 中并行执行,每一帧内推进约 85 个时间步。
可视化阶段
可视化在 fragment shader 中完成,不需要把数据回读到 CPU。支持的场量包括:数值 schlieren(通过密度梯度模拟真实 schlieren 光学效果)、密度、温度、压力、马赫数、速度场,以及等值线叠加。schlieren 可视化对激波位置特别敏感,是判断求解器激波捕捉能力的直观方式。
关键工程决策
全 GPU 流水线,不做 CPU 回读:计算结果直接留在 GPU 显存里交给渲染 shader 使用,省去了每帧的 GPU→CPU→GPU 数据传输开销。这是在 512×384 网格上维持 60fps 的直接原因。
CFL 自适应时间步长:求解器根据当前流场速度和声速自动计算允许的最大时间步长,避免手动调参引起的数值发散,也让不同流速域的模拟无需单独配置。
O 型网格而非 C 型或 H 型:O 型网格对封闭翼型轮廓处理最自然,不存在前缘和后缘处的网格奇异性。C 型和双曲型网格在规划中但尚未实现。
三种通量格式并存:SLAU2 在低马赫数下的数值耗散比 AUSM+-up 更低,对不同马赫数范围的问题可以选择更合适的格式,而不是用一个格式凑合所有情况。
实测性能
在搭载 RTX 4070 移动端 GPU 的设备上,Chrome 浏览器中,512×384 网格的模拟稳定在 60fps,每帧推进约 85 个时间步,折合约 5000 步/秒。这个数字对比同等规模的 CPU 求解器大约有 1-2 个数量级的差距,WebGPU compute shader 在这类规则并行计算上的效率优势基本符合预期。
写在最后
ausm-webgpu 目前仍是早期实验性项目,代码量不大(99% JavaScript),没有封装成库,直接以网页应用形式发布。已知的局限包括:只支持二维流场,不含粘性效应(无法模拟附面层分离),网格只支持 O 型,升阻力计算尚未实现。
对于从事航空流体仿真、CFD 教学,或者对 WebGPU compute shader 的工程应用感兴趣的开发者,这个项目提供了一个不常见的参考实现:把完整的数值求解流水线装进浏览器,并且在移动端 GPU 上保持了可用的计算吞吐量。
GitHub:https://github.com/huj31415/ausm-webgpu (opens in a new tab)