跳到主要内容
Sandbox Physics
从小起伏到宇宙蛛网

从小起伏到宇宙蛛网 · L2

网格怎样跟着折叠的物质求引力

粒子网格方法先把当前质量分配到节点,求出这份密度对应的引力,再把力取回粒子位置。每走一小段都重做一次,穿越后的新密度便能继续改变运动。

粒子在节点之间,也能分清质量

若只把质量塞给最近节点,粒子刚越过半格,节点里的质量就会突然跳变。CIC把一颗粒子的质量按距离分给相邻节点:在一维是两处,在三维是八个角点。粒子仍留在原位置,分配的是求场用的权重。

把相邻两节点之间的分数位置记为ff,它从零到一。左、右权重分别是1−f1-f和ff。例如质量为一个单位、位置在四分之一路程处,两个节点分别获得0.750.75与0.250.25个质量单位。

w0=1−f,w1=f,w0+w1=1w_0=1-f,\qquad w_1=f,\qquad w_0+w_1=1
权重非负且和为一。三维权重由三个方向的这类权重相乘,因此八个角点的和仍是一。
粒子处在四分之一和五分之四格位置时的CIC质量权重
自绘分配示意。白点是一颗粒子,彩色圆为分到节点的质量;箭头表示求场权重,不表示粒子运动。分数位置分别为0.250.25与0.80.8,每组左右权重合计一。 查看完整图像

对应阅读:Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1 · Original finite-mesh calculations and independent small-wave Python replay

先保住质量,再扣掉平均背景

设每轴有NgN_g个节点,盒内有NpN_p个等质量粒子。节点gg分到的粒子权重记为wgpw_{gp}。用一个网格体积来归一化,得到节点密度与同一时刻均密度之比。

把所有节点的质量加起来,应当恰好回到原来的总质量。先检查这一步,再定义密度对比度δ=ρ/ρˉ−1\delta=\rho/\bar\rho-1。若先把结果强行重新归一化,就会藏起周期面上漏分配的质量。

ρgρˉ=Ng3Np∑pwgp,∑gwgp=1\frac{\rho_g}{\bar\rho}=\frac{N_g^3}{N_p}\sum_p w_{gp},\qquad\sum_gw_{gp}=1
物理网格体积和平均密度中都有相同的膨胀因子,取比以后抵消。盒内总质量不随尺度因子改变。

对应阅读:Original finite-mesh calculations and independent small-wave Python replay · Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1

每一条波,都有对应的势

周期密度可以拆成整数波矢n\boldsymbol n的波。其无量纲波数是ky=2πn\boldsymbol k_y=2\pi\boldsymbol n;有长度单位的共动波数则是k=2πn/L\boldsymbol k=2\pi\boldsymbol n/L。整盒恒定的分量是零模式,均匀背景已经决定整体膨胀。

坐标篇使用的缩放势UU满足∇y2U=3δ/2\nabla_y^2U=3\delta/2。对单个Fourier波,空间二阶导数给出负的波数平方,因此可以逐波解出势。实际沉积会平滑波形,CIC回收力又带来一次平滑;这里对这两次平均窗口作显式修正。

定义sinc⁡x=sin⁡x/x\operatorname{sinc}x=\sin x/x,零点取连续极限一。窗口WnW_{\boldsymbol n}和保留范围写在下式。FFT只是快速完成离散变换的方法;保留哪些波仍由网格和截断决定。

Wn=∏j=13sinc⁡2 ⁣(πnjNg),Un=−3δn2∣ky∣2Wn2W_{\boldsymbol n}=\prod_{j=1}^3\operatorname{sinc}^2\!\left(\frac{\pi n_j}{N_g}\right),\qquad U_{\boldsymbol n}=-\frac{3\delta_{\boldsymbol n}}{2|\boldsymbol k_y|^2W_{\boldsymbol n}^2}
此式用于非零且∣n∣≤Ng/3|\boldsymbol n|\leq N_g/3的模式;其他模式及零模式的势设为零。这个低通网格力仍有离散误差。

对应阅读:Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1 · Original finite-mesh calculations and independent small-wave Python replay

把势的坡度取回粒子位置

变换回网格以后,力沿势下降的方向。这里对每条轴使用四点中心差分,网格间距h=1/Ngh=1/N_g按无量纲坐标量;再用与沉积相同的CIC权重,把节点力取回当前粒子位置。

以Ng=16N_g=16、L=20 MpcL=20\,\mathrm{Mpc}为例,节点间距是1.25 Mpc1.25\,\mathrm{Mpc}共动长度,Fourier截断还会进一步限制短波。粒子可以挤到很小的间隔,求力却仍是这个较粗的模型。密集小点的内部细节因此需要另外的分辨率研究。

(∂jU)i≃8(Ui+1−Ui−1)−(Ui+2−Ui−2)12h(\partial_jU)_i\simeq\frac{8(U_{i+1}-U_{i-1})-(U_{i+2}-U_{i-2})}{12h}
求势采用Fourier波数,求梯度采用这一离散差分;两者共同定义实际算子。这个受限PM没有叠加GADGET-2的短程树力。

