Files
AbaqusSubroutineDev/docs/reference-models/uel-3d-euler-beam.md
T
2026-06-12 09:08:25 +09:00

29 KiB

3D Euler-Bernoulli Beam UEL Reference Models

Metadata

  • feature_id: uel-3d-euler-beam
  • source_requirement: docs/requirements/uel-3d-euler-beam.md
  • source_research: docs/research/uel-3d-euler-beam-research.md
  • source_formulation: docs/formulations/uel-3d-euler-beam.md
  • source_numerical_review: docs/numerical-reviews/uel-3d-euler-beam.md
  • source_io_definition: docs/io-definitions/uel-3d-euler-beam.md
  • status: ready-for-tdd-test-creation
  • owner_agent: reference-model-agent
  • date: 2026-06-11

Reference Strategy

  • verification_scope: first-scope two-node, small-displacement, linear elastic 3D Euler-Bernoulli beam Abaqus/Standard UEL
  • code_verification: no-Abaqus Fortran drivers must verify local stiffness, transformation, rigid modes, residual sign, ABI array mapping, and invalid-input diagnostics before production Fortran is implemented
  • solution_verification: future user-generated Abaqus reference bundles must compare nodal displacement and reaction CSVs for straight and rotated beam cases
  • benchmark_reference_comparison: native Abaqus beam comparison is planned only after the user creates external artifacts on an Abaqus PC
  • excluded_validation_scope: no physical experiment validation, no direct ODB parsing, no repository-run Abaqus jobs, no fake reference CSV generation

This document is a test and artifact plan. It does not create Fortran source, test files, manifest files, input decks, CSVs, or reference artifacts.

Planned Production and Test Source Layout

The next implementation gates should use this planned layout unless a later approved implementation plan changes it.

Production source paths planned for later steps:

path purpose no-Abaqus test role
src/fortran/uel_3d_euler_beam_kernel.f90 pure/testable beam geometry, local stiffness, transform, residual, and validation logic compiled by all no-Abaqus kernel and ABI adapter tests
src/fortran/uel_3d_euler_beam_abi_adapter.f90 Abaqus-array adapter logic without the literal Abaqus UEL entry point compiled by no-Abaqus ABI mapping tests
src/fortran/uel_3d_euler_beam_uel.for thin Abaqus/Standard fixed-form UEL wrapper preserving the manual signature and ABA_PARAM.INC include checked by Python source-smoke because the file depends on Abaqus-provided include and XIT

Planned test source paths for step 6:

path purpose
tests/fortran/manifest.json Intel Fortran no-Abaqus validation manifest consumed by scripts/validate_fortran.py
tests/fortran/uel_3d_euler_beam/test_support.f90 simple assertion, tolerance, vector/matrix comparison helpers
tests/fortran/uel_3d_euler_beam/test_kernel_stiffness.f90 local stiffness and analytical response tests
tests/fortran/uel_3d_euler_beam/test_kernel_transform_modes.f90 transformation, symmetry, reversed node order, and rigid-body mode tests
tests/fortran/uel_3d_euler_beam/test_abi_static.f90 no-Abaqus ABI adapter tests for RHS, AMATRX, ENERGY, dimensions, and LFLAGS
tests/fortran/uel_3d_euler_beam/test_invalid_inputs.f90 validation diagnostics and unsupported-request tests
scripts/test_uel_3d_euler_beam_uel.py source-smoke contract for the fixed-form Abaqus UEL wrapper signature and dimensions

Step 6 RED expectation:

  • After tests/fortran/manifest.json and the planned test drivers are created, python scripts/validate_fortran.py should fail before production implementation because planned production sources are missing or unimplemented.
  • If step 6 creates temporary stubs to reach executable assertions, the targeted assertions must fail for missing stiffness, transformation, residual, or validation behavior before step 7 implementation.

Planned tests/fortran/manifest.json

The current scripts/validate_fortran.py manifest schema is:

{
  "tests": [
    {
      "name": "test_name",
      "sources": ["path/to/source.f90"]
    }
  ]
}

Step 6 should create this planned manifest:

