跳到主要内容
Sandbox Physics

L3 · 方法指南

从保存的场数据检查 MRI 计算

Sandbox Physics ·

检查一次小型 MRI 计算,可以从四组保存的场数据开始:先在每个高度算出动量通量,再把剪切做的功与扰动能量的增加相比较。下载包里有十一组已经算完的线性通道实验。下面先用两个只读命令检查旧结果,不推进时间。

要回答的问题很具体:场值、应力与分辨率误差,能否对应同一次计算?

公开版调整了文件路径和参考标签。原始852,417字节的离线包SHA-256为8e5918ecefd472a171ce7a7a17c2ae44659a71db9e3ac36bf2c4d1aac9e2972c。这里的277个压缩场帧与原包逐字节相同。元数据版本也实际检查运行了一次,计时4.24秒、驻留内存峰值25,296,896字节;下载包内包含所用源码和明确标注为摘录的计时说明。

打开指定版本的离线包

下载 linear-channel-replay-public.zip,文件大小为 849,925 字节;再下载独立的保存场测量脚本。把两个文件放进一个新的工作目录。ZIP 的 SHA-256 应为:

680ce195877487db5520cde1b4233fea89e91e46589daca562045feff24c4ef9

原计算使用 Python 3.14.3。准备好这个版本后,运行:

shasum -a 256 linear-channel-replay-public.zip

unzip linear-channel-replay-public.zip -d mri-replay

cd mri-replay

python3 -I -B source/inspect_saved.py --bundle .

python3 -I -B ../measure_saved_fields.py --bundle . --out ../field-measurements.json

两个脚本都只用 Python 标准库。解压前先比较校验值。包内检查器会检查清单中的 299 个文件和 277 帧场数据,输出 PASS_SAVED_FIELD_INSPECTION_ONLY,并注明 newTimeSteps: 0。独立测量脚本也先验证全部文件的校验值,随后从四组数组重新算能量、应力和傅里叶系数,输出 PASS_READ_ONLY_FIELD_MEASUREMENTS。输出文件名必须尚未存在。

ZIP 一共有 300 个成员;manifest.json 没有把自身列进校验清单。source/ 中的四个文件包含演化和检查代码,records/receipt.json.gz 保存原来的十一组实验及 45 项通过的比较。今天重新检查保存数据,并没有重新运行当时的演化。原来受外部程序监督的计算耗时 4.67 秒,内存峰值为 26,001,408 字节。这是那台机器上的实测值,其他电脑的运行时间可以不同。

先读一帧,再读增长曲线

用支持 gzip 的 JSON 阅读工具打开 records/keplerian-fastest/00600.json.gz。它保存代码时间 1.5 的场。field 从前到后依次是径向速度扰动、方位速度扰动、径向磁扰动和方位磁扰动,每组都有 256 个采样点。下标 0 位于周期竖直区间的起点,下标 64 位于四分之一波长处。

坐标 xx 指向径向外侧,yy 沿轨道转动方向,zz 沿竖直方向。磁扰动换成了速度单位:

bx=δBxμ0ρ,by=δByμ0ρ.b_x=\frac{\delta B_x}{\sqrt{\mu_0\rho}},\qquad b_y=\frac{\delta B_y}{\sqrt{\mu_0\rho}}.

其中 ρ\rho 是均匀密度,μ0\mu_0 是磁导率。速度随高度按正弦变化,磁扰动按余弦变化。流体没有竖直速度,背景竖直磁场保持恒定。空间求解器推进的是周期网格上的四组数组,竖直导数由相邻网格点求出。

要换回物理单位,先选定箱体高度 LL、参考频率 Ωref\Omega_{\rm ref} 和密度 ρ\rho。保存的高度区间长度为一,时间单位为 Ωref−1\Omega_{\rm ref}^{-1},速度单位为 LΩrefL\Omega_{\rm ref}。保存的能量密度或应力乘以 ρL2Ωref2\rho L^2\Omega_{\rm ref}^2,才得到物理单位下的数值;代码中的密度为一。

记录的 tension 是频率 K=kvAK=kv_A 在这套固定单位下的数值,kk 为竖直波数,vAv_A 为背景阿尔芬速度。旋转参考实验取 Ω=Ωref=1\Omega=\Omega_{\rm ref}=1,因此数值也等于 K/ΩK/\Omega。不旋转的阿尔芬实验取 Ω=0\Omega=0,tension 仍为 0.8,时钟仍以 Ωref\Omega_{\rm ref} 为准。把它除以局部的零转速,会丢掉这个极限实验本来的含义。

