Class: Atmospheris::Iso5878::SurfaceParameters

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initialize(latitude_deg) ⇒ SurfaceParameters

Returns a new instance of SurfaceParameters.

Parameters:

  • latitude_deg (Numeric)

    geographic latitude in degrees



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_degObject (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.

Parameters:

  • gp_m (Numeric)

    geopotential altitude in metres

Returns:

  • (Float)

    geometric altitude in metres



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.

Parameters:

  • h_m (Numeric)

    geometric altitude in metres

Returns:

  • (Float)

    geopotential altitude in metres



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.

Parameters:

  • h_m (Numeric)

    geometric altitude in metres

Returns:

  • (Float)

    g_phi(h) in m/s^2



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_levelFloat

Eq. 0 — Lambert's equation for acceleration of free fall at sea level.

Returns:

  • (Float)

    g_0(phi) in m/s^2



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_radiusFloat

Eq. 13 — Nominal earth radius at the given latitude.

Returns:

  • (Float)

    r_phi in metres



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