{
  "tests": [
    {
      "name": "uel_3d_euler_beam_kernel_stiffness",
      "sources": [
        "tests/fortran/uel_3d_euler_beam/test_support.f90",
        "src/fortran/uel_3d_euler_beam_kernel.f90",
        "tests/fortran/uel_3d_euler_beam/test_kernel_stiffness.f90"
      ]
    },
    {
      "name": "uel_3d_euler_beam_kernel_transform_modes",
      "sources": [
        "tests/fortran/uel_3d_euler_beam/test_support.f90",
        "src/fortran/uel_3d_euler_beam_kernel.f90",
        "tests/fortran/uel_3d_euler_beam/test_kernel_transform_modes.f90"
      ]
    },
    {
      "name": "uel_3d_euler_beam_abi_static",
      "sources": [
        "tests/fortran/uel_3d_euler_beam/test_support.f90",
        "src/fortran/uel_3d_euler_beam_kernel.f90",
        "src/fortran/uel_3d_euler_beam_abi_adapter.f90",
        "tests/fortran/uel_3d_euler_beam/test_abi_static.f90"
      ]
    },
    {
      "name": "uel_3d_euler_beam_invalid_inputs",
      "sources": [
        "tests/fortran/uel_3d_euler_beam/test_support.f90",
        "src/fortran/uel_3d_euler_beam_kernel.f90",
        "src/fortran/uel_3d_euler_beam_abi_adapter.f90",
        "tests/fortran/uel_3d_euler_beam/test_invalid_inputs.f90"
      ]
    }
  ]
}

No-Abaqus Test Inventory

test_id manifest_test category purpose expected RED before implementation primary requirements
NOA-K-STIFF-001 uel_3d_euler_beam_kernel_stiffness analytical unit verify exact 12x12 local stiffness entries for axial, torsion, Iy, and Iz subblocks compile failure from missing kernel or assertion failure on zero/unimplemented matrix REQ-002, REQ-005, REQ-008
NOA-K-STIFF-002 uel_3d_euler_beam_kernel_stiffness analytical unit verify axial response EA/L under u2-u1 displacement same as above REQ-002, REQ-008
NOA-K-STIFF-003 uel_3d_euler_beam_kernel_stiffness analytical unit verify torsional response GJ/L under th1_2-th1_1 rotation same as above REQ-002, REQ-008
NOA-K-BEND2-001 uel_3d_euler_beam_kernel_stiffness analytical unit verify local 2 bending using w/th2 and E*Iy terms same as above REQ-002, REQ-005, REQ-008
NOA-K-BEND3-001 uel_3d_euler_beam_kernel_stiffness analytical unit verify local 3 bending using v/th3 and E*Iz terms same as above REQ-002, REQ-005, REQ-008
NOA-K-SYM-001 uel_3d_euler_beam_kernel_transform_modes matrix invariant verify K_global symmetry with scale-aware tolerance compile failure or symmetry assertion failure REQ-008, REQ-015
NOA-K-RBM-001 uel_3d_euler_beam_kernel_transform_modes matrix invariant verify six rigid-body displacement vectors produce near-zero internal force for an identity-frame beam compile failure or nonzero rigid-mode residual REQ-002, REQ-012
NOA-K-ROT-001 uel_3d_euler_beam_kernel_transform_modes transformation verify identity orientation gives K_global=k_local and arbitrary rotation gives K_global=T^T*k_local*T compile failure or transform mismatch REQ-007, REQ-008
NOA-K-REVNODE-001 uel_3d_euler_beam_kernel_transform_modes regression verify reversed node order is equivalent to permuting nodal DOFs with the documented local axis convention compile failure or permutation mismatch REQ-004, REQ-007
NOA-A-RHS-001 uel_3d_euler_beam_abi_static ABI/residual verify RHS(1:12,1)=-K_global*U(1:12) for LFLAGS(3)=1 and 5 compile failure or wrong sign REQ-009
NOA-A-AMATRX-001 uel_3d_euler_beam_abi_static ABI/stiffness verify AMATRX=K_global for LFLAGS(3)=1 and 2 and zeroed matrix for residual-only requests compile failure or mapping mismatch REQ-003, REQ-004, REQ-008
NOA-A-PROPS-001 uel_3d_euler_beam_abi_static ABI/property mapping verify PROPS(1:9) maps to E,G,A,Iy,Iz,J,a_ref_1,a_ref_2,a_ref_3 exactly compile failure or property permutation mismatch REQ-005, REQ-007
NOA-A-ENERGY-001 uel_3d_euler_beam_abi_static ABI/output policy verify ENERGY(1:8)=0.0, NSVARS>=1, and PNEWDT is not changed for valid supported calls compile failure or output policy mismatch REQ-010
NOA-I-SHAPE-001 uel_3d_euler_beam_invalid_inputs negative verify diagnostics for NDOFEL, NNODE, MCRD, NPROPS, NJPROP, NSVARS, NRHS, MLVARX violations compile failure or missing diagnostic REQ-003, REQ-006
NOA-I-PHYS-001 uel_3d_euler_beam_invalid_inputs negative verify diagnostics for nonfinite coordinates/properties, nonpositive E,G,A,Iy,Iz,J, zero length, zero orientation, and near-parallel orientation compile failure or missing diagnostic REQ-006, REQ-007
NOA-I-LFLAGS-001 uel_3d_euler_beam_invalid_inputs negative verify diagnostics for unsupported LFLAGS(1), unsupported LFLAGS(2), unsupported LFLAGS(3), unsupported LFLAGS(4), and NDLOAD /= 0 compile failure or missing diagnostic REQ-010

