

import yt
#
# download from:
# https://hub.yt/data/goldbaum2016a/feedback_20pc/simulation_outputs/DD0600.tar.gz
# (3.5 GB)
#
ds = yt.load('DD0600/DD0600')
yt : [INFO ] 2016-10-09 13:37:24,758 Parameters: current_time = 0.6 yt : [INFO ] 2016-10-09 13:37:24,759 Parameters: domain_dimensions = [64 64 64] yt : [INFO ] 2016-10-09 13:37:24,760 Parameters: domain_left_edge = [ 0. 0. 0.] yt : [INFO ] 2016-10-09 13:37:24,761 Parameters: domain_right_edge = [ 1. 1. 1.] yt : [INFO ] 2016-10-09 13:37:24,762 Parameters: cosmological_simulation = 0.0


from yt.units import kpc
sp = ds.sphere(ds.domain_center, 20*kpc)
Parsing Hierarchy : 100%|██████████| 2653/2653 [00:00<00:00, 14526.88it/s] yt : [INFO ] 2016-10-09 13:37:25,062 Gathering a field list (this may take a moment.)


print(sp['density'])
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future startIndex[2]:endIndex[2]] = tofill
[ 1.84507879e-27 1.78474718e-27 1.10993722e-28 ..., 2.91673478e-25 1.61332254e-25 1.57167186e-25] g/cm**3

