VisIt 2.10 Release Notes

Welcome to VisIt's release notes page. This page describes the important enhancements and bug-fixes that were added to this release.

Sections

- Features for all users
- Features for advanced users
- Changes in GUI behavior
- Changes to file format readers
- Changes to plots
- Changes to operators
- Other bug fixes
- Configuration changes
- Changes to build_visit
- Changes for VisIt developers

General features added in version 2.10

- VisIt's Simulation window was enhanced so it can display up to 500 simulation commands.
- VisIt was enhanced to enable launching parallel jobs using sbatch/ibrun.

Advanced features added in version 2.10

- A new VisItExportDatabaseWithOptions() function was added to Libsim. The function is like VisItExportDatabase() except that it takes a 4th argument that lets the simulation pass an option list. An option list is a set of key/value pairs that lets the simulation provide write options for the selected writer plug-in.

  Example:
  ``

      /* Write binary VTK data. */
      VisIt_OptionList_alloc(&opts);
      VisIt_OptionList_setValueB(opts, "Binary format", 1);
      VisItExportDatabaseWithOptions(filebase, "VTK_1.0", vars, opts);

- VisIt's export mechanism has been enhanced with support for "Write Groups". When writing out data on HPC systems, independent file writes often provide the best performance up to around a few thousand MPI ranks. After that, file system limitations begin to emerge and it makes sense to coordinate access to the parallel file system to get overall faster performance. Write groups are an optional feature provided in the Export window that enable VisIt to partition its MPI ranks into smaller groups of user-specified size. The MPI ranks within each group then coordinate their access to the file system. This can reduce contention and improve overall performance. On systems such as NERSC's edison machine, partitioning a VisIt job into groups of 48-96 processors can greatly improve export performance. The optimal size of the write group depends on the size of the VisIt job and the amount of data being written.

  Some file format plug-ins can tell VisIt that they want geometry from various MPI ranks aggregated on rank 0 so a single file can be written. At scale, writing aggregating geometry to a single MPI rank is extremely costly and VisIt risks running out of memory. For formats that aggregate data, write groups improve scalability by aggregating data onto the leader rank of each write group, which then writes out the data to the file format. This will result in more files but exports will be faster.

  The write group functionality is available by passing an option list to Libsim's VisItExportDatabaseWithOptions() function.

  Example:
  ``

      visit_handle vars = VISIT_INVALID_HANDLE, opts = VISIT_INVALID_HANDLE;
      VisIt_NameList_alloc(&vars);
      VisIt_NameList_addName(vars, "pressure");

      /* Construct write groups of 48 processors. */
      VisIt_OptionList_alloc(&opts);
      VisIt_OptionList_setValueI(opts, VISIT_EXPORT_WRITE_USING_GROUPS, 1);
      VisIt_OptionList_setValueI(opts, VISIT_EXPORT_GROUP_SIZE, 48);

      VisItExportDatabaseWithOptions(filebase, exportFormat, vars, opts);

      VisIt_NameList_free(vars);
      VisIt_OptionList_free(opts);

- Libsim's VisIt_VariableData object was extended so you can optionally supply it with multiple data arrays, each representing a separate component of data. This enhancement permits VisIt to accept non-contiguous simulation data without first converting that data to a contiguous representation. This is a particularly useful feature for array-of-structure data structures and will reduce Libsim's memory overhead. Data arrays using the new setArrayData functions can have one or more components, which have their own base address and associated offset and stride. All of the previous setData functions continue to work and remain the preferred method for passing contiguous data to Libsim. The flexibility offered by the new setArrayData functions allows simulation data to be used directly (zero-copy) in situations that would previously have required a copy of the data.

  Structure of Arrays Example:
  ``

      #define MAX_PART 100

      typedef struct
      {
          double x,y,z;
          double mass;
      } Particle;

      Particle P[MAX_PART];

      /* Expose Array of Structure x,y,z values as a single VariableData object. */
      visit_handle coordinates = VISIT_INVALID_HANDLE;
      VisIt_VariableData_alloc(&coordinates);
      VisIt_VariableData_setArrayDataD(coordinates, 0, VISIT_OWNER_SIM, MAX_PART, 0, sizeof(Particle), (void *)&P[0].x);
      VisIt_VariableData_setArrayDataD(coordinates, 1, VISIT_OWNER_SIM, MAX_PART, 0, sizeof(Particle), (void *)&P[0].y);
      VisIt_VariableData_setArrayDataD(coordinates, 2, VISIT_OWNER_SIM, MAX_PART, 0, sizeof(Particle), (void *)&P[0].z);

      /* Expose Array of Structures mass array as a single VariableData object. */
      visit_handle mass = VISIT_INVALID_HANDLE;
      VisIt_VariableData_alloc(&mass);
      VisIt_VariableData_setArrayDataD(mass, 0, VISIT_OWNER_SIM, MAX_PART, 0, sizeof(Particle), (void *)&P[0].mass);

  In addition, this new functionality can be used to create the desired interleaved view of coordinates that are stored in separate arrays.
  Interleaved Coordinates Example:
  `

      #define NX 100
      #define NY 100
      #define NZ 100
      int dims[] = {NX, NY, NZ};
      double x[NZ][NY][NX], y[NZ][NY][NX], z[NZ][NY][NX];

      /* Expose x,y,z values as a single VariableData object. */
      visit_handle coordinates = VISIT_INVALID_HANDLE;
      VisIt_VariableData_alloc(&coordinates);
      VisIt_VariableData_setArrayDataD(coordinates, 0, VISIT_OWNER_SIM, NX*NY*NZ, 0, sizeof(double), (void *)x);
      VisIt_VariableData_setArrayDataD(coordinates, 1, VISIT_OWNER_SIM, NX*NY*NZ, 0, sizeof(double), (void *)y);
      VisIt_VariableData_setArrayDataD(coordinates, 2, VISIT_OWNER_SIM, NX*NY*NZ, 0, sizeof(double), (void *)z);

      visit_handle mesh = VISIT_INVALID_HANDLE;
      VisIt_CurvilinearMesh_alloc(&mesh);
      VisIt_CurvilinearMesh_setCoords3(mesh, dims, coordinates);

  `
  Data passed via the new setDataArray functions are supported for mesh coordinates and variables. Certain other use such as specifying unstructured mesh connectivity are not currently permitted.
