C Copyright(c) 1997, Space Science and Engineering Center, UW-Madison C Refer to "McIDAS Software Acquisition and Distribution Policies" C in the file mcidas/data/license.txt C *** $Id: isir.f,v 1.52 2015/03/25 18:18:22 russd Tst $ *** *$ Name: *$ isir - Determines if the detector specified by a *$ satellite/sensor/band combination is infrared. *$ *$ Interface: *$ logical function *$ isir(integer idsat, character*(*) csens, integer iband) *$ *$ Input: *$ idsat - The SSEC satellite id, a number. *$ csens - Instrument on the satellite, *$ i.e., 'MSU', 'AMSU', 'HIR3', HIRS', *$ 'QTIR', 'AVHR', 'AVH3', or 'TIRO'. *$ iband - The band. *$ *$ Input and Output: *$ none *$ *$ Output: *$ none *$ *$ Return values: *$ .false. - The band is not for IR sensing. *$ .true. - The detector is for IR sensing. *$ *$ Categories: *$ met/science LOGICAL FUNCTION ISIR(IDSAT,CSENS,IBAND) LOGICAL IRTIRO C Function to return Meteosat IR flag LOGICAL IRMET C Function to return GVAR IR flag LOGICAL IRGVAR C Function to return EOS IR flag LOGICAL IREOS C Function to return MSG IR flag LOGICAL IRMSG C Funtion to return FY2 IR flag LOGICAL IRFY2 C Funtion to return FY1 IR flag LOGICAL IRFY1 CHARACTER*4 CSENS C Funtion to return ABI IR flag LOGICAL IRABI C Function to return Meghatropics IR flag LOGICAL IRMEGHATROPICS C Funtion to return INSAT3D IR flag LOGICAL IRINSAT3D C Funtion to return LANDSAT IR flag LOGICAL IRLANDSAT INTEGER IDSAT,IBAND C Band 14 is interleaved VIS band for Pathfinder INTEGER GOEVIS PARAMETER (GOEVIS=14) IF (IDSAT.LT.0) THEN C UNDEFINED ISIR = .FALSE. ELSE IF (IDSAT.LE.3) THEN C NON-IMAGE DATA,GRAPHICS, MISCELLANEOUS ISIR = .FALSE. ELSE IF (IDSAT.LE.6) THEN C METEOSAT IF (IDSAT.EQ.4) THEN ISIR = .FALSE. ELSE ISIR = .TRUE. ENDIF ELSE IF (IDSAT.LE.11) THEN C RADAR, MAMS ISIR = .FALSE. ELSE IF (IDSAT.LE.19) THEN C GMS, ATS, SMS IF (MOD(IDSAT,2).EQ.0) THEN ISIR = .FALSE. ELSE ISIR = .TRUE. ENDIF ELSE IF (IDSAT.LE.33) THEN C GOES 1 THRU 7 IF (IBAND .EQ. GOEVIS) THEN C INTERLEAVED VIS FOR PATHFINDER (ALWAYS USING ODD SS#) ISIR = .FALSE. ELSE C JUST USE THE OLD ODD=IR, EVEN=VIS (WORKS FOR PF AND NON_PF) IF (MOD(IDSAT,2).EQ.0) THEN ISIR = .FALSE. ELSE C ALWAYS ODD SS FOR P_FINDER, ALL OTHER BANDS C WILL BE IR ISIR = .TRUE. ENDIF ENDIF ELSE IF (IDSAT.LE.39) THEN C FY2B - FY2H ISIR = IRFY2(IBAND) ELSE IF (IDSAT.LE.40) THEN C UNDEFINED ISIR = .FALSE. ELSE IF (IDSAT.LE.45) THEN C TIROS-N, NOAA-6 ... NOAA-9 ISIR = IRTIRO(CSENS,IBAND) ELSE IF (((IDSAT.GE.51).AND.(IDSAT.LE.53)) .or. & (IDSAT.EQ.354)) THEN C MSG - Meteosat Second Generation ISIR = IRMSG(IBAND) ELSE IF ((IDSAT.GE.54).AND.(IDSAT.LE.58)) THEN C Meteosat-3 -4 -5 -6 -7 ISIR = IRMET(IBAND) ELSE IF (IDSAT.LE.59) THEN C SPACECRAFT, RADAR, UNDEFINED ISIR = .FALSE. ELSE IF (IDSAT.LE.69) THEN C NOAA-10 - NOAA-19 ISIR = IRTIRO(CSENS,IBAND) ELSE IF (IDSAT.LE.79) THEN C GOES-I ... GOES-M [GOES-8 to -12] ISIR = IRGVAR(IDSAT,IBAND) ELSE IF (IDSAT.LE.81) THEN ISIR = .FALSE. ELSE IF (IDSAT.LE.86) THEN C 86 = HIMAWARI-8 C GMS-4, -5, ... IF( IDSAT.EQ.86 ) THEN ISIR = .FALSE. IF( IBAND.GE.7 ) ISIR = .TRUE. ELSE ISIR = IRMET(IBAND) ENDIF ELSE IF (((IDSAT.LE.94) .or. (IDSAT.eq.195) .or. & (IDSAT.eq.196)) .and. & ((CSENS.EQ.'OLS') .AND. (IBAND.EQ.2))) THEN C DMSP -- OLS BAND 2 IS VISIBLE ISIR = .FALSE. ELSE IF ((IDSAT.LE.94) .or. (IDSAT.eq.195) .or. & (IDSAT.eq.196)) THEN C DMSP -- ALL BANDS ARE "IR" FOR THE MICROWAVE CHANNELS ISIR = .TRUE. ELSE IF (IDSAT.LE.97) THEN C FY1 series ISIR = IRFY1(IBAND) ELSE IF (IDSAT.LE.171) THEN C EOS -- TERRA & AQUA ISIR = IREOS(IDSAT, CSENS, IBAND) ELSE IF (IDSAT.LE.185) THEN C GOES-N ... GOES-P [GOES-13 to -15] ISIR = IRGVAR(IDSAT,IBAND) ELSE IF (IDSAT.LE.186) THEN C GOES-R ISIR = IRABI(IDSAT, IBAND) ELSE IF (IDSAT.LE.200) THEN c Aqua AIRS ISIR = .TRUE. c --- Aqua AMSR-E ELSE IF (IDSAT.LE.211) THEN c ------ Aqua AMSR-E: L1B images if( IDSAT.eq.210 ) ISIR = .TRUE. c ------ Aqua AMSR-E Rain Rate images if( IDSAT.eq.211 ) ISIR = .FALSE. ELSE IF (IDSAT.LE.230) THEN c Kalpana ISIR = .FALSE. if(iband .eq. 2 .or. iband .eq. 3) ISIR = .TRUE. ELSE IF (IDSAT.LE.242) THEN C METOP ISIR = IRTIRO(CSENS,IBAND) c --- NPP-VIIRS elseif( IDSAT.eq.300 ) then ISIR = .FALSE. if( iband.eq.3 ) ISIR = .TRUE. if( iband.eq.4 ) ISIR = .TRUE. if( iband.eq.5 ) ISIR = .TRUE. if( iband.eq.16 ) ISIR = .TRUE. if( iband.eq.17 ) ISIR = .TRUE. if( iband.eq.18 ) ISIR = .TRUE. if( iband.eq.19 ) ISIR = .TRUE. if( iband.eq.20 ) ISIR = .TRUE. if( iband.eq.21 ) ISIR = .TRUE. c ------ VIIRS FOG product if( iband.eq.32 ) ISIR = .TRUE. c ----- South and North Pole Composites else if ((idsat .eq. 400) .or. (idsat .eq. 401)) then if ((iband .ge. 2) .and. (iband .le. 6)) then isir = .true. else isir = .false. endif c ----- COMS else if (idsat .eq. 250) then if ((iband .ge. 2) .and. (iband .le. 5)) then isir = .true. else isir = .false. endif c ----- Megha-Tropics else if (idsat .eq. 410) then isir = irmeghatropics(csens,iband) c ----- LandSat elseif ((idsat .ge. 261) .and. (idsat .le. 268)) then isir = irlandsat(idsat, csens, iband) c ----- INSAT-3D elseif ((idsat .ge. 231) .and. (idsat .le. 232)) then isir = irinsat3d(idsat, csens, iband) ELSE C ERBE, RAW METEOSAT, UNDEFINED ISIR = .FALSE. ENDIF RETURN END LOGICAL FUNCTION IRFY2(IBAND) C $ IRFY2 - determine if band of sensor on FY2 sat. sees infrared C $ Input: C $ IBAND = (I) band number C $ Output description: C $ True if infrared or wv sensor, false otherwise IMPLICIT NONE INTEGER IBAND C Band 2 is IR, Band 3 is water vapor...Band 1 is VIS. C WV is considered an IR channel IF (IBAND .EQ. 1) THEN IRFY2 = .FALSE. ELSE IRFY2 = .TRUE. ENDIF RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC LOGICAL FUNCTION IRTIRO(CSENS,IBAND) C $ LOGICAL FUNCTION IRTIRO(CSENS,IBAND) (BTR) C $ IRTIRO - determine if band of sensor on TIROS sat. sees infrared C $ Input: C $ CSENS = (C) sensor (instrument) C $ IBAND = (I) band number C $ Output description: C $ True if infrared sensor, false otherwise C $$ ISIR = COMPUTAT, SOUNDER, TOVS IMPLICIT NONE CHARACTER*4 CSENS INTEGER IBAND IF (CSENS(1:3) .EQ.'HIR') THEN IF (IBAND.EQ.20) THEN IRTIRO = .FALSE. ELSE IRTIRO = .TRUE. ENDIF ELSE IF ((CSENS.EQ.'MSU ') .or. (CSENS.EQ.'AMSU')) THEN C COMPUTATIONS FOR MICROWAVE JUST LIKE IR IRTIRO = .TRUE. C Quick cal changes to QTIR instead of TIRO ELSE IF((CSENS.EQ.'TIRO') .OR. & (CSENS.EQ.'QTIR') .OR. & (CSENS.EQ.'AVH3') .OR. & (CSENS.EQ.'AVHR')) THEN IF((IBAND.LE.2) .or. (IBAND.EQ.6)) THEN IRTIRO=.FALSE. ELSE IRTIRO=.TRUE. ENDIF ELSE IRTIRO = .FALSE. ENDIF RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC LOGICAL FUNCTION IRMET(IBAND) C $ LOGICAL FUNCTION IRMET(CSENS,IBAND) (JWH) C $ IRMET - determine if band of sensor on MET sat. sees infrared C $ Input: C $ IBAND = (I) band number C $ Output description: C $ True if infrared or wv sensor, false otherwise IMPLICIT NONE INTEGER IBAND C Band 8 is IR, Band 10 is water vapor...Band 1 is VIS. C WV is considered an IR channel IF (IBAND .EQ. 1) THEN IRMET = .FALSE. ELSE IRMET = .TRUE. ENDIF RETURN END LOGICAL FUNCTION IRMSG(IBAND) C $ IRMSG - determine if band of sensor on MSG sat. sees infrared C $ Input: C $ IBAND = (I) band number C $ Output description: C $ True if infrared or wv sensor, false otherwise IMPLICIT NONE INTEGER IBAND c --- 1 0.635 um Daytime cloud detection c --- 2 0.81 um Surface water, vegetation c --- 3 1.64 um Ice/water cloud determination c --- 4 3.92 um Sea sfc temp, hot spot detection c --- 5 8.7 um Ice/water cloud determination c --- 6 10.8 um Cloud detection, surface temp. c --- 7 12.0 um Sea surface temp, soil moisture c --- 8 6.25 um Water vapor c --- 9 7.35 um Water vapor c ---10 9.66 um Ozone absorption c ---11 13.4 um CO2 absorption c ---12 0.7 um Broad band visible IF ((IBAND .LE. 3) .or. (IBAND .eq. 12)) THEN IRMSG = .FALSE. ELSE IRMSG = .TRUE. ENDIF RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC LOGICAL FUNCTION IRGVAR(IDSAT, IBAND) C $ LOGICAL FUNCTION IRGVAR(IDSAT, IBAND) (CWJ) C $ IRGVA - DETERMINE IF BAND OF SENSOR ON GVAR SAT. SEES INFRARED C $ Input: C $ IDSAT = (I) SAT NUMBER C $ IBAND = (I) band number C $ Output description: C $ True if infrared sensor, false otherwise C $$ IRGVAR = COMPUTAT, GVAR IMPLICIT NONE INTEGER IDSAT INTEGER IBAND C SEE IF WE ARE LOOKING AT THE SOUNDER OR IMAGER C FOR THE IMAGER BAND 1 IS VISIBLE IF(MOD(IDSAT,2) .EQ. 0) THEN IF(IBAND .EQ. 1) THEN IRGVAR = .FALSE. ELSE IRGVAR = .TRUE. ENDIF ELSE C FOR THE SOUNDER BAND 19 IS VISIBLE IF(IBAND .EQ. 19) THEN IRGVAR = .FALSE. ELSE IRGVAR = .TRUE. ENDIF ENDIF END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC LOGICAL FUNCTION IREOS(IDSAT, CSENS, IBAND) C $ LOGICAL FUNCTION IREOS(IDSAT, CSENS, IBAND) C $ IREOS - DETERMINE IF BAND OF SENSOR ON TERRA OR AQUA IS INFRARED C $ Input: C $ IDSAT = (I) SAT NUMBER C $ CSENS = (C) SENSOR C $ IBAND = (I) band number C $ Output description: C $ True if infrared sensor, false otherwise C $$ IREOS = COMPUTAT, EOS IMPLICIT NONE INTEGER IDSAT INTEGER IBAND CHARACTER*4 CSENS C Is this the Cloud Mask product? IF( IDSAT.EQ.102 .OR. IDSAT.EQ.112 ) THEN IREOS = .FALSE. C Is this the Cloud Top product? ELSEIF( IDSAT.eq.106 .OR. IDSAT.EQ.116 ) THEN IREOS = .FALSE. C Is this the Atmospherice Properties product? ELSEIF( IDSAT.EQ.107 .OR. IDSAT.EQ.117 ) THEN IREOS = .FALSE. C Is this the Atmospheric Guess Retrival product? ELSEIF( IDSAT.EQ.108 .OR. IDSAT.EQ.118 ) THEN IREOS = .FALSE. C Is this the Atmospheric Retrival product ELSEIF( IDSAT.EQ.109 .OR. IDSAT.EQ.119 ) THEN IREOS = .FALSE. C Is this the L1B data? ELSE IF(CSENS .EQ. 'MODS' ) THEN C Bands 20-25, 27-36 are IR for MODIS IF((IBAND .GE. 20 .AND. IBAND .LE. 25) .OR. * (IBAND .GE. 27 .AND. IBAND .LE. 36)) THEN IREOS = .TRUE. ELSE IREOS = .FALSE. ENDIF C If not MODIS, then set it false ELSE IREOS = .FALSE. ENDIF END LOGICAL FUNCTION IRFY1(IBAND) C $ IRFY1 - determine if band of sensor on FY1 sat. sees infrared C $ Input: C $ IBAND = (I) band number C $ Output description: C $ True if infrared or wv sensor, false otherwise IMPLICIT NONE INTEGER IBAND IF ((IBAND .LE. 2) .or. (IBAND.GE.6)) THEN IRFY1 = .FALSE. ELSE IRFY1 = .TRUE. ENDIF RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC LOGICAL FUNCTION IRABI(IDSAT, IBAND) C $ LOGICAL FUNCTION IRABI(IDSAT, IBAND) C $ IRABI - DETERMINE IF BAND OF SENSOR ON ABI SAT. SEES INFRARED C $ Input: C $ IDSAT = (I) SAT NUMBER C $ IBAND = (I) band number C $ Output description: C $ True if infrared sensor, false otherwise IMPLICIT NONE INTEGER IDSAT INTEGER IBAND C FOR THE IMAGER BAND 1 IS VISIBLE IF(IBAND .LE. 6) THEN IRABI = .FALSE. ELSE IRABI = .TRUE. ENDIF RETURN END CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC logical function irmeghatropics(csens,iband) c $ Logical function irmeghatropics(csens,iband) c $ irmeghatropics - determines if band on Megha Tropics is infrared c $ Input: c $ csen = sensor (instrument) c $ ibane = band number C $ Output description: C $ True if infrared sensor, false otherwise implicit none character*4 csens integer iband if (csens(1:3) .eq. 'SRB') then if (iband .eq. 1) then irmeghatropics = .FALSE. else irmeghatropics = .TRUE. endif else irmeghatropics = .TRUE. endif end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC logical function irlandsat(idsat, csens, iband) c $ Logical function irlandsat(idsat, csens, iband) c $ irlandsat determines if band on LandSat is infrared c $ Input: c $ idsat = satellite sensor number c $ csens = sensor (instrument) c $ iband = band number c $ Output description: c $ True if infrared sensor, false otherwise implicit none character*4 csens integer iband integer idsat c c --- There are 2 sensors available for LandSat, the first is c --- the multispectral scanner (MSS) and the second is the c --- thematic mapper (TM) c c c --- LandSat 1-3 only had the MSS bands are odd, only 4-7 c if ((idsat .ge. 261) .and. (idsat .le. 263)) then if (iband .ne. 7) then irlandsat = .TRUE. else irlandsat = .FALSE. endif c c --- LandSat 4 and 5 had both MSS and TM c elseif ((idsat .ge. 264) .and. (idsat .le. 265)) then if (csens(1:4) .eq. 'LSMS') then if (iband .gt. 2) then irlandsat = .TRUE. else irlandsat = .FALSE. endif else if (iband .le. 3) then irlandsat = .FALSE. else irlandsat = .TRUE. endif endif c c --- Landsat 7 has just the TM c elseif (idsat .eq. 267) then if (iband .le. 3) then irlandsat = .FALSE. else irlandsat = .TRUE. endif c c --- LandSat 8 has just the TM c else if ((iband .le. 4) .or. (iband .eq. 8)) then irlandsat = .FALSE. else irlandsat = .TRUE. endif endif end CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC logical function irinsat3d(idsat, csens, iband) c $ Logical function irlandsat(idsat, iband) c $ irinsat3d determines if a band of a sensor on insat3d is infrared c $ Input: c $ idsat = satellite sensor number c $ iband = band number c $ Output description: c $ True if infrared sensor, false otherwise implicit none character*4 csens integer iband integer idsat c c --- InSat3D has both an imager and sounder. The SS number c --- determines the sensor c c c --- Odd numbered SS (idsat) are from the imager c if (mod(idsat,2) .eq. 1) then if (iband .ne. 1) then irinsat3d = .TRUE. else irinsat3d = .FALSE. endif else if (iband .ne. 19) then irinsat3d = .TRUE. else irinsat3d = .FALSE. endif endif end