This chapter introduces you to the Explorer by way of five sample maps, each from a different scientific field. The examples cover:
image processing
numerical mathematics
molecular chemistry
atmospheric physics
computational fluid dynamics
You can create maps for all occasions, for example, to generate a 3D image of vortices around hydro-electric turbines, or to visualize carbon dioxide concentration as a function of geographic location. Such activity involves a number of separate tasks: reading the data into the map, colormapping a gradient, extracting a 2D slice of a 3D dataset, visualizing the result. The modules in the map carry out these tasks.
The five maps presented here use authentic data to illustrate the workings of Explorer. Each map deals with a specific issue, and the modules provide ways of altering or enhancing the data so as to make its significance clear, and perhaps to elicit correlations that might otherwise have gone unnoticed.
The maps are complete. You need only launch, or open, the map in the Map Editor, and then try varying the parameters as suggested in each example. Chapter 2 explains how you set about creating your own maps. Table 1-1 defines some of the terms you will encounter when you start Explorer.
Table 1-1. Some Components of Explorer
Term | Meaning |
|---|---|
Map Editor | Work area for creating and modifying maps |
Module Librarian | Lists maps and modules available for use |
Module | Performs an algorithmic function on the data passing through it |
Control Panel | Gives the user access to the module functions |
Widgets | Dials, sliders, buttons, and text slots for changing parameters |
Map | A collection of modules that carry out a series of related operations on a dataset |
Image | A visual image shown in the DisplayImg module |
Geometric Object | The form that volumetric data takes in the Render module |
You can open maps in two ways: from the command line in the UNIX shell, and from the Module Librarian in Explorer.
If Explorer is not running, you can use the command line in UNIX when you open a map for the first time. Change to /usr/explorer/maps and type the Explorer command at the % prompt:
cd /usr/explorer/maps explorer -map mapname.map |
The mapname.map is the name of the map you want to open, for example, “chemistry.map”. The name of each map shown in this chapter is given in the introduction to the map.
Explorer starts up and the map appears in the Map Editor. All the modules are selected (highlighted in white), and you can move the entire map by dragging on the title-bar of a single module.
Click on the background of the Map Editor to deselect the map before you experiment with individual modules. The highlighting disappears.
Once Explorer is running, you can use the Module Librarian to open a map. Follow these steps.
To clear the Map Editor of modules, click on the Edit menu and select “Destroy All.”
Go to the Module Librarian next to the Map Editor and use the vertical scroll bars to locate the maps, which are shown in blue.
Select the map you want by placing the cursor on the map name and clicking the right mouse button, then selecting “Launch” from the pop-up menu.
You can also hold down the left mouse button, and drag the map over to the Map Editor (the “drag-and-drop method”).
When you release the mouse button, the map appears, module by module, on the screen. The menu bar displays a number in angle brackets, for example, <5>, which tells you initially how many modules are in the map; the number decreases as modules appear on screen, indicating how many modules remain to be launched.
You can expand the mini control panel (shown in Figure 1-1) of any module into the full-scale control panel by clicking on the square Maximize button at the right top corner of the control panel. When you do this, the parameter widgets and their values are displayed for easier manipulation.
This example illustrates how you can use Explorer modules to process an image. The “koreaContour” map takes an aerial image of a region of the Korean landscape, renders it in 3D, and overlays a contour map showing altitudes. The resulting image is displayed on-screen. The map file is /usr/explorer/maps/koreaContour.map.
To open the “koreaContour” map, displayed in Figure 1-2, type
explorer -map koreaContour.map |
The seven modules are connected to one another by blue wires. The two modules on the left read in the image files, and the module on the far right displays the processed image. In between these are four modules that manipulate the image data.
The seven modules in the map have the following functions:
ReadImg<2> reads in the first image file (2D aerial image of a region of Korea).
ReadImg reads in the second image file (altitude data for the same region).
DisplaceLat produces the aerial image vertically displaced by the topographical data.
DisplaceLat<2> produces the same data as DisplaceLat, but with greater vertical distortion.
LatToGeom creates polygons of the displaced data for Render.
Contour shows contours colormapped according to height.
Render renders the image with contours overlaid.
Both the aerial image and the altitude data go through DisplaceLat (see Figure 1-3), which displaces the image data so that topographical features become 3D.
You can regulate the scale of the 3D rendering by turning the Scale dial on the module control panel.
The result is a 3D version of the original 2D image, showing topographical features of the Korean countryside.
The output of DisplaceLat<2> passes into Contour (see Figure 1-4), which creates a series of lines at varying heights above sea level just as in a topographic map. The scale factor for DisplaceLat<2> should be greater than that for DisplaceLat, to make the contour lines visible.
To set the relationship between scale factors, the Scale parameter output port on DisplaceLat is wired to the Scale parameter input port on DisplaceLat<2>.
You can alter the number of contour levels by moving the slider widget on the module control panel.
You can also change the altitude range for which contours are shown by resetting the minimum and maximum levels.
The result is shown in Render (see Figure 1-5). You can open the Render window by clicking on the Maximize button and rotate the object in the window.
To move the object, place the cursor on the object, hold down the left mouse button, and drag the object around. It continues to rotate when you release the mouse button.
To stop the object, click on the background of the Render window.
For more information on using the Render menus to manipulate objects, see “Visualizing Data” in Chapter 3.
This example illustrates how to use Explorer modules to read in a short program script describing a mathematical function and visualize the data in the Render window. The mathematical function describes diffusive heat flow. It is a finite difference[2] stencil for solving problems in parabolic differential heat conduction.
The form of the equation in this example is dimensionless; it serves as a normalized thermal model. A map using a specific form of such an equation with actual data can be used, for example, to test the conductivity of steel.
To open the “heat-flux” map (see Figure 1-6), type
explorer -map heat-flux.map |
The map contains six modules, which have these functions:
LatFunction reads in a program script that sets up a heat source and a heat sink, and generates a temperature distribution between them.
DisplaceLat displaces the 2D lattice data to create a 3D visualization of the temperature.
GenerateColormap colormaps the temperature field by value.
LatToGeom converts the lattice data into geometry for Render.
Legend produces a scale showing the temperature gradient.
Render represents the heat data as a contour lattice.
![]() | Note: A lattice is an ordered array of data. It is also an Explorer data type. For more information, see “Understanding Explorer Data Types” in Chapter 2. |
LatFunction reads in a short program written in the Shape language, which is described in detail in the IRIS Explorer Module Writer's Guide. It is a C-like language that has capabilities for operating on whole lattices with a single statement. The program is saved in a file called heat-flux.script in /usr/explorer/maps and can be run as often you choose.
The data passes from LatFunction to Displacelat, which displaces the 2D data into a 3D array to show the heat source as a peak and the heat sink as a trough. You can change the degree to which the peaks project from the surface by turning the dial on Displacelat. This causes the data to be displaced out of the plane to a greater or lesser degree.
GenerateColormap colormaps the heat-flux data according to temperature value. You can change the colors associated with each temperature value by using the option menus on the control panel. Refer to “Creating Colormaps” in Chapter 3 for more information.
LatToGeom converts the heat-flux and colormap data, which is in lattice form, to geometry for display in Render (see Figure 1-7). Render can only display geometry, and all lattice data must be converted first.
Once the data is displayed in Render, you can change the background color of the window by selecting “Edit Background Color” from the Edit menu. When the Background Color Picker appears:
Click anywhere on the color wheel to select a color
Drag the sliderto increase the intensity of the selected color
This example illustrates how you can use Explorer modules to construct a 3D model of a complex organic molecule and then calculate the optimal radius and likely path for a probe atom investigating the target molecule. The map is called “chemistry.”
To open the “chemistry” map (see Figure 1-8), type:
explorer -map chemistry.map |
The map takes conformation data for a NutraSweet® molecule and creates a ball-and stick representation of it and a dot surface that shows the traversal path for a probe atom.
The map contains seven modules:
FileList lets you select which of the available chemistry modules you want to visualize.
ReadPDB reads in the molecular conformation data.
BallStick creates the ball-and-stick model of the molecule.
AtomicSurf defines a solvent-accessible surface around the molecule. It uses the USURF[3] program to define a solvent-accessible surface around the molecule.
GenerateColormap colormaps the atoms in the molecule and the dot surface.
LatToGeom converts the surface data in Explorer lattice format into geometry for Render.
Render renders the molecule as a ball-and-stick object and displays the solvent-accessible surface data as a dot surface.
The molecular conformation data is read in by ReadPDB. It is in the Brookhaven Protein DataBase (PDB) format, a commonly used format for saving descriptions of proteins, including atom positions and properties, and bond locations.
BallStick (see Figure 1-9) receives the data in pyramid form and generates sphere-and-cylinder geometry. (The pyramid is an Explorer data type.) The radius of each atom is calculated according to its van der Waals' radius.
You can increase or decrease the radii of all atoms in Render proportionately by turning the dial on the module control panel.
The molecule data also passes into AtomicSurf (see Figure 1-10). It uses the van der Waals' radius of each atom and adds a solvent probe radius to it. The surface points in this “solvation layer” represent the positions in which a solvent probe would be in contact with the target molecule.
You can change the probe radius for which the solvent-accessible surface is calculated by moving the slider on the control panel. The smaller the value, the finer the surface.
A value of 1.5 Angstroms approximates the radius of a water molecule, a commonly used probe. Probes that are too small or too large are not useful, particularly as the probe size approaches that of the target molecule.
You can also change the surface dot density by turning the control panel dial. The larger the value, the larger the number of dots produced.
It is best to use lower densities for large molecules, otherwise the visualization becomes very cluttered. A density of about 10 dots/Angstrom2 works well for molecules the size of NutraSweet.
GenerateColormap creates a default colormap for the molecule based on atomic number. The domain is set at a minimum of 0 and a maximum of 16 to accommodate the atoms, which are hydrogen, carbon, oxygen, and nitrogen.
It also colormaps the dots in the solvent-accessible surface according to the parent atom of each dot. This provides you with information about which atoms a given probe will touch as it traverse the surface of the molecule.
You can change the default color settings by using the option menus on the control panel. Refer to “Creating Colormaps” in Chapter 3 for more information.
You can use the capacities of Render to look at the NutraSweet molecule in great detail (see Figure 1-11). You can:
rotate the molecule by holding down the left mouse button and pushing the molecule with the cursor
use the “Lights” menu to switch on the various light sources and highlight less distinct areas of the dot surface.
For more information on using Render, read “Visualizing Data” in Chapter 3.
You can use FileList to select another chemistry molecule to examine.
This example illustrates how you can use Explorer modules to visualize atmospheric data. Intense storms can produce tornadoes, high winds, and hail, and it is possible to simulate these storms by integrating a set of mathematical flow equations. These equations can predict values for the wind speed and direction, air temperature, humidity, pressure, and water content every 5 to 10 seconds on a lattice of grid points 500 to 1000 meters apart.
The data in the example map is taken from a simulation of a single severe storm made by the storm group at the University of Illinois.[4] The map shows an isosurface of rain density and a volume rendering of air buoyancy. An isosurface is a surface of constant density. The data is in the form of a uniform lattice.
To open the “volume” map (see Figure 1-12), type:
explorer -map volume.map |
The map contains eight modules:
ReadLat reads in the rain density data.
ReadLat<2> reads in the water buoyancy data.
ReadLat<3> reads in the colormap for the water buoyancy data.
IsosurfaceLat generates an isosurface of the rain density.
WireFrame creates a frame that defines the boundaries of the storm data.
GenerateColormap modifies the colormap for the buoyancy data.
VolumeToGeom converts the volume data to geometry for Render.
Render renders the rain density isosurface and the water buoyancy volume.
For volume rendering techniques to display the volume as shown in this map, you require alpha blending hardware. Some workstations do not have this hardware, but they can display the volume adequately if the Splat type on VolumeToGeom is set to “Point” (see “Experimenting with the Volume Map” below).
This map uses both geometry (the isosurface) and volume rendering (the haze) in one visualization to show the evolution of a storm and the effect on its immediate environment.
IsosurfaceLat (see Figure 1-13) displays the density data in the Render window as an isosurface. The threshold value is the density value for which an isosurface is created.
You can change the threshold value by turning the dial on the control panel, and thereby change the shape of the isosurface. This indicates how the rain density varies throughout the storm space.
You can control the splat configuration by changing the splat type and size on the module control panel.
Rendering splats can may take a long time. You can set and adjust an error tolerance to get a balance between rendering time and splat quality.
To set the error tolerance, use the dial on the control panel. A low error value produces an accurate volume display, but the display takes longer to generate.
ReadLat<3> reads the colormap settings for the volume rendering of the water buoyancy data into GenerateColormap. The current setting for the colormap shows buoyant air, containing little water, in red and the saturated air in blue.
Once the data is in Render, you can analyze it in detail. Figure 1-14 displays the reflectivity from the storm.[5] The blue-white surface encloses the area containing most of the large drops and hail. Several light sources illuminate the surface. You can see the overhang, observed by weather radar in many severe storms, at mid-level where the reflectivity surface comes out toward the viewer.
Above the storm, there is a region of many colors volumetrically rendered from the buoyancy, a quantity used in the equations for vertical velocity. It represents the instantaneous effects of temperature, moisture, and water mixed with ice on the velocity acceleration, and is large at and above the top of the storm.
A wavy appearance is evident, indicating the presence of strong gravity waves. Yellow/green indicates relatively high buoyancy, blue indicates relatively low buoyancy. The effect is roughly similar to throwing a rock into a pond, but here it is the storm growing into the upper atmosphere.
You can change the opacity values on the colormap to affect the look of the volume rendering (see “Creating Colormaps”).
You can lower the opacity of a range of colors to make them more transparent, and let you see other aspects more clearly.
You can increase the opacity of a color to emphasize a feature.
This example illustrates how you can use Explorer modules to study the dynamics of air flow over the nose of a plane. The “cfd” map shows variations in air density surrounding the surface of the plane.
The map generates an air flow field around the plane, extracts 2D slices of the volume, and colormaps them by density value, thus providing a means of examining different areas of the field.
The CFD group at Silicon Graphics created the plane from a model aeroplane by a digitized 3D scanning process, and the air flow data was generated from NASA's fluid dynamics program, ARC3D[6] .
To open the “cfd” map (see Figure 1-17), type:
explorer -map cfd.map |
The map contains nine modules:
ReadLat reads in the air density data file.
IsosurfaceLat generates an isosurface from the air density data.
OrthoSlice extracts the density near the plane's surface.
ProbeLat creates non-orthogonal slices of the air density data.
TransformGen sets the orientation for the ProbeLat slice.
PyrToGeom converts the slice data from ProbeLat to geometry for Render.
GenerateColormap reads in a colormap for the density data.
LatToGeom converts the slice data from OrthoSlice to geometry for Render.
Render renders the isosurface of the air density.
OrthoSlice (see Figure 1-15) operates on the air density data to produce a curvilinear grid depicting the density field around the plane.The slice number is 1 (the minimum) and this index increases in a direction normal to the plane's surface. For j =1, the grid actually lies along the surface of the plane.
You can change the slice number while holding the axis constant, and see the grid move out from the plane surface.
As you vary the slice numbers, you get information about air densities at the plane surface and in its vicinity. High air densities occur at the nose when there is a massive deceleration of fluid. As the air flows away from the leading edge and accelerates over the wing, the density drops.
You can also vary the axis. If you select the k axis, the slice is taken down the longitudinal axis of the wing and produces a cross-section of the wing.
ProbeLat and IsosurfaceLat complement each other. IsosurfaceLat generates an isosurface, a surface of constant density, in the flow field. This tells you how all the air of a given density is distributed around the plane.
You can change the threshold, the value at which the isosurface is drawn, by turning the dial on the control panel.
ProbeLat (see Figure 1-16) probes the curvilinear flow field along an arbitrary axis. The slice shows all density values in that region, colormapped by value.
You can control the area of the slice by turning the Clip Size dial on the control panel.
You can also change the form the probe takes, by selecting a type from the “Probe Tygpe” option menu. In Figure 1-17, the selected probe type is a paddle.
GenerateColormap colormaps the grid produced by OrthoSlice according to its air density values. It is a scalar field, with one value at every point. The domain in GenerateColormap is set to a density minimum of about 0.7 and maximum of 1.1. It also colors the probe surface according to air density values.
The axis along which the plane is cut is controlled by TransformGen. You can slice in any direction you choose by using the widgets on the TransformGen control panel to set a different axis. You can alter the orientation of the probe by using the mouse to move the object in TransformGen's window.
PyrToGeom and LatToGeom convert pyramid and lattice data respectively to geometry that Render can use.
Once the data is displayed in Render (see Figure 1-18), you can enhance the visualized data by using the Render menus. For example, click on the background of the Render window to bring up the Render pop-up menu. Select the “Draw Style” option, and then select “wireframe” from the cascading menu. To return all the surfaces to their original state, bring up the menu again and select the “as is” option.
The grid, isosurface, and probe surface are separate objects, which can be separately treated in Render. For example, you could make the probe surface transparent, which would reveal the features behind it.
[2] For more information on finite difference techniques, see Mitchell, A.R., and Griffiths, D.F., “The Finite Difference Method in Partial Differential Equations,” John Wiley and Sons, 1980.
[3] * Written by Joseph J. Moon and published under the auspices of the Quantum Chemistry Program Exchange (QCPE), Indiana University. Program #566
[4] Dr. Robert Wilhelmson, NCSA Research Scientist and Professor of Meteorology in the Department of Atmospheric Sciences (DAS) at the University of Illinois at Champaign-Urbana and Dr. Lou Wicker. post-doc, and Crystal Shaw, research programmer, both at NCSA and DAS.
[5] Wilhelmson, R.B., B.F. Jewett, C. Shaw, L.J. Wicker, M. Arrott, C.B. Bushell, M. Bajuk, J. Thingvold, and J. B. Yost, “A Study of the Evolution of a Numerically Modeled Severe Storm,” International Journal of Supercomputer Applications, Volume 4, No. 2, Summer, 1990 pp. 20-36.
[6] US Public Domain Software. For more information, see Pulliam, T. and Steger, J., “Implicit Finite-Difference Simulations of Three-Dimensional Compressible Flow,” AIAA Journal, Vol 18, No. 2, Feb. 1980, pp. 159-167.