Program Listing for File BreakLockCondition.h

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

#ifndef __BREAK_LOCK_CONDITION_H
#define __BREAK_LOCK_CONDITION_H

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

namespace Evolve {

    class BinarySystem;

    class LIB_LOCAL BreakLockCondition : public StoppingCondition {
    private:
        BinarySystem &__system;

        unsigned __locked_zone_index;
    public:
        BreakLockCondition(
            BinarySystem &system,

            unsigned locked_zone_index
        ) :
            __system(system),
            __locked_zone_index(locked_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 size_t num_subconditions() const {return 2;}

        StoppingConditionType type(unsigned =0) const {return BREAK_LOCK;}

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

        virtual short expected_crossing_deriv_sign(
            unsigned index = 0
        ) const
        {
            assert(index <= 1);

            return (index == 0 ? -1 : 1);
        }

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

    }; //End BreakLockCondition class.

} //End Evolve namespace.

#endif