Two nodes with UX, UY, UZ, RX, RY, RZ at each end. The local frame and reference vector are part of the model.
01 Model and scope
Timoshenko kinematics keep transverse shear deformation by treating section rotations as independent unknowns. Axial, torsional, shear and two-plane bending energies build the local stiffness; a frame transformation maps it to global degrees of freedom.
Route assumptions and calculation checks
- The section law includes axial, torsional, transverse-shear, and two-plane bending stiffness.
- Bending uses Timoshenko shear parameters φ=12EI/(κGA L²).
- Consistent mass combines Hermite bending mass with rotary inertia; it is not a generic diagonal mass.
Useful foundations and prerequisites
02 Essential equations and symbols
Definitions and conventions
- Axial strain from the axial displacement gradient.
- Transverse shear strains, including section rotations.
- Torsional and bending curvatures.
- Local-to-global degree-of-freedom transformation.
03 Step by step derivation
Follow the assumptions, equations and discrete operations in order. The full explanation stays visible.
1 · Local frame and 12 beam DOFs
BEAM2 joins two distinct nodes. Each end has three translations and three rotations, giving 12 local DOFs. The local x axis follows the chord; a reference vector is projected onto its normal plane to define the remaining axes. A nearly parallel reference vector is rejected because it cannot define a stable frame.
Because section axes affect Iy, Iz, shear directions, and loads, the reference vector is model data rather than a cosmetic orientation.
2 · Timoshenko strains keep transverse shear
Timoshenko kinematics allow the cross-section rotations to differ from the centreline slope. This retains transverse shear deformation and avoids Euler–Bernoulli's thin/slender assumption. The signs couple v with θz and w with θy in the local frame.
3 · Section resultants and energy
The section material converts generalized strain into axial force, two shear forces, torsion, and two bending moments. The shear correction factors κyˢ and κzˢ depend on cross-section shape and are required engineering inputs. A wrong area, inertia, or local axis changes stiffness directly.
4 · Axial/torsional blocks, flexure, and transformation
Axial and torsional stiffness use the exact two-node difference operator. Transverse flexure uses a constant-property Timoshenko solution with dimensionless shear parameters φ; when φ tends to zero the bending block approaches Euler–Bernoulli. The local 12×12 matrix is transformed by congruence so elastic energy is invariant under rotation of the beam in space.
5 · Consistent mass, benchmarks, and limits
The consistent mass combines two-node axial and torsional blocks, a cubic-Hermite transverse-displacement block, and the physical rotary inertia of the section. The cantilever fixture checks axial response, torsion, two-plane bending, shear correction, frame invariance, and modal mass. Beam-theory comparisons are meaningful only when span, section constants, boundary conditions, and slenderness are stated. Strongly varying sections, warping, local buckling, and nonlinear large rotations are outside this linear element derivation.
The implementation requires positive density for dynamic analysis. A diagonal lumped mass does not reproduce these coupling terms or the mass used by the named modal evidence.
04 Algorithm and implementation
Source excerpt · v0.2.11
Axial, torsional, and two-plane Timoshenko bending blocks are assembled in the local frame, then mapped by a stiffness-preserving congruence transformation.
Functions shown: local_stiffness stiffness
def local_stiffness(self, coords: np.ndarray) -> np.ndarray:
length = self.length(coords)
section = self.material
matrix = np.zeros((12, 12), dtype=float)
self._pair(matrix, (0, 6), section.E * section.A / length)
self._pair(matrix, (3, 9), section.G * section.J / length)
phi_y = 12.0 * section.E * section.Iz / (section.kappa_y * section.G * section.A * length**2)
phi_z = 12.0 * section.E * section.Iy / (section.kappa_z * section.G * section.A * length**2)
self._bending_block(matrix, (1, 5, 7, 11), section.E * section.Iz, length, phi_y, sign=1.0)
self._bending_block(matrix, (2, 4, 8, 10), section.E * section.Iy, length, phi_z, sign=-1.0)
return 0.5 * (matrix + matrix.T)
def stiffness(self, coords: np.ndarray) -> np.ndarray:
transform = self.transformation(coords)
return transform.T @ self.local_stiffness(coords) @ transform05 Verification and limitations
ROUTE-DEPENDENT · section and slenderness matter
The cantilever checks axial response, torsion, flexure, shear correction, frame invariance, and modal mass.
Each reference supports its own model, observable and analysis route. Read the original contract and limitations before transferring a conclusion.