COMBIN14 — 3D 2-node spring-damper (longitudinal)#
Kinematics. Two-node spring oriented along \(I \to J\); three translational DOFs per node; 6 DOFs per element. No bending, torsion, or mass (COMBIN14 is stiffness-only by MAPDL convention).
Stiffness. Closed-form \(K_e = K \begin{bmatrix} C & -C \\ -C & C \end{bmatrix}\) with \(C = \hat{d} \hat{d}^\top\).
Mass. Zero by convention (me returns a 6 × 6 zero matrix so
the assembler can dispatch uniformly).
MAPDL compatibility. Reproduces COMBIN14 at KEYOPT(2) = 0. Torsional (KEYOPT(2) = 3) and 2-D planar variants (4, 5, 6) are separate code paths and not yet implemented.
Longitudinal spring#
A spring is the discrete analogue of a truss whose only “material” property is the stiffness \(K\) (force per length); compared to LINK180, there is no cross-section area, no length in the \(E A / L\) sense — just a scalar spring constant [Cook2001].
Taking \(\hat{d} = (d_x, d_y, d_z)\) as the unit vector along \(I \to J\), the axial displacement at each end projects onto \(\hat{d}\) to give a 1-D spring acting in that direction. The element stiffness in global coordinates is
directly analogous to the LINK180 formula with \(E A / L\) replaced by \(K\). \(K_e\) has rank 1 (the single stretching mode); five zero eigenvalues correspond to the allowed rigid-body / transverse translations.
Real constants#
Slot |
Symbol |
Meaning |
|---|---|---|
|
\(K\) |
Spring stiffness (force / length). Mandatory. |
|
|
Linear damping (force · time / length). Parsed but not used by \(K_e\); consumed by transient damping paths when available. |
|
|
Non-linear cubic damping. Parsed but not used. |
|
|
Initial length. Parsed but ignored; the reference length is the nodal distance. |
Numpy walk-through#
import numpy as np
K_spring = 1.0e6 # N / m
X = np.array([[0.0, 0.0, 0.0],
[1.0, 0.0, 0.0]])
d = X[1] - X[0]
L = float(np.linalg.norm(d))
dhat = d / L
Cproj = np.outer(dhat, dhat) # 3x3
K = K_spring * np.block([[ Cproj, -Cproj],
[-Cproj, Cproj]])
# Eigvals: [0, 0, 0, 0, 0, 2 * K_spring]
# Zero mass:
M = np.zeros((6, 6))
Validation#
Single-element stretch. A 1-D spring of stiffness \(K\) with one end pinned and a unit force on the other produces \(u = 1 / K\). Rotate the element to any orientation in 3-D; the analytic result is unchanged.
API reference#
- class femorph_solver.elements.combin14.COMBIN14[source]#
Bases:
ElementBase
References#
Cook, R. D., Malkus, D. S., Plesha, M. E., and Witt, R. J. (2001). Concepts and Applications of Finite Element Analysis, 4th ed. Wiley. Ch. 2 (spring / bar elements). https://www.wiley.com/en-us/Concepts+and+Applications+of+Finite+Element+Analysis%2C+4th+Edition-p-9780471356059