Planetary Orbital Evolution due to Tides
Orbital evolution of two objects experiencing tides
Star::EvolvingStellarZone Class Reference

Base class for zones of low mass evolving stars. More...

#include <EvolvingStellarZone.h>

+ Inheritance diagram for Star::EvolvingStellarZone:
+ Collaboration diagram for Star::EvolvingStellarZone:

Public Member Functions

 EvolvingStellarZone (std::initializer_list< const StellarEvolution::EvolvingStellarQuantity * > 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)
 Defines the current orbit, triggering re-calculation of all quantities. More...
 
double current_age_quantity (size_t quantity, unsigned deriv_order=0) const
 The current age value of the given quantity (or its derivative). More...
 
double any_age_quantity (size_t quantity, double age, unsigned deriv_order=0) const
 The value of the given quantity (or its derivative) at an arbitrary age. More...
 
double current_age ()
 Return the last age with which ::configure() was called. More...
 
void reached_critical_age (double age)
 Change the body as necessary at the given age. More...
 
double next_stop_age () const
 The next age when the evolution needs to be stopped for a change in one of the bodies. More...
 
double min_interp_age () const
 The minimum age at wich zone quantities can be querried. More...
 
virtual void select_interpolation_region (double age) const
 Prepare the zone quantities for interpolation around the given age. More...
 
 ~EvolvingStellarZone ()
 Delete any dynamically allocated memory. More...
 
- Public Member Functions inherited from Evolve::BrokenPowerlawPhaseLagZone
 BrokenPowerlawPhaseLagZone ()
 Create a non-dissipative zone. Must call setup() if the zone is dissipative. More...
 
void setup (const std::vector< double > &tidal_frequency_breaks, const std::vector< double > &spin_frequency_breaks, const std::vector< double > &tidal_frequency_powers, const std::vector< double > &spin_frequency_powers, double reference_phase_lag, double inertial_mode_enhancement=1.0, double inertial_mode_sharpness=10.0)
 Seup the zone with the given breaks/powers and inertial mode enhancement. Continuous accress all breaks. Must only be called before use. More...
 
virtual double modified_phase_lag (int orbital_frequency_multiplier, int spin_frequency_multiplier, double forcing_frequency, Dissipation::QuantityEntry entry, double &above_lock_value) const
 Should return the tidal phase lag times the love number for the given tidal term (or one of its derivatives). More...
 
virtual double love_coefficient (int, int, Dissipation::QuantityEntry) const
 Should return the corresponding component of the love coefficient (Lai 2012 Equation 24). More...
 
virtual CombinedStoppingConditionstopping_conditions (BinarySystem &system, bool primary, unsigned zone_index)
 Conditions detecting the next possible discontinuities in the evolution due to this zone. More...
 
virtual void change_e_order (unsigned new_e_order, BinarySystem &system, bool primary, unsigned zone_index)
 Changes the order of the eccentricity expansion performed. More...
 
virtual bool dissipative () const
 Return true iff disspation has been defined for the zone. More...
 
virtual bool can_lock () const
 Should return true iff the zone's dissipation is discontinuous at zero frequency. More...
 
 ~BrokenPowerlawPhaseLagZone ()
 Cleanup. More...
 
- Public Member Functions inherited from Evolve::DissipatingZone
void set_evolution_rates (double angular_momentum, double inclination, double periapsis)
 Set evolution rates for this zone's properties for storing in the eveloution. More...
 
double forcing_frequency (int orbital_frequency_multiplier, int spin_frequency_multiplier, double orbital_frequency) const
 The tidal forcing frequency for the given term and orbital frequency. More...
 
void set_reference_zone_angmom (double reference_angmom)
 Defines the angular momentum of the reference zone for single body evolution. More...
 
double periapsis_evolution (const Eigen::Vector3d &orbit_torque, const Eigen::Vector3d &zone_torque, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV, const Eigen::Vector3d &orbit_torque_deriv=Eigen::Vector3d(), const Eigen::Vector3d &zone_torque_deriv=Eigen::Vector3d())
 The rate at which the periapsis of the orbit/reference zone in this zone's equatorial plane is changing. More...
 
double inclination_evolution (const Eigen::Vector3d &orbit_torque, const Eigen::Vector3d &zone_torque, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV, const Eigen::Vector3d &orbit_torque_deriv=Eigen::Vector3d(), const Eigen::Vector3d &zone_torque_deriv=Eigen::Vector3d())
 The rate at which the inclination between this zone and the orbit is changing. More...
 
virtual bool locked (int orbital_frequency_multiplier, int spin_frequency_multiplier) const
 Should return true iff the given term is presently locked. More...
 
virtual bool locked () const
 Should return true iff any tidal term is locked. More...
 
const SpinOrbitLockInfolock_held () const
 The currntly held lock. More...
 
void release_lock ()
 Update the zone as necessary when the held lock disappears from the expansion. More...
 
