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