0.0
The project is in a healthy, maintained state
Implementation of the ISO Standard Atmosphere (ISA) model as defined in ISO 2533 and ICAO 7488/3 1994. Reference implementation used in ISO 2533:2025."
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

 Project Readme

Atmospheric for Ruby (International Standard Atmosphere / ICAO Standard Atmosphere (ISA))

Purpose

This repository provides Ruby code for calculating values defined in the following standards:

Which are technically identical standards but different in presentation and units (the ICAO document includes ft in addition to m).

This library serves as a reference implementation for the values defined in ISO CD 2533:2025.

Usage

General

This library contains code for two separate, but related, purposes.

  • Calculating atmospheric properties at different altitudes. The algorithms are based on ISO 2533.

  • Generating tables of atmospheric properties at different altitudes. This library is used to data tables provided by the full ISO 2533 series:

    • ISO 2533:1975

    • ISO 2533:1975/ADD 1:1985

    • ISO 2533:1975/ADD 2:1997

    • ISO CD 2533:2025

For the typical user who wishes to calculate atmospheric properties, there is no need to worry about how the tables work.

To calculate atmospheric properties, either use the formulas directly or use the Atmospheric::Export::AltitudeAttrs class to bulk obtain the values needed.

Prerequsites

Include the atmospheric gem in your Gemfile:

gem 'atmospheric'

Then use require in code:

require 'atmospheric'

Atmospheric attributes by altitude

The Atmospheric::Export::AltitudeAttrs class provides a way to obtain the atmospheric properties at a particular given altitude, geopotential or geometric.

The resulting object can also be easily serialized, courtesy of the lutaml-model library.

Syntax:

require 'atmospheric'

Atmospheric::Export::AltitudeAttrs.new.set_altitude(
  value: {altitude-value} (1)
  type: {altitude-type} (2)
  unit: {altitude-unit} <3>,
  precision: {precision-mode} (4)
)
  1. Value of the altitude desired. Integer.

  2. Type of altitude. Symbol. One of :geometric, :geopotential.

  3. Unit of the altitude. Symbol. One of :meters, :feet.

  4. Precision mode. Symbol. One of :normal, :high, :reduced. Default is :normal.

Each attribute of the AltitudeAttrs object is wrapped in a defined data class which is associated with a UnitsML unit.

Behavior of the precision mode:

:reduced

(default) Uses Isa::NormalPrecision for calculations with signficant digits rounding according to the original ISO 2533 specification.

:normal

Uses Isa::NormalPrecision for calculations without value modification.

:high

Uses Isa::HighPrecision for calculations without value modifications. This mode uses BigDecimal.

Depending on the type of the value, it is in one of the following classes:

  • Integer. Class: UnitValueInteger

  • Float. Class: UnitValueFloat

The AltitudeAttrs object provides the following attributes:

geometric_altitude_m

Geometric altitude in meters.

geometric_altitude_ft

Geometric altitude in feet.

geopotential_altitude_m

Geopotential altitude in meters.

geopotential_altitude_ft

Geopotential altitude in feet.

temperature_k

Temperature in Kelvin. This value is multiplied by 1000.

temperature_c

Temperature in Celsius. This value is multiplied by 1000.

pressure_mbar

Pressure in millibar.

pressure_mmhg

Pressure in mmHg.

density

Density in kg/m^3.

acceleration

Acceleration in m/s^2.

ppn

Ratio of pressure at altitude to pressure at sea level.

rhorhon

Ratio of density at altitude to density at sea level.

sqrt_rhorhon

Square root of the ratio of density at altitude to density at sea level.

speed_of_sound

Speed of sound in m/s.

dynamic_viscosity

Dynamic viscosity in kg/(m·s).

kinematic_viscosity

Kinematic viscosity in m^2/s.

thermal_conductivity

Thermal conductivity in W/(m·K).

pressure_scale_height

Pressure scale height in meters.

specific_weight

Specific weight in N/m^3.

air_number_density

Air number density in particles/m^3.

mean_speed

Mean speed of air particles in m/s.

frequency

Frequency of air particle collisions in 1/s.

mean_free_path

Mean free path of air particles in meters.

require 'atmospheric'
attrs = Atmospheric::Export::AltitudeAttrs.new.set_altitude(
  value: -2000,
  type: :geopotential,
  unit: :meters
)

attrs.geopotential_altitude_m #=> -2000
attrs.geopotential_altitude_ft #=> -6561.68
attrs.geometric_altitude_m #=> -1999
attrs.geometric_altitude_ft #=> -6560

