case06: 原子数 60→120,更新文档

This commit is contained in:
2026-06-11 18:43:35 +08:00
parent 8261017879
commit 586d7c29b2
8 changed files with 139 additions and 19 deletions
+3 -3
View File
@@ -13,7 +13,7 @@
| [case03](./case03/) | **日地月系统(失败)** | 地球绕太阳、月球绕地球,参数不当导致失稳 | 3 | 万有引力 |
| [case04](./case04/) | **日地月系统(成功)** | 地球绕太阳、月球绕地球,稳定轨道 | 3 | 万有引力 |
| [case05](./case05/) | **一维原子链纵波** | 驱动原子 1 沿 x 轴振动,产生纵波传播 | 60 | 弹簧 + 驱动力 |
| [case06](./case06/) | **一维原子链横波** | 驱动原子 1 沿 z 轴振动,产生横波传播 | 60 | 弹簧 + 驱动力 |
| [case06](./case06/) | **一维原子链横波** | 驱动原子 1 沿 z 轴振动,产生横波传播 | 120 | 弹簧 + 驱动力 |
---
@@ -62,12 +62,12 @@
### case06 — 一维原子链横波
与 case05 相同的原子链,但驱动力沿 z 方向 `z(t)=0.5·cos(2π·0.1·t+90°)`,原子 z 方向自由(fix_z=0),x/y 锁定。振动在横向传播,形成**横波**。
120 个原子沿 x 轴等间距排列(间距 1),相邻原子用弹簧(k=1.0, L₀=1.0)连接。驱动力沿 z 方向 `z(t)=0.5·cos(2π·0.1·t+90°)`,原子 z 方向自由(fix_z=0),x/y 锁定。振动在横向传播,形成**横波**。
- **力开关**:弹簧键力开,驱动力开
- **算法**leapfrog(蛙跳法)
- **波速**:慢(z 方向弹簧力呈几何非线性,类似 FPU 系统)
- **渲染**Marker 模式(GPU 实例化,60 原子)
- **渲染**Marker 模式(GPU 实例化,120 原子)
---
+1 -1
View File
@@ -8,7 +8,7 @@
step_simulate: 0 # 运行物理模拟 → output/trajectory.txt
step_sample: 0 # 抽帧 → output/display.txt
step_plot: 0 # 绘制轨迹/能量图 → output/trajectory_plots.png
step_animation: 0 # 自动播放 VisPy 3D 动画窗口(需安装 vispy
step_animation: 1 # 自动播放 VisPy 3D 动画窗口(需安装 vispy
step_plot_wave: 1 # 绘制波形能量动画
plot_wave_save_gif: 0 # 输出波形 GIF(需 step_plot_wave=1
plot_wave_save_mp4: 0 # 输出波形 MP4(需 step_plot_wave=1
+1 -1
View File
@@ -6,7 +6,7 @@
| 参数 | 值 |
|---|---|
| 原子数 | 60 |
| 原子数 | 120 |
| 排列 | 沿 x 轴等间距排列,间距为 1 |
| 约束 | 原子**沿 z 方向自由振动**fix_x=1, fix_y=1, fix_z=0),x, y 锁定 |
| 弹簧 | 劲度系数 k=1.0,原长 L₀=1.0 |
+5 -5
View File
@@ -155,7 +155,7 @@
<!-- ============================================================ -->
<header class="hero">
<h1>一维原子链驱动力学模拟</h1>
<p class="subtitle">60 个原子沿 x 轴排列 · 弹簧连接 · z 方向受迫振动</p>
<p class="subtitle">120 个原子沿 x 轴排列 · 弹簧连接 · z 方向受迫振动</p>
<span class="badge">case06 · examples/case06</span>
</header>
@@ -185,7 +185,7 @@
<div class="card">
<h3>1.1 一维原子链</h3>
<p>60 个原子沿 <strong>x 轴</strong> 等间距排列,原子间距为 1。相邻原子之间用 <strong>理想弹簧</strong> 连接,弹簧的劲度系数 <em>k</em> = 1.0,原长 <em>L</em>₀ = 1.0(与原子间距一致,初始状态弹簧无拉伸)。</p>
<p>120 个原子沿 <strong>x 轴</strong> 等间距排列,原子间距为 1。相邻原子之间用 <strong>理想弹簧</strong> 连接,弹簧的劲度系数 <em>k</em> = 1.0,原长 <em>L</em>₀ = 1.0(与原子间距一致,初始状态弹簧无拉伸)。</p>
<p>每个原子被限制在 <strong>z 方向</strong> 自由振动,x 和 y 方向锁定(<code>fix_x=1, fix_y=1, fix_z=0</code>)。</p>
</div>
@@ -415,13 +415,13 @@ step_animation: 1 # 播放动画</pre>
<pre>case06/
├── input/
│ ├── input.txt # 主配置文件(YAML 格式)
│ ├── coord.txt # 原子坐标(60 个原子)
│ ├── coord.txt # 原子坐标(120 个原子)
│ ├── connection.txt # 弹簧连接关系(59 条键)
│ ├── bond.txt # 弹簧参数(k=1.0, L₀=1.0
│ └── <strong>driver.txt</strong> # <span class="cm">驱动力定义(本案例新增)</span>
├── output/
│ ├── trajectory.txt # 全量轨迹数据(10000 步 × 60 原子)
│ ├── display.txt # 抽帧后的动画数据(200 帧 × 60 原子)
│ ├── trajectory.txt # 全量轨迹数据(50000 步 × 120 原子)
│ ├── display.txt # 抽帧后的动画数据(500 帧 × 120 原子)
│ ├── dynamics.log # 计算日志
│ ├── animation.log # 动画启动日志(闪退时排查用)
│ └── wave_animation.gif # 波形能量动画(step_plot_wave=1 时生成)
+60
View File
@@ -58,3 +58,63 @@ n1 n2 bond_name
57 58 k1
58 59 k1
59 60 k1
60 61 k1
61 62 k1
62 63 k1
63 64 k1
64 65 k1
65 66 k1
66 67 k1
67 68 k1
68 69 k1
69 70 k1
70 71 k1
71 72 k1
72 73 k1
73 74 k1
74 75 k1
75 76 k1
76 77 k1
77 78 k1
78 79 k1
79 80 k1
80 81 k1
81 82 k1
82 83 k1
83 84 k1
84 85 k1
85 86 k1
86 87 k1
87 88 k1
88 89 k1
89 90 k1
90 91 k1
91 92 k1
92 93 k1
93 94 k1
94 95 k1
95 96 k1
96 97 k1
97 98 k1
98 99 k1
99 100 k1
100 101 k1
101 102 k1
102 103 k1
103 104 k1
104 105 k1
105 106 k1
106 107 k1
107 108 k1
108 109 k1
109 110 k1
110 111 k1
111 112 k1
112 113 k1
113 114 k1
114 115 k1
115 116 k1
116 117 k1
117 118 k1
118 119 k1
119 120 k1
+60
View File
@@ -59,3 +59,63 @@ n mass radius x y z vx vy vz fix_x fix_y fix_z
58 1 0.1 57 0 0 0 0 0 1 1 0
59 1 0.1 58 0 0 0 0 0 1 1 0
60 1 0.1 59 0 0 0 0 0 1 1 0
61 1 0.1 60 0 0 0 0 0 1 1 0
62 1 0.1 61 0 0 0 0 0 1 1 0
63 1 0.1 62 0 0 0 0 0 1 1 0
64 1 0.1 63 0 0 0 0 0 1 1 0
65 1 0.1 64 0 0 0 0 0 1 1 0
66 1 0.1 65 0 0 0 0 0 1 1 0
67 1 0.1 66 0 0 0 0 0 1 1 0
68 1 0.1 67 0 0 0 0 0 1 1 0
69 1 0.1 68 0 0 0 0 0 1 1 0
70 1 0.1 69 0 0 0 0 0 1 1 0
71 1 0.1 70 0 0 0 0 0 1 1 0
72 1 0.1 71 0 0 0 0 0 1 1 0
73 1 0.1 72 0 0 0 0 0 1 1 0
74 1 0.1 73 0 0 0 0 0 1 1 0
75 1 0.1 74 0 0 0 0 0 1 1 0
76 1 0.1 75 0 0 0 0 0 1 1 0
77 1 0.1 76 0 0 0 0 0 1 1 0
78 1 0.1 77 0 0 0 0 0 1 1 0
79 1 0.1 78 0 0 0 0 0 1 1 0
80 1 0.1 79 0 0 0 0 0 1 1 0
81 1 0.1 80 0 0 0 0 0 1 1 0
82 1 0.1 81 0 0 0 0 0 1 1 0
83 1 0.1 82 0 0 0 0 0 1 1 0
84 1 0.1 83 0 0 0 0 0 1 1 0
85 1 0.1 84 0 0 0 0 0 1 1 0
86 1 0.1 85 0 0 0 0 0 1 1 0
87 1 0.1 86 0 0 0 0 0 1 1 0
88 1 0.1 87 0 0 0 0 0 1 1 0
89 1 0.1 88 0 0 0 0 0 1 1 0
90 1 0.1 89 0 0 0 0 0 1 1 0
91 1 0.1 90 0 0 0 0 0 1 1 0
92 1 0.1 91 0 0 0 0 0 1 1 0
93 1 0.1 92 0 0 0 0 0 1 1 0
94 1 0.1 93 0 0 0 0 0 1 1 0
95 1 0.1 94 0 0 0 0 0 1 1 0
96 1 0.1 95 0 0 0 0 0 1 1 0
97 1 0.1 96 0 0 0 0 0 1 1 0
98 1 0.1 97 0 0 0 0 0 1 1 0
99 1 0.1 98 0 0 0 0 0 1 1 0
100 1 0.1 99 0 0 0 0 0 1 1 0
101 1 0.1 100 0 0 0 0 0 1 1 0
102 1 0.1 101 0 0 0 0 0 1 1 0
103 1 0.1 102 0 0 0 0 0 1 1 0
104 1 0.1 103 0 0 0 0 0 1 1 0
105 1 0.1 104 0 0 0 0 0 1 1 0
106 1 0.1 105 0 0 0 0 0 1 1 0
107 1 0.1 106 0 0 0 0 0 1 1 0
108 1 0.1 107 0 0 0 0 0 1 1 0
109 1 0.1 108 0 0 0 0 0 1 1 0
110 1 0.1 109 0 0 0 0 0 1 1 0
111 1 0.1 110 0 0 0 0 0 1 1 0
112 1 0.1 111 0 0 0 0 0 1 1 0
113 1 0.1 112 0 0 0 0 0 1 1 0
114 1 0.1 113 0 0 0 0 0 1 1 0
115 1 0.1 114 0 0 0 0 0 1 1 0
116 1 0.1 115 0 0 0 0 0 1 1 0
117 1 0.1 116 0 0 0 0 0 1 1 0
118 1 0.1 117 0 0 0 0 0 1 1 0
119 1 0.1 118 0 0 0 0 0 1 1 0
120 1 0.1 119 0 0 0 0 0 1 1 1
+1 -1
View File
@@ -1,2 +1,2 @@
n amp_x amp_y amp_z freq_x freq_y freq_z phi_x phi_y phi_z period
1 0 0 0.5 0 0 0.1 0 0 90 all
1 0 0 2.0 0 0 0.1 0 0 90 all
+8 -8
View File
@@ -8,11 +8,11 @@
step_simulate: 1 # 运行物理模拟 → output/trajectory.txt
step_sample: 1 # 抽帧 → output/display.txt
step_plot: 0 # 绘制轨迹/能量图 → output/trajectory_plots.png
step_plot_wave: 0 # 绘制波形能量动画
plot_wave_save_gif: 0 # 输出波形 GIF(需 step_plot_wave=1
plot_wave_save_mp4: 0 # 输出波形 MP4(需 step_plot_wave=1
step_animation: 1 # 自动播放 VisPy 3D 动画窗口(需安装 vispy
step_plot_wave: 0 # 绘制波形能量动画
force_calc: 0 # 强制重新计算:1=跳过缓存强算,0=自动使用已有输出
plot_wave_save_gif: 1 # 输出波形 GIF(需 step_plot_wave=1
plot_wave_save_mp4: 1 # 输出波形 MP4(需 step_plot_wave=1
# ── 计算引擎 ──────────────────────────────────
# 可选: python, c, cpp, fortran, java
@@ -35,14 +35,14 @@ plot_atom: 1
# ── 物理参数 ──────────────────────────────────
# 三个方向分量分别对应 x, y, z
G: [0.0, 0.0, 0.0] # 重力场分量 (m/s²)
B: [0.0, 0.0, 0.0] # 阻尼分量
G: [0.00, 0.00, 0.00] # 重力场分量 (m/s²)
B: [0.02, 0.00, 0.02] # 阻尼分量
# ── 力开关(0=关闭, 1=开启)──────────────────
gravity_field: 0 # 均匀重力场 (G)
gravity_interaction: 0 # 原子间万有引力
elastic_force: 1 # 弹簧键力
damping_force: 0 # 阻尼 (B)
damping_force: 1 # 阻尼 (B)
driving_force: 1 # 驱动力(需 driver_file 定义)
#
gravity_strength: 1.0 # 万有引力强度(仅 gravity_interaction=1 时有效)
@@ -63,10 +63,10 @@ warmup_steps: 0 # 默认 0(立即开始记录)
# 总模拟时间(秒),程序自动计算 NT = T_total / DT
# 如果同时指定了 NT,以 NT 为准
T_total: 50.0
T_total: 2.0
# 抽帧间隔(每 NSTEP 步取一帧用于动画)
NSTEP: 100
NSTEP: 10
# ── 时间步长 ──────────────────────────────────
DT: 0.001 # 时间步长 (s)