时间1.5保存的四个场,以及同一高度上组成雷诺和麦克斯韦应力的乘积

实际保存的四个场分量,以及同一高度上的两种应力乘积;窄屏使用另绘版式。

下标 64 处,两个速度约为 3.08033×10−43.08033\times10^{-4} 和 3.07998×10−43.07998\times10^{-4}。两个磁扰动接近零,因为这里的余弦为零;它们的峰值在相隔四分之一波长的位置。只看速度箭头,无法判断磁应力在哪里最大。图中的曲线直接取自这一帧,没有补算新的演化。

把同一高度的分量相乘

在有 NN 个等距采样点的网格上,计算

E=ρ2N∑j=0N−1[ux,j2+uy,j2+bx,j2+by,j2],TR=ρN∑jux,juy,j,TM=−ρN∑jbx,jby,j.\begin{aligned} E&=\frac{\rho}{2N}\sum_{j=0}^{N-1} \Bigl[u_{x,j}^2+u_{y,j}^2\\ &\qquad\qquad{}+b_{x,j}^2+b_{y,j}^2\Bigr],\\ T_{\rm R}&=\frac{\rho}{N}\sum_j u_{x,j}u_{y,j},\\ T_{\rm M}&=-\frac{\rho}{N}\sum_j b_{x,j}b_{y,j}. \end{aligned}

第一行给出体积平均的扰动能量密度,后两行分别是雷诺应力和麦克斯韦应力,描述相关运动与磁张力怎样输运轨道动量。在这里的坐标约定下,总应力 TR+TMT_{\rm R}+T_{\rm M} 为正,表示径向向外的角动量输运。必须先逐点相乘,再平均。若先把每个分量平均,正弦和余弦都会得到零,随后相乘就会错过真实的通量。

最快增长的实验在代码时间 3 结束,此时

E(0)=1.3333333333×10−8,E(3)=1.2002283886×10−6,TR(3)=4.5007224026×10−7,TM(3)=7.5015613910×10−7.\begin{aligned} E(0)&=1.3333333333\times10^{-8},\\ E(3)&=1.2002283886\times10^{-6},\\ T_{\rm R}(3)&=4.5007224026\times10^{-7},\\ T_{\rm M}(3)&=7.5015613910\times10^{-7}. \end{aligned}

这些数都使用代码的能量密度单位。磁应力与速度应力的比值约为 1.666746,接近连续模型中最快本征模的 5/35/3,小差别来自有限网格。这个比值由指定的线性本征模决定。湍流盘的应力比需要另行计算。

用合适的时间采样比较功与能量

背景剪切向扰动供能的速率是

dEdt=qΩ(TR+TM),\frac{dE}{dt}=q\Omega\left(T_{\rm R}+T_{\rm M}\right),

其中 q=−dln⁡Ω/dln⁡Rq=-d\ln\Omega/d\ln R 描述差动转动。保存的 integratedShearWork 用每个时间步的四个 Runge–Kutta 阶段的应力累加而成,与末态能量差分别计算。最快实验给出 1.1868950553×10−61.1868950553\times10^{-6}。从 E(3)−E(0)E(3)-E(0) 中减去它,再取绝对值并除以 E(0)E(0),约得 2.29×10−112.29\times10^{-11}。

测量脚本还用保存的 25 帧应力做了梯形积分,得到 1.1903702511×10−61.1903702511\times10^{-6},比能量增量高约 0.293%。这是另一种时间采样造成的差别。增长的指数曲线向上弯曲,跨过较宽区间的梯形会多算面积;原演化用了密得多的时间步,每一步还有四个阶段。原来的严格功率比较针对阶段积分;稀疏快照的积分还带有采样误差。

分开看空间误差与时间误差

三组空间实验使用同一个连续模型本征向量作为初态,演化到相同终点。四分量向量的相对误差为:

竖直采样点数场的相对误差
640.001287717890
1280.000321942474
2560.000080486418

测量脚本把末态场投影到规定的正弦或余弦基底,再与保存的解析目标比较。网格点数每加倍一次,误差分别缩小 3.99984 和 3.99996 倍,符合中心差分导数的二阶空间精度。

