Program Listing for File WindSaturationCondition.h

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

#ifndef __WIND_SATURATION_CONDITION_H
#define __WIND_SATURATION_CONDITION_H

#include "../Core/SharedLibraryExportMacros.h"
#include "../Evolve/StoppingCondition.h"
#include "SaturatingSkumanichWindBody.h"

namespace Star {
    class LIB_LOCAL WindSaturationCondition : public Evolve::StoppingCondition {
    private:
        double __saturation_freq;

        SaturatingSkumanichWindBody &__body;

        const Evolve::DissipatingBody &__other_body;

        bool __primary;
    public:
        WindSaturationCondition(
            SaturatingSkumanichWindBody &body,

            const Evolve::DissipatingBody &other_body,

            bool primary,

            bool saturated
        ) :
            StoppingCondition((saturated ? -1 : 1)),
            __saturation_freq(body.saturation_frequency()),
            __body(body),
            __other_body(other_body),
            __primary(primary)
        {}

        std::valarray<double> operator()(
            Core::EvolModeType evol_mode,
            const std::valarray<double> &orbit,
            const std::valarray<double> &derivatives,
            std::valarray<double> &stop_deriv
        ) const;

        Evolve::StoppingConditionType type(unsigned =0) const
        {return Evolve::WIND_SATURATION;}

        void reached(short deriv_sign, unsigned index=0)
        {
            Evolve::StoppingCondition::reached(deriv_sign, index);
            __body.saturation_freq_crossed(deriv_sign);
        }

        virtual std::string describe(int index = -1) const;

    };//End WindSaturationCondition class.

}//End Star namespace.
#endif