Files
FESADev/docs/mitc4-shell-feast-eigen/requirements-evidence.md
T

22 KiB
Raw Blame History

MITC4 eigen 요구사항의 관찰 evidence와 결정

  • Feature ID: mitc4-shell-feast-eigen
  • Owner: requirement-agent
  • Input contract revision: r2
  • 기본 보고서: requirements.md
  • 관찰일: 2026-09-06

원본 reference 관찰

Artifact 실제 경로 SHA-256
Input shellNL-eigen-meshfine.inp 913b1abc604e62bc5f995bf5523924e17ea03925102a7bd22d39226ba0ea7339
Eigenvalues shellNL-eigen-meshfine eigenvalues.txt 20d97ca3fd51f5b956f2c1ed7565557c68f74e61e41b913748515ef43a0f7f0b
관찰 항목 파일에서 읽은 사실
모델 Part-1, identity instance Part-1-1; 729 nodes, 676 S4 elements
좌표 x/y 각각 [-5,5], 모든 z=0; 26×26 element mesh의 사각 평판
Section line 1421 *Shell Section, elset=Set-1, material=Material-1; data 0.5, 5; offset/composite 없음
Material lines 1455~1459: Material-1, *Density=2700., *Elastic=2.1e+11, 0.3
Constraint lines 14641470: Set-2의 DOF 16, 값 생략으로 homogeneous constraint
Procedure lines 1475~1477: 유일한 *Step, name=Step-2, nlgeom=NO, perturbation; *Frequency, eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass; 10, , , , ,
선행 이력 이전 Step/Static/Initial Conditions/load 없음; 이름 shellNL이나 Step-2로 preload를 추론하지 않음
부수 요청 *Restart, write, frequency=0, field/Node PRESELECT, history/Energy ALL. 모델은 acoustic element/coupling constraint를 포함하지 않음
TXT 10개 row; 각 row에 Frame: Mode <id>: Value = <lambda> Freq = <f> (cycles/time)
Identity mode IDs는 정확히 1~10, 유일하며 누락 없음; 모든 Value/Freq finite·positive
반복값 modes (2,3), (7,8), (9,10)의 표시 Value가 각각 같음; mode identity 중복과 구분 필요

관찰 Value 목록은 다음과 같다. 원본 표시 정밀도를 확장·보정하지 않는다.

Mode Value
1 2.19507E+05
2 8.85523E+05
3 8.85523E+05
4 1.85534E+06
5 2.74023E+06
6 2.77515E+06
7 4.14941E+06
8 4.14941E+06
9 6.73379E+06
10 6.73379E+06

관찰값으로 sqrt(Value)/(2*pi)와 표시 Freq를 계산상 대조한 최대 상대차는 1.6946487122851045e-05이다. 이것은 quantity 식별을 돕는 교차 확인이며 FESA comparison이나 새 허용오차 판정이 아니다. Value는 omega², Freq는 cycles/time이라는 공개 정의와 일관된다. 단위계는 원문에 지정되지 않았고 수치만 보고 SI라고 단정하지 않는다.

TXT에는 step 이름이 별도로 없지만 입력은 정확히 한 개 frequency step이며 mode identity와 Value가 완전하다. 따라서 지정 input의 유일한 Step-2에 결합하는 deterministic projection은 가능하다. 최종 readiness와 frame/family mapping은 NR·I/O가 소유한다. CSV가 없다는 이유로 reference를 변환하거나 새 metadata/provenance를 요구할 근거는 없다. 사용자 지정 경로를 우선하는 feature-specific artifact 선택이며 공통 reference 문서나 다른 feature 계약은 바꾸지 않는다.

중요한 결정

MFE-OQ-001 — 두 질량 계산 관계: 해결

사용자는 2026-09-06 후속 답변에서 “mass matrix는 consistent mass를 계산하고 이를 이용해서 lumped mass를 계산합니다.”라고 명시했다. Consistent 원본 계산과 derived lumped 계산이 모두 필수이며 이전 둘 중 하나의 계산만 선택하는 초안은 대체되었다. 관련 결정은 MFE-ADR-002, 요구사항은 FEM-REQ-MITC4-EIGEN-005, 026이다. Lumping 알고리즘은 사용자 지정이 없으므로 Research/Formulation이 질량 보존·물리 회전 관성·좌표 변환·drilling 경계를 명시하고 NR가 검토한다. 모든 속도장의 kinetic energy나 두 spectrum의 exact equality를 보존 조건으로 추가하지 않는다.

