Skip to content
JCSDAPublic

About

CRTMv3 repository for coordinated development and releases. Code history is not carried in this repository prior to v3, to reduce the cloning overhead. For v2.x history leading up to v3, see JCSDA/crtm repository.

Resources

Stars

17 stars

Watchers

7 watching

Forks

Repository files navigation

CRTM REL-3.1.6

Build Status

Preamble

CRTM v3.1.6 release (REL-3.1.6)

v3.1.6 released October 13, 2026: removes the per-call zero-fill of the RTV work arrays in RTV_Create that dominated the cost of CRTM calls with clouds, aerosols or visible sensors (#370); CRTM_AOD_TL/AD/K now honor Options%Skip_Profile (#372); calls that pass more than one sensor now return correct results; fixes OpenMP channel-thread crashes and failures at higher thread counts (#383); new coefficient set fix_REL-3.1.6.0, replacing fix_REL-3.1.2.0 (55 new sensor IDs including spire_hyms, and the 3.1.x-compatible updates from the v3.2.0 coefficients); sensor ID changes from fix_REL-3.1.2.0: tms_tomorrow-s01_v4 to tms_tomorrow-s06_v4 are now tms_tomorrow-s01_v4.1 to tms_tomorrow-s06_v4.1, and u.omps-npAllFOV_j2 and u.omps-tcAllFOV_j2 are removed v3.1.5 released August 23, 2026: loads netCDF NLTECoeff/ACCoeff sibling files (previously silently skipped) v3.1.4 released June 8, 2026 v3.1.3 released February 12, 2026 v3.1.2 released June 12, 2025 v3.1.1 released August 12, 2024 v3.1.0 (alpha) Released October 31, 2023 v3.0.0 Released March, 2023
v2.4.1-alpha Released on April 1, 2021 (internal release only) v2.4.0 Released on October 23, 2020

This is a v3.x release of CRTM, some features may not be fully functional. Contact crtm-support@googlegroups.com. v3.x features will be rolled out in incremental updates.

Basic requirements:
(1) A Fortran 2008 compatible compiler (2) A netCDF4 / HDF5 library that has been built with the compiler you're going to use (module environments are helpful here) (3) A linux, macOS, or unix-style environment. This has not been tested under any Windows Fortran environments. (4) Bash shell is preferred. (5) git (6) cmake / make build system

=========================================================

JEDI NOTE This release branch is also designed to work directly in a JEDI container or JEDI environment. In most cases you will build CRTM as part of a JEDI bundle (e.g. jedi-bundle), which downloads the coefficients during the cmake step; the build instructions below also apply to a stand-alone build in a JEDI environment.

If you're looking for an older version of CRTM (v2.3.0 or older) you should obtain the appropriate tarball from https://bin.ssec.wisc.edu/pub/s4/CRTM/ OR https://github.com/JCSDA/crtm (old versions).

If you're looking for version 2.4.0 or newer in a structure similar to older CRTM tarball releases, you should check out the appropriate release/ branch. git branch --remote | grep "release/" to see a list of release branches OR you may checkout the appropriate tag on the master branch and build it yourself.

Finally, you may follow the instructions here to build a "latest" release based on the most recent developments.

=========================================================

Contents

  1. Configuration
  2. Building the library
  3. Testing the library
  4. Installing the library
    a. GNU Install
    • Linking to the library
      b. Uninstalling the library
  5. Cleaning up
  6. Feedback and contact info

Configuration, building, and testing the library

JCSDA CRTM v3.1.6 Build Instructions

The CRTM repository directory structure looks (something) like:

 .
  ├── LICENSE  (Public Domain)
  ├── COPYING  (Public Domain)
  ├── NOTES
  ├── README.md 
  ├── Get_CRTM_Binary_Files.sh  
  ├── cmake/
  ├── scripts/
  │   ├── AerosolCoeff/
  │   ├── CloudCoeff/
  │   ├── EmisCoeff/
  │   ├── SpcCoeff/
  │   └── TauCoeff/
  |── src/
  │   ├── Ancillary/
  │   ├── AntennaCorrection/
  │   ├── AtmAbsorption/
  │   ├── AtmOptics/
  │   ├── AtmScatter/
  │   ├── Atmosphere/
  │   ├── CRTM_Utility/
  │   ├── ChannelInfo/
  │   ├── Coefficients/
  │   ├── GeometryInfo/
  │   ├── InstrumentInfo/
  │   ├── Interpolation/
  │   ├── NLTE/
  │   ├── Options/
  │   ├── RTSolution/
  │   ├── SensorInfo/
  │   ├── SfcOptics/
  │   ├── Source_Functions/
  │   ├── Statistics/
  │   ├── Surface/
  │   ├── TauProd/
  │   ├── TauRegress/
  │   ├── Test_Utility/
  │   ├── User_Code/
  │   ├── Utility/
  │   ├── Validation/
  │   ├── Zeeman/
  └── test/
      └── mains/

In the above list, the directories highlighted in bold (bold in markdown), are the key directories of interest to the casual developer. A user is only likely to be interested in creating a "build" or use a previously created build (see releases/* on the github.com repository).

After a successful build, the library is in <build>/lib/ and the Fortran module files are in <build>/module/crtm/<compiler>/<compiler version>/. To get there, follow the next steps.

Configuration

The coefficient files (the fix/ directory) are downloaded over https from https://bin.ssec.wisc.edu/pub/s4/CRTM/, either with the Get_CRTM_Binary_Files.sh script or automatically during the cmake step. If there is no fix/ directory at the top of the source tree during the cmake step, cmake downloads the coefficients and unpacks them into ./test-data-release/fix_REL-3.1.6.0/fix/. The path to an existing fix file installation can be specified using the FIX_FILE_PATH option (see CMake variables summary below).

The fix/ directory (as of v3.1.x) contains most of the netCDF SpcCoeff and TauCoeff files, as part of our ongoing effort to transition toward netCDF-only CRTM. We expect to deprecate the binary formats in v3.2.x, but code to read / convert binary format will continue.

As of CRTM v3.0.0, we no longer support legacy build system using autotools. (i.e., configure/make). Only cmake / ecbuild (a cmake wrapper, but not required) is supported. Many standalone Makefiles, make.dependencies, etc. have been removed, but not entirely. Cleanup occurs as we work our way through the repository updating other things.

Build Step 1 From the top level of the CRTM directory, e.g., CRTMv3/

mkdir build/
cd build/
cmake ..
make clean
make -j8
make install (optional, see -DCMAKE_INSTALL_PREFIX below, default install location is `/.`)
ctest -j8

-j8 runs 8 processes in parallel, adjust to your system. Now we have compiled the linked source codes that reside in the src/ directory, and the ctests are built as well.

The CMake variables of interest are: -DCMAKE_BUILD_TYPE = RELEASE / DEBUG / RELWITHDEBINFO (default is RELEASE if not specified) -DBUILD_SHARED_LIBS = ON / OFF (build shared lib (<build>/lib/libcrtm.so) or static lib (<build>/lib/libcrtm.a) -- default is ON if not specified) -DCMAKE_INSTALL_PREFIX=<path-to-install> (You have to run make install to install the libcrtm* into your desired directory <build>/path-to-install). -DFIX_FILE_PATH=<path-to-fix-files> (default is fix/, populated by Get_CRTM_Binary_Files.sh if needed) -DBUILD_TESTING = ON / OFF (enables/disabled testing under test/; default is ON)

example:

cmake -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=./install ..

this would make a debug build of CRTM, static library (libcrtm.a) and set the optional install location to <build>/install/. (or something similar, search for libcrtm.* and *.mod). Custom Install only happens if you issue the make install command.

The first time you run cmake, it checks for a fix/ directory at the top of the source tree (or the FIX_FILE_PATH CMake variable), and if it doesn't find one, it downloads the coefficient files (as set in test/CMakeLists.txt) and unpacks them into ./test-data-release/fix_REL-3.1.6.0/fix/. Later cmake runs reuse that directory.

Linking to the library

Let's assume the above install was moved into "/home/username/CRTMv3/", to use the library in this structure in your own application, the usual environment variables would need to be modified something like:

libroot="/home/username/CRTMv3/"
FCFLAGS="-I${libroot}/build/module/crtm/GNU/13.1.0 ${FCFLAGS}"  (as appropriate for your build environment)
LDFLAGS="-L${libroot}/build/lib ${LDFLAGS}"
LIBS="-lcrtm ${LIBS}"

Feedback and Contact Information

CRTM SUPPORT: visit https://forums.jcsda.org/ or visit https://github.com/JCSDA/CRTMv3 and post an issue (be sure to assign someone from the team).

System-specific notes

WSL / Ubuntu installation: sudo apt update && sudo apt upgrade sudo apt install cmake sudo apt install gcc (probably installed already) sudo apt install gfortran sudo apt install libnetcdff-dev

Then continue with the build steps per above. You can find your number of processors by 'cat /proc/cpuinfo' and then the -j ## values for make and ctest should be: number_processors-1 e.g., make -j31 if you have 32 processors.

nvfortran also works on WSL, but has a more involved install process -- if you're using nvfortran, please visit https://github.com/JCSDA/CRTMv3 and create an issue.

Known Issues

(1) Any "Transmittance Coefficient" generation codes included in src/ are not functional. Contact CRTM support above for details. (2) No testing was done on PGI, XLF, or other less common compilers. Feedback from users suggest that there's no major concerns though. Please contact us with specifics. Tested on GCC v5 and higher, and ifort v18 and higher. Some specific compiler versions have issues, contact support if you run into problems. (3) spire_hyms uses an ODPS coefficient set without an ozone absorber, so channels 1887 to 1904 and 1933 (on the 184.389 GHz ozone line) are degraded (0.15 to 0.43 K RMSE). Treat them as degraded or blacklist them.

About

CRTMv3 repository for coordinated development and releases. Code history is not carried in this repository prior to v3, to reduce the cloning overhead. For v2.x history leading up to v3, see JCSDA/crtm repository.

Resources

Stars

17 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages