docs: case05纵波 + case06横波一维原子链
- case05 Readme.md 更新为纵波模拟描述 - case05 run_dynamics.py 注释更新 - case06 创建为一维原子链横波模拟 - coord.txt: fix_x=1, fix_y=1, fix_z=0 (z方向自由) - driver.txt: amp_z=0.5, freq_z=0.1, phi_z=90° - input.txt: 横波配置 + step_plot_wave - Readme.md + doc/index.html + run_dynamics.py - 模拟验证通过 (50000步/30s)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# case05: 一维原子链驱动力学模拟
|
||||
# case06: 一维原子链横波模拟
|
||||
|
||||
60 个原子沿 x 轴排列,相邻原子用弹簧连接。原子 1 受驱动力作用。
|
||||
60 个原子沿 x 轴排列,相邻原子用弹簧连接。原子 1 受 z 方向驱动力作用,产生沿链传播的横波。
|
||||
|
||||
## 物理设定
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
|---|---|
|
||||
| 原子数 | 60 |
|
||||
| 排列 | 沿 x 轴等间距排列,间距为 1 |
|
||||
| 约束 | 原子**只沿 z 方向**振动(fix_x=1, fix_y=1, fix_z=0) |
|
||||
| 约束 | 原子**沿 z 方向自由振动**(fix_x=1, fix_y=1, fix_z=0),x, y 锁定 |
|
||||
| 弹簧 | 劲度系数 k=1.0,原长 L₀=1.0 |
|
||||
| 重力 | 无 |
|
||||
| 万有引力 | 无 |
|
||||
| 阻尼 | 无 |
|
||||
| 驱动力 | 原子 1(详见 driver.txt) |
|
||||
| 驱动力 | 原子 1(z 方向驱动) |
|
||||
| 算法 | leapfrog(蛙跳法,能量守恒) |
|
||||
|
||||
## 驱动力
|
||||
@@ -24,18 +24,16 @@
|
||||
z(t) = A_z \cdot \cos(2\pi f_z t + \phi_z)
|
||||
```
|
||||
|
||||
当前参数:A_z = 5.0, f_z = 1.0 Hz, φ_z = 90°(全程驱动)。
|
||||
|
||||
受驱原子完全忽略 coord.txt 中的初始坐标和 fix 约束,位置/速度由驱动力解析确定。
|
||||
当前参数:A_z = 0.5, f_z = 0.1 Hz, φ_z = 90°, period = all(全程驱动)。
|
||||
|
||||
## 动力学行为
|
||||
|
||||
原子 1 的受迫振动通过弹簧逐次传递给相邻原子,形成沿链传播的横波。由于横向振动的几何非线性(弹簧张力主要在 x 方向),z 方向有效刚度低,波速较慢,呈现 FPU 型非线性动力学特征。
|
||||
原子 1 沿 z 方向的受迫振动通过弹簧逐次传递给相邻原子,形成沿链传播的**横波**。由于 z 方向的振动是横向的,弹簧大部分张力在 x 方向,z 方向的有效刚度是非线性的——等效于一个三次方恢复力(FPU 型非线性),因此波速较慢。
|
||||
|
||||
## 使用方法
|
||||
|
||||
```bash
|
||||
cd examples/case05
|
||||
cd examples/case06
|
||||
python run_dynamics.py
|
||||
```
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>case05 — 一维原子链驱动力学模拟 | 物理原理 & 使用文档</title>
|
||||
<title>case06 — 一维原子链驱动力学模拟 | 物理原理 & 使用文档</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #f8f9fa;
|
||||
@@ -156,7 +156,7 @@
|
||||
<header class="hero">
|
||||
<h1>一维原子链驱动力学模拟</h1>
|
||||
<p class="subtitle">60 个原子沿 x 轴排列 · 弹簧连接 · z 方向受迫振动</p>
|
||||
<span class="badge">case05 · examples/case05</span>
|
||||
<span class="badge">case06 · examples/case06</span>
|
||||
</header>
|
||||
|
||||
<div class="container">
|
||||
@@ -324,7 +324,7 @@
|
||||
|
||||
<div class="card">
|
||||
<h3>4.1 完整运行(模拟 + 动画)</h3>
|
||||
<pre>cd examples/case05
|
||||
<pre>cd examples/case06
|
||||
python run_dynamics.py</pre>
|
||||
<p>这步会依次执行:物理模拟 → 抽帧 → 打开 VisPy 3D 动画窗口。</p>
|
||||
</div>
|
||||
@@ -356,9 +356,11 @@ step_animation: 1 # 播放动画</pre>
|
||||
<tr><th>操作</th><th>效果</th></tr>
|
||||
<tr><td>鼠标拖动</td><td>旋转视角</td></tr>
|
||||
<tr><td>滚轮</td><td>缩放</td></tr>
|
||||
<tr><td>A / D 键</td><td>视角向左 / 向右平移</td></tr>
|
||||
<tr><td>W / S 键</td><td>视角向上 / 向下平移</td></tr>
|
||||
<tr><td>Q / E 键</td><td>降低 / 提高平移速度</td></tr>
|
||||
<tr><td>W / S 键</td><td>相机沿 Z 轴向前 / 向后移动(靠近/远离场景)</td></tr>
|
||||
<tr><td>A / D 键</td><td>视角向右 / 向左平移</td></tr>
|
||||
<tr><td>E / Q 键</td><td>视角上升 / 下降(屏幕方向)</td></tr>
|
||||
<tr><td>C / X 键</td><td>增大 / 减小步长</td></tr>
|
||||
<tr><td>V 键</td><td>切换透视 / 正交投影</td></tr>
|
||||
<tr><td>左上角 <strong>reset</strong> 按钮</td><td>复位视角到初始位置</td></tr>
|
||||
<tr><td>左上角 <strong>info</strong> 按钮</td><td>切换信息面板显示/隐藏</td></tr>
|
||||
<tr><td>左上角 <strong>axes</strong> 按钮</td><td>切换坐标轴显示/隐藏</td></tr>
|
||||
@@ -397,6 +399,7 @@ step_animation: 1 # 播放动画</pre>
|
||||
<tr><td>step_simulate</td><td>跳过模拟(加载已有轨迹)</td><td>运行物理模拟</td></tr>
|
||||
<tr><td>step_sample</td><td>跳过抽帧</td><td>从轨迹抽取显示帧</td></tr>
|
||||
<tr><td>step_plot</td><td>不生成图表</td><td>生成轨迹/能量图</td></tr>
|
||||
<tr><td><strong>step_plot_wave</strong></td><td>不生成波形图</td><td>生成波形能量动画 GIF</td></tr>
|
||||
<tr><td>step_animation</td><td>不启动动画</td><td>自动打开 VisPy 3D 窗口</td></tr>
|
||||
<tr><td>force_calc</td><td>自动检测缓存</td><td>强制重新计算</td></tr>
|
||||
</table>
|
||||
@@ -409,7 +412,7 @@ step_animation: 1 # 播放动画</pre>
|
||||
<section id="files">
|
||||
<h2>六、文件结构</h2>
|
||||
|
||||
<pre>case05/
|
||||
<pre>case06/
|
||||
├── input/
|
||||
│ ├── input.txt # 主配置文件(YAML 格式)
|
||||
│ ├── coord.txt # 原子坐标(60 个原子)
|
||||
@@ -420,7 +423,8 @@ step_animation: 1 # 播放动画</pre>
|
||||
│ ├── trajectory.txt # 全量轨迹数据(10000 步 × 60 原子)
|
||||
│ ├── display.txt # 抽帧后的动画数据(200 帧 × 60 原子)
|
||||
│ ├── dynamics.log # 计算日志
|
||||
│ └── animation.log # 动画启动日志(闪退时排查用)
|
||||
│ ├── animation.log # 动画启动日志(闪退时排查用)
|
||||
│ └── wave_animation.gif # 波形能量动画(step_plot_wave=1 时生成)
|
||||
├── doc/
|
||||
│ └── index.html # <span class="cm">本文档</span>
|
||||
├── Readme.md # 案例简介
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
bond_name k rest_length
|
||||
k1 100.0 1.0
|
||||
bond_name k rest_length
|
||||
k1 1.0 1.0
|
||||
|
||||
@@ -1,61 +1,61 @@
|
||||
n mass radius x y z vx vy vz fix_x fix_y fix_z
|
||||
1 1 0.1 0 0 1 0 0 0 0 1 1
|
||||
2 1 0.1 1 0 0 0 0 0 0 1 1
|
||||
3 1 0.1 2 0 0 0 0 0 0 1 1
|
||||
4 1 0.1 3 0 0 0 0 0 0 1 1
|
||||
5 1 0.1 4 0 0 0 0 0 0 1 1
|
||||
6 1 0.1 5 0 0 0 0 0 0 1 1
|
||||
7 1 0.1 6 0 0 0 0 0 0 1 1
|
||||
8 1 0.1 7 0 0 0 0 0 0 1 1
|
||||
9 1 0.1 8 0 0 0 0 0 0 1 1
|
||||
10 1 0.1 9 0 0 0 0 0 0 1 1
|
||||
11 1 0.1 10 0 0 0 0 0 0 1 1
|
||||
12 1 0.1 11 0 0 0 0 0 0 1 1
|
||||
13 1 0.1 12 0 0 0 0 0 0 1 1
|
||||
14 1 0.1 13 0 0 0 0 0 0 1 1
|
||||
15 1 0.1 14 0 0 0 0 0 0 1 1
|
||||
16 1 0.1 15 0 0 0 0 0 0 1 1
|
||||
17 1 0.1 16 0 0 0 0 0 0 1 1
|
||||
18 1 0.1 17 0 0 0 0 0 0 1 1
|
||||
19 1 0.1 18 0 0 0 0 0 0 1 1
|
||||
20 1 0.1 19 0 0 0 0 0 0 1 1
|
||||
21 1 0.1 20 0 0 0 0 0 0 1 1
|
||||
22 1 0.1 21 0 0 0 0 0 0 1 1
|
||||
23 1 0.1 22 0 0 0 0 0 0 1 1
|
||||
24 1 0.1 23 0 0 0 0 0 0 1 1
|
||||
25 1 0.1 24 0 0 0 0 0 0 1 1
|
||||
26 1 0.1 25 0 0 0 0 0 0 1 1
|
||||
27 1 0.1 26 0 0 0 0 0 0 1 1
|
||||
28 1 0.1 27 0 0 0 0 0 0 1 1
|
||||
29 1 0.1 28 0 0 0 0 0 0 1 1
|
||||
30 1 0.1 29 0 0 0 0 0 0 1 1
|
||||
31 1 0.1 30 0 0 0 0 0 0 1 1
|
||||
32 1 0.1 31 0 0 0 0 0 0 1 1
|
||||
33 1 0.1 32 0 0 0 0 0 0 1 1
|
||||
34 1 0.1 33 0 0 0 0 0 0 1 1
|
||||
35 1 0.1 34 0 0 0 0 0 0 1 1
|
||||
36 1 0.1 35 0 0 0 0 0 0 1 1
|
||||
37 1 0.1 36 0 0 0 0 0 0 1 1
|
||||
38 1 0.1 37 0 0 0 0 0 0 1 1
|
||||
39 1 0.1 38 0 0 0 0 0 0 1 1
|
||||
40 1 0.1 39 0 0 0 0 0 0 1 1
|
||||
41 1 0.1 40 0 0 0 0 0 0 1 1
|
||||
42 1 0.1 41 0 0 0 0 0 0 1 1
|
||||
43 1 0.1 42 0 0 0 0 0 0 1 1
|
||||
44 1 0.1 43 0 0 0 0 0 0 1 1
|
||||
45 1 0.1 44 0 0 0 0 0 0 1 1
|
||||
46 1 0.1 45 0 0 0 0 0 0 1 1
|
||||
47 1 0.1 46 0 0 0 0 0 0 1 1
|
||||
48 1 0.1 47 0 0 0 0 0 0 1 1
|
||||
49 1 0.1 48 0 0 0 0 0 0 1 1
|
||||
50 1 0.1 49 0 0 0 0 0 0 1 1
|
||||
51 1 0.1 50 0 0 0 0 0 0 1 1
|
||||
52 1 0.1 51 0 0 0 0 0 0 1 1
|
||||
53 1 0.1 52 0 0 0 0 0 0 1 1
|
||||
54 1 0.1 53 0 0 0 0 0 0 1 1
|
||||
55 1 0.1 54 0 0 0 0 0 0 1 1
|
||||
56 1 0.1 55 0 0 0 0 0 0 1 1
|
||||
57 1 0.1 56 0 0 0 0 0 0 1 1
|
||||
58 1 0.1 57 0 0 0 0 0 0 1 1
|
||||
59 1 0.1 58 0 0 0 0 0 0 1 1
|
||||
60 1 0.1 59 0 0 0 0 0 1 1 1
|
||||
1 1 0.1 0 0 0 0 0 0 1 1 0
|
||||
2 1 0.1 1 0 0 0 0 0 1 1 0
|
||||
3 1 0.1 2 0 0 0 0 0 1 1 0
|
||||
4 1 0.1 3 0 0 0 0 0 1 1 0
|
||||
5 1 0.1 4 0 0 0 0 0 1 1 0
|
||||
6 1 0.1 5 0 0 0 0 0 1 1 0
|
||||
7 1 0.1 6 0 0 0 0 0 1 1 0
|
||||
8 1 0.1 7 0 0 0 0 0 1 1 0
|
||||
9 1 0.1 8 0 0 0 0 0 1 1 0
|
||||
10 1 0.1 9 0 0 0 0 0 1 1 0
|
||||
11 1 0.1 10 0 0 0 0 0 1 1 0
|
||||
12 1 0.1 11 0 0 0 0 0 1 1 0
|
||||
13 1 0.1 12 0 0 0 0 0 1 1 0
|
||||
14 1 0.1 13 0 0 0 0 0 1 1 0
|
||||
15 1 0.1 14 0 0 0 0 0 1 1 0
|
||||
16 1 0.1 15 0 0 0 0 0 1 1 0
|
||||
17 1 0.1 16 0 0 0 0 0 1 1 0
|
||||
18 1 0.1 17 0 0 0 0 0 1 1 0
|
||||
19 1 0.1 18 0 0 0 0 0 1 1 0
|
||||
20 1 0.1 19 0 0 0 0 0 1 1 0
|
||||
21 1 0.1 20 0 0 0 0 0 1 1 0
|
||||
22 1 0.1 21 0 0 0 0 0 1 1 0
|
||||
23 1 0.1 22 0 0 0 0 0 1 1 0
|
||||
24 1 0.1 23 0 0 0 0 0 1 1 0
|
||||
25 1 0.1 24 0 0 0 0 0 1 1 0
|
||||
26 1 0.1 25 0 0 0 0 0 1 1 0
|
||||
27 1 0.1 26 0 0 0 0 0 1 1 0
|
||||
28 1 0.1 27 0 0 0 0 0 1 1 0
|
||||
29 1 0.1 28 0 0 0 0 0 1 1 0
|
||||
30 1 0.1 29 0 0 0 0 0 1 1 0
|
||||
31 1 0.1 30 0 0 0 0 0 1 1 0
|
||||
32 1 0.1 31 0 0 0 0 0 1 1 0
|
||||
33 1 0.1 32 0 0 0 0 0 1 1 0
|
||||
34 1 0.1 33 0 0 0 0 0 1 1 0
|
||||
35 1 0.1 34 0 0 0 0 0 1 1 0
|
||||
36 1 0.1 35 0 0 0 0 0 1 1 0
|
||||
37 1 0.1 36 0 0 0 0 0 1 1 0
|
||||
38 1 0.1 37 0 0 0 0 0 1 1 0
|
||||
39 1 0.1 38 0 0 0 0 0 1 1 0
|
||||
40 1 0.1 39 0 0 0 0 0 1 1 0
|
||||
41 1 0.1 40 0 0 0 0 0 1 1 0
|
||||
42 1 0.1 41 0 0 0 0 0 1 1 0
|
||||
43 1 0.1 42 0 0 0 0 0 1 1 0
|
||||
44 1 0.1 43 0 0 0 0 0 1 1 0
|
||||
45 1 0.1 44 0 0 0 0 0 1 1 0
|
||||
46 1 0.1 45 0 0 0 0 0 1 1 0
|
||||
47 1 0.1 46 0 0 0 0 0 1 1 0
|
||||
48 1 0.1 47 0 0 0 0 0 1 1 0
|
||||
49 1 0.1 48 0 0 0 0 0 1 1 0
|
||||
50 1 0.1 49 0 0 0 0 0 1 1 0
|
||||
51 1 0.1 50 0 0 0 0 0 1 1 0
|
||||
52 1 0.1 51 0 0 0 0 0 1 1 0
|
||||
53 1 0.1 52 0 0 0 0 0 1 1 0
|
||||
54 1 0.1 53 0 0 0 0 0 1 1 0
|
||||
55 1 0.1 54 0 0 0 0 0 1 1 0
|
||||
56 1 0.1 55 0 0 0 0 0 1 1 0
|
||||
57 1 0.1 56 0 0 0 0 0 1 1 0
|
||||
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
|
||||
|
||||
@@ -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.5 0 0 0.1 0 0 0 0 0 all
|
||||
1 0 0 0.5 0 0 0.1 0 0 90 all
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
step_simulate: 1 # 运行物理模拟 → output/trajectory.txt
|
||||
step_sample: 1 # 抽帧 → output/display.txt
|
||||
step_plot: 0 # 绘制轨迹/能量图 → output/trajectory_plots.png
|
||||
step_plot_wave: 0 # 绘制波形能量动画 → output/wave_animation.gif
|
||||
step_animation: 1 # 自动播放 VisPy 3D 动画窗口(需安装 vispy)
|
||||
force_calc: 0 # 强制重新计算:1=跳过缓存强算,0=自动使用已有输出
|
||||
|
||||
@@ -63,7 +64,7 @@ warmup_steps: 0 # 默认 0(立即开始记录)
|
||||
T_total: 50.0
|
||||
|
||||
# 抽帧间隔(每 NSTEP 步取一帧用于动画)
|
||||
NSTEP: 50
|
||||
NSTEP: 100
|
||||
|
||||
# ── 时间步长 ──────────────────────────────────
|
||||
DT: 0.001 # 时间步长 (s)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
"""
|
||||
Case runner for Dynamics case05 — 1D atomic chain.
|
||||
Case runner for Dynamics case06 — 1D atomic chain (transverse wave).
|
||||
|
||||
This script keeps program and data separated:
|
||||
- program: ../../dynamics.py
|
||||
|
||||
Reference in New Issue
Block a user