Program Listing for File testOrbitSolver.h

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/testOrbitSolver.h)

#ifndef __TEST_ORBIT_SOLVER_H
#define __TEST_ORBIT_SOLVER_H

#include "TransformedSolution.h"
#include "RealEvolutionQuantity.h"
#include "ExpectedEvolutionMode.h"
#include "Oblique10LinearQuantity.h"
#include "Oblique20LinearQuantity.h"
#include "InverseLinearLconvEvolution.h"
#include "ConservedLEObliquityEvolution.h"
#include "../../Evolve/OrbitSolver.h"
#include "../../Star/EvolvingStar.h"
#include "../../Planet/Planet.h"
#include "../../Evolve/DiskBinarySystem.h"
#include "../../Core/AstronomicalConstants.h"
#include "../shared/PolynomialEvolution.h"
#include "../shared/Common.h"
#include "../shared/MakeStar.h"
#include <iostream>
#include <vector>

namespace Evolve {

    class test_OrbitSolver : public Test::Suite {
    private:
        Evolve::OrbitSolver *__solver;

        Evolve::DiskBinarySystem *__system;

        Star::InterpolatedEvolutionStar *__star;

        Planet::Planet *__primary_planet;

        std::vector< const Core::OneArgumentDiffFunction* > __temp_functions;

        //component.
        void set_single_component_dissipation(
            double min_frequency,

            double max_frequency,

            double decay_scale,

            double phase_lag = 1.0e-5
        );

        void make_single_component_star(
            const StellarEvolution::Interpolator &evolution,

            double wind_strength,

            double wind_sat_freq,

            double coupling_timescale,

            double min_frequency,

            double max_frequency,

            double decay_scale,

            double phase_lag = 1.0e-5
        );

        void evolve(
            double wdisk,
            double tdisk,
            double initial_a,
            const double *initial_Lstar,
            double initial_incl = 0.0,
            double secondary_mass = 1.0,
            double tsecondary = Core::NaN,
            double max_age = MAX_AGE,
            double secondary_radius = 1.0,
            double precision = 1e-6,
            double max_step_factor = 1e-3
        );

        std::vector< const std::list<double> *> get_evolution() const;

        void test_solution(
            const std::vector< const std::list<double> * > &
                tabulated_real_quantities,
            std::vector<const Core::OneArgumentDiffFunction *>
                expected_real_quantities,
            const ExpectedEvolutionMode<Core::EvolModeType> &
                expected_evol_mode,
            const ExpectedEvolutionMode<bool> &expected_wind_mode,
            double min_age,
            double max_age,
            bool debug_mode = false
        );

        void test_no_planet_scenario(
            const StellarEvolution::Interpolator &stellar_evol,
            double *initial_Lstar,
            double windK,
            double wind_sat_freq,
            double core_env_coupling_time,
            std::vector<const Core::OneArgumentDiffFunction *>
                &expected_evolution,
            const ExpectedEvolutionMode<bool> &expected_wind_mode,
            double max_age = MAX_AGE,
            bool debug_mode = false
        );

        std::vector<const Core::OneArgumentDiffFunction *>
            calculate_expected_unlocked_evolution(
                double phase_lag,

                double secondary_mass,

                bool decaying=true
            );

        std::vector<const Core::OneArgumentDiffFunction *>
            calculate_expected_disklocked_to_fast_to_locked(
                double lgQ,

                double tdisk,

                double async,

                double tsync,

                double tend,

                bool include_disk_lock=true
            );

        std::vector<const Core::OneArgumentDiffFunction *>
            calculate_expected_polar_1_0(
                double tdisk,

                double wstar,

                double worb
            );

        std::vector<const Core::OneArgumentDiffFunction *>
            calculate_expected_polar_2_0(
                double tdisk,

                double wstar,

                double worb,

                double phase_lag,

                double &lconv_decay_rate,

                //envolve).
                double &semimajor
            );

        std::vector<const Core::OneArgumentDiffFunction *>
            calculate_expected_oblique_m_0(
                unsigned m,

                double tdisk,

                double worb,

                double initial_inc,

                double initial_wstar,

                double phase_lag,

                double &min_wstar
            );

    protected:
        void setup();

        void tear_down();
    public:
        test_OrbitSolver();

        void test_disk_locked_no_stellar_evolution();

        void test_disk_locked_with_stellar_evolution();

        void test_no_planet_evolution();

        //
        void test_unlocked_evolution();

        void test_locked_evolution();

        void test_disklocked_to_locked_to_noplanet();

        void test_disklocked_to_fast_to_noplanet();

        void test_disklocked_to_fast_to_locked();

        void test_disklocked_to_locked_to_fast();

        void test_polar_1_0_evolution();

        void test_polar_2_0_evolution();

        void test_oblique_1_0_evolution();

        void test_oblique_2_0_evolution();
    };//End test_OrbitSolver class.

}//End Evolve namespace.


#endif