test "gear" {
// Spur gear: m=3mm, z=20
// d = 3*20 = 60mm
let d = gear_pitch_diameter(3.0, 20)
assert_eq(d, 60.0)
// Addendum diameter: d_a = 3*(20+2*1) = 66mm
let da = gear_addendum_diameter(3.0, 20, HA_STAR_STD)
assert_eq(da, 66.0)
// Center distance: a = 3*(20+40)/2 = 90mm
let a = gear_center_distance(3.0, 20, 40)
assert_eq(a, 90.0)
// Gear ratio: i = 40/20 = 2
let i = gear_ratio(20, 40)
assert_eq(i, 2.0)
// Tangential force: T=1000N·mm, d=60mm
// F_t = 2*1000/60 = 33.33N
let ft = gear_tangential_force(1000.0, 60.0)
assert_eq(approx_equal(ft, 33.33, 0.1), true)
}test "belt" {
// Belt drive: d1=100mm, d2=200mm, a=500mm
// Gear ratio: i = 200/100 = 2
let i = belt_ratio(100.0, 200.0)
assert_eq(i, 2.0)
// Contact angle: α ≈ 180° - 2*arcsin((200-100)/(2*500)) = 168.5°
let alpha = belt_contact_angle(100.0, 200.0, 500.0)
assert_eq(alpha > 160.0 && alpha < 180.0, true)
// Belt length: L ≈ 1471mm
let l = belt_length(100.0, 200.0, 500.0)
assert_eq(approx_equal(l, 1471.0, 10.0), true)
// Effective tension: P=5kW, v=10m/s
// F_e = 1000*5/10 = 500N
let fe = belt_effective_tension(5.0, 10.0)
assert_eq(fe, 500.0)
}test "shaft" {
// Minimum shaft diameter for torsion: T=10000N·mm, [τ]=30MPa
let d = shaft_min_diameter_torsion(10000.0, 30.0)
// d should be between 10-15mm (reasonable range)
assert_eq(d > 0.0 && d < 0.02, true)
// Equivalent bending moment: M=5000N·mm, T=10000N·mm, α=0.6
// M_e = √(5000² + (0.6*10000)²) = 7810N·mm
let me = shaft_equivalent_moment(5000.0, 10000.0, 0.6)
assert_eq(approx_equal(me, 7810.0, 10.0), true)
}test "bearing" {
// Equivalent dynamic load: X=1, F_r=1000N, Y=0, F_a=0
// P = 1*1000 + 0*0 = 1000N
let p = bearing_equivalent_dynamic_load(1.0, 1000.0, 0.0, 0.0)
assert_eq(p, 1000.0)
// Bearing life: C=10000N, P=5000N, p=3
// L_10 = (10000/5000)³ * 10^6 = 8*10^6 revolutions
let l10 = bearing_life(10000.0, 5000.0, 3.0)
assert_eq(approx_equal(l10, 8000000.0, 100000.0), true)
// Life in hours: L_10=8e6 revolutions, n=1500rpm
// L_h = 8e6/(60*1500) = 88.9 hours
let lh = bearing_life_hours(8000000.0, 1500.0)
assert_eq(approx_equal(lh, 88.9, 1.0), true)
}test "spring" {
// Spring stiffness: G=79GPa, d=4mm, D=32mm, n=10
let k = spring_stiffness(79.0, 4.0 * MM_TO_M, 32.0 * MM_TO_M, 10)
assert_eq(k > 5000.0 && k < 10000.0, true)
// Spring deflection: F=100N, k=7710N/m
// δ = 100/7710 = 0.013m
let delta = spring_deflection(100.0, k)
assert_eq(delta > 0.0, true)
// Spring index: D=32mm, d=4mm
// C = 32/4 = 8
let c = spring_index(32.0, 4.0)
assert_eq(c, 8.0)
// Curvature coefficient: C=8
// K = (4*8-1)/(4*8-4) + 0.615/8 = 1.184
let k_coeff = spring_curvature_coefficient(8.0)
assert_eq(approx_equal(k_coeff, 1.184, 0.01), true)
}test "chain" {
// Chain drive: z1=17, z2=34
// Gear ratio: i = 34/17 = 2
let i = chain_ratio(17, 34)
assert_eq(i, 2.0)
// Chain velocity: z=17, p=19.05mm, n=1000rpm
// v = 17*19.05*1000/60000 = 5.4m/s
let v = chain_velocity(17, 19.05, 1000.0)
assert_eq(approx_equal(v, 5.4, 0.1), true)
// Effective tension: P=10kW, v=5.4m/s
// F = 1000*10/5.4 = 1852N
let f = chain_effective_tension(10.0, 5.4)
assert_eq(approx_equal(f, 1852.0, 10.0), true)
}test "flywheel" {
// Flywheel moment of inertia: W_max=1000J, ω=100rad/s, δ=0.05
// J = W_max/(ω²*δ) = 1000/(100²*0.05) = 0.2 kg·m²
let j = flywheel_moment_of_inertia(1000.0, 100.0, 0.05)
assert_eq(j > 0.0, true)
// Flywheel mass: J=0.2kg·m², r=0.2m
// For solid disk: m = 2*J/r² = 2*0.2/0.04 = 10kg
let m = flywheel_mass(0.2, 0.2)
assert_eq(m > 8.0 && m < 12.0, true)
}moon testfn amplitude_amplification_factor(r : Double, zeta : Double) -> Doublefn angular_contact_ball_bearing_equivalent_load(fr : Double, fa : Double, e : Double, y : Double) -> Doublefn angular_velocity(n : Double) -> Doublefn band_brake_torque(f1 : Double, f2 : Double, r : Double) -> Doublefn basic_deviation_hole_h(it : Double) -> Doublefn bearing_adjusted_life(l10 : Double, a1 : Double, a2 : Double, a3 : Double) -> Doublefn bearing_equivalent_dynamic_load(x : Double, fr : Double, y : Double, fa : Double) -> Doublefn bearing_life(c : Double, p : Double, p_exp : Double) -> Doublefn bearing_life_hours(l10 : Double, n : Double) -> Doublefn bearing_required_c(p : Double, lh : Double, n : Double, p_exp : Double) -> Doublefn belt_contact_angle(d1 : Double, d2 : Double, a : Double) -> Doublefn belt_effective_tension(p : Double, v : Double) -> Doublefn belt_length(d1 : Double, d2 : Double, a : Double) -> Doublefn belt_slack_side_tension(f1 : Double, fe : Double) -> Doublefn belt_tight_side_tension(fe : Double, mu : Double, alpha_deg : Double) -> Doublefn bending_stress(moment : Double, y : Double, inertia : Double) -> Doublefn bevel_gear_equivalent_teeth(z : Int, delta_deg : Double) -> Doublefn bevel_gear_pitch_angle(z1 : Int, z2 : Int) -> Doublefn bisection(f : (Double) -> Double, a : Double, b : Double, tolerance : Double) -> Doublefn block_brake_torque(mu : Double, f : Double, r : Double) -> Doublefn cam_constant_acceleration_displacement(h : Double, phi : Double, phi0 : Double) -> Doublefn cam_constant_velocity_displacement(h : Double, phi : Double, phi0 : Double) -> Doublefn cam_cycloidal_displacement(h : Double, phi : Double, phi0 : Double) -> Doublefn cam_follower_acceleration(d2s_dphi2 : Double, omega : Double) -> Doublefn cam_follower_velocity(ds_dphi : Double, omega : Double) -> Doublefn cam_harmonic_displacement(h : Double, phi : Double, phi0 : Double) -> Doublefn cam_pressure_angle(ds_dphi : Double, e : Double, s : Double, rb : Double) -> Doublefn cam_theoretical_radius(s : Double, rb : Double, e : Double) -> Doublefn centripetal_acceleration(r : Double, omega : Double) -> Doublefn chain_center_distance(p : Double, factor : Double) -> Doublefn chain_effective_tension(p : Double, v : Double) -> Doublefn chain_length(a : Double, p : Double, z1 : Int, z2 : Int) -> Doublefn chain_velocity(z : Int, p : Double, n : Double) -> Doublefn crank_existence_condition(a : Double, b : Double, c : Double, d : Double) -> Boolfn damping_ratio_sdof(c : Double, k : Double, m : Double) -> Doublefn deep_groove_ball_bearing_equivalent_load(fr : Double, fa : Double, e : Double, y : Double) -> Doublefn disc_brake_torque(mu : Double, f : Double, rm : Double, n : Int) -> Doublefn disc_spring_load(e : Double, t : Double, nu : Double, d : Double, h : Double, f : Double) -> Doublefn extension_spring_initial_tension(d : Double, d_mean : Double, tau0 : Double, k : Double) -> Doublefn extension_spring_stiffness(g : Double, d : Double, d_mean : Double, n : Int) -> Doublefn failure_rate(mtbf : Double) -> Doublefn fit_clearance(es : Double, ei : Double) -> Doublefn fit_interference(es : Double, ei : Double) -> Doublefn fit_type(clearance : Double, interference : Double) -> Stringfn flexible_coupling_torque(k : Double, theta_rad : Double) -> Doublefn flywheel_diameter(j : Double, m : Double) -> Doublefn flywheel_mass(j : Double, r : Double) -> Doublefn flywheel_moment_of_inertia(w_max : Double, omega : Double, delta : Double) -> Doublefn forced_convection_heat_transfer_coefficient(nu : Double, k : Double, l : Double) -> Doublefn four_bar_transmission_angle(a : Double, b : Double, c : Double, d : Double) -> Doublefn friction_clutch_required_force(t : Double, mu : Double, rm : Double, n : Int) -> Doublefn friction_clutch_torque(mu : Double, f : Double, rm : Double, n : Int) -> Doublefn gear_addendum_diameter(m : Double, z : Int, ha_star : Double) -> Doublefn gear_bending_stress(k : Double, ft : Double, b : Double, m : Double, y : Double) -> Doublefn gear_center_distance(m : Double, z1 : Int, z2 : Int) -> Doublefn gear_center_distance_modified(a : Double, alpha_deg : Double, alpha_prime_deg : Double) -> Doublefn gear_contact_stress(k : Double, ft : Double, b : Double, d : Double) -> Doublefn gear_dedendum_diameter(m : Double, z : Int, ha_star : Double, c_star : Double) -> Doublefn gear_normal_force(ft : Double, alpha_deg : Double) -> Doublefn gear_pitch_diameter(m : Double, z : Int) -> Doublefn gear_radial_force(ft : Double, alpha_deg : Double) -> Doublefn gear_tangential_force(t : Double, d : Double) -> Doublefn gear_total_modification_coefficient(z1 : Int, z2 : Int, alpha_deg : Double, alpha_prime_deg : Double) -> Doublefn geneva_drive_motion_coefficient(z : Int) -> Doublefn geneva_drive_stationary_time(k : Double, t : Double) -> Doublefn helical_gear_axial_force(ft : Double, beta_deg : Double) -> Doublefn helical_gear_normal_module(mt : Double, beta_deg : Double) -> Doublefn helical_gear_transverse_module(mn : Double, beta_deg : Double) -> Doublefn interference_fit_contact_pressure(delta : Double, d : Double, e1 : Double, e2 : Double, c1 : Double, c2 : Double) -> Doublefn interference_fit_torque(d : Double, l : Double, p : Double, mu : Double) -> Doublefn journal_bearing_film_thickness(c : Double, epsilon : Double) -> Doublefn journal_bearing_friction_power(mu : Double, omega : Double, r : Double, l : Double, c : Double) -> Doublefn journal_bearing_load_capacity(mu : Double, omega : Double, r : Double, l : Double, c : Double, epsilon : Double) -> Doublefn journal_bearing_temperature_rise(pf : Double, cp : Double, rho : Double, q : Double) -> Doublefn key_crushing_stress(t : Double, d : Double, k : Double, l : Double) -> Doublefn key_shear_stress(t : Double, d : Double, b : Double, l : Double) -> Doublefn key_strength_check(sigma_p : Double, tau : Double, sigma_p_allow : Double, tau_allow : Double) -> Boolfn material_fatigue_limit(sigma_b : Double) -> Doublefn material_safety_factor(sigma_s : Double, sigma : Double) -> Doublefn material_strength_from_hardness(hb : Double) -> Doublefn mechanical_seal_face_pressure(f : Double, a : Double, p0 : Double) -> Doublefn multi_rib_belt_effective_tension(p : Double, v : Double) -> Doublefn natural_convection_heat_transfer_coefficient() -> Doublefn natural_frequency_sdof(k : Double, m : Double) -> Doublefn newton_method(f : (Double) -> Double, df : (Double) -> Double, x0 : Double, tolerance : Double) -> Doublefn o_ring_compression(d0 : Double, dg : Double) -> Doublefn overrunning_clutch_torque(f : Double, r : Double, alpha_deg : Double) -> Doublefn pin_crushing_stress(f : Double, d : Double, t : Double) -> Doublefn pin_shear_stress(f : Double, d : Double) -> Doublefn planetary_gear_ratio_sun_fixed(z1 : Int, z3 : Int) -> Doublefn power_from_torque(t : Double, omega : Double) -> Doublefn rect_section_modulus(b : Double, h : Double) -> Doublefn reducer_output_torque(t_in : Double, i : Double, eta : Double) -> Doublefn reliability_exponential(lambda : Double, t : Double) -> Doublefn resonance_frequency_sdof(omega_n : Double, zeta : Double) -> Doublefn rigid_coupling_torque(f : Double, r : Double) -> Doublefn rivet_crushing_stress(f : Double, n : Int, d : Double, t : Double) -> Doublefn rivet_shear_stress(f : Double, n : Int, d : Double) -> Doublefn rpm_from_angular_velocity(omega : Double) -> Doublefn shaft_bending_stiffness(e : Double, i : Double, l : Double) -> Doublefn shaft_combined_safety_factor(n_sigma : Double, n_tau : Double) -> Doublefn shaft_critical_speed(l : Double, e : Double, i : Double, rho : Double, a : Double) -> Doublefn shaft_equivalent_moment(m : Double, t : Double, alpha : Double) -> Doublefn shaft_equivalent_stress(me : Double, w : Double) -> Doublefn shaft_fatigue_safety_factor(sigma_minus1 : Double, k_sigma : Double, sigma_a : Double, psi_sigma : Double, sigma_m : Double) -> Doublefn shaft_first_critical_speed(l : Double, e : Double, i : Double, rho : Double, a : Double) -> Doublefn shaft_min_diameter_torsion(t : Double, tau_allow : Double) -> Doublefn shaft_torsional_angle(t : Double, l : Double, g : Double, j : Double) -> Doublefn shaft_torsional_fatigue_safety_factor(tau_minus1 : Double, k_tau : Double, tau_a : Double, psi_tau : Double, tau_m : Double) -> Doublefn single_stage_reducer_ratio(z1 : Int, z2 : Int) -> Doublefn slider_crank_acceleration(r : Double, omega : Double, theta_deg : Double) -> Doublefn slider_crank_displacement(r : Double, theta_deg : Double) -> Doublefn slider_crank_velocity(r : Double, omega : Double, theta_deg : Double) -> Doublefn spring_curvature_coefficient(c : Double) -> Doublefn spring_max_stress(k : Double, f : Double, d_mean : Double, d : Double) -> Doublefn spring_stiffness(g : Double, d : Double, d_mean : Double, n : Int) -> Doublefn tapered_roller_bearing_equivalent_load(fr : Double, fa : Double, e : Double, y : Double) -> Doublefn thermal_equilibrium_temperature(t0 : Double, ploss : Double, h : Double, a : Double) -> Doublefn thread_lead_angle(p : Double, d2 : Double) -> Doublefn thread_pitch_diameter(d : Double) -> Doublefn thread_preload(sigma_s : Double, area_s : Double) -> Doublefn thread_self_locking(lambda_deg : Double, phi_deg : Double) -> Boolfn timing_belt_center_distance(d1 : Double, d2 : Double, factor : Double) -> Doublefn timing_belt_length(d1 : Double, d2 : Double, a : Double) -> Doublefn torsion_spring_max_stress(t : Double, d : Double) -> Doublefn torsion_spring_stiffness(e : Double, d : Double, d_mean : Double, n : Int) -> Doublefn torsional_stress(torque : Double, r : Double, polar_inertia : Double) -> Doublefn two_stage_reducer_ratio(i1 : Double, i2 : Double) -> Doublefn universal_joint_ratio(beta_deg : Double, phi_deg : Double) -> Doublefn worm_efficiency(gamma_deg : Double, phi_v_deg : Double) -> Doublefn worm_lead_angle(z1 : Int, m : Double, d1 : Double) -> Doublefn worm_ratio(z1 : Int, z2 : Int) -> DoubleInstall
Download zip