Esempio n. 1
0
def _solar_like_with_disk(mass, dissipation_factor_scale, position, velocity,
                          rotation_period, general_relativity_implementation,
                          evolution, disk, wind_k_factor,
                          wind_rotation_saturation):
    if type(evolution) not in (
            posidonius.BolmontMathis2016, posidonius.Leconte2011,
            posidonius.Baraffe2015, posidonius.GalletBolmont2017,
            posidonius.NonEvolving
    ) and not (type(evolution) is posidonius.Baraffe1998 and mass == 1.0):
        raise Exception(
            "Evolution type should be BolmontMathis2016 Leconte2011 Baraffe1998 (mass = 0.10) Baraffe2015 GalletBolmont2017 or NonEvolving!"
        )

    # Typical rotation period: 24 hours
    angular_frequency = posidonius.constants.TWO_PI / (rotation_period / 24.
                                                       )  # days^-1
    inclination = 0.
    obliquity = 0.
    spin = posidonius.tools.calculate_spin(angular_frequency, inclination,
                                           obliquity)

    radius_factor = 1.
    radius = radius_factor * posidonius.constants.R_SUN
    radius_of_gyration = 2.43e-01  # Sun

    love_number = 0.03
    # Sun-like-star: sigmast = 4.992e-66 cgs, conversion to Msun-1.AU-2.day-1 = 3.845764022293d64
    dissipation_factor = 4.992 * 3.845764e-2  # -66+64
    tides = posidonius.effects.tides.CentralBody(
        posidonius.effects.tides.ConstantTimeLag({
            "dissipation_factor_scale": dissipation_factor_scale,
            "dissipation_factor": dissipation_factor,
            "love_number": love_number,
        }))
    rotational_flattening = posidonius.effects.rotational_flattening.CentralBody(
        posidonius.effects.rotational_flattening.OblateSpheroid(
            {"love_number": love_number}))
    general_relativity = posidonius.effects.general_relativity.CentralBody(
        general_relativity_implementation)
    if wind_k_factor == 0:
        wind = posidonius.effects.wind.Disabled()
    else:
        wind = posidonius.effects.wind.Interaction({
            "k_factor":
            wind_k_factor,
            "rotation_saturation":
            wind_rotation_saturation,
        })
    particle = posidonius.Particle(mass, radius, radius_of_gyration, position,
                                   velocity, spin)
    particle.set_tides(tides)
    particle.set_rotational_flattening(rotational_flattening)
    particle.set_general_relativity(general_relativity)
    particle.set_wind(wind)
    particle.set_disk(disk)
    particle.set_evolution(evolution)
    return particle
Esempio n. 2
0
def jupiter_like(mass, dissipation_factor_scale, position, velocity, spin,
                 evolution):
    if type(evolution) not in (posidonius.LeconteChabrier2013,
                               posidonius.NonEvolving):
        raise Exception(
            "Evolution type should be LeconteChabrier2013 or NonEvolving!")

    radius_factor = 10.9  # Jupiter in R_EARTH
    radius = radius_factor * posidonius.constants.R_EARTH
    radius_of_gyration = 5.04e-01  # Gas giant

    # Typical rotation period: 9.8 hours
    love_number = 0.380  # Gas giant
    # TODO: What k2pdelta/dissipation_factor is the recommended?
    #k2pdelta = 8.101852e-9 # Gas giant
    k2pdelta = 2.893519e-7  # Gas giant for Jupiter: 2-3d-2 s, here in day (Leconte)
    dissipation_factor = 2. * posidonius.constants.K2 * k2pdelta / (
        3. * np.power(radius, 5))
    #dissipation_factor = 2.006*3.845764e4 // Gas giant
    tides = posidonius.effects.tides.OrbitingBody(
        posidonius.effects.tides.ConstantTimeLag({
            "dissipation_factor_scale": dissipation_factor_scale,
            "dissipation_factor": dissipation_factor,
            "love_number": love_number,
        }))
    rotational_flattening = posidonius.effects.rotational_flattening.OrbitingBody(
        posidonius.effects.rotational_flattening.OblateSpheroid(
            {"love_number": love_number}))
    general_relativity = posidonius.effects.general_relativity.OrbitingBody()
    wind = posidonius.effects.wind.Disabled()
    disk = posidonius.effects.disk.OrbitingBody()
    particle = posidonius.Particle(mass, radius, radius_of_gyration, position,
                                   velocity, spin)
    particle.set_tides(tides)
    particle.set_rotational_flattening(rotational_flattening)
    particle.set_general_relativity(general_relativity)
    particle.set_wind(wind)
    particle.set_disk(disk)
    particle.set_evolution(evolution)
    return particle