The object can be serialized into YAML or XML.

Example 1. AltitudeAttrs in YAML
attrs = Atmospheric::Export::AltitudeAttrs.new.set_altitude(
  value: -2000,
  type: :geopotential,
  unit: :meters
)

attrs.to_yaml
geometric-altitude-m:
  value: -1999
  unitsml: m
  type: integer
geometric-altitude-ft:
  value: -6560
  unitsml: ft
  type: integer
geopotential-altitude-m:
  value: -2000
  unitsml: m
  type: integer
geopotential-altitude-ft:
  value: -6562
  unitsml: ft
  type: integer
temperature-k:
  value: 301150
  unitsml: K
  type: integer
temperature-c:
  value: 28000
  unitsml: degC
  type: integer
pressure-mbar:
  value: 1277.74
  unitsml: mbar
  type: float
pressure-mmhg:
  value: 958.382
  unitsml: u:mm_Hg
  type: float
density:
  value: 1.47808
  unitsml: kg*m^-3
  type: float
acceleration:
  value: 9.8128
  unitsml: m*s^-2
  type: float
ppn:
  value: 1.26103
  type: float
rhorhon:
  value: 1.20659
  type: float
sqrt-rhorhon:
  value: 1.09845
  type: float
speed-of-sound:
  value: 347886
  unitsml: m*s^-1
  type: integer
dynamic-viscosity:
  value: 1.8514e-05
  unitsml: Pa*s
  type: float
kinematic-viscosity:
  value: 1.2526e-05
  unitsml: m^2*s^-1
  type: float
thermal-conductivity:
  value: 0.026359
  unitsml: W*m^-1*K^-1
  type: float
pressure-scale-height:
  value: 8809.5
  unitsml: m
  type: float
specific-weight:
  value: 14.504
  unitsml: N*m^-3
  type: float
air-number-density:
  value: 3.0734e+25
  unitsml: m^-3
  type: float
mean-speed:
  value: 469.18
  unitsml: m*s^-1
  type: float
frequency:
  value: 8535100000.0
  unitsml: s^-1
  type: float
mean-free-path:
  value: 5.4971e-08
  unitsml: m
  type: float
Example 2. AltitudeAttrs in XML
attrs = Atmospheric::Export::AltitudeAttrs.new.set_altitude(
  value: -2000,
  type: :geopotential,
  unit: :meters
)

attrs.to_xml
<atmosphere-attributes>
  <geometric-altitude-m unitsml="m" type="integer">-1999</geometric-altitude-m>
  <geometric-altitude-ft unitsml="ft" type="integer">-6560</geometric-altitude-ft>
  <geopotential-altitude-m unitsml="m" type="integer">-2000</geopotential-altitude-m>
  <geopotential-altitude-ft unitsml="ft" type="integer">-6562</geopotential-altitude-ft>
  <temperature-k unitsml="K" type="integer">301150</temperature-k>
  <temperature-c unitsml="degC" type="integer">28000</temperature-c>
  <pressure-mbar unitsml="mbar" type="float">1277.74</pressure-mbar>
  <pressure-mmhg unitsml="u:mm_Hg" type="float">958.382</pressure-mmhg>
  <density unitsml="kg*m^-3" type="float">1.47808</density>
  <acceleration unitsml="m*s^-2" type="float">9.8128</acceleration>
  <ppn type="float">1.26103</ppn>
  <rhorhon type="float">1.20659</rhorhon>
  <sqrt-rhorhon type="float">1.09845</sqrt-rhorhon>
  <speed-of-sound unitsml="m*s^-1" type="integer">347886</speed-of-sound>
  <dynamic-viscosity unitsml="Pa*s" type="float">1.8514e-05</dynamic-viscosity>
  <kinematic-viscosity unitsml="m^2*s^-1" type="float">1.2526e-05</kinematic-viscosity>
  <thermal-conductivity unitsml="W*m^-1*K^-1" type="float">0.026359</thermal-conductivity>
  <pressure-scale-height unitsml="m" type="float">8809.5</pressure-scale-height>
  <specific-weight unitsml="N*m^-3" type="float">14.504</specific-weight>
  <air-number-density unitsml="m^-3" type="float">3.0734e+25</air-number-density>
  <mean-speed unitsml="m*s^-1" type="float">469.18</mean-speed>
  <frequency unitsml="s^-1" type="float">8535100000.0</frequency>
  <mean-free-path unitsml="m" type="float">5.4971e-08</mean-free-path>
</atmosphere-attributes>

Altitude by pressure

