跳到主要内容
Sandbox Physics
从压力与燃料读懂恒星演化

L3 · 恒星结构与演化

重算保存的 MESA 剖面与条件年龄

不安装 MESA,也能用科学材料包检查保存的恒星剖面,重算一个年龄区间。先从固定的 Keszthelyi 数据包 Zenodo 7069766 开始,选十个太阳质量、太阳邻域组成的第236号模型。它已知的源时钟约为一千七百四十万年。

解开小型科学材料包

从下方下载 stellar-evolution-science.zip,解压后进入 stellar-evolution-science 目录。里面有精确选取的输出成员、原始署名、输入清单与独立 Python 程序,不含网站 Engine 或应用 TypeScript。

追加材料来自三个固定的 CC BY 4.0 记录,共三十七个原始成员。其中沿用的 Fortran 扩展保留上游 LGPL 第二版或后续版本许可与原始头部。前面的十五个太阳质量收敛课例另有二十一个成员,使用 CC BY-SA 4.0。各组来源分别保留。重算已有输出是一项小型离线分析;生成新的恒星轨迹则是另一项计算。

两个参考程序在读表之前先检查哈希。测试也包含失败情形,JSON 报告保留了缺失的能量项、导入白矮星时的失败状态,以及独立留出模型的年龄失败。画图可另装 Matplotlib;数值重算本身只需要 NumPy。

python scripts/astronomy/ac25/run_reference.py
python scripts/astronomy/ac25/run_extended_reference.py
python scripts/astronomy/ac25/test_reference.py
python scripts/astronomy/ac25/test_extended_reference.py

来源:Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0 · Anne Thoul and Morgan Chidester (2022), convective-boundary school solutions, Zenodo 7082536, CC BY 4.0 · Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0 · MESA School Leuven 2025 convergence labs, fixed ade5bca00e5caae97ac0b6f880f1de7ccead1553, CC BY-SA 4.0

先证明打开的是哪张剖面

打开 extended-member-manifest.json,找到 Z14Mix1/0/10.0/prof_midMS.data 与配套的 out.data。清单给出原成员名、压缩包中的字节范围、CRC、解压长度与 SHA-256。保存时用了无损 XZ,容器另有自己的哈希;容器字节改变,原文没有改变。

剖面头部给出的模型号是 236。先在最终接受的历史分支里找到它,再比较时间。氦燃烧和白矮星还有 profiles.index,把剖面文件名接到模型号。一次重启可能让旧历史尾部整体失效,只删重复行,有时还会留下新分支从未走到的状态。

原始 inlist 与文件头都要读。大质量模型松弛过组成,头部的 initial_z 仍保留默认值,但太阳邻域的实际初始金属丰度是零点零一四。白矮星头部默认的初始质量和金属丰度,也不能确定前身。来源成员、模型号、时钟起点与原始哈希合在一起,才认得清这个模型。

来源:MESA 25.12.1, history, profile and restart output documentation · Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0 · Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0

拟合表面之前,先检查球壳

原生剖面的行从表面排到中心。当前行的壳内质量减去下一行,才得到这一层的质量;中心内侧的累计质量为零。每层质量、向外的径向厚度都应为正。再把氢比例乘球壳质量并求和,与源文件给出的总氢量比较。

还要检查另一种物理关系:密度乘球壳体积应给出质量,质量坐标上的压力差应对应重力。自转主序模型需要源文件记录的 fp_rot 因子;忽略它,压力梯度会留下百分之几的差别,保留修正后,内部差分残差小得多。

单位要跟着每一列走。剖面把反应功率记成线性数值,单位是每克每秒的能量。大质量历史里的 pp、cno 列则取了对数,光度单位为太阳光度。时间用年,原风速用厘米每秒。忘记取指数或换错太阳单位,曲线仍可能很平滑。

来源:MESA 25.12.1, history, profile and restart output documentation · Keszthelyi et al., arXiv:2209.06350v1, rotating stellar grids and physical prescriptions

制造一个知道真值的测量点

做反演时,先固定所选原生模型的初始质量、组成、自转、混合和风处方。只使用松弛之后、中心氢比例至少为 0.010.01 的保存分支。正的起始年龄与有限的终止年龄,定义了支持使用的时间区间。

