@@ -31,8 +31,10 @@ module haversine
31
31
!
32
32
! ===========================================================================
33
33
implicit 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.
36
38
37
39
contains
38
40
@@ -42,13 +44,12 @@ subroutine distance_matrix(xa, xb, dist)
42
44
!- -----------------------------------------------------------------------------
43
45
44
46
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
47
49
real (kind= 8 ), dimension (:,:), intent (inout ) :: dist
48
50
49
51
m = size (xa, 1 )
50
52
n = size (xb, 1 )
51
- ! write (*,*) 'm,n', m, n
52
53
53
54
! Loop over empty dist matrix and fill
54
55
do j = 1 , m
@@ -68,8 +69,8 @@ subroutine distance_vector(lon1, lat1, lon2, lat2, dist)
68
69
!- -----------------------------------------------------------------------------
69
70
70
71
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
73
74
real (kind= 8 ), dimension (:), intent (inout ) :: dist
74
75
75
76
m = size (lon1)
@@ -102,8 +103,7 @@ subroutine get_haversine(lon1, lat1, lon2, lat2, thedist)
102
103
!- -----------------------------------------------------------------------------
103
104
!
104
105
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
107
107
real (kind= 8 ), intent (out ) :: thedist
108
108
!
109
109
dlat = d2r * (lat2 - lat1)
@@ -124,7 +124,7 @@ subroutine waypoint_vector(lonin, latin, anglein, distin, lon, lat)
124
124
!- -----------------------------------------------------------------------------
125
125
126
126
real (kind= 8 ), dimension (:), intent (in ) :: lonin, latin, anglein, distin
127
- integer (kind= 8 ) :: i, m
127
+ integer (kind= dp ) :: i, m
128
128
real (kind= 8 ) :: thelon, thelat
129
129
real (kind= 8 ), dimension (:), intent (inout ) :: lon, lat
130
130
! external :: waypoint
@@ -145,9 +145,8 @@ end subroutine waypoint_vector
145
145
subroutine get_waypoint (lonin , latin , anglein , distin , thelon , thelat )
146
146
!- -----------------------------------------------------------------------------
147
147
!
148
- implicit none
149
148
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
151
150
real (kind= 8 ), intent (out ) :: thelon, thelat
152
151
!
153
152
dr = distin / erad ! angular distance
0 commit comments