Program Listing for File SaturatingSkumanichWindBody.cpp

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/Star/SaturatingSkumanichWindBody.cpp)

#define BUILDING_LIBRARY
#include "SaturatingSkumanichWindBody.h"
#include "WindSaturationCondition.h"

namespace Star {

    double SaturatingSkumanichWindBody::angular_momentum_loss(
            Evolve::Dissipation::QuantityEntry entry
    ) const
    {
        double result = (
            __wind_strength*std::sqrt(radius() / mass())
            *
            (
                __saturated
                ? spin_frequency() * std::pow(__saturation_freq, 2)
                : std::pow(spin_frequency(), 3)
            )
        );
        double freq_power = (__saturated ? 1.0 : 3.0);
        switch(entry) {
            case Evolve::Dissipation::NO_DERIV :
                return result;
            case Evolve::Dissipation::SPIN_FREQUENCY :
                return freq_power * result / spin_frequency();
            case Evolve::Dissipation::RADIUS :
                return result / (2.0 * radius());
            case Evolve::Dissipation::MOMENT_OF_INERTIA :
                return -freq_power * result / zone(0).moment_of_inertia();
            case Evolve::Dissipation::SPIN_ANGMOM :
                return freq_power * result / zone(0).angular_momentum();
            default :
                return 0;
        }
    }

    Evolve::CombinedStoppingCondition *
        SaturatingSkumanichWindBody::stopping_conditions(
            Evolve::BinarySystem &system,
            bool primary
        )
    {
#ifndef NDEBUG
        if(primary) assert(this == &(system.primary()));
        else assert(this == &(system.secondary()));
        assert(__detected_saturation);
#endif
        Evolve::CombinedStoppingCondition *result =
            new Evolve::CombinedStoppingCondition();
        if(system.evolution_mode() != Core::LOCKED_SURFACE_SPIN)
            (*result) |= new WindSaturationCondition(
                *this,
                (primary ? system.secondary() : system.primary()),
                primary,
                __saturated
            );
        (*result) |= Evolve::DissipatingBody::stopping_conditions(system,
                                                                  primary);
        return result;
    }

}//End Star namespace.