使用 Einstein Toolkit 进行数值相对论研究
这篇文章将我们带到物理学的前沿领域:数值广义相对论。由于我们尚未完善心对心的信息传输技术,因此我们实际上无法详细介绍这一切是如何运作的。如果您有兴趣,可以查看维基百科或Living Reviews。在您完成这些,并且可能还修读了一些研究生课程之后,您可以继续阅读本文。
广义相对论与量子力学一起,描述了我们所知的世界在最基本的层面上是怎样的。问题在于,爱因斯坦方程的解集非常小。而且,它们都是理想化情况的解。以下是最常见的几种:
- 史瓦西解:静态,球对称。
- 雷斯纳-诺德斯特朗解:静态,球对称,带电。
- 克尔解:旋转,球对称。
- 克尔-纽曼解:旋转,球对称,带电。
为了研究更真实的情况,例如一对相互绕转的黑洞,您需要数值求解爱因斯坦方程。传统上,这要么是由每位研究人员从头开始完成,要么您可能会继承另一位研究人员之前的一些工作。但是,现在有一个每个人都可以使用的项目,即 Einstein Toolkit。该项目最初名为 Cactus Code。Cactus Code 是一个框架,由一个核心(称为“flesh”)和许多插件(称为“thorns”)组成。Cactus Code 为任意数量领域中的科学计算提供了一个通用框架。Einstein Toolkit 是 Cactus Code 的一个分支,仅包含数值相对论所需的 thorns。
广义相对论是由爱因斯坦提出的引力理论,其中时间被简单地视为另一个维度,就像三个空间维度一样。因此,三个空间维度和一个时间维度共同构成了时空。数值相对论(至少在一种更常用的技术中)重新引入了空间和时间之间的分离。其基本思想是,您描述一个时间瞬间的空间,然后用方程描述该空间如何从一个时间变化到另一个时间。这种技术由 Arnowitt、Deser 和 Misner 引入,称为 ADM 形式体系。Einstein Toolkit 中的代码使用了这种技术的一种变体。
工具包代码可通过 Subversion 和 Git 获取。为了方便最终用户进行检出和更新,开发团队提供了一个名为 GetComponents 的脚本。此脚本期望使用 git,因此您需要在系统上安装 git。要获取它,您可以从以下网址使用 wget 下载:
wget http://svn.cactuscode.org/Utilities/branches/
↪ET_2010_11/Scripts/GetComponents
chmod 777 GetComponents
虽然此脚本有多个选项,但大多数人只想使用它来获取 Einstein Toolkit 的最新代码:
./GetComponents -a http://svn.einsteintoolkit.org/
↪manifest/branches/ET_2010_11/einsteintoolkit.th
这会将您需要的所有部件下载到子目录 Cactus 中,以获得一个正在运行的系统。要更新代码,您只需运行:
./GetComponent -a -u ./einsteintoolkit.th
您可以这样做,因为文件 einsteintoolkit.th 实际上是由 GetComponents 脚本下载到当前目录的。
这是相当繁重的数字运算,因此您可能需要确保您的系统上安装了其他几个软件包。您将需要一个 C 编译器、一个 C++ 编译器和一个 FORTRAN 编译器。您可能还需要安装 MPI。文件输入和输出以 ASCII 格式提供,但您可能需要考虑使用 HDF5 来处理更结构化的数据。某些 thorns 可能还需要一些专门的库,例如 LAPACK。这取决于您实际使用的 thorns。
Einstein Toolkit 的设置方式是,您为特定的可执行文件创建和使用配置。这样,您可以拥有多个配置,这些配置使用不同的 thorn 组合,所有配置都来自相同的核心源代码。要创建新配置,只需键入 make configname
,其中 configname 是您为配置指定的名称。在本文的其余部分中,让我们使用名为 config1 的配置。因此,您将键入 make config1
,并获得一个新的子目录 config1,其中包含所有必需的文件。不要忘记,这需要在由 GetComponents 脚本创建的 Cactus 目录中完成。完成此初始化后,您可以针对此配置执行几个不同的命令。一个示例是 make config1-configinfo
,它会打印出此特定配置的配置选项(图 1)。

