Files
dynamics/examples/Readme.md
T
admin 0e636e275d docs: 更新 examples/Readme.md 并新增 Readme.html
- 覆盖全部 10 个案例(原 Readme 只到 case06)
- 新增案例选择指南表格
- Readme.html 为深色主题独立 HTML 页面
  (含卡片布局、标签分类、代码高亮、响应式设计)
- 各案例详情对齐最新配置参数
2026-06-17 15:33:49 +08:00

164 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dynamics 示例案例
本目录包含 10 个从简单到复杂的物理模拟案例,均基于 `../dynamics.py` 框架运行。
---
## 案例一览
| 案例 | 标题 | 简介 | 原子数 | 引擎 | 力类型 |
|------|------|------|--------|------|--------|
| [case01](./case01/) | **双粒子弹簧系统** | 两个原子由弹簧连接,在重力场中运动 | 2 | Python | 重力 + 弹簧 |
| [case02](./case02/) | **行星运动** | 地球绕太阳椭圆公转(万有引力) | 2 | Python | 万有引力 |
| [case03](./case03/) | **日地月系统(失稳)** | 地球绕太阳、月球绕地球,参数不当导致失稳 | 3 | Python | 万有引力 |
| [case04](./case04/) | **日地月系统(稳定)** | 地球绕太阳、月球绕地球,稳定轨道 | 3 | Python | 万有引力 |
| [case05](./case05/) | **一维原子链纵波** | 驱动原子 1 沿 x 轴振动,产生纵波传播 | 60 | Python | 弹簧 + 驱动力 |
| [case06](./case06/) | **一维原子链横波(阻尼)** | 驱动原子 1 沿 z 轴振动,带阻尼的横波传播 | 120 | C | 弹簧 + 阻尼 + 驱动力 |
| [case07](./case07/) | **一维原子链横波(双端驱动)** | 原子 1 和原子 120 同时受 z 方向驱动 | 120 | C | 弹簧 + 阻尼 + 驱动力 |
| [case08](./case08/) | **双原子弹簧(C 引擎测试)** | 两个原子弹簧系统,C 引擎快速验证 | 2 | C | 弹簧 + 阻尼 + 驱动力 |
| [case09](./case09/) | **一维链纵波(Fortran 引擎)** | Fortran 引擎驱动的纵波传播测试 | 40 | Fortran | 弹簧 + 驱动力 |
| [case10](./case10/) | **一维链纵波(能量分析)** | 纵波传播 + 轨迹/能量图绘制 | 40 | C | 弹簧 + 驱动力 |
---
## 各案例详细说明
### case01 — 双粒子弹簧系统
两个原子通过弹簧连接,在均匀重力场中自由运动。原子 1 位于 x=-1,原子 2 位于 x=1(初始 z=1),展示了在重力作用下的耦合振动与落体运动的复合。
- **力开关**:重力场开,弹簧键力开
- **算法**leapfrog(蛙跳法)
- **物理**:重力 m·g + 弹簧胡克力
- **渲染**:Sphere 模式(精细网格球体)
### case02 — 行星运动
模拟地球绕太阳的椭圆轨道运动(一个固定大质量中心体 + 一个绕行小质量体)。采用万有引力相互作用。
- **力开关**:万有引力开(含强度参数 `gravity_strength: 100.0`
- **算法**leapfrog(蛙跳法)
- **物理**:牛顿万有引力 F = G·m₁·m₂/r²
- **渲染**Sphere 模式
### case03 — 日地月系统(失败案例)
三体系统:太阳(中心)、地球、月球。由于初始条件或参数设置不当,轨道不稳定,展示了数值模拟中参数选择的重要性。
- **力开关**:万有引力开
- **算法**leapfrog(蛙跳法)
- **状态**:轨道发散或碰撞
### case04 — 日地月系统(成功案例)
与 case03 相同的三体系统,但采用了恰当的初始条件和参数,地球和月球都能维持稳定的轨道运动。
- **力开关**:万有引力开
- **算法**leapfrog(蛙跳法)
- **状态**:稳定椭圆轨道
### case05 — 一维原子链纵波
60 个原子沿 x 轴等间距排列(间距 1),相邻原子用弹簧(k=1.0, L₀=1.0)连接。原子 1 受 x 方向驱动力 `x(t)=0.5·cos(2π·t)`,产生沿链传播的**纵波**(压缩波/疏密波)。原子 x 方向自由(fix_x=0),y/z 锁定。
- **力开关**:弹簧键力开,驱动力开
- **算法**leapfrog(蛙跳法)
- **波速**:快(x 方向弹簧力为线性)
- **渲染**Marker 模式(GPU 实例化,60 原子)
### case06 — 一维原子链横波(带阻尼)
120 个原子沿 x 轴等间距排列(间距 1),相邻原子用弹簧(k=1.0, L₀=1.0)连接,带横向阻尼(B=[0.01, 0, 0.01])。驱动在 z 方向 `z(t)=0.5·cos(2π·0.1·t+90°)`,原子 z 方向自由(fix_z=0),x/y 锁定。
- **力开关**:弹簧键力开,驱动力开,阻尼开
- **算法**leapfrog(蛙跳法)
- **引擎**C(高性能)
- **参数**T_total=1000, NSTEP=500
- **波速**:慢(z 方向弹簧力呈几何非线性,类似 FPU 系统)
### case07 — 一维原子链横波(双端驱动)
120 个原子沿 x 轴排列,原子 1 **和**原子 120 同时受 z 方向驱动力驱动(频率相同,初相位错开 90°),产生两端向中间传播的横波相遇。
- **力开关**:弹簧键力开,驱动力开,阻尼开
- **引擎**C
- **参数**T_total=1000, NSTEP=500
- **视觉放大**:z 方向位移放大 10 倍(`display_amp: [1, 1, 10]`),便于观察小幅度横波
### case08 — 双原子弹簧(C 引擎快速测试)
2 个原子的简单弹簧系统,用于快速验证 C 引擎的正确性和性能。T_total 仅为 100s。
- **力开关**:弹簧键力开,驱动力开,阻尼开
- **引擎**C
- **用途**:引擎验证 / 调试
- **视觉放大**:z 方向位移放大 10 倍
- **动画**:关闭(step_animation=0),仅输出波形图
### case09 — 一维链纵波(Fortran 引擎)
40 个原子沿 x 轴排列,使用 **Fortran 引擎**驱动的纵波传播模拟。验证 Fortran 引擎的输出兼容性和性能。
- **力开关**:弹簧键力开,驱动力开,阻尼关
- **引擎**Fortran
- **参数**T_total=200, NSTEP=100
- **视觉放大**:z 方向位移放大 10 倍
### case10 — 一维链纵波(能量分析)
40 个原子沿 x 轴排列,纵波传播。与 case05 相比,x/y/z 全部自由(fix_x/y/z 均为 0),物理行为更复杂。支持轨迹/能量图绘制(step_plot=1)。
- **力开关**:弹簧键力开,驱动力开,阻尼关
- **引擎**C
- **参数**T_total=10, NSTEP=20
- **视觉放大**:z 方向位移放大 10 倍
- **动画**:关闭(step_animation=0),仅输出轨迹/能量图
---
## 通用使用方法
```bash
# 进入任意案例目录
cd examples/case05
# 完整运行(模拟 + 3D 动画)
python run_dynamics.py
# 仅运行模拟,跳过 3D 动画
python run_dynamics.py --no-plot
# 手动查看 3D 动画
python ../../draw.py output/
```
每个案例的 `input/input.txt` 中可配置所有物理参数、力开关、算法、渲染方式等。
## 案例选择指南
| 你想做什么 | 推荐案例 |
|-----------|---------|
| 快速上手、理解基本框架 | case01 |
| 天体力学 / 万有引力 | case02 / case04 |
| 波动物理(纵波) | case05 |
| 波动物理(横波、非线性、阻尼) | case06 |
| 双端驱动/波干涉 | case07 |
| 对比不同引擎性能 | case08 (C) / case09 (Fortran) |
| 能量分析 | case10 |
## 框架结构
```
dynamics/
├── dynamics.py # 统一运行入口
├── compute.py # Python 物理引擎
├── draw.py # VisPy 3D 动画
├── plot_wave.py # 波形能量图(需 matplotlib
├── engines/ # C / C++ / Fortran 引擎
├── examples/ # 案例(本目录)
│ ├── case01/
│ ├── ...
│ └── case10/
└── output/ # 默认输出目录
```