跳到主要内容
Sandbox Physics
分子云的引力与磁支撑

分子云 · L3

从官方Jeans算例重走一遍

打开固定提交053bc738d5c85dac717326b4338b34c7db4e715d的Athena++ Jeans输入,可以从盒子尺寸算出波向量,再重算稳定和增长两种线性模。独立科学包带着完整的小输入和源码;下面先读文件,再运行等价线性计算,最后比较另一套二维气体算法。

先找到原始文件和许可

下载科学ZIP,解压后进入molecular-cloud-jeans-science。official目录里保留athinput.jeans_3d、Jeans初值源码、两个回归脚本和完整BSD许可;manifest.json列出每个成员的字节与SHA。它们来自同一固定提交,不把今天分支上的文件混进来。

包里的Python是另一套独立计算。replay.py先检查文件完整性,再实际运行科学步骤,把新结果写进你指定的目录。首次安装NumPy、SciPy和Matplotlib后,就可以离线重算;工具二进制和受限许可论文都没有放进包。

先执行完整重放,保留终端输出与replay-receipt.json。后续命令同样使用这个虚拟环境的Python。新增的空间门会从头计算十一例,耗时主要在这一阶段。参考JSON便于比较;实际重算结果写在你新建的目录里。

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
PYTHONDONTWRITEBYTECODE=1 .venv/bin/python replay.py --out-dir rerun

对应阅读:Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d · Molecular-cloud Jeans standalone scientific reproduction

盒子不是立方体,先恢复波向量

打开原生输入,三个方向的长度是Lx=1L_x=1、Ly=Lz=0.5L_y=L_z=0.5。初值源码让相位沿每个盒边各转一圈。每个分量因此是2π/Li2\pi/L_i,不是只沿最长边放一段波。

波向量为(2π,4π,4π)(2\pi,4\pi,4\pi),大小6π6\pi,波长便是1/31/3。原始计算是斜着穿过三维盒子的波。等价线性计算把坐标转到这个波向,用它的真实波数演化六变量状态。

查看输出wavevector与wavelength字段,再回到输入核对。只把最长边当波长,会连重力标度与振荡频率一起算错。

k=(2πLx,2πLy,2πLz),λ=2π∣k∣=13\mathbf k=\left(\frac{2\pi}{L_x},\frac{2\pi}{L_y},\frac{2\pi}{L_z}\right),\qquad \lambda=\frac{2\pi}{|\mathbf k|}=\frac13
三个方向分别转一圈;波长由向量的大小决定。

对应阅读:Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d

声速要读初值源码,增长条件要读覆盖项

输入里一条旧注释提到压力0.1,实际初值源码却设ρ0=1\rho_0=1和p0=1/Γp_0=1/\Gamma,Γ\Gamma是绝热指数。绝热导数给cs2=Γp0/ρ0=1c_s^2=\Gamma p_0/\rho_0=1。不能用那条旧注释替代真正初始化的状态。

原生输入的Jeans比是0.50.5。不稳定回归脚本把它覆盖为1.51.5,并把结束时间改成0.0460.046。这里Jeans比针对刚算出的波长,等于λ/λJ\lambda/\lambda_J,所以重力参数也随之改变。

我们的等价线性模采用等温导数,但数值上与该初值的线性声速相同。它适合比较一阶Jeans频率;完整非线性绝热演化,还需要原软件的能量方程。

4πGρ0=(J∣k∣cs)2,ω2=cs2∣k∣2−4πGρ04\pi G\rho_0=(J|\mathbf k|c_s)^2,\qquad \omega^2=c_s^2|\mathbf k|^2-4\pi G\rho_0
本式保留原始文件的单位;另一份气体片段计算则把重力系数归一为一。

对应阅读:Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d

重算两条原生条件的等价时间曲线

单独运行audit_official_input.py,输出official-input-audit.json以及两份NPZ时间曲线。records数组分别列出原生稳定输入与不稳定回归覆盖项,包含声速、重力系数、频率平方、结束时刻和误差。

稳定病例的4πG=88.82644\pi G=88.8264、ω2=266.479\omega^2=266.479,结束时刻为22;不稳定病例分别为799.438799.438、−444.132-444.132和0.0460.046。这些时刻使用原生单位,不能和另一份4πG=14\pi G=1的气体结果直接对齐。

源码还放入了主幅度平方量级的额外密度种子。主幅度10−610^{-6}时,这一项为10−1210^{-12}。官方一阶解析参照与这里的等价线性计算都略去它;输出明确保留该说明。

这一步实际运行了自己的线性积分和解析比较。它没有编译Athena,没有执行其三维MPI、FFT或多重网格回归。原始文件定义了被比较的条件,执行程序的身份仍需分清。

.venv/bin/python audit_official_input.py --input official/athinput.jeans_3d --out-dir native-check

对应阅读:Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d · Molecular-cloud Jeans standalone scientific reproduction

再看自己的非线性二维气体

verify_prototype.py求解的是第三方向不变、周期的等温气体。它的密度和动量来自有限体积通量,Poisson方程去掉平均密度。固定J=1.5J=1.5、幅度0.20.2的病例,还会在32、64、128格上重算。

在verification.json中找linearHydro、nonlinearHydro与spatialAdjacentRestrictedRms。前者与解析线性波比较,后两者比较有限幅度与网格细化。它们回答不同问题,不应把一个小幅解析测试通过,当成晚期强压缩也已通过。

再打开NPZ完整状态。细网格必须先平均到粗单元,才能逐格比较;直接挑同样编号的格点,会把采样位置与平均范围也改掉。

