|
|
|
Summary
The v3d routines,
v3d.sl (version 1.0.0)
provide a way to define and visualize
3D cubes of scalar values, with application to
volume-filling geometries. Docmentation on the routines are available in
the comments in v3d.sl and in this
v3d Command Reference
web document.
The v3d routines described here are basic building blocks and
can be used in a variety of contexts.
In an astrophysical modeling context, the scalar values in the 3D array can
represent a local physical quantity that gives rise to observed emission,
e.g., for thermal X-rays the product n_e*n_i.
Examples of using v3d routines in
(i) a front-end for Chandra's MARX
simulator, (ii) a custom isis model,
(iii) and with a more complex system
are given here:
These example also shows how the use of S-Lang allows for convenient user customization
and extension.
The remainder of this page provides examples of the v3d routines
and their capabilities.
An Astrophysical Geometry Example
The 20-year-old supernova remnant, SNR 1987A,
is made up of several geometric components as shown
here in solid cross-section (left) and projected on the sky (right.)
These include: the expanding SN ejecta (purple), the dense
``inner ring'' with protrusions (red), the torus-like HII region around the
ring (green) and an expanding blastwave out of the equatorial plane (blue).
The images were created with the commands in:
|
v3d_view, uses volview() |
v3d_project, uses imdisplay() |
Monte Carlo ``events'' with Doppler Effects
Routines are provided to generate Monte Carlo (MC) samples from
a v3d volume array with the probability of the event proportional to the
values of the array cell. The set of 3D locations, ``points'', created
can be used as input to a ray-trace code. A routine is provided to
calculate Line-of-sight Doppler shifts
(photon energy factors) based on a velocity field for the points.
The v3d routines also
provide a primative event-imaging capapility which can show the events
color-coded by the Doppler velocity. The simple examples below were
made with the commands in v3dex_mc_vels.sl.
|
Solid 3D view |
MC events on sky |
vtype=0 const*r_hat |
vtype=1 const*r_vec |
vtype=2 rigid rotation |v| ~ r |
vtype=3 Kepler rotation |v| ~ 1/sqrt(r) |
Some other examples...
Some other example images and the files used to create them are given here:
Basic V3D Routines
Below are examples of some basic shapes available in the
v3d.sl routines; these examples were
made with the code-snippets indicated and given in full
in v3d_shape_demo.sl .
v3d_sphere v3d_sphere(20.0, 40.0, [20.,40.,20.]) +
v3d_sphere(0.0, 20.0, [0.,0.,-50.0]) | | |
v3d_spheroid | v3d_spheroid(40.0, 50.0, 1.8, ,[-20.0,70.]) | | |
v3d_cylinder v3d_cylinder(10.0,20.0, 0.0,80.0, , [290.0,0.0])
+ v3d_cylinder(40.0, 90.0, -10.0, 10.0, ,[-55.0, -30.0]) | | |
v3d_cone v3d_cone(20.0, 30.0, 30.0, 80.0, , [-40.,-10.]) +
2.0* v3d_cone(0.0, 3.0, -200.0,200.0, , [50.0,60.0] ) | | |
v3d_torus ( v3d_torus(30.0,70.0, [20.0,0.,0.],[-40.,10.0]) -
v3d_torus(45.0,55.0, [20.,0.,0.], [-40.,10.0]) ) +
v3d_torus(30.0,50.0, [-10.,0.,40.], [140.0,80.0]) | | |
v3d_cube-slice v3d_cube(100.0,[-70.,0.,-100.]) *
v3d_sphere(50.0,80.0) | | |
v3d_roche v3d_roche(90., 0.333, 1.0, [-75.0,0.,.0],[0.0,0.0])
+
( v3d_roche(90., 3.0, 1.0, [15.0,0.,0.0],[180.0,0.0]) -
v3d_sphere(0.0, 20.0, [15.0,0.,0.0]) ) | | |
v3d_sphere_ring | v3d_sphere_ring(70.0, 5.0, 17, , [260.0, -44.0]) | | |
v3d_sphere_rlup | v3d_sphere_rlup(1.0,90.0, [0.0,3.0,10.0,30.0,100.0], [10.0,5.0,1.0,3.0,0.5]) | | |
v3d_cyl_azlup v3d_cyl_azlup (70.0, 90.0, -40.0, 40.0, ,
[-70.0,30.0], azlups,vlups)
with:
azlups = 9.0*[-10:20:1];
vlups = 0.3 + cos(5.0*azlups*PI/180.0)^2; | | |
v3d_2dto3d v3d_2dto3d(arr2d, 20.0, 90.0, , [-20.0, 30.0])
with
arr2d = Float_Type [91,100];
% from 0 to 10 degrees: 1/5 radius:
arr2d[[0:9],[0:20]] = 1.0;
% from 10 to 45 degrees: 1/2 radius:
arr2d[[10:45],[0:49]] = 1.0;
% from 46 to 90 degrees: full radius:
arr2d[[46:90],*] = 1.0; | | |
v3d_2dto3d-RT-hydro v3d_2dto3d(arrRT, 22.0, 90.0, ,
[90.0,80.0]) with:
arr2d = h5_read("wrbub_1026.h5");
...etc... | | |
v3d_r3dsq 10.0*(1./30.0^3)* exp(-1.0*v3d_r3dsq([0.,0.,0.])
/(30.0^2)) +
(1./10.^3)* exp(-1.0* v3d_r3dsq([60.,50.,30.]) /(10.0^2)) | | |
v3d_f_generic v3d_f_generic("custom function", ,
[-25.0,15.0])
Here, values = (cos(3.0*azimuth))^2 * (sin(5.0*lattitude))^2 * exp(-1.0*rad3dsq/(40.0)^2);
| | |
|