[yt-users] stuck script?
Elizabeth Tasker
taskere at mcmaster.ca
Thu Jul 28 03:11:17 PDT 2011
Hi,
I've written a script to calculate the contours in the potential field but I'm having a couple of problems:
Firstly, the script is too slow. It is running for several days and still hasn't completed. I think it does not even reached the contour calculation and is still reading in the data set.
It is printing to the screen:
yt : [INFO ] 2011-07-28 18:52:23,722 Getting field PotentialField from 1720
yt : [INFO ] 2011-07-28 18:52:51,350 Getting field dx from 1720
yt : [INFO ] 2011-07-28 18:53:00,316 Getting field dy from 1720
yt : [INFO ] 2011-07-28 18:53:05,817 Getting field dz from 1720
yt : [INFO ] 2011-07-28 18:53:18,258 Getting field x from 1720
yt : [INFO ] 2011-07-28 18:54:21,300 Getting field y from 1720
yt : [INFO ] 2011-07-28 18:55:23,956 Getting field PotentialField from 1720
yt : [INFO ] 2011-07-28 18:55:47,502 Getting field dx from 1720
yt : [INFO ] 2011-07-28 18:55:55,878 Getting field dy from 1720
yt : [INFO ] 2011-07-28 18:56:01,247 Getting field dz from 1720
yt : [INFO ] 2011-07-28 18:56:13,819 Getting field x from 1720
yt : [INFO ] 2011-07-28 18:57:00,063 Getting field y from 1720
.
.
.
This looks to me like it is somehow getting stuck on grid number 1720. Is that right? It creates a slice just fine, but that might well avoid that particular grid.
Secondly, occasionally when I run I see this error:
---> 52 escapevel = sqrt(2.0)*data["SubtractBackgroundPotential"]/sqrt(fabs(data["SubtractBackgroundPotential"]))
53 return (escapevel)
54
NameError: global name 'sqrt' is not defined
I have no idea why it is suddenly complaining about sqrt? Sometimes when I run it is fine and then I'll re-run and it'll hit this error. Is there an import command that might only sometimes get called?
I've attached my script below and would appreciate any advice! (I'm about to return from Japan via Seoul so I may have my internet connection knocked out for a couple of days; I'm very sorry if there is a delay before I respond).
Thank you,
Elizabeth
#!/usr/bin/python
from yt.mods import *
from yt.analysis_modules.level_sets.api import identify_contours
import pickle
def _DiskRadius(field, data):
center = 0.5*(data.pf.domain_right_edge - data.pf.domain_left_edge)
DW = data.pf.domain_right_edge - data.pf.domain_left_edge
dradius = na.zeros(data["x"].shape, dtype='float64')
for i, ax in enumerate('xy'):
r = na.abs(data[ax] - center[i])
dradius += na.minimum(r, na.abs(DW[i]-r))**2.0
na.sqrt(dradius, dradius)
return dradius
add_field("DiskRadius", function=_DiskRadius)
def _SubtractBackgroundPotential(field, data):
np = 500
source = data.pf.h.disk((16,16,16), (0,0,1), 20, 15.6e-3/pf['kpc'])
profile = BinnedProfile1D(source, np, "DiskRadius", 0.1, 18.0, log_space=False)
profile.add_fields("PotentialField", weight="CellVolume")
# print profile["PotentialField"], profile["DiskRadius"]
pot = na.zeros(data["PotentialField"].shape, dtype='float64')
for r in range(np):
# unlike where, this produces a true/false array of the same size as data
index = ((data["DiskRadius"] >= profile["DiskRadius"][r])
& (data["DiskRadius"] < profile["DiskRadius"][r+1]))
# oddly, it's ok to then put this straight back into data to pull out the right index. Python magic
backpot = profile["PotentialField"][r]+(profile["PotentialField"][r+1]-profile["PotentialField"][r])*(data["DiskRadius"][index]-profile["DiskRadius"][r])/(profile["DiskRadius"][r+1]-profile["DiskRadius"][r])
pot[index] = data["PotentialField"][index]-backpot
pot[(pot==0)] = -1.0e-10
return pot
add_field("SubtractBackgroundPotential", function=_SubtractBackgroundPotential)
def _EscapeVelocity(field, data):
escapevel = na.zeros(data["SubtractBackgroundPotential"].shape, dtype="float64")
escapevel = sqrt(2.0)*data["SubtractBackgroundPotential"]/sqrt(fabs(data["SubtractBackgroundPotential"]))
return (escapevel)
add_field("EscapeVelocity", function=_EscapeVelocity)
def _NegEscapeVelocity(field, data):
# sign flip to allow multi-contour finding schemes work in yt
return (-1*data["EscapeVelocity"])
add_field("NegEscapeVelocity", function=_NegEscapeVelocity)
# Grab data
fn = "GravPotential/DD0301/GT_BTAccel_256AMR4_PeHeat_sf5_SNe_0301"
pf = load(fn)
dd = pf.h.all_data()
min, max = dd.quantities["Extrema"]("NegEscapeVelocity")
contouredclouds = dd.extract_connected_sets("NegEscapeVelocity", 12, 15.0, max, log_space=False)
More information about the yt-users
mailing list