print(sp['temperature'])
[ 17707.57526156 17662.39859408 299983.90668785 ..., 3875.69765547
4339.59251383 4443.71003037] K
from pprint import pprint
# fields that are defined in the on-disk data file
pprint(ds.field_list)
[('all', 'creation_time'),
('all', 'dynamical_time'),
('all', 'metallicity_fraction'),
('all', 'particle_index'),
('all', 'particle_mass'),
('all', 'particle_position_x'),
('all', 'particle_position_y'),
('all', 'particle_position_z'),
('all', 'particle_type'),
('all', 'particle_velocity_x'),
('all', 'particle_velocity_y'),
('all', 'particle_velocity_z'),
('enzo', 'Cooling_Time'),
('enzo', 'Dark_Matter_Density'),
('enzo', 'Density'),
('enzo', 'GasEnergy'),
('enzo', 'Metal_Density'),
('enzo', 'Temperature'),
('enzo', 'TotalEnergy'),
('enzo', 'x-velocity'),
('enzo', 'y-velocity'),
('enzo', 'z-velocity'),
('io', 'creation_time'),
('io', 'dynamical_time'),
('io', 'metallicity_fraction'),
('io', 'particle_index'),
('io', 'particle_mass'),
('io', 'particle_position_x'),
('io', 'particle_position_y'),
('io', 'particle_position_z'),
('io', 'particle_type'),
('io', 'particle_velocity_x'),
('io', 'particle_velocity_y'),
('io', 'particle_velocity_z')]
# fields that yt can calculate given the fields in ds.field_list
# (only showing gas fields to fit on one screen)
pprint([f for f in ds.derived_field_list if f[0]=='gas'])
[('gas', 'H_nuclei_density'),
('gas', 'He_nuclei_density'),
('gas', 'angular_momentum_magnitude'),
('gas', 'angular_momentum_x'),
('gas', 'angular_momentum_y'),
('gas', 'angular_momentum_z'),
('gas', 'averaged_density'),
('gas', 'baroclinic_vorticity_magnitude'),
('gas', 'baroclinic_vorticity_x'),
('gas', 'baroclinic_vorticity_y'),
('gas', 'baroclinic_vorticity_z'),
('gas', 'cell_mass'),
('gas', 'cell_volume'),
('gas', 'chandra_emissivity'),
('gas', 'cooling_time'),
('gas', 'courant_time_step'),
('gas', 'cutting_plane_velocity_x'),
('gas', 'cutting_plane_velocity_y'),
('gas', 'cutting_plane_velocity_z'),
('gas', 'cylindrical_radial_velocity'),
('gas', 'cylindrical_radial_velocity_absolute'),
('gas', 'cylindrical_tangential_velocity'),
('gas', 'cylindrical_tangential_velocity_absolute'),
('gas', 'dark_matter_density'),
('gas', 'density'),
('gas', 'density_gradient_magnitude'),
('gas', 'density_gradient_x'),
('gas', 'density_gradient_y'),
('gas', 'density_gradient_z'),
('gas', 'dx'),
('gas', 'dy'),
('gas', 'dynamical_time'),
('gas', 'dz'),
('gas', 'emission_measure'),
('gas', 'entropy'),
('gas', 'jeans_mass'),
('gas', 'kT'),
('gas', 'kinetic_energy'),
('gas', 'mach_number'),
('gas', 'matter_density'),
('gas', 'matter_mass'),
('gas', 'mazzotta_weighting'),
('gas', 'mean_molecular_weight'),
('gas', 'metal_density'),
('gas', 'metal_mass'),
('gas', 'metallicity'),
('gas', 'number_density'),
('gas', 'path_element_x'),
('gas', 'path_element_y'),
('gas', 'path_element_z'),
('gas', 'pressure'),
('gas', 'pressure_gradient_magnitude'),
('gas', 'pressure_gradient_x'),
('gas', 'pressure_gradient_y'),
('gas', 'pressure_gradient_z'),
('gas', 'radial_mach_number'),
('gas', 'radial_velocity'),
('gas', 'radial_velocity_absolute'),
('gas', 'shear'),
('gas', 'shear_criterion'),
('gas', 'shear_mach'),
('gas', 'sound_speed'),
('gas', 'specific_angular_momentum_magnitude'),
('gas', 'specific_angular_momentum_x'),
('gas', 'specific_angular_momentum_y'),
('gas', 'specific_angular_momentum_z'),
('gas', 'sz_kinetic'),
('gas', 'szy'),
('gas', 'tangential_over_velocity_magnitude'),
('gas', 'tangential_velocity'),
('gas', 'temperature'),
('gas', 'thermal_energy'),
('gas', 'velocity_cylindrical_radius'),
('gas', 'velocity_cylindrical_theta'),
('gas', 'velocity_cylindrical_z'),
('gas', 'velocity_divergence'),
('gas', 'velocity_divergence_absolute'),
('gas', 'velocity_magnitude'),
('gas', 'velocity_spherical_phi'),
('gas', 'velocity_spherical_radius'),
('gas', 'velocity_spherical_theta'),
('gas', 'velocity_x'),
('gas', 'velocity_y'),
('gas', 'velocity_z'),
('gas', 'vertex_x'),
('gas', 'vertex_y'),
('gas', 'vertex_z'),
('gas', 'vorticity_growth_magnitude'),
('gas', 'vorticity_growth_magnitude_absolute'),
('gas', 'vorticity_growth_timescale'),
('gas', 'vorticity_growth_x'),
('gas', 'vorticity_growth_y'),
('gas', 'vorticity_growth_z'),
('gas', 'vorticity_magnitude'),
('gas', 'vorticity_squared'),
('gas', 'vorticity_stretching_magnitude'),
('gas', 'vorticity_stretching_x'),
('gas', 'vorticity_stretching_y'),
('gas', 'vorticity_stretching_z'),
('gas', 'vorticity_x'),
('gas', 'vorticity_y'),
('gas', 'vorticity_z'),
('gas', 'x'),
('gas', 'xray_emissivity'),
('gas', 'y'),
('gas', 'z')]

sp['x']
YTArray([ 0.48510742, 0.48510742, 0.48510742, ..., 0.49382782,
0.49382782, 0.49382782]) code_length
sp['x'].to('kpc')
YTArray([ 635.84010707, 635.84010707, 635.84010707, ..., 647.270109 ,
647.270109 , 647.270109 ]) kpc

import numpy as np
np.unique(sp['dx']).to('kpc')
YTArray([ 0.02 , 0.04000001, 0.08000001, 0.16000003, 0.32000005,
0.64000011]) kpc

