数值方法、求解器与 HPC · Numerics, Solvers & HPC
这一部分主要回答:如何把物理方程「离散化」成计算机能算的形式, 如何设计求解器让它稳定、高效地收敛,以及如何利用多核、多机并行来加速大规模算例。
1. 离散方法(Discretization Methods)
不同的离散框架(FVM / FEM / DG)各有适用场景,选择时既要考虑物理问题的特性, 也要考虑后续求解器的复杂度和并行友好性。
- 1.1 有限体积法(FVM) 基于控制体的积分形式,天然保证守恒性;适合 CFD 中的对流占优问题。 包括:重构方法(线性、WENO)、通量计算(Roe、AUSM+、HLLC)、限制器等。
- 1.2 有限元法(FEM) 基于变分原理,适合椭圆/抛物型问题,在结构力学中应用广泛。 在 CFD 中,FEM 更多用于不可压流、传热等场景。
- 1.3 间断伽辽金法(DG) 结合了 FVM 的守恒性和 FEM 的高精度,适合高精度需求和多物理耦合。 计算成本相对较高,但在特定场景下(如气动声学、高精度湍流模拟)有优势。
- 1.4 网格类型与适应性 结构化/非结构化、多面体网格、自适应细化等,不同网格类型对离散和求解的影响。
2. 时间推进(Time Integration)
- 2.1 显式方法 Runge-Kutta 多步法、时间步长约束(CFL 条件)、稳定性分析。 适合对流占优、时间尺度短的问题。
- 2.2 隐式方法 向后欧拉、Crank-Nicolson、隐式 Runge-Kutta 等。 时间步长可以更大,但需要求解线性/非线性系统。
- 2.3 双时间步法(Dual Time Stepping) 在隐式框架下用显式方法求解伪时间项,兼顾稳定性和计算效率。 在可压缩流求解器中应用广泛。
- 2.4 时间步长控制 自适应时间步长、局部时间步长、多时间尺度问题(如燃烧中的快慢反应)。
3. 线性系统求解(Linear Solvers)
隐式方法的核心是求解稀疏线性系统,这一块是性能瓶颈,也是并行化的关键。
-
3.1 Krylov 子空间方法
- CG(共轭梯度法):对称正定系统,在结构力学中常用。
- GMRES / BiCGStab:非对称系统,CFD 中 Jacobian 矩阵通常非对称。
- 重启策略、收敛判据、残差监控。
-
3.2 预条件(Preconditioning)
- Jacobi、Gauss-Seidel、ILU 等经典预条件。
- 多网格预条件:V-cycle、W-cycle,在 CFD 中效果显著。
- 近似逆、稀疏近似逆(SPAI)等。
- 预条件的并行化:如何在不牺牲效果的前提下做并行分解。
- 3.3 直接法 vs 迭代法 何时用直接法(LU 分解、Cholesky),何时必须用迭代法。 大规模稀疏系统的权衡。
4. 非线性求解(Nonlinear Solvers)
- 4.1 Newton-Raphson 方法 非线性系统的线性化、Jacobian 构造(解析 vs 数值)、收敛判据。
- 4.2 拟 Newton 方法 BFGS、Broyden 等,避免显式构造 Jacobian,适合 Jacobian 计算昂贵的情况。
- 4.3 非线性预条件与阻尼 线搜索、信赖域方法、如何提高 Newton 方法的鲁棒性。
- 4.4 完全耦合 vs 分离求解 压力-速度耦合(SIMPLE、PISO、Coupled)、多物理场耦合策略。
5. HPC 与并行计算(High Performance Computing)
从单核到多核,从单机到集群,如何让算法充分利用硬件资源。
-
5.1 并行模型
- OpenMP:共享内存并行,适合单机多核。
- MPI:分布式内存并行,适合多机集群。
- 混合并行:MPI + OpenMP,在超算上常见。
- GPU 并行:CUDA / OpenCL,适合数据并行的算子。
-
5.2 网格划分与负载均衡
- 区域分解:METIS、ParMETIS 等工具。
- 负载均衡:静态 vs 动态,如何应对非均匀计算负载。
- 通信开销:最小化进程间通信,提高并行效率。
-
5.3 性能优化
- 缓存友好:数据局部性、访存模式优化。
- 向量化:SIMD 指令、编译器优化。
- 性能分析:profiling 工具(gprof、perf、Intel VTune)的使用。
- 瓶颈识别:计算 vs 通信 vs I/O,如何定位和优化。
- 5.4 大规模算例实践 千万级网格、多物理场耦合、长时间积分等场景下的并行策略和经验。
6. 我的实践(My Practice)
目前主要关注:
- 可压缩 CFD 求解器中的隐式格式设计与实现。
- 稀疏线性系统的 Krylov 求解器与多网格预条件。
- MPI 并行下的负载均衡与通信优化。
- 在自研芯片上的矩阵算子加速与性能调优。