Commit Graph

16 Commits

Author SHA1 Message Date
admin f1afb7c479 feat: 摄像机初始位置可在 input.txt 配置
新增 input.txt 字段:
  camera_distance:  40.0   # 到场景中心的距离
  camera_elevation: 0      # 俯仰角
  camera_azimuth:   0      # 方位角

通过 display.txt header 传递到 draw.py,
不再硬编码在 draw.py 中。
2026-06-12 07:48:37 +08:00
admin 757a891a43 feat: display.txt 传递原子半径数组,draw.py 读取 per-atom 半径
之前所有原子使用统一的 ball_radius(来自 input.txt),
现在 display.txt header 包含 atom_radii 字段(逗号分隔
的半径数组),draw.py 据此为每个原子设置独立半径。
fallback:若没有 atom_radii 字段,仍使用 ball_radius。
2026-06-12 07:46:28 +08:00
admin 54aa20d7c5 fix: display.txt 缺失 alpha 透明度参数,draw.py 读取不到
alpha(盒子透明度)未写入 display.txt header,
draw.py 回退到默认 0.2 而非 input.txt 配置值。
现在 alpha 通过 header 字段正确传递。

Python 引擎:alpha 支持单值或数组 → 逗号分隔字符串
外部引擎:从 trajectory.txt 读取 alpha 值
2026-06-12 07:24:38 +08:00
admin 6b5e12da46 fix: display.txt 丢失 use_marker 导致强制使用 Sphere 渲染模式
新格式 display.txt 未包含 use_marker 字段,draw.py 中
USE_MARKER 被硬编码为 0(Sphere 模式),对 120 个原子
每帧更新 120 次 STTransform 极慢。

修复:将 use_marker 加入 display.txt header,draw.py 从
header 读取而非硬编码。case06 配置 use_marker: 1 会
自动启用 Marker(GPU 实例化)模式,动画流畅。
2026-06-12 07:04:29 +08:00
admin 7417d47658 perf: 重写 load_display_txt 使用 np.genfromtxt 批量解析
旧实现逐行 split()+float() 解析数据行要几十秒,
新实现将数据行收集后用 np.genfromtxt 一次性批量解析,
加载 200帧×120原子 仅需 0.087s(比之前快 100x+)。
2026-06-12 07:01:52 +08:00
admin a3fa8b90f6 feat: display.txt 新增 T_total 头字段(总模拟时间=NT×DT) 2026-06-12 06:55:38 +08:00
admin ab3a847483 fix: display.txt 的 number of frames 改为实际抽帧数而非总步数
之前 number of frames 错误地填入了 record_steps(=NT),
实际应该填入 n_frames_actual(=NT/NSTEP)。如 NT=20000,
NSTEP=100 时抽得 200 帧,现在正确显示为 200。
总步数仍在 dynamic_steps 中记录。
2026-06-12 06:51:59 +08:00
admin 0c332b7dfc feat: display.txt 新增 dynamic_steps 头字段记录实际计算步数 2026-06-12 06:47:17 +08:00
admin 9d1f84d2bf refactor: 引擎直接抽帧 + 新 display.txt 纯文本格式 + save_trajectory 开关
核心变更:
1. compute.py: run_simulation 直接按 NSTEP 抽帧写 display.txt(新格式)
   - 新格式:纯文本,帧 1→n 分块,每行: n x y z vx vy vz
   - 新函数 save_display_txt() / load_display_txt()
   - save_trajectory 参数(默认0=不保留 trajectory.txt)
2. dynamics.py: 移除旧 JSON 采样逻辑,自动检测 display.txt
   - Python 引擎直接读取引擎输出的 display.txt
   - 外部引擎仍写 trajectory.txt,自动抽帧转 display.txt
3. draw.py: 适配 load_display_txt() 新格式
4. case06/input.txt: 添加 save_trajectory: 0, step_sample: 0

