def main(): N=1024 N2 = 0 x = 1.25 #convert_nbody = nbody_system.nbody_to_si(1.0*N | units.MSun, 149.5e3 | units.AU) radius = 0.0 | nbody_system.length #radius = convert_nbody.to_si(radius) eta=1/32. | nbody_system.time #eta = convert_nbody.to_si(eta) eps=0.001 | nbody_system.length #eps = convert_nbody.to_si(eps) dt=0.5 | nbody_system.time #dt = convert_nbody.to_si(dt) tmax=350 | nbody_system.time #tmax = convert_nbody.to_si(tmax) parts=MakePlummerModel(N).result parts.radius=radius #Mass segregation if N2 >0: N1 = N-N2 m1 = 1/(N1+x*N2) m2 = x*m1 M1 = numpy.zeros((N1,1)) + (m1) M2 = numpy.zeros((N2,1)) + (m2) M = numpy.concatenate((M1,M2)) parts.mass = nbody_system.mass.new_quantity(numpy.hstack(M)) #gravity = Fi(convert_nbody) gravity = Fi() gravity.initialize_code() gravity.parameters.epsilon_squared = eps**2 gravity.parameters.timestep = eta gravity.legacy_interface.set_gdgtol(0.001) gravity.legacy_interface.set_gdgop(0) gravity.legacy_interface.set_usequad(0) gravity.legacy_interface.set_acc_tstp(0) gravity.legacy_interface.set_bh_tol(0.5) gravity.legacy_interface.set_tstpcr2(0.025) gravity.legacy_interface.set_sqrttstp(0) gravity.legacy_interface.set_tstepcrit(0.25) #gravity.parameters.initial_timestep_parameter=etas gravity.commit_parameters() gravity.particles.add_particles(parts) time=0 | nbody_system.time #time = convert_nbody.to_si(time) gravity.synchronize_model() #e0=gravity.particles.kinetic_energy() + \ # gravity.particles.potential_energy() # e0=gravity.particles.kinetic_energy() + \ gravity.particles.potential_energy(smoothing_length_squared=eps**2,G=nbody_system.G) e0=gravity.kinetic_energy + \ gravity.potential_energy output_file = "Fi.hdf5" if os.path.exists(output_file): os.remove(output_file) storage = store.StoreHDF(output_file) #from_gravity_to_model = gravity.particles.new_channel_to(parts) #L = [] #output = open('data.pkl', 'wb') parts = gravity.particles.copy() # ek = gravity.kinetic_energy # ep = gravity.potential_energy # e0 = ek + ep while time < tmax: ek = gravity.kinetic_energy ep = gravity.potential_energy print "time,T/V,err_E:", time,(ek/ep).number, ((ep+ek-e0)/e0).number #print "time,T/V,err_E:", time, ep # L.append(LagrangianRadii(parts)[-1]) gravity.particles.new_channel_to(parts).copy() #parts = gravity.particles.copy() #parts = gravity.particles.copy() parts.savepoint(time) storage.store(parts.previous_state()) time=time+dt gravity.evolve_model(time) gravity.synchronize_model() # write_set_to_file(parts,'cc_nb/cc_nb_'+str(time.number/dt.number)+'.txt') #parts_temp = gravity.particles.copy() #print parts_temp # pickle.dump(adaas,output) # parts.savepoint(time) # storage.store(parts.previous_state()) storage.close() #output.close() del gravity del parts
with_units = len(sys.argv) > 2 if not with_units : mass_unit = nbody_system.mass length_unit = nbody_system.length else : mass_unit = units.MSun length_unit = units.parsec m_min = 0.1 | mass_unit m_max = 100 | mass_unit alpha = -2.35 r_vir = 1 | length_unit initial_mass_function = SalpeterIMF(m_min, m_max, alpha) m_tot, masses = initial_mass_function.next_set(nstars) if not with_units : convert_nbody = None masses /= m_tot.value_in(nbody_system.mass) # scale to unit mass m_tot = 1 | nbody_system.mass else : convert_nbody = nbody_system.nbody_to_si(m_tot, r_vir) convert_nbody.set_as_default() print m_tot stars = MakePlummerModel(nstars, convert_nbody, random_state = seed).result; stars.mass = masses LagrangianRadii(stars, verbose=1)
eps=0.001 | nbody_system.length dt=0.5 | nbody_system.time tmax=500 | nbody_system.time parts=MakePlummerModel(N).result #Mass segregation N2 = 82 x = 1.25 N1 = N-N2 m1 = 1/(N1+x*N2) m2 = x*m1 M1 = numpy.zeros((N1,1)) + (m1) M2 = numpy.zeros((N2,1)) + (m2) M = numpy.concatenate((M1,M2)) parts.mass = nbody_system.mass.new_quantity(numpy.hstack(M)) parts.radius=radius gravity=PhiGRAPE()#(mode="gpu") gravity.parameters.epsilon_squared = eps**2 gravity.particles.add_particles(parts) gravity.parameters.timestep_parameter=eta gravity.parameters.initial_timestep_parameter=etas time=0 | nbody_system.time e0=gravity.particles.kinetic_energy() + \ gravity.particles.potential_energy(smoothing_length_squared=eps**2,G=nbody_system.G) MassFraction = [0.005, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 1.0] \ | units.none def distance_sq(stars) : return stars.x**2 + stars.y**2 +stars.z**2