added max_rpm example

master
elfeiin 2024-03-01 16:49:54 -08:00
parent 41e2594f1f
commit 04f8814f61
Signed by: elfein
GPG Key ID: A53FDD4FD091A276
1 changed files with 52 additions and 0 deletions

52
examples/max_rpm.rs Normal file
View File

@ -0,0 +1,52 @@
use std::{f64::consts::PI, f64::consts::TAU};
use units::{
dimensions::{Density, Frequency, Length, Pressure, Speed},
prefixes::{Deci, Mega},
units::{density::KgPerCubicMeter, Meters, MetersPerSecond, Pascals, Rpm},
};
pub fn speed_to_rpm(tip_speed: Speed, radius: Length) -> Frequency {
tip_speed / (TAU * radius)
}
#[derive(Copy, Clone, Debug)]
pub struct Flywheel {
tensile_strength: Pressure,
density: Density,
radius: Length,
thickness: Length,
}
impl Flywheel {
pub fn steel(radius: Length, thickness: Length) -> Self {
Self {
tensile_strength: Pressure::new::<Mega<Pascals>>(700.0),
density: Density::new::<KgPerCubicMeter>(7850.0),
radius,
thickness,
}
}
pub fn wood(radius: Length, thickness: Length) -> Self {
Self {
tensile_strength: Pressure::new::<Mega<Pascals>>(105.0),
density: Density::new::<KgPerCubicMeter>(700.0),
radius,
thickness,
}
}
pub fn max_velocity(&self) -> Speed {
Speed::new::<MetersPerSecond>(
((self.tensile_strength * 2.0 * self.thickness)
/ (self.density * PI.powf(2.0) * self.radius.square()))
.val::<units::units::MetersPerSqTime>()
.powf(0.5),
)
}
}
fn main() {
let steel = Flywheel::steel(Length::new::<Meters>(0.5), Length::new::<Deci<Meters>>(1.0));
let max_rpm = speed_to_rpm(steel.max_velocity(), steel.radius);
println!["{steel:?}"];
println!["{}", max_rpm.val::<Rpm>()];
}