Default no-Abaqus tolerances:

  • stiffness absolute tolerance: 1.0e-10 after scale-aware normalization
  • stiffness relative tolerance: 1.0e-10
  • vector absolute tolerance: 1.0e-10 after scale-aware normalization
  • vector relative tolerance: 1.0e-10
  • symmetry normalized tolerance: 1.0e-12
  • exact validation diagnostics: string or integer status identity match

Wrapper or Smoke-Test Strategy Without Abaqus

The production UEL wrapper itself should remain a thin Abaqus ABI entry point. No-Abaqus smoke testing should target uel_3d_euler_beam_abi_adapter.f90, which receives arrays shaped like the Abaqus UEL arguments but does not require Abaqus to call it.

The ABI adapter tests must verify:

  • NDOFEL=12, NNODE=2, MCRD>=3, NPROPS=9, NJPROP=0, NSVARS>=1, NRHS=1, and MLVARX>=12
  • COORDS(1:3,1:2) maps to X1, X2
  • U(1:12) maps to the global kernel vector without permutation
  • PROPS(1:9) maps exactly to the interface contract
  • LFLAGS(1)=1|2, LFLAGS(2)=0, LFLAGS(3)=1|2|5, and LFLAGS(4)=0 select the supported static general-step path
  • LFLAGS(3)=1, 2, and 5 select the expected AMATRX and RHS outputs
  • non-requested AMATRX or RHS storage is deterministically zeroed by the no-Abaqus adapter
  • ENERGY(1:8) is zeroed and SVARS is unused

Future External Abaqus Reference Model Inventory

All external models are future user-generated evidence and start with artifact_status=needs-reference-artifacts.

model_id category purpose status required_artifacts
ext-uel-smoke-static smoke one UEL element with supported keyword subset, basic convergence, and nonzero stiffness path needs-reference-artifacts model.inp, metadata, log tails, nodal_displacements.csv, reactions.csv
ext-cantilever-axial analytical/reference straight cantilever axial extension against nodal U1 and support RF1 needs-reference-artifacts same
ext-cantilever-torsion analytical/reference straight cantilever torsion against nodal UR1 and support RM1 needs-reference-artifacts same
ext-cantilever-bend-local2 analytical/reference local 2 bending, w/th2 response, displacement/reaction/moment sanity needs-reference-artifacts same
ext-cantilever-bend-local3 analytical/reference local 3 bending, v/th3 response, displacement/reaction/moment sanity needs-reference-artifacts same
ext-rotated-cantilever orientation regression non-axis-aligned element with explicit PROPS(7:9) orientation vector needs-reference-artifacts same
ext-two-element-collinear patch/regression two collinear UEL elements with continuous displacement field and equilibrium reactions needs-reference-artifacts same

