예제 #1
0
def _sink_particle_posz(field, data):
    """
    Retrieve particle z position from .snktxt file
    """
    particle_posz = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_posz = yt.YTArray(np.array(particle_posz), "pc")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        particle_posz = loaded_sink_data['z']*data.ds.length_unit.in_units("pc").value
        particle_posz = yt.YTArray(np.array(particle_posz), "pc")
    return particle_posz
예제 #2
0
def _sink_particle_vely(field, data):
    """
    Retrieve particle y velocity from .snktxt file
    """
    particle_vely = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_vely = yt.YTArray(np.array(particle_vely), "km/s")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        particle_vely = loaded_sink_data['uy']*data.ds.velocity_unit.in_units("km/s").value
        particle_vely = yt.YTArray(np.array(particle_vely), "km/s")
    return particle_vely
예제 #3
0
def _sink_particle_tag(field, data):
    """
    Retrieve particle tags from .snktxt file
    """
    particle_tag = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_tag = yt.YTArray(np.array(particle_tag), "")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        particle_tag = np.arange(float(len(loaded_sink_data['x'])))
    particle_tag = yt.YTArray(np.array(particle_tag), "")
    return particle_tag
예제 #4
0
def _sink_particle_age(field, data):
    """
    Retrieve particle age from .snktxt file
    """
    particle_age = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_age = yt.YTArray(np.array(particle_age), "yr")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        particle_age = (loaded_sink_data['snapshot_time']-loaded_sink_data['tcreate'])*data.ds.time_unit.in_units("yr").value
        particle_age = yt.YTArray(np.array(particle_age), "yr")
    return particle_age
예제 #5
0
def _sink_particle_mass(field, data):
    """
    Retrieve particle mass from .snktxt file
    """
    particle_mass = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_mass = yt.YTArray(np.array(particle_mass), "Msun")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        particle_mass = loaded_sink_data['m']*data.ds.mass_unit.in_units("Msun").value
        particle_mass = yt.YTArray(np.array(particle_mass), "Msun")
    return particle_mass
예제 #6
0
def _sink_particle_accretion_rate(field, data):
    """
    Retrieve particle accretion rate from sink file
    """
    particle_mdot = []
    if np.shape(data['x']) == (16, 16, 16):
        particle_mdot = yt.YTArray(np.array(particle_mdot), "Msun/yr")
    else:
        file_no = int(data.ds.directory.split('output_')[-1])
        datadir = data.ds.directory.split('output_')[0]
        loaded_sink_data = rsink(file_no, datadir=datadir)
        numerator = loaded_sink_data['dm']*data.ds.mass_unit.in_units("Msun").value
        denominator = (loaded_sink_data['snapshot_time'] - loaded_sink_data['tflush'])*data.ds.time_unit.in_units("yr").value
        particle_mdot = numerator/denominator
        particle_mdot = yt.YTArray(np.array(particle_mdot), "Msun/yr")
    return particle_mdot
save_dir = sys.argv[2]
if save_dir[-1] != '/':
    save_dir = save_dir + '/'
if os.path.exists(save_dir) == "False":
    os.makedirs(save_dir)

ul = 4. * 3600. * 180. / np.pi
lb = 361
ub = 1724
is1 = args.sink_number
is2 = is1 + 1

print("CHECK THAT SEPARATION CALCULATIONS TAKE INTO ACCOUNT CYCLIC BOUNDARIES")

ss = []
dist = []
for io in range(lb, ub):
    s = rsink(io, datadir=path)
    d = ((s['x'][is1] - s['x'][is2])**2 + (s['y'][is1] - s['y'][is2])**2 +
         (s['z'][is1] - s['z'][is2])**2)**0.5 * ul
    dist.append(d)
    ss.append(s)

file = open('separation_data.pkl', 'wb')
pickle.dump((dist, ss), file)
file.close()

plt.figure()
plt.hist(dist)
plt.savefig('hist.pdf')
예제 #8
0
gc.collect()

#for fn_it in yt.parallel_objects(range(len(usable_files)), njobs=int(size/(48))):
rit = -1
for fn_it in range(len(usable_files)):
    rit = rit + 1
    if rit == size:
        rit = 0
    if rank == rit:
        pickle_file = save_dir + "movie_frame_" + ("%06d" %
                                                   fn_it) + "_part.pkl"
        if os.path.exists(pickle_file) == False:
            fn = usable_files[fn_it]
            file_no = int(fn.split('output_')[-1].split('/')[0])
            datadir = fn.split('output_')[0]
            loaded_sink_data = rsink(file_no, datadir=datadir)
            particle_masses = loaded_sink_data['m'] * units['mass_unit']
            if args.perp_axis == "z":
                particle_x_pos = loaded_sink_data['x'] * units['length_unit']
                particle_y_pos = loaded_sink_data['y'] * units['length_unit']
            elif args.perp_axis == "y":
                particle_x_pos = loaded_sink_data['x'] * units['length_unit']
                particle_y_pos = loaded_sink_data['z'] * units['length_unit']
            else:
                particle_x_pos = loaded_sink_data['y'] * units['length_unit']
                particle_y_pos = loaded_sink_data['z'] * units['length_unit']
            gc.collect()
            #particle_masses = dd['sink_particle_mass']

            #if np.remainder(rank,48) == 0:
            file = open(pickle_file, 'wb')