#[non_exhaustive]pub enum StreamerModel {
Filippone,
OpenRocket,
}Expand description
How a streamer’s drag area is estimated. A streamer of length l and width w has a
planform (one-side) area S = l w and an aspect ratio AR = l/w.
The two models disagree by a factor of about four in drag area, so
docs/physics/recovery.md sets out what each is fitted to and how each compares with the only
free-drop data in hand (the decision record on streamer and tumble drag, ADR-013).
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Filippone
J. Carruthers and A. Filippone, “Aerodynamic Drag of Streamers and Flags”, Journal of
Aircraft 42(4), 2005, pp. 976-982, on the planform area, from wind-tunnel tests of cotton
streamers at AR 3.3 to 30 and 6 to 18.9 m/s. It fits one power curve per planform area:
C_D = 0.561 AR^−0.480atS = 0.025 m²(eq. 2; Figure 2’s trend line reads0.561 AR^−0.4795),C_D = 0.6514 AR^−0.6075atS = 0.05 m²(the trend line on Figure 3, which the text does not repeat as an equation),C_D = 0.405 AR^−0.494atS = 0.075 m²(eq. 1; Figure 4 reads0.4046 AR^−0.494).
hpr interpolates between neighbouring curves linearly in ln S and holds the end
curve outside the fitted range. That interpolation is hpr’s, not the paper’s. All three
are needed because C_D is far from linear in ln S: at AR = 3.3 the middle curve sits
0.3% below the smallest area’s rather than 63% of the way to the largest’s, so blending
only the extremes reads 18% low there.
The correlations are for streamers clamped at the luff; the paper measures more drag when the luff is free, which is what a descending streamer has.
This is the default: on the one free-drop measurement in hand that a flat correlation
should fit (Kidwell’s unpleated streamer) it is 9% fast where Self::OpenRocket is 88%
fast. Both are fast on his pleated streamers, which neither models
(docs/physics/recovery.md).
OpenRocket
The OpenRocket technical documentation v13.05, Appendix C (printed pages 113-118):
C_Dm = 0.034 ((ρ_m + 25 g/m²)/(105 g/m²)) ((l + 1 m)/l) on the planform area, fitted to
wind-tunnel tests of model-rocket streamers (w 0.01 to 0.09 m, l 0.2 to 1.0 m, surface
density 10 to 80 g/m², 6 to 12 m/s), with a stated 12 to 27% error on an independent set.
Use it to compare with OpenRocket. Against Kidwell’s free drops it is low in drag area by
4.2 times on his flat crêpe streamer and 7.8 times on his pleated Micafilm one, which is
88% and 154% fast in descent rate (docs/physics/recovery.md).
Implementations§
Source§impl StreamerModel
impl StreamerModel
Sourcepub const FILIPPONE_ASPECT_RATIO_RANGE: (f64, f64)
pub const FILIPPONE_ASPECT_RATIO_RANGE: (f64, f64)
The aspect ratios AR = l/w the correlations were fitted over. Outside it they only
extrapolate, and as AR → 0 the power law runs away (C_D → ∞), which is why a flight
refuses a strip wider than it is long (MIN_STREAMER_ASPECT_RATIO).
Sourcepub fn drag_area_m2(
self,
length_m: f64,
width_m: f64,
surface_density_kg_m2: f64,
) -> f64
pub fn drag_area_m2( self, length_m: f64, width_m: f64, surface_density_kg_m2: f64, ) -> f64
The drag area C_D S of a streamer, m².
surface_density_kg_m2 is the fabric’s, which only Self::OpenRocket uses. Outside the
ranges each correlation was fitted over this extrapolates; a flight refuses the shapes
that make it meaningless (crate::Simulation::with_recovery).
Trait Implementations§
Source§impl Clone for StreamerModel
impl Clone for StreamerModel
Source§fn clone(&self) -> StreamerModel
fn clone(&self) -> StreamerModel
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for StreamerModel
Source§impl Debug for StreamerModel
impl Debug for StreamerModel
Source§impl Default for StreamerModel
impl Default for StreamerModel
Source§fn default() -> StreamerModel
fn default() -> StreamerModel
Source§impl<'de> Deserialize<'de> for StreamerModel
impl<'de> Deserialize<'de> for StreamerModel
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for StreamerModel
Source§impl Hash for StreamerModel
impl Hash for StreamerModel
Source§impl PartialEq for StreamerModel
impl PartialEq for StreamerModel
Source§fn eq(&self, other: &StreamerModel) -> bool
fn eq(&self, other: &StreamerModel) -> bool
self and other values to be equal, and is used by ==.