Esempio n. 3
0
def m_dwarf(mass, dissipation_factor_scale, position, velocity, rotation_period, general_relativity_implementation, evolution, wind_k_factor=0., wind_rotation_saturation=0.):
    if type(evolution) not in (posidonius.Baraffe2015, posidonius.NonEvolving) and not (type(evolution) is posidonius.Baraffe1998 and mass == 0.10):
        raise Exception("Evolution type should be Baraffe2015 Baraffe1998 (mass = 0.10) or NonEvolving!")

    # Typical rotation period: 70 hours
    angular_frequency = posidonius.constants.TWO_PI/(rotation_period/24.) # days^-1
    inclination = 0.
    obliquity = 0.
    spin = posidonius.tools.calculate_spin(angular_frequency, inclination, obliquity)

    radius_factor = 0.845649342247916
    radius = radius_factor * posidonius.constants.R_SUN
    radius_of_gyration = 4.47e-01 # M-dwarf

    love_number = 0.307 # M Dwarf
    # BD, Mdwarf: sigmast = 2.006d-60 cgs, conversion to Msun-1.AU-2.day-1 = 3.845764022293d64
    dissipation_factor = 2.006*3.845764e4 # -60+64
    tides = posidonius.effects.tides.CentralBody({
        "dissipation_factor_scale": dissipation_factor_scale,
        "dissipation_factor": dissipation_factor,
        "love_number": love_number,
    })
    rotational_flattening = posidonius.effects.rotational_flattening.CentralBody({"love_number": love_number})
    general_relativity = posidonius.effects.general_relativity.CentralBody(general_relativity_implementation)
    if wind_k_factor == 0:
        wind = posidonius.effects.wind.Disabled()
    else:
        wind = posidonius.effects.wind.Interaction({
            "k_factor": wind_k_factor,
            "rotation_saturation": wind_rotation_saturation,
        })
    disk = posidonius.effects.disk.Disabled()
    particle = posidonius.Particle(mass, radius, radius_of_gyration, position, velocity, spin)
    particle.set_tides(tides)
    particle.set_rotational_flattening(rotational_flattening)
    particle.set_general_relativity(general_relativity)
    particle.set_wind(wind)
    particle.set_disk(disk)
    particle.set_evolution(evolution)
    return particle
Esempio n. 4
0
def earth_like(mass, dissipation_factor_scale, position, velocity, spin,
               evolution):
    if type(evolution) not in (posidonius.NonEvolving, ):
        raise Exception("Evolution type should be NonEvolving!")

    # Earth-like => mass-radius relationship from Fortney 2007
    radius_factor = posidonius.tools.mass_radius_relation(
        mass, planet_mass_type='AU', planet_percent_rock=0.70)
    radius = radius_factor * posidonius.constants.R_EARTH
    radius_of_gyration = 5.75e-01  # Earth type planet

    # Typical rotation period: 24 hours
    love_number = 0.299  # Earth
    fluid_love_number = 0.9532  # Earth
    k2pdelta = 2.465278e-3  # Terrestrial planets
    dissipation_factor = 2. * posidonius.constants.K2 * k2pdelta / (
        3. * np.power(radius, 5))
    tides = posidonius.effects.tides.OrbitingBody(
        posidonius.effects.tides.ConstantTimeLag({
            "dissipation_factor_scale": dissipation_factor_scale,
            "dissipation_factor": dissipation_factor,
            "love_number": love_number,
        }))
    rotational_flattening = posidonius.effects.rotational_flattening.OrbitingBody(
        posidonius.effects.rotational_flattening.OblateSpheroid(
            {"love_number": fluid_love_number}))
    general_relativity = posidonius.effects.general_relativity.OrbitingBody()
    wind = posidonius.effects.wind.Disabled()
    disk = posidonius.effects.disk.OrbitingBody()
    particle = posidonius.Particle(mass, radius, radius_of_gyration, position,
                                   velocity, spin)
    particle.set_tides(tides)
    particle.set_rotational_flattening(rotational_flattening)
    particle.set_general_relativity(general_relativity)
    particle.set_wind(wind)
    particle.set_disk(disk)
    particle.set_evolution(evolution)
    return particle
