!##################################################################
!##################################################################
!######                                                      ######
!######               SUBROUTINE SETIJLOC2                   ######
!######                                                      ######
!######                     Developed by                     ######
!######     Center for Analysis and Prediction of Storms     ######
!######                University of Oklahoma                ######
!######                                                      ######
!##################################################################
!##################################################################


SUBROUTINE setijloc2(fnx,fny,anx,any,iloc,jloc,fx2d,fy2d,ax2d,ay2d) 4

!-----------------------------------------------------------------------
!
! PURPOSE:
!
! Find i,j indicies in forecast grid of each analysis grid point.
! No indicies are returned if the analysis grid point is outside
! of the forecast grid.
!
! NOTE:  The forecast and analysis grid points are assumed to have
! the same origin and map projection.
!
!-----------------------------------------------------------------------
!
! AUTHOR:  Eric Kemp, November 1999.
!
! Based on subroutine setijloc
!
!-----------------------------------------------------------------------
!
! Variable declarations
!
!-----------------------------------------------------------------------

  IMPLICIT NONE

  INTEGER,INTENT(IN) :: fnx,fny,anx,any
  REAL,INTENT(IN) :: fx2d(fnx,fny),fy2d(fnx,fny)
  REAL,INTENT(IN) :: ax2d(anx,any),ay2d(anx,any)
  INTEGER,INTENT(INOUT) :: iloc(anx,any),jloc(anx,any)
                       
!-----------------------------------------------------------------------
!
! Miscellaneous variables
!
!-----------------------------------------------------------------------

  INTEGER :: i,j,m,n
  INTEGER :: fimid,fjmid
  REAL :: fxmid,fymid

!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
!
! Beginning of executable code...
!
!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
!
!-----------------------------------------------------------------------
!
! Initialize iloc and jloc to -9999 (i.e., outside the forecast grid)
!
!-----------------------------------------------------------------------

  DO n = 1,any
    DO m = 1,anx
      iloc(m,n) = -9999
      jloc(m,n) = -9999
    END DO
  END DO

!-----------------------------------------------------------------------
!
! Determine the scalar coordinates of the middle of the forecast field.
!
!-----------------------------------------------------------------------

  fimid = fnx/2
  fjmid = fny/2

  fxmid = fx2d(fimid,fjmid)
  fymid = fy2d(fimid,fjmid)

!-----------------------------------------------------------------------
!
! Find the forecast i,j of each analysis grid point.
!
!-----------------------------------------------------------------------

  DO n = 1,any-1
    analysism: DO m = 1,anx-1
      IF (ax2d(m,n) < fxmid) THEN
        IF (ay2d(m,n) < fymid) THEN
          DO j = fjmid,2,-1
            DO i = fimid,2,-1
              IF (fx2d(i,j) <= ax2d(m,n) .AND.                       &
                  fx2d(i+1,j) > ax2d(m,n) .AND.                    &
                  fy2d(i,j) <= ay2d(m,n) .AND.                       &
                  fy2d(i,j+1) > ay2d(m,n)) THEN
                iloc(m,n) = i
                jloc(m,n) = j
                CYCLE analysism
              END IF
            END DO
          END DO
        ELSE
          DO j = fjmid,fny-1
            DO i = fimid,2,-1
              IF (fx2d(i,j) <= ax2d(m,n) .AND.                       &
                  fx2d(i+1,j) > ax2d(m,n) .AND.                    &
                  fy2d(i,j-1) < ay2d(m,n) .AND.                       &
                  fy2d(i,j) >= ay2d(m,n)) THEN
                iloc(m,n) = i
                jloc(m,n) = j-1
                CYCLE analysism
              END IF
            END DO
          END DO
        END IF
      ELSE
        IF (ay2d(m,n) < fymid) THEN
          DO j = fjmid,2,-1
            DO i = fimid,fnx-1
              IF (fx2d(i-1,j) < ax2d(m,n) .AND.                       &
                  fx2d(i,j) >= ax2d(m,n) .AND.                        &
                  fy2d(i,j) <= ay2d(m,n) .AND.                        &
                  fy2d(i,j+1) > ay2d(m,n)) THEN
                iloc(m,n) = i-1
                jloc(m,n) = j
                CYCLE analysism
              END IF
            END DO
          END DO    
        ELSE
          DO j = fjmid,fny-1
            DO i = fimid,fnx-1 
              IF (fx2d(i-1,j) < ax2d(m,n) .AND.                       &
                  fx2d(i,j) >= ax2d(m,n) .AND.                        &
                  fy2d(i,j-1) < ay2d(m,n) .AND.                       &
                  fy2d(i,j) >= ay2d(m,n)) THEN
                iloc(m,n) = i-1
                jloc(m,n) = j-1
                CYCLE analysism
              END IF
            END DO
          END DO      
        END IF
      END IF
    END DO analysism
  END DO
  
END SUBROUTINE setijloc2