← 回到首页 Skip to main content

12.1 稳定性分析程序

第 12 章 软件应用

软件包包含若干一维、二维流动求解器及网格生成器的源代码和可执行程序,并提供多种一维、二维流动算例的输入数据与网格。此外,还包含两个用于显式、隐式时间推进格式 von Neumann 稳定性分析的程序,以及采用不同方法实现程序并行化的示例。

这些软件旨在展示,如何将前面各章介绍的计算流体动力学理论转化为计算机代码。各程序可作为进一步试验和改进的基础。源代码按 GNU 通用公共许可证提供,可自由复制并免费再分发;详情见各目录中的 LICENSE.txt 文件。

流动求解器和网格生成器的源代码采用 Fortran 77 与 Fortran 90 编写;二维非结构流动求解器还提供现代 C++ 版本。程序不引用外部库,源代码力求简单,同时保持足够灵活。软件没有针对运行速度或内存占用作大量优化。除少数例外,每个源文件仅包含一个子程序或函数。二维流动求解器的源代码通过 Doxygen1 工具生成完整文档。

全部网格、解和收敛文件均以纯 ASCII 格式保存。收敛文件与解文件的输出形式,可用 Vis2D 程序可视化2。这两类文件采用统一格式:每个变量占一列,变量名写在文件头中。对于非结构流动求解器生成的解文件,各单元的节点编号存储在坐标与流动量之后,第一列对应节点1,第二列对应节点2,依此类推。Vis2D 文档详细说明了该格式。由于形式简单,必要时可容易地适配其他可视化工具。

软件包包含三个顶层目录:C++、Fortran 和 Parallelization,其子目录如下:

C++

  • unstructured_2d:在非结构三角形网格上求解二维 Euler/Navier–Stokes 方程。

Fortran

  • analysis:一维线性模型方程的 von Neumann 稳定性分析;

  • grid_1d:一维网格生成,适用于 Laval 喷管;

  • grid_struct_2d:外流与内流的二维结构网格生成;

  • grid_unstr_2d:将二维结构网格转换为非结构三角形网格;

  • structured_1d:求解准一维 Euler 方程,即 Laval 喷管内的流动,并演示多重网格方法;

  • structured_2d:在结构网格上求解二维 Euler/Navier–Stokes 方程;

  • unstructured_2d:在非结构三角形网格上求解二维 Euler/Navier–Stokes 方程。

Parallelization

  • agents:异步代理库;

  • cuda:CUDA;

  • mpi:MPI;

  • openmp:OpenMP;

  • serial:串行版本。

下面各节进一步介绍这些子目录。通常,每个模拟程序的子目录均包含 README.txt,说明各文件、应用程序的编译与运行方法,以及结果的保存方式,还解释主要变量与输入参数的含义。二维流动求解器的 doc 子目录包含 HTML 文档,入口为 index.html。各流动求解器还有 run 目录,存放不同演示算例的输入文件、网格、解和图形。

最后说明收敛历程。这里所有流动求解器均采用连续两个时间步之间密度变量之差的 2-范数衡量收敛,即

$$ \|\Delta\rho\|_{2}=\sqrt{\sum_{I=1}^{N}(\rho_{I}^{n+1}-\rho_{I}^{n})^{2}}.\tag{12.1} $$

求和遍及全部 N 个控制体。通常将式(12.1)的收敛指标,除以第一次迭代的值进行归一化。程序直接按对数刻度保存归一化收敛历程。

1 Doxygen 网站。

2 可从 CFD Consulting & Analysis 获取,原书地址:CFD Consulting & Analysis。

12.1 稳定性分析程序

analysis 目录包含两个程序,用于一维线性模型方程的 von Neumann 稳定性分析,见10.3节。第一个计算显式多级时间推进格式(6.1.1节)及混合格式(6.1.2节)的 Fourier 符号与放大因子模,源代码位于 mstage 子目录。第二个分析一般隐式格式(6.2节)的阻尼性能,位于 implicit 子目录。两个程序均可处理一维对流或对流—扩散模型方程,见10.3.2、10.3.3节。空间离散可采用带人工耗散的中心格式、一阶迎风格式或二阶迎风格式;隐式算子也可采用相同格式。对于显式格式,还可研究中心或迎风隐式残差光顺的影响,见9.3节。