21cm信号的半数值宇宙学模拟代码
项目描述
无线电 21 厘米信号的半数值宇宙学模拟代码。
这是21cmFAST的官方存储库:一种半数字代码,能够生成早期宇宙中许多物理场的 3D 宇宙学实现。它超快,将偏移集形式主义与微扰理论相结合,有效地产生密度、速度、光晕、电离、自旋温度、21 厘米,甚至电离通量场(参见上面的光锥!)。它已经针对数值模拟进行了广泛的测试,在相关尺度上具有出色的一致性。
21cmFAST已被广泛使用,例如,默奇森宽场阵列 (MWA)、低频阵列 (LOFAR) 和再电离阵列氢纪元 (HERA),以模拟大规模宇宙学 21 厘米信号。特别是,21cmFAST的速度对于生成足够大(跨越几个 Gpc)以代表现代低频观测的模拟非常重要。
从v3.0.0 开始,21cmFAST方便地包装在 Python 中以启用更多动态代码。
3.0.0+ 中的新功能
强大的磁盘缓存/写入既可提高效率又可简化对先前处理的数据的读取(使用 HDF5)。
方便的数据对象,可简化对各种密度和电离场的访问和处理。
解耦功能意味着可以将任意功能注入到流程中。
改进的异常处理和调试
综合文档
综合测试套件。
严格的语义版本控制。
安装
我们支持 Linux 和 MacOS(如果您在 Windows 上安装成功,请告诉我们!)。在这些系统上,获得21cmFAST的最简单方法是使用 conda:
conda install -c conda-forge 21cmFAST
21cmFAST也可以在 PyPI 上使用,因此pip install 21cmFAST也可以使用。但是,它依赖于一些可能不存在的外部(非python)库,因此除非绝对必要,否则不建议使用此方法。如果使用pip安装21cmFAST (尤其是在 MacOS 上),我们彻底建议阅读详细的 安装说明。
基本用法
21cmFAST既可以交互方式运行,也可以从命令行 (CLI) 运行。
交互的
在给定的红移处运行(非常小的)同时代模拟并通过它绘制切片图像的最基本示例:
>>> import py21cmfast as p21c
>>> coeval = p21c.run_coeval(
>>> redshift=8.0,
>>> user_params={'HII_DIM': 50, "USE_INTERPOLATION_TABLES": False}
>>> )
>>> p21c.plotting.coeval_sliceplot(coeval, kind='brightness_temp')
这里的同时代对象不仅仅是其中的 bright_temp字段。您可以绘制密度场、速度场或许多其他场。要模拟完整的光锥:
>>> lc = p21c.run_lightcone( >>> redshift=8.0, >>> max_redshift=15.0, >>> init_box = coeval.init_struct, >>> ) >>> p21c.plotting.lightcone_sliceplot(lc)
在这里,我们使用了coeval中已经计算的初始密度场,它设置了运行的大小和参数,但也意味着我们不必计算它(再次相对昂贵的步骤)。探索 API 文档中的全部功能,或阅读更深入的教程 以获得进一步的指导。
命令行界面
CLI 可用于直接从配置文件或命令行参数在磁盘上生成框。您可以独立运行模拟的特定步骤,也可以一次运行整个模拟。例如,要仅运行初始密度字段,您可以执行以下操作:
$ 21cmfast init --HII_DIM=100
生成的(非常小的)模拟框会自动保存到缓存中(默认情况下,在~/21cmFAST-cache)。您可以使用以下命令列出缓存中的所有文件(以及每个模拟中使用的参数):
$ 21cmfast query
要运行整个 coeval 多维数据集,请使用以下示例:
$ 21cmfast coeval 8.0 --out=output/coeval.h5 --HII_DIM=100
在这种情况下,所有中间步骤都缓存在标准缓存目录中,最终的Coeval框保存到output/coeval.h5。如果没有指定--out,则不会写入同时代的盒子本身,但不用担心——它的所有部分都被缓存了,因此可以非常快速地重建它。任何 输入类的每个输入参数 (有很多参数)都可以在调用结束时以 --前缀指定(如此处的HII_DIM)。或者,您可以指向配置 YAML 文件,例如:
$ 21cmfast lightcone 8.0 --max-z=15.0 --out=. --config=~/.21cmfast/runconfig_example.yml
文档
完整文档(包括示例、安装说明和完整 API 参考)位于https://21cmfast.readthedocs.org。
承认
如果您在研究中使用21cmFAST v3+,请同时引用:
默里等人,(2020 年)。21cmFAST v3:用于生成宇宙 21cm 信号的 3D 实现的 Python 集成 C 代码。开源软件杂志, 5(54), 2582, https://doi.org/10.21105/joss.02582
Andrei Mesinger、Steven Furlanetto 和 Renyue Cen,“21CMFAST:高红移 21 厘米信号的快速、半数值模拟”,《皇家天文学会月报》,第 411 卷,第 2 期,第 955-972 页(2011 年) , https://ui.adsabs.harvard.edu/link_gateway/2011MNRAS.411..955M/doi:10.1111/j.1365-2966.2010.17731.x
此外,以下论文介绍了21cmFAST的各种特性。如果您使用这些功能,请引用相关论文。
迷你光晕:
Muñoz, JB, Qin, Y., Mesinger, A., Murray, S., Greig, B. 和 Mason, C.,“第一批星系对宇宙黎明和再电离的影响” https://arxiv.org /abs/2110.13919 (用于 DM 重子相对速度)
Qin, Y.、Mesinger, A.、Park, J.、Greig, B. 和 Muñoz, JB,“关于两个地点的故事 - I. 从当前观测中推断微晕托管星系的特性”,月度通告皇家天文学会,第一卷。495,没有。1,第 123-140 页,2020 年。https: //doi.org/10.1093/mnras/staa1131 。(用于 Lyman-Werner 和首次实施)
质量相关的电离效率:
Park, J.、Mesinger, A.、Greig, B. 和 Gillet, N.,“从星系光度函数和 21 厘米信号推断再电离和宇宙黎明的天体物理学”,皇家天文学会月刊,卷。484,没有。1,第 933-949 页,2019 年。https: //doi.org/10.1093/mnras/stz032 。
变更日志
开发版
v3.2.0 [2022 年 7 月 11 日]
改变了
浮点数现在表示为输出对象哈希中特定数量的有效数字。这解决了未从缓存中读取非常接近的红移的问题 (#80)。请注意,这意味着现在将从缓存中读取非常接近的 astro/cosmo 参数。在创建具有许多随机参数的大型数据库时,这可能会导致问题。可以通过设置 cache_param_sigfigs和cache_redshift_sigfigs参数在配置中修改行为(默认情况下分别为 6 和 4)。 注意:更新到此版本会导致您之前的缓存文件无法使用。在更新之前删除它们。
固定的
在 Python 中的已知错误中添加了一个缺少的基于 C 的错误。
v3.1.5 [2022 年 4 月 27 日]
v3.1.4 [2022 年 2 月 10 日]
固定的
FindHaloes 中的 FFT 归一化错误
由于缺少scipy.integrate模拟模块,文档未在 RTD 上编译
更新的 matplotlib 删除了对设置 vmin/vmax 和 norm 的支持。现在将 vmin/vmax 传递给 norm() 构造函数。
v3.1.3 [2021 年 10 月 27 日]
修复了 FAST_FCOLL_TABLES,因此它只影响 MCG 而不是 ACG。分别为高和低 z 添加了此标志的测试。
v3.1.2 [2021 年 7 月 14 日]
内件
MINIMIZE_MEMORY标志通过改变 C 中某些数组的分配和访问方式,显着减少内存而不影响性能。 (#224)
改变
将USE_INTERPOLATION_TABLES更新为默认 True。作为默认值,这更有意义。在 v4 之前,如果未明确设置,则会引发警告。
v3.1.1 [2021 年 6 月 13 日]
固定的
部署到 PyPI 中的错误。
v3.1.0 [2021 年 6 月 13 日]
添加
能够从最终的 Coeval 类或 Lightcone 访问所有进化的 Coeval 组件。
能够将 Coeval/Lightcone 中的所有进化前因收集到一个文件中。
UserParams中的FAST_FCOLL_TABLES可显着提高速度,但准确率降低约 <10%。
相对速度 (vcb) 初始条件的快速和低内存生成。消除了高分辨率 vcb 盒子,因为它们从不需要。
同时输出平均自由路径(即 IonizedBox 中的 MFP_box)。
添加了 DM 重子相对速度对 PopIII 形成小晕的影响。现在,这与 LW 反馈一起提供了正确的背景演化。它从相对速度波动中引起速度诱发的声学振荡 (VAO)。我们还遵循新的模拟结果,对微晕中的 LW 反馈进行更灵活的参数化,并为微晕添加新索引 ALPHA_STAR_MINI,现在独立于常规 ACG。
高级函数的新钩子关键字,在每个计算步骤完成时运行,可用于更通用地将部分数据写入文件。
能够将函数传递给write=以写入数据的更具体方面(在内部,这将被放入hooks字典中)。
如果可能的话, run_lightcone和run_coeval通过将初始条件和 perturb_field 实例卸载到磁盘来使用显着减少内存。
固定的
当USE_RELATIVE_VELOCITIES=True时 2LPT 中的错误[问题 #191,PR #192]
当红移未按升序排列时引发错误 [问题 #176,PR #177]
在某些系统上使用USE_FFTW_WISDOM时出错[问题 #174,PR #199]
ComputeIonizedBox 中的错误导致 Gamma12_box 中的负重组率和环结构[问题 #194,PR #210]
确定智慧文件名时出错 [Issue #209, PR#210]
缓存的基于 C 的内存将被读取并释放两次的错误。
内件
添加了 dft.c,这使得执行所有三次 FFT 变得更加容易和更加一致。[公关#199]
使用_get_box_structures跟踪要在 C 和 Python 之间传递的数组及其在 Python 中的形状的更通用方法。这也意味着可以在初始化和计算之前查询各种框。
更严格的集成测试,测试每个阵列,而不仅仅是最终亮度温度。
能够绘制集成测试数据以更轻松地识别出问题的地方(在pytest调用中使用--plots)。
为produce_integration_test_data.py提供更好的CLI 界面。清理test_data/目录的新选项,并且测试数据由用户定义的键保存,而不是大量的变量字符串。
在调用 C 之前更好的调试语句,以便在版本之间进行轻松比较。
跟踪数组状态的更好的方法(在内存中、在磁盘上、c 控制等)
能够以更精细的方式释放基于 C 的指针。
v3.0.3
添加
coeval_callback和coeval_callback_redshifts标志到run_lightcone。提供在Coeval盒子上运行任意代码的能力。
乔斯纸!
get_fields类方法在所有输出类上,以便人们可以轻松地找出该类计算(和可用)的字段。
固定的
只有在实际使用时才会在不可用的external_table_path上引发错误。
v3.0.2
固定的
添加了原型函数以在 MacOS 上启用一些标准编译器的编译。
v3.0.1
21cmFAST内部代码结构的修改
添加
将 FFTW 智慧创造重构为 python 可调用函数
v3.0.0
对 21cmFAST 进行彻底改造,包括强大的 python 包装器和接口、缓存机制以及具有持续集成的公共存储库。此版本中 minihalo 功能的更改和方程式可在 https://arxiv.org/abs/2003.04442中找到
原始 21cmFAST v2 C 代码的所有功能都已在此版本中实现,包括USE_HALO_FIELD并执行完全集成,而不是使用插值表(更快)。
添加
更新了辐射源模型: (i) 所有辐射场,包括 X 射线、紫外线电离、莱曼维尔纳和莱曼阿尔法,均来自两个分离的群体,即原子冷却 (ACG) 和微晕托管分子冷却星系 (MCG);(ii) ACG 和 MCG 的转换质量是根据冷却效率和来自再电离和莱曼维尔纳抑制的反馈来估计的(Qin 等人,2020 年)。这可以使用新的 flag_options USE_MINI_HALOS 打开。
根据 McQuinn (2015) 的方程式 6 更新了 IGM 的动力学温度,部分电离电池的体积加权温度介于电离(体积:1-xHI;温度 T_RE)和中性成分(体积:xHI;温度)之间: HI 的温度)。这以 temp_kinetic_all_gas 的形式存储在 IonizedBox 中。请注意,TsBox 中的 Tk 仍然是 HI 的动力学温度。
测试:许多单元测试,还有一些回归测试。
CLI:从命令行运行 21cmFAST 框,查询缓存数据库,并为标准比较运行生成图。
文档:Jupyter 笔记本演示和教程、常见问题解答、安装说明。
绘图例程:许多通用绘图例程,旨在绘制同时代和光锥切片。
使用基于 CLASS 的传递函数的新功率谱选项 ( POWER_SPECTRUM=5 )。警告:如果 POWER_SPECTRUM==5 无法更改 cosmo 参数,它们现在被设置为 Planck2018 最佳拟合值(直到添加 CLASS):(omegab=0.02237,omegac= 0.120,hubble=0.6736(其余无关紧要)对于传递函数,但在以下情况下:A_s=2.100e-9, n_s=0.9649, z_reio = 11.357)
新的user_params选项USE_RELATIVE_VELOCITIES,它产生初始相对速度立方体(已实现选项,但尚未实际计算)。
配置管理。
全局参数现在有一个用于临时更改参数的上下文管理器。
极大地改进了错误处理:可以在 C 代码中捕获异常并将其传播到 Python 以通知用户出了什么问题。
能够以简单的可移植格式将高级数据(Coeval和Lightcone对象)直接写入文件。
改变了
POWER_SPECTRUM选项从global_params移至user_params。
默认宇宙学更新为 Planck18。
v2.0.0
此版本的所有更改和方程式都可以在https://arxiv.org/abs/1809.08995中找到。
改变了
更新了电离源模型:(i) 恒星形成速率和电离逃逸分数与暗物质晕的质量成比例,(ii) 活跃恒星形成星系的丰度被指数抑制低于转换晕质量 M_{ turn},根据 exp(−M_{turn}/M_{h}) 的占空比,其中 M_{h} 是光晕质量。
删除了平均自由路径参数 R_{mfp}。相反,按照 Sobacchi & Mesinger (2014) 的方法,直接计算星系际介质中的不均匀亚网格重组
v1.2.0
添加
支持光环质量依赖的电离效率:zeta = zeta_0 (M/Mmin)^alpha,其中 zeta_0 对应于 HII_EFF_FACTOR, Mmin –> ION_M_MIN, alpha –> EFF_FACTOR_PL_INDEX in ANAL_PARAMS.H
v1.12.0
添加
代码“redshift_interpolate_boxes.c”在共同移动的立方体之间进行插值,创建共同移动的光锥盒。
为 SMP 机器启用 openMP 线程。您可以在 INIT_PARAMS.H 中指定线程数(为获得最佳性能,不要超过处理器数)。您不需要 SMP 机器来运行代码。注意:您应该重新安装 FFTW 以使用 openMP(请参阅安装文件)
包括一个线程驱动程序文件“drive_zscroll_reion_param.c”设置以执行再电离的天体物理参数研究
包括对 WDM 宇宙学的明确支持;参见 COSMOLOGY.H。处方与 Barkana+2001 中讨论的类似;Mesinger+2005,使 (i) 传递函数(根据 Bode+2001 公式;和 (ii) 使用 Jeans 质量类比包括 WDM 的有效压力项。(ii) 近似为 EPS 屏障中的急剧截止,使用在 Barkana+2001 中找到的 60* M_J(60 是通过拟合 WDM 折叠分数找到的调整因子)。
除了隐式 boxcar 平滑之外,对 perturb_field.c 的 PT 场进行高斯滤波步骤。这避免了具有“空”密度单元,即 delta=-1,分辨率有一些小的损失。尽管对于大多数用途来说 delta=-1 是可以的,但一些 Lya 森林统计数据并不喜欢它。
在计算电离场时增加了对来自 X 射线加热的残留电子分数的处理。相关地,修改 Ts.c 以输出所有中间进化框,Tk 和 x_e。
在对应于 eq 的 Ts.c 中添加了 Omega_b 的缺失因子。MFC11 中的 18 个。使用以前版本的用户应该注意,他们的结果只是有效地对应于更高的有效 X 射线效率,按 1/Omega_baryon 缩放。
对 Ts.c 进行归一化优化,提高大分辨率框的性能
固定的
GSL 版本 > 1.15 的 kappa_elec_pH 中的 GSL 插值错误
宏定义中的错字,影响 v1.11 中的 Lya 背景计算(不适用于早期版本)
在 drive_xHIscroll 中调用 gen_size_distr 时文件名语法过时
红移滚动,使 drive_logZscroll_Ts.c 和 Ts.c 同步。
改变了
避免所有框的 FFT 填充的输出格式
文件名约定更加明确。
组织和结构的微小变化
v1.1.0
添加
Cosmo_c_progs/misc.c 中的包装函数 mod_fwrite() 和 mod_fread(),它们应该解决某些操作系统上大文件 (>4GB) 库 fwrite() 和 fread() 的问题。
包含 print_power_spectrum_ICs.c 程序,它读取高分辨率初始条件并打印出带有相关功率谱的 ASCII 文件。
Ts.c 中用于最大允许动力学温度的参数,当红移步长和 X 射线效率很大时,它会增加代码的稳定性。
固定的
监督增加了对低分辨率场的高斯滤波器的支持。