GitPedia

Itm

ITS Irregular Terrain Model (ITM), which predicts terrestrial radiowave propagation for frequencies between 20 MHz and 20 GHz based on electromagnetic theory and empirical models developed by Anita Longley and Phil Rice.

From NTIA·Updated May 25, 2026·View on GitHub·

This code repository contains the ITS Irregular Terrain Model (ITM). ITM predicts terrestrial radiowave propagation for frequencies between 20 MHz and 20 GHz based on electromagnetic theory and empirical models developed by Anita Longley and Phil Rice. Propagation mechanisms considered include free space loss, diffraction, and troposcatter. Specifically, ITM predicts attenuation as a function of distance (greater than 1 km), terminal heights, meteorological conditions, terrain effects, and the v... The project is written primarily in C++, distributed under the Other license, first published in 2019. Key topics include: cpp, itm, longley, propagation, proplib.

Latest release: v1.4Release v1.4
April 26, 2021View Changelog →

ITS Irregular Terrain Model (ITM)

This code repository contains the ITS Irregular Terrain Model (ITM). ITM predicts terrestrial radiowave propagation for frequencies between 20 MHz and 20 GHz based on electromagnetic theory and empirical models developed by Anita Longley and Phil Rice. Propagation mechanisms considered include free space loss, diffraction, and troposcatter. Specifically, ITM predicts attenuation as a function of distance (greater than 1 km), terminal heights, meteorological conditions, terrain effects, and the variability of the signal in time and in space.

Note: Version 1.3 of this code base is functionally identical to version 1.2.2 of the FORTRAN source, which has been archived here. ITS plans to apply all future ITM updates to this C++ code base.

Quick Start

Users of ITM have two options to immediately begin using ITM:

  1. The ITM software is made available to the user as a precompiled DLL in the Release page. A user can add this DLL to their own software project as a dependency and call ITM through its function definitions. Additionally, a C#/.NET software wrapper is provided. Distribution and updates of this wrapper code are provided through the published NuGet package.

  2. A supporting command-line driver is also included in this repository, with its own corresponding readme. This tool allows a user to call ITM without any programming required through the use of ASCII input/output files.

A select set of example inputs and outputs are provided for testing purposes. This is not a comprehensive validation test set. For ITM in Point-to-Point Prediction Mode, p2p.csv defines the set of inputs and outputs with pfls.csv containing the corresponding set of terrain profiles. For Area Prediction Mode, inputs and outputs are defined in area.csv.

Inputs

ITM can be called in either Area Prediction Mode or Point-to-Point Prediction Mode. Additionally, variabilities can be defined by either time/location/situation or confidence/reliability. The below inputs are organized accordingly.

Common Inputs

VariableTypeUnitsLimitsDescription
h_tx__meterdoublemeter0.5 <= h_tx__meter <= 3000Structural height of the TX
h_rx__meterdoublemeter0.5 <= h_rx__meter <= 3000Structural height of the RX
climateintenumRadio climate of the path <ul><li>1 = Equatorial</li><li>2 = Continental Subtropical</li><li>3 = Maritime Subtropical</li><li>4 = Desert</li><li>5 = Continental Temperate</li><li>6 = Maritime Temperate Over Land</li><li>7 = Maritime Temperate Over Sea</li></ul>
N_0doubleN-Units250 <= N_0 <= 400Minimum monthly mean surface refractivity reduced to sea level
f__mhzdoubleMHz20 <= f__mhz <= 20000Frequency
polintenumPolarization <ul><li>0 = Horizontal</li><li>1 = Vertical</li></ul>
epsilondouble1 < epsilonRelative permittivity
sigmadoubleS/m0 < sigmaConductivity
mdvarintenumMode of variability <ul><li>0 = Single Message Mode</li><li>1 = Accidental Mode</il><li>2 = Mobile Mode</li><li>3 = Broadcast Mode</li></ul> Additionally, +10 if location variability is to be eliminated, and +20 if direct situation variability is to be eliminated

Point-to-Point Mode Specific Inputs

VariableTypeUnitsLimitsDescription
pfldouble[]Terrain profile data in PFL format, from TX to RX <ul><li>pfl[0] : Number of elevation points - 1</li><li>pfl[1] : Resolution, in meters</li><li>pfl[i] : Elevation above sea level, in meters</li></ul>

Area Mode Inputs

VariableTypeUnitsLimitsDescription
d__kmdoublekm0 < d__kmPath distance
delta_h__meterdoublemeter0 <= delta_h__meterTerrain irregularity parameter
tx_siting_criteriaintenumSiting criteria of TX <ul><li>0 = Random</li><li>1 = Careful</li><li>2 = Very Careful</li></ul>
rx_siting_criteriaintenumSiting criteria of RX <ul><li>0 = Random</li><li>1 = Careful</li><li>2 = Very Careful</li></ul>

Variability Inputs

A user either supplies values for time/location/situation or confidence/reliability.

VariableTypeUnitsLimitsDescription
timedouble0 < time < 100Time variability
locationdouble0 < location < 100Location variability
situationdouble0 < situation < 100Situation variability
confidencedouble0 < confidence < 100Confidence variability
reliabilitydouble0 < reliability < 100Reliability variability

Outputs

VariableTypeUnitsDescription
A__dbdoubledBBasic transmission loss
warningsintWarning flags

Intermediate Values

Internal intermediate values can be extracted from ITM via functions that are suffixed with _Ex. These functions will populate the IntermediateValues data structure with intermediate values from the ITM calculations.

VariableTypeUnitsDescription
theta_hzndouble[]radiansTerminal horizon angles
d_hzn__meterdouble[]meterTerminal horizon distances
h_e__meterdouble[]meterEffective terminal heights
N_sdoubleN-UnitsSurface refractivity
delta_h__meterdoublemeterTerrain irregularity parameter
A_ref__dbdoubledBReference attenuation
A_fs__dbdoubledBFree space basic transmission loss
d__kmdoublekmPath distance
modeintMode of propagation <ul><li>1 = Line of Sight</li><li>2 = Diffraction</li><li>3 = Troposcatter</li></ul>

Error Codes and Warning Flags

ITM supports a defined list of error codes and warning flags. A complete list can be found here.

Notes on Code Style

  • In general, variables follow the naming convention in which a single underscore denotes a subscript (pseudo-LaTeX format), and where a double underscore is followed by the units, i.e. h_tx__meter.
  • Variables are named to match their corresponding mathematical variables in the underlying references.
  • Wherever possible, equation numbers and source documentation are provided.

Configure and Build

C++ Software

The software is designed to be built into a DLL (or corresponding library for non-Windows systems). The source code can be built for any OS that supports the standard C++ libraries. A Visual Studio 2019 project file is provided for Windows users to support the build process and configuration.

C#/.NET Wrapper Software

The .NET support of ITM consists of a simple pass-through wrapper around the native DLL. It is compiled to target .NET Framework 4.7.2.

References

Contact

For technical questions about ITM, contact Paul McKenna, pmckenna@ntia.gov.

Contributors

Showing top 2 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from NTIA/itm via the GitHub API.Last fetched: 6/19/2026