Program Listing for File SaturatingSkumanichWindBody.h¶
↰ Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Star/SaturatingSkumanichWindBody.h)
#ifndef __SATURATING_SKUMANICH_WIND_BODY_H
#define __SATURATING_SKUMANICH_WIND_BODY_H
#include "../Core/SharedLibraryExportMacros.h"
#include "../Evolve/DissipatingBody.h"
#include "../Evolve/BinarySystem.h"
namespace Star {
class LIB_PUBLIC SaturatingSkumanichWindBody :
virtual public Evolve::DissipatingBody {
private:
double __wind_strength,
__saturation_freq;
bool __saturated;
std::list<bool> __saturation_evolution;
#ifndef NDEBUG
bool __detected_saturation;
#endif
public:
SaturatingSkumanichWindBody(
double wind_strength,
double saturation_frequency
) :
__wind_strength(wind_strength),
__saturation_freq(saturation_frequency)
#ifndef NDEBUG
, __detected_saturation(false)
#endif
{}
double angular_momentum_loss(
Evolve::Dissipation::QuantityEntry entry = Evolve::Dissipation::NO_DERIV
) const;
double saturation_frequency() {return __saturation_freq;}
void detect_saturation()
{
__saturated = (std::abs(spin_frequency()) > __saturation_freq);
#ifndef NDEBUG
__detected_saturation = true;
#endif
}
bool saturated() {return __saturated;}
void saturation_freq_crossed(
short
#ifndef NDEBUG
deriv_sign
#endif
)
{
assert(deriv_sign == (__saturated ? -1 : 1));
__saturated = !__saturated;
}
virtual void add_to_evolution()
{
__saturation_evolution.push_back(__saturated);
Evolve::DissipatingBody::add_to_evolution();
}
virtual void rewind_evolution(
unsigned nsteps
)
{
for(unsigned i = 0; i < nsteps; ++i)
__saturation_evolution.pop_back();
Evolve::DissipatingBody::rewind_evolution(nsteps);
}
virtual void reset_evolution()
{
__saturation_evolution.clear();
Evolve::DissipatingBody::reset_evolution();
}
virtual Evolve::CombinedStoppingCondition *stopping_conditions(
Evolve::BinarySystem &system,
bool primary
);
const std::list<bool> &wind_saturation_evolution() const
{return __saturation_evolution;}
void spin_jumped()
{
detect_saturation();
Evolve::DissipatingBody::spin_jumped();
}
virtual ~SaturatingSkumanichWindBody() {}
};//End SaturatingSkumanichWindBody class.
}//End Star namespace.
#endif