# 메시 수렴 시험 기록 (F-3)

작성 2026-10-09 · CEO 승인 작업 F-3 · 실행 = `_fea_수렴시험.py` (헤드리스, `fea_server.run_fea` 직접 호출)
대상 = 캐나다 E500 PRO-R 궤도식 작업기 하부 프레임 "500PRO-R 수정안 20260917" **기계 1대**
코드 기준 = 시험 실행 시 HEAD `94af1ad` · 이후 수정 반영 (F-1 반력 검증 + F-2 기준 통일 적용 후)

---

## 0. 이 시험이 답하려던 질문

보고서 C-1: *"지금 쓰는 메시(벽당 0.29겹)는 검증된 밀도(0.97겹)보다 3.3배 성긴데, 그 구간의 오차는 측정된 적이 없다."*
보고서 B-8: 과거 세 기록(770 → 866 → 946 MPa)은 **메시만 다른 것이 아니라 모델 자체가 달라서** 수렴 경향으로 읽을 수 없었다.

**→ 그래서 이번에는 "완전히 같은 모델"을 고정했다.** 화면이 서버로 보낸 마지막 요청(`last_request.json`, 18.8MB)을 그대로 재사용했다 — 형상(146부품 좌표), 고정점 6개, 하중점 3개, 재질 SS275, 하중 3톤(29,400N)이 한 글자도 다르지 않다.

**바꾼 것은 메시 밀도 하나뿐이다.** 부품당 절점 상한 `PER_CAP` 과 총 절점 예산을 함께 올렸다.
※ `PER_CAP` 만 올리면 아무것도 안 바뀐다 — 부품당 배정이 `총예산 × 그 부품 부피비` 라서 작은 부품은 애초에 상한에 닿지 않고, 실제 한도는 총예산 쪽이기 때문이다.

---

## 1. 결과 표 (실측)

| | 1단계 | 2단계 | 3단계 |
|---|---|---|---|
| `PER_CAP` / 총 절점 예산 | 4,000 / 150,000 | 8,000 / 300,000 | 16,000 / 600,000 |
| **절점** | **51,580** | **57,468** | **63,962** |
| 요소(C3D10) | 21,571 | 23,715 | 25,015 |
| **벽당 겹수(`through_wall`)** | **0.29** | **0.29** | **0.30** |
| **최대 변위** | **2.0831 mm** | **2.5729 mm** | **2.0992 mm** |
| **구조 최대 응력**(F-2 기준) | **53.6 MPa** | **53.7 MPa** | **72.0 MPa** |
| 안전율(구조 최대 기준) | 5.13 | 5.13 | 3.82 |
| 계산상 첨두(전역 최대) | 665.0 MPa | 706.6 MPa | 675.5 MPa |
| 판정 대상 절점 비율 | 23.0% | 22.9% | 21.9% |
| **지지점 반력 차이(F-1)** ※ | **1.015%** | **3.867%** | **12.148%** |
| 적용 하중 / 소멸 / 겹침절점 | 29,400N / 0 / 0 | 29,400N / 0 / 0 | 29,400N / 0 / 0 |
| 해석 부품 / 제외 | 133 / 13 | 133 / 13 | 133 / 13 |
| 껍질 대체 부품 | 23 | 23 | 23 |
| **용접 쌍(묶인 절점)** | **2,346** | **2,580** | **3,191** |
| 걸린 시간(전체) | 19.5초 | 29.4초 | 33.0초 |

※ **"지지점 반력 차이"는 평형 오차가 아닙니다** — 세 번째 발견 참조(평형은 0.025%로 성립).
※ **이 표는 하중점 반경이 211mm(기본값)로 잘못 쓰이던 때의 값입니다** — 네 번째 발견 참조. 반경을 60mm로 바로잡으면 변위가 커집니다(2.08 → 3.94mm). **수렴 여부 판정(미수렴)과 그 원인(벽당 겹수가 안 늘어남)은 반경과 무관하므로 그대로 유효합니다.** 바로잡은 반경으로 3점 시험을 다시 돌리는 것은 다음 작업(부재 20~30개 범위)에서 함께 한다.

---

## 2. 판정

### **미수렴 — 더 촘촘한 메시가 필요합니다.**

가장 촘촘한 두 단계(2단계 ↔ 3단계) 사이:

