Program Listing for File EvolvingStellarZone.h

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

#ifndef __EVOLVING_STELLAR_ZONE_H
#define __EVOLVING_STELLAR_ZONE_H

#include "../Core/SharedLibraryExportMacros.h"
#include "../Evolve/BrokenPowerlawPhaseLagZone.h"
#include "../Core/Functions.h"
#include "../StellarEvolution/EvolvingStellarQuantity.h"

#include <initializer_list>

namespace Star {

    class LIB_PUBLIC EvolvingStellarZone :
        virtual public Evolve::BrokenPowerlawPhaseLagZone
    {
    private:
        double __current_age;

        mutable std::vector< const Core::FunctionDerivatives* >
            __current_age_quantities;

        const std::vector< const StellarEvolution::EvolvingStellarQuantity* >
            __evolving_quantities;

        void reset_current_quantities();

    public:
        EvolvingStellarZone(
            std::initializer_list<
                const StellarEvolution::EvolvingStellarQuantity*
            > evolving_quantities
        ) :
            __current_age(Core::NaN),
            __current_age_quantities(evolving_quantities.size(), NULL),
            __evolving_quantities(evolving_quantities)
        {}

        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
        );

        //__current_age_quantities if already present.
        double current_age_quantity(
            size_t quantity,

            unsigned deriv_order=0
        ) const;

        double any_age_quantity(
            size_t quantity,

            double age,

            unsigned deriv_order=0
        ) const;

        double current_age() {return __current_age;}

        void reached_critical_age(double age);

        double next_stop_age() const;

        double min_interp_age() const;

        virtual void select_interpolation_region(double age) const;

        ~EvolvingStellarZone();
    };//End EvolvingStellarZone class.

}//End Star namespace.

#endif