对应阅读:Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1 · Original finite-mesh calculations and independent small-wave Python replay

先推一下,再移动,再推一下

受力先改变动量,动量再推进位置。对称的kick–drift–kick方法在一步中先用旧位置的力更新一部分动量,再移动位置、重求引力,最后完成另一部分动量更新。

从a0a_0走到a1a_1,中点取am=a0a1a_m=\sqrt{a_0a_1},与对数尺度因子的等间隔一致。由于背景是EdS,位置和动量方程中的尺度因子可以直接积分。把两个因子记作D\mathcal D与K\mathcal K,以免和密度增长因子混淆。

D(a0,a1)=2(a0−1/2−a1−1/2),K(a0,a1)=2(a1−a0)\mathcal D(a_0,a_1)=2(a_0^{-1/2}-a_1^{-1/2}),\qquad\mathcal K(a_0,a_1)=2(\sqrt{a_1}-\sqrt{a_0})
它们分别来自对尺度因子积分位置方程与动量方程。两者都无量纲。
uh=u0+K(a0,am)F(y0),y1=y0+D(a0,a1)uh\boldsymbol u_h=\boldsymbol u_0+\mathcal K(a_0,a_m)\boldsymbol F(\boldsymbol y_0),\qquad\boldsymbol y_1=\boldsymbol y_0+\mathcal D(a_0,a_1)\boldsymbol u_h
新位置给出新力,再取u1=uh+K(am,a1)F(y1)\boldsymbol u_1=\boldsymbol u_h+\mathcal K(a_m,a_1)\boldsymbol F(\boldsymbol y_1)完成一步。

对应阅读:Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1 · Original finite-mesh calculations and independent small-wave Python replay

步长细化,和网格细化分别检查

先做一个因子算例。区间a0=0.25a_0=0.25到a1=0.36a_1=0.36给出D=2(2−1/0.6)=2/3\mathcal D=2(2-1/0.6)=2/3,K=2(0.6−0.5)=0.2\mathcal K=2(0.6-0.5)=0.2。实际轨迹把整个区间分成许多小步,并在每一步重算密度和力。

保持网格不变,把步数加倍,检查同一算子的时间误差;保持连续初值不变,再细化粒子与网格,检查空间与采样误差。独立自适应积分也能检验前者。前面平面例子的首穿越和后面的线性增长,则给出解析或独立力参考。

质量应当守恒。膨胀背景下,动能加引力势能一般不会保持常数;一次对称推进本身也不是精确能量守恒的证明。要信任某个读数,仍需看它在相应细化和独立参考下怎样变化。

对应阅读:Original finite-mesh calculations and independent small-wave Python replay · Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1

练习与解释性答案

  1. 某一维分数位置为f=0.8f=0.8。质量一个单位怎样分给左右节点?

    展开解释

    左边0.20.2、右边0.80.8,合计一。移动粒子会连续改变权重,而不是突然整份换一个节点。

  2. 每轴1616格、盒长20 Mpc20\,\mathrm{Mpc}时,只把保存帧从129129改到257257,会提高引力的空间分辨率吗?

    展开解释

    不会。输出更密只改变记录运动的频率。节点间距仍是1.25 Mpc1.25\,\mathrm{Mpc},求力截断也相同;提高力分辨率需要相应细化网格并检验粒子采样。

  3. 为什么应先检查原始沉积总质量,再减平均背景?

    展开解释

    前者能发现漏掉的周期权重或粒子。减背景是为了求相对均匀膨胀的引力;若先强行缩放密度,漏质量也可能被伪装成正确均值。

动手检验预测

把位移参考和更新引力放在同一时刻比较

  1. 选“斜织的蛛网”,先预测持续更新引力会怎样改变折叠附近的流动。
  2. 叠加位移参考,在较晚时刻暂停。两者必须使用同一初值和尺度因子,再比较位置与下方的长波功率。
  3. 导出完整原生记录,确认其中保存的各个尺度因子,并说明增加输出帧和减小积分步长的区别。

来源与计算范围

  1. Springel (2005), The cosmological simulation code GADGET-2, astro-ph/0505010v1

    定向核读第2.1节式1至3、第3.2及3.2.1节式20至23、第4.1节式26至31,查看原PDF第3和11页。用于宇宙学动量、PM窗口与积分方法背景。教学模型另行规定截断和有限梯度,没有短程树力。

  2. Original finite-mesh calculations and independent small-wave Python replay

    自有已验收核/线性、非线性及五预设双精度计算用于课程图与校准。公开小ZIP仅含一份精确小波当前状态、独立NumPy/SciPy轨迹复算及预期结果。示例由Node执行冻结模型和规范序列化函数产生,不冒充浏览器下载。大型原始预设另行留存,包内没有Engine或原论文。

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

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