A spring adds a symmetric stiffness block; a nodal mass adds translational or explicitly coupled spatial inertia.
01 Model and scope
A two-node spring penalizes relative displacement, producing equal-and-opposite nodal forces and a symmetric 2 × 2 block. A concentrated mass contributes inertia; an offset centre of mass introduces translation–rotation coupling through the skew matrix of the offset vector.
Route assumptions and calculation checks
- A two-node spring exerts equal and opposite forces; a ground spring assembles only the attached-node block.
- Offset mass couples translation and rotation through S(r).
- The external correlation is a narrow translational SDOF route; coupled offsets need separate evidence.
Useful foundations and prerequisites
02 Essential equations and symbols
Definitions and conventions
- Spring stiffness in its declared direction or directions.
- Concentrated mass.
- S(r)
- Skew matrix representing cross products with offset r.
- Analytical undamped SDOF frequency for k and m.
03 Step by step derivation
Follow the assumptions, equations and discrete operations in order. The full explanation stays visible.
1 · A spring is a relative-displacement energy
A generalized spring connects node a to node b, or node a to ground. Its local stiffness K acts on selected translational or rotational DOFs. For two nodes, equal and opposite end forces arise because the spring stores energy in their relative displacement. A rigid common translation lies in the matrix nullspace.
For a spring to ground, only the attached-node K block is assembled. The declared stiffness must be finite, symmetric, and positive semidefinite.
2 · Local orientation and assembly
A spring stiffness may be scalar, diagonal, or a symmetric semidefinite matrix over selected DOFs. When it is specified in a local frame, the orientation must be orthonormal and right-handed. The matrix is mapped into global nodal axes before it is assembled into the model stiffness.
A negative stiffness is rejected in the declared V1 scope. Coupled generalized springs and multi-node combinations require evidence for their specific DOFs and analysis.
3 · Translational and eccentric concentrated mass
A centred translational point mass contributes mI₃ and activates only translations. If the centre of mass is offset by r or a rotational inertia is supplied, translation and rotation become coupled through the skew matrix S(r), defined by S(r)x=r×x. The 6×6 spatial mass follows directly from kinetic energy.
The inertia tensor must be symmetric and positive semidefinite and satisfy the principal-moment triangle inequality. Invalid data are rejected before assembly.
4 · A reproducible oscillator and evidence boundary
For a single translational DOF, a grounded spring and point mass reduce to the scalar equation m ẍ+kx=0. With k=1000 N/m and m=10 kg the analytical frequency is 1.5915494309 Hz; the cited Code_Aster comparison also gives static deflection 0.025 m for F=25 N. This correlation covers that translational SDOF case, not eccentric mass or arbitrary multi-DOF coupling.
Offset masses, local orientation, coupled inertia, and more complex mixed models remain outside that narrow external correlation and need their own checks.
04 Algorithm and implementation
Source excerpt · v0.2.11
The spring matrix is validated for symmetry and positive semidefiniteness before orientation mapping. An eccentric point mass creates a symmetric 6 × 6 spatial inertia with translation–rotation coupling.
if not np.allclose(local, local.T, rtol=0.0, atol=1.0e-12):
raise InputValidationError("Spring stiffness matrix must be finite and symmetric.")
if np.min(np.linalg.eigvalsh(local)) < -1.0e-12:
raise InputValidationError("Spring stiffness matrix must be positive semidefinite.")
return _symmetrize(basis @ local @ basis.T)
matrix[:3, :3] = self.mass * np.eye(3)
matrix[:3, 3:] = -self.mass * skew
matrix[3:, :3] = self.mass * skew
matrix[3:, 3:] = inertia + self.mass * skew.T @ skew
return _symmetrize(matrix)05 Verification and limitations
BOUNDED SDOF ACCEPTANCE · experimental outside it
The oscillator has analytic f₁=1.5915494309 Hz for k=1000 N/m and m=10 kg.
Each reference supports its own model, observable and analysis route. Read the original contract and limitations before transferring a conclusion.