def uniform_distribution(N, R, koeff=1./3.): #koeff nulemia pasiskirstyma. x_stars, y_stars, z_stars = vector_projection(N, np.power(np.random.sample(N), koeff) * R) bodies = Bodies() bodies.r = np.transpose(np.array([x_stars, y_stars, z_stars])) bodies.m = np.ones(N) * constants.SOLAR_MASS bodies.v = np.zeros(bodies.r.shape) M = np.sum(bodies.m) ro = M/(4./3.*np.pi*R**3) print "Expected collapse time : {:e}".format(np.sqrt(3*np.pi/32./constants.G/ro)) return bodies, 'dist{:.3}'.format(koeff)
def plummer(N, r_pl): M_min = 0.08 # min zvaigzdes mase M_max = 100 # max zvaigzdes mase mStars = IMF_salpeter(N, M_min, M_max) * constants.SOLAR_MASS rStars = np.sort(distance_plummer(N, r_pl)) xStars, yStars, zStars = vector_projection(N, rStars) vStars = velocity_kepler(N, mStars, rStars) v_xStars, v_yStars, v_zStars = vector_projection(N, vStars) bodies = Bodies() bodies.r = np.transpose(np.array([xStars, yStars, zStars])) bodies.m = np.array(mStars) bodies.v = np.transpose(np.array([v_xStars, v_yStars, v_zStars])) return bodies, 'plummer'
def uniform_sphere(N, R): phi = np.random.random((N)) * 2.0 * np.pi costheta = (np.random.random((N)) - 0.5) * 2.0 u = np.random.random((N)) theta = np.arccos(costheta) r = R * u**(1.0/3.0) x_stars = r * np.sin(theta) * np.cos(phi) y_stars = r * np.sin(theta) * np.sin(phi) z_stars = r * np.cos(theta) bodies = Bodies() bodies.r = np.transpose(np.array([x_stars, y_stars, z_stars])) bodies.m = np.ones(N) * constants.SOLAR_MASS bodies.v = np.zeros(bodies.r.shape) M = np.sum(bodies.m) ro = M/(4./3.*np.pi*R**3) print "Expected collapse time : {:e}".format(np.sqrt(3*np.pi/32./constants.G/ro)) return bodies, 'sphere'