MFE-OQ-002 — FEAST와 reference baseline의 질량: 해결

  • 상태: 사용자 명시 결정으로 해결.
  • 관련 요구사항: FEM-REQ-MITC4-EIGEN-008, 011, 013, 017, 020.
  • Owner: user가 사용 질량을 결정; Research/Formulation이 근거와 수식, NR가 검증; Requirement Agent가 본 r1 baseline에 반영.

사용자는 추가 답변에서 “고유치 해석에서는 lumped mass를 사용합니다. 따라서 고유치 해석을 할 때 consistent mass -> lumped mass -> 고유치 해석 입니다”라고 명시했다. 따라서 FEAST와 authoritative reference baseline은 derived lumped mass를 사용하며 동일 lumped mass로 residual·mass normalization·orthogonality를 검증한다. Consistent는 유도 원본과 내부 mass/energy 검증에 유지한다. Consistent eigen 해석, 두 variant의 외부 비교 및 runtime 질량 선택 API는 현재 요구가 아니다. 이 결정은 수치 tolerance 통과나 정확도 우위의 evidence를 대신하지 않는다.

Drilling은 기존 승인 shell 계약에서 비물리 안정화 좌표이다. 인공 drilling inertia를 추가하거나 두 물리 회전 관성을 생략하는 대안을 새 사용자 옵션으로 발명하지 않는다. Massless drilling을 그대로 generalized FEAST에 넣을 수 있다는 가정도 하지 않는다. FEAST의 SPD 조건과 shell 질량 nullspace의 양립은 Research/Formulation이 물리 spectrum과 constraints를 보존하는 방식으로 해결해야 한다. 이 문서는 elimination/projection/condensation 식을 승인하지 않으며, 새로운 물리 근사가 필수라는 evidence가 생기면 해당 owner가 반환한다.

NR-MFE-001 requirements intent 검토

이 절의 반례와 승인 전 판단은 r1 이력이다. 사용자 승인으로 개선 범위를 확정한 현재 r2 계약은 아래 r2 승인 범위와 정적 재검증을 따른다.

  • Input contract revision: r1 유지. 이번 bounded 검토는 기존 002/008/014의 정합만 다룬다.
  • 발견 근거: Numerical Review, NR 소유 직접 계산 반례, Formulation V5.
  • 결과: needs-user-decision. Requirement owner가 새 수식을 유도하거나 NR 계산을 재실행하지 않았다.

NR는 유효한 단일 평판의 한 절점 URZ만 free인 모델에서 global Z축 45° 회전이 동일 물리 component BC를 유지함을 확인했다. 기존 kd 규칙으로 고유치가 23.04088888888889에서 23.040628726287263으로 달라지고 상대 차이가 1.1291343961675893e-5다. 이는 NR의 독립 계산 evidence이며 새로운 mass/reduction의 확인된 결함이나 이번 Requirement Agent의 runtime 검증 결과가 아니다.

014의 원래 문구는 coordinate-invariance evidence를 필수로 두고 acceptance에 독립 invariant suite 통과를 요구한다. 유한한 test portfolio를 NR에 위임한 것은 모든 가능한 모델의 exact equality를 증명하라는 뜻은 아니지만, 알려진 지원 모델의 반례를 검증 범위 밖으로 재분류할 권한도 아니다. Full-free/full-clamp 사례로만 범위를 고정한 V5는 이 반례를 해소하지 못하므로 기존 의도의 단순 clarification으로 통과시킬 수 없다.

002의 물리 kernel 재사용 문구 하나만 보면 numerical stabilization 수정까지 직접 명시하지 않지만, 문서가 함께 재사용하는 기존 shell 요구사항의 FESA-REQ-LSMITC4-034/056은 고정 kd 규칙을 정한다. 008은 실제 제약을 적용한 원래 pencil의 유한 spectrum 보존을 요구하므로 massless 처리에서 남는 stabilization을 제거해 이 반례를 없애는 해석도 허용하지 않는다. 고정된 tensor의 기저 변환과 geometry를 회전시켜 kd를 다시 계산하는 서로 다른 연산을 같은 검증으로 취급해서는 안 된다.

MFE-OQ-003 — r1에서 검토한 대안과 영향

