42 pure function distance(lon1,lat1, lon2,lat2, miles)
46 real(
double),
intent(in) :: lon1,lat1, lon2,lat2
47 logical,
optional,
intent(in) :: miles
49 real(
double) :: mlat,dlat2,dlon2, sins2,coss2,rat, r,dist, h1,h2
53 if(
present(miles)) milesl = miles
58 mlat = (lat1+lat2)*0.5d0
59 dlat2 = (lat1-lat2)*0.5d0
60 dlon2 = (lon1-lon2)*0.5d0
62 sins2 = sin(dlat2)**2 * cos(dlon2)**2 + cos(mlat)**2 * sin(dlon2)**2
63 coss2 = cos(dlat2)**2 * cos(dlon2)**2 + sin(mlat)**2 * sin(dlon2)**2
64 rat = atan2(sqrt(sins2),sqrt(coss2))
66 r = sqrt(sins2*coss2)/(rat + tiny(rat))
69 h1 = (3*r-1) / (2*coss2 + tiny(coss2))
70 h2 = (3*r+1) / (2*sins2 + tiny(sins2))
72 distance = dist*(1.d0 + fl*h1*sin(mlat)**2 * cos(dlat2)**2 - fl*h2*cos(mlat)**2 * sin(dlat2)**2)
95 real,
intent(in) :: lon1,lat1, lon2,lat2
96 logical,
optional,
intent(in) :: miles
101 if(
present(miles)) milesl = miles
pure real(double) function distance(lon1, lat1, lon2, lat2, miles)
Compute the distance between two points over the Earth's surface.
pure real function distance_r(lon1, lat1, lon2, lat2, miles)
Compute the distance between two points over the Earth's surface – single-precision version of distan...