@@ -29,7 +29,7 @@ program Test
29
29
30
30
31
31
real (wp) :: lat2, lon2, alt2,lat3,lon3,alt3,lat4,lon4,alt4, &
32
- x1,y1,z1,x2,y2,z2,x3,y3,z3,&
32
+ x1,y1,z1,x2,y2,z2,x3,y3,z3, x7,y7,z7, &
33
33
az2,el2,rng2,az3,el3,rng3,az4,el4,rng4,azrd,elrd,rae,dae,jd, &
34
34
e1,n1,u1,e2,n2,u2,e3,n3,u3, &
35
35
lat5(3 ), lon5(3 ), rng5(3 ), az5(3 ), tilt(3 )
@@ -67,37 +67,72 @@ program Test
67
67
call geodetic2ecef(lat,lon,alt, x1,y1,z1)
68
68
call assert_allclose([x1,y1,z1],[x0,y0,z0], &
69
69
err_msg= ' geodetic2ecef-degrees' )
70
+
71
+ call geodetic2ecef(0._wp , 0._wp , - 1._wp , x7, y7, z7)
72
+ call assert_allclose([x7,y7,z7], [spheroid% SemimajorAxis-1 , 0._wp , 0._wp ])
73
+
74
+ call geodetic2ecef(0._wp , 90._wp , - 1._wp , x7, y7, z7)
75
+ call assert_allclose([x7,y7,z7], [0._wp , spheroid% SemimajorAxis-1 , 0._wp ])
76
+
77
+ call geodetic2ecef(90._wp , 0._wp , - 1._wp , x7, y7, z7)
78
+ call assert_allclose([x7,y7,z7], [0._wp , 0._wp , spheroid% SemiminorAxis-1 ])
79
+
70
80
71
81
call aer2enu(az,el,rng, e1,n1,u1)
72
82
call assert_allclose([e1,n1,u1], [er,nr,ur])
73
83
84
+
74
85
call aer2ecef(az,el,rng,lat,lon,alt,x2,y2,z2)
75
86
call assert_allclose([x2,y2,z2],[xl,yl,zl])
76
87
88
+ call aer2ecef(0._wp , - 90._wp , 1._wp , 0._wp , 0._wp , - 1._wp , x7, y7, z7)
89
+ call assert_allclose([x7,y7,z7],[spheroid% SemimajorAxis-1._wp , 0._wp , 0._wp ], atol= 1e-6_wp )
90
+
91
+ call aer2ecef(0._wp , - 90._wp , 1._wp , 0._wp , 90._wp , - 1._wp , x7, y7, z7)
92
+ call assert_allclose([x7,y7,z7],[0._wp , spheroid% SemimajorAxis-1._wp , 0._wp ], atol= 1e-6_wp )
93
+
94
+ call aer2ecef(0._wp , - 90._wp , 1._wp , 90._wp , 0._wp , - 1._wp , x7, y7, z7)
95
+ call assert_allclose([x7,y7,z7],[0._wp , 0._wp ,spheroid% SemiminorAxis-1._wp ], atol= 1e-6_wp )
96
+
77
97
! > ECEF2GEODETIC tests
78
98
call ecef2geodetic(x1,y1,z1,lat2,lon2,alt2)
79
99
call assert_allclose([lat2,lon2,alt2],[lat,lon,alt], &
80
100
rtol= 0.01_wp , err_msg= ' ecef2geodetic-degrees' )
81
101
82
- call ecef2geodetic(spheroid% SemimajorAxis-1._wp , 0._wp , 0._wp , lat2, lon2, alt2)
102
+ call ecef2geodetic(spheroid% SemimajorAxis-1 , 0._wp , 0._wp , lat2, lon2, alt2)
83
103
call assert_allclose([lat2,lon2,alt2],[0._wp , 0._wp , - 1._wp ], &
84
- rtol = 0.01_wp , err_msg= ' ecef2geodetic-degrees' )
104
+ err_msg= ' ecef2geodetic-degrees' )
85
105
86
- call ecef2geodetic(0._wp , spheroid% SemimajorAxis-1._wp , 0._wp , lat2, lon2, alt2)
106
+ call ecef2geodetic(0._wp , spheroid% SemimajorAxis-1 , 0._wp , lat2, lon2, alt2)
87
107
call assert_allclose([lat2,lon2,alt2],[0._wp , 90._wp , - 1._wp ], &
88
- rtol = 0.01_wp , err_msg= ' ecef2geodetic-degrees' )
108
+ err_msg= ' ecef2geodetic-degrees' )
89
109
90
- call ecef2geodetic(0._wp , 0._wp , spheroid% SemiminorAxis-1._wp , lat2, lon2, alt2)
110
+ call ecef2geodetic(0._wp , 0._wp , spheroid% SemiminorAxis-1 , lat2, lon2, alt2)
91
111
call assert_allclose([lat2,lon2,alt2],[90._wp , 0._wp , - 1._wp ], &
92
- rtol = 0.01_wp , err_msg= ' ecef2geodetic-degrees' )
112
+ err_msg= ' ecef2geodetic-degrees' )
93
113
94
114
call enu2aer(e1,n1,u1, az2, el2, rng2)
95
115
call assert_allclose([az2,el2,rng2],[az,el,rng],err_msg= ' enu2aer-degrees' )
96
116
117
+ ! > ECEF2AER
97
118
call ecef2aer(x2,y2,z2, lat,lon,alt, az3, el3, rng3)
98
119
call assert_allclose([az3,el3,rng3],[az,el,rng], &
99
120
rtol= 1e-3_wp , err_msg= ' ecef2aer-degrees' )
100
121
122
+ call ecef2aer(spheroid% SemimajorAxis-1._wp , 0._wp , 0._wp , 0._wp , 0._wp , 0._wp , az3, el3, rng3)
123
+ call assert_allclose([az3,el3,rng3], [0._wp , - 90._wp , 1._wp ], &
124
+ err_msg= ' ecef2aer-degrees' )
125
+
126
+ call ecef2aer(0._wp , spheroid% SemimajorAxis-1._wp , 0._wp , 0._wp , 90._wp , 0._wp , az3, el3, rng3)
127
+ call assert_allclose([az3,el3,rng3], [0._wp , - 90._wp , 1._wp ], &
128
+ err_msg= ' ecef2aer-degrees' )
129
+
130
+ call ecef2aer(0._wp , 0._wp , spheroid% SemimajorAxis-1._wp , 90._wp , 0._wp , 0._wp , az3, el3, rng3)
131
+ call assert_allclose([az3,el3,rng3], [0._wp , - 90._wp , 1._wp ], &
132
+ rtol= 1e6_wp , err_msg= ' ecef2aer-degrees' )
133
+
134
+
135
+
101
136
call aer2geodetic(az,el,rng,lat,lon,alt, lat3,lon3,alt3)
102
137
call assert_allclose([lat3,lon3,alt3],[lat1,lon1,alt1], &
103
138
rtol= 1e-3_wp , err_msg= ' aer2geodetic-degrees' )
@@ -123,7 +158,7 @@ program Test
123
158
124
159
call assert_allclose(degrees(radians(deg0)), deg0, err_msg= ' deg<->rad' )
125
160
126
- ! ------ scalar radians
161
+ ! > scalar radians
127
162
128
163
call geodetic2ecef(radians(lat),radians(lon),alt, x1,y1,z1, deg= .false. )
129
164
call assert_allclose([x1,y1,z1],[x0,y0,z0])
@@ -142,6 +177,7 @@ program Test
142
177
call assert_allclose([degrees(az2),degrees(el2),rng2],[az,el,rng], &
143
178
err_msg= ' enu2aer: rad' )
144
179
180
+ ! > ECEF2AER
145
181
call ecef2aer(x2,y2,z2, radians(lat),radians(lon),alt, az3,el3,rng3, deg= .false. )
146
182
call assert_allclose([degrees(az3),degrees(el3),rng3],[az,el,rng], &
147
183
rtol= 1e-3_wp , err_msg= ' ecef2aer-radians' )
0 commit comments