diff --git a/src/gsi/qcmod.f90 b/src/gsi/qcmod.f90 index 691e54d2d..69e58642f 100644 --- a/src/gsi/qcmod.f90 +++ b/src/gsi/qcmod.f90 @@ -194,7 +194,7 @@ module qcmod public :: npres_print,nlnqc_iter,varqc_iter,pbot,ptop,c_varqc,njqc,vqc,nvqc,hub_norm public :: use_poq7,noiqc,vadfile,dfact1,dfact,erradar_inflate,gps_jacqc public :: pboto3,ptopo3,pbotq,ptopq,newvad,tdrerr_inflate - public :: igood_qc,ifail_crtm_qc,ifail_satinfo_qc,ifail_interchan_qc,& + public :: igood_qc,ifail_crtm_qc,ifail_crtm_nan,ifail_satinfo_qc,ifail_interchan_qc,& ifail_gross_qc,ifail_cloud_qc,ifail_outside_range,& ifail_scanedge_qc, ifail_emiss_qc, ifail_cao_qc public :: ifail_iland_det, ifail_isnow_det, ifail_iice_det, ifail_iwater_det,& @@ -268,6 +268,8 @@ module qcmod integer(i_kind),parameter:: ifail_outside_range=11 ! Reject due to cold-air outbreak area check in setuprad integer(i_kind),parameter:: ifail_cao_qc=12 +! Reject due to NaN in the CRTM calculation + integer(i_kind),parameter:: ifail_crtm_nan=13 ! Failures specific to qc routine start at 50 and the numbers overlap ! QC_SSMI failures ! Reject due to krain type not equal to 0 in subroutine qc_ssmi diff --git a/src/gsi/setuprad.f90 b/src/gsi/setuprad.f90 index 3bf249411..5c83f9b30 100644 --- a/src/gsi/setuprad.f90 +++ b/src/gsi/setuprad.f90 @@ -291,6 +291,7 @@ subroutine setuprad(obsLL,odiagLL,lunin,mype,aivals,stats,nchanl,nreal,nobs,& use crtm_interface, only: ilzen_ang2,iscan_ang2,iszen_ang2,isazi_ang2 use clw_mod, only: calc_clw, ret_amsua, gmi_37pol_diff use qcmod, only: igood_qc,ifail_gross_qc,ifail_interchan_qc,ifail_crtm_qc,ifail_satinfo_qc,qc_noirjaco3,ifail_cloud_qc + use qcmod, only: ifail_crtm_nan use qcmod, only: ifail_cao_qc,cao_check use qcmod, only: ifail_iland_det, ifail_isnow_det, ifail_iice_det, ifail_iwater_det, ifail_imix_det, & ifail_iomg_det, ifail_isst_det, ifail_itopo_det,ifail_iwndspeed_det @@ -307,6 +308,8 @@ subroutine setuprad(obsLL,odiagLL,lunin,mype,aivals,stats,nchanl,nreal,nobs,& use radiance_mod, only: radiance_ex_obserr_gmi,radiance_ex_biascor_gmi use cads, only: cads_imager_calc + use, intrinsic :: ieee_arithmetic + implicit none ! Declare passed variables @@ -997,6 +1000,20 @@ subroutine setuprad(obsLL,odiagLL,lunin,mype,aivals,stats,nchanl,nreal,nobs,& varinv(1:nchanl) = zero endif +! Include a separate check for NaNs in CRTM calculations. These are not always caught by other tests + + if (ANY(ieee_is_nan(tsim(1:nchanl)))) then + write(*,*) 'WARNING: NaN found in CRTM simulated radiance output' + do i = 1, nchanl + if (ieee_is_nan(tsim(i))) then + write(*,*) 'NaN for ',trim(isis),' channel ', sc_index(i), ' at latitude = ', & + cenlat,' longitude = ',cenlon + end if + end do + id_qc(1:nchanl) = ifail_crtm_nan + varinv(1:nchanl) = zero + endif + ! For SST retrieval, use interpolated NCEP SST analysis if (retrieval) then if( avhrr_navy )then