Program Listing for File LagSpinBreakCondition.h

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

#ifndef __CRITICAL_SPIN_CONDITION_H
#define __CRITICAL_SPIN_CONDITION_H

#include "../Core/SharedLibraryExportMacros.h"
#include "StoppingCondition.h"
#include "DissipatingBody.h"
#include "../Core/Error.h"
#include <vector>

namespace Evolve {

    class BrokenPowerlawPhaseLagZone;

    class LIB_LOCAL LagSpinBreakCondition : public StoppingCondition {
    private:
        BrokenPowerlawPhaseLagZone &__zone;

        const DissipatingBody
            &__body,

            &__other_body;

        bool __primary;

        unsigned __zone_index;

        std::vector<double>::size_type __powerlaw_index;

        unsigned __num_subconditions;

        void set_num_subconditions();

        double derivative(
            double surf_angmom_deriv,

            double wcritical
        ) const;

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

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

    public:
        LagSpinBreakCondition(
            BrokenPowerlawPhaseLagZone &zone,

            const DissipatingBody &body,

            const DissipatingBody &other_body,

            bool primary,

            unsigned zone_index
        );

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

        virtual void reached(short deriv_sign, unsigned index = 0);

        virtual size_t num_subconditions() const
        {return __num_subconditions;}

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

        virtual short expected_crossing_deriv_sign(
            unsigned index = 0
        ) const;

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

    };//End LagSpinBreakCondition class.

}//End Evolve namespace.

#endif