The Atmospheric::Export::PressureAttrs class provides a way to obtain the altitude at a given pressure value (mbar, mmhg).

Syntax:

require 'atmospheric'

Atmospheric::Export::PressureAttrs.new.set_pressure(
  value: {pressure-value}, (1)
  unit: {pressure-unit}, (2)
  precision: {precision-mode} (3)
)
  1. Value of the pressure desired. Float.

  2. Unit of the pressure. Symbol. One of :mbar, :mmhg.

Note
The set_pressure method does not yet support high-precision mode.

Behavior of the precision mode:

:reduced

(default) Uses Isa::NormalPrecision for calculations with signficant digits rounding according to the original ISO 2533/ADD 2 specification.

:normal

Uses Isa::NormalPrecision for calculations without value modification.

:high

Uses Isa::HighPrecision for calculations without value modifications. This mode uses BigDecimal.

Each attribute of the PressureAttrs object is wrapped in a defined data class which is associated with a UnitsML unit.

Depending on the type of the value, it is in one of the following classes:

  • Integer. Class: UnitValueInteger

  • Float. Class: UnitValueFloat

The PressureAttrs object provides the following attributes:

pressure_mbar

Pressure in millibar.

pressure_mmhg

Pressure in mmHg.

geometric_altitude_m

Geometric altitude in meters.

geometric_altitude_ft

Geometric altitude in feet.

geopotential_altitude_m

Geopotential altitude in meters.

geopotential_altitude_ft

Geopotential altitude in feet.

attrs = Atmospheric::Export::PressureAttrs.new.set_pressure(
  value: 5.0,
  unit: :mbar
)

attrs.pressure_mbar #=> 5.0
attrs.pressure_mmhg #=> 3.7503084135
attrs.geopotential_altitude_m #=> 35776
attrs.geopotential_altitude_ft #=> 117377
attrs.geometric_altitude_m #=> 35979
attrs.geometric_altitude_ft #=> 118041

The object can be serialized into YAML or XML.

Example 3. PressureAttrs in YAML
attrs = Atmospheric::Export::PressureAttrs.new.set_pressure(
  value: 5.0,
  unit: :mbar
)

attrs.to_yaml
pressure-mbar:
  value: 5.0
  unitsml: mbar
  type: float
pressure-mmhg:
  value: 3.7503084135
  unitsml: mmhg
  type: float
geopotential-altitude-m:
  value: 35776
  unitsml: m
  type: integer
geopotential-altitude-ft:
  value: 117377
  unitsml: ft
  type: integer
geometric-altitude-m:
  value: 35979
  unitsml: m
  type: integer
geometric-altitude-ft:
  value: 118041
  unitsml: ft
  type: integer
Example 4. PressureAttrs in XML
attrs = Atmospheric::Export::PressureAttrs.new.set_pressure(
  value: 5.0,
  unit: :mbar
)

attrs.to_xml
<hypsometrical-attributes>
  <pressure-mbar unitsml="mbar" type="float">5.0</pressure-mbar>
  <pressure-mmhg unitsml="mmhg" type="float">3.7503084135</pressure-mmhg>
  <geometric-altitude-m unitsml="m" type="integer">35979</geometric-altitude-m>
  <geometric-altitude-ft unitsml="ft" type="integer">118041</geometric-altitude-ft>
  <geopotential-altitude-m unitsml="m" type="integer">35776</geopotential-altitude-m>
  <geopotential-altitude-ft unitsml="ft" type="integer">117377</geopotential-altitude-ft>
</hypsometrical-attributes>

Algorithms

General

For users who wish to access the algorithms directly, the Atmospheric::Isa::Algorithms class provides a set of methods for calculating atmospheric properties at different altitudes.

ISO 2533 specifies a number of formulas for the calculation of atmospheric properties at different altitudes.

These algorithms are implemented in the Atmospheric::Isa::Algorithms class.

There are two ways to use the Atmospheric::Isa::Algorithms class:

  • as a singleton class, using one of the precision modes (see below)

  • as a class instance

require 'atmospheric'
# Singleton class
instance = Atmospheric::Isa::NormalPrecision.instance.instance
instance.geometric_altitude_from_geopotential(100).to_f
=> 100.00157315171192

# Class instance
instance = Atmospheric::Isa::Algorithms.new(precision: :high)
instance.geometric_altitude_from_geopotential(100).to_f
=> 100.00157315171192

Formulas and calculations

The Algorithms class supports the following methods for calculating atmospheric properties.

Syntax:

