# 物理模拟参数配置 # 格式:YAML # 用法:python run_dynamics.py # ── 流程控制 ────────────────────────────────── # 每步用 0/1 单独开关,1=执行,0=跳过 # 依赖关系:抽帧依赖模拟结果,绘图依赖模拟+抽帧 step_simulate: 1 # 运行物理模拟 → output/trajectory.txt step_sample: 1 # 抽帧 → output/display.txt step_plot: 1 # 绘制轨迹/能量图 → output/trajectory_plots.png step_animation: 1 # 自动播放 VisPy 3D 动画窗口(需安装 vispy) force_calc: 0 # 强制重新计算:1=跳过缓存强算,0=自动使用已有输出 # ── 计算引擎 ────────────────────────────────── # 可选: python, c, cpp, fortran, java # python = Python 参考实现(compute.py) # c = C 引擎 (engines/c/build/dynamics_c) # cpp = C++ 引擎 (engines/cpp/build/dynamics_cpp) # fortran = Fortran 引擎 (engines/fortran/build/dynamics_f90) engine: python # 默认使用 Python 引擎 # ── 盒子 ────────────────────────────────────── box_a: 20.0 # 立方体半边长,粒子被限制在 [-box_a, box_a]³ 内 # ── 初始构型 ────────────────────────────────── # 坐标文件格式: # 第一行:n mass radius x y z vx vy vz # 后续行:原子序号 质量 半径 x y z vx vy vz coord_file: input/coord.txt connection_file: input/connection.txt bond_file: input/bond.txt driver_file: input/driver.txt # 驱动力定义文件(driving_force=1 时生效) # 绘图/动画展示的原子序号(对应 coord_file 第一列 n) plot_atom: 1 # ── 物理参数 ────────────────────────────────── # 三个方向分量分别对应 x, y, z G: [0.0, 0.0, -9.8] # 重力场分量 (m/s²) # B: [0.5, 0.5, 0.5] # 阻尼分量 B: [0.0, 0.0, 0.0] # 阻尼分量 # ── 力开关(0=关闭, 1=开启)────────────────── gravity_field: 0 # 均匀重力场 (G) gravity_interaction: 1 # 原子间万有引力 elastic_force: 0 # 弹簧键力 damping_force: 0 # 阻尼 (B) driving_force: 0 # 驱动力(需 driver_file 定义) # gravity_strength: 100.0 # 万有引力强度(仅 gravity_interaction=1 时有效) # ── 数值算法 ────────────────────────────────── # 可选: # explicit_euler 显式欧拉法 # implicit_euler 隐式欧拉法 # midpoint 中点法 # leapfrog 蛙跳法 method: leapfrog # ── 步骤控制 ────────────────────────────────── # 以下参数控制哪些步骤被执行和保存 # 预热步数:模拟开始时跳过不保存的步数(用于稳定初始状态) warmup_steps: 0 # 默认 0(立即开始记录) # 总模拟时间(秒),程序自动计算 NT = T_total / DT # 如果同时指定了 NT,以 NT 为准 T_total: 10.0 # 抽帧间隔(每 NSTEP 步取一帧用于动画) NSTEP: 100 # ── 时间步长 ────────────────────────────────── DT: 0.001 # 时间步长 (s) # 抽帧范围:只保存 [sample_start, sample_end) 区间内的帧 sample_start: null # null 表示从头开始(帧索引从 0 起) sample_end: null # null 表示到末尾 # ── 渲染方式 ────────────────────────────────── # 3D 动画中原子渲染方式: # 0 = Sphere (网格球体,效果精细,原子数少时推荐) # 1 = Marker (GPU 实例化点,原子数多时性能更佳) use_marker: 0 # ── 显示参数 ────────────────────────────────── # 盒子透明度:单个数值(统一)或 6 个数的数组,按 [-x,+x,-y,+y,-z,+z] 顺序 alpha: [0.0, 0.0, 0.0, 0.0, 0.0, 0.5] # 小球颜色 # 小球半径从 coord_file 的 radius 列读取 ball_color_r: 0.90 # R 分量 (0~1) ball_color_g: 0.20 # G 分量 ball_color_b: 0.20 # B 分量 # 盒子面颜色 box_color_r: 0.80 box_color_g: 0.80 box_color_b: 0.85