Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20)

project(crtm VERSION 3.1.3 LANGUAGES Fortran)
project(crtm VERSION 3.1.4 LANGUAGES Fortran)

option(OPENMP "Build crtm with OpenMP support" ON)
option(FIX_FILE_PATH "Path to fix files (default: fix/)" OFF)
Expand Down
9 changes: 5 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
CRTM REL-3.1.3
CRTM REL-3.1.4
====================

[![Build Status](https://app.travis-ci.com/JCSDA/CRTMv3.svg?branch=develop)](https://app.travis-ci.com/JCSDA/CRTMv3)

Preamble
--------

CRTM v3.1.3 release (`REL-3.1.3`)
CRTM v3.1.4 release (`REL-3.1.4`)

v3.1.4 released June 8, 2026
v3.1.3 released February 10, 2025
v3.1.2 released July 11, 2025
v3.1.1 released August 12, 2024
Expand Down Expand Up @@ -58,7 +59,7 @@ Contents

Configuration, building, and testing the library
================================================
JCSDA CRTM v3.1.3 Build Instructions
JCSDA CRTM v3.1.4 Build Instructions

The CRTM repository directory structure looks (something) like:

Expand Down Expand Up @@ -117,7 +118,7 @@ But after a clean clone of the development repository, none of the links to sour
Configuration
-------------
By default, the `fix/` directory is provided through ftp using the Get_CRTM_Binary_Files.sh script to obtain and unpack the dataset.
If this directory doesn't exist during the `cmake` step, then cmake will download and install into `build/test_data/fix_REL-3.1.2.x/fix/`.
If this directory doesn't exist during the `cmake` step, then cmake will download and install into `./test-data-release/fix_REL-3.1.2.x/fix/`. (no longer in build directory, but off of source dir).
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.
Expand Down
2 changes: 1 addition & 1 deletion VERSION.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.

set( ${PROJECT_NAME}_VERSION_STR "3.1.3" )
set( ${PROJECT_NAME}_VERSION_STR "3.1.4")

82 changes: 81 additions & 1 deletion src/Coefficients/SpcCoeff/SpcCoeff_netCDF_IO.f90
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ MODULE SpcCoeff_netCDF_IO
SpcCoeff_ValidRelease , &
SpcCoeff_Info
USE SensorInfo_Parameters, ONLY: ACTIVE_SENSOR

USE ACCoeff_Define, ONLY: ACCoeff_Info
USE ACCoeff_netCDF_IO, ONLY: ACCoeff_netCDF_ReadFile
USE NLTECoeff_Define, ONLY: NLTECoeff_Info
USE NLTECoeff_netCDF_IO, ONLY: NLTECoeff_netCDF_ReadFile
USE netcdf
! Disable implicit typing
IMPLICIT NONE
Expand Down Expand Up @@ -746,6 +749,10 @@ FUNCTION SpcCoeff_netCDF_WriteFile( &
CALL Display_Message( ROUTINE_NAME, 'FILE: '//TRIM(Filename)//'; '//TRIM(msg), INFORMATION )
END IF





CONTAINS

SUBROUTINE Write_CleanUp()
Expand Down Expand Up @@ -868,6 +875,14 @@ FUNCTION SpcCoeff_netCDF_ReadFile( &
INTEGER :: fileid
INTEGER :: n_channels
INTEGER :: varid
! Vars for reading AC/NLTECoeff
CHARACTER(ML) :: AC_Filename, NLTE_Filename
CHARACTER(*),PARAMETER :: Spc_Suffix = ".SpcCoeff.nc"
CHARACTER(*),PARAMETER :: AC_Suffix = ".ACCoeff.nc"
CHARACTER(*),PARAMETER :: NLTE_Suffix = ".NLTECoeff.nc"
INTEGER :: ipos
LOGICAL :: lexist



! Set up
Expand Down Expand Up @@ -1130,6 +1145,71 @@ FUNCTION SpcCoeff_netCDF_ReadFile( &
CALL Display_Message( ROUTINE_NAME, 'FILE: '//TRIM(Filename)//'; '//TRIM(msg), INFORMATION )
END IF

! Read ACCoeff/NLTECoeff for the sensor if their files exist
ipos = index(Filename, Spc_Suffix, back=.true.)
AC_Filename = Filename(:ipos-1)//AC_Suffix//Filename(ipos+len(Spc_Suffix):)
NLTE_Filename = Filename(:ipos-1)//NLTE_Suffix//Filename(ipos+len(Spc_Suffix):)

IF (ipos>0) THEN
! Read ACCoff
INQUIRE(FILE=TRIM(AC_Filename),EXIST=lexist)
IF (lexist) THEN
CALL Display_Message( ROUTINE_NAME, 'Reading ACCoeff File: '//TRIM(AC_Filename), INFORMATION )
err_stat = ACCoeff_netCDF_ReadFile( TRIM(AC_Filename), &
SpcCoeff%AC, &
Quiet )
IF ( err_stat /= SUCCESS ) THEN
msg = 'Error reading ACCoeff from '//TRIM(AC_Filename)
RETURN
END IF

! ..Check that the ACCoeff data is for the same sensor
IF ( SpcCoeff%Sensor_Id /= SpcCoeff%AC%Sensor_Id .OR. &
SpcCoeff%WMO_Satellite_Id /= SpcCoeff%AC%WMO_Satellite_Id .OR. &
SpcCoeff%WMO_Sensor_Id /= SpcCoeff%AC%WMO_Sensor_Id .OR. &
ANY( SpcCoeff%Sensor_Channel /= SpcCoeff%AC%Sensor_Channel ) ) THEN
msg = 'Antenna correction sensor information is inconsistent with SpcCoeff'
err_stat = FAILURE
RETURN
END IF

IF ( noisy ) THEN
CALL ACCoeff_Info( SpcCoeff%AC, msg )
CALL Display_Message( ROUTINE_NAME, 'FILE: '//TRIM(AC_Filename)//'; '//TRIM(msg), INFORMATION )
END IF
END IF

! Read NLTECoeff
INQUIRE(FILE=TRIM(NLTE_Filename),EXIST=lexist)
IF (lexist) THEN
CALL Display_Message( ROUTINE_NAME, 'Reading NLTECoeff File: '//TRIM(NLTE_Filename), INFORMATION )
err_stat = NLTECoeff_netCDF_ReadFile( TRIM(NLTE_Filename), &
SpcCoeff%NC, &
Quiet )
IF ( err_stat /= SUCCESS ) THEN
msg = 'Error reading NLTECoeff from '//TRIM(NLTE_Filename)
RETURN
END IF

! ..Check that the NLTECoeff data is for the same sensor
IF ( SpcCoeff%Sensor_Id /= SpcCoeff%NC%Sensor_Id .OR. &
SpcCoeff%WMO_Satellite_Id /= SpcCoeff%NC%WMO_Satellite_Id .OR. &
SpcCoeff%WMO_Sensor_Id /= SpcCoeff%NC%WMO_Sensor_Id .OR. &
ANY( SpcCoeff%Sensor_Channel /= SpcCoeff%NC%Sensor_Channel ) ) THEN
msg = 'non-LTE correction sensor information is inconsistent with SpcCoeff'
err_stat = FAILURE
RETURN
END IF

IF ( noisy ) THEN
CALL NLTECoeff_Info( SpcCoeff%NC, msg )
CALL Display_Message( ROUTINE_NAME, 'FILE: '//TRIM(NLTE_Filename)//'; '//TRIM(msg), INFORMATION )
END IF
END IF

END IF


CONTAINS

SUBROUTINE Read_CleanUp()
Expand Down
2 changes: 1 addition & 1 deletion test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.

cmake_minimum_required (VERSION 3.12)
project("CRTM_Tests" VERSION 3.1.3 LANGUAGES Fortran C)
project("CRTM_Tests" VERSION 3.1.4 LANGUAGES Fortran C)

enable_testing ()

Expand Down
Loading