ATMOS_NRLMSISE00

Overview

The ATMOS_NRLMSISE00 function calculates atmospheric temperature, density, and pressure using the NRLMSISE-00 (Naval Research Laboratory Mass Spectrometer and Incoherent Scatter Radar Exosphere) model. This empirical atmospheric model is valid from ground level to 1000 km altitude and accounts for variations due to geographic location, time of year, time of day, and solar activity. For detailed documentation, see the fluids library atmosphere module.

NRLMSISE-00 was developed by the U.S. Naval Research Laboratory and released in 2001, superseding earlier MSIS models. Unlike simpler standard atmosphere models, NRLMSISE-00 incorporates real-world atmospheric variability driven by solar and geomagnetic activity. The model is described in Picone et al. (2002), published in the Journal of Geophysical Research.

The function accepts a 10.7 cm solar flux parameter (daily_flux and avg_flux), which measures solar radio emissions at 2800 MHz. This index, often called F10.7, serves as a proxy for extreme ultraviolet radiation that heats the upper atmosphere. Typical quiet-sun values are around 70 sfu (solar flux units), while active-sun values can exceed 200 sfu. For more on F10.7, see Tapping (2013).

This implementation uses the fluids Python library, which provides a convenient interface to the NRLMSISE-00 model. The function returns temperature in Kelvin (K), mass density in kg/m³, and pressure in Pascals (Pa), with pressure calculated using the ideal gas law from the model’s temperature and density outputs.

This example function is provided as-is without any representation of accuracy.

Excel Usage

=ATMOS_NRLMSISE00(z, latitude, longitude, day, seconds, daily_flux, avg_flux)
  • z (float, required): Elevation above sea level in meters.
  • latitude (float, optional, default: 0): Latitude in degrees (-90 to 90).
  • longitude (float, optional, default: 0): Longitude in degrees (-180 to 180).
  • day (int, optional, default: 0): Day of year (0-366).
  • seconds (float, optional, default: 0): Seconds since start of day (UT1 time).
  • daily_flux (float, optional, default: 150): Daily average 10.7 cm solar flux.
  • avg_flux (float, optional, default: 150): 81-day average solar flux.

Returns (list[list]): 2D list [[Temperature, Density, Pressure]], or error string.

Examples

Example 1: Standard Atmosphere at 1 km

Inputs:

z latitude longitude day seconds daily_flux avg_flux
1000 0 0 0 0 150 150

Excel formula:

=ATMOS_NRLMSISE00(1000, 0, 0, 0, 0, 150, 150)

Expected output:

Result
293.7 1.058 89220

Example 2: Mid-latitude Summer Day at 5 km

Inputs:

z latitude longitude day seconds daily_flux avg_flux
5000 45 45 180 0 150 150

Excel formula:

=ATMOS_NRLMSISE00(5000, 45, 45, 180, 0, 150, 150)

Expected output:

Result
263.5 0.7333 55510

Example 3: High Altitude at Equator (20 km)

Inputs:

z latitude longitude day seconds daily_flux avg_flux
20000 0 0 100 0 150 150

Excel formula:

=ATMOS_NRLMSISE00(20000, 0, 0, 100, 0, 150, 150)

Expected output:

Result
206.3 0.09556 5663

Example 4: Custom Solar Flux at 10 km

Inputs:

z latitude longitude day seconds daily_flux avg_flux
10000 30 -90 50 36000 200 180

Excel formula:

=ATMOS_NRLMSISE00(10000, 30, -90, 50, 36000, 200, 180)

Expected output:

Result
227.9 0.4245 27800

Python Code

import micropip
await micropip.install(["fluids"])
from fluids.atmosphere import ATMOSPHERE_NRLMSISE00 as fluids_ATMOSPHERE_NRLMSISE00

def atmos_nrlmsise00(z, latitude=0, longitude=0, day=0, seconds=0, daily_flux=150, avg_flux=150):
    """
    Compute temperature, density, and pressure using the NRLMSISE-00 atmospheric model.

    See: https://fluids.readthedocs.io/fluids.atmosphere.html

    This example function is provided as-is without any representation of accuracy.

    Args:
        z (float): Elevation above sea level in meters.
        latitude (float, optional): Latitude in degrees (-90 to 90). Default is 0.
        longitude (float, optional): Longitude in degrees (-180 to 180). Default is 0.
        day (int, optional): Day of year (0-366). Default is 0.
        seconds (float, optional): Seconds since start of day (UT1 time). Default is 0.
        daily_flux (float, optional): Daily average 10.7 cm solar flux. Default is 150.
        avg_flux (float, optional): 81-day average solar flux. Default is 150.

    Returns:
        list[list]: 2D list [[Temperature, Density, Pressure]], or error string.
    """
    # Validate input types and ranges
    try:
        z = float(z)
        latitude = float(latitude)
        longitude = float(longitude)
        day = int(day)
        seconds = float(seconds)
        daily_flux = float(daily_flux)
        avg_flux = float(avg_flux)
    except Exception:
        return "Error: Invalid input types."
    if not (-90 <= latitude <= 90):
        return "Error: latitude must be between -90 and 90 degrees."
    if not (-180 <= longitude <= 180):
        return "Error: longitude must be between -180 and 180 degrees."
    if not (0 <= day <= 366):
        return "Error: day must be between 0 and 366."
    try:
        result = fluids_ATMOSPHERE_NRLMSISE00(z, latitude, longitude, day, seconds, daily_flux, avg_flux)
        T = float(result.T)
        rho = float(result.rho)
        P = float(result.P)
        return [[T, rho, P]]
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator