Program Listing for File testEvolve.cpp¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/testEvolve.cpp)
#include "testGravitationalPotential.h"
#include "testOrbitSolver.h"
#include "testTidalTorquePower.h"
#include "testDifferentialEquations.h"
#ifdef STANDALONE
#include <iostream>
#include <iomanip>
class SinFunction : public Core::OneArgumentDiffFunction {
private:
double __frequency, __phase;
public:
SinFunction(double frequency = 1.0, double phase = 0.0) :
__frequency(frequency), __phase(phase) {}
double operator()(double x) const
{return std::sin(__frequency * x + __phase);}
double range_high() const {return Core::Inf;}
double range_low() const {return -Core::Inf;}
Core::InterpSolutionIterator crossings(double = 0) const
{
throw Core::Error::Runtime(
"Finding all solutinos of Sin is not implemented."
);
};
const Core::FunctionDerivatives *deriv(double x) const
{
return new Core::CubicSplineDerivatives(
operator()(x),
__frequency * std::cos(__frequency * x + __phase),
-std::pow(__frequency, 2) * operator()(x)
);
}
};
int main()
{
std::cout.setf(std::ios_base::scientific);
std::cout.precision(16);
/*
SinFunction sin_function;
InverseFunction arcsin_function(sin_function, -1.0);
std::cout << std::setw(25) << "x"
<< std::setw(25) << "f(x)"
<< std::setw(25) << "inverted"
<< std::setw(25) << "arcsin(x)"
<< std::endl;
for(double x = -1.0; x <= 1.0; x+=1e-2) {
double solution = arcsin_function(x),
expected = std::asin(x);
solution -= 2.0 * M_PI * std::floor(solution / (2.0 * M_PI));
expected -= 2.0 * M_PI * std::floor(expected / (2.0 * M_PI));
if(solution > 0.5 * M_PI && solution < 1.5 * M_PI)
solution = 3.0 * M_PI - solution;
std::cout << std::setw(25) << x
<< std::setw(25) << sin_function(solution)
<< std::setw(25) << solution
<< std::setw(25) << expected
<< std::endl;
}
return 0;
Oblique10LinearQuantity q10(1.05 * M_PI, M_PI, 0.1 * M_PI);
Oblique20LinearQuantity q20(1.05 * M_PI, M_PI, 0.1 * M_PI);
std::cerr << std::setw(25) << "S"
<< std::setw(25) << "L10(S)"
<< std::setw(25) << "L20(S)"
<< std::endl;
for(double s = 0.05 * M_PI; s <= 0.1 * M_PI; s+= 0.01 * M_PI)
std::cerr << std::setw(25) << s
<< std::setw(25) << q10(s)
<< std::setw(25) << q20(s)
<< std::endl;
return 0;
*/
Evolve::TidalPotentialTerms::read_eccentricity_expansion(
"eccentricity_expansion_coef_O200.txt"
);
std::cout.setf(std::ios_base::scientific);
std::cout.precision(16);
std::cerr.setf(std::ios_base::scientific);
std::cerr.precision(16);
Test::TextOutput output(Test::TextOutput::Verbose);
Test::Suite all_tests;
all_tests.add(
std::auto_ptr<Test::Suite>(new Evolve::test_GravitationalPotential)
);
all_tests.add(
std::auto_ptr<Test::Suite>(new Evolve::test_TidalTorquePower)
);
all_tests.add(
std::auto_ptr<Test::Suite>(new Evolve::test_DifferentialEquations)
);
all_tests.add(
std::auto_ptr<Test::Suite>(new Evolve::test_OrbitSolver)
);
return (all_tests.run(output)
? EXIT_SUCCESS
: EXIT_FAILURE);
}
#endif