返回案例库

精选案例 · Agent / 实践案例

用 AI 辅助写代码的经历:SOD 激波管数值模拟

这个案例围绕「用 AI 辅助写代码的经历:SOD 激波管数值模拟」记录了一条真实 AI 实践线索,正文重点集中在「项目背景」「AI 辅助开发的过程」,适合先按任务意图阅读再判断复用。

案例速读

README 标题「用 AI 辅助写代码的经历:SOD 激波管数值模拟」下已经出现运行/配置路径、脚本或接口线索、结果证据,正文重点集中在「项目背景」「AI 辅助开发的过程」,比纯概念介绍更适合进入精选阅读流。 这篇案例的阅读价值在于,它把真实任务、模型辅助过程和可迁移做法放在同一个上下文里,读者可以从 「用 AI 辅助写代码的经历:SOD 激波管数值模拟」、「项目背景」、「AI 辅助开发的过程」、「1. Riemann 求解器的数学推导」 进入正文。

  • 建议重点看 可参考其中的运行与配置路径、包含可迁移的命令、脚本或接口线索、已有结果或观测证据可用于判断复用价值。结合 Agent / 实践案例 和「任务驱动用户、AI 实践者」这一受众定位,它更适合作为任务检索后的精读材料,而不是只看一句短摘要后快速跳过。
  • 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
看点
用 AI 辅助写代码的经历:SOD 激波管数值模拟
读者
任务驱动用户、AI 实践者
复用
可参考其中的运行与配置路径
结构
10 个目录入口

原文内容

用 AI 辅助写代码的经历:SOD 激波管数值模拟

项目背景

SOD 激波管问题是计算流体力学(CFD)中的经典 Riemann 问题。它描述了一根管道中间用隔膜隔开,左侧为高压高密度气体,右侧为低压低密度气体,在隔膜突然破裂后,管内会产生激波、接触间断和稀疏波三种流动结构。这个问题的魅力在于它有精确的解析解,是验证数值算法正确性的标准算例。

我的项目目标是用 C++ 从零实现一个 SOD 激波管的数值求解器,并用 Qt6 构建一个带实时动画的可视化界面。

AI 辅助开发的过程

1. Riemann 求解器的数学推导

SOD 问题最核心的部分是求解星区(Star Region)的压力 p* 和速度 u*。这需要建立非线性方程并用 Newton-Raphson 方法迭代求解。我把物理模型的方程描述给 AI 后,它帮助我:

  • 推导了压力函数 f_K(p) 及其导数 f’_K(p) 的解析表达式,这是迭代求解的基础
  • 实现了 PVRS(Primitive Variable Riemann Solver)作为 Newton 迭代的初始猜测,显著加快了收敛速度
  • 正确处理了激波(shock wave)和稀疏波(rarefaction wave)两种波型的判断逻辑

2. 采样函数的实现

星区求解完成后,需要在任意位置 (x, t) 采样流动状态。这里涉及复杂的波系判断逻辑——接触间断左侧/右侧、稀疏波扇区内外、激波前后。AI 帮我梳理了这些逻辑分支:

if (S < u_star)       // 接触间断左侧
    if (isRarefaction) // 稀疏波
        if (S <= S_HL)        // 扰动未到达
        else if (S < S_TL)    // 稀疏波扇区内
        else                   // 星区
    else                // 激波
        if (S < S_L)          // 激波未到达
        else                   // 激波后
else                   // 接触间断右侧
    ...(对称处理)

AI 帮我验证了每个分支的公式,确保密度、速度、压力在波系中的过渡是连续的。

3. Qt6 GUI 可视化

GUI 部分是我对 Qt 不太熟悉的领域。AI 在这方面的帮助尤其明显:

  • 控制面板布局:使用 QGroupBox + QGridLayout 组织了左右初始状态、模拟参数、显示模式等控制区域
  • 画布绘制:继承 QWidget 实现了 PlotCanvas,支持密度/压力/速度的曲线绘制,含坐标轴、网格和图例
  • 动画系统:基于 QTimer 实现了高精度定时动画,每帧重新采样并重绘,用户可控制开始/暂停/重置
  • 参数字体:设置了微软雅黑中文字体,解决了 Qt 中文显示问题

4. 构建系统配置

AI 帮助编写了 CMakeLists.txt,配置了 Qt6 的 AUTOMOC、Windows 下的 WIN32_EXECUTABLE 等选项,并提供了一键编译的 build.bat 脚本。

使用 AI 的体会

  1. 数学推导是 AI 的强项:物理公式、数值方法的实现,AI 能给出准确的代码,减少了手工推导和查文献的时间。

  2. 框架和样板代码:Qt 的 boilerplate 代码(信号/槽连接、UI 布局、CMake 配置)AI 写起来非常快,我只需要确认逻辑正确性。

  3. 调试效率提升:当遇到数值结果不收敛或曲线异常时,将错误现象和数据喂给 AI,它能快速定位到公式符号错误或边界条件处理不当的问题。

  4. 人机协作是最佳模式:AI 生成的代码不是 100% 正确,但作为起点非常好。我负责把握物理模型的正确性(比如激波和稀疏波的物理判断条件),AI 负责代码实现细节,这种配合让开发效率提升了一倍以上。

  5. 学到很多:看 AI 写的代码本身也是一种学习。比如 Qt 的 QPainterPath 绑制平滑曲线、QButtonGroup 互斥管理 radio buttons 的技巧,都是通过这次项目学到的。

总结

这个 SOD 激波管项目从推导数学公式到写出可交互的 GUI 应用,如果完全手写可能需要 2-3 天。在 AI 的辅助下,核心功能的完成大约用了半天,剩下的时间花在了参数调优和 UI 美化上。AI 不是替代思考,而是让我可以把更多精力放在物理理解和设计决策上,把重复性的编码工作交给 AI 加速。

附:源码与运行结果

  • src/ — 完整 C++ 源码(Riemann 求解器 + Qt6 GUI + CMake 构建)
  • results.txt — 精确解在 t = 0.05, 0.10, 0.15, 0.20, 0.25 五个时刻的数值输出,清晰展示膨胀波、接触间断和激波的演化过程

返回顶部