2.2. Specific methods of visualization
1. Data
All the features in this section will be available programmatically
through an API that does not require loading VTK or any other
graphics. The highest-level data object will be a C++ object (and its
proxy at the Python level) called HDF5Dataset; it will abstract the
current HDF5 dataset as an AMR hierarchy. Operations on HDF5Dataset
will include creating components, deleting components, file I/O,
reporting summary statistics, and taking arbitrary collections of
boxes on a level. Those collections will be represented by a class
BoxLayout. BoxLayout will have set algebra operators to make possible
the creation of new BoxLayout objects. A BoxLayout together with the
scalar cell data of a single component will be known as a
BoxLayoutData.
1.1. Dataset selection
1.1.1. Read multiple files, wild card
The shell command "chombovis *.hdf5" will load all the hdf5 files in
the current directory, each dataset into its own VTK rendering window.
1.1.2. 2D files, 1D files
Extract, display and save to disk sets one dimension lower than the
one currently loaded. The lower-dimensional sets can be linear or
nonlinear (e.g. integral curves). For 2D, the data corresponds to
slicing planes perpendicular to one of the coordinate directions.
1.1.3. Work with arbitrary sets of boxes
Display all boxes whose corners satisfy some inequality. Currently,
we display all the boxes on a entire level, or none of them.
1.2. User-defined data manipulation
1.2.1. Run scripts at other than initialization time
Give the user a Python prompt, available throughout a ChomboVis
session. From the Python prompt, "import whatever" can manipulate the
display, as long as whatever.py is written to the ChomboVis API.
1.2.2. Pointwise transformations
A unary pointwise transformation is, informally, what we obtain if we
traverse all the cells of a BoxLayoutData and apply to their values a
real-valued function of one variable. A binary pointwise
transformation applies a real-valued function of two variables to the
corresponding cells of two BoxLayoutData objects. Our BoxLayoutData
will provide all the common arithmetic operators and and
transcendental functions. Additionally, users will be able to define
their own n-ary pointwise transformations, in two ways:
1.2.2.1. Defined in Python
The user types a function definition at the Python prompt, or imports
the function definition from a .py file. An example of such a
function is,
def norm(x,y,z): return math.pow(x*x + y*y + z*z, 0.5)
Our API will include a method to associate the arguments x,
y and z of such a function to components of the
current HDF5 dataset.
1.2.2.2. Defined in C
The user defines the transformation function in a .c file, which we
compile and link in at runtime.
1.2.3. Derivatives
Compute finite difference approximations to derivatives of quantities
defined in a data object. These derivatives rely, optionally, on
user-defined ghost cells stored in data file stencils, or on ghost
cells ChomboVis generates by interpolation.
1.2.4. Integral checks
Sum quantities defined on AMR grid hierarchies, accounting properly
for regions covered by finer grids.
1.3. Miscellaneous
1.3.1. Invoke ChomboVis from Gnu debugger
Running, under GDB, any PDE solver (that uses our library), provide a
function that starts ChomboVis. The library function passes ChomboVis
a BoxLayoutData.
2. Visualization
2.1. Global
2.1.1. Picking in 3D
Using the mouse, the user selects (ctrl-Button1) any cell in the
display. The indicated cell becomes highlighted in the display and in
the corresponding data browser.
2.1.2. Multiple centerings
Display cell boundaries, and use ghost cell information, as though the
data were alternately cell-, node-, face- or edge-centered.
2.1.3. Ghost cells visible
Optionally, toggle on or off the display of ghost cells. (Currently,
they are always on.) Eliminate gaps between boxes.
2.1.4. Multiple visualization windows
Display the same, or different, datasets and synchronize
mouse-controlled rotation, pan and zoom operations -- in other words,
frame linking.
2.1.5. Presentation graphics
Let the user insert text labels into the display. Produce an accurate
postscript representation of the display.
2.1.6. Cylindrical and spherical coordinates
Accept and render data in cells identified by these alternatives to
the current rectilinear coordinate system.
2.2. Specific methods of visualization
2.2.1. Slices
2.2.1.1. Arbitrary number of parallel slices
Currently, we can display up to three, orthogonal, slices. The plan
is to display more slices, in front of and behind any of the current
ones. (In VTK, this is known as "probing".)
2.2.1.2. Surface plots of slices
2.2.1.3. Slicing in space and slice animation
Make the appearance, but not the position, of a slice vary.
2.2.2. Isosurfaces
2.2.2.1. Nested isosurfaces, transparency
Cut away some of the display, so the user can see into a cross
section.
2.2.2.2. Coloring isosurfaces with other variables
Currently, we color isosurfaces with the value of the isosurface's own
variable. The requirement is to both color and blank based on another
variable's value. This includes support for interferometry.
2.2.2.3. Point and click for isosurface creation and removal
The value corresponding to the contour to be created or removed is to
be indicated by picking a cell on a currently displayed slice. This
feature should be available for both 2D and 3D datasets.
2.2.3. Vectors and tensors
Represent more than one component at a time. Our support for this
currently is limited to streamlines. The requirement is to display
"hedgehog" plots as well.
2.2.4. Particles
Display the color-coded evolution of a scalar along a trajectory.
Display true particle trajectories; calculate streamlines across
multiple files, or handle a time dimension in a single file.
Displaying the trajectories defined by the relationship
dx/dt=v(x(t),t) will involve queries of data objects for
multiple time levels.