Program Listing for File OrbitalExpressions.cpp¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Core/OrbitalExpressions.cpp)
#include "OrbitalExpressions.h"
namespace Core {
double factorial(unsigned n)
{
double result=1;
for(unsigned i=2; i<=n; ++i) result*=i;
return result;
}
double orbital_angular_velocity(double m1,
double m2,
double semimajor,
bool deriv)
{
return (
(deriv ? -1.5 : 1.0)
*
std::sqrt(
Core::AstroConst::G * (m1 + m2) * Core::AstroConst::solar_mass
/
std::pow(
semimajor * Core::AstroConst::solar_radius,
(deriv ? 5 : 3)
)
)
*
Core::AstroConst::day
);
}
double orbital_energy(double m1,
double m2,
double semimajor,
unsigned deriv_order)
{
return (deriv_order%2 ? 1 : -1) * m1 * m2 * factorial(deriv_order)
/
(2.0 * std::pow(semimajor, static_cast<int>(deriv_order + 1)))
*
Core::AstroConst::G * Core::AstroConst::solar_mass
*
std::pow(Core::AstroConst::day, 2)
/
std::pow(Core::AstroConst::solar_radius, 3);
}
double orbital_angular_momentum(double m1,
double m2,
double semimajor,
double eccentricity)
{
return m1 * m2
*
std::sqrt(
semimajor*(1.0 - std::pow(eccentricity, 2)) / (m1 + m2)
*
Core::AstroConst::G * Core::AstroConst::solar_mass
/
std::pow(Core::AstroConst::solar_radius, 3)
)
*
Core::AstroConst::day;
}
LIB_PUBLIC double semimajor_from_period(double m1,
double m2,
double period)
{
return std::pow(
Core::AstroConst::G * (m1 + m2) * Core::AstroConst::solar_mass
*
std::pow(Core::AstroConst::day * period, 2)
/
(4.0 * M_PI * M_PI)
,
1.0 / 3.0
) / Core::AstroConst::solar_radius;
}
}//End Core namespace.