대안 정확한 영향과 승인 뒤 필요한 작업
기존 stabilization 유지 및 한계 수용 Partial rotation BC 지원과 원래 pencil을 유지한다. 해당 BC에서 stabilization이 유한 공간에 남는 경우의 일반 eigen 좌표 불변성을 현재 feature acceptance에서 보장하지 않도록 014 적용 범위를 명시적으로 변경한다. 두 질량·physical stiffness의 좌표 검증, 모든 지원 BC의 원래 pencil 보존·modal residual 등은 계속 필수이며 NR 반례를 알려진 한계로 보존한다. 이는 acceptance 변경이고 아직 승인되지 않았다
좌표 공변적인 stabilization 개선 — 권고 동일 물리 모델의 좌표축 선택에 따른 고유치 변화를 해결하는 강성 개선을 작업 범위에 추가한다. 기존 fixed kd와 충돌하는 계약의 owner·승인 경계를 정하고 Research/Formulation/NR를 재검토한다. 영향받는 기존 정적 결과와 새 eigen 결과를 재검증한다. 특정 대체 계수나 수식은 이 요구사항 검토에서 선택하지 않는다

권고 이유는 좌표 선택만으로 같은 물리 모델의 고유치가 달라지는 알려진 결함을 유지하지 않기 위해서다. 대가는 기존 stiffness 계약의 영향 조사와 정식화·회귀 검증 범위 증가다. 반례의 수치가 작다는 이유로 외부 reference tolerance를 적용하거나 일반 오차 상한으로 사용하지 않는다. 이 한 건 외에 질량 흐름·FEAST 사용 질량·입력 N을 재질문하지 않는다.

두 대안은 같은 반례를 acceptance에서 다르게 처리하며, 기술 evidence만으로 사용자가 어느 변경 범위를 승인했는지 결정할 수 없다. 승인 전 002/008/014 원문, 기존 stiffness, partial BC 지원, NR 판정 영향, 모든 tolerance·reference·schema를 변경하지 않았다. Coordinator가 결정과 revision을 관리하고 영향받은 owner에게 후속 작업을 할당한다. 이 작업은 implementation correction이 아니며 correction budget을 사용하지 않는다.

r2 승인 범위와 정적 재검증

사용자 답변 “네 개선과 영향받는 기존 정적해석과 고유치해석의 재검증까지 범위에 포함해주세요.”로 MFE-OQ-003의 개선안이 승인되었다. MFE-ADR-007이 승인·revision 근거이며, 한계 수용/acceptance 축소안은 선택되지 않았다.

변경 intent는 002 물리 kernel 보존과 numerical stabilization 개선 분리, 008 개선된 constrained pencil의 유한 spectrum 보존, 014 지원 partial BC를 포함하는 필수 invariant 통과, 024 영향받은 정적 correctness/reference 재검증, 신규 027 좌표 공변적인 stabilization이다. 020은 eigen Value-only와 기존 static 회귀의 서로 다른 비교량을 명확히 구분한다. 기존 고정 scale과 직접 충돌하는 부분만 대체하며 수식·수치 기준·schema를 이 문서에서 정하지 않는다.

기존 linear shell 요구사항의 034 scale 선정과 056의 해당 공식 검증을 대체하고, 나머지 physical/nonphysical 경계를 유지한다. Nonlinear formulation §10.3도 같은 initial physical tangent diagonal minimum을 사용하므로 영향받는 기존 static 경로다. 새 scale과 기존 nonlinear objective potential·일관 tangent·초기 고정 lifecycle의 정합을 Formulation/NR가 확인해야 한다. 이 발견은 nonlinear material/procedure 범위 확대가 아니다.

필수 회귀 포트폴리오와 identity

구분 필수 재검증과 기존 evidence 계약
Element 및 linear static correctness 기존 build-test와 physics의 kernel/patch/rigid-mode/physical recovery·정적 partition/full residual·reaction·energy·source mapping을 재검증한다. 추가로 NR-MFE-001의 동일 물리 partial BC에서 complete K와 대응 정적 response를 좌표 변환해 검증한다. Loads/BC를 함께 물리적으로 변환하고 지원되지 않는 MPC 입력을 만들지 않는다
기존 linear S4 external regression reference-model, comparison의 common-policy 재검증, 현행 nonlinear I/O의 공통 경로·linear control을 적용한다. 원본 reference/shell/shell.inp + reference/shell/shell displacements.csv; stable source instance/node/component 및 해당 static step/frame. U1/U2/U3 blocking, UR1/UR2/UR3 warning-only를 유지한다
기존 nonlinear correctness FESA-REQ-NSNR-030, formulation, physics의 선형극한·tangent consistency·objectivity·factor-one 전역 force/moment balance·free residual·commit/rollback을 새 scale로 재검증한다. 기존 Newton/convergence·하중·reaction 의미는 유지한다
기존 nonlinear external regression 현행 reference-model과 기존 comparison의 closure case shellnl-s4-final, shellnl-meshfine-s4-final, shell-s4-linear-limit를 재검증한다. 각각 reference/shellNL/shellNL.inp, reference/shellNL-meshfine/shellNL-meshfine.inp, 위 linear input 및 같은 폴더의 기존 <stem> displacements.csv를 사용한다. Nonlinear은 source instance/node/component와 factor-one accepted state, linear은 자기 static state identity를 유지한다
새 eigen 검증 개선된 K와 derived lumped M에서 008/013/014/027 내부 검증 및 NR-MFE-001 해소를 필수 확인한다. 기존 지정 eigen input/TXT의 모든 요청 mode Value만 비교하며 static U/UR 데이터를 eigen reference로 사용하지 않는다

