Class: Atmospheris::Iso5878::SurfaceParameters
- Inherits:
-
Object
- Object
- Atmospheris::Iso5878::SurfaceParameters
- Defined in:
- lib/atmospheris/iso5878/surface_parameters.rb
Overview
Encapsulates latitude-dependent surface parameters for ISO 5878 reference atmospheres.
Computes gravity at sea level (Lambert's equation, Eq. 0) and nominal earth radius (Eq. 13) from geographic latitude. Provides altitude conversion methods that use latitude-specific gravity and radius.
Immutable value object — all derived values are computed from latitude.
Constant Summary collapse
- G_N =
standard gravity (m/s^2), ISO 2533
9.80665- R_SPECIFIC =
specific gas constant (J/(kg*K))
287.05287
Instance Attribute Summary collapse
-
#latitude_deg ⇒ Object
readonly
Returns the value of attribute latitude_deg.
Instance Method Summary collapse
-
#geometric_from_geopotential(gp_m) ⇒ Float
Eq.
-
#geopotential_from_geometric(h_m) ⇒ Float
Eq.
-
#gravity_at_geometric(h_m) ⇒ Float
Eq.
-
#gravity_at_sea_level ⇒ Float
Eq.
-
#initialize(latitude_deg) ⇒ SurfaceParameters
constructor
A new instance of SurfaceParameters.
-
#nominal_earth_radius ⇒ Float
Eq.
Constructor Details
#initialize(latitude_deg) ⇒ SurfaceParameters
Returns a new instance of SurfaceParameters.
20 21 22 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 20 def initialize(latitude_deg) @latitude_deg = latitude_deg.to_f end |
Instance Attribute Details
#latitude_deg ⇒ Object (readonly)
Returns the value of attribute latitude_deg.
17 18 19 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 17 def latitude_deg @latitude_deg end |
Instance Method Details
#geometric_from_geopotential(gp_m) ⇒ Float
Eq. 9 — Geometric altitude from geopotential altitude.
62 63 64 65 66 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 62 def geometric_from_geopotential(gp_m) r = nominal_earth_radius g0 = gravity_at_sea_level (r * gp_m) / ((g0 / G_N) * r - gp_m) end |
#geopotential_from_geometric(h_m) ⇒ Float
Eq. 8 — Geopotential altitude from geometric altitude.
53 54 55 56 57 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 53 def geopotential_from_geometric(h_m) r = nominal_earth_radius g0 = gravity_at_sea_level (r * h_m / (r + h_m)) * (g0 / G_N) end |
#gravity_at_geometric(h_m) ⇒ Float
Eq. 7 — Acceleration of free fall at geometric altitude h.
44 45 46 47 48 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 44 def gravity_at_geometric(h_m) r = nominal_earth_radius ratio = r / (r + h_m) gravity_at_sea_level * ratio * ratio end |
#gravity_at_sea_level ⇒ Float
Eq. 0 — Lambert's equation for acceleration of free fall at sea level.
26 27 28 29 30 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 26 def gravity_at_sea_level phi_rad = @latitude_deg * Math::PI / 180.0 cos2phi = Math.cos(2.0 * phi_rad) 9.80616 * (1.0 - 0.0026373 * cos2phi + 0.0000059 * cos2phi * cos2phi) end |
#nominal_earth_radius ⇒ Float
Eq. 13 — Nominal earth radius at the given latitude.
34 35 36 37 38 39 |
# File 'lib/atmospheris/iso5878/surface_parameters.rb', line 34 def nominal_earth_radius phi_rad = @latitude_deg * Math::PI / 180.0 cos2phi = Math.cos(2.0 * phi_rad) g0 = gravity_at_sea_level g0 * 2.0 / (3.085462e-6 + 2.27e-9 * cos2phi) end |