コード例 #1
0
ファイル: command_line_util.py プロジェクト: kpenev/poet
def set_up_library(cmdline_args):
    """Define eccentricity expansion and return stellar evol interpolator."""

    orbital_evolution_library.read_eccentricity_expansion_coefficients(
        cmdline_args.eccentricity_expansion_fname.encode('ascii'))
    manager = StellarEvolutionManager(cmdline_args.stellar_evolution[0])
    return manager.get_interpolator_by_name(cmdline_args.stellar_evolution[1])
コード例 #2
0
ファイル: test_symmetries.py プロジェクト: kpenev/poet
def main():
    """Make sure no globals are defined."""

    orbital_evolution_library.read_eccentricity_expansion_coefficients(
        os.path.abspath(
            os.path.dirname(__file__) + '/../../../' +
            'eccentricity_expansion_coef.txt').encode('ascii'))
    serialized_dir = os.path.abspath(
        os.path.dirname(__file__) +
        '/../../../stellar_evolution_interpolators')
    manager = StellarEvolutionManager(serialized_dir)
    interpolator = manager.get_interpolator_by_name('default')

    test_single_dissipator(interpolator, True)
コード例 #3
0
def add_and_parse_evolution_args(parser, disk_args=True):
    """
    Add arguments for the binary evolution, some setup & return interpolator.

    Args:
        - parser:    An instance of argparse.ArgumentParser to fill with
            arguments defining the evolution. Must alraedy contain all other
            arguments.

        - disk_args:    Should command line arguments be added for configuring
            the initial circumstellar disk holding the primary's spin locked?

    Returns:
        same as parser.parse_args():
            An object containing the parsed command line arguments as
            members.

        :class:ManagedInterpolator:
            A stellar evolution interpolator instance.
    """

    add_spindown_args(parser)
    if disk_args:
        add_disk_args(parser)
    add_orbital_evolution_args(parser)
    cmdline_args = parser.parse_args()
    orbital_evolution_library.read_eccentricity_expansion_coefficients(
        cmdline_args.eccentricity_coef.encode('ascii'))
    print('Interp dir: ' + repr(cmdline_args.interpolator_dir))
    interpolator = StellarEvolutionManager(
        cmdline_args.interpolator_dir).get_interpolator_by_name(
            cmdline_args.interpolator)
    return cmdline_args, interpolator
コード例 #4
0
    def setUp(self):
        """Read a serialized interpolator in self.interp."""

        self.interp = StellarEvolutionManager(
            os.path.join(
                poet_root,
                'stellar_evolution_interpolators')).get_interpolator_by_name(
                    'default')
        self.num_test_masses = 10
        self.num_test_feh = 10
        self.num_test_ages = 10
        print('Done')
コード例 #5
0
def get_interpolator(stellar_evolution_interpolator_dir, track_path):
    """Return the stellar evolution interpolator to use."""

    manager = StellarEvolutionManager(stellar_evolution_interpolator_dir)
    if not list(manager.get_suite_tracks()):
        manager.register_track_collection(
            track_fnames=glob(os.path.join(track_path, '*.csv')))

    interpolator_args = dict(num_threads=1)
    interpolator_args['new_interp_name'] = 'custom'
    interpolator_args['nodes'] = {q: 0 for q in MESAInterpolator.quantity_list}
    interpolator_args['smoothing'] = {
        q: float('nan')
        for q in MESAInterpolator.quantity_list
    }
    return manager.get_interpolator(**interpolator_args)
コード例 #6
0
ファイル: test_evolution.py プロジェクト: kpenev/poet
                                     evolution_max_time_step = 1e-2)
    target = Structure(age = 5.0,
                       Porb = 3.0,
                       Psurf = 10.0,
                       planet_formation_age = 5e-3)
    star = create_star(interpolator)
    planet = create_planet()
    initial_porb, initial_psurf = find_ic(target = target,
                                          star = star,
                                          planet = planet)
    print('IC: Porb0 = %s, P*0 = %s' % (repr(initial_porb),
                                        repr(initial_psurf)))