No element-force CSV is required for first-scope external comparison. Element-level force comparison remains deferred until a later SVARS or output-recovery contract is approved.

External Model Records

ext-uel-smoke-static

  • category: smoke
  • purpose: verify supported Abaqus keyword subset and UEL call path using a single static element
  • verified_requirements: REQ-001, REQ-003, REQ-004, REQ-005, REQ-008, REQ-009, REQ-011, REQ-013, REQ-014, REQ-015
  • analysis_type: linear static small-displacement
  • element_type: TYPE=U1, two-node UEL
  • material/section data: PROPS(1:9) per interface contract
  • boundary_conditions: node 1 fixed in DOFs 1-6; node 2 constrained as needed to prevent unintended mechanisms for the chosen load
  • loads: one small nodal concentrated load or moment within the supported *CLOAD scope
  • expected_physical_quantities: nodal displacement, reaction, convergence/log status
  • tolerance: external displacement absolute 1.0e-8; reaction relative 1.0e-6 plus model-specific near-zero absolute floor
  • artifact_status: needs-reference-artifacts

ext-cantilever-axial

  • category: analytical/reference
  • purpose: isolate axial stiffness and global U1/RF1 behavior for a straight beam aligned with global x
  • verified_requirements: REQ-002, REQ-005, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: node 1 fixed in DOFs 1-6; node 2 constrained to allow only axial extension when needed by the benchmark
  • loads: nodal force in global U1 direction at node 2
  • expected_physical_quantities: node 2 U1, node 1 RF1, global equilibrium
  • artifact_status: needs-reference-artifacts

ext-cantilever-torsion

  • category: analytical/reference
  • purpose: isolate torsional stiffness and rotational reaction about local/global 1 for a straight beam aligned with global x
  • verified_requirements: REQ-002, REQ-005, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: node 1 fixed in DOFs 1-6; node 2 constrained to isolate UR1 rotation when needed
  • loads: nodal moment about global UR1 at node 2
  • expected_physical_quantities: node 2 UR1, node 1 RM1, global moment equilibrium
  • artifact_status: needs-reference-artifacts

ext-cantilever-bend-local2

  • category: analytical/reference
  • purpose: verify local 2 bending using E*Iy with w/th2 response
  • verified_requirements: REQ-002, REQ-005, REQ-007, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: node 1 fixed in DOFs 1-6
  • loads: nodal force or moment at node 2 selected to activate local 1-3 plane bending
  • expected_physical_quantities: node 2 global displacement component corresponding to local w, node 2 rotation component, support force and moment
  • artifact_status: needs-reference-artifacts

ext-cantilever-bend-local3

  • category: analytical/reference
  • purpose: verify local 3 bending using E*Iz with v/th3 response
  • verified_requirements: REQ-002, REQ-005, REQ-007, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: node 1 fixed in DOFs 1-6
  • loads: nodal force or moment at node 2 selected to activate local 1-2 plane bending
  • expected_physical_quantities: node 2 global displacement component corresponding to local v, node 2 rotation component, support force and moment
  • artifact_status: needs-reference-artifacts

ext-rotated-cantilever

  • category: orientation regression
  • purpose: verify global coordinate transformation and explicit PROPS(7:9) orientation vector for a non-axis-aligned element
  • verified_requirements: REQ-004, REQ-007, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: node 1 fixed in DOFs 1-6
  • loads: nodal load at node 2 with a component that exercises transformed bending
  • expected_physical_quantities: global nodal displacement, support reaction, coordinate-system labels
  • artifact_status: needs-reference-artifacts

ext-two-element-collinear

  • category: patch/regression
  • purpose: verify two-element collinear assembly behavior, continuity, and equilibrium for the UEL input subset
  • verified_requirements: REQ-002, REQ-003, REQ-004, REQ-008, REQ-009, REQ-013, REQ-014, REQ-015
  • boundary_conditions: one end fixed; middle node free; end node loaded
  • loads: axial or bending load chosen by the external reference model author
  • expected_physical_quantities: displacements at free nodes and reactions at constrained node
  • artifact_status: needs-reference-artifacts

Abaqus Input Requirements

