Files
FESADev/phases/linear-static-3d-euler-beam/step12.md
T
2026-08-15 03:14:34 +09:00

5.3 KiB
Raw Blame History

Step 12: INP to Domain Mapping

담당 역할과 필수 스킬

  • 담당 역할: implementation-agent
  • 필수 스킬: fesa-cpp-msvc-tdd
  • 모든 C++ build/test와 최종 VERIFY는 MSVC x64 Debug 기준으로 수행한다.

읽어야 할 파일

  • /AGENTS.md
  • /docs/ARCHITECTURE.md
  • /docs/ADR.md
  • /docs/linear-static-3d-euler-beam/requirements.md
  • /docs/linear-static-3d-euler-beam/formulation.md
  • /docs/linear-static-3d-euler-beam/io.md
  • /docs/linear-static-3d-euler-beam/implementation-plan.md
  • /include/fesa/model/model_types.hpp
  • /include/fesa/model/domain.hpp
  • /src/fesa/model/domain.cpp
  • /tests/unit/model/domain_test.cpp
  • /include/fesa/io/abaqus/input_syntax.hpp
  • /include/fesa/io/abaqus/input_reader.hpp
  • /src/fesa/io/abaqus/input_reader.cpp
  • /tests/unit/io/abaqus/input_reader_test.cpp
  • /reference/cantilever beam/cantilever beam.inp

소유 파일

  • Create: /include/fesa/io/abaqus/domain_mapper.hpp
  • Create: /src/fesa/io/abaqus/domain_mapper.cpp
  • Create: /tests/unit/io/abaqus/domain_mapper_test.cpp
  • Modify: /src/fesa/CMakeLists.txt
  • Modify: /tests/CMakeLists.txt

작업

ParsedInput을 검증된 immutable Domain으로 바꾸는 semantic mapper를 구현하라.

class AbaqusDomainMapper {
public:
    Result<Domain> map(const ParsedInput& input) const;
};

지원 범위는 승인 I/O contract와 정확히 같아야 한다.

  • *HEADING, *PART/*END PART, *NODE, *ELEMENT, TYPE=B33, *NSET/*ELSETGENERATE, *MATERIAL/*ELASTIC, *BEAM GENERAL SECTION, SECTION=GENERAL, *SECTION POINTS, *ASSEMBLY/*END ASSEMBLY, *INSTANCE/*END INSTANCE, *BOUNDARY, *CLOAD, *STEP/*STATIC/*END STEP를 mapping한다.
  • 같은 part의 여러 identity instance를 deterministic stable internal IDs로 expand하고 SourceEntityId {instance_name, source_label}를 보존한다.
  • assembly set의 INSTANCE parameter와 node/set target을 해석한다.
  • A,I11,I12,I22,J, E,nu, G=E/(2*(1+nu)), Iy=I11, Iz=I22, n1 -> local y를 mapping한다. E>0, -1<nu<0.5, 계산한 G>0과 section properties의 positivity를 검증한다.
  • *STEPNLGEOM은 absent/NO만 accept하고 YES는 model diagnostic으로 거부한다. *STATIC의 1개 또는 24개 time-control data field를 finite positive 값으로 읽되 V0는 하나의 final frame 0만 만든다. Step 앞의 model-level *BOUNDARY는 sole static step에 활성화하고 step 안 *CLOAD와 함께 StaticStepDefinition에 연결한다.
  • B31은 unsupported-element-formulation, instance translation/rotation data는 unsupported-instance-transform diagnostic으로 거부한다. Second step, nested assembly, I12!=0, invalid DOF, duplicate label, dangling target/reference, nonpositive properties, invalid geometry에도 설계/I/O contract가 정한 structured diagnostic code를 반환한다.
  • *PREPRINT, *RESTART, *TRANSVERSE SHEAR STIFFNESS, *OUTPUT, FIELD, *OUTPUT, HISTORY, *NODE OUTPUT, *ELEMENT OUTPUT, *CONTACT OUTPUT와 그 output-variable data는 warning으로 보존하고 무시한다. 이 allowlist 밖 unknown keyword는 error다. FESA default outputs를 output request로 필터링하지 않는다.

Tests는 모든 supported keyword의 positive path, mixed case, Generate, multiple identity instances, allowlist warning, unknown keyword, B31 rejection, transform/nested/multi-step, duplicate/dangling/invalid numeric와 approved legacy input mapping을 포함하고 InpDomainMapping regex로 등록한다.

Acceptance Criteria

RED targeted command:

cmake --build .harness/build --config Debug --target fesa_tests
ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure

GREEN/VERIFY:

cmake -S . -B .harness/build -A x64 `
  -DFESA_GTEST_SOURCE_DIR=C:/git/googletest `
  "-DMKL_DIR=C:/Program Files (x86)/Intel/oneAPI/mkl/2026.1/lib/cmake/mkl" `
  "-DTBB_DIR=C:/Program Files (x86)/Intel/oneAPI/tbb/2023.1/lib/cmake/tbb" `
  "-DHDF5_DIR=C:/Program Files/HDF_Group/HDF5/2.1.1/cmake"
cmake --build .harness/build --config Debug
ctest --test-dir .harness/build -C Debug -R InpDomainMapping --output-on-failure
ctest --test-dir .harness/build -C Debug --show-only=json-v1
ctest --test-dir .harness/build -C Debug --output-on-failure

검증 절차

  1. semantic positive/negative tests를 production mapper보다 먼저 작성하고 RED를 확인한다.
  2. 승인 subset에 필요한 최소 mapping/validation만 구현해 GREEN을 만든다.
  3. diagnostic field/order와 Domain non-mutation을 점검하고 전체 VERIFY를 수행한다.
  4. /docs/linear-static-3d-euler-beam/implementation-report.md의 Step 12 section에 실제 RED/GREEN/VERIFY command, exit code, 핵심 output과 변경 파일을 기록한다.
  5. Step 12를 completed로 갱신하고 supported mapping/negative diagnostics를 summary에 기록한다.

금지사항

  • B31을 Euler element로 alias하지 마라. 이유: 물리 formulation 의미가 다르다.
  • transform을 무시하거나 fallback local axis를 선택하지 마라. 이유: 입력 의미를 왜곡한다.
  • *DLOAD 또는 multiple-step propagation을 구현하지 마라. 이유: 승인 범위 밖이다.
  • reference input/CSV를 수정하지 마라. 이유: read-only baseline이다.
  • 직접 commit하지 마라. 이유: Harness executor가 담당한다.