用保存模型的表面温度与光度当真值。教程例子给温度对数加上 0.0040.004,给光度对数加上 −0.023-0.023,构成一个合成测量点。假定的独立误差分别为 0.010.01 和 0.050.05 dex。dex 表示以十为底的对数单位。

似然衡量每个候选年龄能多好地解释这个点。对于独立高斯误差,把温度与光度残差分别除以相应误差,再平方相加,就是卡方。卡方小,说明这条给定模型经过测量点附近,还不能证明模型族包含所有可能的恒星。

χ2(t)=[log⁡10Tmodel(t)−log⁡10Tobs0.01]2+[log⁡10Lmodel(t)−log⁡10Lobs0.05]2,L(t)∝e−χ2(t)/2\chi^2(t)=\left[\frac{\log_{10}T_{\mathrm{model}}(t)-\log_{10}T_{\mathrm{obs}}}{0.01}\right]^2+\left[\frac{\log_{10}L_{\mathrm{model}}(t)-\log_{10}L_{\mathrm{obs}}}{0.05}\right]^2,\qquad\mathcal L(t)\propto e^{-\chi^2(t)/2}
模型与合成测量采用相同的开尔文、太阳光度约定。这里给高斯误差设定了合成练习条件。分析真实恒星时,还得根据观测建立误差模型。

来源:Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0

按年积分,不按文件行数分概率

MESA 会自适应地选时间步长。变化很快的阶段,即使持续时间短,也可能留下很多行。如果每行分到同样的先验概率,单是把网格加密,就会改变年龄先验。

参考程序在每段保存时间之间,用线性的赫罗轨迹与 Gauss–Legendre 积分点计算。每个点代表多少物理时间,也进入概率权重。它在同一段有限、正的年龄区间里,比较物理时间均匀与对数时间均匀两种先验。

这个已知原生模型的例子中,均匀年龄先验给出的中位数约为 16.2 Myr16.2\,\mathrm{Myr},中心百分之六十八区间约为 14.4–17.7 Myr14.4\text{–}17.7\,\mathrm{Myr};已知真值约为 17.4 Myr17.4\,\mathrm{Myr}。一次有偏移的测量,不要求中位数恰好落在真值上。换成另一种归一化先验,结果会移动,报告保留了这项敏感性。

这个区间描述固定模型内部的推断,没有加入真实恒星观测。换一套自转、混合、大气或组成模型,需要相应的正向计算,也需要说明怎样给不同模型分先验概率。

