From 586d7c29b2d9415d7cc4521af9a656e1a3eed653 Mon Sep 17 00:00:00 2001
From: Ying-Li Niu <64801511@qq.com>
Date: Thu, 11 Jun 2026 18:43:35 +0800
Subject: [PATCH] =?UTF-8?q?case06:=20=E5=8E=9F=E5=AD=90=E6=95=B0=2060?=
=?UTF-8?q?=E2=86=92120=EF=BC=8C=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
examples/Readme.md | 6 +--
examples/case05/input/input.txt | 2 +-
examples/case06/Readme.md | 2 +-
examples/case06/doc/index.html | 10 ++---
examples/case06/input/connection.txt | 60 ++++++++++++++++++++++++++++
examples/case06/input/coord.txt | 60 ++++++++++++++++++++++++++++
examples/case06/input/driver.txt | 2 +-
examples/case06/input/input.txt | 16 ++++----
8 files changed, 139 insertions(+), 19 deletions(-)
diff --git a/examples/Readme.md b/examples/Readme.md
index 75aebd1..2ffd74f 100644
--- a/examples/Readme.md
+++ b/examples/Readme.md
@@ -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 原子)
---
diff --git a/examples/case05/input/input.txt b/examples/case05/input/input.txt
index 3e13850..ab7650e 100644
--- a/examples/case05/input/input.txt
+++ b/examples/case05/input/input.txt
@@ -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)
diff --git a/examples/case06/Readme.md b/examples/case06/Readme.md
index 84c0703..151e74c 100644
--- a/examples/case06/Readme.md
+++ b/examples/case06/Readme.md
@@ -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 |
diff --git a/examples/case06/doc/index.html b/examples/case06/doc/index.html
index 34cad81..c50710e 100644
--- a/examples/case06/doc/index.html
+++ b/examples/case06/doc/index.html
@@ -155,7 +155,7 @@
60 个原子沿 x 轴排列 · 弹簧连接 · z 方向受迫振动 120 个原子沿 x 轴排列 · 弹簧连接 · z 方向受迫振动一维原子链驱动力学模拟
-
60 个原子沿 x 轴 等间距排列,原子间距为 1。相邻原子之间用 理想弹簧 连接,弹簧的劲度系数 k = 1.0,原长 L₀ = 1.0(与原子间距一致,初始状态弹簧无拉伸)。
+120 个原子沿 x 轴 等间距排列,原子间距为 1。相邻原子之间用 理想弹簧 连接,弹簧的劲度系数 k = 1.0,原长 L₀ = 1.0(与原子间距一致,初始状态弹簧无拉伸)。
每个原子被限制在 z 方向 自由振动,x 和 y 方向锁定(fix_x=1, fix_y=1, fix_z=0)。
case06/
├── input/
│ ├── input.txt # 主配置文件(YAML 格式)
-│ ├── coord.txt # 原子坐标(60 个原子)
+│ ├── coord.txt # 原子坐标(120 个原子)
│ ├── connection.txt # 弹簧连接关系(59 条键)
│ ├── bond.txt # 弹簧参数(k=1.0, L₀=1.0)
│ └── driver.txt # 驱动力定义(本案例新增)
├── 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 时生成)
diff --git a/examples/case06/input/connection.txt b/examples/case06/input/connection.txt
index c0d1094..e57b7a3 100644
--- a/examples/case06/input/connection.txt
+++ b/examples/case06/input/connection.txt
@@ -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
diff --git a/examples/case06/input/coord.txt b/examples/case06/input/coord.txt
index c3ca42f..c274431 100644
--- a/examples/case06/input/coord.txt
+++ b/examples/case06/input/coord.txt
@@ -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
diff --git a/examples/case06/input/driver.txt b/examples/case06/input/driver.txt
index 5f55248..92c6a38 100644
--- a/examples/case06/input/driver.txt
+++ b/examples/case06/input/driver.txt
@@ -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
diff --git a/examples/case06/input/input.txt b/examples/case06/input/input.txt
index 4f78b81..790b5df 100644
--- a/examples/case06/input/input.txt
+++ b/examples/case06/input/input.txt
@@ -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)