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
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
#![warn(missing_docs)]
//! Library to represent an atmospheric sounding.

#![recursion_limit = "1024"]
extern crate chrono;
use chrono::NaiveDateTime;

#[macro_use]
extern crate error_chain;

pub mod error;
pub use error::*;

/// All the variables stored in the sounding.
///
/// Missing values are -9999.0. The upper air profile variables are stored in parallel vectors.
/// If a profile lacks a certain variable, e.g. cloud fraction, that whole vector has length 0
/// instead of being full of missing values.
pub struct Sounding {
    // Station info section
    /// station number, USAF number, eg 727730
    pub num: i32,
    /// Valid time of sounding
    pub valid_time: NaiveDateTime,
    /// Difference in model initialization time and `valid_time` in hours.
    pub lead_time: i32,
    /// Latitude of grid point used to make sounding.
    pub lat: f32,
    /// Longitude of grid point used to make sounding.
    pub lon: f32,
    /// Elevation of grid point in meters, this is in model terrain, not necessarily the same as
    /// the real world.
    pub elevation: f32,

    // Sounding Indexes
    /// Showalter index
    pub show: f32,
    /// Lifted index
    pub li: f32,
    /// Severe Weather Threat Index
    pub swet: f32,
    /// K-index
    pub kinx: f32,
    /// Lifting Condensation Level, or LCL (hPa), pressure vertical coordinate.
    pub lclp: f32,
    /// Precipitable Water (mm)
    pub pwat: f32,
    /// Total-Totals
    pub totl: f32,
    /// Convective Available Potential Energy, or CAPE. (J/kg)
    pub cape: f32,
    /// Temperature at LCL (K)
    pub lclt: f32,
    /// Convective Inhibitive Energy, or CIN (J/kg)
    pub cins: f32,
    /// Equilibrium Level (hPa), pressure vertical coordinate
    pub eqlv: f32,
    /// Level of Free Convection (hPa), pressure vertical coordinate
    pub lfc: f32,
    /// Bulk Richardson Number
    pub brch: f32,

    // Upper air profile
    /// Pressure (hPa) profile
    pub pressure: Vec<f32>,
    /// Temperature (c) profile
    pub temperature: Vec<f32>,
    /// Wet-bulb (c) profile
    pub wet_bulb: Vec<f32>,
    /// Dew Point (C) profile
    pub dew_point: Vec<f32>,
    /// Equivalent Potential Temperature (K) profile
    pub theta_e: Vec<f32>,
    /// Wind direction (degrees) profile
    pub direction: Vec<f32>,
    /// Wind speed (knots) profile
    pub speed: Vec<f32>,
    /// Vertical velocity (Pa/sec), pressure vertical coordinate
    pub omega: Vec<f32>,
    /// Geopotential Height (m) profile
    pub height: Vec<f32>,
    /// Cloud coverage fraction in percent
    pub cloud_fraction: Vec<f32>,

    // Surface data
    /// Surface pressure reduce to mean sea level (hPa)
    pub mslp: f32,
    /// Surface pressure (hPa)
    pub station_pres: f32,
    /// Low cloud fraction
    pub low_cloud: f32,
    /// Mid cloud fraction
    pub mid_cloud: f32,
    /// Hi cloud fraction
    pub hi_cloud: f32,
    /// U - wind speed (m/s) (West -> East is positive)
    pub uwind: f32,
    /// V - wind speed (m/s) (South -> North is positive)
    pub vwind: f32,
}