Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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                  
Exemple #4
0
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
Exemple #5
0
    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
Exemple #6
0
 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)
Exemple #7
0
 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)
Exemple #8
0
    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