Every external model.inp must stay within the supported keyword subset from docs/io-definitions/uel-3d-euler-beam.md:

  • *HEADING
  • *NODE
  • *ELEMENT
  • *ELSET
  • *NSET
  • *USER ELEMENT, TYPE=U1, NODES=2, COORDINATES=3, PROPERTIES=9, VARIABLES=1
  • active DOF line: 1, 2, 3, 4, 5, 6
  • *UEL PROPERTY, ELSET=<uel_element_set> with data order E,G,A,Iy,Iz,J,a_ref_1,a_ref_2,a_ref_3
  • *BOUNDARY
  • *CLOAD
  • *STEP
  • *STATIC
  • *OUTPUT
  • *NODE OUTPUT
  • *END STEP

Unsupported keywords remain unsupported for these reference models, including distributed loads, density/mass/dynamics, native beam section keywords for the UEL, *ORIENTATION as UEL orientation input, nonlinear geometry, thermal, plasticity, damage, and element output claims.

Required output requests:

  • nodal displacement output sufficient to populate extracted/nodal_displacements.csv
  • nodal reaction output sufficient to populate extracted/reactions.csv
  • log/status outputs through Abaqus .msg, .dat, .log, and .sta files

Artifact Bundle Contract

Future user-provided reference artifacts must use this structure:

references/
  uel-3d-euler-beam/
    <model-id>/
      README.md
      model.inp
      metadata.json
      job.msg.tail.txt
      job.dat.tail.txt
      job.log.tail.txt
      job.sta.tail.txt
      result.odb.sha256
      extraction/
        extract_odb_to_csv.py
      extracted/
        nodal_displacements.csv
        reactions.csv

Required for ready-for-comparison:

  • README.md
  • model.inp
  • metadata.json
  • job.msg.tail.txt
  • job.dat.tail.txt
  • job.log.tail.txt
  • job.sta.tail.txt
  • all CSV files declared in metadata.json
  • source hash entries for the exact user subroutine source files used after implementation exists
  • Abaqus version, precision, compiler vendor/name/version, extraction provenance, units, coordinate system, and tolerance policy

Optional:

  • result.odb.sha256 when the ODB is not stored but the result database identity must be tracked
  • extraction/extract_odb_to_csv.py when the user can provide the extraction script
  • extra notes files that do not replace required metadata

Reference artifacts must remain needs-reference-artifacts until the user supplies all required files. This repository must not fabricate CSVs or log tails.

Metadata JSON Contract

Each metadata.json must use schema version abaqus-user-subroutine-artifact-v1 and include at least:

{
  "schema_version": "abaqus-user-subroutine-artifact-v1",
  "feature_id": "uel-3d-euler-beam",
  "model_id": "<model-id>",
  "artifact_status": "needs-reference-artifacts | ready-for-comparison | blocked",
  "abaqus": {
    "version": "<Abaqus version>",
    "precision": "single | double"
  },
  "compiler": {
    "vendor": "Intel oneAPI",
    "name": "ifx | ifort",
    "version": "<compiler version>"
  },
  "subroutine": {
    "entry_points": ["UEL"],
    "source_files": [
      {
        "path": "src/fortran/uel_3d_euler_beam_kernel.f90",
        "language": "Fortran",
        "sha256": "<sha256 after implementation exists>"
      },
      {
        "path": "src/fortran/uel_3d_euler_beam_abi_adapter.f90",
        "language": "Fortran",
        "sha256": "<sha256 after implementation exists>"
      },
      {
        "path": "src/fortran/uel_3d_euler_beam_uel.for",
        "language": "Fortran",
        "sha256": "<sha256 after implementation exists>"
      }
    ]
  },
  "input_file": "model.inp",
  "units": {
    "length": "<declared length unit>",
    "force": "<declared force unit>",
    "stress": "<declared stress unit>",
    "moment": "<declared force*length unit>",
    "rotation": "radian"
  },
  "coordinate_system": "GLOBAL",
  "analysis_type": "linear static small-displacement",
  "element_types": ["U1"],
  "outputs": {
    "tails": {
      "msg": "job.msg.tail.txt",
      "dat": "job.dat.tail.txt",
      "log": "job.log.tail.txt",
      "sta": "job.sta.tail.txt"
    },
    "csv": {
      "nodal_displacements": "extracted/nodal_displacements.csv",
      "reactions": "extracted/reactions.csv"
    }
  },
  "extraction": {
    "source_odb": "job.odb",
    "tool": "Abaqus Python",
    "extracted_at": "<ISO-8601 datetime>",
    "csv_directory": "extracted",
    "script": "extraction/extract_odb_to_csv.py",
    "odb_sha256_file": "result.odb.sha256"
  },
  "comparisons": {
    "nodal_displacements": {
      "reference_csv": "extracted/nodal_displacements.csv",
      "required_columns": ["step", "frame", "time", "instance", "node_label", "quantity", "component", "coordinate_system", "unit", "value"],
      "key_columns": ["step", "frame", "instance", "node_label", "quantity", "component"],
      "value_column": "value",
      "unit_column": "unit",
      "coordinate_system_column": "coordinate_system",
      "tolerance": {
        "absolute": 1.0e-8,
        "relative": 1.0e-8,
        "relative_floor": 1.0e-12
      }
    },
    "reactions": {
      "reference_csv": "extracted/reactions.csv",
      "required_columns": ["step", "frame", "time", "instance", "node_label", "quantity", "component", "coordinate_system", "unit", "value"],
      "key_columns": ["step", "frame", "instance", "node_label", "quantity", "component"],
      "value_column": "value",
      "unit_column": "unit",
      "coordinate_system_column": "coordinate_system",
      "tolerance": {
        "absolute": "<model-specific near-zero floor>",
        "relative": 1.0e-6,
        "relative_floor": 1.0e-12
      }
    }
  }
}

