1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//! Deterministic wind fields and radiosonde validation for trajectory
//! simulation, consumed by rockets-engine.
//!
//! Everything here is stateless and reproducible from inputs: no network, no
//! wall clock, no unseeded randomness. The [`WindField`] trait, the profile
//! types and the analytic profiles are this crate's own. They were the
//! staging ground for the modeling core planned for ballistics-engine's
//! `wind` module (see `docs/winds-engine-plan.md`), but ballistics-engine's
//! wind fields (unreleased) differ: its `WindField::wind` takes and returns
//! `nalgebra::Vector3<f64>`, with no counterpart to [`Wind`]; its
//! `ConstantField` is a tuple struct over that vector; its `LogProfile` and
//! `EkmanProfile` keep their fields private behind getters; and its
//! constructors return `WindFieldError`. Moving this crate onto those types
//! changes its public API (every [`WindField::wind`] call,
//! [`validate::validate`]'s signature), so it is a deliberate breaking
//! release, not a drop-in re-export.
//!
//! - [`field`]: the [`WindField`] trait, [`ConstantField`], [`ProfileField`].
//! - [`analytic`]: [`LogProfile`](analytic::LogProfile) and
//! [`EkmanProfile`](analytic::EkmanProfile) boundary-layer models.
//! - [`sounding`]: radiosonde interchange-format parsing.
//! - [`validate`]: profile-vs-sounding comparison metrics.
pub use ;
pub use ;
pub use ;
/// Crate-wide error: invalid input with a field name and reason.
/// Crate-wide result.
pub type Result<T> = Result;