- **최대 변위 변화 18.4%** (판정선 5% 초과)
- 구조 최대 응력 변화 34.2%

게다가 변위가 **2.083 → 2.573 → 2.099 로 단조롭지 않다.** 수렴해 가는 모습이 아니라 흔들리는 모습이다.

### ★ 더 중요한 발견 — 이 방향으로는 수렴시킬 수 없다

**절점 예산을 4배(150,000 → 600,000)로 올렸는데 절점은 24%(51,580 → 63,962)밖에 늘지 않았고, 벽당 겹수는 0.29 → 0.30 으로 사실상 그대로다.**

구조적 원인(숫자 바꾸기로 맞출 문제가 아님):

1. **전체해석 모드의 메시는 `-p`(표면 보존) 전용**이다(`build_tet_mesh_repaired`). 품질조건(`-q`) 승격을 건너뛰는 근거는 `-q` 가 절점을 최대 1,272배로 불리기 때문인데, 그 대신 **tetgen 이 내부에 새 절점을 거의 만들지 않는다.** 즉 절점 수가 **입력 표면 삼각형 수**로 결정된다.
2. 따라서 예산을 올려서 바뀌는 것은 "표면 삼각형을 얼마나 덜 줄이는가"뿐이고, **두께 방향으로 요소를 끼워 넣는 일은 일어나지 않는다.** 벽당 겹수가 안 움직이는 것이 그 증거다.
3. 판재의 굽힘(두께 방향에서 인장과 압축이 갈리는 현상)은 두께 방향 요소가 있어야 표현된다. **그래서 0.3겹에서는 메시를 "더 많이" 줘도 정확해지지 않는다.**

> **→ 보고서 D-2단계 8항이 맞았습니다. 해결책은 절점 예산을 키우는 것이 아니라 하중 경로 부재 20~30개로 좁혀 부품당 절점을 올리는 것입니다.** 146부품을 한 번에 푸는 한, 벽당 1겹은 이 경로로 도달할 수 없습니다.

### ★ 두 번째 발견 — 메시를 바꾸면 모델도 같이 바뀐다 (수렴 판단 자체의 오염)

**용접 쌍이 2,346 → 2,580 → 3,191 로 달라졌습니다(+36%).** 접합(MPC) 짝짓기가 표면 절점 위치에 의존하므로, 메시가 바뀌면 접합도 바뀝니다.

**→ 엄밀히 말하면 이 세 줄도 "같은 모델을 세 밀도로 푼 것"이 아닙니다.** 부품 수(133)·제외(13)·껍질(23)은 같지만 접합이 다릅니다. 보고서 B-8 이 과거 세 기록에 내린 지적이 **메시만 바꾼 이번 시험에도 부분적으로 그대로 적용됩니다.** 완전히 깨끗한 수렴 시험을 하려면 접합 조건이 고정되는 범위(부재 소수)로 좁혀야 합니다.

### ★ 세 번째 발견 — 반력 검증이 무엇을 재는지 바로잡았다 (F-1)

처음에는 **고정 절점 반력의 합**만 보고 "평형이 1.0 → 3.9 → 12.1% 어긋났다"고 적었습니다. **이 해석은 틀렸습니다.** 시험 후 `keep=True` 로 `.frd` 를 다시 열어 **모든 절점의 절점력 합**을 직접 재서 확정했습니다.

| 재는 대상 | 실측값 | 뜻 |
|---|---|---|
| **모든 절점의 절점력 합** | **7.45 N** (하중 29,400N 의 **0.025%**) | **솔버는 평형이다** ← 이것이 진짜 1차 검증 |
| 고정 절점 반력의 합 | 29,544 N (하중과 **1.0% 차이**) | 지지점으로 다 안 내려왔다 |

**→ 평형은 깨지지 않았습니다.** 차이는 용접 `*EQUATION`(MPC) 쪽이 하중의 일부를 받고 있어서 지지점 합계에 안 잡히는 것입니다. 용접 쌍이 늘수록(2,346 → 3,191) 지지점 차이가 커지는 것(1.0% → 12.1%)이 이와 방향이 맞습니다.

