Program Listing for File ConstPhaseLagZone.h

Return to documentation for file (/home/kpenev/projects/git/poet/poet_src/unit_tests/testEvolve/ConstPhaseLagZone.h)

#ifndef __CONST_PHASE_LAG_H
#define __CONST_PHASE_LAG_H

#include "PolynomialEvolutionZone.h"

namespace Evolve {

    class ConstPhaseLagZone : public PolynomialEvolutionZone {
    private:
        double __phase_lag;
    public:
        ConstPhaseLagZone(
            double phase_lag,

            const std::valarray<double> &mass_coefficients,

            const std::valarray<double> &radius_coefficients,

            const std::valarray<double> &inertia_coefficients
        ) :
            PolynomialEvolutionZone(mass_coefficients,
                                    radius_coefficients,
                                    inertia_coefficients),
            __phase_lag(phase_lag)
        {}

        double modified_phase_lag(int,
                                  int spin_frequency_multiplier,
                                  double forcing_frequency,
                                  Dissipation::QuantityEntry entry,
                                  double &above_lock_value) const
        {
            double result;

            if(entry != Dissipation::NO_DERIV)
                result = 0.0;
            else
                result = __phase_lag;

            if(forcing_frequency == 0) {
                return 0.0;
                if(spin_frequency_multiplier >= 0) {
                    above_lock_value = -result;
                    return result;
                } else {
                    above_lock_value = result;
                    return -result;
                }
            } else {
                return (forcing_frequency > 0 ? result : -result);
            }
        }

        bool dissipative() const {return true;}
    };//End ConstPhaseLagZone class.
}//End Evolve namespace.

#endif