added max_rpm example
parent
41e2594f1f
commit
04f8814f61
|
@ -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>()];
|
||||
}
|
Loading…
Reference in New Issue