Astro-Nova
view release on metacpan or search on metacpan
libnova-0.15.0/lntest/test.c view on Meta::CPAN
orbit.i = 28.99870;
orbit.omega = 79.55499;
orbit.w = 296.40937;
orbit.n = 0.00318942;
// MPO refers to Mean anomaly & epoch, we hence need to convert epoch
// to perihelion pass
orbit.JD -= 147.09926 / orbit.n;
ln_get_ell_body_equ_coords (o_JD, &orbit, &equ_posn);
failed += test_result ("(RA) for TNO K05F09Y ", equ_posn.ra, 184.3699999995, 0.001);
failed += test_result ("(Dec) for TNO K05F09Y ", equ_posn.dec, 30.3316666666, 0.001);
return failed;
}
/* need a proper parabolic orbit to properly test */
int parabolic_motion_test ()
{
double r,v,dist;
double e_JD, o_JD;
struct ln_par_orbit orbit;
struct ln_rect_posn posn;
struct ln_date epoch_date, obs_date;
struct ln_equ_posn equ_posn;
int failed = 0;
obs_date.years = 2003;
obs_date.months = 1;
obs_date.days = 11;
obs_date.hours = 0;
obs_date.minutes = 0;
obs_date.seconds = 0;
epoch_date.years = 2003;
epoch_date.months = 1;
epoch_date.days = 29;
epoch_date.hours = 0;
epoch_date.minutes = 6;
epoch_date.seconds = 37.44;
e_JD = ln_get_julian_day (&epoch_date);
o_JD = ln_get_julian_day (&obs_date);
orbit.q = 0.190082;
orbit.i = 94.1511;
orbit.w = 187.5613;
orbit.omega = 119.0676;
orbit.JD = e_JD;
v = ln_get_par_true_anomaly (orbit.q, o_JD - e_JD);
failed += test_result ("(True Anomaly) v when e is 0.1 and E is 5.5545 ", v, 247.18968605, 0.00000001);
r = ln_get_par_radius_vector (orbit.q, o_JD - e_JD);
failed += test_result ("(Radius Vector) r when v is , e is 0.1 and E is 5.5545 ", r, 0.62085992, 0.00000001);
ln_get_par_geo_rect_posn (&orbit, o_JD, &posn);
failed += test_result ("(Geocentric Rect Coords X) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.X, 0.29972461, 0.00000001);
failed += test_result ("(Geocentric Rect Coords Y) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.Y, -0.93359772, 0.00000001);
failed += test_result ("(Geocentric Rect Coords Z) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.Z, 0.24639194, 0.00000001);
ln_get_par_helio_rect_posn (&orbit, o_JD, &posn);
failed += test_result ("(Heliocentric Rect Coords X) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.X, -0.04143700, 0.00000001);
failed += test_result ("(Heliocentric Rect Coords Y) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.Y, -0.08736588, 0.00000001);
failed += test_result ("(Heliocentric Rect Coords Z) for comet C/2002 X5 (Kudo-Fujikawa) ", posn.Z, 0.61328397, 0.00000001);
ln_get_par_body_equ_coords (o_JD, &orbit, &equ_posn);
failed += test_result ("(RA) for comet C/2002 X5 (Kudo-Fujikawa) ", equ_posn.ra, 287.79617309, 0.00000001);
failed += test_result ("(Dec) for comet C/2002 X5 (Kudo-Fujikawa) ", equ_posn.dec, 14.11800859, 0.00000001);
dist = ln_get_par_body_solar_dist (o_JD, &orbit);
failed += test_result ("(Body Solar Dist) for comet C/2002 X5 (Kudo-Fujikawa) in AU ", dist, 0.62085992, 0.00001);
dist = ln_get_par_body_earth_dist (o_JD, &orbit);
failed += test_result ("(Body Earth Dist) for comet C/2002 X5 (Kudo-Fujikawa) in AU ", dist, 1.01101362, 0.00001);
return failed;
}
/* data from Meeus, chapter 35 */
int hyperbolic_motion_test ()
{
double r,v,dist;
double e_JD, o_JD;
struct ln_hyp_orbit orbit;
struct ln_date epoch_date, obs_date;
struct ln_equ_posn equ_posn;
int failed = 0;
orbit.q = 3.363943;
orbit.e = 1.05731;
// the one from Meeus..
v = ln_get_hyp_true_anomaly (orbit.q, orbit.e, 1237.1);
failed += test_result ("(True Anomaly) v when q is 3.363943 and e is 1.05731 ", v, 109.40598, 0.00001);
r = ln_get_hyp_radius_vector (orbit.q, orbit.e, 1237.1);
failed += test_result ("(Radius Vector) r when q is 3.363943 and e is 1.05731 ", r, 10.668551, 0.00001);
// and now something real.. C/2001 Q4 (NEAT)
obs_date.years = 2004;
obs_date.months = 5;
obs_date.days = 15;
obs_date.hours = 0;
obs_date.minutes = 0;
obs_date.seconds = 0;
epoch_date.years = 2004;
epoch_date.months = 5;
epoch_date.days = 15;
epoch_date.hours = 23;
epoch_date.minutes = 12;
epoch_date.seconds = 37.44;
e_JD = ln_get_julian_day (&epoch_date);
o_JD = ln_get_julian_day (&obs_date);
orbit.q = 0.961957;
orbit.e = 1.000744;
orbit.i = 99.6426;
orbit.w = 1.2065;
( run in 1.090 second using v1.01-cache-2.11-cpan-5a3173703d6 )