JCSDA/CRTMv3

computed emissivities greater than 1 occasionally cause FPEs in VIS/nearIR calculations

Closed this issue · 1 comments

In certain cases (e.g., ABI channels 5 (1.6 um band) and 6 (2.2 um band) ), the emissivities computed by CRTM are greater than 1, and this causes negative surface reflectivity, which for visible channels causes negative (reflected) radiances. We missed this error in our testing because floating point exception checking was turned off, turning it on revealed the problem and corroborated a problem found by UFO.

In ./src/Source_Functions/CRTM_Planck_Functions.f90 the subroutine SUBROUTINE CRTM_Planck_Temperature has a log in it:

   Effective_Temperature =              SC(n)%Planck_C2(l) / LOG( ( SC(n)%Planck_C1(l) / Radiance ) + ONE )

When radiances are negative, the argument of the log becomes negative and problematic for the log.

The emissivities greater than unity appear to be stemming from the NPOESS LUT, I will comment further once I've traced that particular part.

This suggests a few solutions:

(1) Ensure that radiance is never negative because it doesn't make physical sense. Having a warning check near all log functions might be more useful to future us for identifying where issues are creeping in.

(2) Ensure that emissivity never goes above unity -- this one I'm less inclined to enforce, because emissivity can effectively be greater than 1 under the right circumstances, and there may be legitimate computational situations that requires an emissivity greater than unity. Certainly for near-visible channels, an emissivity near 1 might not make a lot of sense, but the Planck function takes care of that ensuring that a miniscule amount of emission is actually occurring.

(3) Ensure that reflectivity (surface) never goes negative. A negative reflectivity is a consequence of a greater than unity emissivity.

I would like a quick discussion (in this issue) about pros/cons or alternative solutions.