图 1. 配置选项示例
第一步是确保一切配置正确。当您在上面创建新配置时,config 命令已为您运行。如果您决定实际要包含其他一些选项,您可以使用 make config1-config <options>
重新运行 config 命令,其中 <options>
是您要设置的选项。这些选项的格式为 <name>=<value>
。一个示例是 MPI=MPICH
,如果您想编译以支持 MPICH 并行性。目前,您可以只输入以下内容进行基本配置:
make config1-config MPI=MPICH
如果您想重新开始,可以尝试 make config1-clean
或 make config1-realclean
。如果您完成了此特定配置,可以使用 make config1-delete
完全删除它。
现在一切都已按照您想要的方式配置好了,您应该继续构建它。只需使用命令 make config1
即可完成此操作。现在,去喝一杯您最喜欢的饮料,让您的机器在编译过程中不堪重负。这是一个相当复杂的软件,因此如果第一次尝试编译没有成功,请不要太失望。只需仔细查看错误消息,并进行必要的更改。最可能的原因是您没有安装所需的库,或者 make 系统找不到它。不断迭代构建步骤,直到获得完全编译的可执行文件。它应该位于子目录 exe 中。在本例中,您将最终得到一个名为 cactus_config1 的可执行文件。
您可以使用命令 make config1-testsuite
对此可执行文件运行一些基本测试。它会询问您一些有关要测试的内容的问题,但如果您在大多数情况下接受默认值,则应该没问题。当您到达末尾时,您可以要求系统运行所有测试、交互式运行测试或选择要运行的特定测试。请记住,如果您使用的是 MPICH,则需要在相关主机上运行 mpd,以便测试套件可以正确运行。这绝不保证代码的正确性。这只是过程的第一步。与任何科学编程一样,您应该确保您获得的结果至少是合理的。
现在您有了可执行文件,您需要一些数据来馈送它。这是问题的另一方面——“初始数据”问题。Einstein Toolkit 使用参数文件来传入所有正在使用的 thorns 所需的参数。开发团队提供了一些入门参数文件(位于 https://svn.einsteintoolkit.org/cactus/EinsteinExamples/branches/ET_2010_06/par),初学者可以下载这些文件来了解可能的功能。要运行您的可执行文件,请按以下方式运行:
cactus_config1 parfile.par
如果您运行的是 MPI 版本,它将如下所示:
mpirun -np X cactus_config1 parfile.par
其中 X
是要使用的 CPU 数量,而 parfile.par
是要使用的参数文件。
就目前而言,Einstein Toolkit 为进行数值相对论研究提供了一套非常强大的工具。但这仅仅是开始。真正的力量在于其可扩展性。它在 GPL 下分发,因此您可以自由下载并根据需要进行修改。您只需愿意分享这些更改。但是,工具包的整个设计都基于您应该能够轻松更改系统的想法。它就像编写和包含一个新的 thorn 一样简单。由于您拥有包含的 thorns 的所有源代码,因此您有一些非常好的示例可以查看和学习。而且,由于 thorns 在理想情况下彼此独立,因此您应该能够轻松地放入新的 thorn。要编译和链接到 flesh 中的 thorns 列表通过文件 configs/config1/ThornList 控制。
如果您决定编写自己的 thorn,我将在此介绍一些概念。一个 thorn 在理想情况下应完全与其他任何 thorn 解耦。任何通信都应通过 flesh 进行。这意味着数据应转换为标准格式之一并移交给 flesh。Thorns 负责从 IO 到数据管理再到实际的数值计算的所有工作。如果您正在研究一些新的算法或求解技术,那么这就是您想要关注的地方。
最后一步是获得漂亮的图形。您可能希望与他人分享您的结果,而通过图片似乎是最容易的方式。您将需要使用其他工具,例如 gnuplot,来生成绘图,甚至是从计算结果中生成的电影。存在一些关于如何使用 gnuplot 等工具的教程。
我希望这能为您提供足够的知识来开始使用这款用于数值相对论的强大工具。与往常一样,如果您有任何想看到的主题,请告诉我。在那之前,继续探索。