Program Listing for File SingleTidalTermZone.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/SingleTidalTermZone.h)
#ifndef __SINGLE_TIDAL_TERM_ZONE_H
#define __SINGLE_TIDAL_TERM_ZONE_H
#include "PolynomialEvolutionZone.h"
namespace Evolve {
class SingleTidalTermZone : public PolynomialEvolutionZone {
private:
int
__orbital_frequency_multiplier,
__spin_frequency_multiplier;
double __phase_lag;
public:
SingleTidalTermZone(
int orbital_frequency_multiplier,
int spin_frequency_multiplier,
double phase_lag,
const std::valarray<double> &mass_coefficients,
const std::valarray<double> &radius_coefficients,
const std::valarray<double> &inertia_coefficients
) :
PolynomialEvolutionZone(mass_coefficients,
radius_coefficients,
inertia_coefficients),
__orbital_frequency_multiplier(orbital_frequency_multiplier),
__spin_frequency_multiplier(spin_frequency_multiplier),
__phase_lag(phase_lag)
{}
double modified_phase_lag(int orbital_frequency_multiplier,
int spin_frequency_multiplier,
double forcing_frequency,
Dissipation::QuantityEntry entry,
double &above_lock_value) const
{
double result;
if(entry != Dissipation::NO_DERIV)
result = 0.0;
else {
if(
orbital_frequency_multiplier == __orbital_frequency_multiplier
&&
spin_frequency_multiplier == __spin_frequency_multiplier
)
result = __phase_lag;
else if(
orbital_frequency_multiplier == -__orbital_frequency_multiplier
&&
spin_frequency_multiplier == -__spin_frequency_multiplier
)
result = -__phase_lag;
else
result = 0.0;
}
if(forcing_frequency == 0) {
if(spin_frequency_multiplier >= 0) {
above_lock_value = -result;
return result;
} else {
above_lock_value = result;
return -result;
}
} else {
return result;
}
}
bool dissipative() const {return true;}
};//End SingleTidalTermZone class.
}//End Evolve namespace.
#endif