Atmospheric for Ruby (International Standard Atmosphere / ICAO Standard Atmosphere (ISA))
Purpose
This repository provides Ruby code for calculating values defined in the following documents:
-
International Standard Atmosphere (ISA) from ISO 2533:1975, ISO 2533:1975/ADD 1:1985 and ISO 2533:1975/ADD 2:1997
-
ICAO Standard Atmosphere (ICAO Doc 7488/3, 1994)
Which are technically identical documents but different in presentation and
units (the ICAO document includes ft
in addition to m
).
Usage
Precision modes
There are two precision modes available for calculations: high precision and normal precision (default).
- High Precision Mode
-
Uses more accurate constants and number calculations through Ruby’s BigDecimal to provide results with higher precision. Suitable for applications where the utmost accuracy is required.
- Normal Precision Mode (default)
-
Uses standard constants and number calculations to provide results with sufficient accuracy for most applications.
To specify the precision mode, set the precision
attribute when creating an instance of Atmospheric::Isa
:
:high
-
High precision mode
-
:normal
or not specified -
Normal precision mode
Example usage:
require 'atmospheric'
# Normal precision mode (default)
normal_precision_instance = Atmospheric::Isa.new
# High precision mode
high_precision_instance = Atmospheric::Isa.new(precision: :high)
Formulas and calculations
require 'atmospheric'
instance = Atmospheric::Isa.{method_name}
# {method_name} is one of the following
The available methods are:
-
geometric_altitude_from_geopotential(geopotential_altitude)
-
geopotential_altitude_from_geometric(geometric_altitude)
-
temperature_at_layer_from_geopotential(geopotential_altitude)
-
temperature_at_layer_celcius(geopotential_altitude)
-
pressure_from_geopotential_mbar(geopotential_altitude)
-
pressure_from_geopotential_mmhg(geopotential_altitude)
-
density_from_geopotential(geopotential_altitude)
-
gravity_at_geopotential(geopotential_altitude)
-
p_p_n_from_geopotential(geopotential_altitude)
-
rho_rho_n_from_geopotential(geopotential_altitude)
-
root_rho_rho_n_from_geopotential(geopotential_altitude)
-
speed_of_sound_from_geopotential(geopotential_altitude)
-
dynamic_viscosity_from_geopotential(geopotential_altitude)
-
kinematic_viscosity_from_geopotential(geopotential_altitude)
-
thermal_conductivity_from_geopotential(geopotential_altitude)
-
pressure_scale_height_from_geopotential(geopotential_altitude)
-
specific_weight_from_geopotential(geopotential_altitude)
-
air_number_density_from_geopotential(geopotential_altitude)
-
mean_air_particle_speed_from_geopotential(geopotential_altitude)
-
air_particle_collision_frequency_from_geopotential(geopotential_altitude)
-
mean_free_path_of_air_particles_from_geopotential(geopotential_altitude)
Generating ISO 2533 tables
ISO 2533:1975
All tables in the 1975 edition are arranged in these steps in meters:
(-2000..31999).step(50) + (32000..50999).step(100) + (51000..80000).step(200)
Tables 5 to 7 all have height information of the following keys in the hash:
-
geopotential-altitude-m
-
geopotential-altitude-ft
-
geometrical-altitude-m
-
geometrical-altitude-ft
All YAML tables generated contain these two keys which group altitude values as the ISO 2533 tables are rendered in both types of altitudes:
-
by-geopotential-altitude
-
by-geometric-altitude
Table 5
Title: "Temperature (T and t), Pressure (p), Density (p) and Acceleration of free fall (g) in terms of geometrical altitude (h) and geopotential altitude (H)"
Provides the following values in addition to geopotential and geometric height:
-
temperature-K
-
temperature-C
-
pressure-mbar
-
pressure-mmhg
-
density
-
acceleration
Atmospheric::Export::Iso25331975.table_5 #=> Hash
Atmospheric::Export::Iso25331975.table_5_yaml #=> YAML
Table 6
Title: "Relations of p’pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of geometrical altitude (h), and geopotential altitude (H)"
Provides the following values in addition to geopotential and geometric height:
-
ppn
-
rhorhon
-
sqrt-rhorhon
-
speed-of-sound
-
dynamic-viscosity
-
kinematic-viscosity
-
thermal-conductivity
Atmospheric::Export::Iso25331975.table_6 #=> Hash
Atmospheric::Export::Iso25331975.table_6_yaml #=> YAML
Table 7
Title: "Pressure scale height (H_p) Specific weight (gamma), Air number density (n), Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean free path of air particles (l) in terms of geometrical altitude (h) and geopotential altitude (H)"
-
pressure-scale-height
-
specific-weight
-
air-number-density
-
mean-speed
-
frequency
-
mean-free-path
Atmospheric::Export::Iso25331975.table_7 #=> Hash
Atmospheric::Export::Iso25331975.table_7_yaml #=> YAML
ISO 2533 ADD 1:1985
Addendum 1 adds "Hypsometrical tables".
Table 1 (hPa)
Title: "Geopotential altitude as a function of barometric pressure for 5 ⇐ p < 20 hPa at intervals of 0.01 hPa"
For the range of (5.0..19.99).step(0.01)
in hPa.
Provides:
-
pressure-mbar
-
geopotential-altitude
Atmospheric::Export::Iso25331985.table_1 #=> Hash
Atmospheric::Export::Iso25331985.table_1_yaml #=> YAML
Table 2 (hPa)
Title: "Geopotential altitude as a function of barometric pressure for 20 ⇐ p < 1200 hPa at intervals of 0.1 hPa"
Same as Table 1 but for the range of (20.0..1199.9).step(0.1)
in hPa.
Atmospheric::Export::Iso25331985.table_2 #=> Hash
Atmospheric::Export::Iso25331985.table_2_yaml #=> YAML
Table 3 (mmHg)
Title: "Geopotential altitude as a function of barometric pressure for 4 ⇐ p < 10 mmHg at intervals of 0.01 mmHg"
Same as Table 1 but for the range of (4.0..9.99).step(0.01)
and results in mmhg.
Provides:
-
pressure-mmhg
-
geopotential-altitude
Atmospheric::Export::Iso25331985.table_3 #=> Hash
Atmospheric::Export::Iso25331985.table_3_yaml #=> YAML
Table 4 (mmHg)
Title: "Geopotential altitude as a function of barometric pressure for 10 ⇐ p < 900 mmHg at intervals of 0.1 mmHg"
Same as Table 3 but for the range of (10.0..899.9).step(0.1)
and results in mmhg.
Atmospheric::Export::Iso25331985.table_4 #=> Hash
Atmospheric::Export::Iso25331985.table_4_yaml #=> YAML
Table 5 (hPa) and Table 6 (mmHg)
The difference is Table 5 is in hPa while Table 6 is in mmHg.
Title: "Barometric pressure, in hectopascals, as a function of geopotential altitude for -1000 ⇐ H < +4600 m at intervals of 1m"
Provides:
-
geopotential-altitude
-
pressure-mbar
-
pressure-mmhg
Range of (-1000..4599).step(1)
.
Atmospheric::Export::Iso25331985.table_56 #=> Hash
Atmospheric::Export::Iso25331985.table_56_yaml #=> YAML
ISO 2533 ADD 2:1997
Addendum 2 is exactly like ISO 2533:1975 with the tables but extended the tables:
-
1975’s range is -2km to 80km. 1997 provides -5km to 2km (yes -2km to 2km overlaps…)
-
1975 tables only provide H and h in meters. 1997 adds a lookup table of H and h in feet.
(-5000..2000).step(50)
(-16500..-13999).step(250) + (-14000..104999).step(200) + (105000..262500).step(500)
Table 1 (-5km to 2km)
Title: "Temperature (T and t), pressure (p), density (p) and acceleration of free fall (g) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in metres"
Exactly same as ISO 2533:1975 Table 5, but with a different height range.
In addition, pressure at mmHg is no longer produced, but the implementation still provides it for completeness.
Atmospheric::Export::Iso25331997.table_1 #=> Hash
Atmospheric::Export::Iso25331997.table_1_yaml #=> YAML
Table 2 (-5km to 2km)
Title: "Relations of p’pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of geometrical altitude (h), and geopotential altitude (H) — Altitudes in metres"
Exactly same as ISO 2533:1975 Table 6, but with a different height range.
Atmospheric::Export::Iso25331997.table_2 #=> Hash
Atmospheric::Export::Iso25331997.table_2_yaml #=> YAML
Table 3 (-5km to 2km)
Title: "Pressure scale height (H_p) Specific weight (gamma), Air number density (n), Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean free path of air particles (l) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in metres"
Exactly same as ISO 2533:1975 Table 7, but with a different height range.
Atmospheric::Export::Iso25331997.table_3 #=> Hash
Atmospheric::Export::Iso25331997.table_3_yaml #=> YAML
Table 4 (-16.5kft to 262.5kft)
Title: "Temperature (T and t), pressure (p), density (p) and acceleration of free fall (g) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 5, but in feet and different range.
Pressure at mmHg is not produced, but the implementation still provides it for completeness.
Atmospheric::Export::Iso25331997.table_4 #=> Hash
Atmospheric::Export::Iso25331997.table_4_yaml #=> YAML
Table 5 (-16.5kft to 262.5kft)
Title: "Relations of p’pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of geometrical altitude (h), and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 6, but in feet and different range.
Atmospheric::Export::Iso25331997.table_5 #=> Hash
Atmospheric::Export::Iso25331997.table_5_yaml #=> YAML
Table 6 (-16.5kft to 262.5kft)
Title: "Pressure scale height (H_p) Specific weight (gamma), Air number density (n), Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean free path of air particles (l) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 7, but in feet and different range.
Atmospheric::Export::Iso25331997.table_6 #=> Hash
Atmospheric::Export::Iso25331997.table_6_yaml #=> YAML
ISO NP 2533:2024
General
ISO 2533 is now proposed to be revised for a 2024/2025 version, 49 years since the last edition (1975) and 27 years since it was last updated (1997).
ISO NP 2533:2024 will likely include all content in the previously published Addenda, including:
-
Standard atmosphere values from altitude -5km to 80km (geometric and geopotential)
NoteThe 1975 edition provided values from -2km to 80km (even though it said 32km in the title). NoteThe 1997 ADD 2 provided values from -5km to 2km. -
Standard atmosphere values from altitude -16,500ft to 262,500ft (geometric and geopotential)
NoteThe 1997 ADD 2 provided these values. -
Hypsometrical tables (altitude as a function of barometric pressure) (geometric and geopotential; hPa/mbar)
NoteThe 1985 ADD 1 provided these hypsometrical tables in hPa/mbar and mmHg. In the 2024 edition only hPa/mbar is provided.
This document will also align to the values provided in ICAO Doc 7488/3.
All tables in the new edition are arranged in these steps.
(-5000..31950).step(50) + (32000..50900).step(100) + (51000..80000).step(200)
(-16500..-13750).step(250) + (-14000..104800).step(200) + (105000..262500).step(500)
Tables 5 to 10 all have height information of the following keys in the hash:
-
geopotential-altitude-m
-
geopotential-altitude-ft
-
geometrical-altitude-m
-
geometrical-altitude-ft
All YAML tables generated contain these two keys which group altitude values as the ISO 2533 tables are rendered in both types of altitudes:
-
by-geopotential-altitude
-
by-geometric-altitude
Table 5 (meters)
Note
|
This corresponds to ISO 2533:1975 Table 5 combined with ISO 2533:1975/ADD 1:1997 Table 1. |
Title: "Temperature (T and t), Pressure (p), Density (p) and Acceleration of free fall (g) in terms of geometrical altitude (h) and geopotential altitude (H)"
Provides the following values in addition to geopotential and geometric height:
-
temperature-K
-
temperature-C
-
pressure-mbar
-
pressure-mmhg
-
density
-
acceleration
Atmospheric::Export::Iso25332024.table_5 #=> Hash
Atmospheric::Export::Iso25332024.table_5_yaml #=> YAML
Table 6 (meters)
Note
|
This corresponds to ISO 2533:1975 Table 6 combined with ISO 2533:1975/ADD 1:1997 Table 2. |
Title: "Relations of p’pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of geometrical altitude (h), and geopotential altitude (H)"
Provides the following values in addition to geopotential and geometric height:
-
ppn
-
rhorhon
-
sqrt-rhorhon
-
speed-of-sound
-
dynamic-viscosity
-
kinematic-viscosity
-
thermal-conductivity
Atmospheric::Export::Iso25332024.table_6 #=> Hash
Atmospheric::Export::Iso25332024.table_6_yaml #=> YAML
Table 7 (meters)
Note
|
This corresponds to ISO 2533:1975 Table 7 combined with ISO 2533:1975/ADD 1:1997 Table 3. |
Title: "Pressure scale height (H_p) Specific weight (gamma), Air number density (n), Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean free path of air particles (l) in terms of geometrical altitude (h) and geopotential altitude (H)"
-
pressure-scale-height
-
specific-weight
-
air-number-density
-
mean-speed
-
frequency
-
mean-free-path
Atmospheric::Export::Iso25332024.table_7 #=> Hash
Atmospheric::Export::Iso25332024.table_7_yaml #=> YAML
Table 8 (-16.5kft to 262.5kft)
Note
|
This corresponds to ISO 2533:1975/ADD 2:1997 Table 4. |
Title: "Temperature (T and t), pressure (p), density (p) and acceleration of free fall (g) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 5, but in feet and different range.
Pressure at mmHg is not produced, but the implementation still provides it for completeness.
Atmospheric::Export::Iso25332024.table_8 #=> Hash
Atmospheric::Export::Iso25332024.table_8_yaml #=> YAML
Table 9 (-16.5kft to 262.5kft)
Note
|
This corresponds to ISO 2533:1975/ADD 2:1997 Table 5. |
Title: "Relations of p’pn, p/pn and bar(p/pn), Speed of sound (a), Dynamic viscosity (p), Kinematic viscosity (v) and Thermal conductivity (lambda) in terms of geometrical altitude (h), and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 6, but in feet and different range.
Atmospheric::Export::Iso25332024.table_9 #=> Hash
Atmospheric::Export::Iso25332024.table_9_yaml #=> YAML
Table 10 (-16.5kft to 262.5kft)
Note
|
This corresponds to ISO 2533:1975/ADD 2:1997 Table 6. |
Title: "Pressure scale height (H_p) Specific weight (gamma), Air number density (n), Mean air-particle speed (v), Air-particle collision frequency (omega) and Mean free path of air particles (l) in terms of geometrical altitude (h) and geopotential altitude (H) — Altitudes in feet"
Exactly same as ISO 2533:1975 Table 7, but in feet and different range.
Atmospheric::Export::Iso25332024.table_10 #=> Hash
Atmospheric::Export::Iso25332024.table_10_yaml #=> YAML
Table 11 (hPa)
Note
|
This corresponds to ISO 2533:1975/ADD 1:1985 Table 1 combined with Table 2. |
Title: "Geometric and geopotential altitude as a function of barometric pressure for 5 ⇐ p < 20 hPa at intervals of 0.01 hPa and 20 ⇐ p < 1200 hPa at intervals of 0.1 hPa_"
For the range of (5.0..19.99).step(0.01) + (20.0..1199.9).step(0.1)
in hPa.
Provides:
-
pressure-mbar
-
geopotential-altitude-m
-
geopotential-altitude-ft
-
geometric-altitude-m
-
geometric-altitude-ft
Atmospheric::Export::Iso25332024.table_11 #=> Hash
Atmospheric::Export::Iso25332024.table_11_yaml #=> YAML
Table 12 (hPa)
Note
|
This corresponds to ISO 2533:1975/ADD 1:1985 Table 5 but in geometric altitude. |
Title: "Barometric pressure, in hectopascals, as a function of geometric altitude for -1000 ⇐ H < +4600 m at intervals of 1m"
Provides:
-
geometric-altitude-m
-
pressure-mbar
-
pressure-mmhg
Range of (-1000..4599).step(1)
.
Atmospheric::Export::Iso25332024.table_12 #=> Hash
Atmospheric::Export::Iso25332024.table_12_yaml #=> YAML
Table 13 (hPa)
Note
|
This corresponds to ISO 2533:1975/ADD 1:1985 Table 5, in geopotential altitude. |
Title: "Barometric pressure, in hectopascals, as a function of geopotential altitude for -1000 ⇐ H < +4600 m at intervals of 1m"
Provides:
-
geopotential-altitude-m
-
pressure-mbar
-
pressure-mmhg
Range of (-1000..4599).step(1)
.
Atmospheric::Export::Iso25332024.table_13 #=> Hash
Atmospheric::Export::Iso25332024.table_13_yaml #=> YAML
Testing
$ rspec
Tests are encoded in spec/fixtures/tests.yml
in the following format:
- H: -2000.0
h: -1999.0
TK: 301.15
TC: 28.0
p_mbar: 1277.74
p_mmhg: 958.382
rho: 1.47808
g: 9.8128
p_p_n: 1.26103
rho_rho_n: 1.20659
root_rho_rho_n: 1.09845
a: 347.886
mu: 1.8514e-05
v: 1.2526e-05
lambda: 0.026359
H_p: 8809.5
gamma: 14.504
n: 3.0734e+25
v_bar: 469.18
omega: 8535100000.0
l: 549710000.0
Each of these values are associated with a cell in the tables of the source documents.
The only defining value in a tests is H
(geopotential altitude).
It is used to generate all the other values.
License
Copyright Ribose.
TODO
-
expose this as a plugin to LutaML / Metanorma YAML2text