1. Matthew Turk
  2. yt.milestones

Source

yt.milestones / cylindrical_rays.ipynb

{
 "metadata": {
  "name": "cylindrical_rays"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from yt.mods import *\n",
      "import matplotlib.pyplot as plt\n",
      "import numpy as np\n",
      "\n",
      "pf = load('cylindrical_data/nif2013_hdf5_plt_cnt_0006')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [WARNING  ] 2012-08-23 16:51:37,725 integer runtime parameter checkpointfilenumber overwrites a simulation scalar of the same name\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [WARNING  ] 2012-08-23 16:51:37,725 integer runtime parameter forcedplotfilenumber overwrites a simulation scalar of the same name\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [WARNING  ] 2012-08-23 16:51:37,726 integer runtime parameter nbegin overwrites a simulation scalar of the same name\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [WARNING  ] 2012-08-23 16:51:37,726 integer runtime parameter plotfilenumber overwrites a simulation scalar of the same name\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [INFO     ] 2012-08-23 16:51:37,737 Parameters: current_time              = 8.00057343882e-10\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [INFO     ] 2012-08-23 16:51:37,738 Parameters: domain_dimensions         = [48 96  1]\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [INFO     ] 2012-08-23 16:51:37,739 Parameters: domain_left_edge          = [ 0.     -1.2288  0.    ]\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [INFO     ] 2012-08-23 16:51:37,740 Parameters: domain_right_edge         = [ 1.2288      1.2288      6.28318531]\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stderr",
       "text": [
        "yt : [INFO     ] 2012-08-23 16:51:37,741 Parameters: cosmological_simulation   = 0.0\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Ray tracer\n",
      "E = (0.5, 0.0, 0.0)\n",
      "F = (1.0, 0.0, 0.75*na.pi)\n",
      "\n",
      "Ecart = na.array((E[0]*na.cos(E[2]), E[0]*na.sin(E[2]), E[1]))\n",
      "Fcart = na.array((F[0]*na.cos(F[2]), F[0]*na.sin(F[2]), F[1]))\n",
      "\n",
      "D = Fcart - Ecart"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 8
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "zmask = np.logical_or(pf.h.grid_left_edge[:,1] == E[1], pf.h.grid_right_edge[:,1] == E[1])\n",
      "r = pf.h.grid_right_edge[zmask,0]\n",
      "\n",
      "a = (D**2)[:2].sum()\n",
      "b = (2*D*Ecart)[:2].sum()\n",
      "c = (Ecart**2)[:2].sum() - r**2\n",
      "\n",
      "tm = (-b - na.sqrt(b**2 - 4*a*c)) / (2*a)\n",
      "tp = (-b + na.sqrt(b**2 - 4*a*c)) / (2*a)  \n",
      "\n",
      "tmmask = np.logical_and(~np.isnan(tm), r <= E[0])\n",
      "tpmask = np.logical_and(~np.isnan(tp), r <= F[0])\n",
      "t = np.concatenate([tm[tmmask][::-1], tp[tpmask]])\n",
      "ti = t.argsort()\n",
      "t = t[ti]\n",
      "dt = np.gradient(t)\n",
      "dti = np.where(dt != 0.0)\n",
      "t = t[dti]\n",
      "dt = dt[dti]\n",
      "\n",
      "r = np.concatenate([r[tmmask][::-1], r[tpmask]])[ti][dti]\n",
      "dr = np.gradient(r)\n",
      "dri = np.where(dr != 0.0)\n",
      "t = t[dri]\n",
      "dt = dt[dri]\n",
      "r = r[dri]\n",
      "dr = dr[dri]\n",
      "\n",
      "c = np.concatenate([c[tmmask][::-1], c[tpmask]])[ti][dti][dri]\n",
      "drsign = np.sign(dr)\n",
      "dr_dt = drsign*(na.sqrt(b**2 - 4*a*c) / (2*r))\n",
      "dr = dt * dr_dt"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 9
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plt.plot(t, r)\n",
      "plt.plot(t, dr_dt, 'g-')\n",
      "plt.plot(t, dr/dt, 'ro')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 10,
       "text": [
        "[<matplotlib.lines.Line2D at 0x7fa1c8155bd0>]"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\n/w+DzqEu27J6qAAAAABJRU5ErkJggg==\n"
      }
     ],
     "prompt_number": 10
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    }
   ],
   "metadata": {}
  }
 ]
}