跳到主要内容
Sandbox Physics

L2 · 方法指南

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

Sandbox Physics ·

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

压缩包的SHA256为 680ce195877487db5520cde1b4233fea89e91e46589daca562045feff24c4ef9。先修内容是前面几章的局部坐标、速度单位下的磁扰动、四条通道方程与中心空间差分。保存数据的密度、盒长各取一;旋转案例取 Ω=1/T0\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/T0K=0.6/T_0,末时刻为 3T03T_0,步长均为 0.0025T00.0025T_0。间距减半,投影向量误差依次缩小 3.9998383.999838 倍和 3.9999603.999960 倍。这就是上一章读过的空间比较。

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

KhT0=0.6sin⁡(2π/32)2π/32≃0.596152111,shT0≃0.661439531.\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.020.021505.00868381×10−105.00868381\times10^{-10}
0.010.013003.14769716×10−113.14769716\times10^{-11}
0.0050.0056001.97255936×10−121.97255936\times10^{-12}

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

固定网格上的实际时间细化向量误差,以及单独累计的中间阶段应力功残差

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

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

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

R(z)=1+z+z22+z36+z424,z=shΔt.\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}

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

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

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

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

dEhdt=qΩTh.\frac{dE_h}{dt}=q\Omega T_h.

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

ΔW=qΩΔt6×[Th(Y1)+2Th(Y2)+2Th(Y3)+Th(Y4)].\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}

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

rW=∣Eh(tf)−Eh(0)−W(tf)∣Eh(0).r_W=\frac{|E_h(t_f)-E_h(0)-W(t_f)|}{E_h(0)}.

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

E^h(0)≃1.10819394×10−8,E^h(tf)≃5.86371701×10−7,W^(tf)≃5.75289762×10−7.\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}

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

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

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

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

∇⋅Bphys=∂xBphys,x+∂yBphys,y+∂zBphys,z.\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×3×N3\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,给出局部线性方程和增长关系。原始扫描件。Stone与Gardiner,arXiv:1006.0139v1,第II–III节,尤其式11–18与第III.2节,讨论局部源项、本轮能量和做功;第IV–V节涉及额外的边界与磁通问题。固定版本。Athena++官方剪切盒手册分别说明径向剪切周期、绕转周期以及可另行选择的竖直边界。

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

动手检验预测

分开时间误差与空间误差

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

继续阅读

这一页直接连着哪些内容

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

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

  1. 文章吸积盘的角动量由谁向外送?
  2. 文章旋转小区域里的四个实场
  3. 文章先算增长,再跟着能量检查
  4. 文章竖直网格为什么会改变线性通道
  5. 当前页面怎样检验增长、传输与剪切功
  6. 文章从保存的场数据检查 MRI 计算
  7. 文章从线性增长读到 MRI 湍流的去留
这个页面有错误、看不明白,或者缺了什么?告诉我们
反馈类型

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