Program Listing for File TidalPotentialTerms.h

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Evolve/TidalPotentialTerms.h)

#ifndef __TIDAL_POTENTIAL_TERMS_H
#define __TIDAL_POTENTIAL_TERMS_H

#include <cmath>
#include <valarray>
#include "EccentricityExpansionCoefficients.h"
#include "../Core/Common.h"

namespace Evolve {
    class LIB_PUBLIC TidalPotentialTerms {
    private:
        unsigned __e_order;

        static EccentricityExpansionCoefficients __pms;

        static const double __Umm_coef[][3];

        double __Ummp_inclination;

        double __arg_of_periapsis;

        std::valarray< std::valarray<double> >
            __Ummp,

            __Ummp_deriv;

    public:

        TidalPotentialTerms();

        void change_e_order(unsigned new_e_order)
        {__e_order = new_e_order;}

        unsigned current_e_order() const
        {return __e_order;}

        void configure(double inclination, double arg_of_periapsis = 0);

        void operator()(
            double e,

            int m,

            int mp,

            std::complex<double> &no_deriv,

            std::complex<double> &inclination_deriv,

            std::complex<double> &eccentricity_deriv,

            std::complex<double> &highest_e_order_term
        ) const;

        void operator()(
            double e,

            int m,

            int mp,

            double &no_deriv,

            double &inclination_deriv,

            double &eccentricity_deriv,

            double &highest_e_order_term
        ) const;

        static void read_eccentricity_expansion(const std::string &fname)
        {__pms.read(fname);}

        static unsigned max_e_order()
        {return __pms.max_e_power();}
    }; //End TidalPotentialTerms class.
} //End Evolve namespace

#endif