YT analysis questions: cylindrical profile and RMS velocity
Hi YT users, I have two questions on the YT analysis: First, I would like to make profiles (mass, angular momentum) in the cylindrical coordinate. In other world, the profiles depend on r_xy (x-y is the cylinder plane). I define disk object and compute Profile as follow:
disk = pf.h.disk(center, [0, 0, -1], (100., 'pc'), (1., 'pc')) profile = BinnedProfile1D(disk, 50, 'Radius', smallest_bin, largest_bin, lazy_reader=True) ,but I find that Radius is for x,y, and z distance. Can I get the cylindrical profile, if I simply make derived field for RadiusXY and replace Radius? And does there any RadiusXY kind of field exist?
Second, I would like to compute the RMS velocity in my disk. However, I would like to compute RMS velocity according to local mean velocity (e.g. mean velocity inside 0.1 pc sphere center on a given position), instead of compute according to global mean velocity. Is there a routine (or way) to compute the local mean velocity in YT and compute RMS of it? I found that some papers with Enzo simulation compute the RMS velocity (such as Kitsuk et al 2007 and Wise et al 2008 although I am not sure whether they use YT or not). Thank you in advance, Junhwan Choi -- -------------------------------------------------------------- Jun-Hwan Choi, Ph.D. Department of Physics and Astronomy, University of Kentucky Tel: (859) 897-6737 Fax: (859) 323-2846 Email: jhchoi@pa.uky.edu URL: http://www.pa.uky.edu/~jhchoi --------------------------------------------------------------
Hi Junhwan, You will need to define a cylindrical radius field. Here's how I've done it in the past (copied from some old messages on the newsgroup from last September): def _CylinderRadius(field, data): center = data.get_field_parameter("center") coords = na.array([data['x'] - center[0], data['y'] - center[1], data['z'] - center[2]]) J = na.zeros(coords.shape) if len(coords.shape) == 4: J[0,:,:,:] = -1 else: J[0,:] = -1 JCrossR = na.cross(J,coords,axis=0) return na.sqrt(na.sum(na.square(JCrossR),0)) def _ConvertCylinderRadiusCGS(data): return data.convert("cm") add_field("CylinderRadius", function=_CylinderRadius, validators=[ValidateParameter("center")], convert_function = _ConvertCylinderRadiusCGS, units=r"\rm{cm}") Note that you need to set the field parameter 'center' before you try to use this field. I'm not sure if there is a good way to answer your second question. It's a good bet Kitsuk and Wise did not use yt as it did not exist yet ;) -Nathan On Feb 4, 2012, at 10:46 AM, Jun-Hwan Choi wrote:
Hi YT users,
I have two questions on the YT analysis:
First, I would like to make profiles (mass, angular momentum) in the cylindrical coordinate. In other world, the profiles depend on r_xy (x-y is the cylinder plane). I define disk object and compute Profile as follow:
disk = pf.h.disk(center, [0, 0, -1], (100., 'pc'), (1., 'pc')) profile = BinnedProfile1D(disk, 50, 'Radius', smallest_bin, largest_bin, lazy_reader=True) ,but I find that Radius is for x,y, and z distance. Can I get the cylindrical profile, if I simply make derived field for RadiusXY and replace Radius? And does there any RadiusXY kind of field exist?
Second, I would like to compute the RMS velocity in my disk. However, I would like to compute RMS velocity according to local mean velocity (e.g. mean velocity inside 0.1 pc sphere center on a given position), instead of compute according to global mean velocity. Is there a routine (or way) to compute the local mean velocity in YT and compute RMS of it? I found that some papers with Enzo simulation compute the RMS velocity (such as Kitsuk et al 2007 and Wise et al 2008 although I am not sure whether they use YT or not).
Thank you in advance, Junhwan Choi
-- -------------------------------------------------------------- Jun-Hwan Choi, Ph.D. Department of Physics and Astronomy, University of Kentucky Tel: (859) 897-6737 Fax: (859) 323-2846 Email: jhchoi@pa.uky.edu URL: http://www.pa.uky.edu/~jhchoi --------------------------------------------------------------
!DSPAM:10175,4f2d7d1519872718731035! _______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
!DSPAM:10175,4f2d7d1519872718731035!
Hi Junhwan, For your second question, you can calculate the mean velocity within that sphere and use that to set the bulk velocity for your disk object. You can do something like: sphere = pf.h.sphere(...) bulk_velocity = sphere.quantities['BulkVelocity']() disk = pf.h.disk(...) disk.set_field_parameter('bulk_velocity', bulk_velocity) If you look at the source for the field VelocityMagnitude, it subtracts off this bulk velocity, so I think that would do what you need. The source for that is YT_DEST/yt/data_objects/universal_fields.py Britton On Sat, Feb 4, 2012 at 1:52 PM, Nathan Goldbaum <goldbaum@ucolick.org>wrote:
Hi Junhwan,
You will need to define a cylindrical radius field. Here's how I've done it in the past (copied from some old messages on the newsgroup from last September):
def _CylinderRadius(field, data): center = data.get_field_parameter("center") coords = na.array([data['x'] - center[0], data['y'] - center[1], data['z'] - center[2]]) J = na.zeros(coords.shape) if len(coords.shape) == 4: J[0,:,:,:] = -1 else: J[0,:] = -1 JCrossR = na.cross(J,coords,axis=0) return na.sqrt(na.sum(na.square(JCrossR),0)) def _ConvertCylinderRadiusCGS(data): return data.convert("cm") add_field("CylinderRadius", function=_CylinderRadius, validators=[ValidateParameter("center")], convert_function = _ConvertCylinderRadiusCGS, units=r"\rm{cm}")
Note that you need to set the field parameter 'center' before you try to use this field.
I'm not sure if there is a good way to answer your second question. It's a good bet Kitsuk and Wise did not use yt as it did not exist yet ;)
-Nathan
On Feb 4, 2012, at 10:46 AM, Jun-Hwan Choi wrote:
Hi YT users,
I have two questions on the YT analysis:
First, I would like to make profiles (mass, angular momentum) in the cylindrical coordinate. In other world, the profiles depend on r_xy (x-y is the cylinder plane). I define disk object and compute Profile as follow:
disk = pf.h.disk(center, [0, 0, -1], (100., 'pc'), (1., 'pc')) profile = BinnedProfile1D(disk, 50, 'Radius', smallest_bin, largest_bin, lazy_reader=True) ,but I find that Radius is for x,y, and z distance. Can I get the cylindrical profile, if I simply make derived field for RadiusXY and replace Radius? And does there any RadiusXY kind of field exist?
Second, I would like to compute the RMS velocity in my disk. However, I would like to compute RMS velocity according to local mean velocity (e.g. mean velocity inside 0.1 pc sphere center on a given position), instead of compute according to global mean velocity. Is there a routine (or way) to compute the local mean velocity in YT and compute RMS of it? I found that some papers with Enzo simulation compute the RMS velocity (such as Kitsuk et al 2007 and Wise et al 2008 although I am not sure whether they use YT or not).
Thank you in advance, Junhwan Choi
-- -------------------------------------------------------------- Jun-Hwan Choi, Ph.D. Department of Physics and Astronomy, University of Kentucky Tel: (859) 897-6737 Fax: (859) 323-2846 Email: jhchoi@pa.uky.edu URL: http://www.pa.uky.edu/~jhchoi --------------------------------------------------------------
!DSPAM:10175,4f2d7d1519872718731035!
yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
!DSPAM:10175,4f2d7d1519872718731035!
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
Thank you Britton, However, what I would like to compute is RMS velocity field respect to their local mean velocity. I found a useful procedure in Matt Turk's YT field presentation. There is way to make AverageTemperature field using ValidateSpatial. I would like to do similar procedure to make average velocity field and compute the RMS velocity from this local average. But, in this case I get information for N adjust cell value and average them. But this grid size can vary depending on a given cell's AMR level, while I would like to compute local average for uniform spatial volume... Well, I may need to think a bit more to make this work. Thank you, Junhwan Britton Smith wrote:
Hi Junhwan,
For your second question, you can calculate the mean velocity within that sphere and use that to set the bulk velocity for your disk object. You can do something like: sphere = pf.h.sphere(...) bulk_velocity = sphere.quantities['BulkVelocity']()
disk = pf.h.disk(...) disk.set_field_parameter('bulk_velocity', bulk_velocity)
If you look at the source for the field VelocityMagnitude, it subtracts off this bulk velocity, so I think that would do what you need. The source for that is YT_DEST/yt/data_objects/universal_fields.py
Britton
On Sat, Feb 4, 2012 at 1:52 PM, Nathan Goldbaum <goldbaum@ucolick.org <mailto:goldbaum@ucolick.org>> wrote:
Hi Junhwan,
You will need to define a cylindrical radius field. Here's how I've done it in the past (copied from some old messages on the newsgroup from last September):
def _CylinderRadius(field, data): center = data.get_field_parameter("center") coords = na.array([data['x'] - center[0], data['y'] - center[1], data['z'] - center[2]]) J = na.zeros(coords.shape) if len(coords.shape) == 4: J[0,:,:,:] = -1 else: J[0,:] = -1 JCrossR = na.cross(J,coords,axis=0) return na.sqrt(na.sum(na.square(JCrossR),0)) def _ConvertCylinderRadiusCGS(data): return data.convert("cm") add_field("CylinderRadius", function=_CylinderRadius, validators=[ValidateParameter("center")], convert_function = _ConvertCylinderRadiusCGS, units=r"\rm{cm}")
Note that you need to set the field parameter 'center' before you try to use this field.
I'm not sure if there is a good way to answer your second question. It's a good bet Kitsuk and Wise did not use yt as it did not exist yet ;)
-Nathan
On Feb 4, 2012, at 10:46 AM, Jun-Hwan Choi wrote:
> Hi YT users, > > I have two questions on the YT analysis: > > First, I would like to make profiles (mass, angular momentum) in the cylindrical coordinate. > In other world, the profiles depend on r_xy (x-y is the cylinder plane). > I define disk object and compute Profile as follow: > > disk = pf.h.disk(center, [0, 0, -1], (100., 'pc'), (1., 'pc')) > > profile = BinnedProfile1D(disk, 50, 'Radius', smallest_bin, largest_bin, lazy_reader=True) > ,but I find that Radius is for x,y, and z distance. > Can I get the cylindrical profile, if I simply make derived field for RadiusXY and replace Radius? > And does there any RadiusXY kind of field exist? > > Second, I would like to compute the RMS velocity in my disk. > However, I would like to compute RMS velocity according to local mean velocity (e.g. mean velocity inside 0.1 pc sphere center on a given position), instead of compute according to global mean velocity. > Is there a routine (or way) to compute the local mean velocity in YT and compute RMS of it? > I found that some papers with Enzo simulation compute the RMS velocity (such as Kitsuk et al 2007 and Wise et al 2008 although I am not sure whether they use YT or not). > > Thank you in advance, > Junhwan Choi > > -- > -------------------------------------------------------------- > Jun-Hwan Choi, Ph.D. > Department of Physics and Astronomy, University of Kentucky > Tel: (859) 897-6737 <tel:%28859%29%20897-6737> Fax: (859) 323-2846 <tel:%28859%29%20323-2846> > Email: jhchoi@pa.uky.edu <mailto:jhchoi@pa.uky.edu> URL: http://www.pa.uky.edu/~jhchoi <http://www.pa.uky.edu/%7Ejhchoi> > -------------------------------------------------------------- > > > !DSPAM:10175,4f2d7d1519872718731035! _______________________________________________ > yt-users mailing list > yt-users@lists.spacepope.org <mailto:yt-users@lists.spacepope.org> > http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org > > > !DSPAM:10175,4f2d7d1519872718731035!
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org <mailto:yt-users@lists.spacepope.org> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
------------------------------------------------------------------------
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
-- -------------------------------------------------------------- Jun-Hwan Choi, Ph.D. Department of Physics and Astronomy, University of Kentucky Tel: (859) 897-6737 Fax: (859) 323-2846 Email: jhchoi@pa.uky.edu URL: http://www.pa.uky.edu/~jhchoi --------------------------------------------------------------
Hi Jun-Hwan, On Mon, Feb 6, 2012 at 4:00 PM, Jun-Hwan Choi <jhchoi@pa.uky.edu> wrote:
Thank you Britton,
However, what I would like to compute is RMS velocity field respect to their local mean velocity. I found a useful procedure in Matt Turk's YT field presentation. There is way to make AverageTemperature field using ValidateSpatial. I would like to do similar procedure to make average velocity field and compute the RMS velocity from this local average. But, in this case I get information for N adjust cell value and average them. But this grid size can vary depending on a given cell's AMR level, while I would like to compute local average for uniform spatial volume... Well, I may need to think a bit more to make this work.
Do you want to calculate the deviation from a radially averaged velocity profile? I have had occasion to do this. What you want to do is something similar to what I did in my presentation for setting the bulk_velocity; instead of setting it to a vector, set it to the result of a radial profile calculation. Then you can interpolate between data points using numpy's interp1d function. Here's an example: @derived_field(name = "deltaLocalCircularVelocity") def delta_LocalCircularVelocity(field, data): fn, x, cv = data.get_field_parameter("local_circular_velocity") cv0 = na.interp(data[fn].ravel(), x, cv) cv0 = cv0.reshape(data[fn].shape) delta_cv = cv0 - data["LocalCircularVelocity"] return delta_cv You'll need to do something like this on the data object from which you are getting your data: sp.set_field_parameter("local_circular_velocity", (fn, prof[fn], prof["LocalCircularVelocity"])) Note that mine uses circular velocity; yours can use whatever you like. 'fn' in this case is the x field (I was experimenting with density and radius, and wanted to easily switch between them.) Sorry for the short email, deadlines approaching, but give this a shot, and let me know if I can help out otherwise, Matt
Thank you, Junhwan
Britton Smith wrote:
Hi Junhwan,
For your second question, you can calculate the mean velocity within that sphere and use that to set the bulk velocity for your disk object. You can do something like: sphere = pf.h.sphere(...) bulk_velocity = sphere.quantities['BulkVelocity']()
disk = pf.h.disk(...) disk.set_field_parameter('bulk_velocity', bulk_velocity)
If you look at the source for the field VelocityMagnitude, it subtracts off this bulk velocity, so I think that would do what you need. The source for that is YT_DEST/yt/data_objects/universal_fields.py
Britton
On Sat, Feb 4, 2012 at 1:52 PM, Nathan Goldbaum <goldbaum@ucolick.org <mailto:goldbaum@ucolick.org>> wrote:
Hi Junhwan,
You will need to define a cylindrical radius field. Here's how I've done it in the past (copied from some old messages on the newsgroup from last September):
def _CylinderRadius(field, data): center = data.get_field_parameter("center") coords = na.array([data['x'] - center[0], data['y'] - center[1], data['z'] - center[2]]) J = na.zeros(coords.shape) if len(coords.shape) == 4: J[0,:,:,:] = -1 else: J[0,:] = -1 JCrossR = na.cross(J,coords,axis=0) return na.sqrt(na.sum(na.square(JCrossR),0)) def _ConvertCylinderRadiusCGS(data): return data.convert("cm") add_field("CylinderRadius", function=_CylinderRadius, validators=[ValidateParameter("center")], convert_function = _ConvertCylinderRadiusCGS, units=r"\rm{cm}")
Note that you need to set the field parameter 'center' before you try to use this field.
I'm not sure if there is a good way to answer your second question. It's a good bet Kitsuk and Wise did not use yt as it did not exist yet ;)
-Nathan
On Feb 4, 2012, at 10:46 AM, Jun-Hwan Choi wrote:
> Hi YT users, > > I have two questions on the YT analysis: > > First, I would like to make profiles (mass, angular momentum) in the cylindrical coordinate. > In other world, the profiles depend on r_xy (x-y is the cylinder plane). > I define disk object and compute Profile as follow: > > disk = pf.h.disk(center, [0, 0, -1], (100., 'pc'), (1., 'pc')) > > profile = BinnedProfile1D(disk, 50, 'Radius', smallest_bin, largest_bin, lazy_reader=True) > ,but I find that Radius is for x,y, and z distance. > Can I get the cylindrical profile, if I simply make derived field for RadiusXY and replace Radius? > And does there any RadiusXY kind of field exist? > > Second, I would like to compute the RMS velocity in my disk. > However, I would like to compute RMS velocity according to local mean velocity (e.g. mean velocity inside 0.1 pc sphere center on a given position), instead of compute according to global mean velocity. > Is there a routine (or way) to compute the local mean velocity in YT and compute RMS of it? > I found that some papers with Enzo simulation compute the RMS velocity (such as Kitsuk et al 2007 and Wise et al 2008 although I am not sure whether they use YT or not). > > Thank you in advance, > Junhwan Choi > > -- > -------------------------------------------------------------- > Jun-Hwan Choi, Ph.D. > Department of Physics and Astronomy, University of Kentucky > Tel: (859) 897-6737 <tel:%28859%29%20897-6737> Fax: (859) 323-2846 <tel:%28859%29%20323-2846> > Email: jhchoi@pa.uky.edu <mailto:jhchoi@pa.uky.edu> URL: http://www.pa.uky.edu/~jhchoi <http://www.pa.uky.edu/%7Ejhchoi>
> -------------------------------------------------------------- > > > !DSPAM:10175,4f2d7d1519872718731035! _______________________________________________ > yt-users mailing list > yt-users@lists.spacepope.org <mailto:yt-users@lists.spacepope.org>
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org > > > !DSPAM:10175,4f2d7d1519872718731035!
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org <mailto:yt-users@lists.spacepope.org> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
------------------------------------------------------------------------
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
-- -------------------------------------------------------------- Jun-Hwan Choi, Ph.D. Department of Physics and Astronomy, University of Kentucky Tel: (859) 897-6737 Fax: (859) 323-2846 Email: jhchoi@pa.uky.edu URL: http://www.pa.uky.edu/~jhchoi --------------------------------------------------------------
_______________________________________________ yt-users mailing list yt-users@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
participants (4)
-
Britton Smith
-
Jun-Hwan Choi
-
Matthew Turk
-
Nathan Goldbaum