def glass(N, target_rms=0.05): """ make glass for initial condition generation """ if target_rms < 0.001: print "warning: target_rms highly unlikely to succeed" L = 1 | nbody_system.length dt = 0.01 | nbody_system.time x, y, z = uniform_random_unit_cube(N).make_xyz() vx, vy, vz = uniform_unit_sphere(N).make_xyz() p = datamodel.Particles(N) p.x = L * x p.y = L * y p.z = L * z p.h_smooth = 0. * L p.vx = 0.1 * vx | (nbody_system.speed) p.vy = 0.1 * vy | (nbody_system.speed) p.vz = 0.1 * vz | (nbody_system.speed) p.u = (0.1 * 0.1) | nbody_system.speed**2 p.mass = (8. / N) | nbody_system.mass sph = Fi(use_gl=False, mode='periodic', redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag = True sph.parameters.radiation_flag = False sph.parameters.self_gravity_flag = False sph.parameters.gamma = 1 sph.parameters.isothermal_flag = True sph.parameters.integrate_entropy_flag = False sph.parameters.timestep = dt sph.parameters.verbosity = 0 sph.parameters.pboxsize = 2 * L sph.parameters.artificial_viscosity_alpha = 1. sph.parameters.beta = 2. sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() # sph.start_viewer() t = 0. | nbody_system.time rms = 1. # i = 0 while rms > target_rms: t = t + (0.25 | nbody_system.time) sph.evolve_model(t) h = sph.particles.h_smooth.value_in(nbody_system.length) rho = h**(-3.) rms = rho.std() / rho.mean() print rms, target_rms x = sph.particles.x.value_in(nbody_system.length) y = sph.particles.y.value_in(nbody_system.length) z = sph.particles.z.value_in(nbody_system.length) sph.stop() return x, y, z
def glass(N, target_rms=0.05): """ make glass for initial condition generation """ if target_rms < 0.001: print "warning: target_rms highly unlikely to succeed" L=1| nbody_system.length dt=0.01 | nbody_system.time x,y,z=uniform_random_unit_cube(N).make_xyz() vx,vy,vz=uniform_unit_sphere(N).make_xyz() p=datamodel.Particles(N) p.x=L*x p.y=L*y p.z=L*z p.h_smooth=0. * L p.vx= 0.1*vx | (nbody_system.speed) p.vy= 0.1*vy | (nbody_system.speed) p.vz= 0.1*vz | (nbody_system.speed) p.u= (0.1*0.1) | nbody_system.speed**2 p.mass=(8./N) | nbody_system.mass sph=Fi(use_gl=False,mode='periodic',redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag=True sph.parameters.radiation_flag=False sph.parameters.self_gravity_flag=False sph.parameters.gamma=1 sph.parameters.isothermal_flag=True sph.parameters.integrate_entropy_flag=False sph.parameters.timestep=dt sph.parameters.verbosity=0 sph.parameters.pboxsize=2*L sph.parameters.artificial_viscosity_alpha = 1. sph.parameters.beta = 2. sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() # sph.start_viewer() t=0. | nbody_system.time rms=1. i=0 while rms > target_rms: t=t+(0.25 | nbody_system.time) sph.evolve_model(t) h=sph.particles.h_smooth.value_in(nbody_system.length) rho=h**(-3.) rms=rho.std()/rho.mean() print rms, target_rms x=sph.particles.x.value_in(nbody_system.length) y=sph.particles.y.value_in(nbody_system.length) z=sph.particles.z.value_in(nbody_system.length) sph.stop() return x,y,z
def new_star_code_fi(self): result = Fi() result.parameters.self_gravity_flag = True result.parameters.use_hydro_flag = False result.parameters.radiation_flag = False result.parameters.periodic_box_size = 500 | units.parsec result.parameters.timestep = 0.125 * self.interaction_timestep result.particles.add_particles(self.new_particles_cluster()) result.commit_particles() return result
def new_star_code_fi(self): result = Fi(self.converter) result.parameters.self_gravity_flag = True result.parameters.use_hydro_flag = False result.parameters.radiation_flag = False result.parameters.periodic_box_size = 500 | units.parsec result.parameters.timestep = 0.125 * self.interaction_timestep result.particles.add_particles(self.new_particles_cluster()) result.commit_particles() return result
def new_gas_code_fi(self): result = Fi(self.converter) result.parameters.self_gravity_flag = True result.parameters.use_hydro_flag = True result.parameters.radiation_flag = False result.parameters.periodic_box_size = 500 | units.parsec result.parameters.timestep = 0.125 * self.interaction_timestep #result.parameters.adaptive_smoothing_flag = True #result.parameters.epsilon_squared = self.gas_epsilon ** 2 #result.parameters.eps_is_h_flag = False result.parameters.integrate_entropy_flag = False #result.parameters.self_gravity_flag = False result.gas_particles.add_particles(self.new_gas_cluster()) result.commit_particles() return result
def new_gas_code_fi(self): result = Fi(self.converter) result.parameters.self_gravity_flag = True result.parameters.use_hydro_flag = True result.parameters.radiation_flag = False result.parameters.periodic_box_size = 500 | units.parsec result.parameters.timestep = 0.125 * self.interaction_timestep # result.parameters.adaptive_smoothing_flag = True # result.parameters.epsilon_squared = self.gas_epsilon ** 2 # result.parameters.eps_is_h_flag = False result.parameters.integrate_entropy_flag = False # result.parameters.self_gravity_flag = False result.gas_particles.add_particles(self.new_gas_cluster()) result.commit_particles() return result
def iliev_test_5( N=10000, Ns=10, L=15. | units.kpc, dt=None): """ prepare iliev test and return SPH and simplex interfaces """ gas,sources=iliev_test_5_ic(N,Ns,L) conv=nbody_system.nbody_to_si(1.0e9 | units.MSun, 1.0 | units.kpc) sph=Fi(conv,use_gl=False,mode='periodic',redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag=True sph.parameters.radiation_flag=False sph.parameters.self_gravity_flag=False sph.parameters.gamma=1 sph.parameters.isothermal_flag=True sph.parameters.integrate_entropy_flag=False sph.parameters.timestep=dt sph.parameters.verbosity=0 sph.parameters.pboxsize=2*L sph.commit_parameters() sph.gas_particles.add_particles(gas) sph.commit_particles() # sph.start_viewer() rad=SimpleX(number_of_workers = 1,redirection='none') rad.initialize_code() rad.parameters.box_size=2*L rad.parameters.hilbert_order=0 rad.commit_parameters() gas.add_particles(sources) rad.particles.add_particles(gas) rad.commit_particles() return sph,rad
def new_hydro(gas, converter, time_step, distributed): if distributed is None: # distributed_kwargs = dict(number_of_workers=24, label="hydro") distributed_kwargs = dict(number_of_workers=16) else: # distributed_kwargs = dict(label="local", number_of_workers=6, number_of_nodes=1) distributed_kwargs = dict(label="hydro", number_of_workers=16, number_of_nodes=1) if "cartesius" in distributed.resources.name: distributed.pilots.add_pilot(new_cartesius_pilot()) print "Waiting for Cartesius reservation" distributed.wait_for_pilots() print "Start hydro" if True: hydro = Gadget2( converter, redirection="file", redirect_file="gas_code.log", **distributed_kwargs) # hydro.parameters.n_smooth = 64 # hydro.parameters.n_smooth_tol = 0.005 |units.none hydro.parameters.time_max = 32.0 | units.Myr hydro.parameters.max_size_timestep = time_step hydro.parameters.time_limit_cpu = 1.0 | units.yr else: distributed_kwargs['number_of_threads'] = distributed_kwargs['number_of_workers'] distributed_kwargs['number_of_workers'] = 1 print distributed_kwargs hydro = Fi( converter, mode='openmp', redirection="file", redirect_file="gas_code.log", **distributed_kwargs) hydro.parameters.eps_is_h_flag = True hydro.parameters.timestep = time_step hydro.parameters.verbosity = 99 hydro.gas_particles.add_particles(gas) hydro.commit_particles() eps = hydro.gas_particles.radius.as_quantity_in(units.parsec) print "Gravitational softening for gas (mean, min, max):", eps.mean(), eps.min(), eps.max() return hydro
def iliev_test_5(N=10000, Ns=10, L=15. | units.kpc, dt=None): """ prepare iliev test and return SPH and simplex interfaces """ gas, sources = iliev_test_5_ic(N, Ns, L) conv = nbody_system.nbody_to_si(1.0e9 | units.MSun, 1.0 | units.kpc) sph = Fi(conv, use_gl=False, mode='periodic', redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag = True sph.parameters.radiation_flag = False sph.parameters.self_gravity_flag = False sph.parameters.gamma = 1 sph.parameters.isothermal_flag = True sph.parameters.integrate_entropy_flag = False sph.parameters.timestep = dt sph.parameters.verbosity = 0 sph.parameters.pboxsize = 2 * L sph.commit_parameters() sph.gas_particles.add_particles(gas) sph.commit_particles() # sph.start_viewer() rad = SimpleX(number_of_workers=1, redirection='none') rad.initialize_code() rad.parameters.box_size = 2 * L rad.parameters.hilbert_order = 0 rad.commit_parameters() gas.add_particles(sources) rad.particles.add_particles(gas) rad.commit_particles() return sph, rad
def make_xyz(self): from amuse.community.fi.interface import Fi N = self.targetN target_rms = self.target_rms L = 1 | nbody_system.length dt = 0.01 | nbody_system.time x, y, z = uniform_random_unit_cube(N).make_xyz() vx, vy, vz = uniform_unit_sphere(N).make_xyz() p = Particles(N) p.x = L * x p.y = L * y p.z = L * z p.h_smooth = 0. * L p.vx = 0.1 * vx | (nbody_system.speed) p.vy = 0.1 * vy | (nbody_system.speed) p.vz = 0.1 * vz | (nbody_system.speed) p.u = (0.1 * 0.1) | nbody_system.speed**2 p.mass = (8. / N) | nbody_system.mass sph = Fi(use_gl=False, mode='periodic', redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag = True sph.parameters.radiation_flag = False sph.parameters.self_gravity_flag = False sph.parameters.gamma = 1. sph.parameters.isothermal_flag = True sph.parameters.integrate_entropy_flag = False sph.parameters.timestep = dt sph.parameters.verbosity = 0 sph.parameters.periodic_box_size = 2 * L sph.parameters.artificial_viscosity_alpha = 1. sph.parameters.beta = 2. sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() # sph.start_viewer() t = 0. | nbody_system.time rms = 1. minrms = 1. i = 0 while rms > target_rms: i += 1 t = t + (0.25 | nbody_system.time) sph.evolve_model(t) rho = sph.particles.rho.value_in(nbody_system.density) rms = rho.std() / rho.mean() minrms = min(minrms, rms) if rms > 2. * minrms or i > 300: print " RMS(rho) convergence warning:", i, rms, minrms if i > 100000: print "i> 100k steps - not sure about this..." print " rms:", rms break x = sph.particles.x.value_in(nbody_system.length) y = sph.particles.y.value_in(nbody_system.length) z = sph.particles.z.value_in(nbody_system.length) del sph return x, y, z
def glass(self): from amuse.community.fi.interface import Fi if self.target_rms < 0.0001: print "warning: target_rms may not succeed" if self.number_of_particles < 1000: print "warning: not enough particles" N = 2 * self.number_of_particles L = 1 | nbody_system.length dt = 0.01 | nbody_system.time x, y, z = self._random_cube(N) vx,vy,vz= self.random(N) p = Particles(N) p.x = L * x p.y = L * y p.z = L * z p.h_smooth = 0.0 | nbody_system.length p.vx = (0.1 | nbody_system.speed) * vx p.vy = (0.1 | nbody_system.speed) * vy p.vz = (0.1 | nbody_system.speed) * vz p.u = (0.1*0.1) | nbody_system.speed**2 p.mass = (8.0/N) | nbody_system.mass sph = Fi(mode = 'periodic', redirection = 'none') sph.initialize_code() sph.parameters.use_hydro_flag = True sph.parameters.radiation_flag = False sph.parameters.self_gravity_flag = False sph.parameters.gamma = 1.0 sph.parameters.isothermal_flag = True sph.parameters.integrate_entropy_flag = False sph.parameters.timestep = dt sph.parameters.verbosity = 0 sph.parameters.periodic_box_size = 2 * L sph.parameters.artificial_viscosity_alpha = 1.0 sph.parameters.beta = 2.0 sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() t = 0.0 | nbody_system.time rms = 1.0 minrms = 1.0 i = 0 while rms > self.target_rms: i += 1 t += (0.25 | nbody_system.time) sph.evolve_model(t) rho = sph.particles.rho.value_in(nbody_system.density) rms = rho.std()/rho.mean() minrms = min(minrms, rms) if (rms > 2.0*minrms) or (i > 300): print " RMS(rho) convergence warning:", i, rms, minrms if i > 100000: print "i> 100k steps - not sure about this..." print " rms:", rms break x = sph.particles.x.value_in(nbody_system.length) y = sph.particles.y.value_in(nbody_system.length) z = sph.particles.z.value_in(nbody_system.length) sph.stop() del sph return self._cutout_sphere(x, y, z)
def glass(self): from amuse.community.fi.interface import Fi if self.target_rms < 0.0001: print("warning: target_rms may not succeed") if self.number_of_particles < 1000: print("warning: not enough particles") N = 2 * self.number_of_particles L = 1 | nbody_system.length dt = 0.01 | nbody_system.time x, y, z = self._random_cube(N) vx,vy,vz= self.random(N) p = Particles(N) p.x = L * x p.y = L * y p.z = L * z p.h_smooth = 0.0 | nbody_system.length p.vx = (0.1 | nbody_system.speed) * vx[:N] p.vy = (0.1 | nbody_system.speed) * vy[:N] p.vz = (0.1 | nbody_system.speed) * vz[:N] p.u = (0.1*0.1) | nbody_system.speed**2 p.mass = (8.0/N) | nbody_system.mass sph = Fi(mode = 'periodic', redirection = 'none') sph.initialize_code() sph.parameters.use_hydro_flag = True sph.parameters.radiation_flag = False sph.parameters.self_gravity_flag = False sph.parameters.gamma = 1.0 sph.parameters.isothermal_flag = True sph.parameters.integrate_entropy_flag = False sph.parameters.timestep = dt sph.parameters.verbosity = 0 sph.parameters.periodic_box_size = 2 * L sph.parameters.artificial_viscosity_alpha = 1.0 sph.parameters.beta = 2.0 sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() t = 0.0 | nbody_system.time rms = 1.0 minrms = 1.0 i = 0 while rms > self.target_rms: i += 1 t += (0.25 | nbody_system.time) sph.evolve_model(t) rho = sph.particles.rho.value_in(nbody_system.density) rms = rho.std()/rho.mean() minrms = min(minrms, rms) if (rms > 2.0*minrms) or (i > 300): print(" RMS(rho) convergence warning:", i, rms, minrms) if i > 100000: print("i> 100k steps - not sure about this...") print(" rms:", rms) break x = sph.particles.x.value_in(nbody_system.length) y = sph.particles.y.value_in(nbody_system.length) z = sph.particles.z.value_in(nbody_system.length) sph.stop() del sph return self._cutout_sphere(x, y, z)
def make_xyz(self): from amuse.community.fi.interface import Fi N=self.targetN target_rms=self.target_rms L=1| nbody_system.length dt=0.01 | nbody_system.time x,y,z=uniform_random_unit_cube(N).make_xyz() vx,vy,vz=uniform_unit_sphere(N).make_xyz() p=Particles(N) p.x=L*x p.y=L*y p.z=L*z p.h_smooth=0. * L p.vx= 0.1*vx | (nbody_system.speed) p.vy= 0.1*vy | (nbody_system.speed) p.vz= 0.1*vz | (nbody_system.speed) p.u= (0.1*0.1) | nbody_system.speed**2 p.mass=(8./N) | nbody_system.mass sph=Fi(use_gl=False,mode='periodic',redirection='none') sph.initialize_code() sph.parameters.use_hydro_flag=True sph.parameters.radiation_flag=False sph.parameters.self_gravity_flag=False sph.parameters.gamma=1. sph.parameters.isothermal_flag=True sph.parameters.integrate_entropy_flag=False sph.parameters.timestep=dt sph.parameters.verbosity=0 sph.parameters.periodic_box_size=2*L sph.parameters.artificial_viscosity_alpha = 1. sph.parameters.beta = 2. sph.commit_parameters() sph.gas_particles.add_particles(p) sph.commit_particles() # sph.start_viewer() t=0. | nbody_system.time rms=1. minrms=1. i=0 while rms > target_rms: i+=1 t=t+(0.25 | nbody_system.time) sph.evolve_model(t) rho=sph.particles.rho.value_in(nbody_system.density) rms=rho.std()/rho.mean() minrms=min(minrms,rms) if rms>2.*minrms or i>300: print " RMS(rho) convergence warning:", i, rms,minrms if i>100000: print "i> 100k steps - not sure about this..." print " rms:", rms break x=sph.particles.x.value_in(nbody_system.length) y=sph.particles.y.value_in(nbody_system.length) z=sph.particles.z.value_in(nbody_system.length) del sph return x,y,z