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