docs: define shell transient heat transfer requirements and plan
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
# Shell Transient Heat Transfer 결정 기록
|
||||
|
||||
- Feature ID: `shell-transient-heat-transfer`
|
||||
- 문서 owner: 메인 assistant
|
||||
- 갱신일: 2026-09-28
|
||||
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
|
||||
[공통 ADR](../ADR.md#adr-028). 지역 지침은 [Feature 지침](FEATURED_AGENTS.md),
|
||||
요구사항과 현재 checklist는 [Feature PRD](PRD.md)에 둔다.
|
||||
|
||||
각 결정의 owner는 메인 assistant다. 승인 근거는 2026-09-27~28 사용자 인터뷰의 명시 선택이다.
|
||||
개별 범위 선택의 합의를 기록하며, 전체 requirement baseline과 구현 실행은 아직 승인되지 않았다.
|
||||
사용자의 계획 기반 문서 작성 요청에 따라 수치 제안의 이유·대안·영향을 아래에 구체화한다.
|
||||
`사용자 합의`는 명시 선택의 기록이고 `Proposed`는 검토할 우선안이다.
|
||||
수식과 검산 원본은 [formulation](formulation.md), [numerical-review](numerical-review.md)를 따른다.
|
||||
|
||||
## 결정 목록
|
||||
|
||||
| ID | 주제 | 상태 | 요구사항·검토 연결 |
|
||||
| --- | --- | --- | --- |
|
||||
| STH-ADR-001 | Uncoupled 범위 | 사용자 합의 | 001 |
|
||||
| STH-ADR-002 | 5개 두께 온도점 | 사용자 합의 | 002~004 |
|
||||
| STH-ADR-003 | 물성·초기/경계·열입력 | 사용자 합의 | 005~012 |
|
||||
| STH-ADR-004 | 시간 증분·전체 결과 저장 | 사용자 합의 | 013~015 |
|
||||
| STH-ADR-005 | 외부 비교·독립 검증 | 사용자 합의 | 016~017 |
|
||||
| STH-ADR-006 | 단일 step | 사용자 합의 | 018 |
|
||||
| STH-ADR-007 | 수치 방법론 전체와 K/C | Proposed | 정식화 3~5절 |
|
||||
| STH-ADR-008 | Geometry와 접속 이상화 | Proposed | NR-01 |
|
||||
| STH-ADR-009 | Backward Euler·종료 시간 | Proposed | 013, 정식화 7절 |
|
||||
| STH-ADR-010 | 초기 jump와 pre-step 경계 | Proposed | 008~009, NR-02 |
|
||||
| STH-ADR-011 | Heat flux·reaction 복구 | Proposed | 014~015, NR-05 |
|
||||
| STH-ADR-012 | Edge 입력 단위·외부 문법 | Proposed / syntax 미결정 | 011, NR-03 |
|
||||
|
||||
요구사항 번호는 `FEM-REQ-SHELL-THERMAL-` prefix를 생략했다. 수치 기준이 미정인 NR-04는
|
||||
[PRD 미결정 계약](PRD.md#구현-전-미결정-계약)에서 관리하며 승인된 tolerance를 대신하지 않는다.
|
||||
|
||||
## STH-ADR-001: 현재 구현 목표를 uncoupled transient heat transfer로 한정
|
||||
|
||||
- 상태: 사용자 합의
|
||||
- 결정: 현재 목표는 구조해석과 분리된 Shell 과도 열해석이다. 양방향 열–구조 연성은 장기 목표다.
|
||||
- 근거: 사용자가 초기 연성 선택을 정정하며 “지금은 uncoupled heat transfer를 구현합니다”라고 명시했다.
|
||||
- 영향: 이번 기능의 acceptance에 구조 변위·열응력·연성 반복이나 변형 피드백을 포함하지 않는다.
|
||||
|
||||
## STH-ADR-002: 두께 방향 균일 온도에서 5개 온도점 단면으로 범위 변경
|
||||
|
||||
- 상태: 사용자 합의; 앞선 두께 방향 균일 온도 선택을 대체
|
||||
- 결정: 3차원 공간의 4절점 Shell에서 면내·두께 방향 열전달을 지원한다. 균질 단면이고
|
||||
두께 방향 온도점은 모든 단면에서 5개로 고정한다.
|
||||
- 이유: 사용자가 기존 DS4 reference의 두께 방향 의미를 확인한 뒤 이를 지원하는 방향을 선택했다.
|
||||
- 근거: reference 유지/범위 확대 질문에서 B, 균질 단면 질문에서 A, 온도점 5개 고정 질문에서 A.
|
||||
- 영향: 아랫면·중앙면·윗면 온도의 identity를 구분한다. 적층·가변 온도점 수는 제외한다.
|
||||
Abaqus의 내부 정식화를 복제하거나 동일한 결과 생성 절차를 약속하는 결정은 아니다.
|
||||
|
||||
## STH-ADR-003: 상수 물성·일정 입력과 제한된 두께 방향 적용 범위
|
||||
|
||||
- 상태: 사용자 합의
|
||||
- 결정: 상수 등방성 열전도율·밀도·비열, 요소 집합별 재료와 일정 두께를 지원한다.
|
||||
초기 온도는 절점/집합별이되 같은 절점의 두께 전체에는 균일하다. 지정 온도와 집중
|
||||
열입력은 아랫면·윗면에 각각 적용하고, edge 열입력은 두께 전체에 균일하게 분포한다.
|
||||
지정 온도·열입력은 시간에 무관한 일정값이다.
|
||||
- 이유: 인터뷰에서 사용자가 각 첫 구현 범위를 선택했다.
|
||||
- 영향: 면적 분포 표면 열유속, 내부 온도점 직접 입력, 대류·복사·내부 발열,
|
||||
온도 의존·이방성 물성, 적층과 시간 이력 입력을 제외한다.
|
||||
|
||||
## STH-ADR-004: 고정 시간 증분과 전체 증분 결과 저장
|
||||
|
||||
- 상태: 사용자 합의
|
||||
- 결정: 전체 시간과 고정 시간 증분을 사용자가 지정한다. 온도·요소 열유속·반력 열률을
|
||||
모든 시간 증분에 저장하며 초기 온도 분포도 보존한다. 공식 출력은 공통 HDF5 계약을 따른다.
|
||||
- 근거: 시간 제어 A, 필수 결과 C, 저장 간격 A 선택.
|
||||
- 영향: 자동 시간 증분을 제외한다. 시간 적분법·열용량 행렬·마지막 증분 처리·초기 결과의
|
||||
schema를 이 결정만으로 정하지 않는다.
|
||||
|
||||
## STH-ADR-005: 현재 CSV의 NT11 비교와 독립 검증을 조합
|
||||
|
||||
- 상태: 사용자 합의
|
||||
- 결정: 외부 필수 비교는 기존 `shell-thermal NodalTemperature.csv`의 `Step-1`, `t=37`,
|
||||
`NT11`로 한정한다. 나머지 결과는 해석해·열에너지 수지·시간 및 공간 수렴성 등으로 검증한다.
|
||||
- 근거: 추가 reference 결과 확보 여부 질문에서 사용자가 A를 선택했다.
|
||||
- 이유: 현재 CSV는 한 시점의 아랫면 온도만 제공한다. 원본 evidence의 실제 coverage를 명시한다.
|
||||
- 영향: 추가 Abaqus CSV 확보를 필수 조건으로 삼지 않지만, 내부 온도·열유속·반력 열률과
|
||||
전체 과도응답의 correctness 검증은 유지한다. 공통 tolerance와 reference 원본은 변경하지 않는다.
|
||||
|
||||
## STH-ADR-006: 단일 transient step으로 제한
|
||||
|
||||
- 상태: 사용자 합의
|
||||
- 결정: 초기 온도와 일정한 경계조건·열입력으로 하나의 transient step을 수행한다.
|
||||
- 근거: 단일/다중 step 지원 범위 질문에서 사용자가 A를 선택했다.
|
||||
- 영향: 여러 해석 step과 step 사이의 온도 상태 전달·경계조건 변경을 제외한다.
|
||||
|
||||
## STH-ADR-007: 상세 수치 방법론 제안
|
||||
|
||||
- 상태: **Proposed / 사용자 검토 대기**
|
||||
- 제안: 면내 Q4 × 두께 2구간 P2의 20 DOF, midsurface metric의 thin-shell 근사,
|
||||
consistent 열용량과 열전도행렬, 면내 3×3·두께 exact 적분, Backward Euler,
|
||||
24개 trace 위치의 직접 Fourier flux 및 full residual 반력 열률을 사용한다.
|
||||
- 근거: 사용자가 요구사항 목록을 보강하여 열전달행렬·heat flux 방법론을 포함한 상세 계획을 요청했다.
|
||||
이 요청은 제안을 작성할 권한이며 위 수치 방법의 채택 승인은 아니다.
|
||||
- 이유·대안: [설계 계획](design-plan.md)의 선택 표와 [정식화](formulation.md)의 상세 수식을 따른다.
|
||||
- 영향: geometry·접속 이상화, 최초 온도 불일치, edge 입력 단위/syntax와 결과 위치를
|
||||
검토해야 한다. 기존 reference 정확도와 positivity를 아직 보장하지 않는다.
|
||||
- 검토: [독립 수치 검토](numerical-review.md)에서 명시 행렬·BE partition·에너지 수식의
|
||||
일관성을 확인했다. 이는 사용자 채택 승인이나 solver 수치 검증을 대신하지 않는다.
|
||||
- 행렬 선택 이유: `K=∫BᵀkB dV`, `C=∫ρcHᵀH dV`를 동일 보간에서 유도하여 전도·저장·
|
||||
반력·수지를 연결한다. 두께 exact Z와 면내 3×3 적분은 독립 직접 적분으로 검산할 수 있다.
|
||||
- 대안과 trade-off: 단일 4차 두께 보간, lumped C 또는 reduced integration도 별개 방법이지만
|
||||
현재 우선안에 포함하지 않는다. Consistent C는 단조성·positivity를 보장하지 않으며,
|
||||
일반 곡면에서 3×3은 exact가 아니다. 실패에 맞춰 방법을 조용히 바꾸지 않는다.
|
||||
- 상세 선택: geometry, 시간 갱신, 초기 상태, recovery와 edge 입력은 008~012에서 분리한다.
|
||||
|
||||
## STH-ADR-008: Thin-shell geometry와 두께 station 접속
|
||||
|
||||
- 상태: **Proposed / 물리 범위 검토 대기**
|
||||
- Owner: 메인 assistant; 전문 계약은 formulation·numerical review 담당.
|
||||
- 제안: 실제 3차원 Q4 midsurface의 metric·법선을 각 평가점에서 계산한다. 두께 offset의
|
||||
곡률 보정을 생략한 product-domain을 사용하며 인접 요소는 같은 normalized 두께 station을 공유한다.
|
||||
- 이유: 면내·두께 전도를 유지하면서 승인된 4절점 mesh와 5개 온도점을 연결할 수 있다.
|
||||
- 대안·trade-off: 실제 offset-volume metric 또는 별도 3D 접합부 해상은 더 많은 geometry
|
||||
계약을 요구한다. 우선안은 두께 단차의 노출면·spreading resistance·유한 접합부 부피를 해상하지 않는다.
|
||||
- 영향: 곡률·왜곡·orientation·퇴화 허용 범위와 fold/이두께 접속의 물리 이상화를 구현 전에
|
||||
검토해야 한다. 적분 차수를 높여도 이 모델링 오차는 제거되지 않는다.
|
||||
- 근거: [정식화 2절](formulation.md#2-geometry-방향과-접속의-의미), 독립 검토 NR-01.
|
||||
계획 문서화는 요청되었지만 이 이상화의 사용자 채택 승인은 아직 없다.
|
||||
|
||||
## STH-ADR-009: Backward Euler와 고정 증분 factorization 재사용
|
||||
|
||||
- 상태: **Proposed / 시간 적분·종료 규칙 검토 대기**
|
||||
- Owner: 메인 assistant; 전문 계약은 formulation·I/O 담당.
|
||||
- 제안: `A=C/Δt+K`를 구성하고 지정 온도를 elimination으로 적용한다. 일정 계수·geometry·
|
||||
구속 집합·Δt에서 factorization을 재사용한다. 전체 시간은 Δt의 정수 배로 제한하는 안을 제시한다.
|
||||
- 이유: 상수 물성·일정 입력의 단일 step을 선형 solve로 구성하고 시간 1차 수렴을 검증할 수 있다.
|
||||
- 대안·trade-off: 다른 시간 적분법은 별도 시간 오차·안정성 검토가 필요하다. 짧은 마지막
|
||||
증분을 허용하면 factorization과 fixed-Δt 의미도 달라진다. 안정성만으로 정확도를 보장하지 않는다.
|
||||
- 영향: 초기 constrained 온도 항을 포함한 RHS와 종료시간의 수치 판정을 확정한다.
|
||||
무구속 transient 모델을 정적 K의 null mode만으로 singular 판정하지 않는다.
|
||||
- 근거: [정식화 7절](formulation.md#7-backward-euler-지정-온도와-최초-증분), 독립 두 증분 검산.
|
||||
사용자는 고정 Δt를 선택했으며 BE와 정수 배 제한은 아직 수치 제안이다.
|
||||
|
||||
## STH-ADR-010: 초기 온도 보존과 첫 증분 경계 jump
|
||||
|
||||
- 상태: **Proposed / 초기 상태·default 계약 검토 대기**
|
||||
- Owner: 메인 assistant; 전문 계약은 I/O·formulation 담당.
|
||||
- 제안: 입력 초기 온도를 raw `T^0`로 보존하고 첫 양의 시점부터 step 지정 온도를 적용한다.
|
||||
첫 RHS에 `C_fc(T_c^0−g)/Δt`를 유지하며 `t=0` 반력은 미정의로 구별한다.
|
||||
- 이유: 입력 상태를 조용히 덮어쓰지 않고 첫 증분의 열저장·반력·에너지 변화를 추적할 수 있다.
|
||||
- 대안·trade-off: 즉시 projection은 초기 상태와 에너지를 바꾸므로 projection jump의 저장·보고
|
||||
정책이 필요하다. 두 정책은 같은 수치 결과를 보장하지 않는다.
|
||||
- 영향: Reference의 step 전 `Set-10,11,11`과 step 내부 `Set-10,11,11,1000.`을 model/history
|
||||
데이터로 구분한다. 생략 초기 온도·boundary 값과 재정의 의미를 확인한 뒤 한 정책을 채택한다.
|
||||
- 근거: [정식화 7절](formulation.md#7-backward-euler-지정-온도와-최초-증분), 독립 검토 NR-02.
|
||||
초기 온도의 면내 지정·두께 균일성은 합의됐지만 jump 처리의 채택 승인은 아직 없다.
|
||||
|
||||
## STH-ADR-011: 위치별 Fourier flux와 residual 반력 열률
|
||||
|
||||
- 상태: **Proposed / recovery·영속 결과 계약 검토 대기**
|
||||
- Owner: 메인 assistant; 전문 계약은 formulation·I/O·numerical review 담당.
|
||||
- 제안: `q=−kBT_e`를 면내 4점 × 두께 6개 trace의 24개 위치에서 계산한다.
|
||||
중앙면의 `0−/0+`를 구별한다. 반력 열률은 `CΔT/Δt+KT−Q`의 구속 성분이며 모델 안으로의 공급을 양으로 둔다.
|
||||
- 이유: Gradient flux와 열저장을 포함한 반력은 서로 다른 물리량이다. 각 위치의 raw 값을
|
||||
유지해야 부호·열에너지 수지·경계 근처 공간 오차를 별도로 검증할 수 있다.
|
||||
- 대안·trade-off: 절점 외삽·요소 간 평균은 원자료를 바꾸고 불연속을 숨길 수 있어 필수 결과에
|
||||
포함하지 않는다. Global/local 중 저장 좌표계와 frame·trace identity는 아직 I/O 선택이다.
|
||||
- 영향: 직접 적분 54점과 recovery 24점을 혼동하지 않는다. `t=0` 초기 온도를 보존하되
|
||||
반력을 계산된 0으로 표시하지 않는다. Dataset layout·version·validity를 구현 전에 확정한다.
|
||||
- 근거: [정식화 8~9절](formulation.md#8-반력-열률-에너지와-안정성), 독립 검토 NR-05.
|
||||
온도·flux·reaction 저장은 합의됐으며 위 세부 출력 계약은 Proposed다.
|
||||
|
||||
## STH-ADR-012: 두께 균일 edge 열입력과 공개 문법
|
||||
|
||||
- 상태: **Proposed / 단위·syntax 미결정**
|
||||
- Owner: 메인 assistant; 전문 계약은 I/O 담당.
|
||||
- 제안: 계산 kernel은 edge 옆면의 면적당 유입 열유속을 적분해 총률 `q_in hL`을 보존한다.
|
||||
두 endpoint의 각 두께 가중치는 `(1,4,2,4,1)/24`다.
|
||||
- 이유: 같은 shape function을 사용한 일관 하중으로 입력·열저장·반력을 연결한다.
|
||||
- 대안·trade-off: 외부 입력이 길이당 열률이면 `q_in=λ/h`로 해석해야 하며 두께를 중복 곱하지 않는다.
|
||||
현재 공개 근거만으로 DS4의 `*DFLUX, S1…S4`를 지원한다고 선언할 수 없다.
|
||||
- 영향: 승인 가능한 keyword·대상 edge·단위·중복 application 의미를 확정해야 한다.
|
||||
문법의 미결정을 이유로 합의된 edge 기능을 삭제하거나 표면 분포 열유속으로 대체하지 않는다.
|
||||
- 근거: [계획안 5절](design-plan.md#5-열입력과-지정-온도),
|
||||
[정식화 6절](formulation.md#6-가장자리절점-열입력), 독립 검토 NR-03.
|
||||
두께 균일 edge 입력은 사용자 합의이며 외부 표현의 채택 승인은 아직 없다.
|
||||
@@ -0,0 +1,61 @@
|
||||
# Shell Transient Heat Transfer 지역 작업 지침
|
||||
|
||||
- Feature ID: `shell-transient-heat-transfer`
|
||||
- 메인 owner: 메인 assistant
|
||||
- 적용 범위: `docs/shell-transient-heat-transfer/`의 계약·계획·검토 문서.
|
||||
이 파일은 `src/`, `include/`, `tests/`에 자동 적용되는 지침이 아니다.
|
||||
- 현재 범위·상태·checklist 원본: [Feature PRD](PRD.md).
|
||||
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
|
||||
[공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[Feature 문서 관리](../FEATURE_DOCUMENTATION.md).
|
||||
이 파일은 자동 로드되는 `AGENTS.md`가 아니며, Feature 작업 시 명시적으로 참조한다.
|
||||
|
||||
## 계약과 작업 경계
|
||||
|
||||
- 인터뷰에서 합의한 지원 범위는 PRD, 채택 상태·이유·영향은 ADR에 기록한다.
|
||||
`Proposed` 수치 방법과 독립 검토 결과를 사용자 채택 승인이나 구현 완료로 바꾸지 않는다.
|
||||
- 수식 원본은 formulation, 구현 순서·코드 연결은 design-plan, 독립 지적과 검산 evidence는
|
||||
numerical-review가 소유한다. 긴 유도·검토 내용을 PRD나 이 파일에 복제하지 않는다.
|
||||
- 현재 checklist는 PRD 한 곳에 둔다. 문서 작성 요청만으로 solver 구현·외부 실행·커밋을 수행하지 않는다.
|
||||
- 변경이 보간·물성·geometry 근사·초기 상태·적분·시간 갱신 의미를 바꾸면 관련 ADR과
|
||||
정식화를 먼저 갱신하고 필요한 독립 numerical review를 받는다. Specialist는 할당 문서만 수정한다.
|
||||
|
||||
## 이 Feature에서 보존할 의미
|
||||
|
||||
- 현재 목표는 단일 step의 uncoupled 열해석이다. 초기의 두께 방향 등온 선택은 대체되었으며
|
||||
현재 요구는 균질 단면의 온도점 5개와 면내·두께 방향 열전달이다.
|
||||
- Source DOF 11/13/15는 각각 아랫면/중앙면/윗면이다. Source DOF, 내부 equation 번호,
|
||||
온도점·적분점·flux recovery 위치를 구분한다.
|
||||
- 제안의 54개 직접 적분 위치와 24개 flux trace 위치는 서로 다르다. 중앙면의 두께
|
||||
미분 양쪽 값을 평균하거나 요소 경계를 넘어 flux를 합치지 않는다.
|
||||
- 반력 열률은 열용량 항을 포함한 full residual로 정의하는 제안이다. Fourier flux와
|
||||
반력 열률을 같은 observable로 대체하지 않는다.
|
||||
- Thin-shell 곡률 근사, 다른 두께·fold의 접속, 초기 온도 jump, edge 입력과 결과 schema는
|
||||
[PRD 미결정 계약](PRD.md#구현-전-미결정-계약)을 먼저 확인한다. 미지원 의미를 임의 default로 처리하지 않는다.
|
||||
- Reference는 PRD가 지정한 기존 `.inp`와 CSV를 그대로 사용한다. 음수 reference는
|
||||
roundoff로 단정하거나 clamp하지 않고 [TOLERANCE](../TOLERANCE.md)를 적용한다.
|
||||
- All-constrained와 단면 전체 end 온도 지정은 검산용 algebra/assembly fixture다.
|
||||
내부 온도점 경계조건을 공개 입력 기능으로 확대하는 근거로 사용하지 않는다.
|
||||
|
||||
## 문서 소유권과 인계
|
||||
|
||||
| 문서 | Owner | 책임 |
|
||||
| --- | --- | --- |
|
||||
| [FEATURED_AGENTS.md](FEATURED_AGENTS.md) | 메인 assistant | 지역 지침·소유권·문서 연결 |
|
||||
| [PRD.md](PRD.md) | 메인 assistant | 요구사항·제외·acceptance·현재 checklist |
|
||||
| [ADR.md](ADR.md) | 메인 assistant | 결정·제안 상태·근거와 미해결 선택 |
|
||||
| [design-plan.md](design-plan.md) | 메인 assistant | 방법론 요약·코드 연결·구현 순서 |
|
||||
| [formulation.md](formulation.md) | formulation-agent | 수식·geometry·보간·적분·시간 갱신·recovery |
|
||||
| [numerical-review.md](numerical-review.md) | numerical-review-agent | 독립 검산·수치 위험·검증 설계 |
|
||||
|
||||
후속 I/O·구현·physics 작업의 owner는 실제 할당 시 기록한다. 필요한 PRD 항목과 관련
|
||||
전문 문서의 절, 수정 파일, 검증 기준을 전달하고 결과·변경 경로·미해결 항목을 반환한다.
|
||||
|
||||
## 변경 확인
|
||||
|
||||
문서 변경은 요구사항 ID·결정 상태·수식의 위치/부호·상대 링크·diff 정합으로 확인한다.
|
||||
문서만 바꾸면 build/test를 실행하지 않는다. 구현 시 검증 명령과 단계별 기준은
|
||||
[계획안의 검증 실행](design-plan.md#11-검증-실행과-완료-판단) 및 프로젝트 지침을 따른다.
|
||||
정확 산술 검산, solver build/CTest, 외부 reference 비교, 실제 결과의 physics 검토를
|
||||
서로 다른 evidence로 기록하고 미실행 항목을 통과로 표시하지 않는다.
|
||||
@@ -0,0 +1,219 @@
|
||||
# Shell Transient Heat Transfer PRD
|
||||
|
||||
- Feature ID: `shell-transient-heat-transfer`
|
||||
- Owner: 메인 assistant
|
||||
- 상태: 상세 계획을 반영한 요구사항 초안. 인터뷰 합의와 수치 제안을 구분하며 baseline 최종 검토 전이다.
|
||||
- 기록일: 2026-09-28
|
||||
|
||||
기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
|
||||
[공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[TOLERANCE](../TOLERANCE.md). 지역 지침은 [Feature 지침](FEATURED_AGENTS.md),
|
||||
결정 근거는 [Feature ADR](ADR.md)을 따른다.
|
||||
|
||||
## 제품 목적과 문서 범위
|
||||
|
||||
3차원 공간에 배치된 4절점 Shell의 시간에 따른 온도장과 열전달을 계산한다.
|
||||
양방향 열–구조 연성은 장기 목표이며, 이번 기능은 구조해석과 분리된 uncoupled transient
|
||||
heat transfer다. 해석 사용자는 승인된 Abaqus 입력 subset으로 모델을 정의하고, 개발·검증
|
||||
담당자는 온도·열유속·반력 열률과 열에너지 수지를 재현할 수 있어야 한다.
|
||||
|
||||
이 PRD는 [상세 설계·구현 계획안](design-plan.md), [정식화 제안](formulation.md),
|
||||
[독립 수치 검토](numerical-review.md)를 연결하는 요구사항 원본이다. 현재 작업은 이 계획을
|
||||
바탕으로 `FEATURED_AGENTS.md`, `PRD.md`, `ADR.md`를 구성하는 문서 작업이며 구현 실행은 포함하지 않는다.
|
||||
|
||||
초기의 두께 방향 균일 온도 선택은 reference 확인 후 사용자가 명시적으로 변경했다.
|
||||
현재 범위는 균질 단면의 두께 방향 온도점 5개와 면내·두께 방향 열전달을 포함한다.
|
||||
|
||||
## 상태와 채택의 구분
|
||||
|
||||
| 구분 | 현재 상태 | 의미 |
|
||||
| --- | --- | --- |
|
||||
| 기능 범위 | 인터뷰 합의 | 아래 001~018의 지원·제외 범위를 사용자가 선택했다. |
|
||||
| 수치 방법 | Proposed | 20 DOF 보간·K/C·적분·BE·flux recovery의 우선안을 작성했다. 문서 작성 요청을 방법별 채택 승인으로 확대하지 않는다. |
|
||||
| 독립 수치 검토 | 문서 검토·정확 산술 검산 수행 | 명시 행렬과 두 증분의 일관성 evidence가 있으며 geometry·초기 상태·I/O 선택은 남아 있다. |
|
||||
| 구현·제품 검증 | 미실행 | Solver code, build/CTest, FESA/reference 비교와 실제 결과의 physics 검증 완료를 주장하지 않는다. |
|
||||
|
||||
## 사용자와 합의한 요구사항
|
||||
|
||||
아래 acceptance는 확인해야 할 관찰 가능한 동작과 검증 의도다. 테스트가 실행되었거나
|
||||
정식화·I/O 세부 계약이 승인되었다는 뜻은 아니다.
|
||||
|
||||
| ID | 요구사항 | Acceptance intent |
|
||||
| --- | --- | --- |
|
||||
| FEM-REQ-SHELL-THERMAL-001 | 구조 변위와 연성하지 않는 과도 열전달 해석을 제공한다. | 구조해석 없이 초기 온도에서 시간별 열해석 결과를 생성한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-002 | 3차원 공간의 4절점 사각형 Shell을 지원한다. | 평판·접힌 판·곡면 mesh의 열전달과 모델 회전에 대한 결과 변환을 검증한다. 허용 요소 왜곡은 후속 계약에서 정한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-003 | 모든 단면에 두께 방향 온도점 5개를 사용하고 면내·두께 방향 열전달을 계산한다. | 두께 방향으로 온도가 달라지는 독립 사례와 균일 온도 사례를 구분하여 확인한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-004 | 각 단면은 두께 전체에 동일한 재료를 사용하는 균질 단면이다. | 적층 단면은 지원 범위에 포함하지 않는다. |
|
||||
| FEM-REQ-SHELL-THERMAL-005 | 열전도율·밀도·비열은 온도에 무관한 상수이며 열전도율은 등방성이다. | 상수 물성의 전도·열저장 응답을 검증하고 온도 의존·이방성 입력은 지원으로 해석하지 않는다. |
|
||||
| FEM-REQ-SHELL-THERMAL-006 | 여러 재료를 정의하고 요소 집합별로 배정할 수 있다. | 재료 배정과 서로 다른 물성 영역 사이의 열전달을 확인한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-007 | 요소 집합별 두께를 지원하며 각 요소 내부의 두께는 일정하다. | 서로 다른 두께가 전도·열저장·가장자리 열입력에 반영되는지 검증한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-008 | 초기 온도는 절점 또는 절점 집합별로 지정할 수 있다. | 비균일 면내 초기 온도를 읽고 해당 절점의 5개 두께 방향 온도점에 같은 값을 적용한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-009 | 아랫면·윗면에 각각 독립적인 지정 온도를 적용한다. | 한쪽 면만 구속한 경우와 두 면에 서로 다른 온도를 구속한 경우를 확인한다. 내부 온도점 지정 온도는 제외한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-010 | 절점 집중 열입력은 아랫면·윗면 온도점에 각각 독립적으로 적용한다. | 선택한 면의 열입력이 조립·열에너지 수지에 반영되는지 확인한다. 내부 온도점 직접 입력은 제외한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-011 | Shell 가장자리에 두께 전체로 균일하게 분포하는 열입력을 적용한다. | 대상 edge, 두께 방향 분포와 총 열률의 일관성을 독립 적분값으로 확인한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-012 | 지정 온도와 열입력은 해석 중 일정하다. | 시간 이력 표·진폭 함수에 의한 변화 없이 초기 온도에서 과도응답을 계산한다. 시작 시점의 적용 의미는 후속 계약에서 명시한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-013 | 사용자가 전체 해석 시간과 고정 시간 증분을 지정한다. | 지정된 시간 격자와 종료 시점을 확인한다. 나누어떨어지지 않는 종료 시간의 처리는 후속 계약에서 명시한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-014 | 온도, 요소 열유속, 지정 온도 경계의 반력 열률을 필수 결과로 제공한다. | 온도점·열유속 위치와 성분·반력 열률의 물리적 의미를 확인한다. 두께 방향 범위 확대에 따른 열유속 성분은 후속 출력 계약에서 명시한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-015 | 모든 시간 증분의 결과를 HDF5로 저장하고 초기 온도 분포도 보존한다. | 입력의 lexical sibling인 `<stem>_results.h5`에서 초기 온도와 완료 증분별 결과·시간·source identity를 확인한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-016 | 기존 reference CSV의 `Step-1`, `t=37`, `NT11`을 외부 비교 대상으로 한다. | source node와 두께 위치·시점을 대응시킨 뒤 공통 tolerance 정책을 적용한다. |
|
||||
| FEM-REQ-SHELL-THERMAL-017 | 외부 CSV에 없는 결과도 독립적으로 검증한다. | 해석해·열에너지 수지·시간 및 공간 수렴성으로 전체 온도 이력, 내부 온도, 열유속과 반력 열률을 검증한다. 추가 Abaqus CSV 확보를 필수 조건으로 삼지 않는다. |
|
||||
| FEM-REQ-SHELL-THERMAL-018 | 하나의 transient step만 지원한다. | 초기 온도와 일정한 경계조건·열입력으로 지정 시간까지 계산하고, 여러 해석 step의 입력은 지원 범위 밖으로 진단한다. |
|
||||
|
||||
## 제외 범위
|
||||
|
||||
- 열–구조 순차 연계와 양방향 연성, 변형에 따른 열전달 변화
|
||||
- 3절점 요소, 적층 단면, 이방성·온도 의존 열물성
|
||||
- 대류·복사·내부 발열, Shell 윗면·아랫면에 직접 적용하는 분포 열유속
|
||||
- 두께 방향 비균일 초기 온도, 내부 온도점의 지정 온도·집중 열입력
|
||||
- 두께 방향 비균일 가장자리 열입력, 절점별 가변 두께
|
||||
- 사용자 선택 두께 방향 온도점 수, 자동 시간 증분, 시간 변화 경계조건·열입력
|
||||
- 여러 해석 step 및 step 사이의 온도 상태 전달·경계조건 변경
|
||||
- Abaqus 내부 요소·적분·열용량 처리·결과 생성 절차의 동등성
|
||||
|
||||
면의 온도점에 적용하는 절점 집중 열입력은 지원하며, 면적에 걸쳐 적용하는 분포 표면
|
||||
열유속은 제외한다. 두 입력을 혼동하지 않는다.
|
||||
|
||||
## Reference 정적 관찰
|
||||
|
||||
사용자가 지정한 논리적 경로는 `reference/shell-thermal`이다. 2026-09-28 확인 시
|
||||
현재 `ThermalAnalysis` worktree에는 없고 동일 저장소의 `dev` checkout에서 다음 원본을
|
||||
읽었다. 원본 복사·수정·solver 실행은 수행하지 않았다.
|
||||
|
||||
| Artifact | 확인한 내용 |
|
||||
| --- | --- |
|
||||
| `reference/shell-thermal/shell-thermal.inp` | `DS4` 676개, 절점 729개, instance `Part-1-1`, 단일 재료, `*Shell Section` 데이터 `0.5, 5` |
|
||||
| 같은 `.inp`의 재료 | Conductivity `54`, Density `7850`, Specific Heat `460`. 입력 숫자만 기록하며 단위계를 추정하지 않는다. |
|
||||
| 같은 `.inp`의 step | `*Heat Transfer, end=PERIOD`와 `1., 100., , ,`; `Set-10, 11, 11, 1000.` 지정 온도. 명시적인 초기 온도·집중 열입력·가장자리 열입력은 없다. |
|
||||
| 같은 `.inp`의 step 전 경계 | `*Boundary`의 `Set-10, 11, 11`이 존재한다. 생략된 값과 step 내부 재지정의 의미를 I/O에서 확인하며 model-level 경계를 무시하지 않는다. |
|
||||
| `reference/shell-thermal/shell-thermal NodalTemperature.csv` | `Step`, `Frame`, `Node Label`, `NT11`; `Step-1`, `Increment 37: Step Time = 37.00`의 729행. 다른 시간·열유속·반력 열률은 없다. |
|
||||
|
||||
CSV에는 instance 열이 없으므로 `.inp`의 단일 instance로 row identity를 복원할 수 있는지
|
||||
I/O 단계에서 명시적으로 검증한다. 파일명·행 순서만으로 다중 instance를 추정하지 않는다.
|
||||
이 사례 하나로 다중 재료·두께, 가장자리·집중 열입력 또는 전체 시간 이력의 coverage를 주장하지 않는다.
|
||||
독립 검토의 CSV 정적 통계에서 729개 label이 고유하고 값이 유한했으며 NT11 범위는
|
||||
`[-15.5742216, 1000]`이었다. 초기 경계 급변·공간 이산과 관련된 undershoot 가능성을
|
||||
조사해야 하며 reference 음수를 단순 roundoff로 취급하지 않는다.
|
||||
|
||||
Abaqus의 공개 열전달 Shell 규약에서 자유도 11은 아랫면, 5개 온도점 단면의 13은 중앙면,
|
||||
15는 윗면에 해당한다. 기하학적 절점 위치와 온도 자유도의 두께 위치는 구별한다.
|
||||
[Abaqus 문서: Heat Transfer Shell Elements](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-shellelem.htm).
|
||||
원본은 CAE 2024 생성 표시가 있으며 공개 의미 확인에는 접근 가능한 2025 문서를 사용했다.
|
||||
|
||||
## 제안하는 계산 방법과 상세 계획
|
||||
|
||||
아래는 사용자가 선택한 기능 범위를 구현할 수 있도록 작성한 수치 방법 제안이다.
|
||||
인터뷰로 확정한 요구사항과 구분하며 최종 채택 승인을 받은 것으로 기록하지 않는다.
|
||||
|
||||
- 면내 Q4와 두께 두 구간의 C0 2차 보간으로 요소당 온도 자유도 20개를 구성한다.
|
||||
- 실제 3차원 midsurface의 metric과 법선을 이용해 `∇T=B T_e`를 구성한다.
|
||||
Thin-shell product-domain 근사와 접힌 판·다른 두께의 normalized-station 접속 의미를 명시한다.
|
||||
- `K_e=∫BᵀkB dV`, `C_e=∫ρcHᵀH dV`를 사용한다. 두께의 명시 Z 행렬과
|
||||
면내 3×3 Gauss 적분을 조합하고 직접 54점 적분으로 검산한다.
|
||||
- Backward Euler의 `(C/Δt+K)T^(n+1)=Q+C T^n/Δt`를 free/constrained 공간으로
|
||||
분할한다. 첫 증분의 이전 constrained 온도 항까지 보존하고 고정 계수 factorization을 재사용한다.
|
||||
- `q=−kBT_e`로 면내·두께 방향 열유속을 직접 계산한다. 면내 4점과 두께 6개 trace의
|
||||
총 24개 위치를 제안하며 중앙면의 양쪽 flux를 구별한다.
|
||||
- 반력 열률은 `C(T^(n+1)−T^n)/Δt+K T^(n+1)−Q`의 구속 성분에서 계산한다.
|
||||
|
||||
[계획안](design-plan.md)은 각 선택의 이유, 단계별 수정 파일과 검증을,
|
||||
[정식화](formulation.md)는 shape function·미분·행렬·적분·에너지 수식의 원본을 소유한다.
|
||||
기존 `Element`/`DofManager`의 구조 자유도 전제를 확인했으며 별도 thermal kernel/state와
|
||||
DOF layout 확장이 필요하다. 구체적인 수치 제안·I/O 의미·geometry 허용 범위를 검토한 뒤 구현한다.
|
||||
|
||||
## 입력·결과 계약의 범위
|
||||
|
||||
입력의 topology·material·section·load·boundary·step은 Domain에 보존하고, 실행 view와
|
||||
mutable thermal state를 분리한다. `DS4`, `*SHELL SECTION`, 열물성과 `*HEAT TRANSFER`를
|
||||
읽는 것만으로 기능 완료를 선언하지 않는다. Source label/instance는 방정식과 결과까지 보존한다.
|
||||
|
||||
| 물리량·입력 | 의미와 위치 | 단위 차원·확정 상태 |
|
||||
| --- | --- | --- |
|
||||
| 온도 | 절점마다 두께 위치 5개, initial 및 모든 완료 증분 | Temperature. 값의 단위계를 추정하지 않는다. |
|
||||
| 열전도율·밀도·비열 | 요소 집합이 참조하는 상수 재료 | Power/(length·temperature), mass/volume, energy/(mass·temperature) |
|
||||
| 절점 집중 열입력 | 아랫면 또는 윗면 온도점의 입력 | Power. 면적이나 두께를 중복 곱하지 않는 제안 |
|
||||
| 가장자리 열입력 | 두께 전체에 균일한 edge 입력 | 외부 단위·syntax 미확정. 계산안의 면적당 flux는 power/area, 적분 후 총 열률은 power |
|
||||
| Heat flux | 요소별·면내 위치·두께 trace·component·시점 | Power/area. 제안은 24개 trace 위치, global/local 저장 선택은 미확정 |
|
||||
| 반력 열률 | 지정 온도 자유도·시점 | Power. 제안은 모델 안으로 공급되는 열을 양으로 정의 |
|
||||
| 열에너지·free residual | 검증 evidence | Energy / power. 별도 필수 공개 dataset으로 추가 승인된 것은 아님 |
|
||||
|
||||
공식 출력은 입력 경로의 lexical sibling인 `<stem>_results.h5`다. Dataset layout·schema
|
||||
version·초기 frame validity·좌표계는 I/O 계약에서 정한다. `t=0` 초기 온도 저장을
|
||||
시간 차분이 없는 반력 열률의 계산 완료로 표시하지 않는다.
|
||||
|
||||
## 검증 기준과 후속 계약 경계
|
||||
|
||||
외부 `NT11` 비교는 [TOLERANCE](../TOLERANCE.md)의 공통 정책을 적용한다. Row identity,
|
||||
필수 component·시간·두께 위치의 대응과 missing·extra·duplicate·nonfinite 사전검사를
|
||||
tolerance 전에 수행한다. 음수 reference를 zero-clamp하거나 결과에 맞춰 보정하지 않는다.
|
||||
|
||||
독립 검증은 최소한 균일 온도 보존, 열입력·열저장·반력 열률의 에너지 수지, 면내 및
|
||||
두께 방향의 해석 가능한 전도 사례, 열유속·반력의 부호, 시간 및 공간 수렴성을 다룬다.
|
||||
구체적인 사례·mesh·시간 간격·판정 기준은 정식화와 독립 numerical review에서 확정한다.
|
||||
외부 비교 tolerance를 내부 에너지 수지나 수렴성 기준으로 대신 사용하지 않는다.
|
||||
|
||||
정식화·계획안에서 제시한 방안은 아직 사용자 미승인이다. 다음 계약은 제안을 검토하여
|
||||
확정할 필요가 있으며 기존 인터뷰 범위를 조용히 변경하지 않는다.
|
||||
|
||||
- 정식화: 곡면·왜곡 geometry의 허용 범위, 서로 다른 두께 단면의 접속 의미, 온도 보간,
|
||||
면내·두께 적분, 열용량 행렬, 시간 적분법, 초기/지정 온도 적용 순서와 반력 열률 정의
|
||||
- I/O: 승인 keyword subset, edge 열입력의 단위·부호·대상 표기, 생략된 초기 온도 등 default,
|
||||
중복/상충 집합 진단, source identity, 열유속 위치·좌표계·성분, 초기 상태와 증분의 HDF5 schema
|
||||
- Numerical Review: reference frame 대응과 comparison family, analytical/invariant 사례와
|
||||
각 판정 기준, 고정 5개 온도점 조건에서의 공간 수렴성·두께 해상도 한계
|
||||
- 구현 전 runtime 계약: 별도 thermal procedure/state, 실패 candidate와 기존 최종 HDF5 보존,
|
||||
deterministic assembly·결과 순서, 기존 구조해석의 회귀 검증 범위
|
||||
|
||||
## 기능 완료 기준
|
||||
|
||||
| 검증 묶음 | 요구사항 연결 | 필요한 evidence |
|
||||
| --- | --- | --- |
|
||||
| 입력과 모델 의미 | 001~013, 018 | 양성 입력의 semantic mapping과 미지원·상충·불량 값 진단; pre-step boundary와 단일 transient step 구분 |
|
||||
| Element·조립 | 002~007, 010~011 | Shape·K/C·edge 일관 하중 검산, source DOF scatter, 결정적인 조립·결과 순서 |
|
||||
| 시간 적분과 물리 | 008~013, 017~018 | 초기 경계 불일치, 해석해·에너지 수지·시간/공간 수렴, 실패 candidate 보존 |
|
||||
| 결과와 저장 | 014~015 | 모든 온도점·완료 증분, flux trace, reaction의 identity·단위·좌표계 및 HDF5 round trip·실패 보존 |
|
||||
| 외부 비교 | 016 | 원본 NT11 t37 row 대응 사전검사와 공통 tolerance의 blocking 비교 |
|
||||
| 통합 회귀 | 전체 | 구성된 MSVC x64 Debug build/CTest, 신규 warning 없음, 영향받는 구조해석 회귀와 독립 검토 결과 |
|
||||
|
||||
단일 kernel 통과, reference 한 시점의 일치 또는 문서의 정확 산술 검산만으로 위 묶음을
|
||||
대체하지 않는다. 검증 상세는 [계획안 9~11절](design-plan.md#9-구현-순서와-각-단계의-완료-조건)과
|
||||
[독립 검토 3절](numerical-review.md#3-구현-후-반증-가능한-검증-계획)을 따른다.
|
||||
|
||||
## 구현 전 미결정 계약
|
||||
|
||||
| 항목 | 우선 제안·남은 선택 | 결정·상세 계약 owner | 근거 |
|
||||
| --- | --- | --- | --- |
|
||||
| 보간·행렬·적분 | Q4×두 P2 구간, consistent C, 면내 3×3·두께 exact Z의 채택 | 메인/사용자, formulation·numerical review | STH-ADR-007 |
|
||||
| Geometry·접속 | Thin-shell 곡률 근사와 normalized station 접속의 적용 범위·퇴화 기준 | 메인/사용자, formulation·numerical review | STH-ADR-008, NR-01 |
|
||||
| 시간 제어 | Backward Euler 및 종료시간을 Δt 정수 배로 제한할지 | 메인/사용자, formulation·I/O | STH-ADR-009 |
|
||||
| 초기 상태 | Raw 초기값의 첫 증분 사용, pre-step 경계·생략값·step 재정의 의미 | 메인/사용자, I/O·formulation | STH-ADR-010, NR-02 |
|
||||
| 결과 계약 | 24개 trace, global/local 저장, 반력 부호, t=0 validity | 메인/사용자, I/O·numerical review | STH-ADR-011 |
|
||||
| Edge 입력 | 면적당 또는 길이당 단위·공개 keyword·대상 및 중복 의미 | 메인/사용자, I/O | STH-ADR-012, NR-03 |
|
||||
| 내부 수치 판정 | Geometry margin, 적분 오차, residual·수렴성 기준 | numerical review, 해당 계약 owner | NR-04; 외부 tolerance와 구분 |
|
||||
|
||||
Owner 역할은 후속 할당 책임이며 아직 수행하지 않은 I/O 작업이나 새 승인을 뜻하지 않는다.
|
||||
NR 항목의 상세 근거는 [독립 수치 검토](numerical-review.md#1-영향이-큰-판단과-필요한-결정)에 있다.
|
||||
|
||||
## 사용자 검토 항목
|
||||
|
||||
개별 범위 선택 인터뷰를 마쳤다. 이 초안의 범위·제외·acceptance intent를 사용자에게
|
||||
요약하여 제시하고 문서 전체의 requirement baseline을 확정한다. 구현 실행은 별도 요청 범위다.
|
||||
|
||||
후속 정식화·I/O에서 physics나 공개 의미의 추가 선택이 필요하면 근거와 함께 사용자에게
|
||||
돌려보낸다. 위 전문 항목을 이미 결정되었거나 검증된 것으로 취급하지 않는다.
|
||||
|
||||
## 현재 checklist
|
||||
|
||||
- [x] 물리·요소·재료·두께·초기 온도·경계조건·열입력 범위 인터뷰
|
||||
- [x] 고정 시간 증분·모든 증분 결과 저장·필수 결과 선택
|
||||
- [x] 기존 reference 원본 정적 확인과 외부 비교 범위 합의
|
||||
- [x] 핵심 문서 3개에 합의와 미결정 항목 기록
|
||||
- [x] 단일 transient step으로 범위 확정
|
||||
- [x] 열전도·열용량행렬, 열유속·반력, 시간 적분과 코드 연결을 포함한 상세 계획 제안
|
||||
- [x] [독립 수치 검토](numerical-review.md)의 문서 지적 반영; 미결정 물리·I/O 계약은 별도로 유지
|
||||
- [x] 상세 계획을 바탕으로 지역 FEATURED_AGENTS·PRD·ADR 구성
|
||||
- [ ] 사용자 검토 후 requirement baseline 확정
|
||||
- [ ] 사용자 검토 후 수치 방법·I/O 계약·geometry 허용 범위와 실행 계획 확정
|
||||
|
||||
Solver build/test, Abaqus 실행, FESA/reference 수치 비교와 실제 결과의 physics 검토는
|
||||
수행하지 않았다. [독립 수치 검토](numerical-review.md)는 두께 Z 행렬, 평판 20 DOF 행렬과
|
||||
두 증분 BE 에너지 수지를 정확 유리수로 검산하고 잔여 물리·I/O 결정을 기록했다.
|
||||
@@ -0,0 +1,301 @@
|
||||
# Shell Transient Heat Transfer 상세 설계·구현 계획안
|
||||
|
||||
- 상태: 사용자 검토용 제안. 요구사항 인터뷰를 바탕으로 수치 방법론을 구체화했으며 구현은 시작하지 않았다.
|
||||
- Owner: 메인 assistant
|
||||
- 기준: [Feature PRD](PRD.md), [프로젝트 지침](../../AGENTS.md), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[CODINGSTYLE](../CODINGSTYLE.md), [TOLERANCE](../TOLERANCE.md)
|
||||
- 수식의 상세 원본: [정식화 제안](formulation.md). 현재 checklist는 [PRD](PRD.md#현재-checklist)에만 둔다.
|
||||
- 독립 검토: [numerical-review.md](numerical-review.md). 수식의 일관성 검토이며 구현·정확도 통과 판정은 아니다.
|
||||
|
||||
## 1. 구현할 해석과 제안 방법
|
||||
|
||||
입력의 4절점 Shell mesh에서 온도만 풀며, 한 절점에 두께 방향 온도 5개를 둔다.
|
||||
요소당 20개 온도 자유도로 면내·두께 방향 전도와 열저장을 함께 계산한다.
|
||||
기존 MITC4의 변위·회전 강성행렬을 열행렬로 전용하지 않는다.
|
||||
|
||||
| 결정할 항목 | 우선 제안 | 선택 이유와 대안 |
|
||||
| --- | --- | --- |
|
||||
| 면내 보간 | Bilinear Q4 | 승인된 4절점 topology와 연결되며 상수 온도·평판 선형 온도장을 재현 |
|
||||
| 두께 보간 | 2개 구간의 C0 2차 Lagrange 보간 | 5개 온도점을 사용하고 중앙 온도점을 공유. 전체 두께 단일 4차 보간보다 구간별 gradient와 적분을 분리하기 쉬움 |
|
||||
| geometry | 실제 3차원 midsurface의 metric과 법선을 이용하는 thin-shell product-domain | 접힌 판·곡면을 같은 scalar 열전도 문제로 구성. 두께 offset에 따른 곡률 보정은 생략하는 모델임을 명시 |
|
||||
| 열용량 | Consistent heat-capacity matrix | Galerkin 약형에서 직접 유도하고 열저장·반력·에너지 계산에 같은 행렬 사용. Lumped 대안은 초기 급변의 진동 및 reference 불일치 조사 대상으로만 남김 |
|
||||
| 적분 | 면내 3×3 Gauss, 두께의 두 P2 구간은 정확 적분한 Z 행렬 사용 | 직접 54점 적분과 대조. Affine 평판은 2×2 면내 적분도 정확하며 곡면·왜곡은 고차 적분 대조로 오차 확인 |
|
||||
| 시간 적분 | Backward Euler, 고정 Δt | 일정 계수 선형 문제에서 factorization을 재사용할 수 있고 첫 구현의 시간 수렴 검증이 명확 |
|
||||
| 열유속 | 보간 온도의 기울기에서 직접 복구 | 요소별·위치별 Fourier 열유속과 전체 residual 반력을 구별하여 검증 |
|
||||
|
||||
이 표는 FESA가 채택할 제안이며 Abaqus 내부 알고리즘 동등성의 약속이 아니다.
|
||||
특히 consistent C가 현재 reference의 과도응답을 공통 tolerance 안에서 재현하는지는
|
||||
아직 검증하지 않았다. 시간 적분의 안정성이 양의 온도 보존이나 정확도를 보장하지도 않는다.
|
||||
|
||||
## 2. 온도 자유도와 보간
|
||||
|
||||
온도점의 무차원 두께 좌표는 `ζ = [-1, -1/2, 0, 1/2, 1]`, 실제 좌표는 `z=hζ/2`다.
|
||||
요소 vector는 node-major 순서로 정의한다.
|
||||
|
||||
\[
|
||||
\mathbf T_e=[T_{1,1},\ldots,T_{1,5},T_{2,1},\ldots,T_{4,5}]^T.
|
||||
\]
|
||||
|
||||
Source 자유도 11~15와 위 온도점 1~5를 명시적으로 대응시킨다. 내부 equation 번호와
|
||||
source 자유도를 같은 정수로 취급하지 않는다. 현재 reference의 NT11은 아랫면 값이다.
|
||||
|
||||
\[
|
||||
T_h(\xi,\eta,\zeta)=\sum_{a=1}^4\sum_{s=1}^5
|
||||
N_a(\xi,\eta)L_s(\zeta)T_{a,s}=\mathbf H\mathbf T_e.
|
||||
\]
|
||||
|
||||
Q4의 `N_a`와 두께의 `L_s` 및 도함수는 [정식화](formulation.md)에 명시한다.
|
||||
5개의 서로 독립적인 2D 판을 만드는 것이 아니라, 두께 도함수 항으로 온도점 사이를 결합한다.
|
||||
|
||||
## 3. 3차원 geometry와 열전도행렬 K
|
||||
|
||||
Midsurface를 `r(ξ,η)=Σ N_a x_a`로 나타낸다. 접선 행렬 `A=[r_,ξ r_,η]`, metric
|
||||
`G=AᵀA`, 면적 Jacobian `J_s=|r_,ξ×r_,η|`, 단위 법선 `n`을 계산한다.
|
||||
면내 gradient와 전체 gradient의 각 열은 다음과 같다.
|
||||
|
||||
\[
|
||||
\nabla_sN_a=A G^{-1}\begin{bmatrix}N_{a,\xi}\\N_{a,\eta}\end{bmatrix},
|
||||
\qquad
|
||||
\mathbf B_{a,s}=L_s\nabla_sN_a+
|
||||
\mathbf n N_a\frac{2}{h}L'_s.
|
||||
\]
|
||||
|
||||
`B`는 3×20이며 `∇T=B T_e`다. 등방성 전도율 `k>0`에 대해
|
||||
|
||||
\[
|
||||
\boxed{\mathbf K_e=\frac h2\int_{-1}^1\!\int_{-1}^1\!\int_{-1}^1
|
||||
\mathbf B^T(k\mathbf I)\mathbf B\,J_s\,d\zeta\,d\eta\,d\xi}
|
||||
\]
|
||||
|
||||
를 20×20 행렬로 계산한다. `L_s L_t ∇_sN_a·∇_sN_b`는 면내 전도,
|
||||
`N_aN_b(2/h)^2 L'_sL'_t`는 두께 전도다. 법선과 면내 접선의 직교성 때문에 이
|
||||
product-domain 모델의 교차항은 0이다. 평판에서 각각 대략 `kh`, `k/h`의 두께 scaling을 갖는다.
|
||||
|
||||
`G`의 퇴화, 뒤집히거나 자기 교차하는 요소, 불일치하는 surface side는 입력 geometry
|
||||
진단으로 처리한다. `|det J|`로 invalid 요소를 정상화하거나 임의의 최소 두께를 대입하지 않는다.
|
||||
중앙면 접속은 같은 normalized thickness station을 공유하는 이상화로 제안한다.
|
||||
두께가 다른 요소의 단차·급한 fold의 실제 3D 접합부 열장은 이 모델의 해상 범위 밖이다.
|
||||
이 접속 의미와 얇은 Shell 곡률 근사는 사용자 검토가 필요한 물리 선택이다.
|
||||
|
||||
## 4. 열용량행렬 C와 적분 절차
|
||||
|
||||
밀도 `ρ>0`, 비열 `c>0`에 대해
|
||||
|
||||
\[
|
||||
\boxed{\mathbf C_e=\frac h2\int\rho c\,\mathbf H^T\mathbf H\,J_s
|
||||
\,d\zeta\,d\eta\,d\xi}
|
||||
\]
|
||||
|
||||
를 계산한다. K의 단위는 `power/temperature`, C는 `energy/temperature`다.
|
||||
사용자가 일관된 단위계를 제공하며 코드가 입력 숫자를 보고 SI 단위로 추정하지 않는다.
|
||||
|
||||
계산 순서는 다음과 같다.
|
||||
|
||||
1. 면내 9개 Gauss 위치에서 `N`, 도함수, `J_s`, `G`, 법선을 계산한다.
|
||||
2. `M_ij=∫N_iN_j dA`, `S_ij=∫∇_sN_i·∇_sN_j dA`의 4×4 행렬을 누적한다.
|
||||
3. 정확히 적분한 `Z0_ab=∫L_aL_b dζ`, `Z1_ab=∫L'_aL'_b dζ`의 5×5 행렬을 사용한다.
|
||||
4. Node-major 순서에서 `C=ρc(h/2)(M⊗Z0)`, `K=k[(h/2)(S⊗Z0)+(2/h)(M⊗Z1)]`를 구성한다.
|
||||
5. finite·대칭성·차원과 상수 온도 null mode를 확인한 element candidate를 반환한다.
|
||||
|
||||
Z의 명시 행렬은 [정식화](formulation.md)에 있다. 별도의 직접 적분 검산은 면내 9점 ×
|
||||
두께 2구간 × 구간당 3점, 총 54개 위치에서 H/B를 구성해 같은 K/C를 얻는지 확인한다.
|
||||
Affine 평판은 면내 2×2 × 두께 6점, 총 24점으로도 정확하다. 5개 온도점, 6개 두께 적분
|
||||
위치, 아래의 flux trace 위치는 서로 다른 개념이다. 곡면은 면내 3×3→5×5→7×7 대조로
|
||||
적분 오차를 평가하며 reduced integration이나 hourglass 안정화항을 추가하지 않는다.
|
||||
|
||||
## 5. 열입력과 지정 온도
|
||||
|
||||
열입력의 양의 부호는 모델 안으로 유입되는 방향으로 제안한다.
|
||||
|
||||
- **절점 집중 열입력** `P`는 단위 시간당 에너지다. 선택한 node의 아랫면 또는 윗면 자유도에
|
||||
직접 더하며 면적·두께를 다시 곱하지 않는다.
|
||||
- **가장자리 열입력**은 외곽 edge의 옆면에 작용하는 면적당 열유속 `q_in`으로 제안한다.
|
||||
`Q_e=∫edge∫[-h/2,h/2] Hᵀ q_in dz ds`로 조립한다. 직선 edge 길이가 `ℓ`이면
|
||||
전체 열률은 `q_in hℓ`다. 두께 방향으로 균일해도 5개 온도점에 단순 1/5씩 배분하지 않는다.
|
||||
- **지정 온도**는 elimination으로 적용한다. 구속 온도점도 C·K·외력 full-space에서 유지하여
|
||||
반력 열률과 전체 에너지 수지를 복구한다.
|
||||
- 열입력이나 지정 온도가 없는 외부 경계에는 자연 경계조건인 단열 조건을 적용한다.
|
||||
|
||||
실제 source 문법은 지원 의미를 검증한 뒤 고정한다. 특히 DS4의 가장자리 열유속을
|
||||
`*DFLUX, S1...S4`로 받을 수 있다고 가정하지 않는다. 확인한 공개 shell library의
|
||||
element-based flux 목록은 BF·SNEG·SPOS이며, 가장자리 입력을 위한 공개 문법 대응은
|
||||
아직 확정하지 못했다. 이 항목은 계산 kernel과 별개의 I/O 결정이다.
|
||||
[공개 shell load 정의](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-r-shellgeneral.htm).
|
||||
|
||||
## 6. Transient equation과 해법
|
||||
|
||||
\[
|
||||
\mathbf C\dot{\mathbf T}+\mathbf K\mathbf T=\mathbf Q+\mathbf R.
|
||||
\]
|
||||
|
||||
Backward Euler로 다음을 구성한다.
|
||||
|
||||
\[
|
||||
\mathbf A=\mathbf C/\Delta t+\mathbf K,\qquad
|
||||
\mathbf b^{n+1}=\mathbf Q^{n+1}+\mathbf C\mathbf T^n/\Delta t.
|
||||
\]
|
||||
|
||||
free/constrained partition에서
|
||||
|
||||
\[
|
||||
\boxed{\mathbf A_{ff}\mathbf T_f^{n+1}=
|
||||
\mathbf Q_f^{n+1}+\mathbf C_{ff}\mathbf T_f^n/\Delta t+
|
||||
\mathbf C_{fc}\mathbf T_c^n/\Delta t-\mathbf A_{fc}\mathbf g^{n+1}}
|
||||
\]
|
||||
|
||||
를 푼다. 초기 구속점 온도와 step 지정 온도가 다르면 첫 증분의
|
||||
`C_fc(T_c^0−g)/Δt` 항을 빠뜨리면 안 된다. 제안은 입력 초기 상태를 `t=0`에 보존하고
|
||||
첫 양의 시점부터 step 지정 온도를 부과하는 것이다. 초기 값을 덮어쓴 다른 해석과
|
||||
에너지·reference 결과가 달라질 수 있으므로 이 시작 의미를 명시적으로 검토한다.
|
||||
|
||||
고정 물성·geometry·구속 집합·Δt에서는 A_ff를 한 번 factorize하고 매 증분 RHS만 갱신한다.
|
||||
전체 시간이 Δt로 나누어떨어지는 입력을 우선 지원하는 것으로 제안한다. 마지막 증분을
|
||||
조용히 줄이지 않는다. 시간은 누적 덧셈보다 increment index와 Δt에서 결정적으로 생성한다.
|
||||
|
||||
절연체의 K는 상수 온도 null mode를 가지지만 양의 C 때문에 A는 양정정일 수 있다.
|
||||
정적 solver처럼 “온도 구속이 없으므로 singular”로 판정하지 않는다. 일반 partition 연산은
|
||||
전체 구속 시 0×0 free solve를 건너뛰도록 검산한다. 다만 이번 공개 입력은 bottom/top만
|
||||
구속하므로 내부 3개 온도점까지 모두 구속한 사례는 CLI 지원 모델이 아닌 algebra fixture다.
|
||||
|
||||
## 7. Heat flux와 reaction heat rate 복구
|
||||
|
||||
각 완료 증분에 element scatter로 `T_e`를 모아, 동일한 B로
|
||||
|
||||
\[
|
||||
\boxed{\mathbf q^{global}=-k\mathbf B\mathbf T_e}
|
||||
\]
|
||||
|
||||
를 계산한다. 단위는 `power/area`이며 고온에서 저온 방향이 양의 흐름이다.
|
||||
local 직교 frame `R=[e_1,e_2,n]`이면 `q_local=Rᵀq_global`이고,
|
||||
앞 두 성분은 면내, 세 번째는 두께 방향 열유속이다.
|
||||
|
||||
- 기본 authoritative flux는 면내 2×2 Gauss 위치와 두께 trace
|
||||
`[-1+, -1/2, 0−, 0+, 1/2, 1−]`의 곱인 24개 위치에서 복구한다. 두께 trace는 구간
|
||||
안쪽에서 평가하는 위치/접근 방향이다. Global 성분과 local frame 또는 local 성분의
|
||||
저장 선택을 I/O에서 고정하여 좌표 의미를 보존한다.
|
||||
- 위 trace 위치에서 B를 직접 평가한다. C0 보간의 중앙면에서 두께 도함수는 한쪽 극한
|
||||
두 개일 수 있으므로 `0−`와 `0+`를 평균으로 합치지 않는다. 행렬의 적분 위치와 복구 위치는 독립이다.
|
||||
- 재료 경계와 요소 경계를 넘어 nodal averaging한 값을 공식 heat flux로 사용하지 않는다.
|
||||
- 부호를 비교할 때 아랫면의 외향 법선은 `−n`, 윗면은 `+n`임을 구별한다.
|
||||
|
||||
반력 열률은 gradient flux를 절점으로 평균하여 만들지 않고 full residual에서 계산한다.
|
||||
|
||||
\[
|
||||
\boxed{\mathbf r^{n+1}=\mathbf C(\mathbf T^{n+1}-\mathbf T^n)/\Delta t
|
||||
+\mathbf K\mathbf T^{n+1}-\mathbf Q^{n+1}}
|
||||
\]
|
||||
|
||||
free 성분은 평형 잔차, constrained 성분은 지정 온도 유지에 필요한 반력 열률이다.
|
||||
양의 반력은 모델에 추가로 공급한 열이다. transient 반력에는 열저장 항이 포함되어야 한다.
|
||||
초기 온도는 저장하지만 유한 차분 시간구간이 없는 `t=0` 반력에 계산된 값처럼 0을 쓰지 않는다.
|
||||
|
||||
## 8. 기존 코드와 연결할 책임·파일
|
||||
|
||||
현재 `Element::Recover`는 displacement를 소비하고 `DofManager`는 `kDofsPerNode=6`을
|
||||
전제로 한다. 따라서 parser에 DS4만 추가해서 완료할 수 없다. 다음은 실제 저장소 경로와
|
||||
새 파일의 제안 배치다. 세부 C++ signature는 승인된 I/O·정식화 계약을 기준으로 구현 계획에서 고정한다.
|
||||
|
||||
| 작업 경계 | 기존 수정 대상 | 신규 파일 제안과 책임 |
|
||||
| --- | --- | --- |
|
||||
| Semantic model | `include/fesa/model/domain.h`, `src/fesa/model/domain.cpp`, `include/fesa/model/model_types.h`, `include/fesa/materials/material.h` | `include/fesa/materials/isotropic_thermal_material.h`, `src/fesa/materials/isotropic_thermal_material.cpp`: 양의 k·ρ·c와 source identity |
|
||||
| Thermal element | `include/fesa/elements/element_definition.h`, `src/fesa/elements/element_factory.cpp`의 definition/runtime 생성 경계 | `include/fesa/elements/thermal_shell.h`, `src/fesa/elements/thermal_shell.cpp`: 20×20 K/C와 직접 flux 복구. 열 kernel을 구조 Element의 displacement 계약에 억지로 넣지 않음 |
|
||||
| Geometry | 기존 `model/shell_geometry`의 MITC4 definition/director 의존성 확인 | `src/fesa/elements/thermal_shell_geometry.h`, `.cpp`: Q4 metric·법선·geometry 검증. 구조 shear tying·drilling 정보 불필요 |
|
||||
| DOF | `include/fesa/elements/element.h`, `include/fesa/fem/dof_manager.h`, `src/fesa/fem/dof_manager.cpp` | Explicit layout/constraint 입력 경계를 추가하여 DofManager 안에서 구조 6개·열 5개 profile을 구별. 기존 구조 numbering/scatter 계약 보존 |
|
||||
| Thermal assembly | `SparseMatrix::FromCoo`, `ParallelFor` 재사용 | `include/fesa/assembly/thermal_assembler.h`, `src/fesa/assembly/thermal_assembler.cpp`: 동일 scatter의 K/C, stable COO reduction과 source-ordered Q |
|
||||
| Procedure/state | `analysis_model.h/.cpp`, `prepared_analysis.h/.cpp`, `src/fesa/app/fesa_application.cpp` | `include/fesa/analysis/transient_heat_procedure.h`, `src/fesa/analysis/transient_heat_procedure.cpp`, `include/fesa/analysis/thermal_analysis_state.h`: factorize/step/recover/candidate commit |
|
||||
| Abaqus mapping | `src/fesa/io/abaqus/domain_mapping_context.cpp`, `domain_builder.cpp`, `topology_mapper.cpp`, `material_property_mapper.cpp`, `step_definition_mapper.cpp` | 책임별 thermal block mapping 추가. 기존 structural validation의 제한을 온도에 그대로 적용하지 않음 |
|
||||
| Results | 기존 HDF5 atomic file·primitives와 prepared outcome dispatch | `include/fesa/results/thermal_results_writer.h`, `include/fesa/io/hdf5/thermal_hdf5_results_writer.h`, `src/fesa/io/hdf5/thermal_hdf5_results_writer.cpp`: 온도/flux/reaction/history identity와 atomic finalize |
|
||||
|
||||
Domain이 정의를 소유하고 AnalysisModel이 non-owning view를 제공하는 기존 책임을 유지한다.
|
||||
새 thermal state만 temperature/history를 소유한다. Node/Element에 equation 번호를 저장하지 않는다.
|
||||
열용량 C를 structural mass field에 저장하지 않으며 vendor API는 기존 backend 경계에 둔다.
|
||||
|
||||
## 9. 구현 순서와 각 단계의 완료 조건
|
||||
|
||||
아래 순서는 향후 구현 작업을 위한 계획이다. 현재 실행하거나 완료한 목록이 아니다.
|
||||
|
||||
| 순서 | 작업·연결 요구사항 | 추가/변경할 검증과 단계 완료 조건 |
|
||||
| --- | --- | --- |
|
||||
| 1 | 물리·I/O 선택 확정 — 001~018 | Thin-shell 접속·초기 jump·edge syntax·flux identity의 결정을 문서화. 독립 수치 검토 지적 해결 |
|
||||
| 2 | Thermal semantic model과 input — 001~013, 018 | `tests/unit/io/abaqus/thermal_domain_test.cpp`: DS4·물성·5점 단면·initial/boundary/CFLUX·single step mapping, 잘못된 DOF·불량 물성·상충 집합·미지원 옵션 진단 |
|
||||
| 3 | Element kernel — 002~007, 014 | `tests/unit/elements/thermal_shell_test.cpp`: H partition of unity, gradient sum zero, K/C 대칭성·rank, exact flat matrices, plane/thickness linear field와 flux, rotation covariance |
|
||||
| 4 | DOF·assembly·load — 006~011 | `tests/unit/fem/dof_manager_test.cpp`, `tests/unit/assembly/thermal_assembler_test.cpp`: 20 DOF scatter, 인접 node station 공유, edge 총 열률, source 순서, 병렬/직렬 동등성과 structural 회귀 |
|
||||
| 5 | Transient procedure — 008~013, 018 | `tests/unit/analysis/transient_heat_procedure_test.cpp`: 두 증분 직접 계산, C_fc 초기 항, no-Dirichlet, generic all-constrained algebra fixture, factorization 재사용, 후보 실패 보존 |
|
||||
| 6 | Recovery·HDF5·CLI — 014~015 | `tests/unit/io/hdf5/thermal_hdf5_results_writer_test.cpp`, `tests/integration/app/thermal_application_test.cpp`: 모든 온도점·증분·flux 위치·reaction의 round trip, 초기 반력 미정의, 파일 finalize 실패 시 이전 결과 보존 |
|
||||
| 7 | Physics·reference — 016~017 | `tests/integration/analysis/thermal_physics_test.cpp`, `tests/reference/thermal_reference_comparison_test.cpp`, `tests/reference/thermal_reference_cases_test.cpp`: 아래 사례와 기존 CSV 비교·identity 음성 검사 |
|
||||
| 8 | 통합 확인 | `src/fesa/CMakeLists.txt`, `tests/CMakeLists.txt` 등록 후 MSVC x64 Debug 전체 build/CTest와 필수 reference 비교. 신규 warning 없음 |
|
||||
|
||||
각 행동 변경은 먼저 기대 결과를 고정하는 검사를 작성하고 실패를 확인한 뒤 구현한다.
|
||||
기존 coverage가 충분한 지원 코드 정리에는 구현 구조만 따라 하는 테스트를 추가하지 않는다.
|
||||
독립 수치 검토와 실제 결과의 물리 검토를 구현 담당자의 자기 승인으로 대체하지 않는다.
|
||||
|
||||
## 10. 방법론을 반증할 검증 사례
|
||||
|
||||
| 사례 | 기대되는 관찰과 오류 검출 목적 |
|
||||
| --- | --- |
|
||||
| 완전 단열·균일 초기 온도 | 모든 온도점이 시간에 따라 불변, flux=0, 열에너지 불변. K의 상수 null mode 검증 |
|
||||
| 평판의 면내 선형 온도 | Kernel에서 `q=−k∇T`를 정확히 재현. Global 회전 시 scalar T 불변·vector q 회전 |
|
||||
| 두께 방향 선형 온도 | 하·상면 온도차의 정상 한계에서 `q_n=−k(T_top−T_bottom)/h`, 두 면 반력 합 0 |
|
||||
| 두께 전체 단열의 면내 Fourier mode | 초기 온도가 두께 방향 균일한 허용 입력으로 analytical decay와 비교. BE 시간 1차 수렴과 면내 mesh 수렴 분리 |
|
||||
| 한쪽 면 온도 step, 반대 면 단열 slab | 허용된 초기 조건에서 1D transient analytical series와 비교. 5점 두께 근사의 한계와 초기 jump 처리 검증 |
|
||||
| 두 재료·두 두께 strip | 단면 전체 end 온도를 구속한 assembly fixture에서 총 열저항 `Σ L/(k h w)` 확인. 내부 station 구속은 검산 전용이며 CLI 기능이 아님. 공개 bottom/top 경계 사례는 경계층을 포함한 별도 oracle과 비교 |
|
||||
| Edge flux와 집중 열입력 | 입력한 총 열률과 `Δ(1ᵀCT)/Δt` 및 reaction 합의 일치. 단위와 면적/두께 중복 곱 검출 |
|
||||
| 작은 열망의 직접 해 | `A_ff`, RHS, 첫 두 증분, full residual을 독립 hand calculation과 비교. 전체 구속 특수 조건은 generic partition fixture로 한정 |
|
||||
| 실제 reference | 원본 `.inp`와 t37의 NT11 729행 비교. 누락/추가/중복/nonfinite·instance ambiguity를 tolerance 전에 거부 |
|
||||
|
||||
전체 열에너지는 `E=1ᵀCT`로 두고 기준 온도의 상수 차이가 에너지 변화에 영향을 주지 않음을
|
||||
확인한다. 검증할 discrete balance는
|
||||
`E_(n+1)−E_n = Δt[1ᵀQ + Σ constrained reaction]`이며 free residual의 영향도 보고한다.
|
||||
점별 Fourier flux와 FE 반력은 다른 observable이므로 각각의 검증을 수행한다.
|
||||
|
||||
시간 수렴은 공간 오차를 충분히 낮추고 Δt를 줄이며, 면내 수렴은 충분히 작은 Δt에서 mesh를
|
||||
세분화한다. 제품의 두께 온도점 5개가 고정되므로 면내 mesh를 줄이는 것만으로 두께 오차까지
|
||||
0으로 간다고 주장하지 않는다. 세부 norm·기대 order·내부 판정 기준은 독립 검토가 정한다.
|
||||
|
||||
## 11. 검증 실행과 완료 판단
|
||||
|
||||
구현 시 MSVC x64 developer 환경과 GoogleTest/MKL/TBB/HDF5 경로를 준비하고 다음을 실행한다.
|
||||
|
||||
```powershell
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
cmake --build --preset windows-msvc-ninja-debug
|
||||
ctest --preset windows-msvc-ninja-debug --show-only=json-v1
|
||||
ctest --preset windows-msvc-ninja-debug --output-on-failure
|
||||
```
|
||||
|
||||
선택된 `.harness/config.json`이 동일 실행을 구성하면 `python scripts/execute.py`를 사용할 수 있다.
|
||||
현재 계획 작성에서는 이 개인 설정 파일을 확인하지 못했으므로 runner의 preset 선택을 가정하지 않는다.
|
||||
Python Harness를 수정하지 않는 이 기능에 Harness Python suite를 형식적으로 추가 실행하지 않는다.
|
||||
|
||||
Reference 원본은 현재 별도 dev checkout에서 읽었으며 현 worktree에는 없다. 실행 단계에서
|
||||
read-only reference 위치와 결과 output 경로를 명시적으로 연결한다. 파일을 찾지 못하면
|
||||
comparison을 통과나 coverage 완료로 기록하지 않는다. reference 재생성·이름 변경·보정은 포함하지 않는다.
|
||||
|
||||
완료는 solver 실행 성공뿐 아니라 모든 필수 결과·증분 저장, 에너지 수지·해석해·수렴,
|
||||
기존 구조해석 회귀, 공통 tolerance의 NT11 비교와 필요한 독립 검토 evidence가 있어야 한다.
|
||||
|
||||
현재 문서 검토에서는 독립 reviewer가 Z 계수, 평판 20 DOF의 C 양정치/K rank 19,
|
||||
첫 두 증분의 C_fc 항·반력·에너지 수지를 정확 유리수 연산으로 확인했다.
|
||||
구현 코드·FESA 결과의 정확도나 곡면·접합부 지원 한계가 검증된 것은 아니다.
|
||||
|
||||
## 12. 구현 전에 검토할 제안과 한계
|
||||
|
||||
1. Q4×두 구간 P2, consistent C, 면내 3×3/두께 exact 적분, Backward Euler의 선택
|
||||
2. Thin-shell product-domain과 normalized thickness station 접속; 실제 접합부/곡률 두께 효과 한계
|
||||
3. 입력 초기 상태를 보존하는 첫 증분 경계 jump와 t=0 반력 미정의
|
||||
4. 가장자리 열입력의 면적당 단위와 승인 가능한 외부 입력 문법
|
||||
5. 모든 온도점 온도·3성분 flux·반력의 위치/좌표계와 HDF5 저장 계약
|
||||
6. 고정 Δt로 나누어떨어지는 종료 시간만 우선 지원하는 제한
|
||||
|
||||
이 항목은 사용자 인터뷰에서 이미 승인한 범위와 새 수치·I/O 제안을 구별하기 위한 것이다.
|
||||
현재 문서는 상세 방법론을 검토할 수 있는 계획안이며, 모든 구현 계약이 확정되었다는 선언이 아니다.
|
||||
|
||||
Reference에는 step 전 `*Boundary / Set-10, 11, 11`과 step 내부
|
||||
`Set-10, 11, 11, 1000.`이 함께 있다. Step 전 경계를 지우거나 무시하지 않고 model/history
|
||||
정의로 구분하여 읽는다. 생략 초기 온도·생략 boundary 값의 default, step에서 같은 대상에
|
||||
새 값을 적용하는 의미를 원문과 대조해야 최초 C_fc 항과 reference 비교를 확정할 수 있다.
|
||||
|
||||
CSV 정적 통계의 NT11 최솟값은 `−15.5742216`, 최댓값은 `1000`이다. 공통 scale `S=1000`,
|
||||
near-zero band `B=10`에서 위 음수는 near-zero 밖이므로 상대오차 검사 대상이다.
|
||||
이를 0으로 보정하거나 단순 roundoff로 설명하지 않는다. 초기 조건과 열용량·보간 선택에
|
||||
따른 undershoot의 원인을 조사하고 analytical accuracy와 reference 일치를 각각 평가한다.
|
||||
@@ -0,0 +1,332 @@
|
||||
# Shell 과도 열전달 정식화 제안
|
||||
|
||||
- 상태: **Proposed / 사용자 미승인 / 독립 numerical review 별도 보고서 참조**. 구현 실행 지시가 아니다.
|
||||
- 담당 범위: `FEM-REQ-SHELL-THERMAL-001`–`018`의 수식·물리 의미와 검증 함의.
|
||||
- 기준: [Feature PRD](PRD.md), [Feature ADR](ADR.md), [프로젝트 지침](../../AGENTS.md),
|
||||
[프로젝트 PRD](../PRD.md), [공통 ADR](../ADR.md#adr-028), [ARCHITECTURE](../ARCHITECTURE.md).
|
||||
- 아래 수식은 FESA의 제안이다. Abaqus 내부 요소·적분·열용량·결과 생성과 동등하다는 주장이 아니다.
|
||||
|
||||
## 1. 적용 가정과 차원
|
||||
|
||||
고정된 3차원 midsurface의 4절점 Q4 요소에 두께 방향 온도점 5개를 둔다.
|
||||
요소마다 두께 `h > 0`, 등방성 열전도율 `k > 0`, 밀도 `ρ > 0`, 비열 `c > 0`가
|
||||
상수이며 단면 전체는 같은 재료다. 서로 다른 요소에는 다른 값을 배정할 수 있다.
|
||||
변형·대류·복사·내부 발열·적층·면적 분포 표면 열유속은 [PRD 제외 범위](PRD.md#제외-범위)를 따른다.
|
||||
|
||||
일관된 입력 단위계를 사용한다. SI 예시는 `h [m]`, `T [K]`, `t [s]`,
|
||||
`k [W/(m·K)]`, `ρ [kg/m³]`, `c [J/(kg·K)]`, 열유속 `q [W/m²]`이다.
|
||||
상수 물성에서는 온도 차에 같은 척도를 쓰는 섭씨도 가능하다. 숫자로 단위계를 추정하지 않는다.
|
||||
온도 기준 이동에 불변인 에너지 증분을 사용하며 절대 내부에너지의 영점을 추정하지 않는다.
|
||||
|
||||
기하학적으로 얇은 shell의 product-domain 근사로 면내·두께 전도를 모두 유지한다.
|
||||
여기서 ‘얇음’은 **두께 방향 등온 가정이 아니다**. 정적인 geometry이므로 구조 회전 DOF,
|
||||
기하 비선형 tangent, 재료 history update는 없다. 유일한 진화 state는 온도다.
|
||||
|
||||
## 2. Geometry, 방향과 접속의 의미
|
||||
|
||||
자연좌표 `(ξ,η) ∈ [-1,1]²`, 절점 순서 `(-1,-1),(1,-1),(1,1),(-1,1)`를 사용한다.
|
||||
절점 좌표를 `x_i`, midsurface를 `r=Σ_i N_i x_i`로 두고 다음을 계산한다.
|
||||
|
||||
\[
|
||||
a_1=r_{,\xi},\quad a_2=r_{,\eta},\quad
|
||||
g_{\alpha\beta}=a_\alpha\cdot a_\beta,\quad
|
||||
J_s=\|a_1\times a_2\|=\sqrt{\det g},\quad
|
||||
n=(a_1\times a_2)/J_s,\quad
|
||||
a^\alpha=\sum_\beta(g^{-1})_{\alpha\beta}a_\beta.
|
||||
\]
|
||||
|
||||
`α,β=1,2`; `a^α`는 reciprocal tangent이다. 실제 평가점마다 metric을 계산하며 warped
|
||||
Q4를 요소 중심의 평면에 투영하지 않는다. 출력 직교축은 `e1=a1/|a1|`, `e2=n×e1`, `e3=n`이다.
|
||||
두께좌표 `ζ ∈ [-1,1]`, `z=hζ/2`; 음의 normal 쪽이 bottom, 양의 쪽이 top이다.
|
||||
표시 위치는 `x=r+zn`으로 정의하되, 연산자는 아래 근사를 쓴다.
|
||||
|
||||
\[
|
||||
\nabla_* T=a^1T_{,\xi}+a^2T_{,\eta}+n\frac{2}{h}T_{,\zeta},\qquad
|
||||
dV_* = J_s\frac h2\,d\xi\,d\eta\,d\zeta.
|
||||
\]
|
||||
|
||||
정확한 offset-volume의 접선 `aα+z n_,α`, 두께별 metric·면적 변화는 생략한다.
|
||||
따라서 `h |κ1|`, `h |κ2|`가 작고 열장이 변하는 면내 길이에 비해 두께가 작은 영역을
|
||||
대상으로 한다. 적분 차수 증가로 이 모델링 오차가 없어지지는 않는다. 곡률의 정량 허용치,
|
||||
왜곡 허용치와 validation margin은 아직 미정이다. 구조 shell의 두께 비율 기준을 전용하지 않는다.
|
||||
곡률을 반영하는 별도 shell 열모델이 있다는 점은 [COMSOL의 곡면 열전달 예제](https://www.comsol.com/model/heat-transfer-in-curved-layered-shells-104241)로 확인할 수 있다.
|
||||
|
||||
Geometry의 필수 조건은 유한 좌표, 서로 다른 4절점, `J_s>0`, 비특이 metric, 자기 교차 없는
|
||||
유효 patch와 일관된 orientable connectivity이다. 적분점 검사만으로 전체 patch 유효성을
|
||||
증명하지 않는다. 검사 위치·scale-aware degeneracy 기준·비다양체 허용 범위는 I/O와
|
||||
numerical review가 확정해야 하며 작은 양수 Jacobian을 clamp하지 않는다.
|
||||
|
||||
**접속 제안:** 인접 요소는 같은 source node의 같은 `ζ` 온도 DOF를 공유한다.
|
||||
매끈한 면에서 이는 온도 연속성과 약형 열률 평형을 준다. 접힌 판에서는 요소별 normal을
|
||||
유지하고 공유 edge의 `ζ`별 온도만 같게 묶는 이상적 무저항·무용량 접합이다.
|
||||
서로 다른 두께에서는 같은 normalized `ζ`를 연결하므로 실제 `z` 좌표가 같다는 뜻이 아니다.
|
||||
실제 step 단차의 노출면, 유한 접합부 부피, 국소 spreading resistance는 해상하지 않는다.
|
||||
이 모델은 사용자 결정이 필요한 물리 이상화다. 동의 없이 실제 3D 접속을 지원한다고 표시하지 않는다.
|
||||
공유 edge의 요소 순서는 서로 반대여야 하고 bottom/top의 연속된 의미를 유지해야 한다.
|
||||
온도는 scalar이므로 normal 사이의 회전행렬을 곱하지 않는다. 법선 반전은 해당 두께 station
|
||||
`a ↔ 6-a`와 면 하중/경계조건을 함께 바꿔야 같은 물리 문제가 된다.
|
||||
|
||||
## 3. 20 DOF와 온도 보간
|
||||
|
||||
절점별 온도점은 `ζ_a=(-1,-1/2,0,1/2,1)`, `a=1,…,5`이다.
|
||||
로컬 순서는 `p=5(i-1)+a`, 즉 node-major 20 DOF다. 외부 DOF는 `10+a`로 대응한다.
|
||||
따라서 `11=bottom`, `13=midsurface`, `15=top`이다. 기하 절점 위치와 DOF11의 물리 위치를
|
||||
혼동하지 않는다. 이 외부 위치 의미는 [Abaqus Heat Transfer Shell Elements](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-shellelem.htm)의 공개 규약을 따른다.
|
||||
|
||||
면내 shape와 미분은 각 절점의 부호 `(ξ_i,η_i)`를 사용한다.
|
||||
|
||||
\[
|
||||
N_i=\tfrac14(1+\xi_i\xi)(1+\eta_i\eta),\quad
|
||||
N_{i,\xi}=\tfrac14\xi_i(1+\eta_i\eta),\quad
|
||||
N_{i,\eta}=\tfrac14\eta_i(1+\xi_i\xi).
|
||||
\]
|
||||
|
||||
두께는 `I−=[-1,0]`, `I+=[0,1]`의 **두 C0 quadratic 구간**으로 제안한다.
|
||||
단일 quartic보다 각 구간의 저차 보간·국소 미분을 명료하게 유지하며, 중간 온도 1개를 공유한다.
|
||||
구간 좌표는 `s=2ζ+1` 또는 `s=2ζ−1`; 두 경우 `s∈[-1,1]`, `ds/dζ=2`이다.
|
||||
|
||||
\[
|
||||
\ell_1(s)=\tfrac12s(s-1),\quad \ell_2(s)=1-s^2,\quad
|
||||
\ell_3(s)=\tfrac12s(s+1),\qquad
|
||||
\ell'_1=s-\tfrac12,\quad\ell'_2=-2s,\quad\ell'_3=s+\tfrac12.
|
||||
\]
|
||||
|
||||
`I−`에서는 `(L1,L2,L3)=(ℓ1,ℓ2,ℓ3)`, `L4=L5=0`;
|
||||
`I+`에서는 `(L3,L4,L5)=(ℓ1,ℓ2,ℓ3)`, `L1=L2=0`이다.
|
||||
활성 함수의 `L_,ζ=2ℓ'`; `ζ=0`의 함수값은 유일하지만 미분은 좌·우로 구분한다.
|
||||
|
||||
\[
|
||||
H_{ia}=N_iL_a,\qquad T_h=\sum_{i,a}H_{ia}T_{ia}=\mathbf H\mathbf T_e,\qquad
|
||||
B_{ia}=L_a(a^1N_{i,\xi}+a^2N_{i,\eta})+n\frac2hN_iL_{a,\zeta}.
|
||||
\]
|
||||
|
||||
`H`는 `1×20`, `B`는 global Cartesian `3×20`, `∇_*T_h=B T_e`다.
|
||||
`ΣH=1`, `ΣB=0`; Kronecker interpolation과 내부 station 온도 연속성을 확인한다.
|
||||
두 구간은 수치 보간 구간이며 물성 layer나 물리 계면이 아니다.
|
||||
|
||||
## 4. 지배식, 약형과 20×20 행렬
|
||||
|
||||
Fourier 법칙 `q=−k∇_*T`, 저장식 `ρc Tdot + div_* q=0`를 사용한다.
|
||||
외향 열유속 `q·ν`와 반대인 `q_in=−q·ν`를 양의 입력으로 정의한다.
|
||||
자유 test function `v`에 대해 product-domain 약형은 다음과 같다.
|
||||
|
||||
\[
|
||||
\int_{V_*}\rho c\,v\dot T\,dV_*+
|
||||
\int_{V_*}k\nabla_*v\cdot\nabla_*T\,dV_*
|
||||
=\int_{\Gamma_{\rm edge,*}}v q_{\rm in}\,dA_*+\sum_j v_jP_j.
|
||||
\]
|
||||
|
||||
지정 온도 외의 하중 없는 경계는 자연 단열이다. 집중 입력 `P_j`는 승인된 bottom/top
|
||||
절점의 이산 heat rate이며 연속체 point-source 근방의 유한 heat flux를 보장하지 않는다.
|
||||
|
||||
\[
|
||||
\mathbf C_e=\int\rho c\,\mathbf H^T\mathbf H\,J_s\frac h2\,d\xi d\eta d\zeta,
|
||||
\qquad
|
||||
\mathbf K_e=\int k\,\mathbf B^T\mathbf B\,J_s\frac h2\,d\xi d\eta d\zeta.
|
||||
\]
|
||||
|
||||
`C_e [J/K]`는 consistent 열용량, `K_e [W/K]`는 열전도 행렬이다.
|
||||
`C_e` 대칭 양정치, `K_e` 대칭 양반정치와 유일한 요소 상수온도 null mode를 기대한다.
|
||||
Reduced integration, hourglass stiffness, capacity lumping은 이 제안에 넣지 않는다.
|
||||
|
||||
명시적인 component식과 분리 계산에 필요한 작은 행렬은 다음과 같다.
|
||||
|
||||
\[
|
||||
M_{ij}=\int_{[-1,1]^2}N_iN_jJ_s\,d\xi d\eta,\quad
|
||||
S_{ij}=\int_{[-1,1]^2}\sum_{\alpha\beta}N_{i,\alpha}g^{\alpha\beta}N_{j,\beta}J_s\,d\xi d\eta,
|
||||
\quad Z^0_{ab}=\int_{-1}^1L_aL_b\,d\zeta,\quad Z^1_{ab}=\int_{-1}^1L_{a,\zeta}L_{b,\zeta}\,d\zeta,
|
||||
\]
|
||||
\[
|
||||
(C_e)_{ia,jb}=\rho c\frac h2M_{ij}Z^0_{ab},\qquad
|
||||
(K_e)_{ia,jb}=k\left(\frac h2S_{ij}Z^0_{ab}+\frac2hM_{ij}Z^1_{ab}\right).
|
||||
\]
|
||||
|
||||
`a^α·n=0`이므로 면내/두께 교차항은 없다. 각 길이 1인 `ζ` 구간에서
|
||||
다음 `3×3` 행렬을 `(1,2,3)`와 `(3,4,5)`에 각각 더하면 `Z^0,Z^1`을 얻는다.
|
||||
|
||||
\[
|
||||
Z^0_{\rm seg}=\frac1{30}\begin{bmatrix}4&2&-1\\2&16&2\\-1&2&4\end{bmatrix},\qquad
|
||||
Z^1_{\rm seg}=\frac1{3}\begin{bmatrix}7&-8&1\\-8&16&-8\\1&-8&7\end{bmatrix}.
|
||||
\]
|
||||
|
||||
따라서 `C=ρc(h/2)(M⊗Z0)`, `K=k[(h/2)(S⊗Z0)+(2/h)(M⊗Z1)]`이다.
|
||||
이는 해당 node-major 순서와 일정 두께·물성·product metric에서만 적용한다.
|
||||
요소/DOF source identity와 stable scatter를 보존하여 full `C,K,F`를 조립한다.
|
||||
|
||||
## 5. 적분과 geometry 오차의 분리
|
||||
|
||||
Affine 평판(직사각형·평행사변형)의 일정 metric에서는 면내 `2×2` Gauss가 `M,S`에 정확하다.
|
||||
두께 각 구간에서 `C`와 면내 전도는 4차 다항식이므로 **3점 Gauss**가 필요하다.
|
||||
두께 전도는 2차이므로 2점으로 정확하지만 통일된 3점을 권장한다.
|
||||
이에 따라 affine의 직접 적분은 `2×2×(2 segments×3)=24`점으로 정확하다.
|
||||
일반적인 평면 왜곡 Q4의 `S`는 역 Jacobian 때문에 다항식이 아니므로 이 exactness는 적용되지 않는다.
|
||||
|
||||
제안 기본은 모든 요소의 면내 `3×3` Gauss와 위 exact `Z`의 분리 계산이다.
|
||||
직접 계산하면 `3×3×2×3=54`점이며 같은 행렬이어야 한다. 3점 규칙은
|
||||
`s=(-√(3/5),0,√(3/5))`, `w=(5/9,8/9,5/9)`이고 각 두께 구간에서 `dζ=ds/2`다.
|
||||
표면의 warped/curved metric에는 유한 고정 차수의 exactness를 주장하지 않는다.
|
||||
`3×3 → 5×5 → 7×7` 적분 수렴, mesh 수렴, thin-shell 모델 오차를 별도 확인한다.
|
||||
지원 geometry 범위에서 기본 차수가 불충분하면 검토를 통해 차수/범위를 고정하고 구현한다.
|
||||
실행마다 허용오차에 맞춰 임의 adaptive quadrature를 선택하는 계약은 아니다.
|
||||
|
||||
## 6. 가장자리·절점 열입력
|
||||
|
||||
Edge 순서는 `1:(1,2), 2:(2,3), 3:(3,4), 4:(4,1)`로 제안한다.
|
||||
면내 자연좌표 edge curve를 `r_edge(u)`, `u∈[-1,1]`, `J_l=|dr_edge/du|`로 둔다.
|
||||
두께 전체 균일 입력 `q_in [W/m²]`의 일관 하중은 다음과 같다.
|
||||
|
||||
\[
|
||||
(F_e^{\rm edge})_{ia}=\int_{-1}^1\int_{-1}^1
|
||||
N_i(\xi(u),\eta(u))L_a(\zeta)q_{\rm in}J_l\frac h2\,d\zeta du.
|
||||
\]
|
||||
|
||||
Q4의 직선 edge, 일정 입력·두께에는 총 입력 `q_in h L_edge`가 정확히 보존된다.
|
||||
각 endpoint의 5성분은 `q_in h L_edge (1,4,2,4,1)/24`이며 나머지 두 절점은 0이다.
|
||||
이는 `∫L dζ=(1,4,2,4,1)/6`와 edge당 `∫N_i dl=L_edge/2`에서 나온다.
|
||||
Edge 2점, 각 두께 구간 2점으로 이 하중은 정확하다. 내부 온도점에도 일관 하중이 생기는
|
||||
것은 허용된 edge 입력의 결과이며, 내부 온도점 직접 집중 입력을 지원한다는 뜻은 아니다.
|
||||
외부 syntax가 선열률 `λ [W/m]`를 쓰기로 결정되면 `q_in=λ/h`로 해석해야 한다.
|
||||
두 단위를 혼용하지 않으며 외부 입력 단위·keyword는 I/O owner가 확정한다.
|
||||
|
||||
Bottom/top 집중 열입력 `P [W]`는 지정 source node의 `a=1/5`에 그대로 더한다.
|
||||
`h`, 면적 또는 적분 weight를 추가하지 않는다. 지정 온도와 같은 DOF의 입력도 full `F`에
|
||||
남겨 반력 계산에 반영한다. 중복 application의 가산/충돌 의미는 I/O 계약을 따른다.
|
||||
|
||||
## 7. Backward Euler, 지정 온도와 최초 증분
|
||||
|
||||
고정 `Δt>0`에서 backward Euler를 제안한다. `t_n=nΔt`, `A=C/Δt+K`이면
|
||||
|
||||
\[
|
||||
C\frac{T^{n+1}-T^n}{\Delta t}+KT^{n+1}=F^{n+1}+R^{n+1},\qquad
|
||||
A_{ff}T_f^{n+1}=F_f^{n+1}+\frac{C_{ff}}{\Delta t}T_f^n
|
||||
+\frac{C_{fc}}{\Delta t}T_c^n-A_{fc}g^{n+1}.
|
||||
\]
|
||||
|
||||
여기서 `f/c`는 free/constrained, `T_c^{n+1}=g^{n+1}`이다. 동등한 RHS 표현은
|
||||
`F_f−K_fc g^{n+1}+(C_ff/Δt)T_f^n+(C_fc/Δt)(T_c^n−g^{n+1})`다.
|
||||
**이전 constrained 온도 항은 첫 증분에서도 생략하지 않는다.** 이후 일정 `g`에서는
|
||||
마지막 항이 사라진다. 잔차 tangent는 정확히 `A`; Newton 반복은 필요 없다.
|
||||
Backward Euler의 mass/diffusion 행렬 구성은 [MFEM Example 16 원문](https://raw.githubusercontent.com/mfem/mfem/master/examples/ex16.cpp)에서도 확인할 수 있으며, 위 제약·초기화 정책은 별도의 FESA 제안이다.
|
||||
|
||||
`C>0`이므로 단열·무구속 모델도 transient `A_ff`는 양정치다. 정상 전도 `K`의 상수온도
|
||||
null mode를 과도 해석의 singular error로 해석하지 않는다. 일반 partition 대수에서 모든
|
||||
DOF가 constrained이면 `0×0` free solve를 건너뛰고 prescribed state와 full reaction을 계산한다.
|
||||
이 경우는 generic partition fixture로만 검증한다. 이번 공개 입력은 bottom/top만 구속할 수
|
||||
있으므로 내부 3개 station까지 모두 구속하는 열 CLI 모델은 허용되지 않는다.
|
||||
고정 geometry·물성·DOF 집합·Δt에서는 `A_ff`를 최초 한 번 factorize할 수 있다.
|
||||
전체 시간이 `Δt`의 정수 배가 아니면 입력을 거부하는 방안을 권장한다. 짧은 마지막 증분은
|
||||
고정 `Δt`와 factorization 재사용 의미를 바꾸므로 자동 도입하지 않는다. 시간 비교의 수치
|
||||
판정과 종료 규칙은 사용자 검토와 I/O 계약에서 확정한다.
|
||||
|
||||
**초기 불일치 제안:** 입력 초기 온도를 5점에 복제한 전체 `T^0_raw`를 보존하며,
|
||||
시간 적분의 `T^0=T^0_raw`로 사용한다. `t=0`에는 지정 온도로 덮어쓰지 않는다.
|
||||
지정 온도는 첫 완료 증분 `t_1`부터 정확히 적용한다. 입력 초기값과 `g`가 다른 경우
|
||||
그 차이는 첫 증분에 들어가므로 `C_fc(T_c^0−g)/Δt`와 저장에너지가 모두 살아 있다.
|
||||
이는 초기 불연속을 첫 유한 증분에서 처리하는 이산 정책으로, 실제 순간 impulse의
|
||||
해상이나 `t=0+` 경계 만족을 주장하지 않는다. `t=0` 반력 열률은 시간 차분이 없어
|
||||
미정의다. 0으로 만들어 ‘계산된 반력’으로 저장하지 않는다.
|
||||
대안인 `t=0` 즉시 projection은 별도 에너지 jump `1ᵀC(T^0_projected−T^0_raw)`와
|
||||
그 보존/보고 정책이 필요하다. 이 선택은 결과를 바꾸므로 사용자 결정 후 하나만 구현한다.
|
||||
생략된 초기 온도의 값은 이 문서에서 결정하지 않는다. Reference는 이 default에 민감하다.
|
||||
|
||||
각 증분은 solve → full 온도 복구 → residual/flux/유한성·수지 확인 → candidate commit
|
||||
순서로 처리한다. 실패 candidate가 이전 완료 state나 최종 HDF5를 대체하지 않는다.
|
||||
|
||||
## 8. 반력 열률, 에너지와 안정성
|
||||
|
||||
반력은 하중 제거 전 full residual에서 구한다.
|
||||
|
||||
\[
|
||||
r^{n+1}=C(T^{n+1}-T^n)/\Delta t+KT^{n+1}-F^{n+1},\quad
|
||||
R_c=r_c,\quad r_f\approx0,\qquad
|
||||
U(T)=\mathbf1^TC(T-T_{\rm ref}\mathbf1).
|
||||
\]
|
||||
|
||||
양의 `R_c [W]`는 지정 온도를 유지하려고 모델 **안으로** 공급하는 열률이다.
|
||||
열원을 외부가 받는 부호는 반대다. 외부 reference의 부호는 별도 확인해야 한다.
|
||||
`K1=0`과 대칭성에 의해 증분의 전역 수지는
|
||||
|
||||
\[
|
||||
U^{n+1}-U^n=\Delta t\left(\mathbf1^TF^{n+1}+\mathbf1_c^TR_c^{n+1}
|
||||
+\mathbf1_f^Tr_f^{n+1}\right)
|
||||
\]
|
||||
|
||||
이다. Free residual을 버리지 않고 수지 defect와 함께 확인한다. 정상상태에서는 총 입력과
|
||||
반력 합이 0이다. 단열·무입력·무구속에서는 `U`가 보존되고 다음 이산 소산식이 성립한다.
|
||||
|
||||
\[
|
||||
\tfrac12\big(\|T^{n+1}\|_C^2-\|T^n\|_C^2+\|T^{n+1}-T^n\|_C^2\big)
|
||||
+\Delta t\|T^{n+1}\|_K^2=0.
|
||||
\]
|
||||
|
||||
이 식의 이차량은 안정성 척도이며 실제 열에너지 `U`와 다르다.
|
||||
Backward Euler는 이 의미에서 안정하지만 온도 positivity·maximum principle을 보장하지 않는다.
|
||||
Consistent `C`, Q2 shape의 음의 구간과 일반 mesh의 `K`는 초기에 overshoot/undershoot를
|
||||
만들 수 있다. 작은 `Δt`만으로 공간 이산의 단조성이 보장되지 않는다. Clamp, 임의 lumping,
|
||||
인공 확산 또는 reference tolerance 완화로 이를 숨기지 않는다.
|
||||
|
||||
## 9. Heat flux 계산과 recovery identity
|
||||
|
||||
완료된 온도 `T_e^{n+1}`로 각 지정 평가점에서 다음을 직접 계산한다.
|
||||
|
||||
\[
|
||||
q^{\rm global}=-kBT_e,\qquad
|
||||
q^{\rm local}=\begin{bmatrix}e_1^T\\e_2^T\\n^T\end{bmatrix}q^{\rm global},\qquad
|
||||
q_3=-\frac{2k}{h}\sum_{ia}N_iL_{a,\zeta}T_{ia}.
|
||||
\]
|
||||
|
||||
Global 성분은 Cartesian `qx,qy,qz`, local은 `q1,q2,q3`이며 모두 열유속 `[W/m²]`다.
|
||||
두께 적분 열류 `[W/m]`, 절점 입력 `[W]`, 반력 `[W]`와 구분한다.
|
||||
예를 들어 `T=T_bottom+(ζ+1)(T_top−T_bottom)/2`면
|
||||
`q3=−k(T_top−T_bottom)/h`; top이 뜨거우면 `q3<0`이다.
|
||||
Bottom 외향 normal은 `−n`, top은 `+n`이므로 외향 성분은 각각 `−q3`, `+q3`다.
|
||||
|
||||
결정적인 필수 recovery 위치 제안은 면내 4점
|
||||
`(-g,-g),(g,-g),(g,g),(-g,g)`, `g=1/√3`와 두께 trace
|
||||
`(-1,+),(-1/2,interior),(0,−),(0,+),(1/2,interior),(1,−)`의 곱인 **24점/요소**다.
|
||||
두께 trace의 부호는 어느 구간 내부에서 접근하는지를 뜻한다. Integration 점과 recovery
|
||||
점은 독립 계약이다. `ζ=0`의 온도는 같아도 `q3(0−),q3(0+)`는 서로 다를 수 있으며
|
||||
이 둘을 평균하여 원자료를 잃지 않는다. 연속해의 재료 계면을 뜻하는 것도 아니다.
|
||||
|
||||
Row는 최소 `(instance, element label, in-plane point, thickness station, trace side, time)`와
|
||||
component/좌표계로 구별해야 한다. Global/local 중 영속 저장 형식은 I/O owner가 결정한다.
|
||||
요소 사이 edge의 flux도 요소별 한쪽 값을 유지한다. 서로 다른 `k`, normal, thickness에서
|
||||
벡터를 무조건 같게 만들지 않는다. 접합부의 보존량은 약형으로 조립되는 열률이다.
|
||||
`−kBT` raw flux의 경계 적분은 이산 반력과 일반적으로 정확히 같지 않으며 반력을 대신하지 않는다.
|
||||
절점 외삽, nodal averaging, flux smoothing은 이 제안의 필수 recovery가 아니다.
|
||||
|
||||
## 10. 검증 함의와 미결정 사항
|
||||
|
||||
다음은 실행 결과가 아닌 검증 설계다. 수치 기준은 독립 reviewer가 정하며
|
||||
외부 비교는 [공통 TOLERANCE](../TOLERANCE.md)를 그대로 따른다.
|
||||
|
||||
| 검증 | 관찰할 내용 |
|
||||
| --- | --- |
|
||||
| Shape/행렬 | Nodal interpolation, partition of unity, `ΣB=0`, explicit Z와 직접 적분 일치, `C` SPD, `K` PSD/rank 19, symmetry |
|
||||
| 평판 patch·회전 | Constant/면내 선형/두께 선형 온도에서 gradient·flux, 회전 시 T 불변과 q 회전, 법선 반전+station 재매핑 |
|
||||
| 열입력 | Edge 총률 `q_in hL`·5점 weight, bottom/top 집중 입력, prescribed DOF와 겹친 입력의 반력 |
|
||||
| 과도·초기 | 단열 균일온도 보존, 초기 불일치 첫 RHS, 공개 입력의 no-constrained, 에너지 수지·BE 소산; all-constrained는 generic partition fixture만 사용 |
|
||||
| 면내 해석해 | 단열 직사각판 `T=T0+A cos(πx/L)exp[-α(π/L)²t]`, `α=k/(ρc)`; 면내 초기값은 5점 동일 |
|
||||
| 두께 해석해 | 균일 초기온도 slab의 두 표면 온도 step에 대한 1D Fourier-series 해와 비교; 초기 jump와 첫 step 분리 |
|
||||
| 재료·접속 | 두 물성/두께 strip의 직렬 전도는 아래 kernel/assembly oracle 범위로 구분; folded 등온/열률 수지와 junction 이상화의 별도 3D 한계 |
|
||||
| 수렴·특이점 | `Δt` 1차 수렴, 면내 mesh/적분 차수 수렴, 집중 입력 근방 flux의 mesh 의존성과 곡률 오차 |
|
||||
| Reference | 기존 Step-1, `t=37`, NT11 bottom만 source identity로 비교; initial default·첫 증분·C 처리 차이 조사 |
|
||||
|
||||
두 물성/두께 strip의 `R_th=Σ_e L_e/(k_e h_e w_e)` 정확해 검증은 양 끝 단면의 모든
|
||||
station에 온도를 지정하는 kernel/assembly oracle이다. 내부 station 구속이 필요한 이
|
||||
fixture는 공개 CLI acceptance 사례로 쓰지 않는다. 공개 입력으로 bottom/top만 구속한
|
||||
strip은 두께 경계층을 포함한 독립 해 또는 동등한 조건의 oracle로 별도 검증해야 한다.
|
||||
|
||||
고정 5개 두께 DOF에서는 면내 refinement만으로 임의의 두께 경계층이 수렴하지 않는다.
|
||||
Slab 해석해에 대한 두께 오차와 초기 `sqrt(αt)` 열침투 깊이를 확인해야 한다. 더 미세한
|
||||
두께 모델은 독립 검증용 oracle이며 제품 입력의 온도점 수 확대를 뜻하지 않는다.
|
||||
Reference CSV 한 시점은 다른 4개 온도점, flux, reaction 또는 전체 이력의 evidence가 아니다.
|
||||
Consistent C와 본 적분·초기화 선택이 reference 정확도에 미치는 영향은 아직 측정되지 않았다.
|
||||
|
||||
미결정 owner는 메인/사용자(물리·초기 정책), I/O owner(공개 의미), numerical reviewer(수치 허용 범위)다.
|
||||
사용자 검토에는 thin-shell product geometry와 접속 이상화, C/BE, 최초 불일치·종료 시점,
|
||||
24개 flux trace 제안을 포함한다. Geometry 판정 기준과 기본 적분의 지원 범위, 생략 초기값,
|
||||
edge 외부 단위, t=0 결과의 validity 표현은 구현 전에 확정해야 한다.
|
||||
현재 정식화 담당자의 확인은 문헌·요구사항 대조와 문서 정적 검토뿐이다. Solver build/test,
|
||||
reference 수치 비교와 physics 검토는 미실행이다. 독립 numerical review의 결과는 별도
|
||||
보고서를 참조하며 본 문서는 스스로 수치 타당성이나 결과 correctness를 승인하지 않는다.
|
||||
@@ -0,0 +1,121 @@
|
||||
# Shell 과도 열전달 독립 수치 검토
|
||||
|
||||
- 검토일: 2026-09-28. 상태: **Proposed 계획의 독립 검토 완료 / 구현 검증 미실행**.
|
||||
- 판정: 제안된 약형·행렬·BE partition·반력·한쪽 heat flux는 수학적으로 일관된다.
|
||||
아래 미결정 사항 때문에 구현 착수 계약이나 제품 정확도가 승인되었다는 뜻은 아니다.
|
||||
- 범위: [PRD](PRD.md)의 FEM-REQ-SHELL-THERMAL-001–018,
|
||||
[정식화](formulation.md) §§1–10, [상세 계획](design-plan.md) §§1–12.
|
||||
- 기준: [프로젝트 지침](../../AGENTS.md), [프로젝트 PRD](../PRD.md),
|
||||
[ARCHITECTURE](../ARCHITECTURE.md), [ADR-028](../ADR.md#adr-028),
|
||||
[공통 TOLERANCE](../TOLERANCE.md). 상위 계약·소스·테스트·reference는 수정하지 않았다.
|
||||
|
||||
## 1. 영향이 큰 판단과 필요한 결정
|
||||
|
||||
| ID / 판정 | 근거·영향 | 필요한 조치 / owner |
|
||||
| --- | --- | --- |
|
||||
| NR-01 / 물리 결정 대기 | Midsurface metric을 두께 전체에 쓰는 product-domain은 실제 offset volume의 곡률 항을 생략한다. 같은 normalized ζ를 연결한 두께 단차·fold는 실제 3D 접합부가 아니다. | 메인/사용자: 이 이상화를 승인하고 지원 한계를 명시. Numerical/I/O: 곡률·왜곡·퇴화·orientation 판정과 허용 geometry 범위를 구현 전에 확정. 높은 적분 차수로 모델링 오차가 제거된다고 주장하지 않음. |
|
||||
| NR-02 / 초기 상태 계약 대기 | Raw 초기 온도를 첫 BE 증분의 이전 상태로 쓰는 식은 맞지만 t=0 즉시 projection과 첫 RHS·에너지가 다르다. Reference 입력에는 step 전 `*Boundary / Set-10,11,11`과 step 안의 `Set-10,11,11,1000.`이 모두 있다. | 메인/사용자: 첫 증분 jump 의미 결정. I/O: 생략 초기값, 생략 boundary 값, pre-step boundary와 step 재정의의 의미를 명시. 단일 transient step 지원을 이유로 pre-step 데이터를 무시하지 않음. |
|
||||
| NR-03 / 공개 입력 결정 대기 | Edge kernel의 면적당 입력과 `q_in hL`은 일관되지만 DS4 `*DFLUX, S1…S4` 대응은 확인되지 않았다. 기존 reference에는 edge 하중이 없다. | I/O/메인: 공개 syntax·단위·대상 edge·중복 입력 의미 확인. 입증되지 않은 keyword 지원을 선언하거나 line-rate에 h를 중복 곱하지 않음. |
|
||||
| NR-04 / 구현 전 수치 계약 부족 | 3×3 표면 적분은 일반 warped Q4에서 exact가 아니다. Consistent C와 P2 두께 보간은 maximum principle을 보장하지 않는다. 고정 5점은 초기 두께 경계층을 임의로 해상할 수 없다. | Numerical owner: 아래 geometry·적분·수렴·내부 residual 판정을 고정하고 독립 사례로 검증. 실패 뒤 clamp/lumping/인공 확산 또는 tolerance 완화 금지. 방법 변경은 새 검토 대상. |
|
||||
| NR-05 / 문서 정합 보완 반영 | 최초 계획의 24개 integration Gauss 위치와 정식화의 54점 직접 적분·24개 trace recovery가 달랐다. 최신 계획에서 구분됨. | 유지할 계약: production 3×3 surface×exact Z, 직접 검산 54점, affine 검산 24 Gauss점, 공식 recovery 24 trace점. 숫자 24가 같다는 이유로 위치를 대체하지 않음. |
|
||||
| NR-06 / 검증 범위 보완 반영 | 직렬 strip 저항식은 단면 전체 end 온도 조건을 전제로 한다. 내부 station 지정 온도와 all-constrained는 현재 공개 입력 범위 밖이다. | 최신 계획처럼 exact strip 및 all-constrained를 assembly/algebra fixture로 분류. CLI bottom/top 지정 사례는 해당 경계층을 포함한 oracle로 검증. |
|
||||
|
||||
NR-01의 물리 지원 제한, NR-02의 시작 의미, 종료 시간이 Δt의 정수 배가 아니면 거부하는
|
||||
제안은 사용자 요구에 영향을 주는 결정이다. Z 계수·scatter 순서·구간 Jacobian·동일
|
||||
물리량의 검증 metric 고정은 합의된 물리를 구현하기 위한 상세 계약이다. 영속 flux
|
||||
좌표계·trace identity·t=0 validity는 I/O 계약이며 이 보고서가 대신 승인하지 않는다.
|
||||
|
||||
## 2. 독립 수식·정확 산술 검산
|
||||
|
||||
Python 표준 라이브러리 `fractions.Fraction`을 명령 내 scratch로 사용했다. 별도 계산 파일,
|
||||
production/test 변경 또는 solver 실행은 없었다. 아래 입력과 결과로 검산을 재현할 수 있다.
|
||||
|
||||
| 항목 | 검산과 결과 |
|
||||
| --- | --- |
|
||||
| DOF/shape | Node-major `p=5(i−1)+a`, a=1…5. 각 길이 1인 두께 구간의 좌표 u∈[0,1]에서 shape `[1−3u+2u², 4u−4u², −u+2u²]`를 곱하여 항별 정확 적분. |
|
||||
| 두께 질량 | `Z0_seg=(1/30)[[4,2,−1],[2,16,2],[−1,2,4]]` 재현. 조립 뒤 `Z0·1=(1,4,2,4,1)/6`, 합 2. |
|
||||
| 두께 전도 | 위 다항식을 u로 미분하여 적분하면 `Z1_seg=(1/3)[[7,−8,1],[−8,16,−8],[1,−8,7]]`. 조립 뒤 `Z1·1=0` 정확 성립. |
|
||||
| 체적/계수 | `dz=(h/2)dζ`, `∂z=(2/h)∂ζ`이므로 `C=ρc(h/2)M⊗Z0`, `K=k[(h/2)S⊗Z0+(2/h)M⊗Z1]`. 접선과 normal의 직교성으로 교차항 0. C는 energy/temperature, K는 power/temperature. |
|
||||
| 평판의 rank/에너지 | 단위 정사각형, `h=2`, `k=ρc=1`의 수치 단위 fixture. `M=(1/36)[[4,2,1,2],[2,4,2,1],[1,2,4,2],[2,1,2,4]]`, `S=(1/6)[[4,−1,−2,−1],[−1,4,−1,−2],[−2,−1,4,−1],[−1,−2,−1,4]]`. C의 정확 LDL pivot 20개 모두 양수, K의 leading 19×19 pivot 모두 양수, `K·1=0`, `1ᵀC1=2` 정확 성립. 즉 C SPD, K PSD/rank 19. |
|
||||
| Edge weight | 한 endpoint당 `q_in hL(1,4,2,4,1)/24`; 두 endpoint의 합은 `q_in hL`. 두께 station에 1/5씩 나누면 잘못된 일관 하중이다. |
|
||||
| 적분 차수 | Affine Q4 면내 M/S는 2×2 exact. 두께 mass·면내 전도는 4차여서 구간별 3점, 두께 전도는 2차. Production 3×3×2×3=54점은 exact Z 분리식과 같은 quadrature를 표현한다. 실제 54점 코드의 동등성은 미검증. |
|
||||
|
||||
유효 geometry와 양의 적분 weight에서는 `vᵀCv>0`, `vᵀKv≥0`의 에너지 형태가 유지된다.
|
||||
전역 K의 상수 null mode는 **연결된 thermal component마다 하나**이며, 분리된 mesh를
|
||||
항상 rank N−1로 검사하면 안 된다. 모든 활성 DOF가 양의 체적 요소에 연결되면
|
||||
`A=C/Δt+K`는 구속 없이도 SPD다. 극단적인 h 또는 Δt는 conditioning을 악화시킬 수
|
||||
있으므로 factorization 성공만으로 정확도를 판단하지 않는다.
|
||||
|
||||
첫 증분 partition의 독립 반례 fixture는 다음과 같다. 일관된 단위로
|
||||
`C=[[2,1],[1,2]]`, `K=[[1,−1],[−1,1]]`, `Δt=1/2`, `F=0`,
|
||||
`T_raw⁰=(0,0)`, 두 번째 DOF의 지정 온도 `g=1`을 둔다.
|
||||
|
||||
- 올바른 `A=[[5,1],[1,5]]`; `T_f¹=−1/5`, `T_f²=1/25`.
|
||||
- `R_c¹=24/5`, `R_c²=36/25`; `E=1ᵀCT`에서 두 증분 모두 `ΔE=Δt R_c` 정확 성립.
|
||||
- 최초 RHS를 일정 g의 이후 증분 식으로 바꾸면 `T_f¹=+1/5`가 되어 검출된다.
|
||||
이 fixture는 signed 온도와 consistent C의 undershoot가 에너지 안정성과 모순되지
|
||||
않음을 보이며 실제 20 DOF shell 해나 외부 reference 통과 증거는 아니다.
|
||||
|
||||
`r=CΔT/Δt+KT−F`의 constrained 성분은 모델에 공급되는 양의 반력 열률이다.
|
||||
전역 수지는 `ΔE=Δt(1ᵀF+1_cᵀR_c+1_fᵀr_f)`이며, free residual을 포함한 대수적
|
||||
동일성 확인과 free residual 자체가 작은지의 확인을 분리한다. `q=−kBT` 경계 적분은
|
||||
일반적으로 이 반력과 같지 않다. 입력 없는 단열계의 열에너지 보존과 BE의 C-norm
|
||||
소산도 서로 다른 검증이다. 초기 t=0 반력은 미정의이고 material history update는 없다.
|
||||
|
||||
## 3. 구현 후 반증 가능한 검증 계획
|
||||
|
||||
| 사례·수준 | 독립 oracle와 판정 의도 |
|
||||
| --- | --- |
|
||||
| Shape/행렬, kernel | 위 exact M/S/Z를 기대값으로 사용. Node-major Kronecker 순서, symmetry, 상수 null, SPD, 양의 에너지, 직접 54점/분리식 동등성 확인. h를 바꿔 C 및 면내 K의 h scaling과 두께 K의 1/h scaling을 각각 검사. |
|
||||
| 온도 patch/방향, kernel | 평판에서 `T=A+b·r+c z`를 주고 `q=−k(b+c n)` 확인(b는 평판 접선). 임의 rigid rotation에서 T 불변, q 회전. Connectivity 반전 시 station a↔6−a와 면 조건도 함께 반전. |
|
||||
| 한쪽 trace, recovery | 면내 상수, 두께 값 `(0,0,0,1,2)`의 임의 kernel state는 `q3(0−)=0`, `q3(0+)=−4k/h`. 24개 trace 중 0−/0+가 별도 identity로 저장되는지 확인. 이 임의 state는 공개 초기조건 fixture가 아님. |
|
||||
| 열용량/하중/수지, CLI+assembly | 단열·균일 초기 온도는 불변. Edge만 주면 총 입력 q_in hL; 집중 입력은 P 그대로. Prescribed DOF의 P도 full F에 남아 reaction을 바꾸는지 확인. 반력 부호, free residual, ΔE와 BE 소산을 각각 확인. |
|
||||
| BE, algebra | 위 두 증분 fixture, no-constrained 및 generic all-constrained. 이전 constrained state를 raw 초기값으로 유지하고 실패 candidate가 이전 state/output을 덮어쓰지 않는지 확인. |
|
||||
| 면내 해석해, CLI | 단열 직사각판 `T=T0+A cos(πx/L)exp[−α(π/L)²t]`, `α=k/(ρc)`. 초기값은 station 전체 동일. 두께 균일해가 유지되는지와 면내 temperature/flux 오차 확인. |
|
||||
| 시간 수렴, 독립 semi-discrete oracle | 같은 고정 mesh의 generalized eigenpair `Kv=λCv`로 `T(t)=exp(−λt)v`, BE 증폭률 `(1+λΔt)^−n` 대조. dt, dt/2, dt/4에서 1차 오차를 확인해 공간오차와 분리. Eigenvector 초기값은 algebra fixture로 한정. |
|
||||
| 두께 slab, CLI | x=z+h/2, bottom Ts, top 단열, 초기 Ti. `θ=(T−Ts)/(Ti−Ts)=Σ[m≥0]4/[(2m+1)π] sin[(2m+1)πx/(2h)] exp[−α((2m+1)π/(2h))²t]`. 양의 시간에서 5 station T와 미분한 q, 전체 energy 및 reaction 비교. Series 절단 오차를 별도 제한. |
|
||||
| Mesh/두께 해상도 | Smooth affine mesh에서 면내 temperature L2의 기대 2차, gradient L2의 기대 1차를 확인. Slab은 고정 5점이므로 dt→0의 두께 공간오차 plateau와 열침투 깊이 √(αt)를 보고. 면내 refinement로 두께 오차가 사라진다고 판정하지 않음. |
|
||||
| 재료·fold·두께 접속 | 직렬 저항 ΣL/(khw)는 full-end prescribed assembly fixture. CLI에서는 bottom/top 조건의 실제 oracle을 별도로 사용. Fold 등온은 q=0; 비균일 경우 global q의 동일성을 강요하지 않고 공유 DOF에 조립되는 열률 수지를 검사. |
|
||||
| Warped/왜곡 geometry | 허용될 geometry군에 대해 3×3→5×5→7×7에서 K/C 및 대표 T/q의 변화 확인. Geometry mesh 오차, quadrature 오차, offset-volume 생략 오차를 분리. Degenerate·자기 교차·orientation 불일치는 음성 사례. |
|
||||
|
||||
내부 roundoff 판정은 exact oracle를 기준으로 행렬 norm·연산 수·machine epsilon과
|
||||
conditioning을 반영하여 구현 전에 고정한다. 예를 들어 free residual은
|
||||
`||r_f||/(||A_ff|| ||T_f||+||b_f||)`, 수지 defect는 저장·입력·반력 항의 절댓값 합으로
|
||||
정규화하되 분모 0은 별도 처리한다. Zero floor `max(1,scale)`는 추가하지 않는다.
|
||||
Roundoff 한계, geometry margin, quadrature 변화 한계와 관찰 order의 허용 구간은 아직
|
||||
확정되지 않았다. 위 기대 order 자체를 임의 5% 통과 기준으로 바꾸거나 공통 외부
|
||||
tolerance를 이 검사들에 전용하지 않는다. 이 미결정 때문에 검증 실행 준비 완료 판정은 보류한다.
|
||||
|
||||
## 4. 기존 reference의 비교 계약과 관찰
|
||||
|
||||
Read-only 원본: `reference/shell-thermal/shell-thermal.inp`,
|
||||
`reference/shell-thermal/shell-thermal NodalTemperature.csv`.
|
||||
이번 검토에서 실제로 읽은 위치는 `C:/git/FESADev/reference/shell-thermal`이며
|
||||
현 worktree로 복사하지 않았다. 별도 `reference-model.md` 없이 이 절에 필요한 계약을 둔다.
|
||||
|
||||
- 제안 family: `(shell-thermal, Step-1, t=37, bottom temperature, NT11, blocking)`.
|
||||
온도 단위는 원본 입력의 일관된 단위이며 scalar이므로 좌표 회전과 무관하다.
|
||||
- Row identity: `(instance=Part-1-1, source node label, source DOF=11)`와 step/time.
|
||||
CSV에 instance 열이 없으므로 입력의 단일 instance와 source label 집합을 검증한 뒤 복원.
|
||||
HDF5는 모든 station을 보존하되 비교 view는 bottom만 명시적으로 선택한다.
|
||||
- Snapshot 정적 검사: 729행·729개 고유 node label, 모두 finite, 단일 Step-1/t37 frame.
|
||||
min `−15.5742216`, max `1000`; `S=1000`, near-zero band `B=10`.
|
||||
음수 전부가 near-zero는 아니다. `−15.5742216`은 상대오차 5% 대상이다.
|
||||
- [공통 정책](../TOLERANCE.md): `|r|≤B`이면 `|f−r|≤B`, 나머지는 상대오차≤0.05,
|
||||
모든 행의 relative RMS≤0.01을 함께 만족해야 한다. S=0은 exact-zero 규칙 적용.
|
||||
Reference의 음수·미소값을 clamp하거나 단위/온도 영점을 이동하여 scale을 바꾸지 않는다.
|
||||
- Missing/extra/duplicate/nonfinite, frame/instance/station mismatch를 tolerance 전에 거부.
|
||||
현재 수행한 CSV 자체 검사는 FESA HDF5와의 일대일 대응 검증을 대신하지 않는다.
|
||||
|
||||
원본 NT11 한 frame은 내부 4 station, flux, reaction, edge load, 다중 재료/두께 또는
|
||||
전체 시간 이력을 검증하지 못한다. 초기값·pre-step 경계·jump·consistent C·시간 적분
|
||||
차이가 reference 비교에 미치는 영향은 아직 측정되지 않았다. 비교 실패는 이 차이들을
|
||||
분리 조사할 근거이며 FESA가 Abaqus 내부 알고리즘과 같아야 한다는 요구가 아니다.
|
||||
|
||||
## 5. 수행 범위와 잔여 위험
|
||||
|
||||
수행: 관련 계약의 정적 대조, 위 exact 유리수 행렬/두 증분 검산, 원본 입력·CSV의
|
||||
read-only 정적 확인, 문서 정합 확인. 미수행: solver 구현·build/CTest, FESA HDF5 생성,
|
||||
외부 reference 수치 비교, 곡면/접합부/수렴 실험, 실제 결과의 physics evaluation.
|
||||
초기·geometry·edge syntax·내부 수치 판정·영속 결과 계약을 확정하고 위 검증을 실행해야
|
||||
한다. 본 보고서의 판정은 **정식화 초안의 독립 일관성 검토**로 한정한다.
|
||||
Reference in New Issue
Block a user