Overview
Welcome to SRFM, a package designed to manage satellite data and perform retrievals. It combines Python tooling with compiled Fortran extensions for radiative transfer.
Components
This is a Python package that ships three external Fortran codes compiled via numpy.f2py:
DISORT — Radiative transfer solver (single and double precision) with minor tweaks to printing routines. See the DISORT site.
RFM — Reference Forward Model for gas absorption with small adjustments (6-digit filenames, Python wrappers). RFM home.
mie_ewp — Mie scattering on particles; outputs extinction, single-scatter albedo, phase function, and Legendre expansion.
Installation
pip install srfm builds the Fortran extensions from source. Only sdists are published (no prebuilt wheels).
If installation fails, download the sdist and rebuild locally. Fortran compilation depends on numpy plus meson and ninja (installed automatically when missing).
Supported platforms and prerequisites
CPython 3.10–3.13 on Linux and Windows.
A Fortran compiler (
gfortranworks cross-platform), Meson, and Ninja. Helper scripts bootstrap Meson/Ninja viapipif absent.
Building and packaging
Linux / macOS quick start:
make native # compile the Fortran extensions
make dist # rebuild wheel + sdist under dist/
make install # install from the freshly built artifacts
Or run:
python build_extensions.py # builds Fortran extensions
Windows (PowerShell / cmd):
py tools/build_package.py native
py tools/build_package.py dist
py tools/build_package.py install
Optional arguments let you rebuild only certain components, e.g. COMPONENTS="mie disort_double" for make or --components mie disort_double for the Python helper. Compilation logs are stored in src/srfm/build.log and python clean_srfm.py removes compiled artifacts.
The .f2py_f2cmap file in src/srfm/RFM must remain in place to enforce correct types during f2py; deleting it will cause wrong precision and allocation errors.
Installing from dist/
After building locally, install from dist/ with:
python -m pip install --no-index --find-links dist SRFM
The tools/install_from_dist.py wrapper runs the same command and bootstraps Meson/Ninja first.
Verification
If installation succeeded, import srfm works. Failures often mean the Fortran extensions were not compiled correctly.
Usage
To run the packaged example as a traditional radiative transfer model:
Install SRFM.
Obtain external dependencies (line parameters, cross sections) as needed.
Adjust paths in the driver table (output locations, external data, etc.).
Run
run_srfm.py.Results are written to the paths you configured.
You can also import modules directly:
from srfm import *
import srfm
External dependencies
Python runtime deps (installed automatically): numpy, pandas, scipy, netCDF4, matplotlib, cartopy, numba, psutil, mergedeep.
Fortran build deps: gfortran, meson, ninja (Meson/Ninja auto-installed by helpers).
Domain data requirements:
Documentation
Sphinx-generated docs are built from function docstrings. Use the navigation sidebar for API details.
References
The package publication link will be added when available.