跳转到主要内容

21cm信号的天体物理模拟半数值代码

项目描述

用于无线电21厘米信号的半数值宇宙学模拟代码。

joss-paper/yuxiangs-plot-small.png

这是21cmFAST的官方存储库:一个半数值代码,能够产生早期宇宙中许多物理场的3D宇宙学实现。它非常快,结合了逃逸集形式和扰动理论,以高效地生成密度、速度、晕、电离、自旋温度、21厘米,甚至电离通量场(见上面的光锥!)。它已经过广泛的数值模拟测试,在相关尺度上取得了非常好的结果。

21cmFAST已被广泛使用,例如,由Murchison宽场阵列(MWA)、LOw-Frequency ARray(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')

这里的同年代对象中不仅仅有

brightness_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

CLI可用于直接从配置文件或命令行参数生成磁盘上的盒子。您可以选择独立运行模拟的特定步骤,或一次运行整个模拟。例如,要仅运行初始密度场,可以这样做

$ 21cmfast init --HII_DIM=100

生成的(相当小)模拟盒子会自动保存到缓存中(默认情况下,在

~/21cmFAST-cache

)。您可以使用以下命令列出您缓存中的所有文件(以及每个模拟中使用的参数)

$ 21cmfast query

要运行整个同年代立方体,以下是一个示例

$ 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+,请引用以下两篇论文:

Murray 等人,(2020)。21cmFAST v3:用于生成宇宙21厘米信号的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, J.B.,Qin, Y.,Mesinger, A.,Murray, S.,Greig, B. 和 Mason, C.,“第一个星系对宇宙黎明和再电离的影响”,https://arxiv.org/abs/2110.13919(关于DM-重子相对速度)(2021年10月)

Qin, Y.,Mesinger, A.,Park, J.,Greig, B. 和 Muñoz, J. B.,“两个地点的故事 - I. 从当前观测推断迷你星系团宿主星系的特性”,皇家天文学会月报,第495卷,第1期,第123-140页(2020年),https://doi.org/10.1093/mnras/staa1131。(关于莱曼-沃纳和首次实现)(2020年)

质量相关的电离效率

Park, J.,Mesinger, A.,Greig, B. 和 Gillet, N.,“从星系光度函数和21厘米信号推断再电离和宇宙黎明的天体物理学”,皇家天文学会月报,第484卷,第1期,第933-949页(2019年),https://doi.org/10.1093/mnras/stz032。(2019年)

变更日志

开发版本

v3.4.0 [07 Aug 2024]

性能

  • 当从缓存读取数据时,仅读取必要的字段。

弃用

  • 不再支持 Python <3.9。

修复

  • 修复了 Lightcone.lightcone_coords 中的小问题。

  • 当设置 NON_CUBIC_FACTOR != 1 时出现错误。

  • 使用新的 matplotlib 版本并注册 cmap

  • 光锥插值中的小错误。

新增

  • 新增了 Lightconer 基类,包含面向用户的类 RectilinearLightconerAngularLightconer。这些现在是定义如何创建光锥的首选方法。请注意,这些 不是 最终的光锥对象,而只是创建光锥的“定义”。

  • Lightcone 类仍然存在,但现在由 AngularLightcone 类伴随,它是使用 AngularLightconer 定义时的输出光锥。

  • 新增 KEEP_3D_VELOCITIES 用户参数。如果您想将RSDs应用于 AngularLightcone,则该参数必须为 True。

  • 可以检查点光锥创建,以便稍后恢复。只需将 lightcone_fname 参数传递给 run_lightcone

  • 新增 cache_tools.get_boxes_at_redshift 函数,用于获取给定红移处的所有盒子,无论创建它们时使用的参数如何。

  • 新增 CosmoParams.from_astropy() 类方法,用于直接从astropy宇宙创建cosmo params对象。

内部

  • 将RSDs重构到 subcell_rsds.c C模块中。

  • 增加了文档教程的CI测试。

  • C代码中盒子的更精确的调试摘要。

修复

  • 绝热扰动的不正确符号。

  • 关于读取盒子的虚假警告。

  • 关于配置文件过时的虚假警告。

  • clang 和更新的 gcc 版本进行编译。

v3.3.1 [24 May 2023]

修复

  • 某些编译器的C代码编译(#330)

v3.3.0 [17 May 2023]

内部

  • 将输入设置到高级函数的改进,以减少代码重复。

修复

  • 当运行时R_BUBBLE_MAX过大,自动将其设置为BOX_LEN(#112)

  • 调用clear_cache时的错误。

  • 在低级代码(例如spin_temperature())和高级代码(例如run_coeval())之间处理演化最高红移的方式不一致。

新增

  • 新增validate_all_inputs函数,交叉引用四个主要输入结构,并确保所有参数组合合理。主要供内部使用。

  • 直接从打开的HDF5文件保存/读取的能力(#170)

  • 实现云单元格,更准确地重新分配扰动质量到所有相邻单元格,而不是之前的最邻近单元格方法

  • 将PhotonConsEndCalibz从z = 5更改为z = 3.5,以处理与当前观测结果一致的后期再电离场景(#305)

  • 添加对光子守恒的初始化检查,以解决早期EOR历史中出现的一些问题(#311)

  • NON_CUBIC_FACTOR添加到UserParams中,以允许非立方体等时代盒子(#289)

v3.2.1 [2022年9月13日]

更改

  • 在lightcone类中包含log10_mturnovers(_mini)。仅在USE_MINI_HALOS时有用

v3.2.0 [2022年7月11日]

更改

  • 现在在输出对象的哈希中用特定数量的有效数字表示浮点数。这修复了非常接近的红移值无法从缓存中读取的问题(#80)。注意,这意味着非常接近的astro/cosmo参数现在将从中读取缓存。这可能在创建具有许多随机参数的大型数据库时引起问题。此行为可以通过设置配置中的cache_param_sigfigscache_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和低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日]

新增

  • 能够访问所有进化等时代组件,无论是从端等时代类还是光锥。

  • 能够将一个等时代/光锥中的所有进化先祖收集到一个文件中。

  • UserParams中的FAST_FCOLL_TABLES,这在~<10%精度降低的情况下显著提高了速度。

  • 快速且低内存地生成相对速度(即vcb)初始条件。消除了高分辨率vcb盒子,因为它们从未需要。

  • 还输出平均自由路径(即IonizedBox中的MFP_box)。

  • 添加了DM重子相对速度对PopIII形成的小质量晕的影响。现在,这可以与LW反馈一起提供正确的背景演化。它导致了由相对速度波动引起的速度诱导声学振荡(VAOs)。我们还根据新的模拟结果,对小晕中的LW反馈采用更灵活的参数化,并添加了新的指数ALPHA_STAR_MINI,现在它独立于常规ACGs。

  • 新增hooks关键字到高级函数,这些函数在每个计算步骤完成后运行,可以更通用地写入数据的部分。

  • 可以将函数传递给write=以写入数据更具体的方面(内部,这将放入hooks字典)。

  • run_lightconerun_coeval通过在可能的情况下将初始条件和扰动场实例卸载到磁盘来显著减少内存使用。

修复

  • USE_RELATIVE_VELOCITIES=True时,2LPT存在错误[问题编号#191,PR编号#192]

  • 当红移不是升序时,会引发错误[问题编号#176,PR编号#177]

  • 在有些系统上使用USE_FFTW_WISDOM时出错[问题编号#174,PR编号#199]

  • ComputeIonizedBox中的错误导致Gamma12_box中的重新结合率变为负值和环形结构[问题编号#194,PR编号#210]

  • 确定智慧文件名时出错[问题编号#209,PR编号#210]

  • 缓存C基础内存被读取并释放两次的错误。

内部

  • 添加了dft.c,这使得进行所有三次FFT变得更加容易和一致。[PR编号#199]

  • 使用_get_box_structures以更通用的方式跟踪要在C和Python之间传递的数组,以及它们在Python中的形状。这也意味着可以在初始化和计算之前查询各种盒子。

  • 更严格的集成测试,测试每个数组,而不仅仅是最终的亮度温度。

  • 能够绘制集成测试数据,以便更容易地识别出错的地方(在pytest调用中使用--plots)。

  • 更友好的CLI界面为produce_integration_test_data.py。新增选项用于清理test_data/目录,并且测试数据通过用户定义的键而不是长字符串变量保存。

  • C调用之前的更友好的调试语句,以便轻松比较版本。

  • 更优雅的方法来跟踪数组状态(在内存中、在磁盘上、由c控制等)。

  • 能够以更精细的方式释放C基础指针。

v3.0.3

新增

  • coeval_callbackcoeval_callback_redshifts标志到run_lightcone。这允许在Coeval盒子中运行任意代码。

  • JOSS论文!

  • 在所有输出类上添加了get_fields类方法,以便可以轻松了解该类计算了哪些字段(以及可用)。

修复

  • 仅在实际上要使用时,才对不可用的external_table_path引发错误。

v3.0.2

修复

  • 添加了原型函数,以启用在MacOS上对某些标准编译器的编译。

v3.0.1

修改了21cmFAST的内部代码结构。

新增

  • 重构FFTW智慧创建为Python可调用的函数。

v3.0.0

对21cmFAST进行彻底的重构,包括健壮的Python包装器和接口、缓存机制以及具有持续集成的公共存储库。此版本中关于小晕特性的更改和方程可以在https://arxiv.org/abs/2003.04442找到

本版本实现了原始21cmFAST v2 C代码的所有功能,包括USE_HALO_FIELD和执行完整积分而不是使用插值表(这更快)。

新增

  • 更新了辐射源模型:(i) 考虑了包括X射线、紫外线电离、莱曼-韦尔纳和莱曼α在内的所有辐射场,来自两个分离的种群,即原子冷却(ACGs)和迷你暗物质晕宿主分子冷却星系(MCGs);(ii) 使用冷却效率和再电离以及莱曼-韦尔纳抑制的反馈来估计ACGs和MCGs的翻转质量。这可以通过新的flag_options USE_MINI_HALOS来开启。

  • 根据McQuinn(2015)的第6个方程更新了IGM的动能温度,完全电离的细胞遵循方程,部分电离的细胞具有离子化(体积:1-xHI;温度T_RE)和中性成分(体积:xHI;温度:HI的温度)之间的体积加权温度。这存储在IonizedBox中的temp_kinetic_all_gas。请注意,TsBox中的Tk仍然是HI的动能温度。

  • 测试:许多单元测试,还有一些回归测试。

  • 命令行界面(CLI):从命令行运行21cmFAST盒子,查询缓存数据库,并为标准比较运行生成绘图。

  • 文档:Jupyter笔记本演示和教程、常见问题解答(FAQ)、安装说明。

  • 绘图例程:一些通用绘图例程,旨在绘制同年代和光锥切片。

  • 新功率谱选项(POWER_SPECTRUM=5),使用基于CLASS的传递函数。警告:如果POWER_SPECTRUM==5,则无法更改宇宙参数,它们现在设置为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,以便通知用户出了什么问题。

  • 能够将高级数据(CoevalLightcone对象)直接写入文件,格式简单且易于携带。

更改

  • 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在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平滑外,对PT场进行高斯滤波步骤,以perturb_field.c中的扰动场。这避免了出现“空”密度单元,即delta=-1,虽然对于大多数用途delta=-1是可以的,但一些Lya森林统计不喜欢它。

  • 在计算电离场时,添加了对来自X射线加热的残余电子分数的处理。相关地,修改了Ts.c以输出所有中间演化盒子Tk和x_e。

  • 在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射线效率很大时,提高了代码的稳定性。

修复

  • 在添加对低分辨率场的Gaussian滤波器支持时疏忽。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

21cmfast-3.4.0.tar.gz (13.1 MB 查看哈希值)

上传时间: 源代码

由以下支持