Summary
Add the TELSEM2 (Tool to Estimate Land Surface Emissivities at Microwave frequencies) monthly-climatology atlas as a microwave land-surface emissivity source in CRTM. When a TELSEM2 coefficient file is loaded at CRTM_Init, it is used automatically for MW land emissivity; otherwise CRTM falls back to the existing NESDIS_LandEM model. This brings CRTM to parity with RTTOV, which uses TELSEM2 as its standard MW land emissivity atlas, and provides realistic, spatially-varying, monthly land emissivities for MW radiance assimilation and simulation.
https://journals.ametsoc.org/view/journals/atot/34/5/jtech-d-16-0188.1.xml
Motivation
CRTM's current MW land emissivity (src/SfcOptics/CRTM_MW_Land_SfcOptics.f90) uses the physical NESDIS_LandEM canopy/soil model below an 80 GHz cutoff and a constant 0.95 above it. TELSEM2 is an observation-derived (SSM/I) climatology that captures spatial and seasonal variability the physical model cannot, and is the de-facto standard in RTTOV. Adding it:
- improves MW land emissivity realism and RTTOV inter-comparability,
- gives users a well-validated alternative without removing the existing default,
- requires no new dynamic inputs (it is keyed only by latitude/longitude/month/frequency/angle).
Scope / design decisions
- Atlas packaging: convert the native RTTOV ASCII atlas to a CRTM-native coefficient file (netCDF, following the
LSEatlas/SEcategory conventions), distributed via Get_CRTM_Binary_Files.sh + tarball md5sum.
- Algorithm fidelity: full port of RTTOV's
mod_mwatlas (TELSEM2), not a simplified interpolation.
- Model selection: default-when-loaded — if a TELSEM2 atlas file is provided to
CRTM_Init, it is used for MW land; otherwise NESDIS_LandEM is used. No new CRTM_Options flag (mirrors how CRTM_IRlandCoeff is used unconditionally when loaded).
Scientific scope (full TELSEM2 port)
Port the RTTOV mod_mwatlas algorithm:
- Equal-area grid (~0.25 deg, organized by latitude bands); compute the atlas
cellnum from (lat, lon).
- 12 monthly atlases; each populated cell stores mean emissivity at 19, 37 and 85 GHz for V and H polarization, plus standard deviations and the inter-frequency/inter-polarization covariance used for interpolation.
- Optional spatial resolution control: average emissivity over all atlas cells within a requested radius (degrees) of the target
point.
- Frequency interpolation/extrapolation to the channel frequency using the TELSEM2 covariance-based regression anchored at 19/37/85 GHz.
- Angular correction: apply the parameterized zenith-angle adjustment (separate V/H polynomial coefficients) to map atlas emissivities to the CRTM view angle.
- Polarization convention matches the existing MW land driver:
SfcOptics%Emissivity(:,1)=V, (:,2)=H.
- No-data handling: TELSEM2 flags cells with no climatology (e.g., permanent ice/open water). On no-data, fall back to
NESDIS_LandEM to preserve current behavior.
Data pipeline (atlas -> CRTM coefficient file)
- Build a one-time converter that reads the RTTOV ASCII atlas (
ssmi_mean_emis_climato_MM_cov_interpol_M2 for MM = 01..12, plus the correlation file) and writes a CRTM-native netCDF coefficient file, following the LSEatlas/SEcategory IO conventions (Release/Version, global attributes, dimensions, Inquire/Read/Write).
- Define a
TELSEM2Atlas_type capturing: grid geometry (per-band cell counts, first-cell indices), per-month emissivity/std/covarian
ce arrays, frequency anchors, and angular-correction coefficients.
- Distribute the generated file via
Get_CRTM_Binary_Files.sh and update the tarball md5sum (same mechanism as the IR atlas).
New source modules (mirroring the IR-land atlas pipeline)
| New file |
Template / analogue |
src/Coefficients/EmisCoeff/MW_Land/TELSEM2/TELSEM2Atlas_Define.f90 |
src/Coefficients/EmisCoeff/IR_Land/LSEatlas/LSEatlas_Define.f90 |
src/Coefficients/EmisCoeff/MW_Land/TELSEM2/TELSEM2Atlas_netCDF_IO.f90 (+ optional _Binary_IO) and TELSEM2Atlas_IO.f90 wrapper |
SEcategory_IO.f90 / SEcategory_netCDF_IO.f90 |
src/Coefficients/CRTM_MWlandCoeff.f90 (module-global MWlandC + CRTM_MWlandCoeff_Load/_Destroy/_IsLoaded) |
src/Coefficients/CRTM_IRlandCoeff.f90 |
src/SfcOptics/MW_Land/TELSEM2/TELSEM2_Atlas_Module.f90 (cell lookup, spatial averaging, frequency interpolation, angular correction) |
RTTOV mod_mwatlas |
Integration points (edits to existing code)
src/CRTM_LifeCycle.f90
- Add an optional
MWlandCoeff_File argument to CRTM_Init (mirror IRlandCoeff_File: default filename, Resolve_Coeff_Format,
error handling).
- Call
CRTM_MWlandCoeff_Load(...) when a microwave sensor is present (ANY(SpcCoeff_IsMicrowaveSensor(SC))) and the file is provided.
- Call
CRTM_MWlandCoeff_Destroy(...) in CRTM_Destroy.
src/SfcOptics/CRTM_MW_Land_SfcOptics.f90
- Add a
GeometryInfo argument to Compute_MW_Land_SfcOptics (lat/lon/month come from GeometryInfo%user%Latitude/Longitude/Month).
- At entry: if
CRTM_MWlandCoeff_IsLoaded() and the atlas returns valid data at (lat, lon, month, frequency, angle), use the TELSEM2 path and mark iVar so TL/AD return zero. Otherwise use the existing NESDIS_LandEM path (unchanged; retains its analytic Jacobians).
_TL/_AD: when the atlas path was taken, output zero sensitivities; the NESDIS_LandEM path is unchanged.
src/SfcOptics/CRTM_SfcOptics.f90
- Pass
GeometryInfo into the forward Compute_MW_Land_SfcOptics call (currently at line ~518; GeometryInfo is already in scope, as it is passed to Compute_MW_Water_SfcOptics).
src/CMakeLists.txt
- Register all new
.f90 files (explicit, non-glob source list).
Tangent-linear / adjoint
TELSEM2 depends only on latitude, longitude, month, frequency and view angle — none of which are CRTM state/control variables — so the TL and AD of the TELSEM2 path are identically zero. The TL/AD changes are minimal: detect the atlas path via iVar and zero the outputs (analogous to the existing high-frequency-default path). The existing NESDIS_LandEM analytic Jacobians (LAI, vegetation fraction, soil moisture; commit 9358caa) remain intact for the fallback path.
Validation / tests
- Coefficient file round-trip:
Inquire/Read/Write consistency test for the new coefficient file.
- Science match vs RTTOV: compare CRTM TELSEM2 emissivities against RTTOV TELSEM2 for a set of (lat, lon, month, frequency, angle) points, V and H, to a tight tolerance (same algorithm and atlas).
- Forward integration: forward run on a MW sensor (e.g., ATMS / AMSU-A / SSMIS) with the atlas loaded vs
NESDIS_LandEM; sanity-check brightness temperatures.
TL/AD consistency: extend the existing OMP / K-matrix consistency tests to confirm the TELSEM2-path TL/AD are zero and that the NESDIS_LandEM path is unaffected.
Risks / open questions
- Correctness of the equal-area grid
cellnum indexing — port carefully and verify against RTTOV.
- Geometry latitude/longitude/month must be populated by the caller. If they are left at defaults, the atlas lookup may hit a no-data
cell and fall back to NESDIS_LandEM; document this requirement.
- Behavior outside the 19-85 GHz anchor range (extrapolation vs capping) — match RTTOV and document.
- Coefficient-file format/versioning and binary-file distribution (md5sum,
Get_CRTM_Binary_Files.sh) coordination.
- Thread-safety: the atlas is module-global, read-only after
Init (consistent with other coefficients), so it is OpenMP-safe.
Acceptance criteria
Summary
Add the TELSEM2 (Tool to Estimate Land Surface Emissivities at Microwave frequencies) monthly-climatology atlas as a microwave land-surface emissivity source in CRTM. When a TELSEM2 coefficient file is loaded at
CRTM_Init, it is used automatically for MW land emissivity; otherwise CRTM falls back to the existingNESDIS_LandEMmodel. This brings CRTM to parity with RTTOV, which uses TELSEM2 as its standard MW land emissivity atlas, and provides realistic, spatially-varying, monthly land emissivities for MW radiance assimilation and simulation.https://journals.ametsoc.org/view/journals/atot/34/5/jtech-d-16-0188.1.xml
Motivation
CRTM's current MW land emissivity (
src/SfcOptics/CRTM_MW_Land_SfcOptics.f90) uses the physicalNESDIS_LandEMcanopy/soil model below an 80 GHz cutoff and a constant0.95above it. TELSEM2 is an observation-derived (SSM/I) climatology that captures spatial and seasonal variability the physical model cannot, and is the de-facto standard in RTTOV. Adding it:Scope / design decisions
LSEatlas/SEcategoryconventions), distributed viaGet_CRTM_Binary_Files.sh+ tarball md5sum.mod_mwatlas(TELSEM2), not a simplified interpolation.CRTM_Init, it is used for MW land; otherwiseNESDIS_LandEMis used. No newCRTM_Optionsflag (mirrors howCRTM_IRlandCoeffis used unconditionally when loaded).Scientific scope (full TELSEM2 port)
Port the RTTOV
mod_mwatlasalgorithm:cellnumfrom (lat, lon).point.
SfcOptics%Emissivity(:,1)=V,(:,2)=H.NESDIS_LandEMto preserve current behavior.Data pipeline (atlas -> CRTM coefficient file)
ssmi_mean_emis_climato_MM_cov_interpol_M2forMM = 01..12, plus the correlation file) and writes a CRTM-native netCDF coefficient file, following theLSEatlas/SEcategoryIO conventions (Release/Version, global attributes, dimensions,Inquire/Read/Write).TELSEM2Atlas_typecapturing: grid geometry (per-band cell counts, first-cell indices), per-month emissivity/std/covariance arrays, frequency anchors, and angular-correction coefficients.
Get_CRTM_Binary_Files.shand update the tarball md5sum (same mechanism as the IR atlas).New source modules (mirroring the IR-land atlas pipeline)
src/Coefficients/EmisCoeff/MW_Land/TELSEM2/TELSEM2Atlas_Define.f90src/Coefficients/EmisCoeff/IR_Land/LSEatlas/LSEatlas_Define.f90src/Coefficients/EmisCoeff/MW_Land/TELSEM2/TELSEM2Atlas_netCDF_IO.f90(+ optional_Binary_IO) andTELSEM2Atlas_IO.f90wrapperSEcategory_IO.f90/SEcategory_netCDF_IO.f90src/Coefficients/CRTM_MWlandCoeff.f90(module-globalMWlandC+CRTM_MWlandCoeff_Load/_Destroy/_IsLoaded)src/Coefficients/CRTM_IRlandCoeff.f90src/SfcOptics/MW_Land/TELSEM2/TELSEM2_Atlas_Module.f90(cell lookup, spatial averaging, frequency interpolation, angular correction)mod_mwatlasIntegration points (edits to existing code)
src/CRTM_LifeCycle.f90MWlandCoeff_Fileargument toCRTM_Init(mirrorIRlandCoeff_File: default filename,Resolve_Coeff_Format,error handling).
CRTM_MWlandCoeff_Load(...)when a microwave sensor is present (ANY(SpcCoeff_IsMicrowaveSensor(SC))) and the file is provided.CRTM_MWlandCoeff_Destroy(...)inCRTM_Destroy.src/SfcOptics/CRTM_MW_Land_SfcOptics.f90GeometryInfoargument toCompute_MW_Land_SfcOptics(lat/lon/month come fromGeometryInfo%user%Latitude/Longitude/Month).CRTM_MWlandCoeff_IsLoaded()and the atlas returns valid data at (lat, lon, month, frequency, angle), use the TELSEM2 path and markiVarso TL/AD return zero. Otherwise use the existingNESDIS_LandEMpath (unchanged; retains its analytic Jacobians)._TL/_AD: when the atlas path was taken, output zero sensitivities; theNESDIS_LandEMpath is unchanged.src/SfcOptics/CRTM_SfcOptics.f90GeometryInfointo the forwardCompute_MW_Land_SfcOpticscall (currently at line ~518;GeometryInfois already in scope, as it is passed toCompute_MW_Water_SfcOptics).src/CMakeLists.txt.f90files (explicit, non-glob source list).Tangent-linear / adjoint
TELSEM2 depends only on latitude, longitude, month, frequency and view angle — none of which are CRTM state/control variables — so the TL and AD of the TELSEM2 path are identically zero. The TL/AD changes are minimal: detect the atlas path via
iVarand zero the outputs (analogous to the existing high-frequency-default path). The existingNESDIS_LandEManalytic Jacobians (LAI, vegetation fraction, soil moisture; commit9358caa) remain intact for the fallback path.Validation / tests
Inquire/Read/Writeconsistency test for the new coefficient file.NESDIS_LandEM; sanity-check brightness temperatures.TL/AD consistency: extend the existing OMP / K-matrix consistency tests to confirm the TELSEM2-path TL/AD are zero and that the
NESDIS_LandEMpath is unaffected.Risks / open questions
cellnumindexing — port carefully and verify against RTTOV.cell and fall back to
NESDIS_LandEM; document this requirement.Get_CRTM_Binary_Files.sh) coordination.Init(consistent with other coefficients), so it is OpenMP-safe.Acceptance criteria
Get_CRTM_Binary_Files.sh+ md5sum.TELSEM2Atlas_Define/ IO andCRTM_MWlandCoeffmodules implemented and building.CRTM_Init/CRTM_Destroyload/free the atlas via a newMWlandCoeff_Fileargument.Compute_MW_Land_SfcOpticsuses TELSEM2 when loaded (withNESDIS_LandEMfallback on no-data) and is fedGeometryInfo.NESDIS_LandEMJacobians unchanged on the fallback path.