Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
Oscillator1Dof.hpp
Go to the documentation of this file.
1// Vulcan 1-DOF Oscillator Dynamics
2// Pure stateless functions for harmonic oscillator computations
3#pragma once
4
6
7#include <janus/janus.hpp>
8
9namespace vulcan::dynamics {
10
11// =============================================================================
12// 1-DOF Harmonic Oscillator Dynamics
13// =============================================================================
14
34template <typename Scalar>
35Scalar oscillator_acceleration(const Scalar &x, const Scalar &x_dot,
36 const Scalar &omega_n, const Scalar &zeta,
37 const Scalar &force, const Scalar &mass) {
38 // ẍ = F/m - 2ζωẋ - ω²x
39 return force / mass - Scalar(2) * zeta * omega_n * x_dot -
40 omega_n * omega_n * x;
41}
42
56template <typename Scalar>
57Scalar spring_damper_acceleration(const Scalar &x, const Scalar &x_dot,
58 const Scalar &stiffness,
59 const Scalar &damping, const Scalar &force,
60 const Scalar &mass) {
61 // ẍ = (F - c·ẋ - k·x) / m
62 return (force - damping * x_dot - stiffness * x) / mass;
63}
64
65// =============================================================================
66// Parameter Conversions
67// =============================================================================
68
74template <typename Scalar>
75Scalar spring_to_omega(const Scalar &stiffness, const Scalar &mass) {
76 return janus::sqrt(stiffness / mass);
77}
78
85template <typename Scalar>
86Scalar spring_to_zeta(const Scalar &stiffness, const Scalar &damping,
87 const Scalar &mass) {
88 return damping / (Scalar(2) * janus::sqrt(stiffness * mass));
89}
90
95template <typename Scalar> Scalar oscillator_period(const Scalar &omega_n) {
96 return Scalar(2) * Scalar(M_PI) / omega_n;
97}
98
99// =============================================================================
100// Energy Calculations
101// =============================================================================
102
110template <typename Scalar>
111Scalar oscillator_energy(const Scalar &x, const Scalar &x_dot,
112 const Scalar &omega_n, const Scalar &mass) {
113 // E = 0.5*m*ẋ² + 0.5*k*x² = 0.5*m*(ẋ² + ω²x²)
114 return Scalar(0.5) * mass * (x_dot * x_dot + omega_n * omega_n * x * x);
115}
116
122template <typename Scalar>
123Scalar oscillator_kinetic_energy(const Scalar &x_dot, const Scalar &mass) {
124 return Scalar(0.5) * mass * x_dot * x_dot;
125}
126
133template <typename Scalar>
134Scalar oscillator_potential_energy(const Scalar &x, const Scalar &omega_n,
135 const Scalar &mass) {
136 // U = 0.5*k*x² = 0.5*m*ω²*x²
137 return Scalar(0.5) * mass * omega_n * omega_n * x * x;
138}
139
140} // namespace vulcan::dynamics
Definition Guided5Dof.hpp:13