Files
SystemSimulationApp/tests/manual/context_access_checklists.md
ljz 7611f13208 修复循环信号与事件采样并接入 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 通过。
2026-09-17 23:50:13 +08:00

340 lines
18 KiB
Markdown
Raw Permalink 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.
# Context 访问级清单:实测数据
由 `analyze_context_access.py` 从访问事件生成。slot、Jacobian 和 position 均从 0 开始;group=-1 为 baseline。
以下以 Jacobian 200 为主案例,补充 position 52 的 PH 命中/未命中路径。完整逐次记录位于 `test/context-access-20260917/operations.json`;原始访问事件在 `audit/access.jsonl`。
## Jacobian 1,group 18,position 52
t=1.3389986581645337e-08;count 11 → 12;capacity=256;输出 `0.033351539732391834`;model evaluator 返回 `1`。
### 查询与首次匹配
| 顺序 | 类型 | 完整 key:p, T 或 h, R, cp, Tref, slope, mu, muT, S | medium kind | 首个匹配 slot | 扫描条数 |
|---|---|---|---|---|---|
| 1 | PH | `141437.08341422619, 200554.29912985844, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | 7 | 8 |
| 2 | PT | `141437.08341422619, 336.75814451285157, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | 7 | 8 |
| 3 | PT | `100000.73403195803, 293.15086386132788, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 11 |
### 实际选中后的字段读取
| 域 / slot | 字段 |
|---|---|
| pipes[28] | `valid` |
| states[7] | `T`, `isentropic_exponent`, `isentropic_factor`, `medium`, `medium.Tref`, `medium.cp`, `medium.real_helium`, `medium.slope`, `mu`, `p`, `rho`, `temperatures` |
| states[11] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `p`, `rho`, `temperatures` |
查询扫描另外按短路次序读取 `valid & PT/H`、`p`、`T/h`、medium;未匹配项的字段不等于被用于物性计算。
### 选中后的 valid 测试
| 顺序 | slot | mask | 结果 |
|---|---|---|---|
| 1 | 7 | 8 | 8 |
| 2 | 7 | 16 | 16 |
| 3 | 11 | 16 | 0 |
| 4 | 11 | 4 | 0 |
| 5 | 7 | 4 | 4 |
### 必须保留的 probe 数据
保留入口 `states[0:11]` 的全部字段;此路径没有写已有物性条目。仅追加以下新条目,修改本 operation 的 pipe 槽;其余 pipe 槽保持 probe 值。
### 有序写入动作
| 顺序 | 目标 | 写入值 | 已知同值写入 |
|---|---|---|---|
| 1 | `context[0].count` | 12 | — |
| 2 | `states[11].*` | 完整 struct 清零(显式写入) | — |
| 3 | `states[11].medium` | 复制上述完整 medium | — |
| 4 | `states[11].p` | 100000.73403195803 | — |
| 5 | `states[11].T` | 293.15086386132788 | — |
| 6 | `states[11].valid` | 1 | — |
| 7 | `states[11].temperatures` | NULL | 是 |
| 8 | `states[11].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 9 | `states[11].rho` | 0.16419111112032281 | — |
| 10 | `states[11].valid` | 5 | — |
| 11 | `states[11].isentropic_factor` | 0.59983509720368744 | — |
| 12 | `states[11].isentropic_exponent` | 0.4000169505487694 | — |
| 13 | `states[11].valid` | 21 | — |
| 14 | `pipes[28].valid` | 0 | 是 |
| 15 | `pipes[28].medium` | 复制上述完整 medium | — |
| 16 | `pipes[28].p1` | 141437.08341422619 | — |
| 17 | `pipes[28].p2` | 100000.73403195803 | — |
| 18 | `pipes[28].T` | 336.75814451285157 | — |
| 19 | `pipes[28].diameter` | 0.02 | — |
| 20 | `pipes[28].length` | 1 | — |
| 21 | `pipes[28].roughness` | 0.0022499999999999998 | — |
| 22 | `pipes[28].kind` | 1 | — |
| 23 | `pipes[28].flow` | 0.033351539732391834 | — |
| 24 | `pipes[28].valid` | 1 | — |
新条目分配分支均为 positive/finite key 且 `count < capacity`;每次在当前 count 追加,再 count++。未初始化槽的 struct 首次清零不计入“已知同值写入”。
### Fallback 原因
查询 key/首匹配逻辑条目不同、已消费字段或已测试 valid 位不同、容量不足转 scratch、observer 非空、pipe 命中分支改变,或无法建立无冲突的 slot 映射时,执行原 operation。此清单不授权放宽现有 guard。
## Jacobian 2,group 18,position 52
t=2.5903206074281044e-08;count 16 → 18;capacity=256;输出 `0.13649710784608116`;model evaluator 返回 `1`。
### 查询与首次匹配
| 顺序 | 类型 | 完整 key:p, T 或 h, R, cp, Tref, slope, mu, muT, S | medium kind | 首个匹配 slot | 扫描条数 |
|---|---|---|---|---|---|
| 1 | PH | `755686.80622119282, 1871284.0942772815, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 16 |
| 2 | PT | `755686.80622119282, 658.33729595925956, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 16 |
| 3 | PT | `755686.80622119282, 658.33729595925956, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | 16 | 17 |
| 4 | PT | `100004.87065313551, 293.15011545458538, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 17 |
### 实际选中后的字段读取
| 域 / slot | 字段 |
|---|---|
| pipes[28] | `valid` |
| states[16] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `mu`, `p`, `rho`, `temperatures` |
| states[17] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `p`, `rho`, `temperatures` |
查询扫描另外按短路次序读取 `valid & PT/H`、`p`、`T/h`、medium;未匹配项的字段不等于被用于物性计算。
### 选中后的 valid 测试
| 顺序 | slot | mask | 结果 |
|---|---|---|---|
| 1 | 16 | 2 | 0 |
| 2 | 16 | 8 | 0 |
| 3 | 16 | 16 | 0 |
| 4 | 16 | 4 | 0 |
| 5 | 17 | 16 | 0 |
| 6 | 17 | 4 | 0 |
| 7 | 16 | 4 | 4 |
### 必须保留的 probe 数据
保留入口 `states[0:16]` 的全部字段;此路径没有写已有物性条目。仅追加以下新条目,修改本 operation 的 pipe 槽;其余 pipe 槽保持 probe 值。
### 有序写入动作
| 顺序 | 目标 | 写入值 | 已知同值写入 |
|---|---|---|---|
| 1 | `context[0].count` | 17 | — |
| 2 | `states[16].*` | 完整 struct 清零(显式写入) | — |
| 3 | `states[16].medium` | 复制上述完整 medium | — |
| 4 | `states[16].p` | 755686.80622119282 | — |
| 5 | `states[16].T` | 658.33729595925956 | — |
| 6 | `states[16].valid` | 1 | — |
| 7 | `states[16].temperatures` | NULL | 是 |
| 8 | `states[16].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 9 | `states[16].h` | 1871284.0942772815 | — |
| 10 | `states[16].valid` | 3 | — |
| 11 | `states[16].mu` | 3.4336896373307344e-05 | — |
| 12 | `states[16].valid` | 11 | — |
| 13 | `states[16].rho` | 0.55213584825878159 | — |
| 14 | `states[16].valid` | 15 | — |
| 15 | `states[16].isentropic_factor` | 0.59936841974574895 | — |
| 16 | `states[16].isentropic_exponent` | 0.4000342868314512 | — |
| 17 | `states[16].valid` | 31 | — |
| 18 | `context[0].count` | 18 | — |
| 19 | `states[17].*` | 完整 struct 清零(显式写入) | — |
| 20 | `states[17].medium` | 复制上述完整 medium | — |
| 21 | `states[17].p` | 100004.87065313551 | — |
| 22 | `states[17].T` | 293.15011545458538 | — |
| 23 | `states[17].valid` | 1 | — |
| 24 | `states[17].temperatures` | NULL | 是 |
| 25 | `states[17].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 26 | `states[17].rho` | 0.16419832110282509 | — |
| 27 | `states[17].valid` | 5 | — |
| 28 | `states[17].isentropic_factor` | 0.59983509001364188 | — |
| 29 | `states[17].isentropic_exponent` | 0.40001695130827536 | — |
| 30 | `states[17].valid` | 21 | — |
| 31 | `pipes[28].valid` | 0 | 是 |
| 32 | `pipes[28].medium` | 复制上述完整 medium | — |
| 33 | `pipes[28].p1` | 755686.80622119282 | — |
| 34 | `pipes[28].p2` | 100004.87065313551 | — |
| 35 | `pipes[28].T` | 658.33729595925956 | — |
| 36 | `pipes[28].diameter` | 0.02 | — |
| 37 | `pipes[28].length` | 1 | — |
| 38 | `pipes[28].roughness` | 0.0022499999999999998 | — |
| 39 | `pipes[28].kind` | 1 | — |
| 40 | `pipes[28].flow` | 0.13649710784608116 | — |
| 41 | `pipes[28].valid` | 1 | — |
新条目分配分支均为 positive/finite key 且 `count < capacity`;每次在当前 count 追加,再 count++。未初始化槽的 struct 首次清零不计入“已知同值写入”。
### Fallback 原因
查询 key/首匹配逻辑条目不同、已消费字段或已测试 valid 位不同、容量不足转 scratch、observer 非空、pipe 命中分支改变,或无法建立无冲突的 slot 映射时,执行原 operation。此清单不授权放宽现有 guard。
## Jacobian 200,group 6,position 16
t=0.37285444606381923;count 13 → 15;capacity=256;输出 `-3.34452871903457e-06`;model evaluator 返回 `1`。
### 查询与首次匹配
| 顺序 | 类型 | 完整 key:p, T 或 h, R, cp, Tref, slope, mu, muT, S | medium kind | 首个匹配 slot | 扫描条数 |
|---|---|---|---|---|---|
| 1 | PT | `15019678.822746754, 291.84964142606623, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 13 |
| 2 | PT | `15019662.638804033, 291.84951601402554, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 14 |
### 实际选中后的字段读取
| 域 / slot | 字段 |
|---|---|
| pipes[0] | `valid` |
| states[13] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `mu`, `p`, `rho`, `temperatures` |
| states[14] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `p`, `rho`, `temperatures` |
查询扫描另外按短路次序读取 `valid & PT/H`、`p`、`T/h`、medium;未匹配项的字段不等于被用于物性计算。
### 选中后的 valid 测试
| 顺序 | slot | mask | 结果 |
|---|---|---|---|
| 1 | 13 | 8 | 0 |
| 2 | 13 | 16 | 0 |
| 3 | 13 | 4 | 0 |
| 4 | 14 | 16 | 0 |
| 5 | 14 | 4 | 0 |
| 6 | 13 | 4 | 4 |
### 必须保留的 probe 数据
保留入口 `states[0:13]` 的全部字段;此路径没有写已有物性条目。仅追加以下新条目,修改本 operation 的 pipe 槽;其余 pipe 槽保持 probe 值。
### 有序写入动作
| 顺序 | 目标 | 写入值 | 已知同值写入 |
|---|---|---|---|
| 1 | `context[0].count` | 14 | — |
| 2 | `states[13].*` | 完整 struct 清零(显式写入) | — |
| 3 | `states[13].medium` | 复制上述完整 medium | — |
| 4 | `states[13].p` | 15019678.822746754 | — |
| 5 | `states[13].T` | 291.84964142606623 | — |
| 6 | `states[13].valid` | 1 | — |
| 7 | `states[13].temperatures` | NULL | 是 |
| 8 | `states[13].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 9 | `states[13].mu` | 1.9556955415450165e-05 | — |
| 10 | `states[13].valid` | 9 | — |
| 11 | `states[13].rho` | 23.797175883728954 | — |
| 12 | `states[13].valid` | 13 | — |
| 13 | `states[13].isentropic_factor` | 0.5638664372147334 | — |
| 14 | `states[13].isentropic_exponent` | 0.39880100414729064 | — |
| 15 | `states[13].valid` | 29 | — |
| 16 | `context[0].count` | 15 | — |
| 17 | `states[14].*` | 完整 struct 清零(显式写入) | — |
| 18 | `states[14].medium` | 复制上述完整 medium | — |
| 19 | `states[14].p` | 15019662.638804033 | — |
| 20 | `states[14].T` | 291.84951601402554 | — |
| 21 | `states[14].valid` | 1 | — |
| 22 | `states[14].temperatures` | NULL | 是 |
| 23 | `states[14].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 24 | `states[14].rho` | 23.797161425154815 | — |
| 25 | `states[14].valid` | 5 | — |
| 26 | `states[14].isentropic_factor` | 0.56386646597889145 | — |
| 27 | `states[14].isentropic_exponent` | 0.39880100666377111 | — |
| 28 | `states[14].valid` | 21 | — |
| 29 | `pipes[0].valid` | 0 | 是 |
| 30 | `pipes[0].medium` | 复制上述完整 medium | — |
| 31 | `pipes[0].p1` | 15019662.638804033 | — |
| 32 | `pipes[0].p2` | 15019678.822746754 | — |
| 33 | `pipes[0].T` | 291.84964142606623 | — |
| 34 | `pipes[0].diameter` | 0.014 | — |
| 35 | `pipes[0].length` | 1 | — |
| 36 | `pipes[0].roughness` | 0.0032142857142857142 | — |
| 37 | `pipes[0].kind` | 1 | — |
| 38 | `pipes[0].flow` | -3.34452871903457e-06 | — |
| 39 | `pipes[0].valid` | 1 | — |
新条目分配分支均为 positive/finite key 且 `count < capacity`;每次在当前 count 追加,再 count++。未初始化槽的 struct 首次清零不计入“已知同值写入”。
### Fallback 原因
查询 key/首匹配逻辑条目不同、已消费字段或已测试 valid 位不同、容量不足转 scratch、observer 非空、pipe 命中分支改变,或无法建立无冲突的 slot 映射时,执行原 operation。此清单不授权放宽现有 guard。
## Jacobian 200,group 18,position 52
t=0.37285444606381923;count 75 → 77;capacity=256;输出 `-1.4080633385291488e-06`;model evaluator 返回 `1`。
### 查询与首次匹配
| 顺序 | 类型 | 完整 key:p, T 或 h, R, cp, Tref, slope, mu, muT, S | medium kind | 首个匹配 slot | 扫描条数 |
|---|---|---|---|---|---|
| 1 | PT | `15019625.056587901, 529.09774891777454, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 75 |
| 2 | PT | `15019613.376778807, 529.09758439456209, 2077.2643940499802, 5193.1609851249505, 293.14999999999998, 0, 1.9599999999999999e-05, 293.14999999999998, 79.400000000000006` | 1 | miss | 76 |
### 实际选中后的字段读取
| 域 / slot | 字段 |
|---|---|
| pipes[28] | `valid` |
| states[75] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `mu`, `p`, `rho`, `temperatures` |
| states[76] | `T`, `isentropic_exponent`, `isentropic_factor`, `jacobian`, `medium.R`, `medium.S`, `medium.Tref`, `medium.cp`, `medium.mu`, `medium.muT`, `medium.real_helium`, `medium.slope`, `p`, `rho`, `temperatures` |
查询扫描另外按短路次序读取 `valid & PT/H`、`p`、`T/h`、medium;未匹配项的字段不等于被用于物性计算。
### 选中后的 valid 测试
| 顺序 | slot | mask | 结果 |
|---|---|---|---|
| 1 | 75 | 8 | 0 |
| 2 | 75 | 16 | 0 |
| 3 | 75 | 4 | 0 |
| 4 | 76 | 16 | 0 |
| 5 | 76 | 4 | 0 |
| 6 | 75 | 4 | 4 |
### 必须保留的 probe 数据
保留入口 `states[0:75]` 的全部字段;此路径没有写已有物性条目。仅追加以下新条目,修改本 operation 的 pipe 槽;其余 pipe 槽保持 probe 值。
### 有序写入动作
| 顺序 | 目标 | 写入值 | 已知同值写入 |
|---|---|---|---|
| 1 | `context[0].count` | 76 | — |
| 2 | `states[75].*` | 完整 struct 清零(显式写入) | — |
| 3 | `states[75].medium` | 复制上述完整 medium | — |
| 4 | `states[75].p` | 15019625.056587901 | — |
| 5 | `states[75].T` | 529.09774891777454 | — |
| 6 | `states[75].valid` | 1 | — |
| 7 | `states[75].temperatures` | NULL | 是 |
| 8 | `states[75].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 9 | `states[75].mu` | 2.9451615911502958e-05 | — |
| 10 | `states[75].valid` | 9 | — |
| 11 | `states[75].rho` | 13.352686365896215 | — |
| 12 | `states[75].valid` | 13 | — |
| 13 | `states[75].isentropic_factor` | 0.58140881158784896 | — |
| 14 | `states[75].isentropic_exponent` | 0.39986603165187307 | — |
| 15 | `states[75].valid` | 29 | — |
| 16 | `context[0].count` | 77 | — |
| 17 | `states[76].*` | 完整 struct 清零(显式写入) | — |
| 18 | `states[76].medium` | 复制上述完整 medium | — |
| 19 | `states[76].p` | 15019613.376778807 | — |
| 20 | `states[76].T` | 529.09758439456209 | — |
| 21 | `states[76].valid` | 1 | — |
| 22 | `states[76].temperatures` | NULL | 是 |
| 23 | `states[76].jacobian` | 当前 context 的 Jacobian memo 指针 | — |
| 24 | `states[76].rho` | 13.35268032881546 | — |
| 25 | `states[76].valid` | 5 | — |
| 26 | `states[76].isentropic_factor` | 0.58140882193020493 | — |
| 27 | `states[76].isentropic_exponent` | 0.39986603223234823 | — |
| 28 | `states[76].valid` | 21 | — |
| 29 | `pipes[28].valid` | 0 | 是 |
| 30 | `pipes[28].medium` | 复制上述完整 medium | — |
| 31 | `pipes[28].p1` | 15019613.376778807 | — |
| 32 | `pipes[28].p2` | 15019625.056587901 | — |
| 33 | `pipes[28].T` | 529.09774891777454 | — |
| 34 | `pipes[28].diameter` | 0.02 | — |
| 35 | `pipes[28].length` | 1 | — |
| 36 | `pipes[28].roughness` | 0.0022499999999999998 | — |
| 37 | `pipes[28].kind` | 1 | — |
| 38 | `pipes[28].flow` | -1.4080633385291488e-06 | — |
| 39 | `pipes[28].valid` | 1 | — |
新条目分配分支均为 positive/finite key 且 `count < capacity`;每次在当前 count 追加,再 count++。未初始化槽的 struct 首次清零不计入“已知同值写入”。
### Fallback 原因
查询 key/首匹配逻辑条目不同、已消费字段或已测试 valid 位不同、容量不足转 scratch、observer 非空、pipe 命中分支改变,或无法建立无冲突的 slot 映射时,执行原 operation。此清单不授权放宽现有 guard。