Free-free axial rod — natural frequencies ============================================ Companion to :doc:`axial_rod_nf` (fixed-free). A uniform rod with both ends free vibrates longitudinally with mode shapes :math:`u_n(x) = \cos(n \pi x / L)` and natural frequencies .. math:: f_n = \frac{n}{2 L} \sqrt{\frac{E}{\rho}}, \qquad n = 0, 1, 2, 3, \ldots The :math:`n = 0` mode is rigid-body axial translation at zero frequency. The first elastic mode (:math:`n = 1`) is at :math:`f_1 = \sqrt{E/\rho} / (2 L)` — twice the fixed-free fundamental. This is a useful sanity check for the eigen solver's handling of near-zero / rigid-body modes: the solver should return one near-zero rigid-body mode followed by the elastic family. Problem ------- .. list-table:: :header-rows: 1 :widths: 30 70 * - Parameter - Value * - Rod length ``L`` - 1.0 m * - Cross-sectional area ``A`` - 1 × 10⁻⁴ m² (cancels out of f) * - Young's modulus ``E`` - 200 GPa * - Density ``ρ`` - 7 850 kg/m³ * - Expected ``f_1`` - ``√(E/ρ) / (2L)`` = 2 523.77 Hz * - Expected ``f_2`` - 2 f₁ = 5 047.54 Hz femorph-solver result --------------------- Ran by :file:`tests/validation/test_free_free_rod_nf.py` using the ``LINK180`` (TRUSS2) kernel on a chain of 2-node spar elements. Transverse DOFs (UY, UZ) pinned on every node so the truss-element zero transverse stiffness doesn't admit arbitrary side-sway modes. Axial UX is fully unconstrained — the solver correctly returns a rigid-body translation mode at f ≈ 0 Hz followed by the elastic family. .. list-table:: :header-rows: 1 :widths: 25 25 25 25 * - Refinement - Elements - ``f_1`` (Hz) - Error vs closed form * - Coarse - 20 - 2 526.37 - +0.10 % * - Medium - 40 - 2 524.42 - +0.03 % * - Refined - 80 - 2 523.93 - +0.006 % Linear-Lagrange truss elements integrate the wave equation with consistent mass and recover the elastic spectrum to near-machine-precision on dense meshes. Cross-references ---------------- .. list-table:: :header-rows: 1 :widths: 35 30 35 * - Source - Reported ``f_1`` (Hz) - Problem ID / location * - Closed form (wave equation) - 2 523.77 - Rao 2017 §8.2 Table 8.1 * - Meirovitch (2010) §6.6 - 2 523.77 - Free-free rod * - femorph-solver (refined) - 2 523.93 - :file:`test_free_free_rod_nf.py` * - MAPDL Verification Manual - ≈ 2 524 - VM-47 (free-free torsion analogue) * - Abaqus Verification Manual - ≈ 2 524 - AVM 1.6.x free-free-rod NF family Source ------ Problem class: :class:`femorph_solver.validation.problems.FreeFreeRodModes`. Backing regression test: :file:`tests/validation/test_free_free_rod_nf.py`.