<HTML> <BODY BGCOLOR=#ccccdd LINK=#0000aa VLINK=#0000ff ALINK=#ff0000 ><BASE TARGET="bottom_target"><PRE>
<A NAME='MODULE_INSIDE'><A href='../../html_code/obsproc/module_inside.F90.html#MODULE_INSIDE' TARGET='top_target'><IMG SRC="../../gif/bar_purple.gif" border=0></A>
MODULE module_inside 3
!------------------------------------------------------------------------------!
! Check if an obs defined by it latitude, longitude and time is in the
! MM5 horizontal domain (as defined in the namelist) and within the
! time window (as defined in the namelist)
!
! D. GILL, April 1998
! F. VANDENBERGHE, March 2001
!------------------------------------------------------------------------------!
USE module_type
USE module_func
USE module_mm5
USE map_utils
USE module_namelist
CONTAINS
! ----------------------------------------------------------------------------
! SUBROUTINE inside_domain ( lat , lon , ins , jew, outside_domain, &
! xjc, yic, xjd, yid)
! SUBROUTINE inside_window (time_obs, time_window_min, time_window_max, &
! outside_window, iunit)
! ----------------------------------------------------------------------------
!
! ----------------------------------------------------------------------------
<A NAME='INSIDE_DOMAIN'><A href='../../html_code/obsproc/module_inside.F90.html#INSIDE_DOMAIN' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
SUBROUTINE inside_domain ( lat , lon , ins , jew, outside_domain, & 3,3
xjc_out, yic_out, xjd_out, yid_out)
! This routine determines if an observation with the input latitude and
! longitude is within the current domain.
USE module_map
IMPLICIT NONE
REAL , INTENT(IN) :: lat , lon
INTEGER , INTENT(IN) :: ins , jew
LOGICAL , INTENT(OUT) :: outside_domain
REAL , OPTIONAL :: xjc_out , yic_out
REAL , OPTIONAL :: xjd_out , yid_out
! Local data
REAL :: xjd , yid
IF ( ABS(lat) .GT. 90. ) THEN
outside_domain = .TRUE.
ELSE
if (fg_format == 'MM5') then
CALL llxy
(lat , lon , xjd , yid )
else if (fg_format == 'WRF') then
call latlon_to_ij
(map_info, lat, lon, xjd, yid)
xjd = xjd + .5
yid = yid + .5
endif
IF ((yid .GE. 1.) .AND. (yid .LE. ins ) .AND. &
(xjd .GE. 1.) .AND. (xjd .LE. jew )) THEN
outside_domain = .FALSE.
ELSE
outside_domain = .TRUE.
! if(user_defined_area) then
! if(xjd < x_left .or. xjd > x_right .or. &
! yid < y_bottom .or. yid > y_top) then
! outside_domain = .FALSE.
! end if
! end if
END IF
END IF
IF (PRESENT (xjc_out)) THEN
xjc_out = xjd - 0.5
IF (PRESENT (yic_out)) THEN
yic_out = yid - 0.5
IF (PRESENT (xjd_out)) THEN
xjd_out = xjd
IF (PRESENT (yid_out)) THEN
yid_out = yid
ENDIF
ENDIF
ENDIF
ENDIF
END SUBROUTINE inside_domain
!
! ----------------------------------------------------------------------------
<A NAME='INSIDE_WINDOW'><A href='../../html_code/obsproc/module_inside.F90.html#INSIDE_WINDOW' TARGET='top_target'><IMG SRC="../../gif/bar_red.gif" border=0></A>
SUBROUTINE inside_window (time_obs, time_window_min, time_window_max, & 4,3
outside_window, iunit)
! This routine determines if an observation with the input time
! is within the analysis time window ]time_window_min, time_window_max]
USE module_date
IMPLICIT NONE
CHARACTER (LEN = 14) :: time_obs
CHARACTER (LEN = 19) :: time_window_min
CHARACTER (LEN = 19) :: time_window_max
LOGICAL, INTENT(OUT) :: outside_window
INTEGER, INTENT(IN), OPTIONAL :: iunit
CHARACTER (LEN = 19) :: time_obs_long
INTEGER :: itb, ita
INTEGER :: iiunit
LOGICAL :: date1_correct, date2_correct
IF (PRESENT (iunit)) THEN
iiunit = iunit
ELSE
iiunit = 0
ENDIF
WRITE (time_obs_long, FMT='(A4,"-",A2,"-",A2,"_",A2,":",A2,":",A2)') &
time_obs ( 1: 4), time_obs ( 5: 6), time_obs ( 7: 8), &
time_obs ( 9:10), time_obs (11:12), time_obs (13:14)
! time_obs - Time_window_min (IN >= 0, OUT < 0)
CALL GETH_IDTS
(time_obs_long, time_window_min, itb, date1_correct, iiunit)
! time_obs - Time_window_max (IN =< 0, OUT > 0)
CALL GETH_IDTS
(time_obs_long, time_window_max, ita, date2_correct, iiunit)
IF (((itb .LT. 0) .OR. (ita .GT. 0)) .OR. &
((.NOT. date1_correct) .OR. (.NOT. date2_correct))) THEN
outside_window = .TRUE. ! Observation out of time window
ELSE
outside_window = .FALSE. ! Observation in time window
ENDIF
RETURN
END SUBROUTINE inside_window
END MODULE module_inside