三种空间网格与三种时间步长的保存场相对误差,以及误差缩小倍数

从保存场重新测得的空间与时间误差。

三组时间实验则固定 32 个网格点,时间步长依次为 0.02、0.01 和 0.005。它们的初态与目标使用中心差分对应的有效波数,把连续空间与离散空间之间的差别移出了这项比较。误差约为 5.009×10−105.009\times10^{-10}、3.148×10−113.148\times10^{-11} 和 1.973×10−121.973\times10^{-12},每减半一次步长,误差缩小 15.9122 和 15.9574 倍,接近四阶方法的 16 倍。若在这里改用连续模型的目标,空间误差会先成为下限,遮住时间精度。

公开数据把参考目标命名为expectedReferenceProjection;时间实验的referenceKind为semidiscrete-eigenmode,其他组为continuum。原控制程序从解析参考中取得初始向量和比较目标。空间步进器只接收四个场、转速、剪切、阿尔芬速度和时间步长,不接收预期末态数组。从原场重新算乘积,检查的是保存的诊断量;连续极限、空间收敛和时间收敛又各自检查不同的物理或数值性质。文件校验值说明拿到的是哪份文件,物理准确性则要靠单独的科学比较。

可选的重新演化与第一次失败

若要从头推进同样的十一组实验,在解压根目录中指定一个全新的输出目录:

python3 -S -B source/qualify.py --out rerun-01

这个命令会演化场,只用 Python 标准库,原来的 records/ 保持原样。作者资格检查曾使用外部 120 秒监督程序;脚本自身每次检查已运行时间是否超过 110 秒,并要求启动时至少有两 GB 可用磁盘空间,最后还记录并比较 128 MB 内存峰值和 15 MB 新输出上限。内存报告的字节解释按 macOS 编写。若有比较失败,保留终端输出和整个新目录;先查清舍入差异或平台资源统计,再考虑阈值。

每组完整返回的结果会先保存,再接受比较。失败项会留下名称、实测值和上限,压缩收据的 failure 则给出异常信息。先读第一次失败。某组若在中途异常退出,即使没有完整结果行,目录里也可能已经有保存帧。程序拒绝覆盖已有输出目录。只读检查若遇到校验值不符,会在解码数值记录前停止。

这批实验是理想、不可压缩、水平匀质、竖直周期的线性通道,只考察短时间小振幅下的增长、振荡极限、剪切功和分辨率依赖。模型没有热压强归一化,保存的应力不是吸积参数 α\alpha。

浏览器 Lab 计算连续模型的线性通道,并导出自己的采样场。它的初始振幅、进入页面时展示的代表时刻和振幅停止条件,与这份离线包不同;离线包固定种子尺度为 10−410^{-4},各组都算到时间 3。比较时应对齐参数与经过的时间,查看增长率、应力比或 E(t)/E(0)E(t)/E(0),绝对能量不必相等。Lab 没有导入这些离线帧的入口。页面导出与这份下载包是分别标明身份的两组数据。

自己试两次

先预测“各分量先平均,再相乘”会得到什么。在四分之一波长处读出两个速度并相乘,再与体积平均应力比较,解释两种操作为什么不同。

接着比较 field-measurements.json 中的两种积分功。找出哪一种使用了每个积分阶段,哪一种只使用保存帧。说明为什么加密保存快照,可以改善后者,却不用改变原来的演化轨迹。

换一个离线数据集时,也按这个次序做:确认文件版本,读清坐标和单位,从场算一个诊断量,选一个物理上独立的比较,分开检查网格与时间误差,保留第一次失败。这样每个数都有明确的问题可以回答。

来源

离线包的模型说明列明了所用原典:Balbus与Hawley(1991)的式2.2及2.5—2.9,以及Stone与Gardiner(2010)的第II—III节。Balbus与Hawley原始扫描。Stone与Gardiner固定版本。

动手检验预测

比较页面导出与离线数据

  1. 先预测种子振幅改变后,哪些比较量仍保持相同。
  2. 固定开普勒剪切,比较参考张力与最快增长张力,分别导出页面中的线性状态。
  3. 比较增长率、磁应力与速度应力之比,以及相对于各自初态的能量。
  4. 解释页面导出的绝对能量为何不必等于另一组种子产生的离线记录,再用下载包检查空间收敛。

继续阅读

这一页直接连着哪些内容

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

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

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

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