并行谱数值方法/概述
我们首先快速了解一下有限精度算术。然后,我们讨论如何使用变量分离技术来求解常微分方程 (ODE) 和偏微分方程 (PDE)。然后,我们介绍可用于求解 ODE 和 PDE 的数值时间步长方案。接下来,我们通过概述离散傅立叶变换 (DFT) 和用于快速计算 DFT 的快速傅立叶变换 (FFT) 算法来介绍伪谱方法。最后,我们将把所有这些结合起来,首先在串行设置中,然后在并行设置中求解几个不同的 PDE。这些程序将使用 Matlab[1] 和 Fortran。我们还提供了一些 Matlab 程序的 Python 实现。
我们假设读者具有入门编程经验,例如使用 C、C++、Fortran、Matlab、Octave、Python 或等效语言。由于提供了详细的编程示例,我们不期望读者具备丰富的编程背景,但希望读者在学习示例的过程中能够获得必要的知识。我们还假设读者具有在要求严格的微积分课程中获得的数学成熟度,例如 Courant 和 John 的《微积分与分析导论》[2][3]。微分方程课程也将有所帮助,但对于许多科学家或工程师来说,他们的兴趣领域将提供许多这些方程的示例。更多编程经验或数学背景将使材料更容易理解。对于那些了解正在近似逼近的偏微分方程解的行为的人来说,检查模拟是否正确也可能更容易,但是我们已经尝试选择有代表性的微分方程,以便人们可以轻松地使用这些程序,然后将它们调整为正在考虑的使用方式。
这些程序已在多台不同的计算机上进行了测试。这些程序位于程序目录中,这些目录对应于程序首次出现的章节。虽然它们没有显式超链接,但可以通过阅读 LaTeX 源代码或搜索相应的目录来找到它们的位置。
Matlab 程序保证可以在 Matlab R2011b 上运行,但也应该可以在 Matlab 的其他较新版本上运行。它们也应该很容易修改,以便它们可以在 Octave 上运行,Octave 可以从 www.gnu.org/software/octave/ 免费获得。
由于 Matlab 需要许可证,因此对于那些不希望使用 Octave 的人,我们还包括了一些 Matlab 程序的 Python 版本。这些程序已在 Python 2.7 中进行了测试(可以从 https://pythonlang.cn/ 获得),它们还需要 Matplotlib(版本 1.10,可以从 http://matplotlib.sourceforge.net/index.html 获得)、Mayavi (http://github.enthought.com/mayavi/mayavi/index.html) 和 numpy (http://numpy.scipy.org/)。这些程序主要在 Enthought Python 发行版中进行了测试。
Fortran 程序主要在 GCC 4.6.2 编译器套件中进行了测试,但它们应该可以在大多数其他较新编译器中运行。如果使用依赖于特定编译器的 MPI 实现,建议也使用 GCC 编译器。我们预计这些程序应该可以在其他编译器中进行少量修改后运行,但不能保证这一点。为了简化并允许检查程序的正确性,我们选择使用低编译器优化级别。我们鼓励用户在检查程序在系统上正常运行后,提高编译器优化级别和编译器参数。为了运行这些程序,还需要 FFTW,这是一个免费的快速傅立叶变换库。可以从 http://fftw.org/ 下载它。MPI 程序利用了 2DECOMP&FFT 库,该库可以从 http://www.2decomp.org 下载。最后,本教程的最后一部分需要使用免费的开源并行可视化程序 VisIt,该程序可以从 https://wci.llnl.gov/codes/visit/home.html 获得。如果您希望执行大型并行模拟(目前,大型模拟的指导原则是对于大于 10,000 核的系统,系统资源的 20%),那么学习执行输出和并行化的最有效系统设置可能很有意义。在本教程中,我们没有讨论这个问题,但建议您咨询您的计算中心以获取建议。
这些笔记中的材料可以作为短期课程的基础。最重要的部分是第 1 章到第 11 章。然后可以从第 12 章、第 13 章和第 14 章中进行选择。可以选取一些问题来评估学生的学习情况。请注意,第 8 章、第 12 章、第 13 章和第 14 章中的问题可能会发展成广泛的研究项目,因此,如果学生解决问题的时间有限,那么只应向学生提供这些问题的样本。如果学生能够运行示例 Matlab/Python、串行 Fortran、OpenMP Fortran 和 MPI Fortran 程序,并且还能够修改它们来解决相关问题,那么学生就成功地理解了这些材料。成功完成测试这些能力的问题将足以表明学生已经理解了基本概念。
- ↑ http://www.mathworks.com/products/matlab/index.html - 如果无法使用,我们建议修改 Matlab 程序以使用 Octave,可以从 http://www.gnu.org/ software/octave/ 免费下载。
- ↑ Courant 和 John (1998).
- ↑ Courant 和 John (1999),.
Courant, R.;John, F. (1998)。微积分与分析导论。卷。 I. Springer。
Courant, R.;John, F. (1999)。微积分与分析导论。卷。 II. Springer。