if __name__ == '__main__':
    eccentricity_expansion_fname = b"eccentricity_expansion_coef.txt"
    orbital_evolution_library.read_eccentricity_expansion_coefficients(
        eccentricity_expansion_fname
    )
    serialized_dir = '../stellar_evolution_interpolators'
    manager = StellarEvolutionManager(serialized_dir)
    interpolator = manager.get_interpolator_by_name('default')

    test_binary_star_evolution(
        interpolator=interpolator,
#                               planet_phase_lag=phase_lag(5.0),
        convective_phase_lag=phase_lag(5.0),
        create_c_code='../poet_src/debug/test_evol.cpp',
        eccentricity_expansion_fname=eccentricity_expansion_fname
    )
#    test_ic_solver()
コード例 #7
0
ファイル: test_manager.py プロジェクト: kpenev/poet
#!/usr/bin/python3 -u

"""Example for using stellar evolution manager."""

from stellar_evolution.manager import StellarEvolutionManager

if __name__ == '__main__':
    manager = StellarEvolutionManager(
        '../../../stellar_evolution_interpolators'
    )

    interp = manager.get_interpolator(
        masses=[1.0],
        feh=[0.0],
        nodes=dict(RADIUS=100,
                   ICONV=100,
                   LUM=100,
                   IRAD=100,
                   MRAD=100,
                   RRAD=100),
        smoothing=dict(RADIUS=0.1,
                       ICONV=0.2,
                       LUM=0.3,
                       IRAD=0.4,
                       MRAD=0.5,
                       RRAD=0.6),
        new_interp_name='test_interp_nonan'
    )
    print(interp)

    interp = manager.get_interpolator(
コード例 #8
0
        'is very fast to generate. Useful for debugging purposes.')
    parser.add_argument(
        '--num-threads',
        '--threads',
        type=int,
        default=4,
        help='The number of simultaneous threads to use when generating '
        'the interepolator. Default: %(default)d')
    return parser.parse_args()


if __name__ == '__main__':
    cmdline_args = parse_command_line()
    assert (os.path.isdir(cmdline_args.track_path))

    manager = StellarEvolutionManager(cmdline_args.repository_path)

    if not list(manager.get_suite_tracks()):
        manager.register_track_collection(
            track_fnames=glob(os.path.join(cmdline_args.track_path, '*.csv')))

    creation_args = dict(num_threads=cmdline_args.num_threads)
    if cmdline_args.trivial:
        nan = float('nan')
        creation_args['new_interp_name'] = 'trivial'
        creation_args['nodes'] = {q: 0 for q in MESAInterpolator.quantity_list}
        creation_args['smoothing'] = {
            q: float('nan')
            for q in MESAInterpolator.quantity_list
        }
    else:
