Program Listing for File LagForcingFrequencyBreakCondition.h

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

#ifndef __CRITICAL_FORCING_FREQUENCY_CONDITION_H
#define __CRITICAL_FORCING_FREQUENCY_CONDITION_H

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

namespace Evolve {
    class BrokenPowerlawPhaseLagZone;

    class LIB_LOCAL LagForcingFrequencyBreakCondition :
        public StoppingCondition {
        private:
            int
                __orbital_frequency_multiplier,

                __spin_frequency_multiplier;

            BrokenPowerlawPhaseLagZone &__zone;

            const DissipatingBody
                &__body,

                &__other_body;

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

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

            unsigned __num_subconditions;

            void set_num_subconditions();
        public:
            LagForcingFrequencyBreakCondition(
                BrokenPowerlawPhaseLagZone &zone,

                const DissipatingBody &body,

                const DissipatingBody &other_body,

                int orbital_frequency_multiplier,

                int spin_frequency_multiplier
            );

            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;

            ~LagForcingFrequencyBreakCondition()
            {
#ifndef NDEBUG
                std::cerr << "Destroying: " << describe() << std::endl;
#endif
            }
        };//End LagForcingBreakFrequencyCondition class.

} //End Evolve namespace.

#endif