Merge remote-tracking branch 'origin/release-v4.6.1'
[WRF.git] / var / da / da_tools / da_xyll_latlon.inc
blobdaeb81dafed635b35865832454d6e77069fb45e4
1 subroutine da_xyll_latlon(x, y, proj, lat, lon)
3    !-----------------------------------------------------------------------
4    ! Purpose: Compute the lat/lon location of an x/y on a LATLON grid.
5    !-----------------------------------------------------------------------
7    implicit none
9    real, intent(in)             :: x
10    real, intent(in)             :: y
11    type(proj_info), intent(in)  :: proj
12    real, intent(out)            :: lat
13    real, intent(out)            :: lon
15    real                         :: deltalat
16    real                         :: deltalon
17    real                         :: latinc
18    real                         :: loninc
19    real                         :: lon360
21    if (trace_use_frequent) call da_trace_entry("da_xyll_latlon")
23    loninc = proj%dx*360.0/(2.0*EARTH_RADIUS_M*PI)
24    latinc = proj%dx*360.0/(2.0*EARTH_RADIUS_M*PI)
26    deltalon = (x - proj%knowni) * loninc
27    deltalat = (y - proj%knownj) * latinc
29    lon360 = deltalon + proj%lon1
30    lat    = deltalat + proj%lat1
32    if ((ABS(lat) > 90.0).OR.(ABS(deltalon) > 360.0)) then
33       ! Off the earth for this grid; THIS SHOULD NEVER HAPPEN
34       lat = -999.0
35       lon = -999.0
36    else
37       lon = MOD(lon360,360.0)
38       if (lon > 180.0) lon = lon - 360.0
39    end if
41    if (trace_use_frequent) call da_trace_exit("da_xyll_latlon")
43 end subroutine da_xyll_latlon