VisIt - 3D Scientific Visualization
Description and Overview
VisIt is a point-and-click 3D scientific visualization application that supports most common visualization techniques (e.g., iso-contouring and volume rendering) on structured and unstructured grids. Due to its distributed and parallel architecture, VisIt is able to handle very large datasets interactively. In addition, VisIt is extensible, allowing users to add data loaders or additional analysis tools to VisIt. The NERSC Analytics Group has developed extensions to VisIt to support NERSC user applications, and coordinates with the VisIt development team to add these extensions to the main VisIt development code branch.
VisIt supports visualization and analysis of a wide range of computational meshes, including two- and three-dimensional rectilinear, curvilinear, and unstructured meshes as well as structured AMR and CSG meshes (see the VisIt FAQ for a list of supported formats). VisIt provides extensive functionality for interactive and static visualization and analysis of extremely large data and also has the ability to animate data, allowing users to see the time evolution of their data and create movies. An example screenshot of VisIt is shown below.
VisIt provides via its distributed and parallel architecture support for interactive visualization and analysis of extremely large data sets. VisIt's rendering and data processing capabilities are split into viewer and engine components. These components may be executed in a distributed fashion across multiple machines. The Viewer is responsible for rendering and is typically run on a local desktop or visualization server to allow VisIt to leverage the available graphics hardware. The Engine is typically run on a remote machine (where the data is located) and is responsible for performing most of the data processing and input/output (I/O). This eliminates the need to move the data and makes high-end compute and I/O resources available to the engine. The engine can be run serially on a single processor or in parallel on thousands of processors.
VisIt's visualization capabilities are grouped into two main categories. Plots provide functionality for visualizing data and include, e.g., contour, curve, mesh, pseudocolor, streamline, surface, vector or volume plots. Operators define operations performed on the data prior to visualization, such as data slicing, selection, or transformation. VisIt also provides additional extensive data analysis functionality via, e.g., expressions and queries.
VisIt achieves extensibility through the use of dynamically loaded plugins. All of VisIt's plots, operators, and database readers are implemented as plugins and are loaded at run-time from the plugin directory. New plugins can be added easily by installing them in the plugin directory. VisIt also provides a graphical plugin creation tool that greatly simplifies the process of creating new plugins.
VisIt provides an easy-to-use GUI as well as C++, Python and Java interfaces. The Python scripting interface gives users the ability to batch process data using a powerful scripting language. This feature can be used to create extremely sophisticated animations or implement regression suites. It also allows simulation systems that use Python as a back-plane to easily integrate visualization capabilities into their systems. The C++ and Java interfaces make it possible to provide alternate user interfaces for VisIt or allow existing C++ or Java applications to add visualization support.
The best way to learn how to use VisIt is to go through the tutorials available online (see Further Information below). Looking at examples of visualizations similar to what you want to do, or from your science domain, can also be helpful (see Examples below). VisIt supports a large variety of data formats (see the VisIt FAQ for a list of supported formats). If your data format is not supported by VisIt, then you may have to convert your data files in order access them in VisIt or write your own data reader (see the VisIt documentation, Getting Data into VisIt, for more information).
Using VisIt at NERSC
VisIt supports different modes for visualizing and analyzing data. Remote visualization allows you to run VisIt's GUI on a local desktop (or on Euclid) while utilizing the parallel compute power of one of the NERSC machines by executing VisIt's compute engine on, e.g., Hopper. In the batch data analysis and visualization mode, VisIt provides a command line interface or you can execute a set of predefined analysis scripts without displaying the GUI.
The VisIt install on Hopper is provided for the purpose of running the parallel remote visualization backend on Hopper and for running scripts via VisIt's Python Command Line Interface (CLI). If you need to run VisIt's GUI, please install a compatible version of VisIt on your local workstation (recommended) or, if you do not want to install VisIt on your local machine, then you can also run the VisIt GUI on Euclid. See Installing VisIt for information about how to install/setup VisIt with support for remote visualization at NERSC.
To run VisIt in client-server mode, you must install on your local machine a version of VisIt that is the same as the version of VisIt that you want to run as your remote compute engine. For example, if you installed version 2.1.x on your local machine, and VisIt 2.1.x has been installed on Hopper or Euclid, then you will be able to run a remote compute engine on either of those machines. For more details on how to obtain and install appropriate versions of VisIt, see the Installing VisIt section below. When running VisIt remotely, you only need to run module load visit on the NERSC machine on which you are running the VisIt GUI and not on the machine that is running the compute engine. This means, if you are running the VisIt GUI on a local desktop (recommended for best performance) and the compute engine on Hopper, then no module load call is required.
To use a remote compute engine on Hopper or Euclid, start VisIt on your local machine, and select Open file from the File menu.
In the File open GUI, choose the appropriate Host (e.g, NERSC Hopper) . You'll be prompted to enter your password on Hopper.
After you have entered your password, you will be able to browse directories on Hopper. You can type a path into the Path field (obscured in the screen shot), or use the file browser GUI (shown to the right) to navigate to a directory. Select your data file from the list on the right side of the GUI. By default, VisIt tries to guess which file reader it should use to open a file. In order to define a specific database plugin that should be used for opening the file, select, the appropriate plugin from the drop down list next to Open file as type.
After you select a data file, the OK button will be active. Click it to continue.
After you open a file on Hopper,VisIt's profile select dialog will be displayed. Here you need to select the profile corresponding to the queue you want to use and specify the number of processors, e.g., 64, to be used for your session. (For the regular profile you may also want to change the time limit.)
To perform batch data analysis or visualization using VisIt's CLI, use the modules facility to load VisIt and then launch the application by typing visit using the additional -cli -nowin options as shown in the example below:
$ module load visit
$ visit -cli -nowin
To execute a predefined VisIt python script on start-up use the -s option. On Hopper it is necessary to ensure that a parallel compute engine is launched. It is possible to accomplish this launch using the following command line:
visit -cli -nowin -l qsub/aprun -p "Queue to use for submitting job" -np "Number of processors" -t "Wall time limit for job"
VisIt will automatically submit a job for launching its parallel compute engine to the desired queue. For example, assume one wants to run the following script, named "ComputeIsosurface.py:"
# ComputeIsosurface.py: import sys # Open the file to visualize/analyze OpenDatabase("/usr/common/graphics/visit/data/multi_rect3d.silo") # Set options for writing output images swa = SaveWindowAttributes() swa.outputToCurrentDirectory = 1 # Save images in current directory swa.fileName = "multi_rect3d_contour" # Image filename swa.family = 0 # Do not append numbers to filename swa.format = swa.PNG # Save as PNG swa.width = 1024 # Image width swa.height = 1024 # Image heiggt swa.resConstraint = swa.NoConstraint # Do not force aspect ratio, use width and height SetSaveWindowAttributes(swa) # Create an isosurface plot AddPlot("Contour", "v") # Second string is the name of dependent variable for isosurface # Set options for contouring catts = ContourAttributes() catts.contourMethod = catts.Value # Specify specific isovalues catts.contourValue = (-0.5, 0.5) # List of isovalues catts.colorType = catts.ColorByMultipleColors # Color each isosurface in separate color catts.SetMultiColor(0, (0, 0, 255, 255)) # Display first isosurface (-0.5) in blue catts.SetMultiColor(1, (255, 0, 0, 255)) # Display second isosurface (0.5) in red SetPlotOptions(catts) # Set viewpoint vatts = View3DAttributes() vatts.viewNormal = (-0.696999, 0.396325, 0.597595) vatts.focus = (0.5, 0.5, 0.5) vatts.viewUp = (0.287917, 0.91793, -0.272963) vatts.viewAngle = 30 vatts.parallelScale = 0.866025 vatts.nearPlane = -1.73205 vatts.farPlane = 1.73205 vatts.imagePan = (0, 0) vatts.imageZoom = 1 vatts.perspective = 1 vatts.eyeAngle = 2 SetView3D(vatts) # Draw plots and save resulting image DrawPlots() SaveWindow() # Quit sys.exit(0)
This script computes an isosurface for the data set "multi_rect3d.silo," which is distributed with VisIt, and saves the resulting image as "multi_rect3d_contour.png." To run this script on Hopper using 16 processors in the regular queue with a wall clock time limit of two minutes, one would issue the command:
$ visit -cli -nowin -l qsub/aprun -p regular -np 16 -t 00:02:00 -s ComputeIsosurface.py
To use a version of VisIt other than the default, include the version number on the module load line, e.g., to use version 2.1.2:
$ module load visit/2.1.2
For a list of additional command line options use:
$ module load visit #Load the VisIt module
$ visit -help #List most common command line options
$ visit -fullhelp #List all command line options
For more detailed information about using VisIt's CLI see here. The documentation of VisIt's python interface is available here. Some example python scripts for VisIt are also available from the visitusers.org wiki.
Currently Euclid is the only NERSC system that allows you to directly execute VisIt's GUI on a NERSC machine, Hopper only support remote and batch visualization as described above. VisIt on Euclid is already configured with a host profile for Hopper. To start VisIt including its GUI on Euclid execute the following commands:
$ module load visit #Load the VisIt module
$ visit #Start VisIt with the GUI enabled
In general we recommend to install VisIt using the pre-compiled binaries. In case that none of the pre-built binaries should work on your platform or you want to do VisIt development, you can also build VisIt from source. In order to use the remote visualization capabilities of VisIt you will need a version of VisIt that is compatible with a version of VisIt available at NERSC (ideally the default version). To check which versions are available at NERSC see Availability below. In addition you will need an according host profile for the NERSC machine of your choice (see Installing NERSC Host Profiles).
Pre-compiled binaries of VisIt for Unix, Windows, and Mac-OS X systems with detailed install notes describing the installation process are available online here. The Windows executables are packaged in a self contained installer. The Unix and Mac OS X executables require downloading an install script along with the file containing the executable. Instructions for installing VisIt can be found in the install notes. In order to run VisIt's GUI on a local desktop while using a remote compute engine on, e.g. Hopper, an appropriate host profile needs to be setup. The binary versions of VisIt are shipped with default host profiles for Hopper, and Euclid. The example below illustrates an example installation on a linux-based system.
#Download the VisIt binary and installation script from the VisIt webpage, change the permissions of the visit-install script to make it executable and execute the script.
$ chmod 755 visit-install2_2_1
$ ./visit-install2_2_1 -c nersc "version" "platform" "directory"
version indicates the version of VisIt, 2.2.1. The platform parameter indicates for which type of machine VisIt should be installed and should match the accompanying distribution file, e.g., linux-x86-64. The directory parameter defines the directory where VisIt should be installed. Adding the -c nersc option installs the default NERSC host profiles.
The VisIt sources are available from the VisIt webpage here. VisIt provides a convenient build_visit script which automates the complex VisIt built process. The build_visit script automates: i) downloading required VisIt and 3rd party source code as well as ii) configuring and building VisIt and 3rd party libraries. For information about the build_visit command line options use build_visit --help. Additional information on how to install VisIt from source is also available on the visitusers.org wiki.
VisIt is already shipped with pre-defined host profiles for NERSC machines, including Hopper and Euclid. As described above, when installing VisIt using a pre-built binary, the -c nersc option will automatically install the default NERSC host profiles.
VisIt's settings are stored in a folder .visit usually located in your home directory or if you installed VisIt at a non-default location at install-path/version/.visit (where version is the version-number of VisIt). If you have VisIt installed and would like to add the appropriate host profiles for NERSC, you can simply copy the according host profiles into your .visit/hosts folder. If you installed VisIt using a pre-built binary, then you can find the NERSC host profiles in the folder .visit/allhosts. In case you installed VisIt from source you can find the default host profiles in the VisIt source folder at src/svn_bin. The files containing the NERSC host profiles are named: host_nersc_euclid.xml, host_nersc_hopper.xml.
$ cp .visit/allhosts/host_nersc*.xml .visit/hosts
For up-to-date information on which versions of VisIt are currently available on the NERSC machine of your choice, login and execute:
$ module avail visit #List all available VisIt modules
To use a version of VisIt other than the default, include the version number on the module load line, e.g., to use version 1.12.2:
$ module load visit/1.12.2
|Package||Platform||Category||Version||Module||Install Date||Date Made Default|
Many images featured on the following NERSC and LBNL websites were generated using VisIt:
- Analytics and Visualization, see also the Visualization, Data Exploration, and Data Analysis and Mining subpages
- Sience at NERSC
- Vignettes page of the Visualization Group at LBNL.
Further information about VisIt is available from the following external websites:
- A series of VisIt tutorials are available online at the vistusers.org wiki.
- The VisIt user manual and other helpful information on how to use VisIt is available from the VisIt website here.
- The VisIt user community has created a wiki at http://visitusers.org/ which contains up-to-date information about VisIt including valuable user and developer documentation.
Getting Help with VisIt
If you have questions about or problems running VisIt on a NERSC platform, please send an email to firstname.lastname@example.org. If you would like help with or advice about using VisIt to visualize or analyze your data, contact the NERSC Analytics Group by sending an email to email@example.com. VisIt bugs should be reported to firstname.lastname@example.org.