9.0 KiB
Numerical Conventions
Purpose
This document defines the numerical conventions that must remain stable across the FESA solver, reference data, tests, and result files.
When a convention here conflicts with a lower-level implementation note, this document wins unless docs/ADR.md is updated.
Source Basis
- Abaqus defines translational DOFs 1-3 and rotational DOFs 4-6, with rotations expressed in radians: https://abaqus-docs.mit.edu/2017/English/SIMACAEMODRefMap/simamod-c-conventions.htm
- Abaqus has no built-in unit system except rotation and angle measures; user data must be self-consistent: https://abaqus-docs.mit.edu/2017/English/SIMACAEMODRefMap/simamod-c-conventions.htm
- Abaqus uses right-handed coordinate systems and defines shell local surface directions from the projected global axis and positive element normal: https://abaqus-docs.mit.edu/2017/English/SIMACAEMODRefMap/simamod-c-conventions.htm
- Intel oneMKL provides
pardiso_64, an ILP64-style PARDISO interface acceptinglong long intinteger data for large sparse systems: https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2024-2/pardiso-64.html
Binding Decisions
- MITC4 coordinate and strain details will be defined explicitly in
docs/MITC4_FORMULATION.md. - Phase 1 shell nodes use 6 DOFs per node.
- The drilling DOF is retained and receives a small artificial stiffness in Phase 1.
- FESA does not enforce a unit system. Input values must be self-consistent, Abaqus-style.
- Result sign conventions follow Abaqus conventions.
- Essential boundary conditions are applied by constrained DOF elimination.
- Reaction forces are recovered from the full system vectors, not from the reduced system alone.
- Reference comparison uses stored Abaqus inputs and stored solved reference results under
reference/. - Mesh quality diagnostics are not part of Phase 1.
- Singular system diagnostics are required.
- Floating-point values use
doubleby default. - Large-model ids and indices use signed 64-bit integers.
Degrees of Freedom
All Phase 1 shell nodes expose six structural DOFs:
| FESA Component | Abaqus DOF | Meaning | Unit |
|---|---|---|---|
UX |
1 | Translation in global or transformed x-direction | model length |
UY |
2 | Translation in global or transformed y-direction | model length |
UZ |
3 | Translation in global or transformed z-direction | model length |
RX |
4 | Rotation about x-axis | radian |
RY |
5 | Rotation about y-axis | radian |
RZ |
6 | Rotation about z-axis | radian |
Implementation rules:
- Store DOF component ids using a compact enum or integer range
1..6. - Store global node ids, element ids, equation ids, sparse indices, and nonzero counts with signed 64-bit integer types.
DofManagerowns active DOF discovery, constrained/free partitioning, equation numbering, and sparse pattern inputs.- Do not store equation ids inside
NodeorElement.
Precision and Numeric Types
Recommended type aliases:
using Real = double;
using GlobalId = std::int64_t;
using LocalIndex = std::int64_t;
using EquationId = std::int64_t;
using SparseIndex = std::int64_t;
Rules:
- Use
doublefor matrix entries, vector entries, coordinates, material constants, loads, displacements, rotations, and result values. - Use 64-bit integer indexing throughout the sparse assembly path so that MKL
pardiso_64remains available for large models. - Avoid silent narrowing when passing ids or sparse arrays to external libraries.
Units
FESA follows the Abaqus convention: no unit system is built into the solver.
Rules:
- The solver core treats all dimensional input as unitless numeric values.
- The user and reference data must use a self-consistent unit system.
- Rotations are always radians.
- Result files may store an optional
unit_system_notemetadata string, but the solver must not convert units.
Examples of acceptable unit systems:
N, mm, tonne, secondN, m, kg, secondlbf, inch, lbf*s^2/in, second
Coordinate Systems
Global coordinates:
- The default global system is right-handed Cartesian.
- Phase 1 does not support user-defined transformed nodal coordinate systems unless explicitly added to
docs/ABAQUS_INPUT_SUBSET.md.
Shell local directions:
- FESA result signs follow Abaqus shell local direction conventions.
- The exact MITC4 element basis construction must be defined in
docs/MITC4_FORMULATION.md. - For Abaqus compatibility, the positive shell normal is tied to node ordering by the right-hand rule.
- Local 1 and 2 directions must form a right-handed basis with the positive normal.
Result Sign Convention
FESA result sign conventions follow Abaqus unless a FESA-specific exception is documented.
Phase 1 output variables:
U: nodal displacement and rotation vector in DOF orderUX, UY, UZ, RX, RY, RZ.RF: nodal reaction force and reaction moment in the same component order.S: shell stress components in local shell directions when available.E: shell strain components in local shell directions when available.SF: shell section force and moment resultants when available.
Stress and strain component ordering follows the Abaqus convention:
- direct 1
- direct 2
- direct 3
- shear 12
- shear 13
- shear 23
Shear strain output should be documented as engineering shear strain when matched to Abaqus-style output.
Boundary Conditions
Phase 1 uses constrained DOF elimination:
- Build the full DOF list.
- Mark constrained DOFs from
*Boundary. - Partition DOFs into free and constrained sets.
- Assemble or project the reduced free-DOF system.
- Solve for free DOF unknowns.
- Reconstruct the full displacement vector.
Rules:
- Phase 1 supports zero-valued fixed constraints as the primary path.
- Nonzero prescribed displacements are not a Phase 1 requirement unless added to
docs/ABAQUS_INPUT_SUBSET.md. DofManagerowns constrained/free mapping and must provide enough data to reconstruct full vectors.
Reaction Recovery
Reaction force and moment recovery uses the full system:
R_full = K_full * U_full - F_full
Rules:
K_fullmeans the assembled stiffness before constrained DOF elimination.U_fullmeans the solved displacement vector reconstructed with constrained DOF values.F_fullmeans the full external load vector in the original global DOF space.RFis reported primarily for constrained DOFs, but full residual-like vectors may be retained for diagnostics.- Reference comparison should include at least one reaction balance test.
Drilling DOF Policy
Phase 1 retains RZ at each shell node and assigns a small artificial drilling stiffness.
Rules:
- The value must be parameterized, not hard-coded deep inside the MITC4 kernel.
- The default value must be documented in
docs/MITC4_FORMULATION.mdbefore implementation. - The artificial stiffness should be small relative to representative membrane or bending stiffness, but large enough to avoid a singular stiffness matrix for unconstrained drilling modes.
- Reference comparisons should include sensitivity checks if the drilling stiffness materially changes displacement results.
Singular System Diagnostics
FESA must provide actionable diagnostics before or during linear solve failure.
Required Phase 1 checks:
- No free DOFs exist after applying constraints.
- At least one active element exists in the current
AnalysisModel. - Every active element references existing nodes.
- Every active element references an assigned property and material.
- Every active property references an existing material.
- Every load and boundary condition references an existing node or node set.
- At least one load component is nonzero for ordinary static solve tests unless the test explicitly expects zero response.
- Free DOFs exist that are not touched by any active element connectivity.
- Rotational DOFs, especially drilling DOFs, may be unconstrained or weakly constrained.
- The reduced system size and sparse nonzero count are nonzero before solve.
- The sparse solver reports zero pivot, numerical factorization failure, or structural singularity.
Recommended diagnostic style:
FESA-SINGULAR-DOF-UNTOUCHED:
Node 42 DOF RZ is free but has no stiffness contribution from active elements.
Check boundary conditions, element connectivity, property assignment, or drilling stiffness settings.
Phase 1 explicitly does not perform mesh quality diagnostics such as aspect ratio, warpage, skew, or element distortion checks.
Reference Comparison Tolerances
Reference comparison must use both absolute and relative tolerances:
pass if abs(actual - expected) <= abs_tol
or abs(actual - expected) <= rel_tol * max(abs(expected), reference_scale)
Initial defaults may be proposed per benchmark in docs/VERIFICATION_PLAN.md. Final tolerances should be tied to stored reference data and solver maturity.
Open Decisions
- The exact default drilling stiffness scale.
- The final MITC4 local basis algorithm for warped quadrilateral elements.
- Which shell stress/strain/resultant outputs are mandatory in Phase 1.
- The first accepted reference result file format under
reference/.