- Libsim's Fortran bindings were enhanced so the visitsetmpicommunicator function passes an MPI communicator by its integer handle. Thank you to William T. Jones for this improvement.
- Libsim's runtime library was improved so when it is used in batch mode, it loads color tables broadcast from rank 0 to lessen the demands on the file system. This reduces Libsim initialization time.
- Libsim's runtime library was enhanced so it can be initialized with a set of user-specified plot and operator plugins. Restricting the number of plot and operator plugins is useful in batch mode and it can dramatically improve initialization time. Plugins are specified using -plotplugins and -operatorplugins command line arguments passed to the VisItSetOptions() function. Each argument takes a comma-separated list of plugin names or id's.

  Example:
  ``

      VisItSetOptions("-plotplugins Mesh,Pseudocolor -operatorplugins Isosurface,Slice,Threshold");

Changes in GUI behavior for version 2.10

- The 2D Line annotation interface was enhanced to allow the line color to be the same as the foreground color, and to provide a style setting.
- A 3D Line annotation object has been added.
- Session files can be saved and loaded from a remote host.
- The Set save options window was overhauled. The Standard Save and Advanced Multi-Window Save tabs have been replaced with an Aspect ratio and resolution section and a Multi-window save section. The Aspect ratio, Width, Height and Screen capture controls have been moved into the Aspect ratio and resolution section. The tiled and advanced multi-window save controls have been moved into the Multi-window save section. The Stereo control has been moved into the Format options section.

File format reader changes in version 2.10

- The PLOT3D reader has been enhanced in the following ways:
  - Auto-detect the format options normally specified by the .vp3d meta file or via Read options. Auto-detection works for most binary files, but not for ascii. It is always on, and if successful, will override the values specified in the .vp3d meta file or Read options. If not successful, the reader will fallback to use the other settings.
  - Support time-series solution files, specified in the form 'somefile*.q', (where '*' matches a number specifing the timestate) or 'somefile??3?.q'. Use the '?' form to sub-select from the time series. The q filename in this form can be used in the .vp3d meta file, or via Read Options. The '.q' extension is the default. If you want VisIt to parse the time value from the filenames, turn off the new "Solution Time field accurate" read option.
  - Support non-record based Fortran binary files. (Auto detection of options may fail).
  - Additional Read options were added for specifying Gas constants R and Gamma used in calculating functions like Temperature, Pressure, Enthalpy and Entropy. The defaults used are 1.0 and 1.4 respectively.
  - The wiki page was updated with the latest information for reading PLOT3D files.
- The Nek5000 reader had an issue with #std 8 data files (double size data). The data dimensions would be read wrong. This has been fixed.
- VisIt can now read .vtm VTK multiblock files. Exporting multi-block data as VTK XML format will now write out .vtm files instead of .visit for grouping the indidividual blocks.
- The Pixie reader now supports ghost zones (thanks to Jean Favre).
- VisIt can more reliably export data to Tecplot format in parallel.
- VisIt can export XYZ format data in parallel.
- VisIt's Tecplot reader can now export datasets that use other than single floating point precision.
- The Mili reader now returns the time information so that it can be displayed in the database legend, the time slider, and queries over time.
- A bug was corrected in the Silo reader that caused "_meshtv_searchpath" to be ignored. Support for reading "_visit_searchpath" as a synonym for "_meshtv_searchpath" was also added since that name is much more appropriate for VisIt. The utility add_visit_searchpath was added that adds a "_visit_searchpath" to the root directory of a Silo file. The usage for the utility is:

      add_visit_searchpath filename [searchpath]

  where filename is the name of the Silo file to add the search path to and searchpath is the search path to add. If no search path is specified it will add an empty search path, causing VisIt to only look for variables at the root level of the Silo file.

- The Mili library used by the Mili plugin was updated to Version 15.1

Changes to VisIt's plots in version 2.10