void release_lock (short direction)
 Update the zone as necessary when the held lock is broken. More...
 
void set_lock (int orbital_frequency_multiplier, int spin_frequency_multiplier)
 Locks the zone spin to the orbit in the given ratio. More...
 
virtual double moment_of_inertia (int deriv_order=0) const =0
 Moment of inertia of the zone or its age derivative at the age of last configure() call. More...
 
virtual double moment_of_inertia (double age, int deriv_order=0) const =0
 The moment of inertia of the zone or its age derivative at a specified age (no configure necessary). More...
 
double spin_frequency () const
 The spin frequency of the given zone. More...
 
double angular_momentum () const
 The angular momentum of the given zone in \(M_\odot R_\odot^2\). More...
 
double tidal_power (bool above, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 The dimensionless tidal power or one of its derivatives. More...
 
double tidal_power (double above_fraction, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 Same as tidal_power(bool, Dissipation::QuantityEntry), but using the predefined mix of below/above contributions. More...
 
double tidal_torque_x (bool above, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 The dimensionless tidal torque along x. More...
 
double tidal_torque_x (double above_fraction, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 Same as tidal_torque_x(bool, Dissipation::QuantityEntry) but below and above contributions mixed. More...
 
double tidal_torque_y (bool above, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 The dimensionless torque along y. More...
 
double tidal_torque_y (double above_fraction, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 Same as tidal_torque_y(bool, Dissipation::QuantityEntry) but below and above contributions mixed. More...
 
double tidal_torque_z (bool above, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 The dimensionless tidal torque along z. More...
 
double tidal_torque_z (double above_fraction, Dissipation::QuantityEntry entry=Dissipation::NO_DERIV) const
 Same as tidal_torque_z(bool, Dissipation::QuantityEntry) but below and above contributions mixed. More...
 
virtual double outer_radius (int deriv_order=0) const =0
 Outer radius of the zone or its derivative (per last. More...
 
virtual double outer_radius (double age, int deriv_order=0) const =0
 Same as outer_radius(int) but may be evaluated at a different age than for last confgure(). More...
 
virtual double outer_mass (int deriv_order=0) const =0
 Mass coordinate of the zone's outer ouboundary or its derivative. More...
 
virtual double outer_mass (double age, int deriv_order=0) const =0
 Same as outer_mass(int), but may be evaluated at a different age than last configure(). More...
 
virtual unsigned eccentricity_order () const
 
virtual void add_to_evolution ()
 Appends the state defined by last configure(), to the evolution. More...
 
virtual void rewind_evolution (unsigned nsteps)
 Discards the last steps from the evolution. More...
 
virtual void reset_evolution ()
 Discards all evolution. More...
 
const std::list< double > & get_evolution_real (ZoneEvolutionQuantities quantity) const
 The tabulated evolution of a real valued quantity so far. More...
 
const std::list< int > & get_evolution_integer (ZoneEvolutionQuantities quantity) const
 The tabulated evolution of an integer quantity so far. More...
 
unsigned locked_zone_index () const
 The index of this zone in the list of locked zones (valid only if locked). More...
 
unsigned & locked_zone_index ()
 Reference to the locked_zone_index() of this zone. More...
 
virtual void spin_jumped ()
 Notifies the zone that its spin just jumped discontinously. More...
 
const SpinOrbitLockInfolock_monitored (bool other=false) const
 Useful for debugging. More...
 
- Public Member Functions inherited from Evolve::ZoneOrientation
 ZoneOrientation (double inclination=Core::NaN, double periapsis=Core::NaN)
 
void configure (double inclination, double periapsis)
 Changes the zone orientation. More...
 
void set_evolution_rates (double inclination, double periapsis)
 
double inclination (bool evolution_rate=false) const
 The angle between the angular momenta of the zone and the orbit. More...
 
double periapsis (bool evolution_rate=false) const
 The argument of periapsis of this zone minus the reference zone's. More...
 

Private Member Functions

void reset_current_quantities ()
 Forgets any previously calculated quantities for the current age. More...
 

Private Attributes

double __current_age
 The age for the last configure() call. More...
 
std::vector< const Core::FunctionDerivatives *> __current_age_quantities
 Pre-computed values and derivatives for quantities which only depend on age at the current age. More...
 
const std::vector< const StellarEvolution::EvolvingStellarQuantity *> __evolving_quantities
 The quantities describing the stellar zone. More...
 

Additional Inherited Members

- Protected Member Functions inherited from Evolve::DissipatingZone
void initializing (bool flag)
 Notify the zone that it is in the process of initializing or not. More...
 
void configure_spin (double spin, bool spin_is_frequency)
 Configures only the spin of the zone. More...
 

Detailed Description

Base class for zones of low mass evolving stars.

Definition at line 21 of file EvolvingStellarZone.h.

Constructor & Destructor Documentation

◆ EvolvingStellarZone()

Star::EvolvingStellarZone::EvolvingStellarZone ( std::initializer_list< const StellarEvolution::EvolvingStellarQuantity * >  evolving_quantities)
inline

Create an evolving stellar zone described by the given quantities.

WARNING: All quantities are destroyed by the desctructor.

Parameters
evolving_quantitiesThe quantities describing the zone.

Definition at line 44 of file EvolvingStellarZone.h.

◆ ~EvolvingStellarZone()

Star::EvolvingStellarZone::~EvolvingStellarZone ( )

Delete any dynamically allocated memory.

Definition at line 74 of file EvolvingStellarZone.cpp.

Member Function Documentation

◆ any_age_quantity()

double Star::EvolvingStellarZone::any_age_quantity ( size_t  quantity,
double  age,
unsigned  deriv_order = 0 
) const

The value of the given quantity (or its derivative) at an arbitrary age.

Always computes the value/derivatives.

Parameters
quantityThe index of the quantity to return from within the list provided at construction.
ageThe age at which to evaluate the quantity/derivative.
deriv_orderThe order of the derivitive to return

Definition at line 34 of file EvolvingStellarZone.cpp.

◆ configure()

void Star::EvolvingStellarZone::configure ( bool  initialize,
double  age,
double  orbital_frequency,
double  eccentricity,
double  orbital_angmom,
double  spin,
double  inclination,
double  periapsis,
bool  spin_is_frequency 
)
virtual

Defines the current orbit, triggering re-calculation of all quantities.

Parameters
initializeIs this the first time configure() is invoked?
ageThe age to set the zone to.
orbital_frequencyThe angular velocity of the orbit in rad/day.
eccentricityThe eccentricity of the orbit
orbital_angmomThe absolute value of the angular momentum of the orbit.
spinThe angular (momentum/velocity) of the spin of the zone if the zone is not in a spin-orbit lock (ignored it if is).
inclinationThe inclination of the zone relative to the orbit.
periapsisThe argument of periapsis of the orbit in the equatorial planet of the zone.
spin_is_frequencyIs spin an angular velocity instead of angular momentum?

Reimplemented from Evolve::BrokenPowerlawPhaseLagZone.

Definition at line 49 of file EvolvingStellarZone.cpp.

◆ current_age()

double Star::EvolvingStellarZone::current_age ( )
inline

Return the last age with which ::configure() was called.

Definition at line 119 of file EvolvingStellarZone.h.

◆ current_age_quantity()

double Star::EvolvingStellarZone::current_age_quantity ( size_t  quantity,
unsigned  deriv_order = 0 
) const

The current age value of the given quantity (or its derivative).

Computes the value if necessary or retrieves it from

Parameters
quantityThe index of the quantity to return from within the list provided at construction.
deriv_orderThe order of the derivitive to return

Definition at line 22 of file EvolvingStellarZone.cpp.

◆ min_interp_age()

double Star::EvolvingStellarZone::min_interp_age ( ) const

The minimum age at wich zone quantities can be querried.

Definition at line 100 of file EvolvingStellarZone.cpp.

◆ next_stop_age()

double Star::EvolvingStellarZone::next_stop_age ( ) const
virtual

The next age when the evolution needs to be stopped for a change in one of the bodies.

Reimplemented from Evolve::DissipatingZone.

Definition at line 89 of file EvolvingStellarZone.cpp.

◆ reached_critical_age()

void Star::EvolvingStellarZone::reached_critical_age ( double  age)
virtual

Change the body as necessary at the given age.

Handles things like interpolation discontinuities.

Reimplemented from Evolve::DissipatingZone.

Definition at line 82 of file EvolvingStellarZone.cpp.

◆ reset_current_quantities()

void Star::EvolvingStellarZone::reset_current_quantities ( )
private

Forgets any previously calculated quantities for the current age.

Definition at line 13 of file EvolvingStellarZone.cpp.

◆ select_interpolation_region()

void Star::EvolvingStellarZone::select_interpolation_region ( double  age) const
virtual

Prepare the zone quantities for interpolation around the given age.

After calling this method, requesting values or derivatives outside the range of the continuous region containing this age (see ::discontinuities) fails an assert.

Definition at line 114 of file EvolvingStellarZone.cpp.

Member Data Documentation

◆ __current_age

double Star::EvolvingStellarZone::__current_age
private

The age for the last configure() call.

Definition at line 26 of file EvolvingStellarZone.h.

◆ __current_age_quantities

std::vector< const Core::FunctionDerivatives* > Star::EvolvingStellarZone::__current_age_quantities
mutableprivate

Pre-computed values and derivatives for quantities which only depend on age at the current age.

Definition at line 31 of file EvolvingStellarZone.h.

◆ __evolving_quantities

const std::vector< const StellarEvolution::EvolvingStellarQuantity* > Star::EvolvingStellarZone::__evolving_quantities
private

The quantities describing the stellar zone.

Definition at line 35 of file EvolvingStellarZone.h.


The documentation for this class was generated from the following files: