Program Listing for File PlanetZone.h

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

#ifndef __LOCKED_PLANET_ZONE_H
#define __LOCKED_PLANET_ZONE_H

#include "../Core/SharedLibraryExportMacros.h"
#include "../Evolve/DissipatingZone.h"
#include "../Core/AstronomicalConstants.h"
#include "../Evolve/BrokenPowerlawPhaseLagZone.h"

namespace Planet {

    class LIB_LOCAL PlanetZone :
        virtual public Evolve::BrokenPowerlawPhaseLagZone {
    private:
        double
            __mass,

            __radius,

            __moment_of_inertia_factor;

    public:
        PlanetZone(
            double mass,

            double radius,

            double moment_of_inertia_factor
        ) :
            __mass(mass),
            __radius(radius),
            __moment_of_inertia_factor(moment_of_inertia_factor)
        {}

        double love_coefficient(int,
                                int,
                                Evolve::Dissipation::QuantityEntry) const
        {return 0;}

        double moment_of_inertia(
            int deriv_order=0
        ) const
        {
            return (
                deriv_order==0
                ? __moment_of_inertia_factor * __mass * std::pow(__radius, 2)
                : 0
            );
        }

        double moment_of_inertia(double, int deriv_order=0) const
        {return moment_of_inertia(deriv_order);}

        double outer_radius(int deriv_order=0) const
        {return (deriv_order==0 ? __radius : 0);}

        double outer_radius(double, int deriv_order=0) const
        {return (deriv_order==0 ? __radius : 0);}

        double outer_mass(int deriv_order=0) const
        {return (deriv_order==0 ? __mass : 0);}

        double outer_mass(double, int deriv_order=0) const
        {return (deriv_order==0 ? __mass : 0);}

        void configure(
            bool initialize,

            double age,

            double orbital_frequency,

            double eccentricity,

            double orbital_angmom,

            double spin,

            double inclination,

            double periapsis,

            bool spin_is_frequency
        )
        {
            BrokenPowerlawPhaseLagZone::configure(
                initialize,
                age,
                orbital_frequency,
                eccentricity,
                orbital_angmom,
                (dissipative() ? spin : orbital_frequency),
                (dissipative() ? inclination : 0),
                (dissipative() ? periapsis : 0),
                (dissipative() ? spin_is_frequency : true)
            );
        }

    }; //End LockedPlanetZone class.

}//End Planet namespace.

#endif