require 'atmospheric'
instance = Atmospheric::Isa::Algorithms.new.{method_name} (1)
  1. method_name is one of the methods listed below.

The available methods are:

Converting between geometric and geopotential altitudes:

  • geometric_altitude_from_geopotential(geopotential_altitude)

  • geopotential_altitude_from_geometric(geometric_altitude)

Obtaining the temperature value from an altitude:

  • temperature_at_layer_from_geopotential(geopotential_altitude) (Kelvin)

  • temperature_at_layer_celcius(geopotential_altitude) (Celcius)

Obtaining the pressure value from an altitude:

  • pressure_from_geopotential_mbar(geopotential_altitude) (mbar/hPa)

  • pressure_from_geopotential_mmhg(geopotential_altitude) (mmHg)

Obtaining other atmospheric properties from an 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)

Obtaining thermal conductivity from temperature:

  • thermal_conductivity_from_temp(temp)

Obtaining geopotential altitude from a given pressure:

  • geopotential_altitude_from_pressure_mbar(mbar)

  • geopotential_altitude_from_pressure_mmhg(mmhg)

Precision modes

There are two precision modes available for calculations.

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 use the high precision mode, you can either:

  • use the Atmospheric::Isa::HighPrecision class

  • use the Atmospheric::Isa::Algorithms class then call the set_precision(:high) method

require 'atmospheric'

# High precision mode
high_precision_instance = Atmospheric::Isa::HighPrecision.instance

speed_h = Atmospheric::Isa::HighPrecision.instance.speed_of_sound_from_temp(100)
=> 0.200467958523516054299360531511514627125051490111885121917578012786288944852326625441743718038552367514555018117e3

speed_h.class
=> BigDecimal

# Normal precision mode (default)
normal_precision_instance = Atmospheric::Isa::NormalPrecision.instance.instance

speed_n = Atmospheric::Isa::NormalPrecision.instance.instance.speed_of_sound_from_temp(100)
=> 200.46795852351607

speed_n.class
=> Float

Generating ISO 2533 tables

ISO 2533:1975

All tables in the 1975 edition are arranged in these steps in meters:

