[yt-svn] commit/yt: xarthisius: Merged in jzuhone/yt-3.x (pull request #1135)
commits-noreply at bitbucket.org
commits-noreply at bitbucket.org
Sun Aug 10 00:55:23 PDT 2014
1 new commit in yt:
https://bitbucket.org/yt_analysis/yt/commits/77bbb0c5a38e/
Changeset: 77bbb0c5a38e
Branch: yt
User: xarthisius
Date: 2014-08-10 09:55:15
Summary: Merged in jzuhone/yt-3.x (pull request #1135)
Athena Answer Testing and Bug Fixes
Affected #: 8 files
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 doc/source/reference/code_support.rst
--- a/doc/source/reference/code_support.rst
+++ b/doc/source/reference/code_support.rst
@@ -20,7 +20,7 @@
+-----------------------+------------+-----------+------------+-------+----------+----------+------------+----------+
| ARTIO | Y | Y | Y | Y | Y | Y | Y | Full |
+-----------------------+------------+-----------+------------+-------+----------+----------+------------+----------+
-| Athena | Y | N | Y | Y | Y | Y | N | Full |
+| Athena | Y | N | Y | Y | Y | Y | Y | Full |
+-----------------------+------------+-----------+------------+-------+----------+----------+------------+----------+
| Castro | Y | Y | Partial | Y | Y | Y | N | Full |
+-----------------------+------------+-----------+------------+-------+----------+----------+------------+----------+
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/data_objects/construction_data_containers.py
--- a/yt/data_objects/construction_data_containers.py
+++ b/yt/data_objects/construction_data_containers.py
@@ -336,8 +336,8 @@
registry=self.ds.unit_registry)
if self.weight_field is None and not self._sum_only:
u_obj = Unit(units, registry=self.ds.unit_registry)
- if (u_obj.is_code_unit and not u_obj.is_dimensionless) and \
- input_units != units or self.ds.no_cgs_equiv_length:
+ if ((u_obj.is_code_unit or self.ds.no_cgs_equiv_length) and
+ not u_obj.is_dimensionless) and input_units != units:
final_unit = "(%s) * code_length" % units
self[field].convert_to_units(final_unit)
for i in data.keys(): self[i] = data.pop(i)
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/frontends/athena/data_structures.py
--- a/yt/frontends/athena/data_structures.py
+++ b/yt/frontends/athena/data_structures.py
@@ -107,7 +107,7 @@
self.directory = os.path.dirname(self.dataset.filename)
self.dataset_type = dataset_type
# for now, the index file is the dataset!
- self.index_filename = self.dataset.filename
+ self.index_filename = os.path.join(os.getcwd(), self.dataset.filename)
#self.directory = os.path.dirname(self.index_filename)
self._fhandle = file(self.index_filename,'rb')
GridIndex.__init__(self, ds, dataset_type)
@@ -366,7 +366,7 @@
# Unfortunately we now have to mandate that the index gets
# instantiated so that we can make sure we have the correct left
# and right domain edges.
- self.h
+ self.index
def _set_code_unit_attributes(self):
"""
@@ -458,14 +458,13 @@
self.hubble_constant = self.cosmological_simulation = 0.0
self.parameters['Time'] = self.current_time # Hardcode time conversion for now.
self.parameters["HydroMethod"] = 0 # Hardcode for now until field staggering is supported.
- if self.specified_parameters.has_key("gamma") :
+ if self.specified_parameters.has_key("gamma"):
self.parameters["Gamma"] = self.specified_parameters["gamma"]
- else :
+ else:
self.parameters["Gamma"] = 5./3.
self.geometry = self.specified_parameters.get("geometry", "cartesian")
self._handle.close()
-
@classmethod
def _is_valid(self, *args, **kwargs):
try:
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/frontends/athena/fields.py
--- a/yt/frontends/athena/fields.py
+++ b/yt/frontends/athena/fields.py
@@ -25,6 +25,11 @@
erg_units = "code_mass * (code_length/code_time)**2"
rho_units = "code_mass / code_length**3"
+def velocity_field(comp):
+ def _velocity(field, data):
+ return data["athena", "momentum_%s" % comp]/data["athena","density"]
+ return _velocity
+
class AthenaFieldInfo(FieldInfoContainer):
known_other_fields = (
("density", ("code_mass/code_length**3", ["density"], None)),
@@ -41,19 +46,17 @@
def setup_fluid_fields(self):
# Add velocity fields
for comp in "xyz":
- vel_field = ("athena", "velocity_%s" % (comp))
- mom_field = ("athena", "momentum_%s" % (comp))
+ vel_field = ("athena", "velocity_%s" % comp)
+ mom_field = ("athena", "momentum_%s" % comp)
if vel_field in self.field_list:
self.add_output_field(vel_field, units="code_length/code_time")
- self.alias(("gas","velocity_%s" % (comp)), vel_field,
+ self.alias(("gas","velocity_%s" % comp), vel_field,
units="cm/s")
elif mom_field in self.field_list:
self.add_output_field(mom_field,
- units="code_mass*code_length/code_time")
- f = lambda data: data["athena","momentum_%s" % (comp)] / \
- data["athena","density"]
- self.add_field(("gas","velocity_%s" % (comp)),
- function=f, units = "cm/s")
+ units="code_mass/code_time/code_length**2")
+ self.add_field(("gas","velocity_%s" % comp),
+ function=velocity_field(comp), units = "cm/s")
# Add pressure, energy, and temperature fields
def ekin1(data):
return 0.5*(data["athena","momentum_x"]**2 +
@@ -96,6 +99,8 @@
function=_total_energy,
units="erg/g")
elif ("athena","total_energy") in self.field_list:
+ self.add_output_field(("athena","total_energy"),
+ units=pres_units)
def _pressure(field, data):
return eint_from_etot(data)*(data.ds.gamma-1.0)
self.add_field(("gas","pressure"), function=_pressure,
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/frontends/athena/tests/test_outputs.py
--- /dev/null
+++ b/yt/frontends/athena/tests/test_outputs.py
@@ -0,0 +1,59 @@
+"""
+Athena frontend tests
+
+
+
+"""
+
+#-----------------------------------------------------------------------------
+# Copyright (c) 2013, yt Development Team.
+#
+# Distributed under the terms of the Modified BSD License.
+#
+# The full license is in the file COPYING.txt, distributed with this software.
+#-----------------------------------------------------------------------------
+
+from yt.testing import *
+from yt.utilities.answer_testing.framework import \
+ requires_ds, \
+ small_patch_amr, \
+ big_patch_amr, \
+ data_dir_load
+from yt.frontends.athena.api import AthenaDataset
+
+_fields_cloud = ("scalar[0]", "density", "total_energy")
+
+cloud = "ShockCloud/id0/Cloud.0050.vtk"
+ at requires_ds(cloud)
+def test_cloud():
+ ds = data_dir_load(cloud)
+ yield assert_equal, str(ds), "Cloud.0050"
+ for test in small_patch_amr(cloud, _fields_cloud):
+ test_cloud.__name__ = test.description
+ yield test
+
+_fields_blast = ("temperature", "density", "velocity_magnitude")
+
+blast = "MHDBlast/id0/Blast.0100.vtk"
+ at requires_ds(blast)
+def test_blast():
+ ds = data_dir_load(blast)
+ yield assert_equal, str(ds), "Blast.0100"
+ for test in small_patch_amr(blast, _fields_blast):
+ test_blast.__name__ = test.description
+ yield test
+
+parameters_stripping = {"time_unit":3.086e14,
+ "length_unit":8.0236e22,
+ "mass_unit":9.999e-30*8.0236e22**3}
+
+_fields_stripping = ("temperature", "density", "specific_scalar[0]")
+
+stripping = "RamPressureStripping/id0/rps.0062.vtk"
+ at requires_ds(stripping, big_data=True)
+def test_stripping():
+ ds = data_dir_load(stripping, kwargs={"parameters":parameters_stripping})
+ yield assert_equal, str(ds), "rps.0062"
+ for test in small_patch_amr(stripping, _fields_stripping):
+ test_stripping.__name__ = test.description
+ yield test
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/utilities/answer_testing/framework.py
--- a/yt/utilities/answer_testing/framework.py
+++ b/yt/utilities/answer_testing/framework.py
@@ -758,7 +758,7 @@
def big_patch_amr(ds_fn, fields, input_center="max", input_weight="density"):
if not can_run_ds(ds_fn): return
- dso = [ None, ("sphere", ("max", (0.1, 'unitary')))]
+ dso = [ None, ("sphere", (input_center, (0.1, 'unitary')))]
yield GridHierarchyTest(ds_fn)
yield ParentageRelationshipsTest(ds_fn)
for field in fields:
diff -r d0ec6bb3dbf2455e05e565f1d862a2942810e6ef -r 77bbb0c5a38e27dd1855f23710a631765ca31f05 yt/utilities/fits_image.py
--- a/yt/utilities/fits_image.py
+++ b/yt/utilities/fits_image.py
@@ -252,7 +252,7 @@
axis_wcs = [[1,2],[0,2],[0,1]]
-def construct_image(data_source):
+def construct_image(data_source, center=None):
ds = data_source.ds
axis = data_source.axis
if hasattr(ds, "wcs"):
@@ -266,11 +266,14 @@
else:
# This is some other kind of dataset
unit = ds.get_smallest_appropriate_unit(ds.domain_width.max())
+ if center is None:
+ crval = [0.0,0.0]
+ else:
+ crval = [(ds.domain_center-center)[idx].in_units(unit) for idx in axis_wcs[axis]]
dx = ds.index.get_smallest_dx()
nx, ny = (ds.domain_width[axis_wcs[axis]]/dx).ndarray_view().astype("int")
crpix = [0.5*(nx+1), 0.5*(ny+1)]
cdelt = [dx.in_units(unit)]*2
- crval = [ds.domain_center[idx].in_units(unit) for idx in axis_wcs[axis]]
cunit = [unit]*2
ctype = ["LINEAR"]*2
frb = data_source.to_frb((1.0,"unitary"), (nx,ny))
@@ -295,7 +298,7 @@
fields : string or list of strings
The fields to slice
center : A sequence floats, a string, or a tuple.
- The coordinate of the center of the image. If set to 'c', 'center' or
+ The coordinate of the origin of the image. If set to 'c', 'center' or
left blank, the plot is centered on the middle of the domain. If set to
'max' or 'm', the center will be located at the maximum of the
('gas', 'density') field. Units can be specified by passing in center
@@ -308,7 +311,7 @@
axis = fix_axis(axis, ds)
center = get_sanitized_center(center, ds)
slc = ds.slice(axis, center[axis], **kwargs)
- w, frb = construct_image(slc)
+ w, frb = construct_image(slc, center=center)
super(FITSSlice, self).__init__(frb, fields=fields, wcs=w)
for i, field in enumerate(fields):
self[i].header["bunit"] = str(frb[field].units)
@@ -327,12 +330,21 @@
The fields to project
weight_field : string
The field used to weight the projection.
+ center : A sequence floats, a string, or a tuple.
+ The coordinate of the origin of the image. If set to 'c', 'center' or
+ left blank, the plot is centered on the middle of the domain. If set to
+ 'max' or 'm', the center will be located at the maximum of the
+ ('gas', 'density') field. Units can be specified by passing in center
+ as a tuple containing a coordinate and string unit name or by passing
+ in a YTArray. If a list or unitless array is supplied, code units are
+ assumed.
"""
- def __init__(self, ds, axis, fields, weight_field=None, **kwargs):
+ def __init__(self, ds, axis, fields, center="c", weight_field=None, **kwargs):
fields = ensure_list(fields)
axis = fix_axis(axis, ds)
+ center = get_sanitized_center(center, ds)
prj = ds.proj(fields[0], axis, weight_field=weight_field, **kwargs)
- w, frb = construct_image(prj)
+ w, frb = construct_image(prj, center=center)
super(FITSProjection, self).__init__(frb, fields=fields, wcs=w)
for i, field in enumerate(fields):
self[i].header["bunit"] = str(frb[field].units)
Repository URL: https://bitbucket.org/yt_analysis/yt/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
More information about the yt-svn
mailing list