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];
}
}](../_images/graphviz-b7099f3e5ce0ba7982d9460ac98d97cccf6f5ba4.png)
What do these packages do?
Package |
Description |
|---|---|
Where the main science code lives (flow, combustion, walls). |
|
1/2/3D discontinuous Galerkin based on meshmode. |
|
(Unstructured, high-order) discontinuous piecewise polynomial discretizations. |
|
Creation of and operations on (lazy/GPU/…) arrays, array containers. |
|
A code generator for array-based code on CPUs and GPUs. |
|
OpenCL integration for Python. |
|
Modes and nodes for high-order discretizations. |
|
Expression tree and symbolic manipulation library. |
|
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.