Program Listing for File PolynomialEvolutionZone.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/PolynomialEvolutionZone.h)
#ifndef __POLYNOMIAL_EVOLUTION_ZONE_H
#define __POLYNOMIAL_EVOLUTION_ZONE_H
#include "../../Evolve/DissipatingZone.h"
#include <gsl/gsl_poly.h>
namespace Evolve {
class PolynomialEvolutionZone : public DissipatingZone {
private:
std::valarray<double>
__mass_coefficients,
__radius_coefficients,
__inertia_coefficients;
std::valarray<double>
__current_mass,
__current_radius,
__current_inertia;
double evaluate_polynomial(
const std::valarray<double> &coefficients,
double age,
int deriv_order
) const;
public:
PolynomialEvolutionZone(
const std::valarray<double> &mass_coefficients,
const std::valarray<double> &radius_coefficients,
const std::valarray<double> &inertia_coefficients
):
__mass_coefficients(mass_coefficients),
__radius_coefficients(radius_coefficients),
__inertia_coefficients(inertia_coefficients),
__current_mass(Core::NaN, 3),
__current_radius(Core::NaN, 3),
__current_inertia(Core::NaN, 3)
{}
virtual void configure(bool initialize,
double age,
double orbital_frequency,
double eccentricity,
double orbital_angmom,
double spin,
double inclination,
double periapsis,
bool spin_is_frequency);
double outer_mass(int deriv_order=0) const
{return __current_mass[deriv_order];}
double outer_mass(double age, int deriv_order=0) const
{return evaluate_polynomial(__mass_coefficients, age, deriv_order);}
double outer_radius(int deriv_order=0) const
{return __current_radius[deriv_order];}
double outer_radius(double age, int deriv_order=0) const
{return evaluate_polynomial(__radius_coefficients, age, deriv_order);}
virtual double moment_of_inertia(int deriv_order=0) const
{return __current_inertia[deriv_order];}
virtual double moment_of_inertia(double age, int deriv_order=0) const
{return evaluate_polynomial(__inertia_coefficients, age, deriv_order);}
double love_coefficient(int, int, Dissipation::QuantityEntry) const
{return 0.0;}
};//End PolynomialEvolutionZone class.
} //End Evolve namespace.
#endif