The absolute reaction tolerance must be set per external model using a declared load or moment scale. A recommended policy is:

reaction_absolute_floor = 1.0e-10 * max(1.0, abs(total_applied_force_or_moment_in_matching_unit))

Reference CSV Requirements

extracted/nodal_displacements.csv

Required columns:

column type rule
step string Abaqus step name or stable step index
frame integer frame or increment index
time float step time or total time
instance string Abaqus instance name or ASSEMBLY
node_label integer Abaqus node label
quantity string U or UR
component string U1, U2, U3, UR1, UR2, or UR3
coordinate_system string must be GLOBAL
unit string declared length unit for U; radian for UR
value float extracted numeric value

Required components:

  • U1, U2, U3 for all compared output nodes
  • UR1, UR2, UR3 when rotational displacement is part of the model comparison

extracted/reactions.csv

Required columns are the same as nodal_displacements.csv.

Required components:

  • RF1, RF2, RF3 for constrained translational DOFs used in equilibrium checks
  • RM1, RM2, RM3 for constrained rotational DOFs used in moment equilibrium checks

If Abaqus extraction uses a different raw rotational reaction label, metadata must map the raw name to RM1, RM2, and RM3.

Optional CSVs

No optional CSV is required for first-scope comparison. The following remain out of scope unless a later gate approves SVARS or element output:

  • element_forces.csv
  • stresses.csv
  • strains.csv
  • energy_or_residual.csv

Coverage Matrix

