Lecture 11 - More Distributed Data Structures


Agenda

Announcements

Distributed Data Structures

We'll continue our discussion of distributed data structures with a detailed look at one particular implementation of a distributed mesh data structure.

We looked at the simple two-dimensional mesh examples at the end of the last class. Here are some examples of three-dimensional meshes:

Each of these is stored in memory using a hierarchical linked structure. These structures are implemented in a software library called the SCOREC Mesh Database (MDB).

The most recent versions of MDB are written mostly in C++, but we will look at it from a C interface only.

A version of this software is installed on the bullpen cluster in /dists/bullpen/terescoj/develop/model/scorecMesh/4.5. The public interface is given by the file MSops.h in the include subdirectory. The source code is in scorecMesh and its subdirectories.

The MDB interacts with a geometric modeler that is in /dists/bullpen/terescoj/develop/model/model/1.5. The geometric model defines the geometry of the entire domain represented by the mesh. It is used to allow mesh entities to determine if they are on domain boundaries, where boundary conditions may need to be applied when a solution is computed on the mesh. It is also useful if/when the mesh is modified to make sure the new mesh is consistent with the actual domain geometry. The association of a mesh entity with a geometric model entity is called its geometric model classification.

Both the mesh and model libraries make use of a utility library that is in /dists/bullpen/terescoj/develop/util/util/1.0.

The full mesh entity hierarchy is represented. All vertices, edges, faces, and regions are stored in lists. Each entity also maintains lists of its bounding sub- or super-entities.

You are unlikely to use any of the mesh operators directly in your progrtams, but it is worth looking at them to get an idea of what is possible.

Here are what some of the operators do (found in MSops.h):

Mesh files can also be loaded, stored. They are in "sms" file format.

We could write programs to operate entirely on these meshes (and many have been written) but it is not yet parallel.

A second library, the Parallel Mesh Database (PMDB) is built on top of MDB and provides for distributed meshes.

PMDB is in /dists/bullpen/terescoj/parallel/pmdb/5.5 on bullpen. Its documentation is online

We would like our distributed meshes to provide all the functionality and flexibility that is provided by the regular MDB.

See description and figures in the Applied Numerical Mathematics reprint.

Each process gets a complete MDB mesh representing its subset of the overall mesh. The normal MDB operations are used to query, traverse, and update these. PMDB manages the interprocess boundary structures: interprocess links, local lists of entities on partition boundaries.

Interprocess links:

PMDB operators allow the interprocess links to be queried and updated.

Boundary entity lists:

Migration:

Migration is also provided that allows any top level entity to be sent from any process to any other process:

PMDB takes care of all of the message passing to migrate the mesh entities as appropriate and to update all of the partition boundary structures.

Somehow these distributed meshes have to be distributed. A variety of algorithms can be used for this and several of these algorithms will be topics for our discussions next week.

Adaptive mesh refinement is provided by the (very scary) refdref library.

Rather than writing our own programs that use these tools, we will look at some existing programs. The first is called PMDBtool, the second is a discontinuous Galerkin solver called LocoParSolver.

The PMDBtool documentation is online.