p(t∣HR,model)=L(t) π(t)∫L(t′) π(t′) dt′p(t\mid\mathrm{HR},\mathrm{model})=\frac{\mathcal L(t)\,\pi(t)}{\int\mathcal L(t')\,\pi(t')\,dt'}
分母把所用物理时间区间上的概率积分起来,归一后总概率为一。
πage(t)=1tmax⁡−tmin⁡,πlog⁡age(t)=1tln⁡(tmax⁡/tmin⁡)\pi_{\mathrm{age}}(t)=\frac{1}{t_{\max}-t_{\min}},\qquad\pi_{\log\mathrm{age}}(t)=\frac{1}{t\ln(t_{\max}/t_{\min})}
两种先验都在 0<tmin⁡≤t≤tmax⁡<∞0<t_{\min}\le t\le t_{\max}<\infty 上归一化。若把对数年龄先验一直延伸到零,就失去这里的有限归一化。

来源:Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation · Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0

拟合很好,年龄仍然可以错

查看追加的 Monte Carlo 文件。每次试验都保存一个新的合成赫罗图测量、已知真值与年龄分位数。对一个十个太阳质量的原生真值,三百次试验中,标作百分之六十八的条件区间有二百零四次包含真值,百分之九十五区间有二百八十次。这是指定真值上的有限试验,不是对所有恒星的保证。

然后,把独立计算的十一个太阳质量、太阳邻域模型当真值,却只用十与十二个太阳质量、太阳邻域与小麦哲伦云组成这四个顶点去拟合。四个具名模型先验等权,各自的物理年龄先验在自己的支持区间内归一化。这里故意缺少真正的质量。

一个展示的例子里,真实时钟约为 14.94 Myr14.94\,\mathrm{Myr},四顶点后验中位数却约为 21.45 Myr21.45\,\mathrm{Myr}。三百次距离检查全部通过,标作百分之六十八的区间却只有六十八次包含真值。错误的质量与组成,也可能在错误的年龄解释同一个赫罗图位置。

交互课只在已知所选原生主序模型的条件下反演年龄。四顶点计算保留为模型缺失的可复算反例,不把这项偏差另塞成高斯误差,好让拟合统计量显得合适。

来源:Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0 · Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation

离开网站,再重算一个点

独立 Python 程序直接读取原始剖面与历史,先检查显示数值的舍入误差,再用 NumPy 计算两种先验。浏览器使用的有种子高斯测量,也能在这里重现。显示数据保留十二位有效数字,检验到的最大相对舍入差小于千亿分之一。

运行下面的命令,就能重算这份比较。换数据集时,也沿着同样的顺序走:固定版本与许可,读清模型号、时钟和单位,检查一条独立物理关系,写明时间与模型先验,最后留出真正独立的模型。先读一次失败结果,再相信很窄的区间。

python scripts/astronomy/ac25/generate_app_reference.py \
  --view-data docs/astronomy/ac25/native-atlas.json \
  --out docs/astronomy/ac25/rebuilt-app-reference.json

来源:MESA 25.12.1, history, profile and restart output documentation · Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0

重算保存的模型

小型材料包包含许可明确的原生 MESA 输出与独立 Python。用 Python 和 NumPy 即可离线运行;来源署名与各自的模型时钟都保留在包里。

精确字节、哈希与许可

stellar-evolution-science.zip
17713149 bytes
SHA-256 55b2bae2cca21a8ecb56461a922f62e07f7fe8217db4005abebe8c46455def36

README-science.md
10655 bytes
SHA-256 1b629f6b94b7c750927996fa8d4dfba6ebb6d668215c59c158f0abdb45477313

include-manifest.json
36365 bytes
SHA-256 d6ee560d65de4642b89fdfa8174f8dd565a34cd9120ae10122bd64bde0e0ee95

extended-member-manifest.json
63478 bytes
SHA-256 34f2072b76946fc580d8d6f416beaf3a759feca11b6391fab077b46fbafd9403

extended-reference-results.json
50847 bytes
SHA-256 b59b46b3e7b6daaf651cc9490051c7926c7ea83d9273b10eb24f77c8ac0660a4

app-reference-results.json
23179 bytes
SHA-256 32e6584facab015398a3d7685fd65745a23aac69b20e1b2cb70987ad0b9d50a9

原生图集数据使用 CC BY 4.0,较早的收敛教学输出使用 CC BY-SA 4.0;原 Fortran 扩展保留 LGPL 第二版或后续版本许可,新写的独立 Python 使用 MIT。包内不含网站 Engine 或应用 TypeScript。

自己推一步

为什么按历史文件每行等权,会给出不稳定的年龄先验?

行数受自适应时间步长影响。把一段很短的阶段加密,行数就增加,但这段物理时间没有变;逐行等权会无故增加它的概率。

卡方很小,能否证明四模型库包含真实质量与组成?

不能。不同正向模型可以在不同年龄经过相近的赫罗图位置。独立的十一个太阳质量试验,正好暴露了这种混淆和很差的区间覆盖。

重现一个条件明确的合成年龄记录

  1. 保持默认的已知主序模型,保存 JSON,比较模型、模型号、时钟与来源哈希。
  2. 保持合成测量点不动,切换两种归一化年龄先验,比较年龄区间。
  3. 设置种子,抽取一个合成点。保存测量值、实际种子与条件拟合,再用 Python 参考程序重算。

原始来源

  1. Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0
  2. Keszthelyi et al., arXiv:2209.06350v1, rotating stellar grids and physical prescriptions
  3. MESA 25.12.1, history, profile and restart output documentation
  4. Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation
  5. Anne Thoul and Morgan Chidester (2022), convective-boundary school solutions, Zenodo 7082536, CC BY 4.0
  6. Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0
  7. MESA School Leuven 2025 convergence labs, fixed ade5bca00e5caae97ac0b6f880f1de7ccead1553, CC BY-SA 4.0
反馈这个页面有错误、看不明白,或者缺了什么?告诉我们
反馈类型

提交时会附带本页地址、Lab ID、网站语言和设备类型。请不要填写个人信息。反馈最多保存 12 个月。隐私政策