from yt.units import kboltz, mh
pressure = sp['density']*sp['temperature']*kboltz/(0.6*mh)
pressure.in_units('Pa')
YTArray([ 4.49178775e-16, 4.33382728e-16, 4.57763947e-16, ...,
1.55414682e-14, 9.62532417e-15, 9.60180328e-15]) Pa
pressure.in_units('dyne/cm**2')
YTArray([ 4.49178775e-15, 4.33382728e-15, 4.57763947e-15, ...,
1.55414682e-13, 9.62532417e-14, 9.60180328e-14]) dyne/cm**2

sp['cell_mass']
YTArray([ 1.42104128e+37, 1.37457513e+37, 8.54850542e+35, ...,
6.85549442e+34, 3.79195384e+34, 3.69405809e+34]) g

sp.quantities.total_quantity('cell_mass')
1.466891758119552e+43 g
sp.min('temperature')
37.49965095080129 K
sp.max('temperature')
22794011.739036545 K
sp.mean('temperature', weight='cell_mass')
5616.2938135343575 K
sp.mean('temperature', weight='cell_volume')
3586755.8584530945 K
from IPython.display import IFrame
IFrame("http://yt-project.org/docs/dev/analyzing/objects.html#available-derived-quantities", width=700, height=600)
def my_entropy(field, data):
return (kboltz * data['temperature'] / data['number_density']**(2/3))
ds.add_field('entropy', function=my_entropy, units="keV*cm**2")

sp['entropy']
YTArray([ 1.42992470e-01, 1.45824074e-01, 1.57784025e+01, ...,
1.07049000e-03, 1.77882067e-03, 1.85353934e-03]) cm**2*keV

