6.1. What Packages are Involved?

mirgecom relies on a number of other packages to do its job, which depend on each other as illustrated in this graph:

digraph deps {
subgraph cluster_0 {
label="emirge"
     mirgecom -> meshmode;
     grudge -> meshmode;
     mirgecom -> grudge;

     mirgecom -> loopy;
     grudge -> loopy;
     meshmode -> loopy;

     meshmode -> pyopencl;
     loopy -> pyopencl;

     meshmode -> modepy;
     meshmode -> arraycontext;

     arraycontext -> pyopencl;
     arraycontext -> loopy;
     arraycontext -> pytato;

     loopy -> pymbolic;

     pyopencl -> pocl;

     mirgecom -> pytato;
     pytato -> loopy;
     pytato -> pymbolic;
     graph[style=dotted];
     }
}

What do these packages do?

Package

Description

mirgecom (GitHub)

Where the main science code lives (flow, combustion, walls).

grudge (GitHub)

1/2/3D discontinuous Galerkin based on meshmode.

meshmode (GitHub)

(Unstructured, high-order) discontinuous piecewise polynomial discretizations.

arraycontext (GitHub)

Creation of and operations on (lazy/GPU/…) arrays, array containers.

loopy (GitHub)

A code generator for array-based code on CPUs and GPUs.

pyopencl (GitHub)

OpenCL integration for Python.

modepy (GitHub)

Modes and nodes for high-order discretizations.

pymbolic (GitHub)

Expression tree and symbolic manipulation library.

pytato (GitHub)

Lazily evaluated arrays in Python.

pocl (GitHub)

OpenCL runtime for CPUs and GPUs written in C.

emirge (GitHub)

Scripts to manage a mirgecom installation and its dependencies.

The source repository (and current branch) of most of these packages in use is determined by the file requirements.txt in mirgecom.