Nonlinear 외부 회귀도 U blocking/UR warning-only이고, 기존 coarse/fine의 shellNL reactions.csv·shellNL-meshfine reactions.csv에서 local RF1/RF2/RF3와 physical spatial RM1/RM2는 source-key/finite/inventory/error 보고를 유지하는 review-only다. RM3와 stress를 새 numerical gate로 추가하지 않는다. Internal equilibrium acceptance와 local distribution 검토를 구분한다. 모든 외부 수치 판정은 docs/TOLERANCE.md를 그대로 사용한다.

현행 nonlinear reference-model에는 shellnl-meshfine-02-s4-final도 별도 post-closure verification으로 기록되어 있다. 이를 과거 세 case closure의 통과 evidence로 소급하지 않는다. 기존 등록 회귀 suite에서의 실행·영향은 Planning이 기록하고 별도 case의 기존 판정 역할을 유지한다. 과거 HDF5 schema/파일명/고정 absolute tolerance의 이력보다 현행 공통 output 경로와 TOLERANCE.md, 각 feature의 최신 identity 계약이 우선한다.

개선 전 숫자와의 bitwise equality는 요구하지 않는다. 위 approved physics·reference 기준과 개선된 formulation을 기대값으로 검증하며 오래된 실패를 baseline으로 재생성하여 정당화하지 않는다. 원본 reference와 과거 보고서는 보존하고 새 r2 실행 evidence를 기록한다. 전체 configured MSVC/x64/Debug suite, 새 warning 없음, TDD와 failure preservation도 필수다. 현재 중요한 미결정은 없으며 연구·정식화·NR·구현의 후속 gate는 아직 통과하지 않았다.

질문 없이 정리한 사항

  • 무하중 원형상·비감쇠 해석은 실제 단일 *FREQUENCY와 선행 이력 부재로 결정한다.
  • .inp의 Lanczos는 source solver 옵션이다. 사용자가 FESA backend를 FEAST로 명시했으므로 source option을 유지해 읽되 실제 backend를 명시하는 mapping이 가능하다. Abaqus Lanczos 동작과의 동등성을 주장하지 않는다. Exact allowlist와 진단은 I/O 소유이다.
  • SIM은 source architecture 옵션이고 acoustic-free 모델의 ACOUSTIC COUPLING=ON은 실제 acoustic 모델 지원 요청이 아니다. 무해한 조합만 근거와 warning 정책으로 허용한다.
  • NORMALIZATION=MASS의 내부 modal 의미를 유지한다. 외부 mode shape 비교는 추가하지 않는다.
  • TXT의 명시적인 Value를 직접 읽고 원본을 보존한다. Matching/family는 tolerance 전에 고정하며 repeated eigenvalue와 duplicate mode ID를 구분한다.
  • 기존 HDF5 의미를 보존하는 eigen quantity 추가는 신규 기능에 필요한 I/O 정의이다. 비호환 변경이 없는 한 schema 검토를 별도 사용자 승인 질문으로 만들지 않는다.

공개 근거

다음은 2026-09-06에 확인한 1차 문서이다. 공식 syntax와 backend admissibility 확인에만 사용하며 Abaqus 내부 정식화의 추정 근거로 쓰지 않는다.

  1. Abaqus 2025 — Natural Frequency Extraction: Eigenvalue Extraction, Initial Conditions, Loads, Output 절. 무감쇠 eigenproblem의 omega², 원형상/선행 기하비선형 상태의 구분, 각 모드 출력 의미 확인.
  2. Abaqus 2025 — *FREQUENCY: Optional parameters와 Lanczos data line 절. 요청수 10, blank bounds, source algorithm, SIM/acoustic 옵션의 의미와 mass normalization 확인.
  3. Intel oneMKL 2026.0 — Extended Eigensolver Functionality: real symmetric generalized 문제는 B SPD를 요구한다. 이 조건 때문에 massless drilling을 아무 처리 없이 FEAST에 전달해서는 안 된다.
  4. Intel oneMKL 2026.0 — ?feast_scsrgv: 지정 구간의 eigenpairs, subspace capacity, 결과 count와 status 의미 확인. 구간 선택·확장과 설치된 MKL 버전 검증은 후속 owner가 정의한다.