ad = ds.all_data()
box = ds.box(ds.domain_left_edge + 500*kpc, ds.domain_right_edge - 500*kpc)
sp = ds.sphere(ds.domain_center, 500*kpc)
disk = ds.disk(ds.domain_center, [0, 0, 1], 500*kpc, 100*kpc)
ray = ds.ray(ds.domain_left_edge, ds.domain_right_edge)
IFrame("http://yt-project.org/doc/analyzing/objects.html#available-objects", width=700, height=600)
from yt.data_objects.particle_filters import add_particle_filter
def young_star(pfilter, data):
filter = data.ds.current_time - data[pfilter.filtered_type, "creation_time"]
filter.convert_to_units('Myr')
return filter < 10
add_particle_filter("young_stars", function=young_star, filtered_type='io',
requires=["creation_time"])
ds.add_particle_filter('young_stars')
ad = ds.all_data()
print(ad['io', 'particle_mass'].shape)
print(ad['young_stars', 'particle_mass'].shape)
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future startIndex[2]:endIndex[2]] = tofill
(26111208,) (85493,)
from yt import ParticlePlot
p = ParticlePlot(ds,
('young_stars', 'particle_position_x'),
('young_stars', 'particle_position_y'),
('young_stars', 'particle_mass'),
width=(10, 'kpc'))
p.set_unit(('young_stars', 'particle_mass'), 'Msun')
yt : [INFO ] 2016-10-09 13:38:25,054 xlim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:38:25,055 ylim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:38:25,057 xlim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:38:25,058 ylim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:38:25,072 Splatting (('young_stars', 'particle_mass')) onto a 800 by 800 mesh
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
startIndex[2]:endIndex[2]] = tofill
from yt import ProjectionPlot
prj = ProjectionPlot(ds, 2, ('gas', 'density'), width=(15, 'kpc'))
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
startIndex[2]:endIndex[2]] = tofill
yt : [INFO ] 2016-10-09 13:38:57,473 Projection completed
yt : [INFO ] 2016-10-09 13:38:57,474 xlim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:38:57,475 ylim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:38:57,476 xlim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:38:57,477 ylim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:38:57,479 Making a fixed resolution buffer of (('gas', 'density')) 800 by 800
dd = ds.sphere(ds.domain_center, (10, 'kpc'))
prj = ProjectionPlot(ds, 2, 'density', data_source=dd, width=(20, 'kpc'))
prj.set_zlim('density', 1e-4, 1e0)
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
startIndex[2]:endIndex[2]] = tofill
yt : [INFO ] 2016-10-09 13:39:02,159 Projection completed
yt : [INFO ] 2016-10-09 13:39:02,160 xlim = 0.492371 0.507629
yt : [INFO ] 2016-10-09 13:39:02,160 ylim = 0.492371 0.507629
yt : [INFO ] 2016-10-09 13:39:02,162 xlim = 0.492371 0.507629
yt : [INFO ] 2016-10-09 13:39:02,163 ylim = 0.492371 0.507629
yt : [INFO ] 2016-10-09 13:39:02,165 Making a fixed resolution buffer of (('gas', 'density')) 800 by 800
ProjectionPlot(ds, 2, 'temperature', weight_field='density', width=(15, 'kpc'))
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
startIndex[2]:endIndex[2]] = tofill
yt : [INFO ] 2016-10-09 13:39:12,107 Projection completed
yt : [INFO ] 2016-10-09 13:39:12,107 xlim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:39:12,108 ylim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:39:12,110 xlim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:39:12,110 ylim = 0.494278 0.505722
yt : [INFO ] 2016-10-09 13:39:12,112 Making a fixed resolution buffer of (('gas', 'temperature')) 800 by 800
import numexpr as ne
from yt.units import G
from numpy import pi
def _total_dynamical_time(field, data):
dens = data['density']
dmd = data['dark_matter_density']
dens.convert_to_cgs()
dmd.convert_to_cgs()
tdyn = ne.evaluate("sqrt(3*pi/(32*G*(dens + dmd)))")
tdyn = tdyn*yt.units.s
return tdyn
def _sfr(field, data):
dens = data['density']
tdyn = data['total_dynamical_time']
Mu = np.float64(data.ds.parameters['Mu'])
dens.convert_to_cgs()
tdyn.convert_to_cgs()
sfr = ne.evaluate("where(dens*Mu/mh > 50, 0.01*dens/tdyn, 0)")
sfr = sfr*(yt.units.g/yt.units.cm**3/yt.units.s)
return sfr
ds.add_field('total_dynamical_time', _total_dynamical_time, units='s')
ds.add_field('sfr_density', _sfr, units='g/cm**3/s')
prj = yt.ProjectionPlot(ds, 2, 'sfr_density', width=(10, 'kpc'))
prj.set_unit('sfr_density', 'Msun/kpc**2/yr')
prj.set_zlim('sfr_density', 1e-1, 3e1)
yt : [INFO ] 2016-10-09 13:39:23,437 Projection completed
yt : [INFO ] 2016-10-09 13:39:23,438 xlim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:39:23,439 ylim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:39:23,440 xlim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:39:23,441 ylim = 0.496185 0.503815
yt : [INFO ] 2016-10-09 13:39:23,443 Making a fixed resolution buffer of (('gas', 'sfr_density')) 800 by 800
from yt import PhasePlot
PhasePlot(ds.all_data(), 'density', 'temperature', 'cell_mass',
weight_field=None, fractional=True)
max_val, max_loc = ds.find_max(('gas', 'density'))
print (max_val, max_loc)
yt : [INFO ] 2016-10-09 13:39:54,991 Max Value is 3.20734e-21 at 0.5017318725585888 0.4996719360351562 0.5001907348632812
3.2073369118751583e-21 g/cm**3 [ 0.50173187 0.49967194 0.50019073] code_length
PhasePlot(ds.sphere(max_loc, (3, 'kpc')), 'density', 'temperature', 'cell_mass',
weight_field=None, fractional=True)
/usr/local/lib/python3.5/site-packages/yt/data_objects/grid_patch.py:190: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future startIndex[2]:endIndex[2]] = tofill