Program Listing for File SingleTidalTermZone.h

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

#ifndef __SINGLE_TIDAL_TERM_ZONE_H
#define __SINGLE_TIDAL_TERM_ZONE_H

#include "PolynomialEvolutionZone.h"

namespace Evolve {

    class SingleTidalTermZone : public PolynomialEvolutionZone {
    private:
        int
            __orbital_frequency_multiplier,

            __spin_frequency_multiplier;

        double __phase_lag;
    public:
        SingleTidalTermZone(
            int orbital_frequency_multiplier,

            int spin_frequency_multiplier,

            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),
            __orbital_frequency_multiplier(orbital_frequency_multiplier),
            __spin_frequency_multiplier(spin_frequency_multiplier),
            __phase_lag(phase_lag)
        {}

        double modified_phase_lag(int orbital_frequency_multiplier,
                                  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 {
                if(
                    orbital_frequency_multiplier == __orbital_frequency_multiplier
                    &&
                    spin_frequency_multiplier == __spin_frequency_multiplier
                )
                    result = __phase_lag;
                else if(
                    orbital_frequency_multiplier == -__orbital_frequency_multiplier
                    &&
                    spin_frequency_multiplier == -__spin_frequency_multiplier

                )
                    result = -__phase_lag;
                else
                    result = 0.0;
            }

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

        bool dissipative() const {return true;}

    };//End SingleTidalTermZone class.

}//End Evolve namespace.

#endif