@@ -29,7 +29,7 @@ program Test
2929
3030
3131real (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, &
3333 az2,el2,rng2,az3,el3,rng3,az4,el4,rng4,azrd,elrd,rae,dae,jd, &
3434 e1,n1,u1,e2,n2,u2,e3,n3,u3, &
3535 lat5(3 ), lon5(3 ), rng5(3 ), az5(3 ), tilt(3 )
@@ -67,37 +67,72 @@ program Test
6767call geodetic2ecef(lat,lon,alt, x1,y1,z1)
6868call assert_allclose([x1,y1,z1],[x0,y0,z0], &
6969 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+
7080
7181call aer2enu(az,el,rng, e1,n1,u1)
7282call assert_allclose([e1,n1,u1], [er,nr,ur])
7383
84+
7485call aer2ecef(az,el,rng,lat,lon,alt,x2,y2,z2)
7586call assert_allclose([x2,y2,z2],[xl,yl,zl])
7687
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+
7797! > ECEF2GEODETIC tests
7898call ecef2geodetic(x1,y1,z1,lat2,lon2,alt2)
7999call assert_allclose([lat2,lon2,alt2],[lat,lon,alt], &
80100 rtol= 0.01_wp , err_msg= ' ecef2geodetic-degrees' )
81101
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)
83103call 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' )
85105
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)
87107call 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' )
89109
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)
91111call 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' )
93113
94114call enu2aer(e1,n1,u1, az2, el2, rng2)
95115call assert_allclose([az2,el2,rng2],[az,el,rng],err_msg= ' enu2aer-degrees' )
96116
117+ ! > ECEF2AER
97118call ecef2aer(x2,y2,z2, lat,lon,alt, az3, el3, rng3)
98119call assert_allclose([az3,el3,rng3],[az,el,rng], &
99120 rtol= 1e-3_wp , err_msg= ' ecef2aer-degrees' )
100121
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+
101136call aer2geodetic(az,el,rng,lat,lon,alt, lat3,lon3,alt3)
102137call assert_allclose([lat3,lon3,alt3],[lat1,lon1,alt1], &
103138 rtol= 1e-3_wp , err_msg= ' aer2geodetic-degrees' )
@@ -123,7 +158,7 @@ program Test
123158
124159call assert_allclose(degrees(radians(deg0)), deg0, err_msg= ' deg<->rad' )
125160
126- ! ------ scalar radians
161+ ! > scalar radians
127162
128163call geodetic2ecef(radians(lat),radians(lon),alt, x1,y1,z1, deg= .false. )
129164call assert_allclose([x1,y1,z1],[x0,y0,z0])
@@ -142,6 +177,7 @@ program Test
142177call assert_allclose([degrees(az2),degrees(el2),rng2],[az,el,rng], &
143178 err_msg= ' enu2aer: rad' )
144179
180+ ! > ECEF2AER
145181call ecef2aer(x2,y2,z2, radians(lat),radians(lon),alt, az3,el3,rng3, deg= .false. )
146182call assert_allclose([degrees(az3),degrees(el3),rng3],[az,el,rng], &
147183 rtol= 1e-3_wp , err_msg= ' ecef2aer-radians' )
0 commit comments