Skip to main content

GustField

Struct GustField 

Source
pub struct GustField { /* private fields */ }
Expand description

A precomputed Dryden turbulence realization along a path coordinate, sampled every spacing meters and interpolated linearly, so it is a pure function an adaptive integrator can call repeatedly.

Axes. u is the longitudinal component: the Dryden spectrum it carries belongs to the velocity component along the path through the frozen field, and v and w are the two transverse ones. MIL-F-8785C (p. 60) puts u along the horizontal relative mean wind for aircraft at low altitude, but for a climbing rocket the path is nearly vertical, so the caller must align u with the path. Getting that wrong does change the statistics: a horizontal gust given the longitudinal spectrum has twice the transverse power at low frequency and 2/3 of it at high frequency. The signs of the axes do not matter.

Path coordinate. The field does not decide what s is: distance flown through the air is Taylor’s hypothesis, but a caller may key it on altitude or on time at a reference speed. Linear interpolation removes variance at wavelengths near the spacing, so keep the spacing well below the smallest scale length (a tenth or less).

It serializes as its spacing and samples, and re-checks them when deserialized.

Implementations§

Source§

impl GustField

Source

pub fn generate( seed: u64, parameters: &DrydenParameters, length_m: f64, spacing_m: f64, ) -> Result<Self, AtmosError>

A field covering at least length_m (rounded up to a whole number of spacings), with samples every spacing_m and constant parameters.

§Errors

See GustField::generate_with.

Source

pub fn generate_with( seed: u64, length_m: f64, spacing_m: f64, parameters: impl FnMut(f64) -> Result<DrydenParameters, AtmosError>, ) -> Result<Self, AtmosError>

A field whose parameters vary along the path: parameters(s) is evaluated at each sample point s = k·spacing and held over the step that ends there (the first sample uses parameters(0)).

§Errors
Source

pub fn spacing_m(&self) -> f64

The spacing between samples, m.

Source

pub fn samples(&self) -> &[DVec3]

The samples, at s = 0, spacing, 2·spacing, ….

Source

pub fn length_m(&self) -> f64

The path length the field covers, m.

Source

pub fn gust(&self, distance_m: f64) -> Result<GustSample, AtmosError>

The gust at path coordinate distance_m, linearly interpolated; beyond either end the end sample is held and flagged.

§Errors

AtmosError::Domain if the distance is not finite.

Trait Implementations§

Source§

impl Clone for GustField

Source§

fn clone(&self) -> GustField

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GustField

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for GustField

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for GustField

Source§

fn eq(&self, other: &GustField) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for GustField

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for GustField

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.