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])
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)
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
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')
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)
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()
#!/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(
'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:
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']))))
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')
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)