requirement_id planned_model_or_test compared_quantity artifact_or_test_file tolerance verification_method status
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-001 NOA-A-AMATRX-001, ext-uel-smoke-static entry point and UEL-only input subset test_abi_static.f90, model.inp exact contract inspection no-Abaqus; external artifact review planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-002 NOA-K-STIFF-001, NOA-K-BEND2-001, NOA-K-BEND3-001, external cantilevers axial, torsion, bending response test_kernel_stiffness.f90, external CSVs no-Abaqus rel 1.0e-10; external per metadata no-Abaqus; external comparison planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-003 NOA-A-AMATRX-001, NOA-I-SHAPE-001 NDOFEL=12, two 6-DOF nodes test_abi_static.f90, test_invalid_inputs.f90 exact no-Abaqus planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-004 NOA-A-AMATRX-001, NOA-K-REVNODE-001 DOF order and node permutation test_abi_static.f90, test_kernel_transform_modes.f90 exact mapping; rel 1.0e-10 no-Abaqus planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-005 NOA-A-PROPS-001, NOA-K-STIFF-002, NOA-K-STIFF-003, bending tests property mapping and stiffness terms test_abi_static.f90, test_kernel_stiffness.f90 exact mapping; rel 1.0e-10 no-Abaqus planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-006 NOA-I-PHYS-001 invalid properties and nonfinite inputs test_invalid_inputs.f90 exact diagnostic no-Abaqus planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-007 NOA-K-ROT-001, NOA-I-PHYS-001, ext-rotated-cantilever orientation transform and invalid orientation test_kernel_transform_modes.f90, test_invalid_inputs.f90, external CSVs rel 1.0e-10; external per metadata no-Abaqus; external comparison planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-008 NOA-K-STIFF-001, NOA-A-AMATRX-001, all external models AMATRX, stiffness response, reactions Fortran tests, reactions.csv no-Abaqus rel 1.0e-10; external reaction rel 1.0e-6 no-Abaqus; external comparison planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-009 NOA-A-RHS-001, external cantilevers residual sign, displacement/reaction consistency test_abi_static.f90, external CSVs no-Abaqus vector rel 1.0e-10; external displacement abs 1.0e-8 no-Abaqus; external comparison planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-010 NOA-I-LFLAGS-001, document inspection unsupported features rejected or absent test_invalid_inputs.f90, source review later exact diagnostic no-Abaqus; source review planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-011 ext-* metadata contract no repository-run Abaqus or ODB parsing metadata.json, log tails, extracted CSVs exact provenance artifact review planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-012 planned manifest RED no-Abaqus evidence before production source tests/fortran/manifest.json RED then GREEN evidence validation-command planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-013 all external models artifact bundle completeness references/uel-3d-euler-beam/<model-id>/ schema exact reference-artifact-validation planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-014 all external models CSV identity, units, coordinate system, components nodal_displacements.csv, reactions.csv schema exact schema-validation planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-015 all no-Abaqus and external models explicit tolerances manifest tests and metadata comparisons documented tolerances test-review; validation-review planned
ABAQUS-USUB-REQ-UEL-3D-EULER-BEAM-016 phase gate artifacts separation of gate outputs docs and phase index not applicable document inspection planned

Artifact Acceptance Checklist

Before any external model is marked ready-for-comparison:

  • model.inp uses only the supported keyword subset.
  • metadata.json uses abaqus-user-subroutine-artifact-v1.
  • Abaqus version, precision, compiler vendor/name/version, source hashes, units, coordinate system, extraction provenance, and tolerance policy are present.
  • job.msg.tail.txt, job.dat.tail.txt, job.log.tail.txt, and job.sta.tail.txt exist and correspond to the same run.
  • Declared CSV files exist under extracted/.
  • CSVs include required columns, accepted component labels, declared units, and GLOBAL coordinate system.
  • Artifact status remains needs-reference-artifacts until the user provides externally generated files.
  • No ODB parsing or Abaqus job execution is required by this repository.

Open Issues and Downstream Handoff

I/O Definition Agent

  • No blocking interface issue remains for test planning.
  • If future extraction shows Abaqus rotational reaction labels differ from RM1/RM2/RM3, update the interface mapping before comparison tooling relies on those labels.

TDD Test Agent

  • Create the planned tests/fortran/manifest.json and test driver files exactly as listed.
  • Run python scripts/validate_fortran.py after adding tests to capture RED evidence before production source is added.
  • Do not add production Fortran source in step 6 unless that step is explicitly changed to include implementation; current phase reserves implementation for step 7.

Implementation Planning Agent

  • Use the planned source layout and keep uel_3d_euler_beam_uel.for as a thin wrapper around a no-Abaqus-testable kernel and ABI adapter.
  • Preserve the PROPS(1:9), NDOFEL=12, NNODE=2, and RHS=-K_global*U contracts.

Reference Verification Agent

  • Treat external artifacts as absent until user-generated bundles are added.
  • Validate artifact metadata and CSV schema before comparing values.
  • Compare only nodal displacement and reaction CSVs for first-scope external evidence.

Physics Evaluation Agent

  • For future external artifacts, check displacement direction, support reaction sign, global equilibrium, moment equilibrium for torsion/bending cases, and rotated-frame plausibility before release readiness.