# SPEC.md の曖昧点リスト

## 1. ノードIDとDOFマッピングの整合性 ✅ 修正済み
**場所:** 3.1章 / 4章
**問題:** `nodes.csv` の制約が「idは重複なし正の整数」のみで、`1`から`N`の連続値を強制していない。DOFマッピング `dof_x(i) = 2*(i-1)+1` は連続IDを前提とする。
**修正:** `id`は`1`から`N`（節点数）の連続正の整数、重複なし に変更。

---

## 2. 境界条件のDOF単位適用の曖昧さ ✅ 修正済み
**場所:** 7.3章 ステップ5
**問題:** 元の記述はノード単位で無条件に両DOFを処理しており、`ux=1, uy=0`の場合でもy方向が解放されない。また三項演算子が常に0.0になる。
**修正:** DOF単位で条件分岐するよう変更。

---

## 3. `K_original` の保存タイミング ✅ 修正済み
**場所:** 5.2章 vs 7.3章
**問題:** 5.2章で「BC適用前に保存」とあるが、7.3章ではBC適用（ステップ5）の **後** に保存（ステップ6）としている。
**修正:** 7.3章で荷重組込（ステップ4）の **後**、BC適用（ステップ6）の **前** に保存するようステップ順序を修正。

---

## 4. 特異検出の「両者を採用」の解釈 ✅ 修正済み
**場所:** 5.4章
**問題:** `rank(K_red) < size(K_red, 1)` と `isposdef(K_red)` の「両者を採用し、真を条件に続行」の解釈が不明（ANDかORか）。
**修正:** OR条件として明確化。いずれかを特異と判定。

---

## 5. 出力ファイル `reactions.csv` の記載対象
**場所:** 3.2章
**問題:** 「拘束済み節点のみ記載」が「少なくとも1方向が拘束」か「両方向が拘束」か不明。
**修正:** 「少なくとも1方向が拘束の節点のみ記載」に明確化。

---

## 6. CSV「省略」の定義 ✅ 修正済み
**場所:** 3.1章
**問題:** loads/bcsの「省略」が、行を削除するか空欄にするか不明。
**修正:** 「行の省略（該当行をCSVから削除）」と明確化。

---

## 7. `assemble_global` の関数名と戻り値の不一致 ✅ 修正不要
**場所:** 7.2章 / 7.3章
**問題:** 関数名は `assemble_global`（剛性行列の組込）だが、戻り値が `(K, F)` の2つ。
**判断:** 全体行列・ベクトルへの合成という意味で問題なし。修正不要。

---

## 8. 荷重ベクトルの組込対象不明 ✅ 修正済み
**場所:** 7.3章 ステップ4
**問題:** `F[dof[e.node_id]] += e.fx / e.fy` で変数 `e` が要素ループの変数と混同される。荷重は節点IDで指定されるので `loads` 配列からループすべき。
**修正:** ステップ4で `load` を使用するように修正済み。

---

## 9. テストTC-01の物理的妥当性 ✅ 修正済み
**場所:** 8.3章
**問題:** 「3節点1要素トラス」は1要素が2節点しか結べず、残り1節点は孤立する。
**修正:** 「2節点1要素トラス」に修正。

## 9b. テストTC-02の物理的妥当性 ✅ 修正済み
**場所:** 8.3章
**問題:** 「4節点2要素トラス」は2要素で4節点を結べず、2節点が孤立する。
**修正:** 「3節点2要素トラス」に修正。

---

## 10. 残差の計算方法 ✅ 修正済み
**場所:** 3.2章 / 8.5章
**問題:** `||K·U - F||_∞` でどの行列・ベクトルを使うか不明。
**修正:** `||K_original · U - F_original||_∞`（BC適用前の剛性行列・荷重ベクトル）に明確化。

---

## 11. 反力計算の式 ✅ 修正済み
**場所:** 5.2章 ステップ3
**問題:** `R = K_original * U - F_original` で `U` が全自由度の変位ベクトル（拘束DOFの `U[j]=0` を含む）である理由が不明。実装時に誤解される可能性がある。
**修正:** 「自由なDOFの変位も反力に寄与するため、全行列・全ベクトルで計算すること」を明記。