실행 evidence와 미실행

r0 원본 관찰과 hash는 그대로 유지했다. 아래는 당시 실행한 read-only 조사이며 이번 r1에서 reference 재조사나 변환을 수행하지 않았다. 해당 shell 명령은 exit code 0이었다.

Get-Content -Raw '.codex/skills/fem-requirements-baseline/SKILL.md'
Get-Content -Raw 'docs/SOLVER_AGENT_DESIGN.md'
Get-Content -Raw 'docs/FEATURE_DOCUMENTATION.md'
rg -n -i '^\*(?!\*)|density|frequency|static|step|boundary|shell section' --pcre2 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp'
Get-Content -Tail 75 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp'
Get-Content -Raw 'reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt'
rg -n 'FEAST|feast|MassMatrix|Density|density|Frequency|Eigenvalue|eigenvalue' include src -g '*.[ch]*'
git status --short

추가 read-only python -B - here-script는 pathlib로 두 파일을 읽고 keyword별 node/element count, 좌표 범위, regex Mode\s+(\d+):\s+Value\s*=\s*(\S+)\s+Freq\s*=\s*(\S+)로 mode/Value/Freq를 추출하여 finite·identity·주파수 교차 확인과 SHA-256을 계산했다. Exit code 0, 729 nodes / 676 elements / 10 modes였고 위 표·hash와 일치했다. 파일을 생성하거나 reference 내용을 쓰지 않았다. Source 검색에서 물리 mass/density/eigen 구현을 발견하지 못했고 nonlinear local energy 변수 density만 검색되었다. 이는 scoped 검색 관찰이며 제품 미지원의 최종 코드 감사는 아니다.

공통/feature/기존 MITC4·nonlinear 승인 계약을 read-only로 조사했다. 기존 보고서의 완료 표시는 이번 feature 실행 증거로 재사용하지 않는다. C++ build/test, Harness, 외부 solver와 FESA reference comparison은 요구사항 단계의 범위가 아니므로 미실행이다.

r1에서는 관리문서·owned reports·공통 agent 계약을 Get-Content로 읽고 사용자 수정 AGENTS.md의 GoogleTest 경로를 rg -n 'GTEST|git|GoogleTest' 'AGENTS.md'로 확인했다. 명령은 exit code 0이었다. 실제 GoogleTest dependency 설정/build 확인은 Root·Planning 소유이며 이 문서 갱신에서 새로 실행하지 않았다. 두 사용자 결정으로 MFE-OQ-001과 MFE-OQ-002를 해결했으며 기존 25개 requirement ID를 보존하고 derived lumped 요구 026을 추가했다. 당시 질량 선택의 미결정은 모두 해소되었다. 이후 NR-MFE-001로 발견된 현재 acceptance 결정은 위 별도 절에서 관리하며 상세 lumping 수식·수치 기준은 후속 owner 소유이다.

NR-MFE-001 bounded 검토에서는 Get-Content로 현재 Feature 관리문서·owned 보고서·NR main/evidence·reference-model·formulation-verification을 읽고, scoped rg로 002/008/014와 기존 FESA-REQ-LSMITC4-034/038/051/056을 대조했다. Exit code 0. 원본 reference 재조사, NR 반례 재계산, 새로운 외부 조사와 수식 유도는 수행하지 않았다.

r2에서는 현재 관리문서와 위 기존 static reports/requirements/formulation을 Get-Content와 scoped rg로 읽었다. Exit code 0. 기존 nonlinear §10.3의 동일 scale 사용과 현행 reference-model의 closure/별도 post-closure case 구분을 확인했다. 실제 reference 파일을 재조회하거나 과거 수치·hash를 새로 계산하지 않았다. NR 반례/positive evidence도 재실행하지 않았다. 변경은 owned 두 문서뿐이고 실제 C++/FEAST/build/test/reference 회귀는 미실행이다.

변경한 경로는 기본 보고서와 이 상세 보고서 두 개뿐이며 관리문서, source, tests, phase, 공통 정책과 reference artifact는 편집하지 않았다. 정적 링크·필수 metadata·ID/matrix 검사를 완료한 명령과 결과는 Requirement Agent 반환 evidence로 함께 보고한다.