Planetary Orbital Evolution due to Tides
Orbital evolution of two objects experiencing tides
SpinOrbitLockInfo.h
Go to the documentation of this file.
1 
8 #ifndef __SPIN_ORBIT_LOCK_INFO
9 #define __SPIN_ORBIT_LOCK_INFO
10 
11 #include "../Core/SharedLibraryExportMacros.h"
12 #include <iostream>
13 
14 namespace Evolve {
15 
20  //frequencies, not only when the orbital and spin periods are the same. In
25  class LIB_LOCAL SpinOrbitLockInfo {
26  private:
28  int __orbital_freq_mult,
29 
32 
49 
50  public:
54  int orbital_freq_mult=0,
55 
57  int spin_freq_mult=0,
58 
61  short lock_direction=-1)
62  {set_lock(orbital_freq_mult, spin_freq_mult, lock_direction);}
63 
65  void set_lock(
67  int orbital_freq_mult,
68 
70  int spin_freq_mult,
71 
74  short lock_direction=0);
75 
78  double spin(double orbital_frequency) const
79  {return (orbital_frequency*__orbital_freq_mult)/__spin_freq_mult;}
80 
82  bool operator()(
84  int orbital_freq_mult,
85 
87  int spin_freq_mult) const
88  {return (__lock_direction ? false :
89  term(orbital_freq_mult, spin_freq_mult));}
90 
93  bool term(
95  int orbital_freq_mult,
96 
98  int spin_freq_mult) const
99  {return (orbital_freq_mult * __spin_freq_mult
100  ==
101  spin_freq_mult * __orbital_freq_mult);}
102 
104  operator bool() const {return __lock_direction==0;}
105 
108  short lock_direction() const {return __lock_direction;}
109 
111  void lock_direction(short value) {__lock_direction=value;}
112 
114  int orbital_frequency_multiplier() const {return __orbital_freq_mult;}
115 
117  int spin_frequency_multiplier() const {return __spin_freq_mult;}
118 
121  bool operator==(const SpinOrbitLockInfo &rhs) const;
122  };//End SpinOrbitLockInfo class.
123 
125  LIB_LOCAL std::ostream &operator<<(std::ostream &os,
126  const SpinOrbitLockInfo &lock);
127 
128 } //End Evolve namespace.
129 
130 #endif
int __spin_freq_mult
The multiplier in front of the spin frequency in the lock.
SpinOrbitLockInfo(int orbital_freq_mult=0, int spin_freq_mult=0, short lock_direction=-1)
Define which tidal dissipation term is in a lock.
std::ostream & operator<<(std::ostream &os, const ZoneEvolutionQuantities &evol_var)
More civilized output for EvolVarType variables.
int orbital_frequency_multiplier() const
The multiplier in front of the orbital frequency in the lock.
short __lock_direction
Should a lock be assumed, and if so from which direction is it approached?
Orientations of zones of bodies in a binary system.
double spin(double orbital_frequency) const
Spin frequency at exactly the lock that corresponds to the given orbital frequency.
int spin_frequency_multiplier() const
The multiplier in front of the spin frequency in the lock.
bool operator()(int orbital_freq_mult, int spin_freq_mult) const
Is the given tidal dissipation term one of the locked terms?
bool term(int orbital_freq_mult, int spin_freq_mult) const
void lock_direction(short value)
Set the lock direction to the given value.
Defines a lock between the spin of a dissipating body and the orbit.