- A bug was fixed with the scatter plot, where VisIt would give an error if it generated any empty domains.

Changes to VisIt's operators in version 2.10

- The LCS operator has been overhauled. It now allows for calculation of both the eigen values and eigen vectors. When eigen vectors are calculated the results may be passed down to plots such as the Vector plot and operators such as the LimitCycle operator. The vectors passed down stream can be the calculated eigen vectors or a shear vector (i.e. a combination of the eigen vectors). Other additions include the ability to use an auxiliary grid when calculating the Cauchy-Green Tensor. Numerous bug fixes have been done to improve the results when spurious integral curves are encountered.
- The LimitCycle operator has been added. It is designed to find limit cycle flow fields. The operator works by using a line to define a series of evenly spaced seed points along the line that are then advected. The advection stops when the integral curve intersects the line (or a predetermined stopping criteria). A zero crossing is then searched for in adjacent pairs of integral curves. The zero crossing is present by the dot product of the vectors formed by the starting and intersecting points from each integral curve. The zero crossing is found via a bisection method that adds a new seed point between the original points. The number of iterations can be set as well as the tolerance for finding the zero crossing. As this operator is part of the PICS code other parameters are similar to other PICS operators. Currently only a line may be defined.
- Many new features have been added to the PICS operators as well as fixing many bugs with them. All the PICS operators now allow for advecting in directionless fields. This new feature allows one to use directionless fields such as those associated with eigen vectors. In addition, bug fixes for boundary checks and cell lookup have been done. Bug fixes for advecting in multiple domain data sets in parallel have also been done.
- A bug was fixed with several of the operators, where VisIt would give an error if the operator generated any empty domains. These include the CoordSwap, EllipsoidSlice, Extrude, Isovolume, SphereSlice and ThreeSlice operators.
- The SPH Resample operator has been added.

Other bugs fixed in version 2.10

- A bug was corrected that could cause VisIt to hang initializing network connections when connecting from a Windows system to a Linux system with ssh forwarding over a gateway.
- 2D Line annotation has been fixed so that adding arrowheads does not make the line disappear.
- A bug that caused a warning message to pop up when adding Image Annotation objects has been fixed.
- 2D axis titles have been fixed so that a color other than foreground color can be used.
- Libsim's internal buffer for retrieving the user's environment was fixed at 10Kb, which is not large enough to accommodate some users' environments. The environment retrieval code has been rewritten to handle arbitrary sizes.
- The splatting render mode in the Volume plot was corrected so it would no longer change graphics settings in a way that could corrupt the rendering of other plots such as Pseudocolor.
- Calling the Libsim function VisItExportDatabase() from a batch-only simulation would silently fail to export files for file format writers that provided database options (e.g. the VTK writer and Silo writers). This fix ensures that those file formats work for export from batch simulations.
- The VTK reader was serving up invalid time values for files that did not have time.
- A bug was fixed with the NamedSelection and SmoothPolyData filters, where VisIt would give an error if the filter generated any empty domains.
- Fixed a case where VisIt's Recenter expression could SEGV if it encountered some domains with zero points and/or zero cells.
- The internal launcher now adds unknown arguments before the "-s script_name" argument and not between the script name and the script arguments.
- The advanced multi-window image save capability was modified to initialize the background to white.
- Interactive connections to simulations are unable to save images via VisItSaveWindow() because the simulation was always passing a server output directory and interactive saves are currently done client-side. The code was modified so the simulation may opt to output to the current directory and that will save files client-side where VisIt was invoked.
- Deleting multiple plots using Libsim's VisItDeleteActivePlots() function would crash when used in batch mode.
- Silo export on a file that contained more than one mesh can produce output that contains the wrong mesh name.
- Makemili now works once again. Starting with VisIt 2.9, the VisIt launch script adds "-forceversion version_number" to the front of the command line options for all the tools that it runs. In the case of makemili, this resulted in it interpreting the version number as the name of the file to process. Now it will interpret the "-forceversion" option and properly gets the name of the file to process.

Configuration changes in version 2.10

- The LLNL RZ and CZ only host profile options were removed from visit-install since it is confusing to users and is only useful when installing VisIt on the LLNL RZ and CZ networks, which is only done by developers. The LLNL RZ only host profile option was removed from the Windows installer since that is also confusing to users and isn't useful to anyone.
- The "parallel pshort" launch profile was removed from the Zin host profile since the pshort queue was removed.

Build changes in version 2.10

- The SeedMe python client was updated to version 1.1.0.
- Experimental support for the Damaris I/O middleware layer (http://damaris.gforge.inria.fr/) was added to build_visit. Due to the use of XSD, Damaris support is GPL only. You can use the following build_visit flags to create a build that includes Damaris: --gpl --cmake --mpich --python --boost --vtk --qt --xsd --xercesc --damaris

Changes for VisIt developers in version 2.10

- Adding a 'd' character to the argument to the -debug command-line option (e.g. -debug 3d) will cause level 1 debug logs, and only level 1 debug logs, to be decorated with __FILE__ and __LINE__.

Click the following link to view the release notes for the previous version of VisIt: VisIt 2.9.2 Release Notes.