Welcome to VisIt's release notes page. This page describes the important enhancements and bug-fixes that were added to this release.
Sections
General features added in version 2.10
Advanced features added in version 2.10
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);
Structure of Arrays Example:
In addition, this new functionality can be used to create the desired interleaved view of coordinates that are stored in separate arrays.
#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);
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.
Example:
VisItSetOptions("-plotplugins Mesh,Pseudocolor -operatorplugins Isosurface,Slice,Threshold");
Changes in GUI behavior for version 2.10
File format reader changes in version 2.10
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.
Changes to VisIt's plots in version 2.10
Changes to VisIt's operators in version 2.10
Other bugs fixed in version 2.10
Configuration changes in version 2.10
Build changes in version 2.10
Changes for VisIt developers in version 2.10
Click the following link to view the release notes for the previous version of VisIt: VisIt 2.9.2 Release Notes.