---
title: "怎样检查一列数值波是不是激波"
description: "用实际完整网格场重算细化误差，再读取跳变、传播分支和熵底噪，保留无分辨激波的结果。"
canonical_url: "https://sandboxphysics.com/zh/stories/agn-feedback/reading-wave-and-shock-evidence/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/agn-feedback/reading-wave-and-shock-evidence/"
last_modified: "2026-11-12"
---

[跟着能量走过黑洞气泡与星系团气体](https://sandboxphysics.com/zh/stories/agn-feedback/)

L3 · 气泡、波与星系团加热

# 怎样检查一列数值波是不是激波

Sandbox Physics · 2026-11-12

打开下载包里的gentle-wave-convergence.json。它保存同一温和源的空间、时间比较，以及四个激波检验时刻。先重算场误差，再看候选波前的证据，就能理解为什么一列可用的压强波仍然没有通过激波检验。

## 开始前需要什么

需要前面关于熵、壳层和匹配冷却的概念。独立复算需要Python3.12和NumPy2.3.5；没有演化方程求解器或交互Lab Engine。

## 先固定正在比较的两个物理问题

第一份球对称气体在引力中冷却，并在第十八至十九百万年接收一笔中心热释放；第二份从相同初态出发，只冷却。热源能量来自十八百万年总输入的百分之五，功率、时间和空间核始终固定。

空间比较使用二千零四十八与四千零九十六个径向单元。时间比较把同一四千零九十六网格的CFL系数从零点三五减半到零点一七五。这个系数限制单步中最快信号能跨过多少个单元。它们都从初态算到六千万年，没有从一个较晚时刻续接。

每份球面记录保留覆盖零至六千万年的十二个预先指定完整场、三百三十四行积分量，以及八十一帧波前候选诊断。完整场按预先指定的十二个时刻保存；每个被接受的步都经过守恒和物理范围检查。

对应阅读：Sandbox Physics

## 单元平均不能当作中心点样本

每个有限体积单元保存一段球壳的平均状态。细网格两个单元合成一个粗单元时，要按实际球壳体积相加。简单把两点做算术平均，会忽略外侧单元通常占据更大的体积。

先分别重建两份气体的密度、径向速度与压强，再取热脉冲减去匹配纯冷却的差。把细网格差值按体积投影到粗网格，才与粗解比较。独立脚本使用逐壳层积分，避免沿用原生产脚本的稠密重叠矩阵。

$$
\overline f_C=\frac{1}{V_C}\sum_{j\subset C}V_j\overline f_j,\qquad V_j=\frac{4\pi}{3}\left(r_{j+1}^3-r_j^3\right)
$$

这里的量分别比较，不把速度、压强与密度混成一个带单位的和。

## 先读分母，再看百分比

场误差用绝对差的体积积分，除以脉冲相对冷却的实际信号积分。每个保存时刻、每种变量都独立计算，最后取最大值。最早三个时刻尚未释放热源，信号严格为零，此时检查绝对误差，而不是除以任意很小的数。

$$
e_f(t)=\frac{\sum_C V_C\left|\delta f_C^{\rm coarse}-\mathcal P\delta f^{\rm fine}_C\right|}{\sum_C V_C\left|\mathcal P\delta f^{\rm fine}_C\right|}
$$

差值取热脉冲减纯冷却，投影按球壳体积完成。原空间门为百分之五；同网格半时间步门为百分之一。

| 实际比较 | 最大相对场误差 | 结果 |
| --- | --- | --- |
| 512至1024 | 0.178 | 空间失败 |
| 1024至2048 | 0.0794 | 空间失败 |
| 2048至4096 | 0.0332 | 空间通过 |
| 4096半时间步，原粗网格投影定义 | $4.68727\times10^{-6}$ | 时间通过 |
| 4096半时间步，原生细网格附加比较 | $4.85967\times10^{-6}$ | 时间通过 |

对应阅读：Sandbox Physics

## 波形要接上同一条传播分支

画面里可能同时有几个压缩带。若每帧都选“最强”的峰，一条波变弱、另一条变强时，所选位置可能突然跳走。把这两个位置差分，会得到一个根本没有波前真正走过的速度。

诊断因此保留所有窗口内密度相对初始背景的负梯度极小，并要求最小值有左右两侧括住。相邻四分之一百万年帧之间，还要用实际上游流速、声速和预先给定的弱激波马赫范围，寻找唯一的双向关联。关联不唯一、峰换支或更强肩部被窗口截断时，这一帧的候选速度不可用。

这种关联只是局部运动学一致性。它不自动把候选峰变成激波，也不把几个相隔很远的检验点强行连成同一条轨迹。

对应阅读：Sandbox Physics

## 把熵信号放到正确的底噪旁边

直接的热释放与冷却本来就会改变熵。求解器运输一份随气体移动的源修正标签，把这些已声明源项从额外熵诊断中分开。然后再把候选后方的额外熵，与声学对照、匹配冷却、空间差和时间差中最大的底噪比较。

四个时刻的底噪现在都由匹配冷却对照主导。三千万年时，额外熵约为十二点一乘十的负十次方，底噪约为五点六七乘十的负八次方，两者比例只有零点零二一三四。原要求是大于十，差距很大。二千六百万年时的微小负值也保留；这点微小负值落在底噪内，按数值未分辨处理。

| 时间（百万年） | 额外熵/原底噪 | 原RH跃升相对误差 |
| --- | --- | --- |
| 26 | −0.126 | 0.709 |
| 30 | 0.0213 | 0.367 |
| 34 | 0.0247 | 0.458 |
| 38 | 0.0277 | 0.304 |

对应阅读：Sandbox Physics

## 数值波通过了，激波条件仍失败

候选首先要远离热源及采样宽度，并呈压缩性。再检查马赫数略大于一且不超过一点三，密度与压强跃升也要相符。最后检查传播与声速数值不确定性的分离，以及熵是否明显超过底噪。还必须在四个指定时刻中至少两个相邻检验点通过。

这里四点都未通过跃升、声速分离和熵条件。加密后的脉冲减纯冷却后密度扰动梯度的半高宽约为零点三八至零点六一千秒差距，跨约十九至六十五个局部单元。这些是描述波形的宽度，不是已经拟合出的不连续面厚度。

另外的均匀理想气体RH参考确实通过了独立检验，但它没有使用这份AGN热源。它说明求解器能处理规定的弱激波比较问题，不替代当前物理情景的激波条件。

对应阅读：Sandbox Physics · Forman et al. (2007)

## 在自己的电脑上重算两个场误差

下载完整记录、原生细化输入ZIP、来源清单、收敛结果和独立脚本。ZIP内原始NPZ字节与来源逐项相符；记录保留完整四千零九十六径向单元和十二个实际时间，不降采样或插值。

运行后，空间最大误差约为零点零三三二一四九四，原粗投影时间误差约为百万分之四点六八七。两个最大值都落在最后一个时刻的速度列，早时零信号误差为零。脚本重算这些场范数；每步守恒、参考算例和激波识别仍由各自保存的结果说明。

```
            python3.12 -m venv .venv
. .venv/bin/activate
python -m pip install numpy==2.3.5
python reproduce-wave-refinement.py --materials . --output local-wave-check.json
          
```

对应阅读：Sandbox Physics

## 下载独立科学材料

完整记录和原生细化输入保留每个已保存径向单元与时刻。独立脚本检查数据身份，并重算实际场范数。

[确切字节、SHA256与许可清单](https://sandboxphysics.com/stories/agn-feedback/public-reproduction.json)

- [LICENSE-code.txt](https://sandboxphysics.com/stories/agn-feedback/materials/LICENSE-code.txt)

  1,362 bytes · Original calculation/documentation with attribution; see license notices

  `96630e05864696f836e37b8b3c5abf777a90485dbd8737d21eadd44ce0235613`

- [LICENSE-data.txt](https://sandboxphysics.com/stories/agn-feedback/materials/LICENSE-data.txt)

  1,054 bytes · Original calculation/documentation with attribution; see license notices

  `67ae54be72c18d72a70cb63400f912e5e31d43c36938aef6504bd89543e20223`

- [gentle-wave-convergence.json](https://sandboxphysics.com/stories/agn-feedback/materials/gentle-wave-convergence.json)

  47,943 bytes · Original simulated numerical outputs; attribution grant LICENSE-data.txt

  `3b55a6e37a37c5debe3b56843d9f7b7fd8c713b210a5483199fdea1305748e1e`

- [reproduce-wave-refinement.py](https://sandboxphysics.com/stories/agn-feedback/materials/reproduce-wave-refinement.py)

  6,633 bytes · MIT; LICENSE-code.txt

  `4ee1c692c5c1243cca1eeb7422d996b64eb0ae26e5233108f5084611e9319d2b`

- [validate-records.py](https://sandboxphysics.com/stories/agn-feedback/materials/validate-records.py)

  3,382 bytes · MIT; LICENSE-code.txt

  `f89262e63c4f4352ef1ff3f9a19f396045acfddd9e7bee4a921c558a633a1dd6`

- [wave-refinement-expected.json](https://sandboxphysics.com/stories/agn-feedback/materials/wave-refinement-expected.json)

  4,574 bytes · Original simulated numerical outputs; attribution grant LICENSE-data.txt

  `15e692ba0b761d78eac6e59bab4f25689b82a6b4edad42652b1a287617d0148e`

- [wave-refinement-inputs.zip](https://sandboxphysics.com/stories/agn-feedback/materials/wave-refinement-inputs.zip)

  4,542,941 bytes · Original simulated numerical outputs; attribution grant LICENSE-data.txt

  `cea357cad48784dcd8e0ce1283c2ce69e5cba6cc34023e7f519433859e9d30a2`

- [wave-refinement-manifest.json](https://sandboxphysics.com/stories/agn-feedback/materials/wave-refinement-manifest.json)

  3,753 bytes · Original simulated numerical outputs; attribution grant LICENSE-data.txt

  `bdce85295190991805578c19b26cc772b381439b40587c6c43320fd28abeee4a`

- [accepted-records.json.gz](https://sandboxphysics.com/stories/agn-feedback/materials/accepted-records.json.gz)

  2,869,078 bytes · Original full-precision simulated output; attribution grant LICENSE-data.txt

  `2a81501bed03e97dbf5ed6df9ef96b6e452669eed7bb628d98e530c35dc8c236`

## 亲手观察

### [读完整波形，别只追一条圈](https://sandboxphysics.com/zh/labs/agn-cavity-transport/)

1. 在声波页选择三千万年，沿半径移动取样点，辨认不止一处压缩与稀疏。
2. 逐帧比较完整压力曲线，检查候选波前是否保持身份。
3. 把压缩波的可见性与展开区域中的激波条件分别说明。

### [到另一个物理问题里看激波关系](https://sandboxphysics.com/zh/labs/supernova-remnant-shocks/)

1. 阅读该页自己的初始条件和近似。
2. 比较其激波跃升与这里的温和热脉冲，不合并两者能量输入。

## 练习与答案

半时间步误差已经很小，为什么还要增加空间网格？

两个误差来自不同离散。原来的时间比较很小，空间场误差却曾超过百分之十；缩短时间步之后，有限空间分辨率仍会影响波形。

把每帧最大的梯度位置连起来，为什么可能得到假的超声速？

最大值可能从一条波切到另一条。差分会把两条分支的间距当成单一波前在相邻帧内走过的距离。

[上一篇：用英仙座的一对空腔复算能量与冷却](https://sandboxphysics.com/zh/stories/agn-feedback/perseus-cavity-replay/) [下一篇：从冷凝、宇宙线和XRISM追问黑洞如何加热](https://sandboxphysics.com/zh/stories/agn-feedback/condensation-feedback-and-nonthermal-pressure/)

## 一手来源与计算说明

1. [Forman et al. (2007), Filaments, bubbles, and weak shocks in the gaseous atmosphere of M87](https://arxiv.org/abs/astro-ph/0604583v2)

   M87中密度与温度跃升共同支持弱激波解释。这里把它作为另一个天体的观测对照，不给温和脉冲标定。

2. [Sandbox Physics, frozen gentle-source numerical evidence (2026)](https://sandboxphysics.com/stories/agn-feedback/materials/wave-refinement-manifest.json)

   实际512/1024/2048/4096细化历史、原激波条件与匹配对照。源功率和科学门保持不变，最终仍无分辨的AGN激波。
