ARL File Format#

This page describes the ARL (Air Resources Laboratory) packed data format used by HYSPLIT and related atmospheric transport models.

Overview#

The ARL packed data format is a hierarchical binary structure designed for efficient storage and retrieval of meteorological data.

File Structure#

The ARL file format consists of sequential record sets, each representing one forecast time:

ARL FILE
├── RecordSet 1 (Time 1)
│   ├── INDEX RECORD (metadata, grid definition, variable catalog)
│   ├── SURFACE LEVEL (Level 0)
│   │   ├── Variable 1: PRSS (50-byte header + packed data)
│   │   ├── Variable 2: T02M (50-byte header + packed data)
│   │   ├── Variable 3: TPP1 (50-byte header + packed data)
│   │   └── ... (all surface variables)
│   │
│   ├── UPPER LEVEL 1 (e.g., 1000 mb)
│   │   ├── Variable 1: UWND (50-byte header + packed data)
│   │   ├── Variable 2: VWND (50-byte header + packed data)
│   │   ├── Variable 3: TEMP (50-byte header + packed data)
│   │   └── ... (all variables for this level)
│   │
│   ├── UPPER LEVEL 2 (e.g., 925 mb)
│   └── ... (continues for all vertical levels)
│
├── RecordSet 2
│   ├── Index Record
│   ├── Data Record(s)
│
└── ... (additional record sets for other grids or time periods)

Key Components#

1. File Level Structure#

  • Sequential Time Periods: Each represents one forecast time

  • Direct Access: Fixed record length allows random access

  • Platform Independent: Binary format works across systems

2. Record Set Structure#

Each record set contains:

  • Index Record: Metadata for entire time period, grid definition, variable catalog

  • Data Records: One record per variable per level - Surface data first (Level 0) - Then upper levels (1 to nz-1)

3. Individual Data Record Structure#

Each data record consists of:

┌──────────────────────┬──────────────────────────────┐
│ HEADER (50 bytes)    │ PACKED DATA (nx × ny bytes)  │
│ - Variable ID (4)    │ - One byte per grid point    │
│ - Date/Time          │ - Difference encoding        │
│ - Level indicator    │ - Precision maintained       │
│ - Checksum info      │                              │
└──────────────────────┴──────────────────────────────┘

4. Packing Algorithm#

The packing process:

Original Data → Difference Encoding → Scale/Quantize → Pack to bytes
    ↓                    ↓                  ↓              ↓
[Real Array]    [Δ from neighbors]    [Scale to 0-255]  [1 byte/point]

Variable Organization#

Surface Variables (Level 0)#

  • Pressure fields: PRSS, MSLP

  • Temperature: T02M, TMPS

  • Winds: U10M, V10M

  • Fluxes: SHTF, LTHF, USTR

  • Precipitation: TPP1, RAINC, RAINNC

Upper-Air Variables (Levels 1-nz)#

  • Winds: UWND, VWND, WWND

  • Temperature: TEMP

  • Heights: HGTS

  • Moisture: RELH, SPHU

  • Special: TKEN, DIFT, DIFW

Key Features#

This hierarchical structure provides:

  • Efficient Storage: 1 byte per grid point with maintained precision

  • Fast Access: Direct access to any variable at any level/time

  • Flexibility: Support for multiple grids and coordinate systems

  • Portability: Platform-independent binary format

  • Extensibility: New variables can be added via configuration files

Summary#

The key insight is that this is essentially a database structure optimized for meteorological data, where the index records serve as the catalog and the data records are stored in a highly compressed but quickly accessible format.

For more details on how arl-met reads and processes these files, see the API Reference documentation.