コード例 #9
0
    def example():
        """An example of how to use this module."""

        serialized_dir = '../../stellar_evolution_interpolators'
        manager = StellarEvolutionManager(serialized_dir)
        interpolator = manager.get_interpolator_by_name('default')
        star1 = EvolvingStar(mass=1.0,
                             metallicity=0.0,
                             wind_strength=0.15,
                             wind_saturation_frequency=2.5,
                             diff_rot_coupling_timescale=5.0,
                             interpolator=interpolator)
        star2 = EvolvingStar(mass=1.0,
                             metallicity=0.0,
                             wind_strength=0.15,
                             wind_saturation_frequency=2.5,
                             diff_rot_coupling_timescale=5.0,
                             interpolator=interpolator)
        star1.set_dissipation(zone_index=0,
                              tidal_frequency_breaks=numpy.array([]),
                              spin_frequency_breaks=numpy.array([]),
                              tidal_frequency_powers=numpy.array([0.0]),
                              spin_frequency_powers=numpy.array([0.0]),
                              reference_phase_lag=0.1)
        star1.set_dissipation(zone_index=1,
                              tidal_frequency_breaks=numpy.array([1.0]),
                              spin_frequency_breaks=numpy.array([]),
                              tidal_frequency_powers=numpy.array([0.0, 1.0]),
                              spin_frequency_powers=numpy.array([0.0]),
                              reference_phase_lag=0.1)
        star2.set_dissipation(zone_index=0,
                              tidal_frequency_breaks=numpy.array([0.6, 1.2]),
                              spin_frequency_breaks=numpy.array([]),
                              tidal_frequency_powers=numpy.array(
                                  [0.0, 1.0, 0.0]),
                              spin_frequency_powers=numpy.array([0.0]),
                              reference_phase_lag=0.1)
        star2.set_dissipation(
            zone_index=1,
            tidal_frequency_breaks=numpy.array([0.5, 1.0, 1.5]),
            spin_frequency_breaks=numpy.array([]),
            tidal_frequency_powers=numpy.array([1.0, 2.0, 3.0, 4.0]),
            spin_frequency_powers=numpy.array([0.0]),
            reference_phase_lag=0.1)
        print('%25s %25s %25s %25s %25s' %
              ('w', 'Env1(kDt)', 'Core1(kDt)', 'Env2(kDt)', 'Core2(kDt)'))
        for wtide in numpy.linspace(0.1, 2.0, 20):
            print('%25s %25s %25s %25s %25s' %
                  (wtide,
                   repr(
                       star1.modified_phase_lag(zone_index=0,
                                                orbital_frequency_multiplier=1,
                                                spin_frequency_multiplier=1,
                                                forcing_frequency=wtide,
                                                deriv=star1.deriv_ids['NO'])),
                   repr(
                       star1.modified_phase_lag(zone_index=1,
                                                orbital_frequency_multiplier=1,
                                                spin_frequency_multiplier=1,
                                                forcing_frequency=wtide,
                                                deriv=star1.deriv_ids['NO'])),
                   repr(
                       star2.modified_phase_lag(zone_index=0,
                                                orbital_frequency_multiplier=1,
                                                spin_frequency_multiplier=1,
                                                forcing_frequency=wtide,
                                                deriv=star2.deriv_ids['NO'])),
                   repr(
                       star2.modified_phase_lag(zone_index=1,
                                                orbital_frequency_multiplier=1,
                                                spin_frequency_multiplier=1,
                                                forcing_frequency=wtide,
                                                deriv=star2.deriv_ids['NO']))))
コード例 #10
0
    def setUpClass(cls):
        """Read a serialized interpolator in self.interp."""

        cls.interp = StellarEvolutionManager(
            os.path.join(poet_root, 'stellar_evolution_interpolators')
        ).get_interpolator_by_name('default')
コード例 #11
0
ファイル: test_var_change.py プロジェクト: kpenev/poet
                    metallicity=target_metallicity,
                    rho=target_rho(target_age),
                    teff=target_teff(target_age))
                if not solutions:
                    found_mass_str = found_age_str = mass_diff_str = \
                    age_diff_str = '-'
                else:
                    min_distance = numpy.inf
                    for solution_mass, solution_age in solutions:
                        distance = ((solution_mass - target_mass)**2 +
                                    (solution_age - target_age)**2)
                        if distance < min_distance:
                            found_mass_str = repr(solution_mass)
                            found_age_str = repr(solution_age)
                            mass_diff_str = repr(target_mass - solution_mass)
                            age_diff_str = repr(target_age - solution_age)
                            min_distance = distance
                print(line_fmt % (repr(target_metallicity), repr(target_mass),
                                  repr(target_age), mass_diff_str,
                                  age_diff_str, found_mass_str, found_age_str))


if __name__ == '__main__':
    manager = StellarEvolutionManager('../stellar_evolution_interpolators')
    interp = manager.get_interpolator_by_name('default')
    visualize_mismatch(interp=interp,
                       target_mass=0.77285588027585062,
                       target_metallicity=-0.28278013953588377,
                       target_age=13.812435550152532)
#    random_tests(interp)