docs(thermal): align feature contracts with approved implementation scope
This commit is contained in:
@@ -1,29 +1,29 @@
|
||||
# Shell Transient Heat Transfer 상세 설계·구현 계획안
|
||||
|
||||
- 상태: 사용자 검토용 제안. 요구사항 인터뷰를 바탕으로 수치 방법론을 구체화했으며 구현은 시작하지 않았다.
|
||||
- 상태: 사용자 승인 실행 계획. 구현·검증 진행 중이며 수치 통과 evidence와 구별한다.
|
||||
- Owner: 메인 assistant
|
||||
- 기준: [Feature PRD](PRD.md), [프로젝트 지침](../../AGENTS.md), [ARCHITECTURE](../ARCHITECTURE.md),
|
||||
[CODINGSTYLE](../CODINGSTYLE.md), [TOLERANCE](../TOLERANCE.md)
|
||||
- 수식의 상세 원본: [정식화 제안](formulation.md). 현재 checklist는 [PRD](PRD.md#현재-checklist)에만 둔다.
|
||||
- 수식의 상세 원본: [정식화](formulation.md). 현재 checklist는 [PRD](PRD.md#현재-checklist)에만 둔다.
|
||||
- 독립 검토: [numerical-review.md](numerical-review.md). 수식의 일관성 검토이며 구현·정확도 통과 판정은 아니다.
|
||||
|
||||
## 1. 구현할 해석과 제안 방법
|
||||
## 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 불일치 조사 대상으로만 남김 |
|
||||
| 열용량 | Consistent heat-capacity matrix | Galerkin 약형에서 직접 유도하고 열저장·반력·에너지 계산에 같은 행렬 사용. Lumping·인공 확산·온도 clamp는 승인 범위 밖 |
|
||||
| 적분 | 면내 3×3 Gauss, 두께의 두 P2 구간은 정확 적분한 Z 행렬 사용 | 직접 54점 적분과 대조. Affine 평판은 2×2 면내 적분도 정확하며 곡면·왜곡은 고차 적분 대조로 오차 확인 |
|
||||
| 시간 적분 | Backward Euler, 고정 Δt | 일정 계수 선형 문제에서 factorization을 재사용할 수 있고 첫 구현의 시간 수렴 검증이 명확 |
|
||||
| 열유속 | 보간 온도의 기울기에서 직접 복구 | 요소별·위치별 Fourier 열유속과 전체 residual 반력을 구별하여 검증 |
|
||||
|
||||
이 표는 FESA가 채택할 제안이며 Abaqus 내부 알고리즘 동등성의 약속이 아니다.
|
||||
이 표는 사용자가 채택한 FESA 방법이며 Abaqus 내부 알고리즘 동등성의 약속이 아니다.
|
||||
특히 consistent C가 현재 reference의 과도응답을 공통 tolerance 안에서 재현하는지는
|
||||
아직 검증하지 않았다. 시간 적분의 안정성이 양의 온도 보존이나 정확도를 보장하지도 않는다.
|
||||
|
||||
@@ -73,9 +73,9 @@ product-domain 모델의 교차항은 0이다. 평판에서 각각 대략 `kh`,
|
||||
|
||||
`G`의 퇴화, 뒤집히거나 자기 교차하는 요소, 불일치하는 surface side는 입력 geometry
|
||||
진단으로 처리한다. `|det J|`로 invalid 요소를 정상화하거나 임의의 최소 두께를 대입하지 않는다.
|
||||
중앙면 접속은 같은 normalized thickness station을 공유하는 이상화로 제안한다.
|
||||
중앙면 접속은 같은 normalized thickness station을 공유하는 이상화다.
|
||||
두께가 다른 요소의 단차·급한 fold의 실제 3D 접합부 열장은 이 모델의 해상 범위 밖이다.
|
||||
이 접속 의미와 얇은 Shell 곡률 근사는 사용자 검토가 필요한 물리 선택이다.
|
||||
이 접속 의미와 얇은 Shell 곡률 근사는 사용자가 채택한 물리 모델이며 상세 3D 전도를 보장하지 않는다.
|
||||
|
||||
## 4. 열용량행렬 C와 적분 절차
|
||||
|
||||
@@ -105,22 +105,15 @@ Affine 평판은 면내 2×2 × 두께 6점, 총 24점으로도 정확하다. 5
|
||||
|
||||
## 5. 열입력과 지정 온도
|
||||
|
||||
열입력의 양의 부호는 모델 안으로 유입되는 방향으로 제안한다.
|
||||
공개 입력은 source DOF 11/15에 대한 일정한 절점 집중 power P만 지원한다.
|
||||
양수는 모델로 공급되는 열이며 h·면적·shape weight를 곱하지 않는다. Source row 순서로
|
||||
더하고 constrained DOF의 입력도 full Q에 유지한다. Edge 분포 입력 011은 연기되었으며
|
||||
이번에 kernel이나 keyword를 추가하지 않는다. 지정되지 않은 외부 경계는 자연 단열이다.
|
||||
|
||||
- **절점 집중 열입력** `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).
|
||||
초기 온도는 node/Nset별 signed finite 값으로 5점에 동일 적용하고 미지정 값은 0이다.
|
||||
BC 생략값은 0이며 model 단계와 step 단계 각각에서 중복 충돌을 검사한 뒤 step이
|
||||
동일 target의 model 값을 덮어쓴다. 동일 값 중복은 허용하고 다른 값은 오류다.
|
||||
정확한 subset·미지원 옵션·no-op warning은 [PRD STH-C02](PRD.md#sth-c02--공개-입력-충돌과-부가-keyword)를 따른다.
|
||||
|
||||
## 6. Transient equation과 해법
|
||||
|
||||
@@ -144,15 +137,17 @@ free/constrained partition에서
|
||||
\]
|
||||
|
||||
를 푼다. 초기 구속점 온도와 step 지정 온도가 다르면 첫 증분의
|
||||
`C_fc(T_c^0−g)/Δt` 항을 빠뜨리면 안 된다. 제안은 입력 초기 상태를 `t=0`에 보존하고
|
||||
`C_fc(T_c^0−g)/Δt` 항을 빠뜨리면 안 된다. 입력 초기 상태를 `t=0`에 보존하고
|
||||
첫 양의 시점부터 step 지정 온도를 부과하는 것이다. 초기 값을 덮어쓴 다른 해석과
|
||||
에너지·reference 결과가 달라질 수 있으므로 이 시작 의미를 명시적으로 검토한다.
|
||||
에너지·reference 결과가 달라지므로 raw 초기값을 조용히 projection하지 않는다.
|
||||
|
||||
고정 물성·geometry·구속 집합·Δt에서는 A_ff를 한 번 factorize하고 매 증분 RHS만 갱신한다.
|
||||
전체 시간이 Δt로 나누어떨어지는 입력을 우선 지원하는 것으로 제안한다. 마지막 증분을
|
||||
조용히 줄이지 않는다. 시간은 누적 덧셈보다 increment index와 Δt에서 결정적으로 생성한다.
|
||||
전체 시간이 Δt로 나누어떨어지지 않으면 마지막 증분만 종료까지 단축한다. Δt가 전체 시간보다
|
||||
크면 한 증분이다. 시간은 n*Δt로 생성하고 마지막 저장 시점은 입력 종료 시간이다. 표현 오차
|
||||
수준으로 같은 마지막 간격은 같은 계수를 사용하고 실제로 짧은 간격만 재분해한다.
|
||||
시간격자·INC·표현 가능성의 상세 판정은 정식화와 독립 numerical review에서 고정한다.
|
||||
|
||||
절연체의 K는 상수 온도 null mode를 가지지만 양의 C 때문에 A는 양정정일 수 있다.
|
||||
절연체의 K는 상수 온도 null mode를 가지지만 양의 C 때문에 A는 양정치다.
|
||||
정적 solver처럼 “온도 구속이 없으므로 singular”로 판정하지 않는다. 일반 partition 연산은
|
||||
전체 구속 시 0×0 free solve를 건너뛰도록 검산한다. 다만 이번 공개 입력은 bottom/top만
|
||||
구속하므로 내부 3개 온도점까지 모두 구속한 사례는 CLI 지원 모델이 아닌 algebra fixture다.
|
||||
@@ -171,8 +166,7 @@ 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에서 고정하여 좌표 의미를 보존한다.
|
||||
안쪽에서 평가하는 위치/접근 방향이다. Global 성분과 local frame을 저장하고 local 성분은 Rᵀq로 후처리한다.
|
||||
- 위 trace 위치에서 B를 직접 평가한다. C0 보간의 중앙면에서 두께 도함수는 한쪽 극한
|
||||
두 개일 수 있으므로 `0−`와 `0+`를 평균으로 합치지 않는다. 행렬의 적분 위치와 복구 위치는 독립이다.
|
||||
- 재료 경계와 요소 경계를 넘어 nodal averaging한 값을 공식 heat flux로 사용하지 않는다.
|
||||
@@ -187,15 +181,15 @@ local 직교 frame `R=[e_1,e_2,n]`이면 `q_local=Rᵀq_global`이고,
|
||||
|
||||
free 성분은 평형 잔차, constrained 성분은 지정 온도 유지에 필요한 반력 열률이다.
|
||||
양의 반력은 모델에 추가로 공급한 열이다. transient 반력에는 열저장 항이 포함되어야 한다.
|
||||
초기 온도는 저장하지만 유한 차분 시간구간이 없는 `t=0` 반력에 계산된 값처럼 0을 쓰지 않는다.
|
||||
초기 온도는 저장하지만 `t=0` flux와 reaction dataset은 생성하지 않는다. 반력을 계산된 0이나 NaN으로 대체하지 않는다.
|
||||
|
||||
## 8. 기존 코드와 연결할 책임·파일
|
||||
|
||||
현재 `Element::Recover`는 displacement를 소비하고 `DofManager`는 `kDofsPerNode=6`을
|
||||
전제로 한다. 따라서 parser에 DS4만 추가해서 완료할 수 없다. 다음은 실제 저장소 경로와
|
||||
새 파일의 제안 배치다. 세부 C++ signature는 승인된 I/O·정식화 계약을 기준으로 구현 계획에서 고정한다.
|
||||
신규 파일 배치다. 세부 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 계약에 억지로 넣지 않음 |
|
||||
@@ -212,49 +206,50 @@ Domain이 정의를 소유하고 AnalysisModel이 non-owning view를 제공하
|
||||
|
||||
## 9. 구현 순서와 각 단계의 완료 조건
|
||||
|
||||
아래 순서는 향후 구현 작업을 위한 계획이다. 현재 실행하거나 완료한 목록이 아니다.
|
||||
아래 dependency는 승인된 실행 계획이다. 같은 행의 독립 작업만 병행하며 완료 evidence 없이
|
||||
후속 수치 kernel로 진행하지 않는다. 공통 CMake 등록은 메인이 각 묶음 통합 시 소유한다.
|
||||
|
||||
| 순서 | 작업·연결 요구사항 | 추가/변경할 검증과 단계 완료 조건 |
|
||||
| --- | --- | --- |
|
||||
| 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 없음 |
|
||||
| 작업 | 선행 작업 | 소유 대상·목적 | 검증 |
|
||||
| --- | --- | --- | --- |
|
||||
| T1 | 없음 | 메인: 지역 지침/PRD/ADR/계획; 정식화 담당: formulation; 독립 numerical 담당: numerical-review | 전체 patch·roundoff·시간격자·수렴·slab 오차의 구체적 기준 확정 |
|
||||
| T2 | 없음 | 구현 담당: material/model/Domain/AnalysisModel의 thermal 의미·소유권 | 양성/불량 값·source identity·structural 회귀; parser/kernel/DOF 제외 |
|
||||
| T3 | T1,T2 | 구현 담당: thermal geometry·20 DOF K/C·24 trace kernel·Domain geometry 연결 | Exact M/S/Z, 직접54점, rank/SPD/null, scaling·rotation·trace·geometry 음성 |
|
||||
| T4 | T2 | 구현 담당: DofManager thermal layout/scatter/pattern | 구조6·열5 분리, 활성 node와 stable 번호, partition·공유 node |
|
||||
| T5 | T3 | 구현 담당: Abaqus thermal subset·semantic mapping·진단 | 승인 input/default/override/no-op와 모든 미지원·충돌 사례 |
|
||||
| T6 | T3,T4 | 구현 담당: deterministic assembly·thermal state/result record | K/C·source-ordered Q·초기 상태·순서와 공유 recovery 인터페이스 |
|
||||
| T7 | T6 | 구현 담당: BE procedure·복구·full residual·candidate | Exact 두 증분·no BC·짧은 마지막·factor reuse·수지·실패 state 보존 |
|
||||
| T8 | T6 | 구현 담당: thermal HDF5 writer·self-check | Synthetic state round trip·schema/identity/초기 dataset 부재·P=0·atomic 실패 |
|
||||
| T9 | T5,T7,T8 | 구현 담당: prepared_analysis와 CLI 연결 | 양성 CLI·lexical output·exit·lease·기존 결과 보존 |
|
||||
| T10 | T9 | 구현 담당: analytical physics·reference comparator/integration | 독립 oracle·온도/flux/reaction·수렴과 NT11 source mapping/tolerance |
|
||||
| T11 | T10 | 검증 담당·독립 physics 검토자; 메인 완료 문서 | 전체 MSVC Debug build/CTest·필수 reference·baseline 대비·coverage 한계 |
|
||||
|
||||
각 행동 변경은 먼저 기대 결과를 고정하는 검사를 작성하고 실패를 확인한 뒤 구현한다.
|
||||
기존 coverage가 충분한 지원 코드 정리에는 구현 구조만 따라 하는 테스트를 추가하지 않는다.
|
||||
독립 수치 검토와 실제 결과의 물리 검토를 구현 담당자의 자기 승인으로 대체하지 않는다.
|
||||
행동 변경은 기대 결과를 고정한 검사에서 실패를 확인한 뒤 구현한다. 구현 구조를 복제한
|
||||
expected 값으로 정확도를 주장하지 않는다. 독립 numerical/physics 검토를 구현자의 자기 승인으로 대체하지 않는다.
|
||||
각 담당은 할당 파일만 수정하고 source/reference artifact와 공통 프로젝트 계약을 임의 변경하지 않는다.
|
||||
|
||||
## 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 전에 거부 |
|
||||
필수 사례의 원본은 [PRD STH-C07](PRD.md#sth-c07--독립-검증과-수치-계약의-선행-조건)이다.
|
||||
정확 fixture·norm·시간/mesh 목록·oracle 절단 및 order 판정은 [독립 수치 검토](numerical-review.md)가 소유한다.
|
||||
|
||||
전체 열에너지는 `E=1ᵀCT`로 두고 기준 온도의 상수 차이가 에너지 변화에 영향을 주지 않음을
|
||||
확인한다. 검증할 discrete balance는
|
||||
`E_(n+1)−E_n = Δt[1ᵀQ + Σ constrained reaction]`이며 free residual의 영향도 보고한다.
|
||||
점별 Fourier flux와 FE 반력은 다른 observable이므로 각각의 검증을 수행한다.
|
||||
- Shape partition, affine exact K/C, constant null mode, C SPD, 양의 에너지와 회전 변환.
|
||||
- 일정 온도·면내 선형·두께 선형 flux 및 중앙면 0-/0+를 구별하는 직접 미분.
|
||||
- 두 자유도 C=[[2,1],[1,2]], K=[[1,-1],[-1,1]], delta=.5, old=0, 두 번째 g=1에서
|
||||
첫 free=-.2, 두 번째 .04, reaction=4.8와1.44. 첫 C_fc 이전 상태 항을 검출한다.
|
||||
- No-BC 균일 보존, P/-P·constrained P·source 중복과 component별 에너지 수지.
|
||||
- Semidiscrete 독립 eigenmode로 시간1차, Fourier 직사각형의 L2 온도2차·gradient1차.
|
||||
- Bottom step/top 단열 slab series의 온도·flux·에너지·반력; 고정5점 두께 오차 plateau와 초기 침투 깊이 보고.
|
||||
- 다중 재료/두께 strip 저항은 full-end assembly fixture로 확인한다. 내부 station BC를 CLI로 확대하지 않는다.
|
||||
- 원본 Step-1 t37 NT11 729행의 identity precheck와 공통 tolerance blocking 비교.
|
||||
|
||||
시간 수렴은 공간 오차를 충분히 낮추고 Δt를 줄이며, 면내 수렴은 충분히 작은 Δt에서 mesh를
|
||||
세분화한다. 제품의 두께 온도점 5개가 고정되므로 면내 mesh를 줄이는 것만으로 두께 오차까지
|
||||
0으로 간다고 주장하지 않는다. 세부 norm·기대 order·내부 판정 기준은 독립 검토가 정한다.
|
||||
에너지 defect의 scale은 저장·외력·반력 항의 절댓값 합이며 free residual을 별도로 검사한다.
|
||||
E=1ᵀCT의 기준 온도 이동에 대한 DeltaE 불변성과 BE C-norm 소산은 서로 다른 검사다.
|
||||
외부 5%/1% 기준으로 내부 수지를 판정하거나 max(1,scale)로 작은 모델의 오류를 숨기지 않는다.
|
||||
|
||||
## 11. 검증 실행과 완료 판단
|
||||
|
||||
구현 시 MSVC x64 developer 환경과 GoogleTest/MKL/TBB/HDF5 경로를 준비하고 다음을 실행한다.
|
||||
Production 변경 전에 전체 baseline을 실행하고 실제 실패 이름·metric·환경을 기록한다.
|
||||
구현 중 관련 검사를, 기능 완료 시 아래 전체 검사를 실행한다.
|
||||
|
||||
```powershell
|
||||
cmake --preset windows-msvc-ninja-debug
|
||||
@@ -263,39 +258,25 @@ 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를 형식적으로 추가 실행하지 않는다.
|
||||
MSVC x64 developer 환경과 승인 local GoogleTest/MKL/TBB/HDF5를 사용한다.
|
||||
`.harness/config.json`이 동일 실행을 구성할 때만 `python scripts/execute.py`를 대안으로 사용한다.
|
||||
개인 설정이 없다고 runner가 preset을 선택한다고 가정하지 않는다. 새 compiler warning을 추가하지 않는다.
|
||||
|
||||
Reference 원본은 현재 별도 dev checkout에서 읽었으며 현 worktree에는 없다. 실행 단계에서
|
||||
read-only reference 위치와 결과 output 경로를 명시적으로 연결한다. 파일을 찾지 못하면
|
||||
comparison을 통과나 coverage 완료로 기록하지 않는다. reference 재생성·이름 변경·보정은 포함하지 않는다.
|
||||
Reference는 [PRD STH-C08](PRD.md#sth-c08--reference-원본과-완료-evidence)의 두 원본을
|
||||
승인된 dev checkout에서 byte 그대로 복사·hash 확인한다. Abaqus 실행·재생성·이름 변경·보정은 제외한다.
|
||||
실제 명령/exit, hash, baseline 및 최종 결과는 implementation-verification 문서에 기록한다.
|
||||
|
||||
완료는 solver 실행 성공뿐 아니라 모든 필수 결과·증분 저장, 에너지 수지·해석해·수렴,
|
||||
기존 구조해석 회귀, 공통 tolerance의 NT11 비교와 필요한 독립 검토 evidence가 있어야 한다.
|
||||
재현된 무관한 기존 HHT 시간수렴 실패는 전체 검사에서 제외하지 않고 마지막에도 비교한다.
|
||||
새 실패나 기존 실패 악화를 허용하지 않으며 기존 실패가 남으면 전체 CTest green이라고 보고하지 않는다.
|
||||
열해석의 필수 physics/reference 실패에는 이 예외를 적용하지 않는다.
|
||||
|
||||
현재 문서 검토에서는 독립 reviewer가 Z 계수, 평판 20 DOF의 C 양정치/K rank 19,
|
||||
첫 두 증분의 C_fc 항·반력·에너지 수지를 정확 유리수 연산으로 확인했다.
|
||||
구현 코드·FESA 결과의 정확도나 곡면·접합부 지원 한계가 검증된 것은 아니다.
|
||||
## 12. 채택 모델의 한계
|
||||
|
||||
## 12. 구현 전에 검토할 제안과 한계
|
||||
Product-domain은 실제 offset 곡률과 상세 접합부를 해상하지 않는다. 고정5점은 초기 두께
|
||||
경계층을 충분히 해상하지 못할 수 있고 면내 refinement가 두께 오차를 제거하지 않는다.
|
||||
Consistent C/BE의 안정성은 positivity나 정확도를 보장하지 않는다. Point source 부근의
|
||||
mesh 독립적인 유한 flux는 보장하지 않는다. 이 한계를 임의 clamp나 tolerance 완화로 숨기지 않는다.
|
||||
|
||||
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 일치를 각각 평가한다.
|
||||
Reference의 NT11 최소값 -15.5742216은 S=1000, B=10의 near-zero 범위 밖이다.
|
||||
공통 상대오차 검사를 유지하고 초기 jump·공간 이산·열용량의 영향을 독립적으로 평가한다.
|
||||
현재 채택 계약을 바꾸어야 하는 충돌이 확인되면 근거를 제시하고 사용자 결정으로 돌린다.
|
||||
|
||||
Reference in New Issue
Block a user