**이것이 중요한 이유:** 고정 절점 합만으로 1% 게이트를 걸면 **용접 조립품마다 빨간 경고가 떠서 운전자가 경고를 무시하게 됩니다.** 그래서 코드를 고쳤습니다 — 통과 기준은 **전 절점 절점력 합**(평형)이고, 지지점 차이는 "받침이 아닌 구속이 그만큼 받고 있다"는 **별도 안내**로 분리했습니다. **판정선 1%는 바꾸지 않았고, 재는 대상을 바로잡았습니다.**

※ 한때 "하중의 몇 %가 용접으로 갔다"를 비율로 띄우려 했으나, 그 값이 하중의 **114%**(29,400N 에 33,628N)로 나왔습니다. 용접 종속절점의 절점력은 개별로 크고 서로 상쇄되는 내부력이라 **벡터합의 크기가 '빠져나간 힘'을 뜻하지 않습니다.** 뜻을 확정하지 못했으므로 **화면에 비율로 띄우지 않았습니다**(확인 못 한 것을 숫자로 말하지 않는다).

### ★ 네 번째 발견 — 하중점 반경이 서버에 전달되지 않고 있었다 (보고서 C-6 의 실제 원인)

시험 중 `last_request.json` 을 열어 확인했습니다: **고정점은 `r:30` 이 전달되는데 하중점은 `r` 이 통째로 빠져 있었습니다**(`load r: [None, None, None]`). `machineBC()` 는 `r:60` 을 정하는데, 화면의 요청 조립부가 힘 모드에서만 `r` 을 안 담고 있었습니다.

그래서 서버가 기본 반경(외곽상자 5% = **211.18mm**)을 썼고, 그 결과
- 하중이 실린 절점이 **1,990개**(실제 60mm면 491개)
- F-2 특이점 제외 반경이 **317mm**(=211×1.5)로 부풀어 경계조건 제외 절점이 **2,645개**

수정 후: 반경 **30/60mm**, 경계조건 제외 **796개**, 하중 절점 **491개**. 보고서 C-6 이 지적한 "구조 본체가 과하게 지워진다"의 실제 원인이었고 해소했습니다.
**단 최대 변위가 2.08mm → 3.94mm 로 커졌습니다** — 같은 하중이 1/4 면적에 실리므로 당연한 방향이며, **이전 2.1mm 쪽이 반경을 잘못 쓴 값이었습니다.**

## 3. 이 시험으로 말할 수 있는 것 / 없는 것

| | |
|---|---|
| **말할 수 있다** | · 현재 전체해석 메시는 **수렴하지 않았다**(변위 18.4% 변동). · 절점 예산을 키우는 방향으로는 **수렴시킬 수 없다**(벽당 0.29 → 0.30). · **평형은 성립한다**(전 절점 절점력 합 0.025%). 다만 지지점으로 내려오는 힘이 하중과 1~12% 다르다 — 용접 접합이 그만큼 받고 있다. · 메시를 바꾸면 **용접 접합까지 바뀐다**. |
| **말할 수 없다** | · 참값이 얼마인가. 세 값 중 어느 것도 참값에 가깝다는 근거가 없다. · "변위는 믿어도 된다" — 이번 시험에서 **변위조차 18.4% 움직였으므로 종전의 완화 근거가 성립하지 않는다**. · 응력 절대값·안전율은 여전히 인용 금지. |
| **다음에 해야 할 것** | 하중 경로 부재 20~30개로 좁혀 **벽당 1겹 이상**에서 같은 3점 시험을 다시. 그 범위에서는 접합 쌍도 고정되므로 수렴 판단이 오염되지 않는다. |

---

## 4. 재현 방법

```
1) 화면에서 전체해석을 1회 실행한다 (서버가 last_request.json 을 저장한다)
2) cd E:\도진팩토리\3D스캔및티칭시스템
3) python _fea_수렴시험.py
   → 콘솔에 표, _fea_수렴시험_결과.json 에 전체 수치
```

화면 결과 패널에는 이 시험의 마지막 결과가 한 줄로 고정 표시된다
(`fab_fea.js` 의 `MESH_CONV` / `convergenceHtml`) — **메시 수렴: ✗ (변위 변화 18.4%, 응력 변화 34.2%)**.

---

*기록: Claude Code · 실측값만 기재 · 해석 3회 실제 실행 · 판정선(변위 5% / 반력 1%)은 시험 전에 정해 두고 바꾸지 않음*
