pub struct EkmanProfile { /* private fields */ }Expand description
Ekman spiral (constant eddy viscosity K; Holton’s classic solution):
u = G(1 − e^(−γz)·cos(γz)), v = sign(f)·G·e^(−γz)·sin(γz),
γ = sqrt(|f|/2K), f = 2Ω·sin(latitude). Zero at the surface, approaches
the geostrophic wind aloft, rotated to direction_from_deg.
u runs along the geostrophic flow and v to its left, so in the northern hemisphere the
wind near the surface is backed up to 45° from the geostrophic direction and veers with
height; the southern hemisphere mirrors this. This constant-K solution is linear near the
ground, not logarithmic; LogProfile is the surface-layer model.
The field reads only the height (position_m.y), which must be the height above the ground;
HeightOffset converts another frame’s heights. An infinite height is the geostrophic
limit. Vertical wind is zero.
Implementations§
Source§impl EkmanProfile
impl EkmanProfile
Sourcepub fn new(
geostrophic_mps: f64,
latitude_deg: f64,
eddy_viscosity_m2s: f64,
direction_from_deg: f64,
) -> Result<EkmanProfile, WindFieldError>
pub fn new( geostrophic_mps: f64, latitude_deg: f64, eddy_viscosity_m2s: f64, direction_from_deg: f64, ) -> Result<EkmanProfile, WindFieldError>
Build an Ekman profile.
geostrophic_mps must be finite and >= 0, latitude_deg finite, nonzero and strictly
between -90 and 90 (the solution has no boundary layer at the equator), and
eddy_viscosity_m2s finite and > 0. direction_from_deg, the wind-FROM direction of
the geostrophic wind aloft, must be finite. A latitude so close to zero that the Coriolis
parameter underflows counts as the equator, and a viscosity so small that the decay rate
overflows is rejected.
Sourcepub fn geostrophic_mps(&self) -> f64
pub fn geostrophic_mps(&self) -> f64
Geostrophic wind speed aloft, m/s.
Sourcepub fn latitude_deg(&self) -> f64
pub fn latitude_deg(&self) -> f64
Latitude, degrees (its sign sets the turning sense).
Sourcepub fn eddy_viscosity_m2s(&self) -> f64
pub fn eddy_viscosity_m2s(&self) -> f64
Constant eddy viscosity K, m²/s.
Sourcepub fn direction_from_deg(&self) -> f64
pub fn direction_from_deg(&self) -> f64
Wind-FROM direction of the geostrophic wind aloft, degrees.
Trait Implementations§
Source§impl Clone for EkmanProfile
impl Clone for EkmanProfile
Source§fn clone(&self) -> EkmanProfile
fn clone(&self) -> EkmanProfile
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 EkmanProfile
Source§impl Debug for EkmanProfile
impl Debug for EkmanProfile
Source§impl PartialEq for EkmanProfile
impl PartialEq for EkmanProfile
impl StructuralPartialEq for EkmanProfile
Auto Trait Implementations§
impl Freeze for EkmanProfile
impl RefUnwindSafe for EkmanProfile
impl Send for EkmanProfile
impl Sync for EkmanProfile
impl Unpin for EkmanProfile
impl UnsafeUnpin for EkmanProfile
impl UnwindSafe for EkmanProfile
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> Scalar for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.