修复循环信号与事件采样并接入 LSTP 接触定位,补充八路验证及复用实验

相较上一版 Jacobian 确定性复用更新,本次补齐事件边界一致性、结果两侧采样及接触事件定位;保留已有物性复用和组件力学公式。

- 统一 UD00 信号求值与下一事件查询的绝对时间边界,修复循环边界浮点舍入导致的阶段错位、重复或漏报,并覆盖零时长、多阶段及长周期场景。
- 引入原生输出语义 v2:保留规则网格真实时间,补充内部时间事件和状态事件的左邻及事件后采样,按保存时间、状态和离散模式重放结果。
- 两条代码生成路径均发出 LSTP 接触描述,默认定位间隙过零及非负力模式的力截断;仅在接受事件时更新防重复记录,增加 contactEvents 诊断计数。
- 补充 MASS/LSTP 独立事件实验、八路全曲线与驱动阶段配对评估,以及 Amesim 不连续点输出对照和力差定位报告;MASS 新增释放机制仍保留为独立实验。
- 保存局部 probe、context 访问与回退、shadow replay、R288 real skip/typed replay 及阀门数值尾部诊断工具和报告;未证明净收益的实验不启用为生产默认优化。
- 更新原生运行说明和元件建模规范,补充信号边界、输出语义、接触事件和实验依赖回归测试。

验证:五组专项回归共 34 项全部通过;37 个待提交 Python 文件语法检查通过;git diff --cached --check 通过。
This commit is contained in:
ljz committed 2026-09-17 23:50:13 +08:00
1 parent 1aac220084
commit 7611f13208
85 files changed
+11358 -33

No files matched your search

@@ -0,0 +1,37 @@
# MASS / LSTP 独立事件实验
此实验只修改复制的原生运行库和实验生成程序,不改生产 `native/`、组件公式、生成器、工况、容差、雅可比分色或物性复用。平台默认运行不启用这里的事件。
`mechanical_event_variant.py` 在原生成源码后追加只读事件描述与限位释放驱动力求值入口;原 RHS 和雅可比源码保持为完全相同的前缀,状态/输出布局、求值调度、稀疏结构元数据一致。`prepare_runtime` 仅在指定的独立目标目录增加事件定位、提交和诊断;严格检查替换位置,生产代码变化后不静默套用未知补丁。
四种构建:
- `off`:使用未修改的原生源码和生成程序。
- `mass`:弹性上下限接触/脱离;非负力模式的原始力过零;理想/恢复限位保持后的释放。已有碰撞、恢复系数和摩擦事件保持原处理。
- `lstp`:LSTP 间隙过零;非负力模式的原始力过零。允许负力时不注册力截断事件。
- `all`:两类同时启用。
弹性事件不重置位置或速度;限位释放从约束位置、零速度继续。已接受事件才更新防重复触发记录;试算、雅可比和结果重放不写物理模式。接触力仍由原来的时间、状态、参数纯函数求值,事件记录不改变力公式。相同浮点时刻的事件一次提交和重启,保留已有输出语义。
定位使用已接受步的密集插值及二分,浮点区间不可再分时停止。相对速度换向时分两段查找间隙根,覆盖端点同号但中间接触/脱离的情况;孤立切触不制造来回事件。本实验与原有事件机制一样依赖积分步已经解析运动,未证明可捕获一个接受步内任意多次高频振荡。根定位误差不等于积分状态误差,必须做步长与容差核验。
MASS 释放检查只在已贴近限位且速度接近零时执行。为隔离已有优化,本实验采用独立只读整模型求值取得未施加限位约束的加速度,不修改正常 RHS 的数据通路;这会产生可单独计数的 `releaseRhsCalls`。因此其耗时是本实现的代价,不能当成所有限位释放算法必然的开销。
运行独立解析解、非负力、指数阻尼、无接触/初始贴边、密集插值换向及已有 Amesim 参考测试:
```powershell
.\.venv-win\Scripts\python.exe -X utf8 -m unittest tests.test_mechanical_event_experiment -v
```
八路对照依赖本工作站已有 Amesim 2404、当前循环 AME 和之前保存的非循环 AME,以及上轮审计对齐的工程副本:
```powershell
.\.venv-win\Scripts\python.exe -X utf8 tests/manual/evaluate_mechanical_events.py --output test/mechanical-events-new-run --repeats 5
.\.venv-win\Scripts\python.exe -X utf8 tests/manual/summarize_mechanical_events.py test/mechanical-events-new-run
```
主目录必须新建;`--resume` 仅用于未变更实验源码情况下,保留已经完成的准确性/计时结果并续跑。因 Windows 偶发缓存目录重命名拒绝,构建可在独立新缓存重试。若编译子进程启动不稳定,可追加 `--serial-build`,只串行编译实验程序,不修改求解配置或生产构建逻辑。
每个工况重新运行一次 Amesim 作为四种配置共同的参照。每种配置保留一次完整输出用于同阶段对照;再轮换配置顺序做五次纯求解计时。编译和输出序列化不计入纯求解耗时,单独的完整运行数据仍保存。每个比较点同时核验十个信号阶段,所有曲线共用同一对真实保存行;不能选择误差最小的力值来配对。
完整指标与限制见本次 `docs/other/` 的独立实验报告。