diff --git a/docs2/ADR.md b/docs2/ADR.md deleted file mode 100644 index dae797e..0000000 --- a/docs2/ADR.md +++ /dev/null @@ -1,153 +0,0 @@ -# Architecture Decision Records - -이 문서는 구조해석 FEM solver framework의 현재 architecture decision을 한 곳에서 관리한다. -모든 항목은 별도 표기가 없으면 `Accepted`다. 결정을 바꿀 때 기존 항목을 삭제하거나 의미를 -바꾸지 않고 새 ADR에서 `Supersedes` 관계를 기록한다. - -## ADR-001: Solver core와 adapter의 계층 분리 - -- **상태**: Accepted -- **결정**: Semantic model, element/material, analysis와 results를 core에 두고 input, - persistence, sparse/vendor backend는 adapter로 둔다. 의존성은 adapter에서 core로 향한다. -- **근거**: Physics와 numerical contract가 file format 또는 vendor API 수명에 종속되는 것을 - 방지한다. -- **결과**: 작은 feature에서도 mapping layer가 필요하다. 대신 parser, storage와 backend를 - 독립적으로 교체·시험할 수 있다. - -## ADR-002: C++17과 MSVC x64를 초기 검증 baseline으로 사용 - -- **상태**: Accepted -- **결정**: Solver production code의 최소 언어 수준은 C++17이며 Windows baseline은 MSVC - x64다. CMake/CTest 또는 명시된 Visual Studio solution은 `.harness/config.json`에서 - 선택한다. -- **근거**: 현재 Harness가 검증 가능한 현실적 baseline을 제공하면서 vendor extension을 - public contract로 만들지 않기 위함이다. -- **결과**: 다른 compiler/platform 지원은 별도 evidence가 생기기 전까지 보장하지 않는다. - Toolchain upgrade는 compatibility 및 numerical regression 검토가 필요하다. - -## ADR-003: Feature contract와 TDD를 구현 선행 조건으로 사용 - -- **상태**: Accepted -- **결정**: Requirement, formulation, numerical/verification와 I/O contract가 준비된 뒤 - production 구현을 시작한다. 구현은 실패 test 관찰 후 최소 변경으로 통과시킨다. -- **근거**: 수식이나 output meaning이 불명확한 상태에서 코드가 사실상의 계약이 되는 것을 - 방지한다. -- **결과**: 작은 변경에도 직접 test와 evidence가 필요하다. 명백한 상위 계약 결함은 - implementation에서 우회하지 않고 owner에게 반환한다. - -## ADR-004: Abaqus는 공개 reference convention이며 solver identity가 아님 - -- **상태**: Accepted -- **결정**: 공식 Abaqus 문서의 입력 의미, analysis procedure, output definition과 verification - 사례를 observable behavior 기준으로 사용한다. 선택된 `.inp` subset은 adapter contract로 - 구현한다. -- **근거**: 익숙하고 문서화된 CAE convention을 활용하면서 비공개 구현 복제나 과도한 - 호환성 주장을 피한다. -- **결과**: 지원 subset과 차이를 명시해야 한다. 내부 알고리즘 동등성, 전체 호환성과 - bitwise result 일치를 주장하지 않는다. 다른 interchange adapter도 core를 변경하지 않고 - 추가할 수 있다. - -## ADR-005: Stable typed identity를 배열 위치와 분리 - -- **상태**: Accepted -- **결정**: Source label, internal entity, DOF, equation과 result key를 서로 다른 identity로 - 표현한다. 외부 result/reference 매칭은 row order 대신 semantic key를 사용한다. -- **근거**: Renumbering, filtering, parallel processing과 storage ordering이 physical identity를 - 훼손하지 않게 한다. -- **결과**: Explicit mapping 비용이 생기지만 duplicate/missing/extra entity를 deterministic하게 - 검출할 수 있다. - -## ADR-006: Immutable model과 transactional analysis state - -- **상태**: Accepted -- **결정**: 검증된 model definition은 analysis 동안 immutable하다. Iteration의 trial state와 - 마지막 converged committed state를 분리하고 성공한 increment만 commit한다. -- **근거**: Nonlinear/material update 실패가 다음 retry와 published result를 오염시키지 않게 - 한다. -- **결과**: State copy, checkpoint 또는 rollback protocol이 필요하다. 성능 최적화는 동일한 - failure atomicity를 보존해야 한다. - -## ADR-007: Local element kernel과 global assembly를 분리 - -- **상태**: Accepted -- **결정**: Element는 명시적 local ordering으로 residual/tangent와 recovery data를 반환한다. - DOF numbering, sparsity, scatter, constraint와 global reduction은 별도 module이 소유한다. -- **근거**: Element formulation을 작은 test로 검증하고 여러 assembly/backend에서 재사용하기 - 위함이다. -- **결과**: Evaluation context와 local contribution contract가 필요하다. Element가 global - matrix나 source parser에 직접 접근하는 편의는 허용하지 않는다. - -## ADR-008: Deterministic ordering과 reduction을 correctness로 취급 - -- **상태**: Accepted -- **결정**: Numbering, contribution ordering, floating-point reduction tree와 output ordering을 - 명시적으로 관리한다. 병렬화는 동일 identity와 허용된 numerical envelope를 검증한다. -- **근거**: 회귀 비교, 문제 재현과 물리 검토가 실행 scheduling에 좌우되지 않게 한다. -- **결과**: 일부 빠른 비결정적 알고리즘을 사용할 수 없거나 별도 opt-in contract가 필요할 - 수 있다. - -## ADR-009: Structured diagnostic과 fail-closed semantic validation - -- **상태**: Accepted -- **결정**: Input/model/formulation/assembly/solver/convergence/recovery/storage/environment 실패를 - stable category와 code로 반환한다. 지원하지 않는 의미는 기본적으로 오류다. -- **근거**: Silent fallback이나 warning-only 처리가 잘못된 해석을 정상 결과처럼 보이게 하는 - 위험이 크다. -- **결과**: Parser와 adapter가 더 엄격할 수 있다. 결과에 영향이 없다고 명시된 construct만 - warning으로 낮출 수 있다. - -## ADR-010: Backend-neutral results와 versioned persistence - -- **상태**: Accepted -- **결정**: Physical result identity를 in-memory results model이 소유하고 CSV, HDF5 또는 다른 - 저장 형식은 versioned adapter가 projection한다. Validated candidate만 atomic publish한다. -- **근거**: 저장 layout 변경이 solver physics와 public quantity 의미를 바꾸지 않게 한다. -- **결과**: Schema version, units, coordinates, location, step/frame와 provenance metadata가 - 필요하다. 특정 저장 형식은 feature/project 설정으로 선택한다. - -## ADR-011: 다중 방법 verification과 immutable reference artifact - -- **상태**: Accepted -- **결정**: Unit/patch/analytical/manufactured/convergence/invariant/reference comparison 중 - feature에 적합한 둘 이상의 독립 방법을 사용한다. 승인된 reference input, expected result와 - tolerance는 implementation이 수정할 수 없다. -- **근거**: 같은 가정을 공유하는 한 가지 비교만으로는 formulation, mapping과 implementation - 오류를 구분하기 어렵다. -- **결과**: Evidence 준비 비용이 증가한다. Artifact가 없거나 상충하면 구현을 억지로 맞추지 - 않고 numerical/reference owner에게 반환한다. - -## ADR-012: Coordinator-owned workflow와 critical-only human gate - -- **상태**: Accepted -- **결정**: Coordinator가 공통 handoff envelope를 검증하고 다음 owner와 state transition을 - 결정한다. Agent는 승인 범위의 repository-local 작업을 자율 수행하며 제품 의미, 공개 - 호환성, acceptance, authoritative artifact, 보안·법률 위험 수용 또는 외부 권한을 바꾸는 - 결정만 사용자에게 요청한다. -- **근거**: 모든 단계의 반복 승인 병목을 제거하면서 되돌리기 어렵거나 제품 정의를 바꾸는 - 선택은 사람이 통제하게 한다. -- **결과**: 상태 schema, evidence digest, retry signature와 허용 transition을 기계적으로 - 검증해야 한다. 같은 signature의 correction은 한 번만 허용한다. - -## ADR-013: Project configuration은 실행 가능한 신뢰 경계 - -- **상태**: Accepted -- **결정**: Build preset, solution과 test command를 포함하는 `.harness/config.json`은 code와 - 같은 review 대상이다. Harness는 repository-relative path와 구조화된 command만 허용하고 - unrelated working-tree content를 stage하지 않는다. -- **근거**: `shell=False`만으로 executable 또는 preset의 side effect를 격리할 수 없기 - 때문이다. -- **결과**: 임의 PATH executable과 repository 밖 command는 거부한다. `danger-full-access`, - remote push와 파괴 작업에는 명시적 권한 및 격리 조건이 필요하다. - -## ADR 추가 기준 - -다음 변경은 새 ADR이 필요하다. - -- Core dependency 방향 또는 public module 경계 변경 -- Identity, units, coordinates, state ownership 또는 result meaning 변경 -- Analysis lifecycle, constraint 방식 또는 convergence contract의 공통 정책 변경 -- 지원 toolchain/platform baseline 또는 persistence compatibility 변경 -- Agent 권한, human gate 또는 authoritative evidence precedence 변경 - -단순 구현 세부사항, 한 feature에만 적용되는 formulation과 되돌릴 수 있는 내부 refactoring은 -해당 feature 문서나 implementation plan에 기록한다. diff --git a/docs2/ARCHITECTURE.md b/docs2/ARCHITECTURE.md deleted file mode 100644 index 4a3ca5b..0000000 --- a/docs2/ARCHITECTURE.md +++ /dev/null @@ -1,285 +0,0 @@ -# Structural FEM Solver Architecture - -## 1. 범위와 현재 상태 - -이 문서는 범용 구조해석 FEM solver의 목표 C++ 아키텍처와 이를 개발하는 control plane을 -정의한다. 현재 repository에는 agent/skill, 문서와 Harness가 있으며 solver source와 build -metadata는 아직 없다. 아래 `include/`와 `src/` 구조는 feature 구현 시 지켜야 할 목표 -경계이지 현재 구현 완료 목록이 아니다. - -## 2. 아키텍처 원칙 - -- Physics와 numerical meaning을 file format 및 vendor backend보다 안쪽에 둔다. -- Model definition, mutable analysis state와 recovered result를 별도 lifetime으로 관리한다. -- Local element 계산과 global topology/assembly/solve 책임을 분리한다. -- 모든 경계에서 identity, units, coordinates, ordering과 failure를 명시한다. -- Candidate를 완전히 검증한 뒤 authoritative state로 commit한다. -- 지원하지 않는 semantic input은 fail closed 처리한다. -- 재현 가능한 ordering과 reduction을 correctness contract로 취급한다. -- 확장점은 실제 두 번째 구현이 필요할 때 최소 interface로 도입한다. - -## 3. Context 구조 - -```text - Development control plane - user -> Coordinator -> specialist agents -> evidence -> Harness/tests - | - v - repository changes - - Solver data plane - input adapter -> semantic model -> analysis procedure -> results model - | | - v v - element/material assembly/constraints - \ / - numerical backend - | - output adapters -``` - -Control plane은 source와 evidence를 만들고 검증하지만 solver runtime API의 일부가 아니다. -Solver data plane은 agent, prompt, phase 파일 또는 Harness에 의존하지 않는다. - -## 4. 목표 디렉터리 - -```text -include/fem/ - core/ public identity, units, diagnostics와 value types - model/ immutable semantic model API - element/ element formulation contracts - material/ constitutive contracts - analysis/ analysis procedure contracts - results/ backend-neutral result identity와 query API - -src/ - core/ - model/ - element/ - material/ - dof/ - assembly/ - constraints/ - analysis/ - numerics/ - results/ - io/ - abaqus/ 선택적으로 지원하는 Abaqus interchange subset adapter - storage/ 선택된 result serialization adapter - -tests/ - unit/ - integration/ - verification/ - harness/ - -reference/ 승인된 read-only model 및 expected-result artifact -docs/features/ feature별 requirement부터 release까지의 evidence -``` - -첫 feature는 필요한 경로만 추가한다. 빈 framework class나 미래용 계층을 미리 만들지 않는다. - -## 5. 모듈 책임 - -| 모듈 | 소유 책임 | 소유하지 않는 책임 | -| --- | --- | --- | -| `core` | typed identity, units/coordinate metadata, status/diagnostic | mesh, solver, file syntax | -| `model` | node/connectivity/set/load/constraint/step의 검증된 semantic definition | equation numbering, mutable state | -| `element` | kinematics, quadrature, local residual/tangent, recovery | global matrix와 source parsing | -| `material` | constitutive response, trial/commit/revert state | element interpolation과 analysis loop | -| `dof` | active DOF와 deterministic equation numbering | constraint enforcement와 solve | -| `assembly` | sparsity, scatter, stable local-to-global reduction | element physics와 linear solve | -| `constraints` | prescribed/MPC 등 feature가 지원하는 equation policy | parser syntax와 result storage | -| `analysis` | procedure lifecycle, iteration, convergence, state commit | concrete file adapter와 vendor API 노출 | -| `numerics` | vector/matrix abstraction과 private backend adapter | physical entity 및 source label 의미 | -| `results` | quantity/location/component/frame/provenance identity와 recovery records | storage file layout | -| `io` | external syntax와 semantic model 간 mapping | solver physics 변경 | -| `storage` | versioned serialization과 atomic publication | authoritative physical meaning 정의 | - -## 6. 의존성 규칙 - -```text -io adapters ------> model/core <------ output/storage adapters - ^ - | -element/material --> analysis <-- constraints/assembly - | | - +------------> numerics - -public API -> core/model/element/material/analysis/results abstractions only -``` - -- Adapter가 core contract에 의존하며 core가 adapter에 의존하지 않는다. -- `element`와 `material`은 서로의 concrete type을 소유하지 않는다. 명시적 evaluation - context/response contract로 통신한다. -- `analysis`는 backend-neutral numerical interface만 본다. -- Vendor header, handle과 exception은 `src/numerics` 또는 `src/storage` 내부에서 끝난다. -- `io`가 model object를 부분적으로 publish하지 않는다. Builder/candidate를 검증한 뒤 - immutable model을 생성한다. - -CI에서는 public-header self-containment와 금지 dependency 검사를 추가할 수 있다. 그런 -검사가 아직 없으면 architecture review가 동일 경계를 확인한다. - -## 7. 핵심 데이터 계약 - -### 7.1 Identity - -다음 identity는 교환할 수 없다. - -- `SourceLabel`: input/output에서 사용자가 보는 label -- `EntityId`: 검증된 model 내부 identity -- `DofId`: physical component가 포함된 자유도 identity -- `EquationId`: 특정 analysis state의 active equation 번호 -- `ResultKey`: entity, quantity, location, component, step/frame와 coordinate metadata 조합 - -Dense array index를 source label로 암묵적으로 사용하지 않는다. 외부 artifact 매칭은 row -순서가 아니라 명시적 identity를 사용한다. - -### 7.2 Units와 coordinates - -Solver는 입력 값의 일관 단위계를 임의로 추론하지 않는다. Feature contract가 필요한 -dimension을 정의하고 adapter가 단위 metadata를 보존하거나 명시적으로 변환한다. Vector, -tensor, rotation과 result component는 local/global/material coordinate system과 ordering을 -기록한다. - -### 7.3 Model, state, results - -- `Model`: analysis 동안 변하지 않는 topology와 semantic definition -- `AnalysisState`: DOF values, committed/trial material state, iteration/convergence metadata -- `Results`: 성공적으로 publish된 step/frame별 physical output - -Trial update 실패 시 committed state를 보존한다. 실패 frame은 정상 frame과 같은 -authoritative status로 노출하지 않는다. - -## 8. 해석 생명주기 - -```text -PARSE/BUILD - -> SEMANTIC VALIDATION - -> MODEL FREEZE - -> PROCEDURE INITIALIZATION - -> DOF/CONSTRAINT SETUP - -> SPARSITY SETUP - -> {ASSEMBLE -> SOLVE -> UPDATE -> CONVERGENCE CHECK}* - -> COMMIT - -> RECOVER - -> PUBLISH RESULTS -``` - -Linear procedure도 같은 owner 경계를 사용하며 반복 구간이 한 번일 수 있다. Nonlinear, -dynamic, eigen과 contact 기능은 이 lifecycle 위에 필요한 state와 gate를 추가하지만 다른 -analysis family의 의미를 공통 API에 억지로 넣지 않는다. - -Residual과 tangent의 부호, essential constraint 적용 시점, reaction recovery와 state -commit 시점은 formulation/analysis contract에 포함한다. - -## 9. Element 및 material kernel - -Element evaluation input은 최소한 geometry, DOF/state view, material evaluation capability, -step/iteration context와 requested outputs를 포함한다. Output은 local ordering이 명시된 -residual/tangent 및 recovery data다. - -Element kernel은 다음을 수행하지 않는다. - -- global equation 번호 생성 -- global sparse matrix에 직접 write -- source file lookup -- global convergence 판정 -- result storage write - -Material update는 trial response를 반환하고 analysis owner가 전체 increment 성공 후 commit을 -요청한다. Numerical integration point와 state-variable ordering은 feature contract에 -versioned되어야 한다. - -## 10. Assembly, constraints와 numerics - -- Sparsity는 validated connectivity와 DOF policy에서 deterministic하게 생성한다. -- Parallel worker는 소유가 정해진 buffer에만 기록하고 reduction 순서를 고정한다. -- Constraint 방식은 elimination, transformation, penalty 등 선택된 feature contract에 - 명시한다. 서로 다른 방식의 reaction 의미를 동일하다고 가정하지 않는다. -- Numerical backend는 matrix/storage/solver capability를 제공하지만 physical model을 알지 - 않는다. -- Backend status는 structured solver diagnostic으로 변환하며 exception이나 error code를 - public API로 그대로 흘리지 않는다. - -## 11. I/O와 Abaqus reference convention - -Abaqus input/output의 공개 정의는 호환 feature를 설계할 때 우선 reference로 사용한다. -Adapter는 지원 keyword/option, model data와 history data, default, set/instance scope, -orientation, step과 output 위치를 명시적으로 mapping한다. - -다음 원칙을 지킨다. - -- 선택된 subset만 지원한다고 선언한다. -- 결과에 영향을 줄 수 있는 unknown/unsupported semantic keyword는 오류다. -- 무시해도 semantic 차이가 없다고 계약된 formatting 또는 metadata만 warning이 될 수 있다. -- 공개 문서로 확인할 수 없는 내부 동작을 추측하지 않는다. -- Adapter의 interchange 호환성과 solver formulation 검증을 별개의 evidence로 관리한다. - -다른 입력 형식도 동일한 semantic model builder를 사용한다. - -기본 공개 reference set은 다음과 같다. Feature evidence에는 실제 사용한 product version과 -세부 page를 고정해 기록한다. - -- [Input file model/history organization](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEMODRefMap/simamod-c-ov.htm) -- [Element selection and formulation overview](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEELMRefMap/simaelm-c-analysistype.htm) -- [Nonlinear equation solution controls](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEANLRefMap/simaanl-c-nonlineareqns.htm) -- [Output concepts and identifiers](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEOUTRefMap/simaout-c-ov.htm) -- [Verification Guide](https://docs.software.vt.edu/abaqusv2025/English/SIMACAEVERRefMap/simaver-c-ov.htm) - -이 목록은 출발점이지 모든 feature의 충분한 근거가 아니다. Governing theory와 feature별 -공식 문서를 함께 사용하고, 문서 version 간 차이는 contract에 명시한다. - -## 12. 결과와 persistence - -Results model은 저장 형식과 독립적이며 다음을 식별한다. - -- analysis/step/frame와 success status -- entity와 source identity -- quantity, location, component와 coordinate system -- units/dimension와 precision -- formulation, mesh와 solver provenance - -Storage adapter는 schema version을 기록하고 임시 candidate에 쓴 뒤 validation 성공 시 -atomic publish한다. CSV, HDF5 또는 다른 형식은 선택된 project/feature contract이며 core -기본값이 아니다. - -## 13. 오류 모델 - -오류는 적어도 다음 category를 구분한다. - -`input`, `model`, `formulation`, `assembly`, `constraint`, `linear-solver`, `convergence`, -`recovery`, `storage`, `environment`, `internal` - -Diagnostic에는 category, stable code, message, 관련 entity/source location과 원인 chain을 -포함할 수 있다. 예상 가능한 사용자/model 오류는 process crash나 assertion으로 처리하지 -않는다. Assertion은 내부 invariant 위반에 사용한다. - -## 14. Determinism과 병렬성 - -- Entity와 equation ordering은 stable input identity와 명시적 policy에서 결정한다. -- Hash iteration order를 authoritative output order로 사용하지 않는다. -- Floating-point reduction tree를 고정하거나 비결정성 범위를 계약·검증한다. -- 병렬 최적화는 serial reference test와 동일한 identity 및 허용된 numerical envelope를 - 만족해야 한다. -- Randomized test는 seed와 재현 정보를 기록한다. - -## 15. 개발 control plane - -Coordinator와 specialist agent는 `docs/SOLVER_AGENT_DESIGN.md`의 state machine을 따른다. -Skill은 역할별 절차를 제공하고 Harness는 계획된 repository-local 변경의 TDD와 build/test를 -강제한다. - -Control plane의 안전 경계는 다음과 같다. - -- Agent 보고서와 runtime output을 product result로 취급하지 않는다. -- Hook은 방어 계층이지 완전한 sandbox가 아니다. -- Project config와 build preset은 실행 가능한 신뢰 경계다. -- Harness는 관련 없는 working-tree 변경을 stage/commit하지 않는다. -- External solver와 원격 repository 변경은 별도 권한이 필요하다. - -## 16. Architecture 변경 - -Public dependency 방향, identity, state ownership, result schema 의미 또는 analysis lifecycle을 -바꾸는 변경은 `docs/ADR.md`에 새 decision을 추가한다. 기존 ADR을 조용히 다시 쓰지 않고 -superseding ADR로 이력을 남긴다. diff --git a/docs2/CODINGSTYLE.md b/docs2/CODINGSTYLE.md deleted file mode 100644 index 5374664..0000000 --- a/docs2/CODINGSTYLE.md +++ /dev/null @@ -1,192 +0,0 @@ -# Structural FEM Solver C++ Coding Style - -## 목적과 우선순위 - -이 문서는 production 및 test C++의 project-local 규칙이다. [Google C++ Style -Guide](https://google.github.io/styleguide/cppguide.html)를 일반 baseline으로 사용하되 다음 -순서가 우선한다. - -1. 승인된 feature requirements, formulation, numerical/verification와 I/O contract -2. `AGENTS.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md` -3. 이 문서 -4. Google C++ Style Guide -5. 수정 대상 module의 기존 local style - -요청 범위 밖 파일을 style-only 이유로 수정하지 않는다. 새 코드는 즉시 준수하고 기존 -코드는 승인된 변경 slice 안에서만 점진적으로 정리한다. - -## Language와 toolchain - -- 최소 language level은 C++17이다. -- Windows validation baseline은 MSVC x64다. -- Compiler extension과 운영체제 전용 type을 public API에 노출하지 않는다. -- Build generator, preset, configuration과 test command는 `.harness/config.json`을 우선한다. -- Standard library, RAII와 value semantics를 manual lifetime management보다 우선한다. -- Vendor linear algebra, sparse, persistence와 OS header는 private adapter 내부에 둔다. - -## 파일과 header - -- File 이름은 소문자 `snake_case`를 사용한다. -- Source는 `.cpp`, header는 `.h`를 사용한다. 이미 존재하는 다른 extension은 별도 migration - 없이 이름만 바꾸지 않는다. -- Header는 self-contained이며 consumer의 transitive include에 의존하지 않는다. -- Full repository path 기반 include guard를 사용한다. - -```cpp -#ifndef FEM_CORE_VECTOR3_H_ -#define FEM_CORE_VECTOR3_H_ - -namespace fem { - -class Vector3 {}; - -} // namespace fem - -#endif // FEM_CORE_VECTOR3_H_ -``` - -Include group은 대응 header, C system, C++ standard library, third party, project header -순서다. 각 group 사이에 빈 줄을 두고 직접 사용하는 declaration의 header를 include한다. - -## 이름 규칙 - -| 대상 | 규칙 | 예 | -| --- | --- | --- | -| class, struct, enum, alias | `PascalCase` | `ElementProperty` | -| function, method, accessor | `PascalCase` | `ComputeResidual()` | -| local variable, parameter | `snake_case` | `element_id` | -| class data member | `snake_case_` | `youngs_modulus_` | -| struct data member | `snake_case` | `source_label` | -| constant | `kPascalCase` | `kNodeCount` | -| enumerator | `kPascalCase` | `FailureKind::kModel` | -| namespace | `snake_case` | `fem::numerics_internal` | -| macro | `UPPER_SNAKE_CASE` | `FEM_CORE_VECTOR3_H_` | - -Root namespace는 실제 project bootstrap에서 한 번 선택한다. 위 `fem`은 예시이며 여러 -feature가 서로 다른 root namespace를 만들지 않는다. - -이름은 physical/numerical 의미를 드러내야 한다. 넓은 scope의 `data`, `value`, `manager`, -`handler`를 피하고 source label, entity ID, DOF ID와 equation ID를 이름에서 구분한다. - -## Formatting - -- `.clang-format`은 Google 기반, space 2개와 최대 100 columns를 기본으로 한다. -- Tab을 사용하지 않는다. -- Declaration/control statement와 같은 줄에 opening brace를 둔다. -- Namespace body는 들여쓰지 않고 closing namespace comment를 작성한다. -- 한 statement에 한 declaration만 둔다. -- Variable은 가능한 가장 좁은 scope에서 선언과 동시에 초기화한다. -- 의미가 허용하면 `const`, `constexpr`, `explicit`, `override`, `noexcept`와 `[[nodiscard]]`를 - 사용한다. 장식 목적으로 contract를 과장하지 않는다. -- Formatting-only 변경과 behavior 변경을 불필요하게 섞지 않는다. - -## API와 ownership - -- Public interface는 현재 필요한 최소 capability만 제공한다. -- Class는 하나의 명확한 responsibility와 invariant를 가진다. -- Invariant, encapsulation, lifetime 또는 behavior가 없으면 data-only `struct`를 사용할 수 있다. -- 단독 ownership은 `std::unique_ptr` 또는 value로 표현한다. 실제 shared lifetime이 없으면 - `std::shared_ptr`를 사용하지 않는다. -- Non-owning pointer/reference/span의 lifetime과 nullability를 API contract에 기록한다. -- Polymorphic base에는 public virtual destructor가 있어야 한다. -- Downcast와 type switch를 주요 확장 mechanism으로 사용하지 않는다. -- 단일 사용을 위해 abstract factory, registry 또는 future option을 만들지 않는다. -- Public header는 implementation/vendor dependency 방향을 역전하지 않는다. - -## FEM module 규칙 - -- `model`은 validated immutable semantic definition을 소유한다. -- `element`는 local residual/tangent와 recovery를 소유하며 global matrix를 직접 수정하지 않는다. -- `material`은 constitutive trial/commit/revert contract를 소유한다. -- `dof`는 active DOF와 equation numbering을 소유한다. Node가 equation ID를 영구 저장하지 - 않는다. -- `assembly`는 sparsity, scatter와 deterministic reduction을 소유한다. -- `constraints`는 equation policy를 소유한다. -- `analysis`는 procedure lifecycle, convergence와 state commit을 소유한다. -- `results`는 physical result identity를 소유하고 persistence layout을 알지 않는다. -- `io`와 `storage`는 external representation을 core contract에 mapping한다. -- `numerics`는 physical entity를 알지 않는 backend-neutral operation을 제공한다. - -비슷해 보이는 수식을 공통화하기 전에 units, sign, coordinates, result location, state lifetime와 -tolerance가 같은지 확인한다. 한 번만 사용하는 logic을 future flexibility를 위해 framework로 -만들지 않는다. - -## 수치 코드 - -- DOF/component/local-node ordering은 type, constant 또는 contract로 명시한다. -- Shape derivative, Jacobian, quadrature weight와 coordinate transform의 convention을 수식과 - test에서 동일하게 유지한다. -- Residual과 tangent의 부호 및 linearization point를 주석/contract에 기록한다. -- Parallel worker는 owner가 정해진 output만 수정하고 floating-point reduction 순서를 - 의도적으로 결정한다. -- 임의 clamp, `max(1, ...)`, missing-row ignore와 silent fallback을 추가하지 않는다. -- `double` 값의 equality를 일반적인 engineering quantity에 직접 사용하지 않고 - `docs/TOLERANCE.md`의 목적별 metric을 사용한다. -- 성능 변경 전 benchmark와 correctness baseline을 기록한다. Expression order를 바꾸는 - optimization은 numerical regression을 다시 검증한다. - -## Error와 failure atomicity - -- 예상 가능한 실패는 project의 `Status`/`Result` 계약으로 반환한다. -- Backend exception과 raw error code가 public solver boundary를 통과하지 않게 한다. -- Unsupported type/property/material/procedure 조합은 structured diagnostic으로 fail closed한다. -- Candidate model/state/result를 완성해 검증한 뒤 authoritative owner에 commit한다. -- Partial failure가 기존 committed state 또는 정상 result artifact를 덮어쓰지 않게 한다. -- Assertion은 사용자 입력 오류가 아니라 내부 invariant 위반에 사용한다. - -## Documentation - -Public/protected production declaration은 필요한 경우 다음을 영어 Doxygen로 기록한다. - -- purpose와 physical/numerical meaning -- units, coordinates, ordering과 valid range -- ownership, lifetime, precondition과 failure -- deterministic behavior 또는 backend limitation -- sign, trial/committed state와 destructive side effect 주의 - -```cpp -/// @brief Computes an element contribution in the declared local DOF order. -/// @return A finite residual and consistent tangent, or a structured failure. -/// @note This function does not modify the global system or committed state. -virtual Result Evaluate( - const ElementContext& context) const = 0; -``` - -코드가 말하는 내용을 번역하는 comment는 쓰지 않는다. 비자명한 formulation, operation order, -ownership 또는 선택 이유를 설명한다. Test helper에는 형식적인 Doxygen를 요구하지 않는다. - -## Test와 변경 관리 - -- Production C++ 변경은 관련 test 변경과 같은 patch에 포함한다. -- `RED -> observed failure -> minimal GREEN -> focused VERIFY -> full VERIFY`를 따른다. -- Test는 정상값뿐 아니라 invalid combination, identity/order, state rollback, determinism과 - error category를 검증한다. -- Numerical feature는 직접 kernel test와 독립 system/benchmark evidence를 모두 가진다. -- Reference artifact나 tolerance를 implementation 결과에 맞춰 수정하지 않는다. -- 새 warning, flaky test 또는 검증되지 않은 platform 성공 주장을 추가하지 않는다. -- Commit을 요청받으면 review 가능한 module slice와 Conventional Commits 형식을 사용한다. - -## Tooling - -Repository 설정과 존재하는 target에만 적용한다. - -```powershell -clang-format --dry-run --Werror -clang-tidy -- -std=c++17 -cmake --build .harness/build --config Debug -ctest --test-dir .harness/build -C Debug --output-on-failure -``` - -Tool, build metadata 또는 target이 없으면 검사를 성공으로 표시하지 말고 `미실행`과 이유를 -보고한다. Generated documentation, build directory, cache와 runtime output은 source control에 -넣지 않는다. - -## Implementation checklist - -- 승인된 feature contract와 직접 관련된 파일만 변경한다. -- Public dependency 방향과 owner가 architecture와 일치한다. -- 실패 test를 구현 전에 관찰했다. -- Units, coordinates, identity와 local/global ordering이 드러난다. -- Trial/committed state와 failure atomicity가 보존된다. -- Focused test와 가능한 full build/test를 실제로 실행했다. -- 미실행 검사, warning과 residual risk를 evidence에 기록했다. diff --git a/docs2/HARNESS.md b/docs2/HARNESS.md deleted file mode 100644 index fa59b17..0000000 --- a/docs2/HARNESS.md +++ /dev/null @@ -1,245 +0,0 @@ -# Harness Operations Guide - -## 1. 역할과 현재 상태 - -Harness는 agent가 작성한 implementation Step을 독립 Codex session에서 실행하고, C/C++ -변경의 TDD guard, configured MSVC build/test, 상태와 local Git commit을 관리한다. - -현재 repository에는 solver C++ source와 build metadata가 없다. 따라서 repository 자체에서는 -Python Harness regression suite를 검증하며, C++ build 성공을 주장하지 않는다. Solver feature가 -CMake 또는 Visual Studio metadata를 추가하면 Stop hook이 해당 project를 검증한다. - -## 2. 요구 환경 - -- Windows와 Python 3.11 이상 -- Git과 Codex CLI -- Harness test 실행용 `uv` -- C++ project를 검증할 때 Visual Studio Desktop development with C++, MSBuild, CMake/CTest - -실제 toolchain, generator, configuration과 test command는 `.harness/config.json` 및 project -build metadata가 source of truth다. - -## 3. 설정 - -설정이 없으면 Harness는 자동 감지를 사용한다. Override가 필요할 때만 tracked example을 -machine-local 설정으로 복사한다. - -```powershell -Copy-Item .harness/config.example.json .harness/config.json -``` - -`.harness/config.json`은 ignore되며 code와 같은 실행 가능한 신뢰 경계다. Preset과 test -executable은 arbitrary child process를 실행할 수 있으므로 review 없이 외부에서 받은 설정을 -사용하지 않는다. - -지원하는 `projectType`은 `auto`, `cmake`, `msbuild`다. Unknown field, absolute/escaping path와 -불완전한 preset은 거부된다. TDD pattern은 directory separator가 없는 safe basename이어야 하며 -format field로 `{stem}`만 사용할 수 있다. - -### CMake - -```json -{ - "version": 1, - "projectType": "cmake", - "cmake": { - "sourceDir": ".", - "binaryDir": ".harness/build" - } -} -``` - -`binaryDir`은 non-preset plan에서도 사용할 수 있다. Preset을 사용하면 `configurePreset`, -`buildPreset`, `testPreset`, `binaryDir`를 모두 지정한다. 자동 감지에서도 명시된 -`cmake.sourceDir`을 먼저 검사한다. - -Preset이 없을 때의 기본 계획은 다음 형태다. - -```powershell -cmake -S -B -A x64 -cmake --build --config Debug -ctest --test-dir -C Debug --show-only=json-v1 -ctest --test-dir -C Debug --output-on-failure -``` - -Harness는 compiler metadata가 MSVC인지, CTest가 한 개 이상의 test를 발견했는지도 확인한다. - -### Visual Studio/MSBuild - -```json -{ - "version": 1, - "projectType": "msbuild", - "msbuild": { - "solution": "Solver.sln", - "configuration": "Debug", - "platform": "x64", - "testCommand": ["build/tests/Debug/SolverTests.exe"] - } -} -``` - -`testCommand`는 필수이며 첫 항목은 repository-relative executable path여야 한다. Bare PATH -program, absolute path와 repository escape는 허용되지 않는다. 인수는 배열의 후속 항목으로 -전달된다. - -### TDD path mapping - -```json -{ - "version": 1, - "tdd": { - "testRoots": ["tests", "integration-tests"], - "testPatterns": ["{stem}_test.cpp", "test_{stem}.cpp"], - "exclude": ["generated/**"] - } -} -``` - -Project exclude는 Harness의 build/vendor/generated 기본 exclude에 추가된다. Production C/C++ -파일을 편집하려면 mapping되는 test 파일이 먼저 존재해야 한다. - -## 4. 계획과 실행 - -Coordinator가 승인된 feature bundle로 planning/execution을 dispatch하면 routine local 작업을 -위해 별도 사용자 승인을 반복하지 않는다. Planning Agent는 `.agents/skills/harness/SKILL.md`에 -따라 `phases/` index와 self-contained Step을 만든다. - -Executor 시작 전 worktree는 선택한 phase의 선언된 control file 밖에서 깨끗해야 한다. 허용되는 -control file은 top/phase index, phase index에 선언된 `stepN.md`와 해당 local raw output뿐이다. - -```powershell -git status --short -python scripts/execute.py -``` - -Executor는 다음을 수행한다. - -1. Safe phase name, repository/phase containment, top-level index, phase metadata, contiguous Step와 - status order 검증 -2. Implementation profile, exact Git top-level, sandbox 권한과 strict worktree preflight -3. `feat-` branch checkout/create -4. Implementation Agent 역할, project guardrail, prior summary와 current Step 주입 -5. Current Step의 Codex session 실행과 최대 2회 transport attempt -6. Exit code와 Step payload 검증 -7. Implementation path와 phase metadata의 path-scoped local commit -8. 모든 Step 완료 시 phase closure - -일반 implementation failure는 Executor가 반복 수정하지 않는다. Step을 `error`로 기록하고 -Coordinator가 normalized `retry_key`와 correction budget으로 route한다. - -## 5. Sandbox와 외부 변경 - -기본 sandbox는 `workspace-write`다. Windows native sandbox가 실제 compiler process를 막는 -것이 재현된 경우에만 사용자가 해당 실행을 명시 승인하고 clean linked worktree에서 다음 두 -조건을 함께 제공한다. - -```powershell -$env:FEM_HARNESS_CODEX_SANDBOX = "danger-full-access" -python scripts/execute.py --approve-danger-full-access -Remove-Item Env:FEM_HARNESS_CODEX_SANDBOX -``` - -Primary worktree, dirty worktree, 환경 변수만 설정한 실행은 거부된다. `danger-full-access`는 -hook을 끄지 않지만 hook이 완전한 sandbox라는 의미도 아니다. - -원격 push는 별도 critical action이다. 사용자가 정확한 branch push를 승인한 경우에만 -실행한다. - -```powershell -python scripts/execute.py --push -``` - -Executor는 force push, history rewrite, tag, publish 또는 deploy를 수행하지 않는다. - -## 6. Hook 동작 - -`.codex/hooks.json`은 [Codex Hooks contract](https://learn.chatgpt.com/docs/hooks)에 따라 -PreToolUse와 Stop hook을 등록한다. Hook은 자동 실행하며 검증 대체를 위해 수동 호출하지 -않는다. - -### PreToolUse - -- 위험한 Git/delete/database command pattern을 exit code 2로 차단한다. -- Implementation session의 commit, push, branch/switch, tag, merge/rebase와 history 변경 Git - command를 차단한다. 이 동작은 Executor 또는 별도 승인된 외부 작업만 소유한다. -- 공식 `apply_patch` payload의 `tool_input.command`에서 patch path를 추출한다. -- C/C++ production path에 대응 test가 없으면 편집을 차단한다. -- Malformed/unknown edit payload는 fail closed한다. - -Test path 존재 검사는 실제 RED, assertion 품질 또는 coverage를 증명하지 않는다. - -### Stop - -- Payload의 `cwd`에서 Git root를 찾고 재진입을 방지한다. -- Config/discovery/toolchain/adapter plan을 전체 deadline 안에서 실행한다. -- 실패 시 current Codex hook contract의 `{"decision":"block","reason":"..."}`을 반환해 - 같은 session이 수정하게 한다. -- `stop_hook_active` 재진입은 즉시 허용한다. -- Config argument의 control character를 거부하고 예상하지 못한 일반 예외도 block response로 - 변환한다. -- C/C++ source와 build metadata가 모두 없으면 검증 target 없음으로 정상 종료한다. -- C/C++ source만 있고 build metadata가 없으면 orphan project로 차단한다. - -## 7. Git과 runtime artifact - -Preflight 이후 생성된 implementation path만 feature commit에 stage한다. 각 commit 직전에 -working tree는 보존한 채 index를 초기화한 다음 대상 path만 다시 stage하므로 agent가 미리 stage한 -metadata가 feature commit에 섞이지 않는다. Selected phase index, Step과 timestamps는 별도 -metadata commit에 stage한다. 관련 없는 pre-existing worktree 변경이나 phase 안의 미선언 파일이 -있으면 branch checkout 전에 실행을 거부한다. - -각 Codex attempt 전후에는 symbolic branch와 HEAD도 비교한다. Session이 자체 commit, checkout -또는 branch 변경으로 hook을 우회하면 결과를 신뢰하지 않고 current Step을 error로 고정한다. - -Raw Codex `stdout`/`stderr`는 다음 local diagnostic file에 저장하지만 source control에는 -포함하지 않는다. - -```text -phases//step-output.json -``` - -`.gitignore`는 위 파일, `.harness/config.json`, build output와 Python cache를 제외한다. Raw -output은 credential을 포함할 수 있으므로 공유하거나 artifact로 게시하기 전에 검토한다. -Control file은 non-link regular file로 읽고 phase/root containment를 매번 확인한다. Index, -instruction 복구와 raw output write는 같은 directory의 임시 파일을 `os.replace`하는 atomic -write를 사용해 symlink·hardlink target을 따라가 덮어쓰지 않는다. - -## 8. 상태와 복구 - -| Step status | 필수 payload | 다음 처리 | -| --- | --- | --- | -| `pending` | 없음 | Executor가 선택 가능 | -| `completed` | `summary` | timestamp와 commits 후 다음 Step | -| `error` | `error_message` | Coordinator classification 전 중단 | -| `blocked` | `blocked_reason` | 환경/권한/critical decision 해결 전 중단 | - -Nonzero Codex exit는 Step이 `completed`를 썼더라도 신뢰하지 않는다. 두 transport attempt가 -실패하면 `error`와 `failed_at`을 기록한다. 재개는 Coordinator가 owner와 evidence를 확인한 뒤 -current Step을 `pending`으로 돌리는 방식으로 수행한다. Executor는 stale outcome timestamp를 -정리한다. - -Codex session 전후로 top-level index와 모든 `stepN.md`를 byte 비교하고 phase index의 current -Step outcome 외 변경을 거부한다. Future Step, instruction 또는 control metadata가 바뀌면 snapshot을 -복원하고 current Step을 trusted `error`로 기록하므로 다음 실행에서 조작된 완료 상태를 수락하지 -않는다. - -## 9. Harness 자체 검증 - -```powershell -uv run --with pytest python -B -m pytest -v -rs -python -B scripts/execute.py --help -``` - -실제 Executor 기능 시험은 현재 repository에서 직접 실행하지 않는다. Branch/commit/Codex를 -변경하기 때문이다. Regression suite가 temporary Git repository와 hook subprocess를 사용해 -state, Git, payload와 failure behavior를 검증한다. - -## 10. 한계 - -- `shell=False`와 repository-relative executable은 shell injection을 줄이지만 configured - executable/preset의 side effect를 격리하지 않는다. -- PreToolUse는 shell redirection 등 모든 파일 쓰기를 완전하게 해석하지 않는다. -- Stop pass는 configured target의 build/test 결과이며 formulation과 physics correctness를 - 대신하지 않는다. -- External solver reference execution과 reference artifact 생성은 Harness 기본 권한 밖이다. diff --git a/docs2/HARNESS_WORKFLOW.md b/docs2/HARNESS_WORKFLOW.md deleted file mode 100644 index ffd8255..0000000 --- a/docs2/HARNESS_WORKFLOW.md +++ /dev/null @@ -1,285 +0,0 @@ -# Harness Execution Workflow - -## 1. 목적 - -Harness는 승인된 구조 FEM feature contract를 작은 test-first Step으로 실행하고, 독립 Codex -session, hook validation, 상태와 local Git commit을 deterministic하게 연결한다. 제품 workflow -상태는 Coordinator가 소유하고, Executor는 선택된 implementation phase의 기계적 실행만 -소유한다. - -## 2. 전체 흐름 - -```text -approved feature bundle - -> Coordinator dispatches Implementation Planning - -> Planning Agent materializes phase/index/step files - -> Coordinator checks plan evidence and dispatches local execution - -> Executor preflight and feature branch - -> current Step in an independent Codex session - -> PreToolUse guard before commands/edits - -> RED -> minimal GREEN -> focused/full VERIFY - -> Stop hook configured build/test before response completion - -> Executor validates exit + Step payload - -> completed: path-scoped commits, next Step - -> error: stop and return evidence to Coordinator - -> blocked: stop until environment/user authority changes - -> all completed: phase closure - -> Coordinator dispatches physics evaluation -``` - -승인된 scope 안의 planning materialization과 기본 local execution에는 stage마다 사용자 확인을 -반복하지 않는다. Physics/scope/public compatibility/product acceptance, authoritative artifact, -external authority 또는 destructive/remote action만 별도 사용자 결정이다. - -## 3. 책임 경계 - -| Component | Owns | Does not own | -| --- | --- | --- | -| Coordinator | workflow transition, contract revision, `retry_key`, correction budget | Step execution과 Git mechanics | -| Planning Agent | implementation plan과 assigned phase files | source 구현과 Step 선택 | -| Executor | preflight, branch, first pending Step, transport attempts, timestamps, local commits | physics/contract 판단과 correction 분류 | -| Implementation Agent | current Step의 code/test/report와 result payload | 다른 Step, upstream contract와 workflow transition | -| PreToolUse | dangerous-pattern 및 C++ test-path guard | 실제 RED와 correctness 증명 | -| Stop | configured project의 build/test gate | numerical/physics/release 판정 | - -## 4. Phase 계약 - -Top-level `phases/index.json`은 phase를 정확히 한 번 식별한다. - -```json -{ - "phases": [ - {"dir": "linear-solid", "status": "pending"} - ] -} -``` - -`phases/linear-solid/index.json`은 directory와 같은 `phase`, non-empty project와 0부터 연속인 -Step을 가진다. - -```json -{ - "project": "Structural FEM Solver", - "phase": "linear-solid", - "steps": [ - {"step": 0, "name": "element-kernel", "status": "pending"}, - {"step": 1, "name": "global-assembly", "status": "pending"} - ] -} -``` - -허용 status는 `pending`, `completed`, `error`, `blocked`다. Completed Step은 앞쪽의 연속된 -prefix여야 하며 `summary`가 필요하다. Error/blocked는 첫 미완료 Step 하나에만 올 수 있고 -각각 `error_message`/`blocked_reason`이 필요하다. 뒤 Step은 pending이다. - -Phase/Step 이름은 safe slug여야 하며 directory escape, absolute path, noncontiguous number, -unknown status, missing Step file과 duplicate top-level phase는 실행 전에 거부된다. -Phase 안의 허용 파일은 index, 선언된 `stepN.md`와 해당 ignored raw output뿐이며 임의 note나 -미선언 Step file은 metadata ownership을 얻지 않는다. - -## 5. Step 설계 - -각 `stepN.md`는 이전 대화 없이 실행 가능한 작업 지시서다. - -```markdown -# Step N: - -## Required inputs -- architecture와 직접 upstream contract -- 이전 Step에서 소비할 exact artifact - -## Owned changes -- exact path, type/function과 observable behavior - -## Test-first sequence -- 먼저 만들 test와 예상 RED 원인 -- 최소 GREEN 범위 - -## Acceptance commands -- focused test -- configured build/full test -- required comparison - -## Invariants and stop conditions -- units, signs, ordering, state, schema, tolerance와 forbidden scope -``` - -한 Step 안에서 RED를 실제 관찰하고 GREEN/full validation까지 완료한다. “test만 추가” Step과 -“다음 Step에서 구현”을 분리하면 Stop hook과 phase invariants에 맞지 않는다. - -Planning Agent는 repository configuration과 실제 target을 조사해 command를 적는다. 존재하지 -않는 target을 예시 command로 대신하지 않는다. Upstream physics/schema/tolerance가 불완전하면 -Step에 추정값을 넣지 않고 `return-upstream`한다. - -## 6. Executor preflight - -`python scripts/execute.py `는 Codex 실행 전에 다음을 검증한다. - -1. Harness root와 phase name/path containment 및 exact Git top-level -2. Top-level과 phase JSON schema 및 status order -3. Implementation Agent profile의 model, reasoning effort와 role instructions -4. Sandbox mode와 elevated-run 조건 -5. Git repository 및 selected phase 밖의 clean worktree - -Pre-existing unrelated tracked, staged 또는 untracked path가 있으면 branch 변경 전에 중단한다. -Selected phase의 선언된 plan 파일은 materialization 직후라 아직 dirty일 수 있으며 metadata commit -owner는 Executor다. 다른 Git repository 안에 중첩된 framework, 외부로 연결된 phase path와 phase -안의 미선언 파일은 거부한다. - -## 7. Branch와 prompt - -Executor는 `feat-`를 checkout하거나 생성한다. Prompt는 다음을 조합한다. - -```text -Implementation Agent developer instructions -+ AGENTS.md와 repository guardrail docs -+ completed Step summaries -+ prior transport failure diagnostic, if any -+ current stepN.md -``` - -Role instructions가 단지 model 선택에만 사용되어서는 안 된다. Source/test write boundary, -upstream immutability, skill과 evidence contract가 prompt에 포함된다. - -각 Step은 새 `codex exec` process다. 이전 conversation 전체를 전달하지 않고 approved files와 -compact summary를 authoritative context로 사용한다. - -## 8. PreToolUse - -PreToolUse input은 current Codex hook contract의 `tool_name`, `tool_input`, `cwd`를 사용한다. - -- Shell 계열은 dangerous command pattern을 검사한다. -- Commit, push, checkout/switch, branch, tag와 history-changing Git command는 Executor ownership - 위반으로 차단한다. -- `apply_patch`는 `tool_input.command`의 `*** Add/Update/Delete File`과 `Move to` path를 읽는다. -- Edit/Write 계열은 direct path/edits를 읽는다. -- Malformed JSON, missing tool/path와 invalid input type은 exit code 2로 fail closed한다. -- Production C/C++ path는 config의 roots/patterns로 mapping되는 test가 있어야 한다. - -Hook은 shell redirection 등 모든 write mechanism을 완전하게 인식하지 않는다. Implementation -Agent와 code review가 actual RED/GREEN evidence를 계속 책임진다. - -## 9. Stop validation - -Stop hook은 response 직전에 실행된다. - -```text -payload/root validation - -> project/config discovery - -> MSVC toolchain discovery - -> adapter validation plan - -> configure/build - -> test discovery - -> full tests -``` - -모든 subprocess는 `shell=False`, repository-contained working directory와 전체 1,800초 deadline을 -사용한다. Child process에는 reentry flag를 전달한다. -Config의 command/path 문자열에는 control character를 허용하지 않으며 hook 경계의 예상하지 못한 -일반 예외도 traceback 종료 대신 block response로 변환한다. - -실패 시 stdout에 다음 protocol을 반환한다. - -```json -{"decision": "block", "reason": ""} -``` - -Codex는 같은 session에서 수정할 수 있다. Hook 자체의 malformed payload도 block response이며, -`stop_hook_active: true` 또는 child reentry는 재귀를 피하기 위해 바로 허용된다. - -### Project discovery - -1. Explicit `projectType` -2. Configured CMake source directory의 preset/CMakeLists -3. Root의 한 개 solution 또는 project -4. C/C++와 metadata가 모두 없으면 no-target success -5. C/C++만 있으면 orphan-project failure - -CMake plan은 MSVC compiler identity와 nonzero CTest inventory를 추가 검사한다. MSBuild plan은 -repository-relative test executable을 반드시 요구한다. - -## 10. Step result와 transport attempt - -Codex process exit가 0인 경우에만 Step payload를 평가한다. - -- `completed + summary`: stale error/block field를 제거하고 `completed_at` 기록 -- `error + error_message`: `failed_at` 기록 후 phase error -- `blocked + blocked_reason`: `blocked_at` 기록 후 phase blocked -- status 미갱신 또는 invalid payload: error - -Nonzero exit가 `completed` payload와 함께 와도 completion을 폐기한다. Authentication/CLI/sandbox -helper처럼 분류 가능한 environment failure는 즉시 중단한다. 그 밖의 process/session failure만 -최대 두 번 transport attempt한다. - -각 attempt 전의 top-level index와 `stepN.md` byte, phase index metadata와 모든 non-current Step을 -snapshot한다. Session은 current Step의 `status`, `summary`, `error_message`, `blocked_reason`만 -바꿀 수 있다. 위반 또는 malformed exit payload가 있으면 snapshot을 복원하고 current Step을 -trusted error로 기록해 재실행 우회를 차단한다. -Symbolic branch와 HEAD도 같은 방식으로 비교하며 agent-side commit/checkout은 실패다. Control -file read는 link 및 scope escape를 거부하고, 복구와 raw-output write는 atomic replacement로 -link target overwrite를 방지한다. - -Transport attempt는 implementation correction이 아니다. Implementation/test/reference failure는 -새 session에서 세 번 자동 수정하지 않고 Coordinator로 반환한다. Coordinator가 동일 -`feature|gate|classification|contract-revision` key의 Correction Agent를 한 번만 사용할 수 있다. - -## 11. Git ownership - -Step success 시 Executor는 preflight 후 생긴 현재 changes를 다시 분류한다. - -1. Selected phase 밖 implementation paths를 feature commit에 stage -2. Selected phase index/Step/timestamps와 top-level index를 metadata commit에 stage -3. `stepN-output.json`은 항상 제외 - -모든 Git command failure는 fatal이다. Commit 직전에는 working tree를 보존하는 mixed index -reset 후 `git add -A`를 pathspec과 `--` 뒤에서만 사용한다. 따라서 pre-staged 파일이 다른 commit에 -섞이지 않는다. Unicode와 space를 포함한 porcelain path 및 rename의 양쪽 identity는 NUL format으로 -읽어 ownership을 검증한다. - -Raw output은 local diagnostic이며 `.gitignore` 대상이다. Step 종료 후 implementation path가 -uncommitted 상태로 남으면 phase finalization을 거부한다. - -모든 Step이 completed이면 phase/top-level `completed_at`을 기록하고 final metadata commit을 -만든다. `--push`는 사용자가 remote action을 별도로 승인한 경우만 실행한다. - -## 12. Elevated sandbox - -Default는 `workspace-write`다. `danger-full-access`는 다음 조건을 모두 만족해야 한다. - -- 사용자가 exact elevated run을 명시적으로 승인 -- `FEM_HARNESS_CODEX_SANDBOX=danger-full-access` -- `--approve-danger-full-access` flag -- primary가 아닌 linked Git worktree -- 완전히 clean worktree - -조건 하나라도 없으면 Codex를 실행하지 않는다. Hook trust bypass flag는 등록된 reviewed hook을 -automation에서 실행하기 위한 것이며 sandbox bypass 권한이 아니다. - -## 13. Recovery - -Error/blocked Step을 임의로 pending으로 돌리기 전에 Coordinator가 evidence를 분류한다. - -| Classification | Route | -| --- | --- | -| clear implementation defect | bounded implementation fix | -| repeated/unclear implementation defect | one Correction allowance, then rerun | -| formulation/requirement/reference/I/O defect | owning upstream agent | -| toolchain/license/credential | `blocked-environment` or critical user action | -| same retry key after correction | no second correction; route or stop | - -재개 시 current Step만 pending으로 변경한다. Executor가 stale summary, failure와 block timestamp를 -정리한다. Contract revision 없는 문구 변경으로 새 retry key를 만들지 않는다. - -## 14. 검증 evidence - -Harness report는 다음을 기록한다. - -- selected configuration, sandbox와 worktree condition -- exact command, cwd, exit code, duration과 output tail -- focused RED와 GREEN 결과 -- full build/test count와 warning -- comparison identity/precheck/metric/tolerance result when applicable -- commits, ignored raw output와 unexecuted checks - -Hook pass, process exit 0와 agent narrative 중 하나만으로 feature gate를 통과시키지 않는다. -Numerical/physics/release owner가 같은 artifact revision을 독립 검토한다. diff --git a/docs2/PRD.md b/docs2/PRD.md deleted file mode 100644 index 2cc8e4d..0000000 --- a/docs2/PRD.md +++ /dev/null @@ -1,148 +0,0 @@ -# Product Requirements: Structural FEM Solver Framework - -## 1. 제품 정의 - -이 프로젝트는 유한요소 구조해석 솔버를 신뢰성 있게 확장할 수 있는 C++ 해석 코어와 -그 개발·검증 workflow를 구축한다. 지원하는 해석, 요소, 재료와 입출력 형식은 feature별로 -명시하며, 구현 여부와 검증 수준을 추적 가능한 evidence로 제공한다. - -현재 repository의 제품은 agent/skill 문서 체계와 C++ 개발 Harness를 포함한 초기 -framework다. 아직 C++ solver build metadata가 없으므로 특정 해석 기능이 구현되었다고 -간주하지 않는다. - -## 2. 대상 사용자 - -- 구조해석 알고리즘과 요소 정식화를 구현하는 solver 개발자 -- 해석 결과의 수치 정확성, 물리적 타당성과 회귀를 검토하는 CAE 엔지니어 -- 입력·결과 형식과 외부 reference model을 관리하는 integration 개발자 -- 기능별 요구사항, 검증 evidence와 release readiness를 추적하는 maintainer - -## 3. 제품 목표 - -1. 해석 물리와 수치 계약을 코드 구조에 명확히 반영한다. -2. 작은 요소·재료·해석 기능을 기존 기능을 깨지 않고 단계적으로 추가할 수 있게 한다. -3. 동일 입력과 설정에서 재현 가능한 assembly, solve와 output을 제공한다. -4. 단위 테스트, analytical/benchmark 검증, mesh convergence, invariant와 독립 reference - 비교를 결합해 correctness evidence를 축적한다. -5. 지원하지 않는 모델 의미를 조용히 근사하지 않고 명확한 진단으로 거부한다. -6. agent가 일반적인 설계·구현·검증 결정을 자율적으로 처리하고, 제품 의미를 바꾸는 - 결정만 사용자에게 요청하게 한다. - -## 4. 비목표 - -- 특정 상용 solver의 비공개 알고리즘을 복제하는 것 -- Abaqus 전체 keyword, 모든 element/material/procedure와 bitwise 결과 호환을 약속하는 것 -- 검증되지 않은 기능을 입력만 받아들이는 형태로 노출하는 것 -- 하나의 sparse backend, 저장 형식 또는 운영체제를 solver core 계약으로 고정하는 것 -- 모델 생성용 GUI, CAD geometry kernel, mesher 또는 범용 전후처리기를 초기 범위에 포함하는 것 -- 외부 결과와 수치가 비슷하다는 사실만으로 물리·수치 정확성을 선언하는 것 - -## 5. 핵심 기능 요구사항 - -### 5.1 모델 의미 - -- Node, element, material, property, set, constraint, load와 analysis step을 명시적 semantic - model로 표현해야 한다. -- Source label, internal identity, DOF와 equation identity를 구분해야 한다. -- 단위계, 좌표계, component 순서와 부호를 입력 및 결과 계약에 기록해야 한다. -- 잘못된 참조, 중복 identity, 비유한 값과 지원하지 않는 조합을 analysis 시작 전에 - 진단해야 한다. - -### 5.2 요소 및 재료 확장 - -- Element formulation은 kinematics, interpolation, integration, residual/tangent, - state variable과 recovery 계약을 함께 제공해야 한다. -- Material model은 committed/trial state의 lifetime과 update 실패 의미를 정의해야 한다. -- Element나 material 추가가 global assembly, parser 또는 특정 linear algebra backend의 - 변경을 필수로 만들지 않아야 한다. -- 각 기능은 적용 범위와 알려진 locking, hourglass, conditioning 또는 convergence 제한을 - 문서화해야 한다. - -### 5.3 해석 절차 - -- Analysis procedure는 model validation, DOF 구성, assembly, constraint 적용, solve, - convergence 판단, state commit과 result recovery 순서를 소유해야 한다. -- Linear/nonlinear, static/dynamic, eigen 또는 contact 계열 기능은 공통 이름 아래 암묵적으로 - 섞지 않고 feature contract로 활성화해야 한다. -- 반복해석은 residual과 correction을 구분하고 실패 시 마지막 committed state를 보존해야 - 한다. - -### 5.4 입출력 - -- Solver core와 input/output adapter를 분리해야 한다. -- 지원 형식과 subset은 versioned contract로 공개해야 한다. -- Abaqus `.inp` 호환 feature를 선택한 경우 model data와 history data의 공개 의미를 - 보존하고, 지원 keyword와 option, validation, 미지원 동작을 명시해야 한다. -- Unknown semantic construct는 기본적으로 오류이며, 결과에 영향을 주지 않는다고 계약된 - 항목만 warning으로 처리할 수 있다. -- 결과는 entity, step/frame, location, coordinate system, component, units와 provenance로 - 식별 가능해야 한다. - -### 5.5 진단과 실패 - -- Parser, model, formulation, assembly, solver, convergence, recovery와 I/O 실패를 구분하는 - structured diagnostic을 제공해야 한다. -- 오류에는 가능한 경우 source location 또는 semantic entity identity와 수정 가능한 - 설명을 포함해야 한다. -- 실패한 analysis가 부분적으로 authoritative한 결과 파일을 남겨 성공으로 오인되게 해서는 - 안 된다. - -### 5.6 검증과 추적성 - -- 모든 필수 requirement는 verification method, acceptance criterion과 evidence에 연결되어야 - 한다. -- 수치 feature는 최소한 직접 kernel test와 독립적인 system/benchmark 검증을 가져야 한다. -- Reference comparison은 model 의미와 result identity를 먼저 일치시킨 뒤 - `docs/TOLERANCE.md`에 정의된 metric을 적용해야 한다. -- Reference artifact는 read-only이며 구현 결과를 맞추기 위해 수정할 수 없다. -- Release verdict는 requirement부터 physics review까지 동일 feature revision의 evidence만 - 사용해야 한다. - -### 5.7 개발 자동화 - -- C++ 변경은 실패 test를 먼저 관찰하는 TDD workflow를 따라야 한다. -- Harness는 repository 설정에서 build system과 test command를 결정하고 shell string이 - 아닌 검증된 argument list를 실행해야 한다. -- 자동화는 사용자의 관련 없는 working-tree 변경을 commit하거나 삭제하지 않아야 한다. -- 실패, timeout과 미실행 검사는 성공으로 승격되지 않아야 한다. - -## 6. 품질 속성 - -| 속성 | 요구사항 | -| --- | --- | -| Correctness | 공식화된 방정식, 독립 검증과 물리 invariant로 입증한다. | -| Determinism | 동일 platform/config/input에서 ordering과 결과 identity가 재현된다. | -| Traceability | Requirement, formulation, code, test, artifact와 verdict를 feature ID로 연결한다. | -| Extensibility | Core 변경 없이 adapter/backend를, owner 경계를 깨지 않고 physics 기능을 추가한다. | -| Diagnosability | 실패 단계, entity, 원인과 실행 evidence를 구조화해 남긴다. | -| Portability | Core C++는 vendor/OS type을 노출하지 않으며 현재 Windows/MSVC baseline을 검증한다. | -| Safety | 미지원 의미는 fail closed, artifact 갱신과 외부 변경은 명시적 권한 아래 수행한다. | -| Performance | 정확성과 재현성을 먼저 보존하고 측정된 병목에만 최적화를 적용한다. | - -## 7. Feature 완료 조건 - -Feature는 다음 조건을 모두 만족할 때만 완료된다. - -- 요구사항과 지원/비지원 범위가 식별 가능하다. -- formulation과 numerical review가 같은 convention을 사용한다. -- I/O 및 result identity가 versioned contract에 정의되어 있다. -- 관련 unit/integration/benchmark test가 통과한다. -- 필요한 build, reference comparison과 physics sanity check가 실제로 실행되었다. -- 알려진 제한과 미실행 검사가 release evidence에 기록되었다. -- 동일 revision의 artifact digest가 handoff chain 전체에서 일치한다. - -## 8. 단계적 제공 원칙 - -초기 feature는 하나의 작은 해석 capability를 end-to-end로 완성하는 vertical slice로 -선정한다. 요소 종류나 analysis family를 넓히기 전에 semantic model, deterministic -assembly, diagnostic, result identity와 검증 경로를 먼저 안정화한다. 구체적인 첫 해석 -기능은 요구사항 단계에서 결정하며 이 PRD가 임의로 선결정하지 않는다. - -## 9. 성공 지표 - -- 필수 requirement의 verification evidence 연결률 100% -- 지원 feature의 blocking regression test 통과율 100% -- 알려지지 않은 semantic input의 silent acceptance 0건 -- 관련 없는 사용자 파일을 자동화가 수정·commit한 사례 0건 -- 같은 failure signature의 무한 agent 재시도 0건 -- release verdict에서 미실행 검사를 통과로 표시한 사례 0건 diff --git a/docs2/SOLVER_AGENT_DESIGN.md b/docs2/SOLVER_AGENT_DESIGN.md deleted file mode 100644 index f53a911..0000000 --- a/docs2/SOLVER_AGENT_DESIGN.md +++ /dev/null @@ -1,208 +0,0 @@ -# Structural FEM Solver Agent Design - -## 1. 목적 - -이 문서는 범용 유한요소 구조해석 솔버를 개발하는 agent들의 공통 운영 계약을 정의한다. -`coordinator-agent`만 workflow 상태를 전이하며, specialist agent는 할당된 단계의 판단과 -산출물만 소유한다. 기능별 증거는 `docs/features//`에 보존한다. - -이 계약의 목표는 다음과 같다. - -- 수치적·물리적 책임을 명확히 분리한다. -- 저장소 안에서 되돌릴 수 있는 일반 작업은 agent가 자율적으로 완료한다. -- 사용자 승인은 제품 의미나 acceptance boundary가 바뀌는 결정에만 사용한다. -- 모든 gate 전이를 경로가 확인되는 증거로 재현할 수 있게 한다. -- 실패 재시도를 유한하게 제한하고 계약 문제를 구현 수정으로 숨기지 않는다. - -## 2. 권한과 판단 기준 - -충돌하는 정보는 다음 우선순위로 판단한다. - -1. 사용자가 승인한 feature contract와 critical decision -2. 지배 방정식, 수학적 일관성, 적용되는 표준과 검증된 1차 문헌 -3. Abaqus 공식 공개 문서의 관찰 가능한 입력 syntax·semantics, 출력 정의와 verification 사례 -4. `AGENTS.md`, `docs/ARCHITECTURE.md`, `docs/ADR.md`, `docs/TOLERANCE.md`와 기존 승인 계약 -5. 저장소 관례에 맞는 가장 단순하고 결정적인 구현 - -Abaqus는 외부 reference convention이다. Agent는 지원하기로 한 공개 입력의 의미, 해석 -절차, 출력량 정의 및 검증 사례를 참고할 수 있지만 Abaqus의 비공개 알고리즘, 내부 자료 -구조, 수렴 제어 구현 또는 결과 생성 방식을 추정하거나 내부 동등성을 주장하면 안 된다. -관찰 가능한 호환성을 말할 때도 지원 subset과 차이를 명시한다. - -공개 의미가 불분명하거나 지원하지 않는 keyword를 임의로 해석하지 않는다. 의미상 무해함이 -입증된 항목만 명시적 warning 정책을 사용할 수 있고, 그 밖의 미지원 semantics는 fail-closed로 -진단한다. 이것이 지원 범위나 공개 호환성을 바꾸는 경우에만 사용자 결정을 요청한다. - -## 3. 계층과 단독 상태 전이 - -`coordinator-agent`는 유일한 main agent이며 다음 loop를 소유한다. - -```text -INTAKE -> STATE AUDIT -> DISPATCH -> EVIDENCE CHECK -> TRANSITION -> RECORD -``` - -- Coordinator만 `docs/features//coordination.md`의 현재 stage, outcome과 next owner를 바꾼다. -- Coordinator는 다음 eligible owner에게 한 번에 하나의 bounded task만 dispatch한다. -- Specialist는 peer를 호출하거나 workflow를 전이하거나 자신의 산출물을 최종 승인하지 않는다. -- Specialist가 반환하는 `outcome`은 전이 요청이다. 실제 전이는 Coordinator가 증거를 확인한 - 후 기록한다. -- Coordinator는 specialist의 수식, 코드, 검증 또는 release 판단을 대신하지 않는다. -- 누락된 증거는 통과로 간주하지 않는다. - -## 4. 단계와 소유권 - -| Stage | Owner | Owned outputs | -| --- | --- | --- | -| `requirements` | `requirement-agent` | `requirements.md` | -| `research` | `research-agent` | `research.md` | -| `formulation` | `formulation-agent` | `formulation.md` | -| `numerical-review` | `numerical-review-agent` | `numerical-review.md`, `reference-model.md` | -| `io-definition` | `io-definition-agent` | `io.md` | -| `implementation-planning` | `implementation-planning-agent` | `implementation-plan.md`, assigned Harness phase files | -| `implementation` | `implementation-agent` | implementation files, tests, build registration, `implementation-report.md`, `build-test.md`, `reference-comparison.md` | -| `physics-evaluation` | `physics-evaluation-agent` | `physics-evaluation.md` | -| `release-readiness` | `release-agent` | `release.md` | - -`correction-agent`는 정규 stage가 아니다. Coordinator가 허용한 한 번의 correction에서만 -implementation-owned 파일과 `corrections.md`를 수정한다. - -각 owner의 결정권은 해당 산출물에만 적용된다. Downstream agent는 upstream 계약을 편집하거나 -재해석해서 gate를 통과할 수 없다. 문제가 upstream 계약에 있으면 `return-upstream`과 정확한 -`next_owner`를 반환한다. Workspace write 권한은 역할의 수정 경계를 넓히지 않는다. - -## 5. 공통 handoff envelope - -모든 dispatch와 return은 다음 필드를 사용한다. 추가 세부정보는 소유 산출물에 기록하고 -envelope에는 전이에 필요한 요약만 둔다. - -```yaml -feature_id: -stage: requirements | research | formulation | numerical-review | io-definition | - implementation-planning | implementation | correction | physics-evaluation | - release-readiness -outcome: pass | return-upstream | retry | blocked-environment | needs-user-decision -next_owner: -evidence_paths: [] -evidence_digest: -failure_classification: -retry_key: -attempt: -escalation_class: -blocker: -``` - -필드 규칙은 다음과 같다. - -- `evidence_paths`는 실제 존재하며 현재 stage가 소유하거나 읽도록 허용된 경로여야 한다. -- `evidence_digest`는 원시 로그 전체가 아니라 명령, 종료 코드, 판정값과 잔여 위험을 담는다. -- 실패가 없으면 `failure_classification`과 `retry_key`는 `null`이다. -- `needs-user-decision`은 `escalation_class`와 선택 가능한 대안 및 영향을 산출물에 기록해야 한다. -- `blocked-environment`는 필요한 환경 변화와 재개 조건을 기록한다. -- `attempt`는 같은 `retry_key`에 대한 실행 횟수이며 Coordinator가 관리한다. - -## 6. Outcome과 전이 규칙 - -| Outcome | 의미 | Coordinator action | -| --- | --- | --- | -| `pass` | 현재 owner의 gate evidence가 완전함 | 다음 정규 stage로 전이 | -| `return-upstream` | 선행 계약의 수정이 필요함 | `next_owner`로 되돌리고 영향받은 downstream gate를 stale 처리 | -| `retry` | 계약을 바꾸지 않는 bounded rerun이 가능함 | retry 정책 안에서 지정 owner를 재호출 | -| `blocked-environment` | 도구·권한·의존성·라이선스 문제로 신뢰성 있는 진행 불가 | 상태를 보존하고 환경 수정 전까지 중단 | -| `needs-user-decision` | 아래 critical decision이 필요함 | 하나의 결정 묶음으로 사용자에게 요청 | - -`blocked`, `approved`, `ready-for-*`, `pass-for-*`, `needs-*` 같은 별도 return status를 만들지 -않는다. 문서 내부 review verdict가 필요하면 설명으로 기록하되 workflow 전이는 위 다섯 outcome만 -사용한다. - -정규 통과 순서는 다음과 같다. - -```text -requirements -> research -> formulation -> numerical-review -> io-definition --> implementation-planning -> implementation -> physics-evaluation --> release-readiness -> completed -``` - -Numerical review는 formulation correctness와 reference-model readiness가 모두 확보되어야 -`pass`할 수 있다. Implementation은 TDD evidence, 전체 build/test와 feature가 요구하는 -reference comparison이 모두 통과해야 `pass`할 수 있다. Release의 `pass`는 내부 readiness -closure일 뿐 publish, deploy, push, tag 또는 package 권한이 아니다. - -## 7. 자율 진행과 사용자 escalation - -Agent는 다음과 같은 저장소 내부의 되돌릴 수 있는 일반 결정을 자율적으로 수행한다. - -- 승인 계약을 구현하는 파일 배치, private API와 내부 자료구조 선택 -- 기존 규칙에 따른 테스트 분해, config-selected build/test backend 등록, 진단 문구와 오류 처리 -- 문서·계획·evidence report의 생성 및 갱신 -- 명백한 compile, link, test, parser와 implementation defect의 최소 수정 -- Numerical Review가 `docs/TOLERANCE.md`와 feature evidence에 따라 선택하는 비교 quantity, - identity/component, metric, scale, blocking/diagnostic 구분과 수치 tolerance -- 공식 문서와 저장소 관례가 하나의 의미를 정하는 secondary convention -- 안전한 read-only 조사, local build/test와 저장된 reference artifact 비교 - -다음 항목만 `needs-user-decision`으로 escalation한다. - -- feature scope, 지원 해석 유형 또는 공개 호환성의 변경 -- 지배 방정식, 요소 정식화, 재료 모델, 접촉·동역학 등 물리적 의미의 선택 -- 합리적인 두 acceptance 기준이 동일 evidence를 pass와 fail로 나누고 그 선택이 제품 - acceptance 의미나 공개 정확도 약속을 바꾸는 경우 -- authoritative input/output schema나 영속 public contract의 비호환 변경 -- authoritative requirement와 reference evidence가 충돌하고 기술 evidence로 우선순위를 - 결정할 수 없는 경우 -- 외부 solver 실행에 필요한 라이선스·자격증명·비공개 자료 -- 보안·신뢰 경계 또는 credential 처리의 중대한 변경, 해결되지 않은 보안·법률·라이선스 - 위험의 수용 -- destructive Git 작업, 외부 게시, push, tag, deploy, package 또는 release - -질문은 결정 가능한 대안, downstream 영향과 권고안을 하나로 묶는다. 단순 진행 확인, -일반 문서 승인, 계획 승인 또는 agent 간 handoff 승인을 반복해서 요청하지 않는다. - -## 8. 실패 분류와 유한 correction - -실패 분류는 최소한 다음 값을 정규화해 사용한다. - -```text -configure | compile | link | test | reference-comparison | harness | -environment | upstream-contract | physics | evidence -``` - -Coordinator는 다음 요소로 retry signature를 만든다. - -```text -retry_key = feature_id | failing_gate | normalized_failure_classification | contract_revision -``` - -동일 `retry_key`에 대한 Correction loop는 한 번만 허용한다. - -1. Implementation Agent가 실패를 분류하고 명백한 implementation-owned defect를 최소 수정·재검증한다. -2. 반복되거나 원인이 불명확하면 Coordinator가 해당 key의 correction 사용 이력을 확인한다. -3. 사용 이력이 없을 때만 Correction Agent를 한 번 dispatch한다. -4. Correction Agent는 `retry`로 Implementation rerun을 요청하고 Coordinator가 rerun을 dispatch한다. -5. 같은 key가 다시 실패하면 두 번째 correction을 금지한다. 계약 문제는 `return-upstream`, - 환경 문제는 `blocked-environment`, 실제 critical choice만 `needs-user-decision`으로 전환한다. - -문구만 바꾸거나 동일 계약 revision을 새 key로 가장하면 안 된다. Upstream 계약이 승인된 방식으로 -변경된 경우에만 `contract_revision`을 올리고 새 signature를 만든다. - -## 9. Evidence gate - -Coordinator는 `pass` 전에 다음을 확인한다. - -- 요구되는 산출물이 존재하고 owner가 명시되어 있다. -- 선행 artifact와 revision이 일치하며 stale evidence가 아니다. -- 실행 증거에는 실제 명령, 종료 코드, 핵심 결과가 있다. -- 수치 비교에는 quantity, unit, coordinate/component, matching rule과 적용 tolerance가 있다. -- reference row의 missing, extra, duplicate와 nonfinite 값은 tolerance 판정 전에 검출된다. -- 가정, 미지원 범위와 잔여 위험이 기록되어 있다. -- specialist owner의 결론을 Coordinator나 downstream agent가 대신 만들지 않았다. - -Reference input과 결과 artifact는 명시적으로 소유 agent가 아닌 한 read-only다. 저장된 외부 -reference 결과를 임의로 생성·보정하거나 통과하도록 수치를 변경해서는 안 된다. - -## 10. 언어와 기록 - -- 기능 문서는 사용자가 다른 언어를 요청하지 않는 한 한국어 Markdown으로 작성한다. -- Agent id, field name, outcome, failure classification, requirement id, path와 command는 English를 유지한다. -- Requirement id 기본 형식은 `FEM-REQ--###`이다. -- Placeholder artifact는 만들지 않는다. Correction이 실제 발생할 때만 `corrections.md`를 만든다. -- 모든 stage는 자신이 변경한 경로와 변경하지 않은 upstream contract를 명확히 기록한다. diff --git a/docs2/SOLVER_SKILL_DESIGN.md b/docs2/SOLVER_SKILL_DESIGN.md deleted file mode 100644 index e26bad3..0000000 --- a/docs2/SOLVER_SKILL_DESIGN.md +++ /dev/null @@ -1,162 +0,0 @@ -# Structural FEM Solver Skill Design - -## 1. 목적 - -Project-local skill은 범용 유한요소 구조해석 solver feature를 요구사항부터 release readiness까지 -일관되게 처리하는 재사용 절차다. Agent가 stage의 책임과 write boundary를 소유하고, skill은 -그 stage에서 필요한 판단 방법, evidence와 output contract를 제공한다. - -실행 지침의 source of truth는 각 `.codex/skills//SKILL.md`다. 공통 workflow와 -상태 전이는 `docs/SOLVER_AGENT_DESIGN.md`, 수치 비교 정책은 `docs/TOLERANCE.md`가 소유한다. -Skill entrypoint는 이 공통 규칙을 반복하지 않고 역할에 필요한 차이만 제공한다. - -## 2. 설계 원칙 - -- 이름과 description은 실제 activation boundary를 구분할 수 있어야 한다. -- `SKILL.md`에는 목적, 필요한 입력, 핵심 workflow, output/evidence와 hard boundary만 둔다. -- 해석 유형별 상세 checklist, toolchain 절차처럼 조건부 정보는 `references/`에서 필요한 - 경우에만 읽는다. -- Skill은 승인된 user/project scope를 확장하거나 외부 실행 권한을 암시하지 않는다. -- 산출물은 `docs/features//`의 공통 feature bundle에 둔다. -- 모든 stage는 공통 handoff envelope와 다섯 outcome을 사용한다. -- Input, result container, tabular comparison format, compiler와 build adapter는 project/feature - contract가 선택한다. 특정 형식을 solver identity로 고정하지 않는다. -- Read-only 조사와 reversible in-repository 판단은 자율 수행한다. Critical decision만 - `needs-user-decision`으로 반환한다. - -## 3. Workflow skill inventory - -| Stage | Skill | 대표 산출물 | -| --- | --- | --- | -| Requirements | `fem-requirements-baseline` | `requirements.md` | -| Research | `fem-research-evidence` | `research.md` | -| Formulation | `fem-formulation-spec` | `formulation.md` | -| Numerical review | `fem-numerical-review` | `numerical-review.md`, `reference-model.md` | -| I/O definition | `fem-io-contract` | `io.md` | -| Planning/implementation/correction | `fem-implementation-tdd` | `implementation-plan.md`, `implementation-report.md`, `build-test.md`, `reference-comparison.md`, 필요 시 `corrections.md` | -| Physics evaluation | `fem-physics-review` | `physics-evaluation.md` | -| Release readiness | `fem-release-readiness` | `release.md` | - -위 8개가 lifecycle workflow skill이다. 폴더명, frontmatter `name`, agent prompt와 -`agents/openai.yaml` invocation name은 항상 동일해야 한다. - -## 4. Stage별 책임 분리 - -### Requirements - -`fem-requirements-baseline`은 scope, observable requirement, acceptance intent와 -requirement-verification matrix를 정의한다. Formulation, tolerance 값, API와 storage schema를 -선결정하지 않는다. - -### Research - -`fem-research-evidence`는 governing theory, primary source, benchmark와 reference convention의 -신뢰성·적용 한계를 정리한다. 사실, 계산, 추론과 evidence gap을 구분하며 formulation 결론을 -대신 만들지 않는다. - -### Formulation - -`fem-formulation-spec`은 strong/weak form, variables/DOF, kinematics, constitutive update, -residual/tangent, integration, state와 recovery를 implementation-neutral 수학 계약으로 만든다. -선택된 linear/nonlinear/dynamic/eigen/contact/material family의 reference만 읽는다. - -### Numerical review - -`fem-numerical-review`는 formulation을 독립 검토하고 requirement를 falsify할 verification -coverage를 정의한다. Logical quantity, identity, location, units와 tolerance 근거까지 소유하지만 -physical dataset/file layout은 I/O stage에 남긴다. - -### I/O definition - -`fem-io-contract`은 선택된 external syntax와 semantic model, versioned result schema 및 -comparison identity 사이를 mapping한다. 미지원 semantic construct, validation과 diagnostic을 -명시한다. Subset 지원을 full compatibility로 표현하지 않는다. - -### Planning, implementation와 correction - -`fem-implementation-tdd`는 approved upstream bundle을 작은 RED/GREEN step으로 계획하고 C++ -변경, configured build/test와 필요한 reference comparison evidence를 만든다. Implementation은 -upstream contract, tolerance 또는 reference artifact를 결과에 맞춰 고치지 않는다. - -Executor의 process/session 재시도는 transport attempt이며 Coordinator의 normalized -failure/correction budget과 별개다. 동일 `retry_key`의 correction은 한 번만 허용한다. - -### Physics evaluation - -`fem-physics-review`는 numerically passing result가 문서화된 equilibrium, sign, symmetry, -energy, mode와 model coverage 기대를 만족하는지 독립 검토한다. 새 acceptance를 즉석에서 -만들지 않는다. - -### Release readiness - -`fem-release-readiness`는 동일 feature/contract revision의 traceability, gate evidence, -limitations와 release-note draft를 감사한다. Readiness verdict는 publish, tag, deploy 또는 -external release 권한이 아니다. - -## 5. Supporting skill - -| Skill | 적용 조건 | -| --- | --- | -| `fem-theory-query` | 사용자가 configured FEM wiki 근거를 요청하거나 vault coverage gap을 조사할 때 | -| `harness` | implementation phase를 만들거나 bounded Executor 작업을 수행할 때 | -| `review` | repository diff를 architecture, numerical, test와 evidence 기준으로 읽기 전용 검토할 때 | - -`fem-theory-query`는 일반 FEM 질문 전체를 가로채지 않는다. Vault path는 environment, -project instruction 또는 untracked local override에서 해석하며 workstation 절대 경로를 -commit하지 않는다. External research나 vault write는 해당 요청과 권한이 있을 때만 수행한다. - -Harness skill은 build/test command authority와 Executor/runtime ownership을 정의한다. Hook은 -guardrail이며 RED observation이나 complete sandbox를 대신하지 않는다. - -## 6. 공통 evidence - -Skill output은 해당 stage에 필요한 부분만 작성하되 handoff에는 다음을 포함한다. - -- `feature_id`, `stage`, `outcome`, `next_owner` -- `evidence_paths`, current contract revision과 artifact identity/hash -- decisive finding, command, exit code, duration과 test count -- comparison quantity, identity, units, metric와 tolerance source -- `failure_classification`, `retry_key`, `attempt` -- `escalation_class`, actionable blocker와 residual risk - -필요한 명령이 실패했거나 실행되지 않았고 blocking evidence가 stale/missing이면 `pass`를 -반환하지 않는다. Raw log 전체를 모든 skill 문서에 복사하지 않고 재현 가능한 digest와 원본 -artifact path를 남긴다. - -## 7. Abaqus reference policy - -Abaqus는 project가 선택한 경우 다음 공개 observable convention의 기준으로 사용한다. - -- input keyword와 option의 문서화된 syntax/semantics -- model data와 history/step data의 구분 -- element formulation, integration과 output location 정의 -- analysis procedure와 convergence 개념 -- verification guide의 benchmark 구성과 expected physical behavior - -Skill은 비공개 내부 구현을 추정하지 않고 full compatibility나 solver equivalence를 주장하지 -않는다. External Abaqus execution은 저장된 artifact를 읽는 것과 다른 권한이며 라이선스, -자격증명, 비용과 명시된 command scope가 확보된 경우에만 수행한다. - -## 8. Autonomous decision boundary - -Skill은 approved contract 안의 내부 naming/layout, test 분해, diagnostic, 문서 형식, 기술 -근거가 유일한 convention과 명백한 결함 수정을 자율적으로 처리한다. Numerical Review는 -`docs/TOLERANCE.md`와 evidence로 feature-specific metric/tolerance를 결정할 수 있다. - -지원 physics/범위, 공개 compatibility, authoritative schema, product acceptance를 바꾸는 -tolerance, 상충하는 필수 reference evidence, 외부 권한 또는 destructive/release 작업만 -사용자 결정이 필요하다. “계속할까요?” 같은 routine approval을 stage 사이에 추가하지 않는다. - -## 9. Validation - -Skill 변경 후 다음을 검증한다. - -- lifecycle skill 8개와 supporting skill의 frontmatter parse -- 폴더명, `name`, `openai.yaml` invocation과 agent 참조 일치 -- relative reference link의 존재와 repository containment -- canonical output path와 common outcome vocabulary -- product-specific legacy name과 machine-specific absolute path 부재 -- realistic requests를 이용한 최소 forward-test - -Project에 validator가 제공되면 해당 validator와 repository pytest suite를 모두 실행한다. -Validator 부재 또는 미실행을 성공으로 간주하지 않는다. diff --git a/docs2/TOLERANCE.md b/docs2/TOLERANCE.md deleted file mode 100644 index 5b2931c..0000000 --- a/docs2/TOLERANCE.md +++ /dev/null @@ -1,186 +0,0 @@ -# Numerical Tolerance and Comparison Policy - -## 1. 목적 - -이 문서는 구조해석 FEM feature의 solver convergence, regression test와 독립 reference -comparison에 사용할 tolerance 선택 절차를 정의한다. 하나의 전역 숫자를 모든 물리량에 -적용하지 않으며, 각 feature의 Numerical Review가 이 정책에 따라 구체적인 metric과 값을 -자율적으로 확정한다. - -Tolerance는 결과를 통과시키기 위해 사후 조정하는 값이 아니라 formulation, discretization, -reference 품질과 verification 목적에서 도출하는 acceptance contract다. - -## 2. 용어 분리 - -다음 값은 서로 대체할 수 없다. - -- **Floating-point tolerance**: 같은 수학 연산의 roundoff 차이를 다룬다. -- **Algebraic convergence tolerance**: 선형/비선형 equation solve의 residual 또는 correction - 종료 조건이다. -- **Discretization acceptance**: mesh/order에 따른 FEM 근사 오차와 예상 convergence를 다룬다. -- **Reference comparison tolerance**: 독립 결과와 quantity별 차이를 판정한다. -- **Physical invariant tolerance**: 평형, 대칭, 보존량 또는 rigid-body behavior를 판정한다. - -Abaqus의 공개된 convergence control과 output convention은 비교 모델의 의미를 맞추는 -reference로 사용할 수 있지만, 그 convergence criterion을 이 solver의 결과 acceptance -tolerance로 그대로 복사하지 않는다. - -## 3. 결정 권한 - -Numerical Review는 사용자에게 묻지 않고 다음을 결정할 수 있다. - -- 비교 quantity, identity와 component -- absolute/relative/norm/energy/MAC 등 metric -- scale과 near-zero 처리 -- blocking과 diagnostic-only quantity 구분 -- analytical, convergence 또는 reference evidence에 근거한 수치 tolerance - -다음 경우에만 `needs-user-decision`으로 올린다. - -- 합리적인 두 기준이 동일 결과를 pass와 fail로 나누며 제품 acceptance 의미가 달라지는 경우 -- tolerance 변경이 지원 범위 또는 공개 정확도 약속을 바꾸는 경우 -- authoritative requirement/reference artifact가 서로 상충하고 기술 evidence로 우선순위를 - 정할 수 없는 경우 - -단순히 기존 결과가 실패했다는 이유는 escalation이나 tolerance 완화 근거가 아니다. - -## 4. Tolerance 선택 우선순위 - -1. Requirement 또는 적용 표준이 요구하는 명시적 acceptance -2. Exact/analytical/manufactured solution의 알려진 오차와 conditioning -3. Mesh/order convergence에서 관찰된 asymptotic error와 기대 rate -4. 독립 reference model의 discretization, element formulation, integration/recovery 차이 -5. 동일 알고리즘 regression의 floating-point 및 backend variation - -낮은 우선순위 근거가 높은 우선순위 기준을 완화하지 않는다. 선택 근거, 단위, scale, -mesh와 reference revision을 feature verification 문서에 기록한다. - -## 5. 기본 비교식 - -Scalar quantity `x`와 reference `r`는 별도 계약이 없으면 다음 식을 사용한다. - -```text -abs_error = |x - r| -allowed = atol + rtol * max(|r|, scale_floor) -pass = finite(x) and finite(r) and abs_error <= allowed -``` - -- `atol`, `scale_floor`는 quantity 단위를 가진다. -- `rtol`은 무차원이다. -- `scale_floor`는 near-zero에서 상대오차가 무한히 커지는 것을 막기 위한 물리적 scale이며 - 임의의 `1.0`을 사용하지 않는다. -- NaN/Inf, missing, extra 또는 duplicate required identity는 tolerance 적용 전에 실패한다. -- Reference가 exact zero이면 absolute/physical scale 기준을 사용한다. - -Vector 또는 field는 component별 최대오차와 적절한 norm을 함께 기록한다. RMS/평균만으로 -국부 최대오차를 숨기지 않는다. - -## 6. 검증 유형별 기준 - -### 6.1 Exact semantic 및 topology test - -Entity count, connectivity, identity, component order, status code와 schema field는 exact -comparison을 사용한다. Floating-point tolerance로 semantic mismatch를 허용하지 않는다. - -### 6.2 Kernel 및 regression test - -- Integer/topological 결과는 exact다. -- Floating-point 결과는 operation count, magnitude, conditioning과 backend variation에서 - tolerance를 도출한다. -- 같은 backend/ordering의 deterministic regression은 넓은 engineering tolerance를 쓰지 - 않는다. -- 수치 연산 순서가 의도적으로 바뀌면 이전 tolerance를 자동 확대하지 않고 expected envelope를 - 다시 분석한다. - -### 6.3 Analytical, patch와 manufactured solution - -- Polynomial reproduction과 patch-test invariant는 이론상 exact한 차수와 허용 roundoff를 - 구분한다. -- Displacement, strain/stress, reaction과 energy 중 formulation을 독립적으로 검출할 수 있는 - quantity를 선택한다. -- Boundary singularity 또는 recovery가 지배하는 지점을 전체 field criterion과 분리한다. - -### 6.4 Mesh/order convergence - -단일 mesh의 우연한 일치보다 최소 세 수준의 refinement가 권장된다. Characteristic size `h`와 -error `e`로 관찰 차수를 기록한다. - -```text -p_observed = log(e_coarse / e_fine) / log(h_coarse / h_fine) -``` - -기대 rate와 asymptotic range는 formulation 및 quantity norm에 맞춰 feature contract에서 -정한다. 서로 다른 mesh의 nodal row를 단순 index로 비교하지 않는다. - -### 6.5 Equilibrium과 nonlinear convergence - -- External force/reaction과 internal residual은 동일 좌표계·sign·constraint convention으로 - 정규화한다. -- Force residual, displacement correction와 energy check는 각기 다른 failure mode를 보므로 - 하나만으로 대체하지 않는다. -- Zero-load 또는 작은-load case는 별도 physical scale을 사용한다. -- Solver convergence 성공은 discretization/reference accuracy 성공을 의미하지 않는다. - -### 6.6 Eigenproblem - -- Eigenvalue는 scale-aware absolute/relative error로 비교한다. -- Eigenvector는 sign 또는 complex phase 불변성을 고려하고 normalized correlation 또는 MAC을 - 사용한다. -- Clustered/repeated eigenvalue는 vector 한 개가 아니라 invariant subspace로 비교한다. -- Mode ordering을 frequency index만으로 강제하지 않고 correlation과 multiplicity를 확인한다. - -### 6.7 Dynamic history - -- Time/frequency grid와 interpolation policy를 먼저 계약한다. -- Peak, phase, energy, norm과 selected sample을 목적에 맞게 조합한다. -- 서로 다른 adaptive increment의 raw frame index를 직접 identity로 사용하지 않는다. - -### 6.8 Stress와 recovered field - -- Integration point, centroid, node extrapolation/averaging 등 output location을 먼저 일치시킨다. -- Tensor convention, local orientation와 section point를 key에 포함한다. -- Singular point는 regular field tolerance와 분리해 convergence trend 또는 exclusion 근거를 - 명시한다. - -## 7. External reference comparison - -외부 result를 사용하기 전에 다음 equivalence를 확인한다. - -- geometry, mesh와 source identity -- element family, order, integration와 stabilization -- material/section 및 units -- loads, constraints, amplitude와 analysis step -- geometric/nonlinear option과 convergence state -- result location, coordinate system, averaging와 component convention - -Stored input과 expected result는 read-only다. Reference format은 feature contract가 선택하며 -특정 CSV/HDF5 layout을 이 정책이 강제하지 않는다. Matching은 semantic key로 수행하고, -identity precheck가 통과한 뒤에만 수치 tolerance를 적용한다. - -## 8. 승인 및 변경 규칙 - -Feature tolerance record에는 다음을 포함한다. - -- quantity와 physical purpose -- metric 식, `atol`, `rtol`, scale 및 units -- blocking 여부 -- 근거 source 또는 convergence evidence -- 적용 mesh, formulation, backend와 artifact digest -- known exclusions와 diagnostic-only checks - -Implementation Agent는 tolerance를 변경할 수 없다. Numerical Review가 새 evidence로 contract -revision을 올리고 영향을 재검토해야 한다. 변경 전 실패 결과와 변경 이유를 보존하며 새 -기준으로 모든 관련 case를 다시 실행한다. - -## 9. 보고 최소값 - -Comparison report는 pass/fail만 기록하지 않고 다음을 남긴다. - -- matched/missing/extra/duplicate/nonfinite 개수 -- quantity별 최대 absolute/relative error와 발생 identity -- 사용한 norm 또는 invariant 값 -- 허용값과 pass/fail -- command, exit code, duration과 input/output digest -- 미실행 검사와 제한 - -이 evidence가 없으면 tolerance gate는 완료로 간주하지 않는다. diff --git a/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt b/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt new file mode 100644 index 0000000..11e3bc3 --- /dev/null +++ b/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine eigenvalues.txt @@ -0,0 +1,10 @@ + Frame: Mode 1: Value = 2.19507E+05 Freq = 74.567 (cycles/time) + Frame: Mode 2: Value = 8.85523E+05 Freq = 149.77 (cycles/time) + Frame: Mode 3: Value = 8.85523E+05 Freq = 149.77 (cycles/time) + Frame: Mode 4: Value = 1.85534E+06 Freq = 216.79 (cycles/time) + Frame: Mode 5: Value = 2.74023E+06 Freq = 263.46 (cycles/time) + Frame: Mode 6: Value = 2.77515E+06 Freq = 265.13 (cycles/time) + Frame: Mode 7: Value = 4.14941E+06 Freq = 324.20 (cycles/time) + Frame: Mode 8: Value = 4.14941E+06 Freq = 324.20 (cycles/time) + Frame: Mode 9: Value = 6.73379E+06 Freq = 413.00 (cycles/time) + Frame: Mode 10: Value = 6.73379E+06 Freq = 413.00 (cycles/time) diff --git a/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp b/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp new file mode 100644 index 0000000..5954ef9 --- /dev/null +++ b/reference/shellNL-eigen-meshfine/shellNL-eigen-meshfine.inp @@ -0,0 +1,1492 @@ +*Heading +** Job name: shellNL-eigen-meshfine Model name: Model-1-eigen-meshfine +** Generated by: Abaqus/CAE Learning Edition 2024 +*Preprint, echo=NO, model=NO, history=NO, contact=NO +** +** PARTS +** +*Part, name=Part-1 +*Node + 1, 0., -5., 0. + 2, 0., 0., 0. + 3, -5., 0., 0. + 4, -5., -5., 0. + 5, 0., 5., 0. + 6, 5., 0., 0. + 7, 5., 5., 0. + 8, -5., 5., 0. + 9, 5., -5., 0. + 10, 0., -4.61538458, 0. + 11, 0., -4.23076916, 0. + 12, 0., -3.84615374, 0. + 13, 0., -3.46153855, 0. + 14, 0., -3.07692313, 0. + 15, 0., -2.69230771, 0. + 16, 0., -2.30769229, 0. + 17, 0., -1.92307687, 0. + 18, 0., -1.53846157, 0. + 19, 0., -1.15384614, 0. + 20, 0., -0.769230783, 0. + 21, 0., -0.384615391, 0. + 22, -0.384615391, 0., 0. + 23, -0.769230783, 0., 0. + 24, -1.15384614, 0., 0. + 25, -1.53846157, 0., 0. + 26, -1.92307687, 0., 0. + 27, -2.30769229, 0., 0. + 28, -2.69230771, 0., 0. + 29, -3.07692313, 0., 0. + 30, -3.46153855, 0., 0. + 31, -3.84615374, 0., 0. + 32, -4.23076916, 0., 0. + 33, -4.61538458, 0., 0. + 34, -5., -0.384615391, 0. + 35, -5., -0.769230783, 0. + 36, -5., -1.15384614, 0. + 37, -5., -1.53846157, 0. + 38, -5., -1.92307687, 0. + 39, -5., -2.30769229, 0. + 40, -5., -2.69230771, 0. + 41, -5., -3.07692313, 0. + 42, -5., -3.46153855, 0. + 43, -5., -3.84615374, 0. + 44, -5., -4.23076916, 0. + 45, -5., -4.61538458, 0. + 46, -4.61538458, -5., 0. + 47, -4.23076916, -5., 0. + 48, -3.84615374, -5., 0. + 49, -3.46153855, -5., 0. + 50, -3.07692313, -5., 0. + 51, -2.69230771, -5., 0. + 52, -2.30769229, -5., 0. + 53, -1.92307687, -5., 0. + 54, -1.53846157, -5., 0. + 55, -1.15384614, -5., 0. + 56, -0.769230783, -5., 0. + 57, -0.384615391, -5., 0. + 58, 0., 4.61538458, 0. + 59, 0., 4.23076916, 0. + 60, 0., 3.84615374, 0. + 61, 0., 3.46153855, 0. + 62, 0., 3.07692313, 0. + 63, 0., 2.69230771, 0. + 64, 0., 2.30769229, 0. + 65, 0., 1.92307687, 0. + 66, 0., 1.53846157, 0. + 67, 0., 1.15384614, 0. + 68, 0., 0.769230783, 0. + 69, 0., 0.384615391, 0. + 70, 0.384615391, 0., 0. + 71, 0.769230783, 0., 0. + 72, 1.15384614, 0., 0. + 73, 1.53846157, 0., 0. + 74, 1.92307687, 0., 0. + 75, 2.30769229, 0., 0. + 76, 2.69230771, 0., 0. + 77, 3.07692313, 0., 0. + 78, 3.46153855, 0., 0. + 79, 3.84615374, 0., 0. + 80, 4.23076916, 0., 0. + 81, 4.61538458, 0., 0. + 82, 5., 0.384615391, 0. + 83, 5., 0.769230783, 0. + 84, 5., 1.15384614, 0. + 85, 5., 1.53846157, 0. + 86, 5., 1.92307687, 0. + 87, 5., 2.30769229, 0. + 88, 5., 2.69230771, 0. + 89, 5., 3.07692313, 0. + 90, 5., 3.46153855, 0. + 91, 5., 3.84615374, 0. + 92, 5., 4.23076916, 0. + 93, 5., 4.61538458, 0. + 94, 4.61538458, 5., 0. + 95, 4.23076916, 5., 0. + 96, 3.84615374, 5., 0. + 97, 3.46153855, 5., 0. + 98, 3.07692313, 5., 0. + 99, 2.69230771, 5., 0. + 100, 2.30769229, 5., 0. + 101, 1.92307687, 5., 0. + 102, 1.53846157, 5., 0. + 103, 1.15384614, 5., 0. + 104, 0.769230783, 5., 0. + 105, 0.384615391, 5., 0. + 106, -0.384615391, 5., 0. + 107, -0.769230783, 5., 0. + 108, -1.15384614, 5., 0. + 109, -1.53846157, 5., 0. + 110, -1.92307687, 5., 0. + 111, -2.30769229, 5., 0. + 112, -2.69230771, 5., 0. + 113, -3.07692313, 5., 0. + 114, -3.46153855, 5., 0. + 115, -3.84615374, 5., 0. + 116, -4.23076916, 5., 0. + 117, -4.61538458, 5., 0. + 118, -5., 4.61538458, 0. + 119, -5., 4.23076916, 0. + 120, -5., 3.84615374, 0. + 121, -5., 3.46153855, 0. + 122, -5., 3.07692313, 0. + 123, -5., 2.69230771, 0. + 124, -5., 2.30769229, 0. + 125, -5., 1.92307687, 0. + 126, -5., 1.53846157, 0. + 127, -5., 1.15384614, 0. + 128, -5., 0.769230783, 0. + 129, -5., 0.384615391, 0. + 130, 0.384615391, -5., 0. + 131, 0.769230783, -5., 0. + 132, 1.15384614, -5., 0. + 133, 1.53846157, -5., 0. + 134, 1.92307687, -5., 0. + 135, 2.30769229, -5., 0. + 136, 2.69230771, -5., 0. + 137, 3.07692313, -5., 0. + 138, 3.46153855, -5., 0. + 139, 3.84615374, -5., 0. + 140, 4.23076916, -5., 0. + 141, 4.61538458, -5., 0. + 142, 5., -4.61538458, 0. + 143, 5., -4.23076916, 0. + 144, 5., -3.84615374, 0. + 145, 5., -3.46153855, 0. + 146, 5., -3.07692313, 0. + 147, 5., -2.69230771, 0. + 148, 5., -2.30769229, 0. + 149, 5., -1.92307687, 0. + 150, 5., -1.53846157, 0. + 151, 5., -1.15384614, 0. + 152, 5., -0.769230783, 0. + 153, 5., -0.384615391, 0. + 154, -0.384615391, -4.61538458, 0. + 155, -0.384615391, -4.23076916, 0. + 156, -0.384615391, -3.84615374, 0. + 157, -0.384615391, -3.46153855, 0. + 158, -0.384615391, -3.07692313, 0. + 159, -0.384615391, -2.69230771, 0. + 160, -0.384615391, -2.30769229, 0. + 161, -0.384615391, -1.92307687, 0. + 162, -0.384615391, -1.53846157, 0. + 163, -0.384615391, -1.15384614, 0. + 164, -0.384615391, -0.769230783, 0. + 165, -0.384615391, -0.384615391, 0. + 166, -0.769230783, -4.61538458, 0. + 167, -0.769230783, -4.23076916, 0. + 168, -0.769230783, -3.84615374, 0. + 169, -0.769230783, -3.46153855, 0. + 170, -0.769230783, -3.07692313, 0. + 171, -0.769230783, -2.69230771, 0. + 172, -0.769230783, -2.30769229, 0. + 173, -0.769230783, -1.92307687, 0. + 174, -0.769230783, -1.53846157, 0. + 175, -0.769230783, -1.15384614, 0. + 176, -0.769230783, -0.769230783, 0. + 177, -0.769230783, -0.384615391, 0. + 178, -1.15384614, -4.61538458, 0. + 179, -1.15384614, -4.23076916, 0. + 180, -1.15384614, -3.84615374, 0. + 181, -1.15384614, -3.46153855, 0. + 182, -1.15384614, -3.07692313, 0. + 183, -1.15384614, -2.69230771, 0. + 184, -1.15384614, -2.30769229, 0. + 185, -1.15384614, -1.92307687, 0. + 186, -1.15384614, -1.53846157, 0. + 187, -1.15384614, -1.15384614, 0. + 188, -1.15384614, -0.769230783, 0. + 189, -1.15384614, -0.384615391, 0. + 190, -1.53846157, -4.61538458, 0. + 191, -1.53846157, -4.23076916, 0. + 192, -1.53846157, -3.84615374, 0. + 193, -1.53846157, -3.46153855, 0. + 194, -1.53846157, -3.07692313, 0. + 195, -1.53846157, -2.69230771, 0. + 196, -1.53846157, -2.30769229, 0. + 197, -1.53846157, -1.92307687, 0. + 198, -1.53846157, -1.53846157, 0. + 199, -1.53846157, -1.15384614, 0. + 200, -1.53846157, -0.769230783, 0. + 201, -1.53846157, -0.384615391, 0. + 202, -1.92307687, -4.61538458, 0. + 203, -1.92307687, -4.23076916, 0. + 204, -1.92307687, -3.84615374, 0. + 205, -1.92307687, -3.46153855, 0. + 206, -1.92307687, -3.07692313, 0. + 207, -1.92307687, -2.69230771, 0. + 208, -1.92307687, -2.30769229, 0. + 209, -1.92307687, -1.92307687, 0. + 210, -1.92307687, -1.53846157, 0. + 211, -1.92307687, -1.15384614, 0. + 212, -1.92307687, -0.769230783, 0. + 213, -1.92307687, -0.384615391, 0. + 214, -2.30769229, -4.61538458, 0. + 215, -2.30769229, -4.23076916, 0. + 216, -2.30769229, -3.84615374, 0. + 217, -2.30769229, -3.46153855, 0. + 218, -2.30769229, -3.07692313, 0. + 219, -2.30769229, -2.69230771, 0. + 220, -2.30769229, -2.30769229, 0. + 221, -2.30769229, -1.92307687, 0. + 222, -2.30769229, -1.53846157, 0. + 223, -2.30769229, -1.15384614, 0. + 224, -2.30769229, -0.769230783, 0. + 225, -2.30769229, -0.384615391, 0. + 226, -2.69230771, -4.61538458, 0. + 227, -2.69230771, -4.23076916, 0. + 228, -2.69230771, -3.84615374, 0. + 229, -2.69230771, -3.46153855, 0. + 230, -2.69230771, -3.07692313, 0. + 231, -2.69230771, -2.69230771, 0. + 232, -2.69230771, -2.30769229, 0. + 233, -2.69230771, -1.92307687, 0. + 234, -2.69230771, -1.53846157, 0. + 235, -2.69230771, -1.15384614, 0. + 236, -2.69230771, -0.769230783, 0. + 237, -2.69230771, -0.384615391, 0. + 238, -3.07692313, -4.61538458, 0. + 239, -3.07692313, -4.23076916, 0. + 240, -3.07692313, -3.84615374, 0. + 241, -3.07692313, -3.46153855, 0. + 242, -3.07692313, -3.07692313, 0. + 243, -3.07692313, -2.69230771, 0. + 244, -3.07692313, -2.30769229, 0. + 245, -3.07692313, -1.92307687, 0. + 246, -3.07692313, -1.53846157, 0. + 247, -3.07692313, -1.15384614, 0. + 248, -3.07692313, -0.769230783, 0. + 249, -3.07692313, -0.384615391, 0. + 250, -3.46153855, -4.61538458, 0. + 251, -3.46153855, -4.23076916, 0. + 252, -3.46153855, -3.84615374, 0. + 253, -3.46153855, -3.46153855, 0. + 254, -3.46153855, -3.07692313, 0. + 255, -3.46153855, -2.69230771, 0. + 256, -3.46153855, -2.30769229, 0. + 257, -3.46153855, -1.92307687, 0. + 258, -3.46153855, -1.53846157, 0. + 259, -3.46153855, -1.15384614, 0. + 260, -3.46153855, -0.769230783, 0. + 261, -3.46153855, -0.384615391, 0. + 262, -3.84615374, -4.61538458, 0. + 263, -3.84615374, -4.23076916, 0. + 264, -3.84615374, -3.84615374, 0. + 265, -3.84615374, -3.46153855, 0. + 266, -3.84615374, -3.07692313, 0. + 267, -3.84615374, -2.69230771, 0. + 268, -3.84615374, -2.30769229, 0. + 269, -3.84615374, -1.92307687, 0. + 270, -3.84615374, -1.53846157, 0. + 271, -3.84615374, -1.15384614, 0. + 272, -3.84615374, -0.769230783, 0. + 273, -3.84615374, -0.384615391, 0. + 274, -4.23076916, -4.61538458, 0. + 275, -4.23076916, -4.23076916, 0. + 276, -4.23076916, -3.84615374, 0. + 277, -4.23076916, -3.46153855, 0. + 278, -4.23076916, -3.07692313, 0. + 279, -4.23076916, -2.69230771, 0. + 280, -4.23076916, -2.30769229, 0. + 281, -4.23076916, -1.92307687, 0. + 282, -4.23076916, -1.53846157, 0. + 283, -4.23076916, -1.15384614, 0. + 284, -4.23076916, -0.769230783, 0. + 285, -4.23076916, -0.384615391, 0. + 286, -4.61538458, -4.61538458, 0. + 287, -4.61538458, -4.23076916, 0. + 288, -4.61538458, -3.84615374, 0. + 289, -4.61538458, -3.46153855, 0. + 290, -4.61538458, -3.07692313, 0. + 291, -4.61538458, -2.69230771, 0. + 292, -4.61538458, -2.30769229, 0. + 293, -4.61538458, -1.92307687, 0. + 294, -4.61538458, -1.53846157, 0. + 295, -4.61538458, -1.15384614, 0. + 296, -4.61538458, -0.769230783, 0. + 297, -4.61538458, -0.384615391, 0. + 298, 0.384615391, 4.61538458, 0. + 299, 0.384615391, 4.23076916, 0. + 300, 0.384615391, 3.84615374, 0. + 301, 0.384615391, 3.46153855, 0. + 302, 0.384615391, 3.07692313, 0. + 303, 0.384615391, 2.69230771, 0. + 304, 0.384615391, 2.30769229, 0. + 305, 0.384615391, 1.92307687, 0. + 306, 0.384615391, 1.53846157, 0. + 307, 0.384615391, 1.15384614, 0. + 308, 0.384615391, 0.769230783, 0. + 309, 0.384615391, 0.384615391, 0. + 310, 0.769230783, 4.61538458, 0. + 311, 0.769230783, 4.23076916, 0. + 312, 0.769230783, 3.84615374, 0. + 313, 0.769230783, 3.46153855, 0. + 314, 0.769230783, 3.07692313, 0. + 315, 0.769230783, 2.69230771, 0. + 316, 0.769230783, 2.30769229, 0. + 317, 0.769230783, 1.92307687, 0. + 318, 0.769230783, 1.53846157, 0. + 319, 0.769230783, 1.15384614, 0. + 320, 0.769230783, 0.769230783, 0. + 321, 0.769230783, 0.384615391, 0. + 322, 1.15384614, 4.61538458, 0. + 323, 1.15384614, 4.23076916, 0. + 324, 1.15384614, 3.84615374, 0. + 325, 1.15384614, 3.46153855, 0. + 326, 1.15384614, 3.07692313, 0. + 327, 1.15384614, 2.69230771, 0. + 328, 1.15384614, 2.30769229, 0. + 329, 1.15384614, 1.92307687, 0. + 330, 1.15384614, 1.53846157, 0. + 331, 1.15384614, 1.15384614, 0. + 332, 1.15384614, 0.769230783, 0. + 333, 1.15384614, 0.384615391, 0. + 334, 1.53846157, 4.61538458, 0. + 335, 1.53846157, 4.23076916, 0. + 336, 1.53846157, 3.84615374, 0. + 337, 1.53846157, 3.46153855, 0. + 338, 1.53846157, 3.07692313, 0. + 339, 1.53846157, 2.69230771, 0. + 340, 1.53846157, 2.30769229, 0. + 341, 1.53846157, 1.92307687, 0. + 342, 1.53846157, 1.53846157, 0. + 343, 1.53846157, 1.15384614, 0. + 344, 1.53846157, 0.769230783, 0. + 345, 1.53846157, 0.384615391, 0. + 346, 1.92307687, 4.61538458, 0. + 347, 1.92307687, 4.23076916, 0. + 348, 1.92307687, 3.84615374, 0. + 349, 1.92307687, 3.46153855, 0. + 350, 1.92307687, 3.07692313, 0. + 351, 1.92307687, 2.69230771, 0. + 352, 1.92307687, 2.30769229, 0. + 353, 1.92307687, 1.92307687, 0. + 354, 1.92307687, 1.53846157, 0. + 355, 1.92307687, 1.15384614, 0. + 356, 1.92307687, 0.769230783, 0. + 357, 1.92307687, 0.384615391, 0. + 358, 2.30769229, 4.61538458, 0. + 359, 2.30769229, 4.23076916, 0. + 360, 2.30769229, 3.84615374, 0. + 361, 2.30769229, 3.46153855, 0. + 362, 2.30769229, 3.07692313, 0. + 363, 2.30769229, 2.69230771, 0. + 364, 2.30769229, 2.30769229, 0. + 365, 2.30769229, 1.92307687, 0. + 366, 2.30769229, 1.53846157, 0. + 367, 2.30769229, 1.15384614, 0. + 368, 2.30769229, 0.769230783, 0. + 369, 2.30769229, 0.384615391, 0. + 370, 2.69230771, 4.61538458, 0. + 371, 2.69230771, 4.23076916, 0. + 372, 2.69230771, 3.84615374, 0. + 373, 2.69230771, 3.46153855, 0. + 374, 2.69230771, 3.07692313, 0. + 375, 2.69230771, 2.69230771, 0. + 376, 2.69230771, 2.30769229, 0. + 377, 2.69230771, 1.92307687, 0. + 378, 2.69230771, 1.53846157, 0. + 379, 2.69230771, 1.15384614, 0. + 380, 2.69230771, 0.769230783, 0. + 381, 2.69230771, 0.384615391, 0. + 382, 3.07692313, 4.61538458, 0. + 383, 3.07692313, 4.23076916, 0. + 384, 3.07692313, 3.84615374, 0. + 385, 3.07692313, 3.46153855, 0. + 386, 3.07692313, 3.07692313, 0. + 387, 3.07692313, 2.69230771, 0. + 388, 3.07692313, 2.30769229, 0. + 389, 3.07692313, 1.92307687, 0. + 390, 3.07692313, 1.53846157, 0. + 391, 3.07692313, 1.15384614, 0. + 392, 3.07692313, 0.769230783, 0. + 393, 3.07692313, 0.384615391, 0. + 394, 3.46153855, 4.61538458, 0. + 395, 3.46153855, 4.23076916, 0. + 396, 3.46153855, 3.84615374, 0. + 397, 3.46153855, 3.46153855, 0. + 398, 3.46153855, 3.07692313, 0. + 399, 3.46153855, 2.69230771, 0. + 400, 3.46153855, 2.30769229, 0. + 401, 3.46153855, 1.92307687, 0. + 402, 3.46153855, 1.53846157, 0. + 403, 3.46153855, 1.15384614, 0. + 404, 3.46153855, 0.769230783, 0. + 405, 3.46153855, 0.384615391, 0. + 406, 3.84615374, 4.61538458, 0. + 407, 3.84615374, 4.23076916, 0. + 408, 3.84615374, 3.84615374, 0. + 409, 3.84615374, 3.46153855, 0. + 410, 3.84615374, 3.07692313, 0. + 411, 3.84615374, 2.69230771, 0. + 412, 3.84615374, 2.30769229, 0. + 413, 3.84615374, 1.92307687, 0. + 414, 3.84615374, 1.53846157, 0. + 415, 3.84615374, 1.15384614, 0. + 416, 3.84615374, 0.769230783, 0. + 417, 3.84615374, 0.384615391, 0. + 418, 4.23076916, 4.61538458, 0. + 419, 4.23076916, 4.23076916, 0. + 420, 4.23076916, 3.84615374, 0. + 421, 4.23076916, 3.46153855, 0. + 422, 4.23076916, 3.07692313, 0. + 423, 4.23076916, 2.69230771, 0. + 424, 4.23076916, 2.30769229, 0. + 425, 4.23076916, 1.92307687, 0. + 426, 4.23076916, 1.53846157, 0. + 427, 4.23076916, 1.15384614, 0. + 428, 4.23076916, 0.769230783, 0. + 429, 4.23076916, 0.384615391, 0. + 430, 4.61538458, 4.61538458, 0. + 431, 4.61538458, 4.23076916, 0. + 432, 4.61538458, 3.84615374, 0. + 433, 4.61538458, 3.46153855, 0. + 434, 4.61538458, 3.07692313, 0. + 435, 4.61538458, 2.69230771, 0. + 436, 4.61538458, 2.30769229, 0. + 437, 4.61538458, 1.92307687, 0. + 438, 4.61538458, 1.53846157, 0. + 439, 4.61538458, 1.15384614, 0. + 440, 4.61538458, 0.769230783, 0. + 441, 4.61538458, 0.384615391, 0. + 442, -0.384615391, 0.384615391, 0. + 443, -0.384615391, 0.769230783, 0. + 444, -0.384615391, 1.15384614, 0. + 445, -0.384615391, 1.53846157, 0. + 446, -0.384615391, 1.92307687, 0. + 447, -0.384615391, 2.30769229, 0. + 448, -0.384615391, 2.69230771, 0. + 449, -0.384615391, 3.07692313, 0. + 450, -0.384615391, 3.46153855, 0. + 451, -0.384615391, 3.84615374, 0. + 452, -0.384615391, 4.23076916, 0. + 453, -0.384615391, 4.61538458, 0. + 454, -0.769230783, 0.384615391, 0. + 455, -0.769230783, 0.769230783, 0. + 456, -0.769230783, 1.15384614, 0. + 457, -0.769230783, 1.53846157, 0. + 458, -0.769230783, 1.92307687, 0. + 459, -0.769230783, 2.30769229, 0. + 460, -0.769230783, 2.69230771, 0. + 461, -0.769230783, 3.07692313, 0. + 462, -0.769230783, 3.46153855, 0. + 463, -0.769230783, 3.84615374, 0. + 464, -0.769230783, 4.23076916, 0. + 465, -0.769230783, 4.61538458, 0. + 466, -1.15384614, 0.384615391, 0. + 467, -1.15384614, 0.769230783, 0. + 468, -1.15384614, 1.15384614, 0. + 469, -1.15384614, 1.53846157, 0. + 470, -1.15384614, 1.92307687, 0. + 471, -1.15384614, 2.30769229, 0. + 472, -1.15384614, 2.69230771, 0. + 473, -1.15384614, 3.07692313, 0. + 474, -1.15384614, 3.46153855, 0. + 475, -1.15384614, 3.84615374, 0. + 476, -1.15384614, 4.23076916, 0. + 477, -1.15384614, 4.61538458, 0. + 478, -1.53846157, 0.384615391, 0. + 479, -1.53846157, 0.769230783, 0. + 480, -1.53846157, 1.15384614, 0. + 481, -1.53846157, 1.53846157, 0. + 482, -1.53846157, 1.92307687, 0. + 483, -1.53846157, 2.30769229, 0. + 484, -1.53846157, 2.69230771, 0. + 485, -1.53846157, 3.07692313, 0. + 486, -1.53846157, 3.46153855, 0. + 487, -1.53846157, 3.84615374, 0. + 488, -1.53846157, 4.23076916, 0. + 489, -1.53846157, 4.61538458, 0. + 490, -1.92307687, 0.384615391, 0. + 491, -1.92307687, 0.769230783, 0. + 492, -1.92307687, 1.15384614, 0. + 493, -1.92307687, 1.53846157, 0. + 494, -1.92307687, 1.92307687, 0. + 495, -1.92307687, 2.30769229, 0. + 496, -1.92307687, 2.69230771, 0. + 497, -1.92307687, 3.07692313, 0. + 498, -1.92307687, 3.46153855, 0. + 499, -1.92307687, 3.84615374, 0. + 500, -1.92307687, 4.23076916, 0. + 501, -1.92307687, 4.61538458, 0. + 502, -2.30769229, 0.384615391, 0. + 503, -2.30769229, 0.769230783, 0. + 504, -2.30769229, 1.15384614, 0. + 505, -2.30769229, 1.53846157, 0. + 506, -2.30769229, 1.92307687, 0. + 507, -2.30769229, 2.30769229, 0. + 508, -2.30769229, 2.69230771, 0. + 509, -2.30769229, 3.07692313, 0. + 510, -2.30769229, 3.46153855, 0. + 511, -2.30769229, 3.84615374, 0. + 512, -2.30769229, 4.23076916, 0. + 513, -2.30769229, 4.61538458, 0. + 514, -2.69230771, 0.384615391, 0. + 515, -2.69230771, 0.769230783, 0. + 516, -2.69230771, 1.15384614, 0. + 517, -2.69230771, 1.53846157, 0. + 518, -2.69230771, 1.92307687, 0. + 519, -2.69230771, 2.30769229, 0. + 520, -2.69230771, 2.69230771, 0. + 521, -2.69230771, 3.07692313, 0. + 522, -2.69230771, 3.46153855, 0. + 523, -2.69230771, 3.84615374, 0. + 524, -2.69230771, 4.23076916, 0. + 525, -2.69230771, 4.61538458, 0. + 526, -3.07692313, 0.384615391, 0. + 527, -3.07692313, 0.769230783, 0. + 528, -3.07692313, 1.15384614, 0. + 529, -3.07692313, 1.53846157, 0. + 530, -3.07692313, 1.92307687, 0. + 531, -3.07692313, 2.30769229, 0. + 532, -3.07692313, 2.69230771, 0. + 533, -3.07692313, 3.07692313, 0. + 534, -3.07692313, 3.46153855, 0. + 535, -3.07692313, 3.84615374, 0. + 536, -3.07692313, 4.23076916, 0. + 537, -3.07692313, 4.61538458, 0. + 538, -3.46153855, 0.384615391, 0. + 539, -3.46153855, 0.769230783, 0. + 540, -3.46153855, 1.15384614, 0. + 541, -3.46153855, 1.53846157, 0. + 542, -3.46153855, 1.92307687, 0. + 543, -3.46153855, 2.30769229, 0. + 544, -3.46153855, 2.69230771, 0. + 545, -3.46153855, 3.07692313, 0. + 546, -3.46153855, 3.46153855, 0. + 547, -3.46153855, 3.84615374, 0. + 548, -3.46153855, 4.23076916, 0. + 549, -3.46153855, 4.61538458, 0. + 550, -3.84615374, 0.384615391, 0. + 551, -3.84615374, 0.769230783, 0. + 552, -3.84615374, 1.15384614, 0. + 553, -3.84615374, 1.53846157, 0. + 554, -3.84615374, 1.92307687, 0. + 555, -3.84615374, 2.30769229, 0. + 556, -3.84615374, 2.69230771, 0. + 557, -3.84615374, 3.07692313, 0. + 558, -3.84615374, 3.46153855, 0. + 559, -3.84615374, 3.84615374, 0. + 560, -3.84615374, 4.23076916, 0. + 561, -3.84615374, 4.61538458, 0. + 562, -4.23076916, 0.384615391, 0. + 563, -4.23076916, 0.769230783, 0. + 564, -4.23076916, 1.15384614, 0. + 565, -4.23076916, 1.53846157, 0. + 566, -4.23076916, 1.92307687, 0. + 567, -4.23076916, 2.30769229, 0. + 568, -4.23076916, 2.69230771, 0. + 569, -4.23076916, 3.07692313, 0. + 570, -4.23076916, 3.46153855, 0. + 571, -4.23076916, 3.84615374, 0. + 572, -4.23076916, 4.23076916, 0. + 573, -4.23076916, 4.61538458, 0. + 574, -4.61538458, 0.384615391, 0. + 575, -4.61538458, 0.769230783, 0. + 576, -4.61538458, 1.15384614, 0. + 577, -4.61538458, 1.53846157, 0. + 578, -4.61538458, 1.92307687, 0. + 579, -4.61538458, 2.30769229, 0. + 580, -4.61538458, 2.69230771, 0. + 581, -4.61538458, 3.07692313, 0. + 582, -4.61538458, 3.46153855, 0. + 583, -4.61538458, 3.84615374, 0. + 584, -4.61538458, 4.23076916, 0. + 585, -4.61538458, 4.61538458, 0. + 586, 0.384615391, -0.384615391, 0. + 587, 0.384615391, -0.769230783, 0. + 588, 0.384615391, -1.15384614, 0. + 589, 0.384615391, -1.53846157, 0. + 590, 0.384615391, -1.92307687, 0. + 591, 0.384615391, -2.30769229, 0. + 592, 0.384615391, -2.69230771, 0. + 593, 0.384615391, -3.07692313, 0. + 594, 0.384615391, -3.46153855, 0. + 595, 0.384615391, -3.84615374, 0. + 596, 0.384615391, -4.23076916, 0. + 597, 0.384615391, -4.61538458, 0. + 598, 0.769230783, -0.384615391, 0. + 599, 0.769230783, -0.769230783, 0. + 600, 0.769230783, -1.15384614, 0. + 601, 0.769230783, -1.53846157, 0. + 602, 0.769230783, -1.92307687, 0. + 603, 0.769230783, -2.30769229, 0. + 604, 0.769230783, -2.69230771, 0. + 605, 0.769230783, -3.07692313, 0. + 606, 0.769230783, -3.46153855, 0. + 607, 0.769230783, -3.84615374, 0. + 608, 0.769230783, -4.23076916, 0. + 609, 0.769230783, -4.61538458, 0. + 610, 1.15384614, -0.384615391, 0. + 611, 1.15384614, -0.769230783, 0. + 612, 1.15384614, -1.15384614, 0. + 613, 1.15384614, -1.53846157, 0. + 614, 1.15384614, -1.92307687, 0. + 615, 1.15384614, -2.30769229, 0. + 616, 1.15384614, -2.69230771, 0. + 617, 1.15384614, -3.07692313, 0. + 618, 1.15384614, -3.46153855, 0. + 619, 1.15384614, -3.84615374, 0. + 620, 1.15384614, -4.23076916, 0. + 621, 1.15384614, -4.61538458, 0. + 622, 1.53846157, -0.384615391, 0. + 623, 1.53846157, -0.769230783, 0. + 624, 1.53846157, -1.15384614, 0. + 625, 1.53846157, -1.53846157, 0. + 626, 1.53846157, -1.92307687, 0. + 627, 1.53846157, -2.30769229, 0. + 628, 1.53846157, -2.69230771, 0. + 629, 1.53846157, -3.07692313, 0. + 630, 1.53846157, -3.46153855, 0. + 631, 1.53846157, -3.84615374, 0. + 632, 1.53846157, -4.23076916, 0. + 633, 1.53846157, -4.61538458, 0. + 634, 1.92307687, -0.384615391, 0. + 635, 1.92307687, -0.769230783, 0. + 636, 1.92307687, -1.15384614, 0. + 637, 1.92307687, -1.53846157, 0. + 638, 1.92307687, -1.92307687, 0. + 639, 1.92307687, -2.30769229, 0. + 640, 1.92307687, -2.69230771, 0. + 641, 1.92307687, -3.07692313, 0. + 642, 1.92307687, -3.46153855, 0. + 643, 1.92307687, -3.84615374, 0. + 644, 1.92307687, -4.23076916, 0. + 645, 1.92307687, -4.61538458, 0. + 646, 2.30769229, -0.384615391, 0. + 647, 2.30769229, -0.769230783, 0. + 648, 2.30769229, -1.15384614, 0. + 649, 2.30769229, -1.53846157, 0. + 650, 2.30769229, -1.92307687, 0. + 651, 2.30769229, -2.30769229, 0. + 652, 2.30769229, -2.69230771, 0. + 653, 2.30769229, -3.07692313, 0. + 654, 2.30769229, -3.46153855, 0. + 655, 2.30769229, -3.84615374, 0. + 656, 2.30769229, -4.23076916, 0. + 657, 2.30769229, -4.61538458, 0. + 658, 2.69230771, -0.384615391, 0. + 659, 2.69230771, -0.769230783, 0. + 660, 2.69230771, -1.15384614, 0. + 661, 2.69230771, -1.53846157, 0. + 662, 2.69230771, -1.92307687, 0. + 663, 2.69230771, -2.30769229, 0. + 664, 2.69230771, -2.69230771, 0. + 665, 2.69230771, -3.07692313, 0. + 666, 2.69230771, -3.46153855, 0. + 667, 2.69230771, -3.84615374, 0. + 668, 2.69230771, -4.23076916, 0. + 669, 2.69230771, -4.61538458, 0. + 670, 3.07692313, -0.384615391, 0. + 671, 3.07692313, -0.769230783, 0. + 672, 3.07692313, -1.15384614, 0. + 673, 3.07692313, -1.53846157, 0. + 674, 3.07692313, -1.92307687, 0. + 675, 3.07692313, -2.30769229, 0. + 676, 3.07692313, -2.69230771, 0. + 677, 3.07692313, -3.07692313, 0. + 678, 3.07692313, -3.46153855, 0. + 679, 3.07692313, -3.84615374, 0. + 680, 3.07692313, -4.23076916, 0. + 681, 3.07692313, -4.61538458, 0. + 682, 3.46153855, -0.384615391, 0. + 683, 3.46153855, -0.769230783, 0. + 684, 3.46153855, -1.15384614, 0. + 685, 3.46153855, -1.53846157, 0. + 686, 3.46153855, -1.92307687, 0. + 687, 3.46153855, -2.30769229, 0. + 688, 3.46153855, -2.69230771, 0. + 689, 3.46153855, -3.07692313, 0. + 690, 3.46153855, -3.46153855, 0. + 691, 3.46153855, -3.84615374, 0. + 692, 3.46153855, -4.23076916, 0. + 693, 3.46153855, -4.61538458, 0. + 694, 3.84615374, -0.384615391, 0. + 695, 3.84615374, -0.769230783, 0. + 696, 3.84615374, -1.15384614, 0. + 697, 3.84615374, -1.53846157, 0. + 698, 3.84615374, -1.92307687, 0. + 699, 3.84615374, -2.30769229, 0. + 700, 3.84615374, -2.69230771, 0. + 701, 3.84615374, -3.07692313, 0. + 702, 3.84615374, -3.46153855, 0. + 703, 3.84615374, -3.84615374, 0. + 704, 3.84615374, -4.23076916, 0. + 705, 3.84615374, -4.61538458, 0. + 706, 4.23076916, -0.384615391, 0. + 707, 4.23076916, -0.769230783, 0. + 708, 4.23076916, -1.15384614, 0. + 709, 4.23076916, -1.53846157, 0. + 710, 4.23076916, -1.92307687, 0. + 711, 4.23076916, -2.30769229, 0. + 712, 4.23076916, -2.69230771, 0. + 713, 4.23076916, -3.07692313, 0. + 714, 4.23076916, -3.46153855, 0. + 715, 4.23076916, -3.84615374, 0. + 716, 4.23076916, -4.23076916, 0. + 717, 4.23076916, -4.61538458, 0. + 718, 4.61538458, -0.384615391, 0. + 719, 4.61538458, -0.769230783, 0. + 720, 4.61538458, -1.15384614, 0. + 721, 4.61538458, -1.53846157, 0. + 722, 4.61538458, -1.92307687, 0. + 723, 4.61538458, -2.30769229, 0. + 724, 4.61538458, -2.69230771, 0. + 725, 4.61538458, -3.07692313, 0. + 726, 4.61538458, -3.46153855, 0. + 727, 4.61538458, -3.84615374, 0. + 728, 4.61538458, -4.23076916, 0. + 729, 4.61538458, -4.61538458, 0. +*Element, type=S4 + 1, 1, 10, 154, 57 + 2, 10, 11, 155, 154 + 3, 11, 12, 156, 155 + 4, 12, 13, 157, 156 + 5, 13, 14, 158, 157 + 6, 14, 15, 159, 158 + 7, 15, 16, 160, 159 + 8, 16, 17, 161, 160 + 9, 17, 18, 162, 161 + 10, 18, 19, 163, 162 + 11, 19, 20, 164, 163 + 12, 20, 21, 165, 164 + 13, 21, 2, 22, 165 + 14, 57, 154, 166, 56 + 15, 154, 155, 167, 166 + 16, 155, 156, 168, 167 + 17, 156, 157, 169, 168 + 18, 157, 158, 170, 169 + 19, 158, 159, 171, 170 + 20, 159, 160, 172, 171 + 21, 160, 161, 173, 172 + 22, 161, 162, 174, 173 + 23, 162, 163, 175, 174 + 24, 163, 164, 176, 175 + 25, 164, 165, 177, 176 + 26, 165, 22, 23, 177 + 27, 56, 166, 178, 55 + 28, 166, 167, 179, 178 + 29, 167, 168, 180, 179 + 30, 168, 169, 181, 180 + 31, 169, 170, 182, 181 + 32, 170, 171, 183, 182 + 33, 171, 172, 184, 183 + 34, 172, 173, 185, 184 + 35, 173, 174, 186, 185 + 36, 174, 175, 187, 186 + 37, 175, 176, 188, 187 + 38, 176, 177, 189, 188 + 39, 177, 23, 24, 189 + 40, 55, 178, 190, 54 + 41, 178, 179, 191, 190 + 42, 179, 180, 192, 191 + 43, 180, 181, 193, 192 + 44, 181, 182, 194, 193 + 45, 182, 183, 195, 194 + 46, 183, 184, 196, 195 + 47, 184, 185, 197, 196 + 48, 185, 186, 198, 197 + 49, 186, 187, 199, 198 + 50, 187, 188, 200, 199 + 51, 188, 189, 201, 200 + 52, 189, 24, 25, 201 + 53, 54, 190, 202, 53 + 54, 190, 191, 203, 202 + 55, 191, 192, 204, 203 + 56, 192, 193, 205, 204 + 57, 193, 194, 206, 205 + 58, 194, 195, 207, 206 + 59, 195, 196, 208, 207 + 60, 196, 197, 209, 208 + 61, 197, 198, 210, 209 + 62, 198, 199, 211, 210 + 63, 199, 200, 212, 211 + 64, 200, 201, 213, 212 + 65, 201, 25, 26, 213 + 66, 53, 202, 214, 52 + 67, 202, 203, 215, 214 + 68, 203, 204, 216, 215 + 69, 204, 205, 217, 216 + 70, 205, 206, 218, 217 + 71, 206, 207, 219, 218 + 72, 207, 208, 220, 219 + 73, 208, 209, 221, 220 + 74, 209, 210, 222, 221 + 75, 210, 211, 223, 222 + 76, 211, 212, 224, 223 + 77, 212, 213, 225, 224 + 78, 213, 26, 27, 225 + 79, 52, 214, 226, 51 + 80, 214, 215, 227, 226 + 81, 215, 216, 228, 227 + 82, 216, 217, 229, 228 + 83, 217, 218, 230, 229 + 84, 218, 219, 231, 230 + 85, 219, 220, 232, 231 + 86, 220, 221, 233, 232 + 87, 221, 222, 234, 233 + 88, 222, 223, 235, 234 + 89, 223, 224, 236, 235 + 90, 224, 225, 237, 236 + 91, 225, 27, 28, 237 + 92, 51, 226, 238, 50 + 93, 226, 227, 239, 238 + 94, 227, 228, 240, 239 + 95, 228, 229, 241, 240 + 96, 229, 230, 242, 241 + 97, 230, 231, 243, 242 + 98, 231, 232, 244, 243 + 99, 232, 233, 245, 244 +100, 233, 234, 246, 245 +101, 234, 235, 247, 246 +102, 235, 236, 248, 247 +103, 236, 237, 249, 248 +104, 237, 28, 29, 249 +105, 50, 238, 250, 49 +106, 238, 239, 251, 250 +107, 239, 240, 252, 251 +108, 240, 241, 253, 252 +109, 241, 242, 254, 253 +110, 242, 243, 255, 254 +111, 243, 244, 256, 255 +112, 244, 245, 257, 256 +113, 245, 246, 258, 257 +114, 246, 247, 259, 258 +115, 247, 248, 260, 259 +116, 248, 249, 261, 260 +117, 249, 29, 30, 261 +118, 49, 250, 262, 48 +119, 250, 251, 263, 262 +120, 251, 252, 264, 263 +121, 252, 253, 265, 264 +122, 253, 254, 266, 265 +123, 254, 255, 267, 266 +124, 255, 256, 268, 267 +125, 256, 257, 269, 268 +126, 257, 258, 270, 269 +127, 258, 259, 271, 270 +128, 259, 260, 272, 271 +129, 260, 261, 273, 272 +130, 261, 30, 31, 273 +131, 48, 262, 274, 47 +132, 262, 263, 275, 274 +133, 263, 264, 276, 275 +134, 264, 265, 277, 276 +135, 265, 266, 278, 277 +136, 266, 267, 279, 278 +137, 267, 268, 280, 279 +138, 268, 269, 281, 280 +139, 269, 270, 282, 281 +140, 270, 271, 283, 282 +141, 271, 272, 284, 283 +142, 272, 273, 285, 284 +143, 273, 31, 32, 285 +144, 47, 274, 286, 46 +145, 274, 275, 287, 286 +146, 275, 276, 288, 287 +147, 276, 277, 289, 288 +148, 277, 278, 290, 289 +149, 278, 279, 291, 290 +150, 279, 280, 292, 291 +151, 280, 281, 293, 292 +152, 281, 282, 294, 293 +153, 282, 283, 295, 294 +154, 283, 284, 296, 295 +155, 284, 285, 297, 296 +156, 285, 32, 33, 297 +157, 46, 286, 45, 4 +158, 286, 287, 44, 45 +159, 287, 288, 43, 44 +160, 288, 289, 42, 43 +161, 289, 290, 41, 42 +162, 290, 291, 40, 41 +163, 291, 292, 39, 40 +164, 292, 293, 38, 39 +165, 293, 294, 37, 38 +166, 294, 295, 36, 37 +167, 295, 296, 35, 36 +168, 296, 297, 34, 35 +169, 297, 33, 3, 34 +170, 5, 58, 298, 105 +171, 58, 59, 299, 298 +172, 59, 60, 300, 299 +173, 60, 61, 301, 300 +174, 61, 62, 302, 301 +175, 62, 63, 303, 302 +176, 63, 64, 304, 303 +177, 64, 65, 305, 304 +178, 65, 66, 306, 305 +179, 66, 67, 307, 306 +180, 67, 68, 308, 307 +181, 68, 69, 309, 308 +182, 69, 2, 70, 309 +183, 105, 298, 310, 104 +184, 298, 299, 311, 310 +185, 299, 300, 312, 311 +186, 300, 301, 313, 312 +187, 301, 302, 314, 313 +188, 302, 303, 315, 314 +189, 303, 304, 316, 315 +190, 304, 305, 317, 316 +191, 305, 306, 318, 317 +192, 306, 307, 319, 318 +193, 307, 308, 320, 319 +194, 308, 309, 321, 320 +195, 309, 70, 71, 321 +196, 104, 310, 322, 103 +197, 310, 311, 323, 322 +198, 311, 312, 324, 323 +199, 312, 313, 325, 324 +200, 313, 314, 326, 325 +201, 314, 315, 327, 326 +202, 315, 316, 328, 327 +203, 316, 317, 329, 328 +204, 317, 318, 330, 329 +205, 318, 319, 331, 330 +206, 319, 320, 332, 331 +207, 320, 321, 333, 332 +208, 321, 71, 72, 333 +209, 103, 322, 334, 102 +210, 322, 323, 335, 334 +211, 323, 324, 336, 335 +212, 324, 325, 337, 336 +213, 325, 326, 338, 337 +214, 326, 327, 339, 338 +215, 327, 328, 340, 339 +216, 328, 329, 341, 340 +217, 329, 330, 342, 341 +218, 330, 331, 343, 342 +219, 331, 332, 344, 343 +220, 332, 333, 345, 344 +221, 333, 72, 73, 345 +222, 102, 334, 346, 101 +223, 334, 335, 347, 346 +224, 335, 336, 348, 347 +225, 336, 337, 349, 348 +226, 337, 338, 350, 349 +227, 338, 339, 351, 350 +228, 339, 340, 352, 351 +229, 340, 341, 353, 352 +230, 341, 342, 354, 353 +231, 342, 343, 355, 354 +232, 343, 344, 356, 355 +233, 344, 345, 357, 356 +234, 345, 73, 74, 357 +235, 101, 346, 358, 100 +236, 346, 347, 359, 358 +237, 347, 348, 360, 359 +238, 348, 349, 361, 360 +239, 349, 350, 362, 361 +240, 350, 351, 363, 362 +241, 351, 352, 364, 363 +242, 352, 353, 365, 364 +243, 353, 354, 366, 365 +244, 354, 355, 367, 366 +245, 355, 356, 368, 367 +246, 356, 357, 369, 368 +247, 357, 74, 75, 369 +248, 100, 358, 370, 99 +249, 358, 359, 371, 370 +250, 359, 360, 372, 371 +251, 360, 361, 373, 372 +252, 361, 362, 374, 373 +253, 362, 363, 375, 374 +254, 363, 364, 376, 375 +255, 364, 365, 377, 376 +256, 365, 366, 378, 377 +257, 366, 367, 379, 378 +258, 367, 368, 380, 379 +259, 368, 369, 381, 380 +260, 369, 75, 76, 381 +261, 99, 370, 382, 98 +262, 370, 371, 383, 382 +263, 371, 372, 384, 383 +264, 372, 373, 385, 384 +265, 373, 374, 386, 385 +266, 374, 375, 387, 386 +267, 375, 376, 388, 387 +268, 376, 377, 389, 388 +269, 377, 378, 390, 389 +270, 378, 379, 391, 390 +271, 379, 380, 392, 391 +272, 380, 381, 393, 392 +273, 381, 76, 77, 393 +274, 98, 382, 394, 97 +275, 382, 383, 395, 394 +276, 383, 384, 396, 395 +277, 384, 385, 397, 396 +278, 385, 386, 398, 397 +279, 386, 387, 399, 398 +280, 387, 388, 400, 399 +281, 388, 389, 401, 400 +282, 389, 390, 402, 401 +283, 390, 391, 403, 402 +284, 391, 392, 404, 403 +285, 392, 393, 405, 404 +286, 393, 77, 78, 405 +287, 97, 394, 406, 96 +288, 394, 395, 407, 406 +289, 395, 396, 408, 407 +290, 396, 397, 409, 408 +291, 397, 398, 410, 409 +292, 398, 399, 411, 410 +293, 399, 400, 412, 411 +294, 400, 401, 413, 412 +295, 401, 402, 414, 413 +296, 402, 403, 415, 414 +297, 403, 404, 416, 415 +298, 404, 405, 417, 416 +299, 405, 78, 79, 417 +300, 96, 406, 418, 95 +301, 406, 407, 419, 418 +302, 407, 408, 420, 419 +303, 408, 409, 421, 420 +304, 409, 410, 422, 421 +305, 410, 411, 423, 422 +306, 411, 412, 424, 423 +307, 412, 413, 425, 424 +308, 413, 414, 426, 425 +309, 414, 415, 427, 426 +310, 415, 416, 428, 427 +311, 416, 417, 429, 428 +312, 417, 79, 80, 429 +313, 95, 418, 430, 94 +314, 418, 419, 431, 430 +315, 419, 420, 432, 431 +316, 420, 421, 433, 432 +317, 421, 422, 434, 433 +318, 422, 423, 435, 434 +319, 423, 424, 436, 435 +320, 424, 425, 437, 436 +321, 425, 426, 438, 437 +322, 426, 427, 439, 438 +323, 427, 428, 440, 439 +324, 428, 429, 441, 440 +325, 429, 80, 81, 441 +326, 94, 430, 93, 7 +327, 430, 431, 92, 93 +328, 431, 432, 91, 92 +329, 432, 433, 90, 91 +330, 433, 434, 89, 90 +331, 434, 435, 88, 89 +332, 435, 436, 87, 88 +333, 436, 437, 86, 87 +334, 437, 438, 85, 86 +335, 438, 439, 84, 85 +336, 439, 440, 83, 84 +337, 440, 441, 82, 83 +338, 441, 81, 6, 82 +339, 2, 69, 442, 22 +340, 69, 68, 443, 442 +341, 68, 67, 444, 443 +342, 67, 66, 445, 444 +343, 66, 65, 446, 445 +344, 65, 64, 447, 446 +345, 64, 63, 448, 447 +346, 63, 62, 449, 448 +347, 62, 61, 450, 449 +348, 61, 60, 451, 450 +349, 60, 59, 452, 451 +350, 59, 58, 453, 452 +351, 58, 5, 106, 453 +352, 22, 442, 454, 23 +353, 442, 443, 455, 454 +354, 443, 444, 456, 455 +355, 444, 445, 457, 456 +356, 445, 446, 458, 457 +357, 446, 447, 459, 458 +358, 447, 448, 460, 459 +359, 448, 449, 461, 460 +360, 449, 450, 462, 461 +361, 450, 451, 463, 462 +362, 451, 452, 464, 463 +363, 452, 453, 465, 464 +364, 453, 106, 107, 465 +365, 23, 454, 466, 24 +366, 454, 455, 467, 466 +367, 455, 456, 468, 467 +368, 456, 457, 469, 468 +369, 457, 458, 470, 469 +370, 458, 459, 471, 470 +371, 459, 460, 472, 471 +372, 460, 461, 473, 472 +373, 461, 462, 474, 473 +374, 462, 463, 475, 474 +375, 463, 464, 476, 475 +376, 464, 465, 477, 476 +377, 465, 107, 108, 477 +378, 24, 466, 478, 25 +379, 466, 467, 479, 478 +380, 467, 468, 480, 479 +381, 468, 469, 481, 480 +382, 469, 470, 482, 481 +383, 470, 471, 483, 482 +384, 471, 472, 484, 483 +385, 472, 473, 485, 484 +386, 473, 474, 486, 485 +387, 474, 475, 487, 486 +388, 475, 476, 488, 487 +389, 476, 477, 489, 488 +390, 477, 108, 109, 489 +391, 25, 478, 490, 26 +392, 478, 479, 491, 490 +393, 479, 480, 492, 491 +394, 480, 481, 493, 492 +395, 481, 482, 494, 493 +396, 482, 483, 495, 494 +397, 483, 484, 496, 495 +398, 484, 485, 497, 496 +399, 485, 486, 498, 497 +400, 486, 487, 499, 498 +401, 487, 488, 500, 499 +402, 488, 489, 501, 500 +403, 489, 109, 110, 501 +404, 26, 490, 502, 27 +405, 490, 491, 503, 502 +406, 491, 492, 504, 503 +407, 492, 493, 505, 504 +408, 493, 494, 506, 505 +409, 494, 495, 507, 506 +410, 495, 496, 508, 507 +411, 496, 497, 509, 508 +412, 497, 498, 510, 509 +413, 498, 499, 511, 510 +414, 499, 500, 512, 511 +415, 500, 501, 513, 512 +416, 501, 110, 111, 513 +417, 27, 502, 514, 28 +418, 502, 503, 515, 514 +419, 503, 504, 516, 515 +420, 504, 505, 517, 516 +421, 505, 506, 518, 517 +422, 506, 507, 519, 518 +423, 507, 508, 520, 519 +424, 508, 509, 521, 520 +425, 509, 510, 522, 521 +426, 510, 511, 523, 522 +427, 511, 512, 524, 523 +428, 512, 513, 525, 524 +429, 513, 111, 112, 525 +430, 28, 514, 526, 29 +431, 514, 515, 527, 526 +432, 515, 516, 528, 527 +433, 516, 517, 529, 528 +434, 517, 518, 530, 529 +435, 518, 519, 531, 530 +436, 519, 520, 532, 531 +437, 520, 521, 533, 532 +438, 521, 522, 534, 533 +439, 522, 523, 535, 534 +440, 523, 524, 536, 535 +441, 524, 525, 537, 536 +442, 525, 112, 113, 537 +443, 29, 526, 538, 30 +444, 526, 527, 539, 538 +445, 527, 528, 540, 539 +446, 528, 529, 541, 540 +447, 529, 530, 542, 541 +448, 530, 531, 543, 542 +449, 531, 532, 544, 543 +450, 532, 533, 545, 544 +451, 533, 534, 546, 545 +452, 534, 535, 547, 546 +453, 535, 536, 548, 547 +454, 536, 537, 549, 548 +455, 537, 113, 114, 549 +456, 30, 538, 550, 31 +457, 538, 539, 551, 550 +458, 539, 540, 552, 551 +459, 540, 541, 553, 552 +460, 541, 542, 554, 553 +461, 542, 543, 555, 554 +462, 543, 544, 556, 555 +463, 544, 545, 557, 556 +464, 545, 546, 558, 557 +465, 546, 547, 559, 558 +466, 547, 548, 560, 559 +467, 548, 549, 561, 560 +468, 549, 114, 115, 561 +469, 31, 550, 562, 32 +470, 550, 551, 563, 562 +471, 551, 552, 564, 563 +472, 552, 553, 565, 564 +473, 553, 554, 566, 565 +474, 554, 555, 567, 566 +475, 555, 556, 568, 567 +476, 556, 557, 569, 568 +477, 557, 558, 570, 569 +478, 558, 559, 571, 570 +479, 559, 560, 572, 571 +480, 560, 561, 573, 572 +481, 561, 115, 116, 573 +482, 32, 562, 574, 33 +483, 562, 563, 575, 574 +484, 563, 564, 576, 575 +485, 564, 565, 577, 576 +486, 565, 566, 578, 577 +487, 566, 567, 579, 578 +488, 567, 568, 580, 579 +489, 568, 569, 581, 580 +490, 569, 570, 582, 581 +491, 570, 571, 583, 582 +492, 571, 572, 584, 583 +493, 572, 573, 585, 584 +494, 573, 116, 117, 585 +495, 33, 574, 129, 3 +496, 574, 575, 128, 129 +497, 575, 576, 127, 128 +498, 576, 577, 126, 127 +499, 577, 578, 125, 126 +500, 578, 579, 124, 125 +501, 579, 580, 123, 124 +502, 580, 581, 122, 123 +503, 581, 582, 121, 122 +504, 582, 583, 120, 121 +505, 583, 584, 119, 120 +506, 584, 585, 118, 119 +507, 585, 117, 8, 118 +508, 2, 21, 586, 70 +509, 21, 20, 587, 586 +510, 20, 19, 588, 587 +511, 19, 18, 589, 588 +512, 18, 17, 590, 589 +513, 17, 16, 591, 590 +514, 16, 15, 592, 591 +515, 15, 14, 593, 592 +516, 14, 13, 594, 593 +517, 13, 12, 595, 594 +518, 12, 11, 596, 595 +519, 11, 10, 597, 596 +520, 10, 1, 130, 597 +521, 70, 586, 598, 71 +522, 586, 587, 599, 598 +523, 587, 588, 600, 599 +524, 588, 589, 601, 600 +525, 589, 590, 602, 601 +526, 590, 591, 603, 602 +527, 591, 592, 604, 603 +528, 592, 593, 605, 604 +529, 593, 594, 606, 605 +530, 594, 595, 607, 606 +531, 595, 596, 608, 607 +532, 596, 597, 609, 608 +533, 597, 130, 131, 609 +534, 71, 598, 610, 72 +535, 598, 599, 611, 610 +536, 599, 600, 612, 611 +537, 600, 601, 613, 612 +538, 601, 602, 614, 613 +539, 602, 603, 615, 614 +540, 603, 604, 616, 615 +541, 604, 605, 617, 616 +542, 605, 606, 618, 617 +543, 606, 607, 619, 618 +544, 607, 608, 620, 619 +545, 608, 609, 621, 620 +546, 609, 131, 132, 621 +547, 72, 610, 622, 73 +548, 610, 611, 623, 622 +549, 611, 612, 624, 623 +550, 612, 613, 625, 624 +551, 613, 614, 626, 625 +552, 614, 615, 627, 626 +553, 615, 616, 628, 627 +554, 616, 617, 629, 628 +555, 617, 618, 630, 629 +556, 618, 619, 631, 630 +557, 619, 620, 632, 631 +558, 620, 621, 633, 632 +559, 621, 132, 133, 633 +560, 73, 622, 634, 74 +561, 622, 623, 635, 634 +562, 623, 624, 636, 635 +563, 624, 625, 637, 636 +564, 625, 626, 638, 637 +565, 626, 627, 639, 638 +566, 627, 628, 640, 639 +567, 628, 629, 641, 640 +568, 629, 630, 642, 641 +569, 630, 631, 643, 642 +570, 631, 632, 644, 643 +571, 632, 633, 645, 644 +572, 633, 133, 134, 645 +573, 74, 634, 646, 75 +574, 634, 635, 647, 646 +575, 635, 636, 648, 647 +576, 636, 637, 649, 648 +577, 637, 638, 650, 649 +578, 638, 639, 651, 650 +579, 639, 640, 652, 651 +580, 640, 641, 653, 652 +581, 641, 642, 654, 653 +582, 642, 643, 655, 654 +583, 643, 644, 656, 655 +584, 644, 645, 657, 656 +585, 645, 134, 135, 657 +586, 75, 646, 658, 76 +587, 646, 647, 659, 658 +588, 647, 648, 660, 659 +589, 648, 649, 661, 660 +590, 649, 650, 662, 661 +591, 650, 651, 663, 662 +592, 651, 652, 664, 663 +593, 652, 653, 665, 664 +594, 653, 654, 666, 665 +595, 654, 655, 667, 666 +596, 655, 656, 668, 667 +597, 656, 657, 669, 668 +598, 657, 135, 136, 669 +599, 76, 658, 670, 77 +600, 658, 659, 671, 670 +601, 659, 660, 672, 671 +602, 660, 661, 673, 672 +603, 661, 662, 674, 673 +604, 662, 663, 675, 674 +605, 663, 664, 676, 675 +606, 664, 665, 677, 676 +607, 665, 666, 678, 677 +608, 666, 667, 679, 678 +609, 667, 668, 680, 679 +610, 668, 669, 681, 680 +611, 669, 136, 137, 681 +612, 77, 670, 682, 78 +613, 670, 671, 683, 682 +614, 671, 672, 684, 683 +615, 672, 673, 685, 684 +616, 673, 674, 686, 685 +617, 674, 675, 687, 686 +618, 675, 676, 688, 687 +619, 676, 677, 689, 688 +620, 677, 678, 690, 689 +621, 678, 679, 691, 690 +622, 679, 680, 692, 691 +623, 680, 681, 693, 692 +624, 681, 137, 138, 693 +625, 78, 682, 694, 79 +626, 682, 683, 695, 694 +627, 683, 684, 696, 695 +628, 684, 685, 697, 696 +629, 685, 686, 698, 697 +630, 686, 687, 699, 698 +631, 687, 688, 700, 699 +632, 688, 689, 701, 700 +633, 689, 690, 702, 701 +634, 690, 691, 703, 702 +635, 691, 692, 704, 703 +636, 692, 693, 705, 704 +637, 693, 138, 139, 705 +638, 79, 694, 706, 80 +639, 694, 695, 707, 706 +640, 695, 696, 708, 707 +641, 696, 697, 709, 708 +642, 697, 698, 710, 709 +643, 698, 699, 711, 710 +644, 699, 700, 712, 711 +645, 700, 701, 713, 712 +646, 701, 702, 714, 713 +647, 702, 703, 715, 714 +648, 703, 704, 716, 715 +649, 704, 705, 717, 716 +650, 705, 139, 140, 717 +651, 80, 706, 718, 81 +652, 706, 707, 719, 718 +653, 707, 708, 720, 719 +654, 708, 709, 721, 720 +655, 709, 710, 722, 721 +656, 710, 711, 723, 722 +657, 711, 712, 724, 723 +658, 712, 713, 725, 724 +659, 713, 714, 726, 725 +660, 714, 715, 727, 726 +661, 715, 716, 728, 727 +662, 716, 717, 729, 728 +663, 717, 140, 141, 729 +664, 81, 718, 153, 6 +665, 718, 719, 152, 153 +666, 719, 720, 151, 152 +667, 720, 721, 150, 151 +668, 721, 722, 149, 150 +669, 722, 723, 148, 149 +670, 723, 724, 147, 148 +671, 724, 725, 146, 147 +672, 725, 726, 145, 146 +673, 726, 727, 144, 145 +674, 727, 728, 143, 144 +675, 728, 729, 142, 143 +676, 729, 141, 9, 142 +*Nset, nset=Set-1, generate + 1, 729, 1 +*Elset, elset=Set-1, generate + 1, 676, 1 +** Section: Section-1 +*Shell Section, elset=Set-1, material=Material-1 +0.5, 5 +*End Part +** +** +** ASSEMBLY +** +*Assembly, name=Assembly +** +*Instance, name=Part-1-1, part=Part-1 +*End Instance +** +*Nset, nset=Set-1, instance=Part-1-1 + 2, +*Nset, nset=Set-2, instance=Part-1-1 + 1, 3, 4, 5, 6, 7, 8, 9, 34, 35, 36, 37, 38, 39, 40, 41 + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97 + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113 + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129 + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145 + 146, 147, 148, 149, 150, 151, 152, 153 +*Elset, elset=Set-2, instance=Part-1-1 + 1, 14, 27, 40, 53, 66, 79, 92, 105, 118, 131, 144, 157, 158, 159, 160 + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 183, 196, 209, 222, 235, 248 + 261, 274, 287, 300, 313, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336 + 337, 338, 351, 364, 377, 390, 403, 416, 429, 442, 455, 468, 481, 494, 495, 496 + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 520, 533, 546, 559, 572 + 585, 598, 611, 624, 637, 650, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672 + 673, 674, 675, 676 +*End Assembly +** +** MATERIALS +** +*Material, name=Material-1 +*Density +2700., +*Elastic + 2.1e+11, 0.3 +** +** BOUNDARY CONDITIONS +** +** Name: BC-1 Type: Displacement/Rotation +*Boundary +Set-2, 1, 1 +Set-2, 2, 2 +Set-2, 3, 3 +Set-2, 4, 4 +Set-2, 5, 5 +Set-2, 6, 6 +** ---------------------------------------------------------------- +** +** STEP: Step-2 +** +*Step, name=Step-2, nlgeom=NO, perturbation +*Frequency, eigensolver=Lanczos, sim, acoustic coupling=on, normalization=mass +10, , , , , +** +** OUTPUT REQUESTS +** +*Restart, write, frequency=0 +** +** FIELD OUTPUT: F-Output-2 +** +*Output, field +*Node Output, variable=PRESELECT +** +** HISTORY OUTPUT: H-Output-2 +** +*Output, history +*Energy Output, variable=ALL +*End Step