7.9 KiB
3D Euler-Bernoulli Beam Kernel Formulation
Metadata
- feature_id: euler-beam-3d
- source_requirement: docs/requirements/euler-beam-3d.md
- source_research: docs/research/euler-beam-3d-research.md
- status: ready-for-numerical-review
- owner_agent: formulation-agent
- date: 2026-06-12
Scope and Assumptions
- analysis_type: linear static kernel only.
- element_type: two-node straight prismatic 3D Euler-Bernoulli beam.
- deformation: small displacement and small rotation.
- linearity: linear elastic.
- material_model_boundary: constant
EandG. - section_model_boundary: constant
A,J,Iy,Iz. - coordinate_system: local Cartesian beam basis and global Cartesian basis.
- units: user-consistent.
Primary Variables and DOFs
- nodal_variables: displacement vector and rotation vector at each node.
- dof_ordering:
[u1, v1, w1, rx1, ry1, rz1, u2, v2, w2, rx2, ry2, rz2]. - local_axis_convention:
- local
xis the normalized vector from node 1 to node 2. - local
yis the normalized projection of the user orientation vector onto the plane normal to localx. - local
z = x cross y.
- local
- sign_convention: internal local end force vector is
f_local = K_local * u_localin the same DOF order.
Strong Form and Boundary Conditions
The kernel is an element-level direct-stiffness implementation of the linear Euler-Bernoulli frame equations. For a prismatic member in local coordinate x:
- axial equilibrium uses constant axial stiffness
EA. - torsional equilibrium uses constant torsional stiffness
GJ. - bending in local
x-yuses flexural rigidityEIz. - bending in local
x-zuses flexural rigidityEIy.
Essential and natural boundary conditions are not applied by this kernel. They are downstream solver assembly concerns.
Weak or Variational Form
The element stiffness represents the second variation of strain energy:
U = 1/2 integral_0^L [
EA * (du/dx)^2
+ GJ * (drx/dx)^2
+ EIz * (d2v/dx2)^2
+ EIy * (d2w/dx2)^2
] dx
The element internal force is the derivative of this energy with respect to the nodal DOFs:
f_local = K_local * u_local
External load vectors are out of scope for this increment.
Discretization
- axial interpolation: linear two-node interpolation for
u. - torsion interpolation: linear two-node interpolation for
rx. - bending interpolation: cubic Hermite interpolation for each transverse displacement and corresponding nodal rotation.
- nodal_layout: node 1 at local coordinate
x=0, node 2 atx=L. - partition_of_unity_check: axial and torsion linear shape functions sum to one.
- kronecker_delta_check: axial, torsion, and Hermite bending shape functions recover the nodal displacement/rotation DOFs.
Kinematics
- axial strain:
epsilon_x = du/dx. - torsion rate:
kappa_x = drx/dx. - bending curvature for local
x-ybending: curvature associated withvand rotationsrz. - bending curvature for local
x-zbending: curvature associated withwand rotationsry. - strain_measure: infinitesimal strain and small rotation curvature measures only.
Constitutive Contract
- axial force result:
N = EA * du/dx. - torsional moment result:
Mx = GJ * drx/dx. - bending moment about local
z: usesEIz. - bending moment about local
y: usesEIy. - material_state_variables: none.
Element Equations
Let:
a = E*A/L
t = G*J/L
by = E*Iy
bz = E*Iz
cy1 = 12*by/L^3
cy2 = 6*by/L^2
cy3 = 4*by/L
cy4 = 2*by/L
cz1 = 12*bz/L^3
cz2 = 6*bz/L^2
cz3 = 4*bz/L
cz4 = 2*bz/L
K_local is a 12x12 symmetric matrix initialized to zero, with these nonzero entries before symmetric mirroring:
K(0,0)= a K(0,6)=-a K(6,6)= a
K(3,3)= t K(3,9)=-t K(9,9)= t
K(1,1)= cz1 K(1,5)= cz2 K(1,7)=-cz1 K(1,11)= cz2
K(5,5)= cz3 K(5,7)=-cz2 K(5,11)= cz4
K(7,7)= cz1 K(7,11)=-cz2 K(11,11)= cz3
K(2,2)= cy1 K(2,4)=-cy2 K(2,8)=-cy1 K(2,10)=-cy2
K(4,4)= cy3 K(4,8)= cy2 K(4,10)= cy4
K(8,8)= cy1 K(8,10)= cy2 K(10,10)= cy3
The implementation must mirror upper-triangular entries to the lower triangle.
Mapping and Numerical Integration
- reference_coordinates: local beam coordinate
x in [0,L]. - isoparametric_mapping: straight member mapping only.
- jacobian:
dx/dxi = L/2if a parent coordinate is introduced; the direct closed-form stiffness does not require runtime quadrature. - determinant_checks:
L > 0and finite. - gauss_points_and_weights: not used by the closed-form kernel.
- integration_policy: analytical closed-form.
Transformation
Let R be the 3x3 matrix whose rows are local basis vectors expressed in global coordinates:
R = [ x_local^T
y_local^T
z_local^T ]
For each node, the same R maps global translational and rotational components to local components. The 12x12 transform T is block diagonal:
u_local = T * u_global
K_global = T^T * K_local * T
Global end-force recovery uses the same convention:
u_local = T * u_global
f_local = K_local * u_local
f_global = T^T * f_local
Output Recovery
- displacement: input only for this kernel.
- reaction: not recovered by this kernel; downstream assembly/constraints own reactions.
- element_force: local and global element end forces recover from stiffness times displacement.
- strain: out of scope.
- stress: out of scope.
- nodal_extrapolation: not applicable.
Invalid Input Handling
length <= 0, nonfinite length, or near-zero geometry length must throwstd::invalid_argument.- nonpositive or nonfinite
E,G,A,J,Iy, orIzmust throwstd::invalid_argument. - zero orientation vector or orientation parallel to local
xmust throwstd::invalid_argument.
Unit Test Tolerance
- representative coefficient checks: absolute tolerance
1.0e-10for the planned deterministic values. - symmetry checks: absolute tolerance
1.0e-10. - rigid mode force norm checks: absolute tolerance
1.0e-9for simple test magnitudes.
Algorithm Pseudocode
validate length and section constants
compute named stiffness coefficients
initialize 12x12 local matrix to zero
fill upper triangular axial, torsion, and bending terms
mirror upper triangular terms
for global operations:
compute normalized local x from node2 - node1
project orientation onto plane normal to local x and normalize as local y
compute local z = x cross y
build block diagonal T from R
compute K_global = T^T * K_local * T
recover forces with u_local = T*u_global, f_local = K_local*u_local, f_global = T^T*f_local
Numerical Risks
- rigid_body_modes: the unconstrained local/global stiffness should produce near-zero force for six rigid body modes; tests should include at least rigid translation in this increment.
- patch_test: future solver-level patch tests require parser/assembly integration.
- symmetry: local and global matrices must remain symmetric.
- positive_definiteness: constrained systems may become positive definite; the isolated element is positive semidefinite.
- hourglass: not applicable to this closed-form beam kernel.
- shear_locking: excluded by Euler-Bernoulli assumptions and no shear deformation terms.
- volumetric_locking: not applicable.
- distortion: curved or offset geometry is out of scope.
- singular_jacobian: represented by zero or near-zero length.
Open Issues and Downstream Handoff
Numerical Review Agent
- Confirm signs for the local
wandrybending block. - Confirm the transformation convention and invalid orientation handling are implementation-ready.
I/O Definition Agent
- Define future orientation input mapping and unsupported cases without claiming parser support in this kernel increment.
Reference Model Agent
- Define future axial, torsion, bending, and skew-oriented reference models without generating artifacts.
Implementation Planning Agent
- Transcribe the matrix entries and transformation convention into C++ tests before production implementation.