---
title: "重算保存的 MESA 剖面与条件年龄"
description: "核对原生输出的身份与单位，重算球壳和风的贡献，再用物理时间先验估计一颗已知模型星的年龄。"
canonical_url: "https://sandboxphysics.com/zh/stories/stellar-evolution/native-mesa-age-tutorial/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/stellar-evolution/native-mesa-age-tutorial/"
last_modified: "2026-11-03"
---

[从压力与燃料读懂恒星演化](https://sandboxphysics.com/zh/stories/stellar-evolution/)

L3 · 恒星结构与演化

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

Sandbox Physics · 2026-11-03

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

## 开始前需要什么

需要 Python 3.12、NumPy 2.4.4、基本文件操作，并分清历史轨迹与保存的内部剖面。下面会从误差与取样时间开始介绍似然和先验。

## 解开小型科学材料包

从下方下载 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](https://zenodo.org/records/7069766) · [Anne Thoul and Morgan Chidester (2022), convective-boundary school solutions, Zenodo 7082536, CC BY 4.0](https://zenodo.org/records/7082536) · [Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0](https://zenodo.org/records/17765239) · [MESA School Leuven 2025 convergence labs, fixed ade5bca00e5caae97ac0b6f880f1de7ccead1553, CC BY-SA 4.0](https://github.com/VincentVanlaer/mesa-school-labs/tree/ade5bca00e5caae97ac0b6f880f1de7ccead1553)

## 先证明打开的是哪张剖面

打开 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](https://docs.mesastar.org/en/25.12.1/using_mesa/output.html) · [Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0](https://zenodo.org/records/7069766) · [Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0](https://zenodo.org/records/17765239)

## 拟合表面之前，先检查球壳

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

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

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

来源：[MESA 25.12.1, history, profile and restart output documentation](https://docs.mesastar.org/en/25.12.1/using_mesa/output.html) · [Keszthelyi et al., arXiv:2209.06350v1, rotating stellar grids and physical prescriptions](https://arxiv.org/abs/2209.06350v1)

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

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

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

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

$$
\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](https://zenodo.org/records/7069766)

## 按年积分，不按文件行数分概率

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

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

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

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

$$
p(t\mid\mathrm{HR},\mathrm{model})=\frac{\mathcal L(t)\,\pi(t)}{\int\mathcal L(t')\,\pi(t')\,dt'}
$$

分母把所用物理时间区间上的概率积分起来，归一后总概率为一。

$$
\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<t_{\min}\le t\le t_{\max}<\infty$ 上归一化。若把对数年龄先验一直延伸到零，就失去这里的有限归一化。

来源：[Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation](https://arxiv.org/abs/1601.05144v1) · [Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0](https://zenodo.org/records/7069766)

## 拟合很好，年龄仍然可以错

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

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

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

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

来源：[Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0](https://zenodo.org/records/7069766) · [Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation](https://arxiv.org/abs/1601.05144v1)

## 离开网站，再重算一个点

独立 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](https://docs.mesastar.org/en/25.12.1/using_mesa/output.html) · [Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0](https://zenodo.org/records/7069766)

## 重算保存的模型

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

- [stellar-evolution-science.zip](https://sandboxphysics.com/stories/stellar-evolution/materials/stellar-evolution-science.zip) 17.71 MB
- [README-science.md](https://sandboxphysics.com/stories/stellar-evolution/materials/README-science.md) 0.01 MB
- [include-manifest.json](https://sandboxphysics.com/stories/stellar-evolution/materials/include-manifest.json) 0.04 MB
- [extended-member-manifest.json](https://sandboxphysics.com/stories/stellar-evolution/materials/extended-member-manifest.json) 0.06 MB
- [extended-reference-results.json](https://sandboxphysics.com/stories/stellar-evolution/materials/extended-reference-results.json) 0.05 MB
- [app-reference-results.json](https://sandboxphysics.com/stories/stellar-evolution/materials/app-reference-results.json) 0.02 MB

精确字节、哈希与许可

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。

## 自己推一步

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

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

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

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

### [重现一个条件明确的合成年龄记录](https://sandboxphysics.com/zh/labs/stellar-hydrostatic-structure/)

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

## 原始来源

1. [Keszthelyi (2022), fixed reproduction package, Zenodo 7069766, CC BY 4.0](https://zenodo.org/records/7069766)
2. [Keszthelyi et al., arXiv:2209.06350v1, rotating stellar grids and physical prescriptions](https://arxiv.org/abs/2209.06350v1)
3. [MESA 25.12.1, history, profile and restart output documentation](https://docs.mesastar.org/en/25.12.1/using_mesa/output.html)
4. [Dotter (2016), MIST 0, arXiv:1601.05144v1, phase-aware track interpolation](https://arxiv.org/abs/1601.05144v1)
5. [Anne Thoul and Morgan Chidester (2022), convective-boundary school solutions, Zenodo 7082536, CC BY 4.0](https://zenodo.org/records/7082536)
6. [Kumar and Townsley (2025), fixed white-dwarf cooling reproduction package, Zenodo 17765239, CC BY 4.0](https://zenodo.org/records/17765239)
7. [MESA School Leuven 2025 convergence labs, fixed ade5bca00e5caae97ac0b6f880f1de7ccead1553, CC BY-SA 4.0](https://github.com/VincentVanlaer/mesa-school-labs/tree/ade5bca00e5caae97ac0b6f880f1de7ccead1553)

[上一篇：跟着燃料读懂恒星演化轨迹](https://sandboxphysics.com/zh/stories/stellar-evolution/following-fuel/) [下一篇：恒星模型的不确定度藏在哪里](https://sandboxphysics.com/zh/stories/stellar-evolution/reading-stellar-uncertainties/)