Esempio n. 5
0
    #'mean_molecular_weight': 2.4,
    #}
    #star_disk = posidonius.effects.disk.CentralBody(disk_properties)
    #star_disk = posidonius.effects.disk.OrbitingBody()
    star_disk = posidonius.effects.disk.Disabled()
    #
    #star_evolution = posidonius.GalletBolmont2017(star_mass) # mass = 0.30 .. 1.40
    #star_evolution = posidonius.BolmontMathis2016(star_mass) # mass = 0.40 .. 1.40
    #star_evolution = posidonius.Baraffe2015(star_mass) # mass = 0.01 .. 1.40
    #star_evolution = posidonius.Leconte2011(star_mass) # mass = 0.01 .. 0.08
    #star_evolution = posidonius.Baraffe1998(star_mass) # Sun (mass = 1.0) or M-Dwarf (mass = 0.1)
    #star_evolution = posidonius.LeconteChabrier2013(False) # Jupiter without dissipation of dynamical tides
    #star_evolution = posidonius.LeconteChabrier2013(True) # Jupiter with dissipation of dynamical tides
    star_evolution = posidonius.NonEvolving()
    #
    star = posidonius.Particle(star_mass, star_radius, star_radius_of_gyration,
                               star_position, star_velocity, star_spin)
    star.set_tides(star_tides)
    star.set_rotational_flattening(star_rotational_flattening)
    star.set_general_relativity(star_general_relativity)
    star.set_wind(star_wind)
    star.set_disk(star_disk)
    star.set_evolution(star_evolution)
    universe.add_particle(star)

    ############################################################################
    planet_mass_factor = 318
    # [start correction] -------------------------------------------------------
    # To reproduce Bolmont et al. 2015:
    #   Mercury-T was using planet_mass as 3.00e-6 M_SUN and that's not exactly 1 M_EARTH (as accepted by IAU)
    #   thus, to reproduce Mercury-T results the mass factor should be slighly modified:
    planet_mass_factor = planet_mass_factor * (
Esempio n. 6
0
    #'mean_molecular_weight': 2.4,
    #}
    #star_disk = posidonius.effects.disk.CentralBody(disk_properties)
    #star_disk = posidonius.effects.disk.OrbitingBody()
    star_disk = posidonius.effects.disk.Disabled()
    #
    #star_evolution = posidonius.GalletBolmont2017(star_mass) # mass = 0.30 .. 1.40
    #star_evolution = posidonius.BolmontMathis2016(star_mass) # mass = 0.40 .. 1.40
    #star_evolution = posidonius.Baraffe2015(star_mass) # mass = 0.01 .. 1.40
    #star_evolution = posidonius.Leconte2011(star_mass) # mass = 0.01 .. 0.08
    #star_evolution = posidonius.Baraffe1998(star_mass) # Sun (mass = 1.0) or M-Dwarf (mass = 0.1)
    #star_evolution = posidonius.LeconteChabrier2013(False) # Jupiter without dissipation of dynamical tides
    #star_evolution = posidonius.LeconteChabrier2013(True) # Jupiter with dissipation of dynamical tides
    star_evolution = posidonius.NonEvolving()
    #
    star = posidonius.Particle(star_mass, star_radius, star_radius_of_gyration,
                               star_position, star_velocity, star_spin)
    star.set_tides(star_tides)
    star.set_rotational_flattening(star_rotational_flattening)
    star.set_general_relativity(star_general_relativity)
    star.set_wind(star_wind)
    star.set_disk(star_disk)
    star.set_evolution(star_evolution)
    universe.add_particle(star)

    ############################################################################
    planet1_mass_factor = 1.0
    # [start correction] -------------------------------------------------------
    # To reproduce Bolmont et al. 2015:
    #   Mercury-T was using planet1_mass as 3.00e-6 M_SUN and that's not exactly 1 M_EARTH (as accepted by IAU)
    #   thus, to reproduce Mercury-T results the mass factor should be slighly modified:
    planet1_mass_factor = planet1_mass_factor * (
Esempio n. 7
0
    #}
    #star1_disk = posidonius.effects.disk.CentralBody(disk_properties)
    #star1_disk = posidonius.effects.disk.OrbitingBody()
    star1_disk = posidonius.effects.disk.Disabled()
    #
    #star1_evolution = posidonius.GalletBolmont2017(star1_mass) # mass = 0.30 .. 1.40
    #star1_evolution = posidonius.BolmontMathis2016(star1_mass) # mass = 0.40 .. 1.40
    #star1_evolution = posidonius.Baraffe2015(star1_mass) # mass = 0.01 .. 1.40
    #star1_evolution = posidonius.Leconte2011(star1_mass) # mass = 0.01 .. 0.08
    #star1_evolution = posidonius.Baraffe1998(star1_mass) # Sun (mass = 1.0) or M-Dwarf (mass = 0.1)
    #star1_evolution = posidonius.LeconteChabrier2013(False) # Jupiter without dissipation of dynamical tides
    #star1_evolution = posidonius.LeconteChabrier2013(True) # Jupiter with dissipation of dynamical tides
    star1_evolution = posidonius.NonEvolving()
    #
    star1 = posidonius.Particle(star1_mass, star1_radius,
                                star1_radius_of_gyration, star1_position,
                                star1_velocity, star1_spin)
    star1.set_tides(star1_tides)
    star1.set_rotational_flattening(star1_rotational_flattening)
    star1.set_general_relativity(star1_general_relativity)
    star1.set_wind(star1_wind)
    star1.set_disk(star1_disk)
    star1.set_evolution(star1_evolution)
    universe.add_particle(star1)

    ############################################################################
    star2_mass = 1.0  # Solar masses
    star2_radius_factor = 0.845649342247916
    star2_radius = star2_radius_factor * posidonius.constants.R_SUN
    star2_radius_of_gyration = 4.41e-01  # Brown dwarf
Esempio n. 8
0
def brown_dwarf(mass, dissipation_factor_scale, position, velocity, general_relativity_implementation, evolution, wind_k_factor=0., wind_rotation_saturation=0.):
    rotation_period = None
    love_number = None
    if type(evolution) == posidonius.NonEvolving:
        rotation_period = 70.0 # hours
        love_number = 0.307 # BrownDwarf
    elif type(evolution) in (posidonius.Leconte2011, posidonius.Baraffe2015):
        mass = evolution._data[evolution.__class__.__name__]

        if mass <= 0.0101 and mass >= 0.0099:
            rotation_period = 8.0
            love_number = 0.3790
        elif mass <= 0.0121 and mass >= 0.0119:
            rotation_period = 13.0
            love_number = 0.3780
        elif mass <= 0.0151 and mass >= 0.0149:
            rotation_period = 19.0
            love_number = 0.3760
        elif mass <= 0.0201 and mass >= 0.0199:
            rotation_period = 24.0
            love_number = 0.3690
        elif mass <= 0.0301 and mass >= 0.0299:
            rotation_period = 30.0
            love_number = 0.3550
        elif mass <= 0.0401 and mass >= 0.0399:
            rotation_period = 36.0
            love_number = 0.3420
        elif mass <= 0.0501 and mass >= 0.0499:
            rotation_period = 41.0
            love_number = 0.3330
        elif mass <= 0.0601 and mass >= 0.0599:
            rotation_period = 47.0
            love_number = 0.3250
        elif mass <= 0.0701 and mass >= 0.0699:
            rotation_period = 53.0
            love_number = 0.3110
        elif mass <= 0.0721 and mass >= 0.0719:
            rotation_period = 58.0
            love_number = 0.3080
        elif mass <= 0.0751 and mass >= 0.0749:
            rotation_period = 64.0
            love_number = 0.3070
        elif mass <= 0.0801 and mass >= 0.0799:
            rotation_period = 70.0
            love_number = 0.3070
        else:
            raise Exception("The evolution type Leconte2011 does not support a mass of {} Msun and Baraffe2015 with higher masses is possible but then it should not be considered as a Brown Dwarf!".format(mass))
    else:
        raise Exception("Evolution type should be Leconte2011, Baraffe2015 or NonEvolving!")

    angular_frequency = posidonius.constants.TWO_PI/(rotation_period/24.) # days^-1
    inclination = 0.
    obliquity = 0.
    spin = posidonius.tools.calculate_spin(angular_frequency, inclination, obliquity)

    # BD, Mdwarf: sigmast = 2.006d-60 cgs, conversion to Msun-1.AU-2.day-1 = 3.845764022293d64
    dissipation_factor = 2.006*3.845764e4 # -60+64

    radius_factor = 0.845649342247916
    radius = radius_factor * posidonius.constants.R_SUN
    radius_of_gyration = 4.41e-01 # Brown dwarf

    tides = posidonius.effects.tides.CentralBody({
        "dissipation_factor_scale": dissipation_factor_scale,
        "dissipation_factor": dissipation_factor,
        "love_number": love_number,
    })
    rotational_flattening = posidonius.effects.rotational_flattening.CentralBody({"love_number": love_number})
    general_relativity = posidonius.effects.general_relativity.CentralBody(general_relativity_implementation)
    if wind_k_factor == 0:
        wind = posidonius.effects.wind.Disabled()
    else:
        wind = posidonius.effects.wind.Interaction({
            "k_factor": wind_k_factor,
            "rotation_saturation": wind_rotation_saturation,
        })
    disk = posidonius.effects.disk.Disabled()
    particle = posidonius.Particle(mass, radius, radius_of_gyration, position, velocity, spin)
    particle.set_tides(tides)
    particle.set_rotational_flattening(rotational_flattening)
    particle.set_general_relativity(general_relativity)
    particle.set_wind(wind)
    particle.set_disk(disk)
    particle.set_evolution(evolution)
    return particle