TODO: 外部引擎(C/C++/Fortran)内部抽帧写 display.txt
TODO: plot_wave.py 适配新格式
TODO: 其他案例 input.txt 更新默认值
2026-06-12 06:36:50 +08:00
admin 52505e9aff fix(compute): 修复进度条跳变(20%→100%)
原因:外部引擎 stdout 管道缓存,Python 每 0.2s 读一行,
引擎结束时管道中大量库存进度消息没被用于更新进度条。

修复:
1. 子进程退出时扫描残留 stdout 中的 progress 消息并更新 pbar
2. sleep 从 0.2s 降到 0.05s,提高读取频率
2026-06-11 22:48:34 +08:00
admin db50ac6d4d feat: 外部引擎实时进度条 + C引擎read_bonds rewind修复
1. 引擎端:C/C++/Fortran 主循环每 1% 输出 progress 到 stdout
2. compute.py:读取 "[xxx] progress: N/total" 行更新 tqdm
3. 移除不准的时间估算逻辑,改用真实引擎进度
4. C引擎 read_bonds:rewind 后补 fgets 跳表头
5. gitignore 添加 output_test/
2026-06-11 21:36:30 +08:00
admin e353e04133 fix(compute): 校准测速使用真实临时目录替代 os.devnull
os.devnull 在 Windows 上为 NUL,外部引擎(C/C++/Fortran)
试图写入 NUL/trajectory.txt 会失败退出,导致校准时间
完全无效,进度条按错误估计跑(例如卡在 59% 不动)。

改为创建 _calib_out 临时目录,校准后清理。
现在进度条显示正确的剩余时间估计(如 [00:00<00:11])。
2026-06-11 19:25:26 +08:00
admin 685234c84f feat: 为 C/C++/Fortran 引擎增加驱动力(driving_force)支持
- param.json 新增 driving_force 开关
- C 引擎: 新增 DriverData 结构体、read_driver()、apply_driving_force()
- C++ 引擎: 同上(C++ 风格实现)
- Fortran 引擎: 同上(Fortran 90 风格实现)
- 修复 JSON 输出末尾逗号导致加载失败的问题
- 编译通过并验证 C 引擎运行正常(100000步/6.6s)
2026-06-11 09:19:34 +08:00
admin 854f00ae44 feat: 增加驱动力系统、Marker渲染模式、动画防闪退、案例文档
- 新增 driving_force 驱动力系统(driver.txt 定义,支持周期控制)
- 新增 use_marker 渲染开关(GPU实例化点精灵,提升大量原子性能)
- 修复动画闪退:独立控制台、错误日志、启动存活检测
- 重绘 draw.py 架构:双渲染模式 + 预分配键线缓冲区
- 修复 raw trajectory 采样时间变量遮蔽 bug
- 重构 case05: 60原子一维链 + 驱动力 + 完整案例文档
- 修复所有案例 Readme.md 编码(GBK → UTF-8)
- 所有 input.txt 新增 driver_file / driving_force / use_marker 参数
2026-06-10 15:34:53 +08:00
admin 5de80d4f7e modified: CMakeLists.txt
modified:   INSTALL.md
	modified:   README.md
	modified:   build_release_zip.py
	modified:   compute.py
	new file:   doc/index.html
	modified:   dynamics.py
	modified:   engines/c/main.c
	modified:   engines/cpp/main.cpp
	modified:   engines/fortran/main.f90
	modified:   examples/case01/input/coord.txt
	renamed:    examples/case01/input/parameters.yaml -> examples/case01/input/input.txt
	modified:   examples/case01/run_dynamics.py
	new file:   examples/case02/input/bond.txt
	new file:   examples/case02/input/connection.txt
	new file:   examples/case02/input/coord.txt
	new file:   examples/case02/input/input.txt
	new file:   examples/case02/run_dynamics.py
2026-05-20 16:03:59 +08:00
admin 45513fe334 init 2026-05-17 08:47:25 +08:00