Program Listing for File testTidalTorquePower.cpp¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/testTidalTorquePower.cpp)
#include "testTidalTorquePower.h"
namespace Evolve {
void test_TidalTorquePower::test_aligned_orbit()
{
const double abs_tolerance=1e-6;
std::valarray<double> one_poly(1.0, 1);
ConstPhaseLagZone zone(1.0, one_poly, one_poly, one_poly);
zone.configure(true,//initialize
1.0,//age
1.0,//orbital frequency
0.0,//eccentricity
1.0,//orbital_angmom
0.0,//spin
0.0,//inclination
0.0,//periapsis
true);//spin_is_freq
Planet::Planet planet(1.0, 1.0);
BinarySystem dummy_system(planet, planet, "");
zone.change_e_order(20, dummy_system, true, 0);
for(double e = 0.0; e <= 0.0075; e += 0.0001) {
zone.configure(false,//initialize
1.0,//age
1.0,//orbital frequency
e,//eccentricity
1.0,//orbital_angomm
0.0,//spin
0.0,//inclination
0.0,//periapsis
true);//spin_is_freq
double factor = 1.2 * M_PI,
expected_tidal_power = factor * (1.0 + 14.25 * e * e),
expected_z_torque = factor * (1.0 + 7.5 * e * e),
got_tidal_power = zone.tidal_power(true),
got_x_torque = zone.tidal_torque_x(true),
got_y_torque = zone.tidal_torque_y(true),
got_z_torque = zone.tidal_torque_z(true);
std::ostringstream message;
message << "For e = " << e
<< " tidal power = " << got_tidal_power
<< ", expected: " << expected_tidal_power
<< "; difference: " << (got_tidal_power
-
expected_tidal_power)
<< " > " << abs_tolerance;
TEST_ASSERT_MSG(
check_diff(got_tidal_power,
expected_tidal_power,
0.0,
abs_tolerance),
message.str().c_str()
);
TEST_ASSERT_MSG(
check_diff(got_x_torque,
0.0,
0.0,
1e-15),
"Non-zero x-torque for aligned zone!"
);
TEST_ASSERT_MSG(
check_diff(got_y_torque,
0.0,
0.0,
1e-15),
"Non-zero y-torque for aligned zone!"
);
message.str("");
message << "For e = " << e
<< " tidal Z torque = " << got_z_torque
<< ", expected: " << expected_z_torque
<< "; difference: " << (got_z_torque
-
expected_z_torque)
<< " > " << abs_tolerance;
TEST_ASSERT_MSG(
check_diff(got_z_torque,
expected_z_torque,
0.0,
abs_tolerance),
message.str().c_str()
);
}
}
void test_TidalTorquePower::test_convergence()
{
const unsigned MAX_E_ORDER=100;
std::cout << std::setw(25) << "e";
for(unsigned e_order = 0; e_order <= MAX_E_ORDER; e_order += 10) {
std::ostringstream order_str;
order_str << "[O(e^" << e_order << ")]";
std::cout << std::setw(25) << "dE_dt" + order_str.str()
<< std::setw(25) << "dLz_dt" + order_str.str();
}
std::cout << std::endl;
std::valarray<double> one_poly(1.0, 1);
ConstPhaseLagZone zone(1.0, one_poly, one_poly, one_poly);
zone.configure(true,//initialize
1.0,//age
1.0,//orbital frequency
0.0,//eccentricity
1.0,//orbital_angmom
0.0,//spin
0.0,//inclination
0.0,//periapsis
true);//spin_is_freq
Planet::Planet planet(1.0, 1.0);
BinarySystem dummy_system(planet, planet, "");
for(double e = 0.0; e <= 0.99; e += 0.01) {
std::cout << std::setw(25) << e;
for(unsigned e_order = 0; e_order <= MAX_E_ORDER; e_order += 10) {
zone.change_e_order(e_order, dummy_system, true, 0);
zone.configure(false,//initialize
1.0,//age
1.0,//orbital frequency
e,//eccentricity
1.0,//orbital_angomm
0.0,//spin
0.0,//inclination
0.0,//periapsis
true);//spin_is_freq
std::cout << std::setw(25) << zone.tidal_power(true)
<< std::setw(25) << zone.tidal_torque_z(true);
}
std::cout << std::endl;
}
}
test_TidalTorquePower::test_TidalTorquePower()
{
TEST_ADD(test_TidalTorquePower::test_aligned_orbit);
TEST_ADD(test_TidalTorquePower::test_convergence);
}
}//End Evolve namespace.