ISO 2533:1975 table range: step 50 from -2k, 100 from 32k, 200 from 51k to 80k
(-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

  • geometric-altitude-m

  • geometric-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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331975.table_5.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331975.table_6.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331975.table_7.to_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         #=> Lutaml::Model
Atmospheric::Export::Iso25331985.table_1.to_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         #=> Lutaml::Model
Atmospheric::Export::Iso25331985.table_2.to_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         #=> Lutaml::Model
Atmospheric::Export::Iso25331985.table_3.to_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         #=> Lutaml::Model
Atmospheric::Export::Iso25331985.table_4.to_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         #=> Lutaml::Model
Atmospheric::Export::Iso25331985.table_56.to_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.

ISO 2533 ADD 2:1997 Tables 1 to 3 have height range in meters
(-5000..2000).step(50)
ISO 2533 ADD 2:1997 Tables 4 to 6 have height range in feet
(-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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_1.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_2.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_3.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_4.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_5.to_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 geometric 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         #=> Lutaml::Model
Atmospheric::Export::Iso25331997.table_6.to_yaml #=> YAML

ISO 2533:2025

General

ISO 2533 is now being revised targeting a 2025 publication, which will be 50 years since the last edition (1975) and 28 years since it was last updated (1997).

It is currently in the CD stage (Committee Draft) and is expected to be published in 2025.

  • ISO NP 2533:2024. approved in 2024.

  • ISO WD 2533:2024. launched: 2024-11-22, closed: 2025-02-17.

  • ISO CD 2533:2024. pending.

ISO 2533:2025 covers all content in the previously published Addenda, including:

  • Standard atmosphere values from altitude -5km to 80km (geometric and geopotential)

    Note
    The 1975 edition provided values from -2km to 80km (even though it said 32km in the title).
    Note
    The 1997 ADD 2 provided values from -5km to 2km.
  • Standard atmosphere values from altitude -16,500ft to 262,500ft (geometric and geopotential)

    Note
    The 1997 ADD 2 provided these values.
  • Hypsometrical tables (altitude as a function of barometric pressure) (geometric and geopotential; hPa/mbar)

    Note
    The 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 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

The Iso25332025 class provides the following methods to generate tables:

table_atmosphere_meters

Atmosphere attributes by altitude (m). Grouped by by-geopotential-altitude and by-geometric-altitude. Each entry underneath is an AltitudeAttrs object. The altitude interval values follow these steps:

Step 50 from -5k, 100 from 32k, 200 from 51k to 80k.
(-5000..31950).step(50) +
(32000..50900).step(100) +
(51000..80000).step(200)
table_atmosphere_feet

Atmosphere attributes by altitude (ft). Grouped by by-geopotential-altitude and by-geometric-altitude. Each entry underneath is an AltitudeAttrs object. The altitude interval values follow these steps:

Step 250 from -16500, 200 from -14000, 500 from 105000 to 262500
(-16500..-13750).step(250) +
(-14000..104800).step(200) +
(105000..262500).step(500)
table_hypsometrical_altitude

Atmosphere attributes by altitude (m). This is the same as table_atmosphere_meters except with a modified step.

Step 1 from -1000 to 4599
(-1000..4599).step(1)
table_hypsometrical_mbar

Hypsometrical table by pressure (mbar). This is a table that provides altitude values per unit of pressure. Each entry underneath is a PressureAttrs object. It follows this step schedule:

Step 0.01 from 5 to 20, 0.1 from 20 to 1770.9
(5.0..19.99).step(0.01) +
(20.0..1770.9).step(0.1)
Example 5. Generating the ISO 2533:2025 tables
# Defaults to precision mode `:reduced`
Atmospheric::Export::Iso25332025.table_atmosphere_meters #=> Lutaml::Model
Atmospheric::Export::Iso25332025.table_atmosphere_meters.to_yaml #=> YAML

# To use precision mode `:high`
x = Atmospheric::Export::Iso25332025.table_atmosphere_meters(precision: :high)
x.to_yaml #=> YAML

The above table methods are used as the data sources for the data tables in ISO 2533:2025:

  • table_atmosphere_meters: Table 5 (meters), Table 6 (meters), Table 7 (meters). This data table is split into 3 tables for readability reasons.

  • table_atmosphere_feet: Table 8 (feet), Table 9 (feet), Table 10 (feet). Similarly, this data table is split into 3 tables for readability reasons.

  • table_hypsometrical_altitude: Table 11 (mbar).

  • table_hypsometrical_mbar: Table 12 (geopotential), Table 13 (geometric).

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 geometric altitude (h) and geopotential altitude (H)"

This table is a subset of the table_atmosphere_meters method.

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 geometric altitude (h), and geopotential altitude (H)"

This table is a subset of the table_atmosphere_meters method.

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 geometric altitude (h) and geopotential altitude (H)"

This table is a subset of the table_atmosphere_meters method.

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 geometric 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.

This table is a subset of the table_atmosphere_feet method.

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 geometric altitude (h), and geopotential altitude (H) — Altitudes in feet"

Exactly same as ISO 2533:1975 Table 6, but in feet and different range.

This table is a subset of the table_atmosphere_feet method.

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 geometric altitude (h) and geopotential altitude (H) — Altitudes in feet"

Exactly same as ISO 2533:1975 Table 7, but in feet and different range.

This table is a subset of the table_atmosphere_feet method.

Table 11 (mbar)

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

  • pressure-mmhg

  • geopotential-altitude-m

  • geopotential-altitude-ft

  • geometric-altitude-m

  • geometric-altitude-ft

# Defaults to precision mode `:reduced`
Atmospheric::Export::Iso25332025.table_hypsometrical_mbar         #=> Lutaml::Model
Atmospheric::Export::Iso25332025.table_hypsometrical_mbar.to_yaml #=> YAML

# To use precision mode `:high`
x = Atmospheric::Export::Iso25332025.table_hypsometrical_mbar(precision: :high)
x.to_yaml #=> YAML

Table 12 (geopotential altitude, m)

Note
This corresponds to ISO 2533:1975/ADD 1:1985 Table 5 but in geopotential altitude.

Title: "Barometric pressure, in hectopascals, as a function of geopotential altitude for -1000 ⇐ H < +4600 m at intervals of 1m"

This table is a subset of the table_atmosphere_meters method.

Table 13 (geometric altitude, m)

Note
This corresponds to ISO 2533:1975/ADD 1:1985 Table 5, in geometric altitude.

Title: "Barometric pressure, in hectopascals, as a function of geometric altitude for -1000 ⇐ H < +4600 m at intervals of 1m"

This table is a subset of the table_atmosphere_meters method.

Testing

General

$ bundle exec rake

Re-generate fixture tables

The spec/fixtures/iso* directories contains YAML files that are used to generate the ISO 2533 tables.

To re-generate the tables, run:

$ bundle exec rake clean generate

These tasks are defined in the Rakefile.

Algorithms

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.