.venv/bin/python verify_prototype.py --out-dir gas-check
.venv/bin/python verify_domain.py --out-dir domain-check

对应阅读:Molecular-cloud Jeans standalone scientific reproduction

给独立参照也做空间细化

spectral-space-verification.json把通量求积、保留空间模和时间步比较分成三个字段。固定64点,把求积从两倍增到四倍;再比较64与128点;最后在固定空间设置下减半时间步。全部原十个支持病例和固定长时病例都在清单里。

运行时默认重新算全部十一例,不采用开发时复用已完成数组的选项。检查每例reusedCompletedLocalNumericalRun为false,再读实际数值差。一个PASS字符串之外,还要有你能找到的输入、状态与比较方式。

制造的近零密度有理通量负例也会重算。它的作用,是让“输出截断总能去混叠”这个错误假设暴露出来;它不属于气体控制的支持范围。

.venv/bin/python verify_spectral_space.py --out-dir reference-check

对应阅读:Molecular-cloud Jeans standalone scientific reproduction

保留失败,读清每一条的用途

failures目录保存最初32格误差抵消、点值与单元平均混比,以及修正前的伪谱源码和结果。文件名会告诉你它属于哪一轮;当前方法在README和新的输出中单独说明。

长时分辨率停止测试最后留下NJ=8.01589N_J=8.01589的场,拒绝下一份低于八格的候选。它讲的是怎样停止,晚期空间精度未通过同一时刻的比较。把这个峰值当成一个恒星碎片质量,会越过记录实际回答的问题。

editorial/worked_examples.py从已算出的verification.json读取这两份状态诊断,再独立重算Jeans格数;它同时计算章节里的增长幅度、磁方向例题与给定质量列表。例题的输出因此也能沿着文件找到来处。

.venv/bin/python editorial/worked_examples.py --science-results rerun --out worked-examples.json

对应阅读:Molecular-cloud Jeans standalone scientific reproduction

为下一位复算者留下足够信息

整理结果时,写下原始提交、成员SHA、Python和依赖版本、物理初值、维度与边界、实际结束时刻,以及每项比较改变了什么。保留未过的病例和停止原因,别人才能继续检验。

从交互画面导出时,同样保留模型分支与完整场。密度中心拖动表示重新准备初态,保存前后的记录应当有不同初值;它不表示演化中有人把气体瞬间挪走。

默认重放实际运行九个科学程序。最后的implementation/export_reference_fields.py会重新算出全部十一份气体完整场,以及独立磁矩阵指数比较。它们用来核验浏览器计算,没有拿来充当画面的播放帧。

最初的磁积分步长0.010.01,在八十份独立状态中的一份未过原定10−910^{-9}分量误差门。把步长细化到0.00250.0025后,最大误差降至6.16×10−126.16\times10^{-12},最初失败日志仍在failures里。一起读reference/magnetic-step-refinement.json与新完整场输出:准确求解线性系统,并不等于验证了非线性磁云。

带着这套顺序再读另一份官方算例:先认文件和单位,再恢复波向与初态,再运行程序,最后对照参照与失败。每一步都有一个可独立检查的对象。

.venv/bin/python implementation/export_reference_fields.py --science-results rerun --out complete-fields.json.gz

对应阅读:Molecular-cloud Jeans standalone scientific reproduction · Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d

练习与解释性答案

  1. 为什么这个原生输入的波长是三分之一,而不是最长盒边的一?

    展开解释

    三个方向各有一圈相位,波向量是(2π,4π,4π)(2\pi,4\pi,4\pi),大小为6π6\pi。由λ=2π/∣k∣\lambda=2\pi/|\mathbf k|得到三分之一。只读最长边遗漏了另外两个分量。

  2. 输出显示等价线性曲线与解析式吻合,能否说已运行Athena三维回归?

    展开解释

    实际执行的是包里的独立Python线性积分。官方文件定义了输入,原软件的三维求解器、并行和能量方程并未执行。应报告程序名称和比较层次,而不是把原始输入的来源当成执行身份。

  3. 为什么把两个不同输入的横轴直接都标成“时间二”仍可能比较错?

    展开解释

    不同原生重力系数对应不同引力时间单位。还要看物理单位或换成各自的无量纲引力时间。同名横轴只有单位与定义相同,才能直接对齐。

动手检验预测

看压力与引力怎样改变同一团气体

  1. 在气体分支保存一份完整场,写下Jeans比、初始幅度、密度中心和实际时间,再对照包里的相同条件。
  2. 只拖密度中心后重新演化并保存。检查初值位置已变,质量与周期边界约定仍相同。
  3. 把官方等价模、自己的非线性气体和线性磁分支分别列出,给每份记录标出维度、状态变量和能回答的比较问题。

独立科学复算材料

下载科学复算ZIP · 阅读安装与计算说明

包内重算周期气体、独立线性磁模、原生输入对照与分辨率检验,保留完整且许可清楚的官方小成员和自有科学程序。

来源与计算范围

  1. Athena++ native Jeans input and regression at commit 053bc738d5c85dac717326b4338b34c7db4e715d

    完整BSD-3-Clause小成员包括原生输入、Jeans初值源码和稳定/不稳定引力回归脚本。教程计算等价的一阶傅里叶模,没有编译或运行Athena。

  2. Molecular-cloud Jeans standalone scientific reproduction

    独立有限体积与过采样伪谱计算、Jeans解析参照和完整线性磁流体参照,含十个支持病例、固定长时病例、官方小输入及原始失败。安装普通Python依赖后,默认重放会离线实际重算科学步骤。

反馈这个页面有错误、看不明白,或者缺了什么?告诉我们
反馈类型

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