---
title: "怎样检验增长、传输与剪切功"
description: "分开空间与时间误差，比较中间阶段应力功和场能量，并读清通道散度检查的适用范围。"
canonical_url: "https://sandboxphysics.com/zh/stories/magnetorotational-instability/checking-growth-and-shear-work/"
language: "zh-CN"
page_type: "story"
alternate_languages:
  en: "https://sandboxphysics.com/stories/magnetorotational-instability/checking-growth-and-shear-work/"
last_modified: "2026-11-12"
---

L2 · 方法指南

# 怎样检验增长、传输与剪切功

Sandbox Physics · 2026-11-12

一条增长曲线要站得住，需要几种检查指向同一组场：网格细化检查空间导数，时间步细化检查时间推进，应力则应当供给场增加的能量。把配套的 [linear-channel-replay-public.zip](https://sandboxphysics.com/zh/stories/magnetorotational-instability/materials/linear-channel-replay-public.zip) 放在旁边，我们沿着案例结果与保存场逐项读下去，看看原来的十一组案例、四十五项检查究竟说明了什么。

压缩包的SHA256为 680ce195877487db5520cde1b4233fea89e91e46589daca562045feff24c4ef9。先修内容是前面几章的局部坐标、速度单位下的磁扰动、四条通道方程与中心空间差分。保存数据的密度、盒长各取一；旋转案例取 $\Omega=1/T_0$。下面只检查已有记录与解析极限，无须生成新轨迹。

## 先找场数组，再读原来的结果

包内 manifest.json 用字节数和SHA256标识其余299个成员。指纹吻合，说明拿到的是保存的那个文件；物理是否正确，还要另看。原始 records/receipt.json.gz 列出十一组案例、预先规定的四十五项检查、各自限值、实际值与状态。其中两项限制资源开销。除了末尾的通过标志，还应读误差本身。

每个案例目录中的编号压缩JSON，保存时刻、四组完整场数组、能量与应力诊断、累计剪切功，以及四个基本模态投影。case-returned.json.gz 则保存比较之前返回的案例结果。原计算使用Python3.14.3。包内的标准库程序 source/inspect\_saved.py 可以核实已有成员，再从全部277帧场数组重算能量和应力。这是读取现成数据，不是重新模拟，也不承诺换一台电脑重新演化后仍逐位相同。

独立读数程序直接对数组求和，能检查显示的诊断量是否属于那些场。它不会重新推进导数，也不能从间隔较大的保存帧恢复每一步内部的中间状态。读到后面的做功检查时，要记住这个区别。

## 把空间误差和时间误差拆开

先查看 spatial-64、spatial-128 与 spatial-256。三组采用同一个连续增长初态，$K=0.6/T_0$，末时刻为 $3T_0$，步长均为 $0.0025T_0$。间距减半，投影向量误差依次缩小 $3.999838$ 倍和 $3.999960$ 倍。这就是上一章读过的空间比较。

现在换一个问题：空间导数已经换成差分后，时间积分器能多准确地推进这组方程？固定32个样本，其基本波形满足

$$
\begin{aligned}
K_hT_0&=0.6\frac{\sin(2\pi/32)}{2\pi/32}\\
&\simeq0.596152111,\\
s_hT_0&\simeq0.661439531.
\end{aligned}
$$

三组时间案例用网格方程自己的本征向量和精确指数作参考。若仍与原来的连续增长率比较，即使时间步无限缩小，空间误差也不会消失，可能遮住时间方法的阶数。返回JSON的 referenceKind 把三组时间案例标为 semidiscrete-eigenmode，其余八组标为 continuum；expectedReferenceProjection 保存所选参考向量。这两个字段要一起读，初态与指数的具体设置见 source/qualify.py。

| 时间步除以时间单位 | 到共同末时刻的步数 | 实际投影向量误差 |
| --- | --- | --- |
| $0.02$ | 150 | $5.00868381\times10^{-10}$ |
| $0.01$ | 300 | $3.14769716\times10^{-11}$ |
| $0.005$ | 600 | $1.97255936\times10^{-12}$ |

相邻误差之比为 $15.912216$ 和 $15.957427$。四阶收敛范围内，步长减半应带来约 $2^4=16$ 倍的缩小，实际结果支持这个判断。最小误差已很接近浮点效应可能影响的量级；继续细化后怎样变化，还得重新比较，不能一直除以十六当作实测结果。

![固定网格上的实际时间细化向量误差，以及单独累计的中间阶段应力功残差](https://sandboxphysics.com/_astro/05-time-and-work.zh.desktop.CyKotJ5S.svg)

两幅图都取自同一组32样本时间案例。上图比较保存投影与精确网格模态，虚线是从最粗结果出发的四阶参考。下图用独立计算的端点能量，与时间步骤中累计的应力功比较，再除以初始能量；点虚线为原有做功检查的限值。两种误差都无量纲，但定义不同，数值大小无须相同。

## 例题：为什么预期缩小十六倍

纯增长网格本征模态经过一步经典四阶Runge–Kutta推进，振幅乘以

$$
\begin{aligned}
R(z)={}&1+z+\frac{z^2}{2}\\
&+\frac{z^3}{6}+\frac{z^4}{24},\\
z={}&s_h\Delta t.
\end{aligned}
$$

精确乘数为 $e^z$，少掉的首项是 $z^5/120$。总时长固定时，步数与步长成反比，累计相对振幅误差便是步长的四阶。这样才知道为什么拿十六作比较，而不只是给三个点拟合一条线。

从最粗的实际误差出发，步长减半后可预期约 $3.1304\times10^{-11}$，实际则为 $3.1477\times10^{-11}$。首项估计没有包括所有高阶项，不必逐位吻合，但应解释缩小的幅度与数量级。这里用解析乘数检查一个线性模态，没有把保存的空间计算换成另一段新演化。

## 独立计算应力功与端点能量

把一帧场的总向外应力写成 $T_h=T_{{\rm Re},h}+T_{{\rm Max},h}$。时间仍连续的网格方程满足

$$
\frac{dE_h}{dt}=q\Omega T_h.
$$

保存程序按四个Runge–Kutta中间阶段的应力累计功，再单独计算末初能量差，与功比较。如果一步中的四组完整场为 $Y_1,\ldots,Y_4$，这一步贡献

$$
\begin{aligned}
\Delta W={}&\frac{q\Omega\Delta t}{6}\\
&\times\bigl[T_h(Y_1)+2T_h(Y_2)\\
&+2T_h(Y_3)+T_h(Y_4)\bigr].
\end{aligned}
$$

能量密度则从实际场样本的平方单独求和。两者虽然共用同一段数值场历史，做功的定义却没有借用端点能量差。原有比较量为

$$
r_W=\frac{|E_h(t_f)-E_h(0)-W(t_f)|}{E_h(0)}.
$$

最粗时间案例中的无量纲能量与功约为

$$
\begin{aligned}
\widehat E_h(0)&\simeq1.10819394\times10^{-8},\\
\widehat E_h(t_f)&\simeq5.86371701\times10^{-7},\\
\widehat W(t_f)&\simeq5.75289762\times10^{-7}.
\end{aligned}
$$

帽号表示除以参考能量密度 $\rho_0L_0^2/T_0^2$，其中 $\rho_0$ 是所选参考密度。使用未舍入数，得到 $r_W=3.28304\times10^{-8}$，低于预先规定的 $10^{-7}$ 限值。上面展示的圆整数不能恢复这么小残差的末位。最细时间案例为 $1.29096\times10^{-10}$。这里衡量的是有限步长误差，舍入级的精确能量守恒需要另作检验。

刚性转动提供另一种对照：末时刻应力不为零，但 $q=0$，剪切功率与累计剪切功为零，普通扰动能量保持不变。无磁场的开普勒案例则检查本轮振荡不变量 $u_x^2+4u_y^2$，不是要求普通动能不变。分清两种极限，有助于发现转动源项的符号或数值处理出了错。Stone与Gardiner固定版本的第III节讨论过人为放大的本轮振荡；他们的守恒时间算法，与这组通道采用的Runge–Kutta方法不同。

## 散度为零，要放回实际检验的几何中理解

密度均匀时，从速度单位换回物理磁场只需给每个分量乘同一个常数，零散度保持不变。磁场散度对每个分量沿自身方向求导，

$$
\begin{aligned}
\nabla\cdot\mathbf B_{\rm phys}
&=\partial_x B_{{\rm phys},x}\\
&+\partial_y B_{{\rm phys},y}\\
&+\partial_z B_{{\rm phys},z}.
\end{aligned}
$$

这组通道的水平分量只随高度变化，水平方向均匀，竖直背景分量恒定。式中三项各自为零。径向场沿高度变化，不会自动变成沿径向的导数。程序把同一个通道复制成周期 $3\times3\times N$ 数组，再对表示出的磁场作差分；所有案例的最大散度恰好为零。

这个结果检查上述假设和周期下标在数组中是否得到正确表示，没有推进一般多维感应方程，也没有检验约束输运法。Athena如何处理径向剪切边界与磁通，是Stone与Gardiner第IV–V节及官方手册中的另一类问题。径向重映射需要另设具有水平变化的实验。

## 把这几问带到下一次计算

**1．时间步继续缩小，与连续波的误差却不再下降，先检查什么？** 固定网格，改与网格自己的精确模态解比较。时间误差很小时，空间误差仍会留下。之后再保持同一个物理初态，单独细化空间网格。

**2．如果把功保存成末初能量差，很小的做功残差能说明什么？** 只能说明这次赋值。要作有意义的比较，应像这里一样单独累计源项，再从场样本独立计算能量。

**3．保存通道的散度全为零，能据此证明任意三维MHD都正确吗？** 不能。先问测试里哪些导数真正不为零。这里没有水平梯度，竖直磁分量也不变，没有考验一般感应求解器必须维持的抵消关系。

**4．完整的原结果允许复用什么？** 十一组指定的线性周期案例、实际数组、固定比较和声明的容差。检查另一份计算时，也要写清单位与几何、找准参考，分别改变空间和时间分辨率，比较传输与能量变化，并选取能移除该机制的极限。非线性饱和与全局吸积率，还需要另外的模型和证据。

## 来源

Balbus与Hawley1991，ApJ376，214–222，印刷页216–218的式2.2、2.5–2.9及2.13–2.14b，给出局部线性方程和增长关系。[原始扫描件](https://articles.adsabs.harvard.edu/pdf/1991ApJ...376..214B)。Stone与Gardiner，arXiv:1006.0139v1，第II–III节，尤其式11–18与第III.2节，讨论局部源项、本轮能量和做功；第IV–V节涉及额外的边界与磁通问题。[固定版本](https://arxiv.org/html/1006.0139v1#S3)。[Athena++官方剪切盒手册](https://github.com/PrincetonUniversity/athena/wiki/Shearing-Box)分别说明径向剪切周期、绕转周期以及可另行选择的竖直边界。

所有数值均来自固定指纹的 linear-channel-replay-public.zip、原始案例结果与277帧场。这里的检查只读取保存场并计算解析表达式，没有运行Athena，没有新增演化步，也不表示一般非线性MHD已经通过检验。

## 动手检验预测

### [分开时间误差与空间误差](https://sandboxphysics.com/zh/labs/magnetorotational-instability/)

1. 先预测固定网格、时间步减半后的误差比。
2. 把三组时间案例与各自采用的网格模态参考比较。
3. 读取向量误差、端点能量与单独累计的中间阶段应力功。
4. 解释四阶误差比，并指出均匀通道的散度检查实际考验了什么。

## 继续阅读

磁张力怎样放大吸积盘中的扰动 · 阅读路径

### 磁张力怎样放大吸积盘中的扰动

1. [文章 **吸积盘的角动量由谁向外送？**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/who-carries-angular-momentum/)
2. [文章 **旋转小区域里的四个实场**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/four-fields-in-a-rotating-patch/)
3. [文章 **先算增长，再跟着能量检查**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/growth-stress-and-energy/)
4. [文章 **竖直网格为什么会改变线性通道**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/why-a-vertical-mesh-changes-a-channel/)
5. [当前页面 **怎样检验增长、传输与剪切功**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/checking-growth-and-shear-work/)
6. [文章 **从保存的场数据检查 MRI 计算**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/check-saved-mri-fields/)
7. [文章 **从线性增长读到 MRI 湍流的去留**](https://sandboxphysics.com/zh/stories/magnetorotational-instability/read-beyond-linear-mri/)
