@@ -31,8 +31,10 @@ module haversine
3131! 
3232! ===========================================================================
3333implicit none 
34- real (kind= 8 ), parameter  ::  erad =  6371315.0 
35- real (kind= 8 ), parameter  ::  d2r =  0.017453292519943295  !  == pi / 180.
34+ !  http://www.fortran90.org/src/best-practices.html#floating-point-numbers
35+ integer , parameter  ::  dp =  kind (0.d0 )
36+ real (kind= dp), parameter  ::  erad =  6371315.0_dp 
37+ real (kind= dp), parameter  ::  d2r =  0.017453292519943295_dp  !  == pi / 180.
3638
3739contains 
3840
@@ -42,13 +44,12 @@ subroutine distance_matrix(xa, xb, dist)
4244!- -----------------------------------------------------------------------------
4345
4446      real (kind= 8 ), dimension (:,:), intent (in )    ::  xa, xb
45-       integer (kind= 8 )                             ::  i, j, m, n
46-       real (kind= 8 )                                ::  thedist
47+       integer (kind= dp )                             ::  i, j, m, n
48+       real (kind= dp )                                ::  thedist
4749      real (kind= 8 ), dimension (:,:), intent (inout ) ::  dist
4850
4951      m =  size (xa, 1 )
5052      n =  size (xb, 1 )
51- !        write (*,*) 'm,n', m, n
5253
5354!      Loop over empty dist matrix and fill
5455      do  j =  1 , m
@@ -68,8 +69,8 @@ subroutine distance_vector(lon1, lat1, lon2, lat2, dist)
6869!- -----------------------------------------------------------------------------
6970
7071      real (kind= 8 ), dimension (:), intent (in ) ::  lon1, lat1, lon2, lat2
71-       integer (kind= 8 )                        ::  i, m
72-       real (kind= 8 )             ::  thedist
72+       integer (kind= dp )                        ::  i, m
73+       real (kind= dp )             ::  thedist
7374      real (kind= 8 ), dimension (:), intent (inout ) ::  dist
7475
7576      m =  size (lon1)
@@ -102,8 +103,7 @@ subroutine get_haversine(lon1, lat1, lon2, lat2, thedist)
102103!- -----------------------------------------------------------------------------
103104! 
104105      real (kind= 8 ), intent (in )  ::  lon1, lat1, lon2, lat2
105-       real (kind= 8 )              ::  lt1, lt2, dlat, dlon
106-       real (kind= 8 )              ::  a
106+       real (kind= dp)              ::  lt1, lt2, dlat, dlon, a
107107      real (kind= 8 ), intent (out ) ::  thedist
108108! 
109109      dlat =  d2r *  (lat2 -  lat1)
@@ -124,7 +124,7 @@ subroutine waypoint_vector(lonin, latin, anglein, distin, lon, lat)
124124!- -----------------------------------------------------------------------------
125125
126126      real (kind= 8 ), dimension (:), intent (in ) ::  lonin, latin, anglein, distin
127-       integer (kind= 8 )                        ::  i, m
127+       integer (kind= dp )                        ::  i, m
128128      real (kind= 8 )             ::  thelon, thelat
129129      real (kind= 8 ), dimension (:), intent (inout ) ::  lon, lat
130130!        external :: waypoint
@@ -145,9 +145,8 @@ end subroutine waypoint_vector
145145    subroutine  get_waypoint (lonin , latin , anglein , distin , thelon , thelat )
146146!- -----------------------------------------------------------------------------
147147! 
148-       implicit none 
149148      real (kind= 8 ), intent (in )  ::  lonin, latin, anglein, distin
150-       real (kind= 8 )              ::  ln1, lt1, angle, dr
149+       real (kind= dp )              ::  ln1, lt1, angle, dr
151150      real (kind= 8 ), intent (out ) ::  thelon, thelat
152151! 
153152      dr =  distin /  erad !  angular distance
0 commit comments