admin
75d8aae1f2
fix: 修复 DLL 文件被 git CRLF 转换损坏
...
将 DLL 标记为 binary,禁止行尾转换
2026-06-21 08:17:08 +08:00
admin
dd6fbdfccf
chore: .gitattributes 标记 DLL 为二进制文件
2026-06-21 08:16:43 +08:00
admin
eea62de479
fix: case05 atom 1 z=0(起点拉回链平面)
2026-06-21 08:13:23 +08:00
admin
1261398be2
fix: case05 启用 step_simulate=1
2026-06-21 08:11:34 +08:00
admin
369b840cf2
fix: Makefile Windows 检测兼容 Msys2/MINGW 环境
...
uname -s 在 Msys2 上返回 MINGW64_NT-* 而非 Windows,
添加 findstring 匹配确保静态链接选项生效
2026-06-21 05:58:37 +08:00
admin
7fb2b730e9
refactor: 源码迁至 engines/src/,删除旧的 engines/{c,cpp,fortran}/
...
- 删除 engines/{c,cpp,fortran}/ 目录(源码和 Makefile 已移至 src/)
- engines/src/{c,cpp,fortran}/: 清理 main.*/bak 等无用文件
- Makefile 改为直接编译 DLL 到 engines/release/
- .gitignore: 更新路径指向 engines/src/*/build/
- engine_dll.py: 更新注释中的编译命令路径
2026-06-21 05:42:29 +08:00
admin
e371fa8db1
refactor: 移除旧子进程模式的 main.* 源文件,Makefile 只编译 DLL
...
- 删除 engines/c/main.c, engines/cpp/main.cpp, engines/fortran/main.f90
- Makefile 移除 all/exe 构建目标,默认只编译 DLL
2026-06-21 05:33:52 +08:00
admin
7468a2d458
chore: 清理引擎目录旧校准缓存 _calib_cache.json
...
旧子进程模式的预校准缓存,切换到 DLL 路径后已无代码引用
2026-06-21 05:28:24 +08:00
admin
76a26d888e
chore: 清理旧的引擎参数/校准 JSON 文件
...
- c.json / fortran.json: 旧子进程模式参数,DLL 路径不再需要
- _calib_c.json / _calib_fortran.json: 旧预校准缓存,DLL 路径实时跟踪无需预跑
2026-06-21 05:25:31 +08:00
admin
8183cbc22e
chore: .gitignore 去掉全局 *.dll 限制,release DLL 可自由提交
2026-06-21 05:21:22 +08:00
admin
41c454eeab
refactor: 引擎只走 DLL 路径,release 目录清理 exe
...
- dynamics.py: 去掉 exe 子进程回退,只走 DLL 路径
- .gitignore: 白名单 engines/release/dynamics_*.dll
- engines/release/: 移除 dynamics_*.exe,新增 3 个引擎 DLL
2026-06-21 05:19:33 +08:00
admin
6c06c00f4b
fix: Fortran engine use_marker/alpha header passthrough + case04 Moon orbit fix
...
- engines/fortran/main.f90:
- 新增 use_marker 和 alpha_str 的读取、传递、写入 display.txt header
- 新增 json_get_alpha 函数兼容 JSON 单值或 6 元数组
- engines/release/: 引擎校准缓存 & fortran.json 参数
- examples/case04/: 修正月球位置 (11.5→10.5) 和速度 (526→647),
地月距缩至希尔半径以内 (0.5 < 1.0), 新增希尔半径验证说明
- examples/Readme.html: case04/case09 描述更新
2026-06-19 08:05:05 +08:00
admin
c8d12e7f45
docs: case04 Readme.html 新增月球绕地轨道交互图
...
- 月球轨道图使用绿色配色,与地球轨道图(蓝色)区分
- 默认偏心率 e=0.0549(月球真实值)
- 标注半长轴 a / 半短轴 b / 偏心距 c
- 标注近地点/远地点距离
- 地球在左焦点,月球在椭圆轨道运行
- 独立滑块控制月球偏心率
2026-06-18 23:06:55 +08:00
admin
7078cbc744
fix: 轨道示意图太阳移至左焦点,默认 e=0.017(地球真实 0.0167)
...
- 椭圆中心改为 cx+f,使左焦点=cx 为太阳
- 偏心距标注从椭圆中心指向左焦点
- a/b 标注、近日点/远日点位置同步修正
- 滑块映射改为 e=value/1000(精度 0.001)
- 滑块默认值 17 → e=0.017 ≈ 地球真实 0.0167
2026-06-18 23:05:23 +08:00
admin
d4ce23a07e
feat: case04 以月球质量=1 为基准更新质量比和质量缩放
...
- coord.txt: 太阳 27000 / 地球 81 / 月球 1(月球=1 质量单位)
- 地球绕日轨道速度 v=520(v = sqrt(g_strength * M_sun / r))
- 月球绕地速度 v=526(地球速度 + 6 绕地附加速度)
- box_a: 20 → 30(容纳更大轨道半径)
- Readme.html 同步更新质量表和初始构型表
- 已知局限说明太阳质量缩至 1/1000 的原因
2026-06-18 23:03:36 +08:00
admin
84aed813df
docs: case04 Readme.html 新增交互式轨道示意图
...
使用 HTML5 Canvas + JavaScript 绘制椭圆轨道图,
支持滑块调整偏心率 e(0~0.85),实时更新:
- 椭圆形状变化
- a/b/c 参数标注
- 近日点/远日点数值
- 速度矢量方向
- 底部信息面板
2026-06-18 23:01:04 +08:00
admin
f6c468702f
docs: case04 新增 Readme.html 含 MathJax 公式
...
涵盖天体质量/轨道参数/偏心率/开普勒定律/近日点速度
公式等全部天体力学内容,使用 MathJax 3 (SVG) 渲染。
2026-06-18 22:59:07 +08:00
admin
8b82d3c4e4
fix: leapfrog 模式缺少边界反弹导致粒子穿模
2026-06-18 14:28:56 +08:00
admin
80b7467421
fix: leapfrog 模式缺少边界反弹,粒子穿透地板
...
问题:leapfrog 模式的主循环直接调用 leapfrog_staggered_step,
未经过 apply_motion_update,因此 Limit_in_box(边界反弹)
从未被执行。粒子超出 z<-20 后被 wrap_position 回绕到顶端,
导致物理行为完全错误。
修复:
1. 在预热和记录两个循环中,leapfrog 路径后显式调用
Limit_in_box(与 apply_motion_update 内的非 leapfrog 路径一致)
2. 移除 apply_motion_update 末尾重复的 Limit_in_box 调用
(统一到主循环中执行)
2026-06-18 09:28:38 +08:00
admin
974216332c
docs: 更新 examples 文档,移动引擎源码结构
...
- 更新 examples/Readme.md 覆盖全部 10 个案例
- 新增 examples/Readme.html 案例总览页面
- 引擎源码移至 engines/src/ 目录
- 编译产物统一至 engines/release/(静态编译)
- compute.py/engine_dll.py 路径同步更新
2026-06-17 16:18:19 +08:00
admin
a16d2239a1
refactor: 引擎源码移至 src/,编译产物统一至 release/
...
- 源码: engines/c/ → engines/src/c/
- 源码: engines/cpp/ → engines/src/cpp/
- 源码: engines/fortran/ → engines/src/fortran/
- 编译产物: engines/release/ (静态编译)
- dynamics_c.exe (516KB, C 引擎)
- dynamics_cpp.exe (3.3MB, C++ 引擎)
- dynamics_f90.exe (988KB, Fortran 引擎)
- compute.py: engine_map 指向 release/
- compute.py: param.json 和校准缓存移至 release/
- engine_dll.py: DLL 搜索路径指向 release/
- release/ 目录纳入 git 版本管理,用户克隆后直接可用
2026-06-17 15:48:30 +08:00
admin
0e636e275d
docs: 更新 examples/Readme.md 并新增 Readme.html
...
- 覆盖全部 10 个案例(原 Readme 只到 case06)
- 新增案例选择指南表格
- Readme.html 为深色主题独立 HTML 页面
(含卡片布局、标签分类、代码高亮、响应式设计)
- 各案例详情对齐最新配置参数
2026-06-17 15:33:49 +08:00
admin
ea99f09f9b
feat: add energy flux density panel to plot_wave animation
...
Add compute_energy_flux() using the Hardy formula:
J_b = 1/2 * F_bond_on_i * (v_i + v_j)
New 4th subplot shows J vs bond position (x coordinate of bond midpoint).
J > 0: energy flows rightward; J = 0: standing wave; J < 0: leftward.
Ideal standing wave would show J ≈ 0 everywhere.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 08:54:01 +08:00
admin
b584c4489c
refactor: merge wave/energy panels into 3 vertical subplots
...
- Plot 1: x/y/z displacements overlaid on one axes
- Plot 2: per-atom KE/PE/total energy overlaid on one axes
- Plot 3: system energy vs time (unchanged)
All three stacked vertically. Shared y-axis scale within each panel.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 08:32:41 +08:00
admin
2ab3436235
feat: redesign plot_wave with per-atom energy panels
...
New 4x2 layout: left col = x/y/z displacement waves, right col = per-atom KE/PE/total energy + system energy vs time.
PE split 50/50 for normal bonds; 100% to non-driven atom when bonded to driver; driven atom PE = E_SHO - KE.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 08:26:51 +08:00
admin
39ff650539
fix: show interactive window when plot_wave_save_gif/mp4 are both 0
...
Use Agg backend and show=False only when saving to file.
When neither gif nor mp4 is requested, show the animation window interactively.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 08:14:40 +08:00
admin
1cefe184d7
fix: plot_wave plt.show() crash when called non-interactively
...
Add show=False parameter to plot_wave(); when called from dynamics.py,
pass show=False and set matplotlib Agg backend to avoid NonGuiException.
Also print full traceback on failure for easier debugging.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 08:10:16 +08:00
admin
d371b28acc
feat: add display_amp parameter for visual displacement amplification
...
Supports display_amp: [ax, ay, az] in input.txt. On rendering, each atom's
displacement from its frame-0 equilibrium is multiplied by the corresponding
factor. Physics is unchanged; only the rendered positions are scaled.
Useful for visualizing small-amplitude waves that would otherwise be invisible.
Example: display_amp: [1.0, 1.0, 5.0] exaggerates z-direction motion 5x.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 07:28:56 +08:00
admin
d489222eaf
fix: driven atoms now oscillate around their initial equilibrium position
...
Previously, apply_driving_force set absolute position to A*cos(2π f t + φ),
ignoring the atom's initial coordinates. For atoms not at the origin (e.g.,
atom 120 at x=119), this incorrectly forced them back toward the origin each
step, causing severe distortion and numerical explosion.
Fix: store each driven atom's initial position as eq_pos/eq_x/eq_y/eq_z at
load time; position is now eq + A*cos(2π f t + φ) in all four engines
(Python, C, C++, Fortran).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-13 07:23:25 +08:00
admin
e62e536cee
feat: 真蛙跳法重构(Python/C/C++/Fortran 四引擎统一)
...
- 新增 compute_accel_conservative / accel_conservative:
保守力加速度(弹簧+重力+原子间引力),不含阻尼,供蛙跳专用
- 重写 leapfrog_step / leapfrog_full:
- 无阻尼:纯辛积分器,每步 1 次力计算(原 Velocity-Verlet 需 2 次)
- 有阻尼:半隐式处理 v(t+dt/2)=[v(t-dt/2)*(1-α)+a_c*dt]/(1+α),无条件稳定
- 主循环加初始化反向半步 v(-dt/2)=v(0)-0.5*a_c(0)*dt
- 修复 C/C++ number of frames 字段写采样帧数而非总积分步数的 bug
- Python 引擎:新增 display.npz 二进制格式,draw.py/plot_wave.py 优先读取
- 编译参数统一为 -O3 -march=native -ffast-math
2026-06-12 18:36:37 +08:00
admin
e1ade53fff
docs: 综合三工具六版本分析,输出 workbuddy_v2.md
...
基于 workbuddy.md / claude.md / codex.md 三份原始分析
及 claude_v1.md / codex_v1.md / workbuddy_v1.md 三份综合
版本,输出最终优化方案。
核心改进:
- 三工具角色定位框架(QA/Perf/Architect)
- Bug 三级分类(真 Bug / 已修复 / 疑似误报)
- 三阶段方案(修正确性→做性能→做治理)
- 自我评价与修正(v1→v2 改进表)
- 10 场景工具选择速查表
2026-06-12 15:45:47 +08:00
admin
d930fb558c
docs: 综合三方工具分析,输出最终优化方案 workbuddy_v1.md
...
对比 WorkBuddy/Claude/Codex 三款 AI 工具对同一代码库的
优化建议,以表格形式评价各自优劣(Bug 发现/代码质量/战略
思维/代码示例),最终整合为 6 阶段实施计划(11 人天)。
2026-06-12 15:39:31 +08:00
admin
782422e800
docs: 添加优化建议文档 optimization/workbuddy.md
...
涵盖架构/性能/代码质量/配置/测试/引擎一致性/UX 等
9 个方面、26 条具体建议,标注实施优先级和工作量。
2026-06-12 15:15:10 +08:00
admin
e40393d793
fix: display.txt 缺少渲染参数导致盒子不透明
...
外部引擎(C/C++)直接写 display.txt 时只输出基础物理参数
(DT/NSTEP/method 等),缺少 alpha/ball_color/box_color
等渲染参数,draw.py 读取不到 alpha 回退默认 0.2。
修复:
1. param.json 新增渲染参数(alpha/ball_color/box_color/...)
2. C/C++ 引擎 SimParams 新增对应字段 & JSON 读取
3. C/C++ write_display_txt 写入所有渲染参数 header
4. param.json ball_color/box_color 用数组统一存储
2026-06-12 15:05:46 +08:00
admin
dc7bc00616
feat: C/C++ 引擎支持 save_trajectory=0 时直接写 display.txt
...
所有引擎(Python/C/C++)在 save_trajectory=0 时行为一致:
- 计算时按 NSTEP 抽帧,只存 sampled 缓冲区
- 直接写入 display.txt(新文本格式)
- 不生成 trajectory.txt
Python 引擎:run_simulation 已支持 ✅
C 引擎:采样缓冲区 + write_display_txt ✅
C++ 引擎:采样缓冲区 + write_display_txt ✅
Fortran 引擎:待完成
compute.py run_engine:save_trajectory=0 时跳过 trajectory.txt 加载
dynamics.py:引擎直接输出 display.txt 时跳过抽帧步骤
2026-06-12 08:25:27 +08:00
admin
41790a782a
fix: save_trajectory=0 时删除 trajectory.txt,所有引擎保持一致
...
Python 引擎:run_simulation 已正确支持 save_trajectory ✅
外部引擎(C/C++/Fortran):save_trajectory_txt 仅在
save_trajectory=1 时调用;display.txt 生成后删除 trajectory.txt
补充:移除 compute.py 中重复的 'global use_marker' 和占位符
2026-06-12 08:18:07 +08:00
admin
6298ed5b34
fix: 外部引擎路径 display.txt 未随 T_total 变更刷新
...
当 T_total 从 20→100 时,外部引擎写入的 trajectory.txt 是新的,
但 display.txt 缓存未刷新(检查是否存在而非检查是否过期),
导致总帧数仍为 200(NT=20000 时的数据)。
修复:外部引擎路径总是从 trajectory.txt 重新抽帧生成 display.txt。
2026-06-12 08:11:44 +08:00
admin
b95a3579fc
feat: move_camera.txt 支持 all 关键词表示全程执行
...
在帧位置写 all 表示该段对所有帧生效:
all vx=0.1 ry=0.5 # 全程缓慢平移 + 旋转
等同于 start=0, end=INF,与普通区间段一样支持时间交叠。
2026-06-12 08:08:36 +08:00
admin
b4fed4fbb8
fix: 运动相机时间交叠时所有段依次作用
...
之前只取了第一个活动段 active[0],时间交叠时后面的段被忽略。
改为遍历所有段,按文件顺序依次施加平移和旋转。
排在前面的段优先作用于相机位置(矩阵非对易性保证)。
2026-06-12 08:06:15 +08:00
admin
c454162d0b
feat: draw.py 直接读取 move_camera.txt,修改后重启即生效
...
draw.py 启动时优先读取 input/move_camera.txt(实时文件),
不存在或为空时回退到 display.txt header 中的缓存数据。
改动 move_camera.txt 后只需重启动画窗口(关掉旧窗口重新
run_dynamics.py),无需重新跑模拟。
2026-06-12 08:02:50 +08:00
admin
e40f7a49e4
feat: move_camera.txt 改为速度段格式驱动相机运动
...
格式:
1-60 vx=1.0 rx=10 # 1-60帧:x平移1/帧 + 绕x转10°/帧
30-90 vy=2.0 ry=20 rz=10 # 30-90帧:y平移2/帧 + 绕y转20°/帧 + 绕z转10°/帧
draw.py 每帧累加平移速度修改center,累加旋转速度修改
elevation/azimuth,实现连续平滑的相机运动。
2026-06-12 07:58:08 +08:00
admin
22b94011ee
feat: 运动相机支持 + move_camera.txt 关键帧驱动
...
input.txt 新增:
move_camera: 0 # 0=固定视角, 1=按 move_camera.txt 运动
move_camera.txt 格式(4列:帧号 距离 俯仰角 方位角):
0 40.0 0 0
100 80.0 -30 180
200 40.0 0 360
display.txt header 传递 camera_keyframes JSON 数组,
draw.py 按帧时间线性插值驱动相机运动(循环播放)。
2026-06-12 07:52:06 +08:00
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
466a301d34
fix: alpha numpy 数组格式化问题导致逗号丢失
...
trajectory.txt 中的 alpha 以 numpy 数组形式加载,
str() 后变成 "[0. 0. 0. 0. 0. 0.]"(无逗号),
draw.py parse 不成功回退为默认 0.2。
新增 _fmt_alpha() 统一格式化为逗号分隔字符串。
2026-06-12 07:28:05 +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
c3e50d265d
ui: 缩小 ball_info 字体 28 → 18,适配更多信息显示
2026-06-12 07:07:26 +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