def handle_input(o, arguments): """ run one simulation based on the option parser input or a modified version """ # Option Parser Dictionary (This isn't a dictionary?!) # Numbers if o.num_format == 3: o.sim_number = "%03d" % o.sim_number else: o.sim_number = "%06d" % o.sim_number o.iter_i = "%02d" % o.iter_i # Files o.snap_base = o.snap_dir o.snap_dir = o.snap_base + o.sim_number + "_" + o.iter_i o.fout = o.fout + o.sim_number + "_" + o.iter_i + ".hdf5" ps.mkdir(o.snap_dir, safety=True) # Begin #stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl*pi_180, o.omega*pi_180, # o.rel_force, o.r_out) #planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha = o.power, seed = o.seed) def process(): sys.stdout = open(o.snap_dir + "/process" + str(os.getpid()) + ".out", "w") stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl * pi_180, o.omega * pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha=o.power, seed=o.seed, disk_num=o.iter_i) r_step = o.r_in ### set timestep based on period of innermost disk particles ### t_end = o.num_T * abs(time_peri) # Current Target Period: 4.0 T # Save info in .txt and .p files write_info_file(o) integrate_disk_flyby(stars, planetesimals, t_end, time_peri, o.nb_end, o.n_steps, r_step, o.snap_dir, o.fout, o.fredir, o.br_dt, o.eta) print "Starting", o.sim_number, o.iter_i p = Process(target=process) p.start() return o, p
def handle_input(o, arguments): """ run one simulation based on the option parser input or a modified version """ # Option Parser Dictionary (This isn't a dictionary?!) # Numbers if o.num_format == 3: o.sim_number = "%03d" % o.sim_number else: o.sim_number = "%06d" % o.sim_number o.iter_i = "%02d" % o.iter_i # Files o.snap_base = o.snap_dir o.snap_dir = o.snap_base + o.sim_number + "_" + o.iter_i o.fout = o.fout + o.sim_number + "_" + o.iter_i + ".hdf5" ps.mkdir(o.snap_dir, safety = True) # Begin #stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl*pi_180, o.omega*pi_180, # o.rel_force, o.r_out) #planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha = o.power, seed = o.seed) def process(): sys.stdout = open(o.snap_dir + "/process" + str(os.getpid()) + ".out", "w") stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl*pi_180, o.omega*pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha = o.power, seed = o.seed, disk_num = o.iter_i) r_step = o.r_in ### set timestep based on period of innermost disk particles ### t_end = o.num_T * abs(time_peri) # Current Target Period: 4.0 T # Save info in .txt and .p files write_info_file(o) integrate_disk_flyby(stars, planetesimals, t_end, time_peri, o.nb_end, o.n_steps, r_step, o.snap_dir, o.fout, o.fredir, o.br_dt, o.eta) print "Starting", o.sim_number, o.iter_i p = Process(target = process) p.start() return o, p
def handle_input(o, arguments): """ run one simulation based on the option parser input or a modified version """ # Option Parser Dictionary (This isn't a dictionary?!) if o.num_format == 3: o.sim_number = "%03d" % o.sim_number else: o.sim_number = "%06d" % o.sim_number o.snap_base = o.snap_dir o.snap_dir = o.snap_dir + o.sim_number o.fout = o.fout + o.sim_number + ".hdf5" stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl * pi_180, o.omega * pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha=o.power, seed=o.seed) #print stars #print planetesimals ps.mkdir(o.snap_dir, safety=True) # Write Info File f = open(o.snap_dir + "/info.txt", 'a') f.write("Simulation ID Number: " + str(o.sim_number) + "\n") f.write("Disk Random Seed: " + str(o.seed) + "\n") f.write("Number of Iterations: " + str(o.iter) + "\n") f.write("Number of Pericenter Arcs: " + str(o.num_T) + "\n") f.write("End of N-Body Time: " + str(o.nb_end) + "\n") f.write("Mass (Disk Star): " + str(o.m0) + "\n") f.write("Mass (Other Star): " + str(o.m1) + "\n") f.write("Initial Relative Force: " + str(o.rel_force) + "\n") f.write("Bridge Timestep: " + str(o.br_dt) + "\n") f.write("Huayno Timestep (eta): " + str(o.eta) + "\n") f.write("Inner Disk Radius: " + str(o.r_in) + "\n") f.write("Outer Disk Radius: " + str(o.r_out) + "\n") f.write("Number of Disk Particles: " + str(o.n_disk) + "\n") f.write("Disk Particle Power Law: " + str(o.power) + "\n") f.write("Orbit Pericenter: " + str(o.peri) + "\n") f.write("Orbit Eccentricity: " + str(o.ecc) + "\n") f.write("Orbit Inclination: " + str(o.incl) + "\n") f.write("Orbit Argument of Periapsis: " + str(o.omega) + "\n") f.write("Number of Steps: " + str(o.n_steps) + "\n") f.close() # Write 'o' dictionary into file (using Pickle) pickle_f = open(o.snap_dir + "/info.p", "wb") pickle.dump(o, pickle_f) pickle_f.close() r_step = o.r_in ### set timestep based on period of innermost disk particles ### t_end = o.num_T * abs(time_peri) # Current Target Period: 4.0 T #t_end = 1300.0 | units.yr def process(): integrate_disk_flyby(stars, planetesimals, t_end, time_peri, o.nb_end, o.n_steps, r_step, o.snap_dir, o.fout, o.fredir, o.br_dt, o.eta) p = Process(target=process) p.start() return o, p
def evolve_disk_flyby(stars, planetesimals, stars_gravity, planetesimals_gravity, t_start, t_end, n_steps, converter, snap_dir, file_out, r_step, bridge_dt, center=0): """ Input Parameters: stars --- Star bodies planetesimals --- Non-star bodies stars_gravity --- planetesimals_gravity --- t_end --- Total Integration Time n_steps --- Number of Snapshots converter --- snap_dir --- file_out --- r_step --- bridge_dt --- Bridge Timestep """ bodies = ParticlesSuperset([stars, planetesimals]) channel_from_stars_to_framework = stars_gravity.particles.new_channel_to( stars) channel_from_planetesimals_to_framework = planetesimals_gravity.particles.new_channel_to( planetesimals) pl_gravity = planet_gravity_for_disk(Huayno, stars_gravity.particles, converter, center=center) gravity = bridge.Bridge(use_threading=False) gravity.add_system(planetesimals_gravity, (pl_gravity, )) # stars work on planetesimals gravity.add_system(stars_gravity, ()) # stars are self aware (evolves itself) # timestep for BRIDGE relative to the period at r_step (or r_min, if no r_step is given) # BRIDGE_timestep = bridge_dt * P(r_step) if r_step is None: Porb_min = orbital_period((bodies[2:].position.lengths()).min(), bodies[0].mass) print " ** P_min_disk = ", Porb_min.in_(units.yr) gravity.timestep = bridge_dt * Porb_min else: Porb_min = orbital_period(r_step, bodies[0].mass) print " ** P_rin_disk = ", Porb_min.in_(units.yr) gravity.timestep = bridge_dt * Porb_min time_step = stars_gravity.get_timestep_parameter() print ' ** timesteps: \t stars gravity timestep parameter =', time_step print '\t\t bridge =', gravity.timestep Etot_init = stars_gravity.kinetic_energy + stars_gravity.potential_energy Etot = Etot_init ps.mkdir(snap_dir) duration = t_end - t_start dt = duration / float(n_steps) time = 0.0 | units.yr print "Duration:", duration, "t_start", t_start, "t_end", t_end, "dt:", dt print " ** evolving: t_start = ", t_start.value_in( 1000 * units.yr), "t_end = ", t_end.value_in(1000 * units.yr), ", dt = ", dt print " \t", "time", "\t\t\t", "E", "\t\t", "dE" stdout = (file_out.split('.'))[0] stdout += '.txt' f = open(snap_dir + "/" + stdout, 'a') # Joules J = units.m**2 * units.kg * units.s**-2 while time <= duration: gravity.evolve_model(time) channel_from_stars_to_framework.copy() channel_from_planetesimals_to_framework.copy() bodies.collection_attributes.timestamp = time + t_start Ekin = stars_gravity.kinetic_energy Epot = stars_gravity.potential_energy Etot = Ekin + Epot dE = Etot_init - Etot nb_E = converter.to_nbody(Etot) #nb_J = converter.nbody_length ** 2 * units.nbody_mass * units.nbody_time ** -2 # not supposed to work # A formatted string would work better than tabs. (Tabs never work) line = " \t" + str((time + t_start).value_in( units.yr)) + "\t" + str(nb_E) + "\t" + str(dE / Etot_init) print line f.write(line + "\n") # Write coordinates in Center of Mass frame # Move Stars to CoM (initially in CoM) #### The stars are already in CoM coordinates #### # Move planetesimals to CoM (initially w/ respect to star zero) planetesimals.velocity += stars[center].velocity planetesimals.position += stars[center].position write_set_to_file(bodies, snap_dir + "/" + file_out, "hdf5") time += dt f.close() # stdout gravity.stop() stars_gravity.stop() planetesimals_gravity.stop() pl_gravity.stop() # retrieval? return stars, planetesimals
def evolve_disk_flyby_together(stars, planetesimals, gravity, t_start, t_end, n_steps, converter, snap_dir, file_out): bodies = ParticlesSuperset([stars, planetesimals]) channel_from_gr_to_framework = gravity.particles.new_channel_to(bodies) rm_file(file_out) Etot_init = gravity.kinetic_energy + gravity.potential_energy Etot = Etot_init ps.mkdir(snap_dir) duration = t_end - t_start dt = duration / float(n_steps) time = 0.0 | units.yr print "Duration:", duration, "t_start", t_start, "t_end", t_end, "dt:", dt print " ** evolving: t_start = ", t_start.value_in( 1000 * units.yr), "t_end = ", t_end.value_in(1000 * units.yr), ", dt = ", dt print " \t", "time", "\t\t\t", "E", "\t\t", "dE" stdout = (file_out.split('.'))[0] stdout += '.txt' f = open(snap_dir + "/" + stdout, 'a') while time <= duration: gravity.evolve_model(time) channel_from_gr_to_framework.copy() bodies.collection_attributes.timestamp = time + t_start Ekin = gravity.kinetic_energy Epot = gravity.potential_energy Etot = Ekin + Epot dE = Etot_init - Etot nb_E = converter.to_nbody(Etot) #nb_J = converter.nbody_length ** 2 * units.nbody_mass * units.nbody_time ** -2 # not supposed to work # A formatted string would work better than tabs. (Tabs never work) line = " \t" + str((time + t_start).value_in( units.yr)) + "\t" + str(nb_E) + "\t" + str(dE / Etot_init) print line f.write(line + "\n") # Write coordinates in Center of Mass frame # Move Stars to CoM (initially in CoM) #### The stars are already in CoM coordinates #### # Move planetesimals to CoM (initially in CoM) #### The stars are already in CoM coordinates #### (Does this mean the other method is wrong?) write_set_to_file(bodies, snap_dir + "/" + file_out, "hdf5") time += dt gravity.stop() return stars, planetesimals
def __init__(self, number, snapshot_base=None, output_base=None, location=None, count=6, iter_num=None, grand=[]): # Output File if count == 3: number = '%03d' % int(number) # Old Format else: number = '%06d' % int( number ) # New Format (will fail if count = 4 or 5, which is bad) # Check if part of a suite if iter_num is not None: number += "_%02d" % int( iter_num) ##### This formatting will be added soon ##### if output_base is None: self.f1 = "outfile" + number + ".hdf5" else: self.f1 = "" + output_base + number + ".hdf5" # Snapshot Directory if snapshot_base is None: snapshot_dir = "sim" + number else: snapshot_dir = "" + snapshot_base + number if location is not None: snapshot_dir = location + "/" + snapshot_dir ## assume this is the directory for everything ## self.snapshot_dir = snapshot_dir # Updates Here ps.set_snapshot_dir(snapshot_dir) # Updates Elsewhere # Check if Encompassing Suite if (len(grand) > 0): # If the output print "Grand Output File", self.f1 if (os.path.exists(self.snapshot_dir) and os.path.exists(self.f1)): pass else: ps.mkdir(self.snapshot_dir) # initialize base directory # (1) Merge Output Files self.merge_output_files( number, snapshot_base, output_base, location, count, grand) ####### not implemented yet ####### # (2) Merge Info Files (.txt and .p) ^^^ self.snapshot_dir = snapshot_dir # Updates Here ps.set_snapshot_dir( snapshot_dir ) # Updates Elsewhere <<<<---- NOTE: IT WAS RESET!!!!!! # Bodies self.bodies = ps.parse_file(self.f1) # Simulation Info self.read_info_file() # Time self.times = quantities.AdaptingVectorQuantity() # Initialize States self.init_states() self.num_snapshots = len(self.times) self.save_star_separation() # Sorted Bodies + Keys (Change this to particle sets instead) self.unbound = np.zeros(len( self.times), dtype=np.ndarray) # These are arrays of Particle sets self.central = np.zeros(len(self.times), dtype=np.ndarray) self.passing = np.zeros(len(self.times), dtype=np.ndarray) self.both = np.zeros(len(self.times), dtype=np.ndarray) self.tmp_mask = np.zeros(len( self.times)) # for before the mask is applied self.mask = np.zeros( len(self.times )) # 1 indicates 'sorting' has occured at particular timestep # This mask needs to be incorporated into functions using sorted sets # For instance, the self.times array will need to be restricted to masked values ################# DO NOT MODIFY THE MASK DIRECTLY!!!!!! (switch to private?) ################ # Restore Sorts print " *** Restoring *** " self.restore() # Misc self.tmp_movie_dir = "tmp_movies_for_factory"
def handle_input(o, arguments): """ run one simulation based on the option parser input or a modified version """ # Option Parser Dictionary (This isn't a dictionary?!) if o.num_format == 3: o.sim_number = "%03d" % o.sim_number else: o.sim_number = "%06d" % o.sim_number o.snap_base = o.snap_dir o.snap_dir = o.snap_dir + o.sim_number o.fout = o.fout + o.sim_number + ".hdf5" stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl*pi_180, o.omega*pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha = o.power, seed = o.seed) #print stars #print planetesimals ps.mkdir(o.snap_dir, safety = True) # Write Info File f = open(o.snap_dir + "/info.txt", 'a') f.write("Simulation ID Number: " + str(o.sim_number) + "\n") f.write("Disk Random Seed: " + str(o.seed) + "\n") f.write("Number of Iterations: " + str(o.iter) + "\n") f.write("Number of Pericenter Arcs: " + str(o.num_T) + "\n") f.write("End of N-Body Time: " + str(o.nb_end) + "\n") f.write("Mass (Disk Star): " + str(o.m0) + "\n") f.write("Mass (Other Star): " + str(o.m1) + "\n") f.write("Initial Relative Force: " + str(o.rel_force) + "\n") f.write("Bridge Timestep: " + str(o.br_dt) + "\n") f.write("Huayno Timestep (eta): " + str(o.eta) + "\n") f.write("Inner Disk Radius: " + str(o.r_in) + "\n") f.write("Outer Disk Radius: " + str(o.r_out) + "\n") f.write("Number of Disk Particles: " + str(o.n_disk) + "\n") f.write("Disk Particle Power Law: " + str(o.power) + "\n") f.write("Orbit Pericenter: " + str(o.peri) + "\n") f.write("Orbit Eccentricity: " + str(o.ecc) + "\n") f.write("Orbit Inclination: " + str(o.incl) + "\n") f.write("Orbit Argument of Periapsis: " + str(o.omega) + "\n") f.write("Number of Steps: " + str(o.n_steps) + "\n") f.close() # Write 'o' dictionary into file (using Pickle) pickle_f = open(o.snap_dir + "/info.p", "wb") pickle.dump(o, pickle_f) pickle_f.close() r_step = o.r_in ### set timestep based on period of innermost disk particles ### t_end = o.num_T * abs(time_peri) # Current Target Period: 4.0 T #t_end = 1300.0 | units.yr def process(): integrate_disk_flyby(stars, planetesimals, t_end, time_peri, o.nb_end, o.n_steps, r_step, o.snap_dir, o.fout, o.fredir, o.br_dt, o.eta) p = Process(target = process) p.start() return o, p
def evolve_disk_flyby(stars, planetesimals, stars_gravity, planetesimals_gravity, t_start, t_end, n_steps, converter, snap_dir, file_out, r_step, bridge_dt, center = 0): """ Input Parameters: stars --- Star bodies planetesimals --- Non-star bodies stars_gravity --- planetesimals_gravity --- t_end --- Total Integration Time n_steps --- Number of Snapshots converter --- snap_dir --- file_out --- r_step --- bridge_dt --- Bridge Timestep """ bodies = ParticlesSuperset([stars, planetesimals]) channel_from_stars_to_framework = stars_gravity.particles.new_channel_to(stars) channel_from_planetesimals_to_framework = planetesimals_gravity.particles.new_channel_to(planetesimals) pl_gravity = planet_gravity_for_disk(Huayno, stars_gravity.particles, converter, center = center) gravity = bridge.Bridge(use_threading=False) gravity.add_system(planetesimals_gravity, (pl_gravity,) ) # stars work on planetesimals gravity.add_system(stars_gravity, () ) # stars are self aware (evolves itself) # timestep for BRIDGE relative to the period at r_step (or r_min, if no r_step is given) # BRIDGE_timestep = bridge_dt * P(r_step) if r_step is None: Porb_min = orbital_period((bodies[2:].position.lengths()).min(), bodies[0].mass) print " ** P_min_disk = ", Porb_min.in_(units.yr) gravity.timestep = bridge_dt*Porb_min else: Porb_min = orbital_period(r_step, bodies[0].mass) print " ** P_rin_disk = ", Porb_min.in_(units.yr) gravity.timestep = bridge_dt*Porb_min time_step = stars_gravity.get_timestep_parameter() print ' ** timesteps: \t stars gravity timestep parameter =', time_step print '\t\t bridge =', gravity.timestep Etot_init = stars_gravity.kinetic_energy + stars_gravity.potential_energy Etot = Etot_init ps.mkdir(snap_dir) duration = t_end - t_start dt = duration / float(n_steps) time = 0.0 | units.yr print "Duration:", duration, "t_start", t_start, "t_end", t_end, "dt:", dt print " ** evolving: t_start = ", t_start.value_in(1000 * units.yr), "t_end = ", t_end.value_in(1000 * units.yr), ", dt = ", dt print " \t", "time", "\t\t\t", "E", "\t\t", "dE" stdout = (file_out.split('.'))[0] stdout += '.txt' f = open(snap_dir + "/" + stdout, 'a') # Joules J = units.m ** 2 * units.kg * units.s ** -2 while time<=duration: gravity.evolve_model(time) channel_from_stars_to_framework.copy() channel_from_planetesimals_to_framework.copy() bodies.collection_attributes.timestamp = time + t_start Ekin = stars_gravity.kinetic_energy Epot = stars_gravity.potential_energy Etot = Ekin + Epot dE = Etot_init-Etot nb_E = converter.to_nbody(Etot) #nb_J = converter.nbody_length ** 2 * units.nbody_mass * units.nbody_time ** -2 # not supposed to work # A formatted string would work better than tabs. (Tabs never work) line = " \t" + str((time + t_start).value_in(units.yr)) + "\t" + str(nb_E) + "\t" + str(dE/Etot_init) print line f.write(line + "\n") # Write coordinates in Center of Mass frame # Move Stars to CoM (initially in CoM) #### The stars are already in CoM coordinates #### # Move planetesimals to CoM (initially w/ respect to star zero) planetesimals.velocity += stars[center].velocity planetesimals.position += stars[center].position write_set_to_file(bodies, snap_dir + "/" + file_out, "hdf5") time += dt f.close() # stdout gravity.stop() stars_gravity.stop() planetesimals_gravity.stop() pl_gravity.stop() # retrieval? return stars, planetesimals
def evolve_disk_flyby_together(stars, planetesimals, gravity, t_start, t_end, n_steps, converter, snap_dir, file_out): bodies = ParticlesSuperset([stars, planetesimals]) channel_from_gr_to_framework = gravity.particles.new_channel_to(bodies) rm_file(file_out) Etot_init = gravity.kinetic_energy + gravity.potential_energy Etot = Etot_init ps.mkdir(snap_dir) duration = t_end - t_start dt = duration / float(n_steps) time = 0.0 | units.yr print "Duration:", duration, "t_start", t_start, "t_end", t_end, "dt:", dt print " ** evolving: t_start = ", t_start.value_in(1000 * units.yr), "t_end = ", t_end.value_in(1000 * units.yr), ", dt = ", dt print " \t", "time", "\t\t\t", "E", "\t\t", "dE" stdout = (file_out.split('.'))[0] stdout += '.txt' f = open(snap_dir + "/" + stdout, 'a') while time<=duration: gravity.evolve_model(time) channel_from_gr_to_framework.copy() bodies.collection_attributes.timestamp = time + t_start Ekin = gravity.kinetic_energy Epot = gravity.potential_energy Etot = Ekin + Epot dE = Etot_init-Etot nb_E = converter.to_nbody(Etot) #nb_J = converter.nbody_length ** 2 * units.nbody_mass * units.nbody_time ** -2 # not supposed to work # A formatted string would work better than tabs. (Tabs never work) line = " \t" + str((time + t_start).value_in(units.yr)) + "\t" + str(nb_E) + "\t" + str(dE/Etot_init) print line f.write(line + "\n") # Write coordinates in Center of Mass frame # Move Stars to CoM (initially in CoM) #### The stars are already in CoM coordinates #### # Move planetesimals to CoM (initially in CoM) #### The stars are already in CoM coordinates #### (Does this mean the other method is wrong?) write_set_to_file(bodies, snap_dir + "/" + file_out, "hdf5") time += dt gravity.stop() return stars, planetesimals
stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl * pi_180, o.omega * pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha=o.power, seed=o.seed) #print stars #print planetesimals ps.mkdir(o.snap_dir, safety=True) # Write Info File f = open(o.snap_dir + "/info.txt", 'a') f.write("Simulation ID Number: " + str(o.sim_number) + "\n") f.write("Disk Random Seed: " + str(o.seed) + "\n") f.write("Number of Pericenter Arcs: " + str(o.num_T) + "\n") f.write("End of N-Body Time: " + str(o.nb_end) + "\n") f.write("Mass (Disk Star): " + str(o.m0) + "\n") f.write("Mass (Other Star): " + str(o.m1) + "\n") f.write("Initial Relative Force: " + str(o.rel_force) + "\n") f.write("Bridge Timestep: " + str(o.br_dt) + "\n") f.write("Huayno Timestep (eta): " + str(o.eta) + "\n") f.write("Inner Disk Radius: " + str(o.r_in) + "\n") f.write("Outer Disk Radius: " + str(o.r_out) + "\n") f.write("Number of Disk Particles: " + str(o.n_disk) + "\n")
def __init__(self, number, snapshot_base = None, output_base = None, location = None, count = 6, iter_num = None, grand = []): # Output File if count == 3: number = '%03d' % int(number) # Old Format else: number = '%06d' % int(number) # New Format (will fail if count = 4 or 5, which is bad) # Check if part of a suite if iter_num is not None: number += "_%02d" % int(iter_num) ##### This formatting will be added soon ##### if output_base is None: self.f1 = "outfile" + number + ".hdf5" else: self.f1 = "" + output_base + number + ".hdf5" # Snapshot Directory if snapshot_base is None: snapshot_dir = "sim" + number else: snapshot_dir = "" + snapshot_base + number if location is not None: snapshot_dir = location + "/" + snapshot_dir ## assume this is the directory for everything ## self.snapshot_dir = snapshot_dir # Updates Here ps.set_snapshot_dir(snapshot_dir) # Updates Elsewhere # Check if Encompassing Suite if (len(grand) > 0): # If the output print "Grand Output File", self.f1 if (os.path.exists(self.snapshot_dir) and os.path.exists(self.f1)): pass else: ps.mkdir(self.snapshot_dir) # initialize base directory # (1) Merge Output Files self.merge_output_files(number, snapshot_base, output_base, location, count, grand) ####### not implemented yet ####### # (2) Merge Info Files (.txt and .p) ^^^ self.snapshot_dir = snapshot_dir # Updates Here ps.set_snapshot_dir(snapshot_dir) # Updates Elsewhere <<<<---- NOTE: IT WAS RESET!!!!!! # Bodies self.bodies = ps.parse_file(self.f1) # Simulation Info self.read_info_file() # Time self.times = quantities.AdaptingVectorQuantity() # Initialize States self.init_states() self.num_snapshots = len(self.times) self.save_star_separation() # Sorted Bodies + Keys (Change this to particle sets instead) self.unbound = np.zeros(len(self.times), dtype = np.ndarray) # These are arrays of Particle sets self.central = np.zeros(len(self.times), dtype = np.ndarray) self.passing = np.zeros(len(self.times), dtype = np.ndarray) self.both = np.zeros(len(self.times), dtype = np.ndarray) self.tmp_mask = np.zeros(len(self.times)) # for before the mask is applied self.mask = np.zeros(len(self.times)) # 1 indicates 'sorting' has occured at particular timestep # This mask needs to be incorporated into functions using sorted sets # For instance, the self.times array will need to be restricted to masked values ################# DO NOT MODIFY THE MASK DIRECTLY!!!!!! (switch to private?) ################ # Restore Sorts print " *** Restoring *** " self.restore() # Misc self.tmp_movie_dir = "tmp_movies_for_factory"
o.sim_number = "%06d" % o.sim_number snap_base = o.snap_dir o.snap_dir = o.snap_dir + o.sim_number o.fout = o.fout + o.sim_number + ".hdf5" stars, time_peri = get_orbit_ini(o.m0, o.m1, o.peri, o.ecc, o.incl*pi_180, o.omega*pi_180, o.rel_force, o.r_out) planetesimals = get_planetesimals_disk(o.n_disk, o.r_in, o.r_out, o.m0, alpha = o.power, seed = o.seed) #print stars #print planetesimals ps.mkdir(o.snap_dir, safety = True) # Write Info File f = open(o.snap_dir + "/info.txt", 'a') f.write("Simulation ID Number: " + str(o.sim_number) + "\n") f.write("Disk Random Seed: " + str(o.seed) + "\n") f.write("Number of Pericenter Arcs: " + str(o.num_T) + "\n") f.write("End of N-Body Time: " + str(o.nb_end) + "\n") f.write("Mass (Disk Star): " + str(o.m0) + "\n") f.write("Mass (Other Star): " + str(o.m1) + "\n") f.write("Initial Relative Force: " + str(o.rel_force) + "\n") f.write("Bridge Timestep: " + str(o.br_dt) + "\n") f.write("Huayno Timestep (eta): " + str(o.eta) + "\n") f.write("Inner Disk Radius: " + str(o.r_in) + "\n") f.write("Outer Disk Radius: " + str(o.r_out) + "\n") f.write("Number of Disk Particles: " + str(o.n_disk) + "\n")