Currently job artifacts in CI/CD pipelines on LRZ GitLab never expire. Starting from Wed 26.1.2022 the default expiration time will be 30 days (GitLab default). Currently existing artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit 966dbffc authored by Sven K's avatar Sven K
Browse files

Merge branch 'master' of gitlab.lrz.de:exahype/ExaHyPE-Documentation

parents 0ea67169 915fed09
......@@ -37,3 +37,4 @@
# anything
.directory
*.swp
......@@ -28,7 +28,7 @@ as well as the objectives at the EU's
\exahype\ is completely open source.
% \exahype\ is a collection of open source tools and mainly written in C, C++,
% FORTARN, Java, Matlab and Python.
% FORTARN, Matlab and Python.
\section*{Who should read this document}
......
......@@ -31,23 +31,12 @@ If you want to run \exahype\ on a distributed memory cluster, you have to have
MPI installed. \exahype\ uses only very basic MPI routines (as provided with
MPI 1.3, e.g.).
\item
ExaHyPE's development environment relies on Java (Java Runtime Environment JRE).
We provide some standalone JAR files typically built against
Java 1.8 or newer. You can however always build your own version of all
development tools (recommended) as long as you have a Java compiler (Java
Development Kit JDK).
%Again, \exahype\ uses only very basic Java, so most versions should do.
\item
ExaHyPE's default build environment uses GNU Make.
\item
If you want to use ExaHyPE's optimised compute kernels, you have to have Python 3 available
on your development system. Furthermore, you have to install
Intel's \texttt{libxsmm}\footnote{Libxsmm is open source: \url{https://github.com/hfp/libxsmm}}
and Python's module \texttt{Jinja2}\footnote{Jinja2 is open source: \url{http://jinja.pocoo.org/}}.
A local installation script is made available.
ExaHyPE's development environment relies on Python 3. All additional Python 3
dependencies can be downloaded using the git submodules and the provided script.
\end{itemize}
......@@ -64,236 +53,78 @@ libraries are required.
\section{Obtaining ExaHyPE}
\exahype\ is available as source code only. We discuss several variants how to
obtain the code below\footnote{Please note that the \exahype\ consortium uses
internally a private repository, i.e.~all remarks here refer to the public
\exahype\ release.}.
\exahype\ is built on top of the AMR framework Peano.
obtain the code below.
\exahype\ is built on top of the AMR framework \peano\.
If you download a complete snapshot of \exahype\ (the \texttt{tar.gz} files), a
snapshot of Peano is included.
If you clone the repository (Variant 2), you have to add Peano manually.
snapshot of \peano\ is included.
If you clone the repository (Variant 2), you have to add \peano\ manually.
\subsection*{Variant 1: Download an \exahype\ release}
Open a browser and go to \url{http://csdemo.ddns.net/hpcsoftware/exahype}.
Switch to the \texttt{Download} tab, where you should find a section \texttt{Download of Snapshots}.
Find the release of your choice and download it.
% A minimalistic \exahype\ version requires \texttt{ExaHyPE.tar.gz} and
% %\linebreak
% \texttt{ExaHyPE.jar}.
% Unzip them.
Open a browser and go to \url{http://www.peano-framework.org}.
Here, click on \texttt{Request Repository Access} and fill
out the application form. Click on \texttt{Register}. The application will
trigger a creation of a LRZ account linked to the \peano\ and \exahype\ projects.
Eventually, you will get reporter access to the software repositories via
\url{https://gitlab.lrz.de}. You will get notified by mail as soon
as this is the case. The process can take a few days.
\subsection*{Variant 2: Clone the \exahype\ release repository}
Alternatively, you might also want to clone the \exahype\ git repository
which has the advantage that you can quickly get new releases.
We host it on a gitlab at Leibniz Supercomputing Centre and grant free access to all sources and documentation.
However, we ask users who want to actively access the repository, the maillist, the bug lists, and so forth to register.
Once you have access to the repository you can download the repository using
something along the lines of
The \exahype\ repository can then be cloned via:
\begin{code}
> git clone https://gitlab.lrz.de/exahype/ExaHyPE-Engine.git
\end{code}
or
\begin{code}
> git clone git@gitlab.lrz.de:exahype/ExaHyPE-Engine.git
\end{code}
There is consequently no need to unzip anything manually if you follow this variant.
While we do provide snapshots of Peano, \exahype's underlying meshing component,
with \exahype\ snapshots (the tar.gz files we offer), Peano itself is not
mirrored in the repository.
You therefore have to download Peano separately:
Visit \href{http://www.peano-framework.org}{peano-framework.org} and follow the
descriptions there.
Afterwards, add two symbolic links from \exahype's \texttt{Peano} directory to
your Peano installation\footnote{If you grab the Peano repository, the
sources are held in a subdirectory \texttt{src} as the checkout also comes
along with many other things such as development tools or documentation.
If you download the tarball from the webpage, it usually holds only Peano's
sources. In this case, you might have to omit the \texttt{src} subdirectory in
the symbolic links.}:
\begin{code}
> cd Peano
> ls
mpibalancing multiscalelinkedcell sharedmemoryoracles
> ln -s yourPeanodirectory/src/peano
> ln -s yourPeanodirectory/src/tarch
> ls
mpibalancing multiscalelinkedcell peano sharedmemoryoracles tarch
> git@gitlab.lrz.de:exahype/ExaHyPE-Engine.git
\end{code}
\noindent
We do trigger that Peano is updated regularly and \exahype's build environment
does validate your Peano version against its on requirements.
Yet, as Peano is an independent package with a different release
model/schedule, we cannot enure that a tarball of Peano obtained from
SourceForge or \href{http://www.peano-framework.org}{peano-framework.org} is fully compatible with the
current ExaHyPE release.
If you encounter problems, we therefore recommend that you use the snapshot of
Peano provided in \texttt{ExaHyPE.tar.gz}.
It is guaranteed to be compatible with the ExaHyPE.
% \subsection*{Variant 3: Download \exahype\ as archives from the
% webpages}
%
% Open a browser and go to \url{https://github.com/exahype}.
% Switch to the \texttt{Code} tab and press on the \texttt{Clone or download} drop
% down button.
% Select the zip file and unzip the result.
%
% Alternatively, you should see on the webpage directly a file
% \texttt{exahype.tar.gz}.
% You need this one as well as either \texttt{ExaHyPE.jar} or
% \texttt{ExaHyPE-toolkit.tar.gz}.
% We do not provide support for the jar file, i.e.~it might not be compatible with
% your Java version, so we recommend to get the zipped archive.
% Please unzip the files.
\section*{Obtaining the dependencies}
ExaHyPE's development environment relies on a few Python 3 dependencies. They are
all registered as git submodule to the project. \peano\ is also registered as a
git submodule
%\pagebreak
\section*{Finish the setup}
Once you have unzipped all the archives into a directory of your choice, you
should see something like
To obtain them, run the update script:
\begin{code}
> cd mywellsuiteddirectory
> ls
ExaHyPE ExaHyPE.jar ExaHyPE.tar.gz ExaHyPE-toolkit.tar.gz LICENSE.txt Peano
> ./Submodules/updateSubmodules.sh
\end{code}
\noindent
You might choose to maintain a different directory structure or rely on a
previous \peano\ or \exahype\ installation. In this case, you have to adopt pathes
in all of your \exahype\ scripts from hereon.
Please also check that your \texttt{Peano} subdirectory holds the Peano AMR
directories:
Different options to change the default download procedure are listed if
you call the script with option ``\texttt{-h}'':
\begin{code}
> cd mywellsuiteddirectory
> ls Peano
mpibalancing multiscalelinkedcell peano sharedmemoryoracles tarch
> ./Submodules/updateSubmodules.sh -h
-h prints this message
-s set submodules url to ssh
-t use ssh tunnel (port: 12345) and git protocol (works on SuperMUC)
-w set submodules url to https
-p only update the Peano submodule
-o only update submodules other than Peano
\end{code}
\noindent
There might be more subdirectories. However, these five are absolutely
mandatory.
We ensured that ExaHyPE can be setup on systems where you are
required to create an SSH tunnel to \texttt{github.com} or
\texttt{gitlab.lrz.de} in order to clone repositories.
If the default port 12345 does not work for you, just change it in the script.
In case you use \peano\ in several projects, you might want to skip the
download of the \peano\ submodule and instead add two symbolic links
to \peano's \texttt{peano} and \texttt{tarch} directory in the \texttt{Peano}
subdirectory of \exahype.
You further need to create symbolic links to \peano's toolboxes
\texttt{mpibalancing}, \texttt{multiscalelinkedcell},
\texttt{sharedmemoryoracles}
\section{Dry run of development tools}
{\bf Remark:} The jar file deployed with \exahype\ (in its root folder) might
not work on your system. If this is the case, you have to rebuild the jar first. See the next
Section \ref{section:download:retranslate-jar} for instructions. If you rebuild
the jar file, it typically is located at \texttt{xxxx}
\vspace{0.8cm}
\noindent
To check whether you are ready to program new applications with \exahype, type
in
\begin{code}
> java -jar ExaHyPE.jar
> ./Toolkit/toolkit.sh -h
\end{code}
\noindent
This should give you the following welcome message:
% on some platforms, the code environment does not accept
% this ASCII art due to the ` accent grave sign. Use
% verbatim instead.
%\begin{verbatim}
\begin{code}
================================
___ _ _ ___ ___
/ __|_ ____ _| || |_ _/ _ \ __|
| _|\ \ / _` | __ | || | _/ _|
\___/_\_\__,_|_||_|\_, |_| \___|
|__/
================================
www.exahype.eu
================================
The project has received funding from the European Unions
Horizon 2020 research and innovation programme under grant
agreement No 671698 (ExaHyPE). It is based upon the PDE
framework Peano (www.peano-framework.org).
ERROR: Please provide input file as argument
\end{code}
%\end{verbatim}
\noindent
If you don't see this message, there's a problem with the ExaHyPE development
toolkit.
In this case, retranslate it.
\section{Retranslating the \exahype\ development toolkit}
\label{section:download:retranslate-jar}
\exahype\ relies on a Java toolkit to free the developers from writing most of
the glue code.
The consortium can not provide jar files for various Java versions as the one
you might find on your system.
Instead of messing around with Java compatibilities, we
recommend to build your own toolkit for your target system.
For this, unzip the toolkit sources (if you do not work with a cloned git
repository)
\begin{code}
> mkdir MyToolkit
> mv ExaHyPE-toolkit.tar.gz MyToolkit
> cd MyToolkit
> tar -xzvf ExaHyPE-toolkit.tar.gz
\end{code}
and invoke
\begin{code}
> ./build.sh
\end{code}
\noindent
You obtain a new jar file \texttt{ExaHyPE.jar} in the local directory that you
should use from hereon.
\exahype's toolkit uses the compiler compiler frontend SableCC
(\href{http://www.sablecc.org}{sablecc.org}). If you also want to regenerate the front-end, you have
to provide SableCC to the makefile. Usually, this should not be necessary.
%\section{Optional installation variants}d
\section{Using a newer/other \peano\ version}
\exahype\ is based upon the PDE solver framework \peano\
(\href{http://www.peano-framework.org}{peano-framework.org}).
With the present scripts, you use the newest stable \peano\ release.
As \peano\ is still improved, it might make sense to download a new archive from
time to time.
\exahype\ uses a couple of \peano\ toolboxes.
These toolboxes are part of \peano's framework, but they are not by default
included in the release.
While normal \peano\ users have to download them manually, we provide a snapshot
with \exahype.
These snapshots are help in \exahype's \texttt{Peano} directory.
If you want to try newer versions, download the corresponding toolboxes from
\peano's webpage and extract them manually into \exahype's \texttt{Peano}
subdirectory.
If you use \peano\ in several projects, it might make sense to skip the download
of the archive into \exahype's \texttt{Peano} directory and instead add two
symbolic links with \texttt{ln -s} in the \texttt{Peano} directory to \peano's
\texttt{peano} and \texttt{tarch} directory.
This should give you a description of the various toolkit options. If you encounter
an error, please make sure the submodules are downloaded.
......@@ -6,23 +6,17 @@ realised with \exahype.
This solver relies on a Rusanov flux and can, with only a few lines, be
changed into an ADER-DG scheme later.
Indeed, it can be used by an ADER-DG scheme as a limiter.
\subsection{Download}
The demonstrator is available from \exahype's release web pages as tar archive.
This archive has to be unzipped.
If you work with a clone of the repository, you find it in the
You find the \texttt{EulerFV} in the
\texttt{Demonstrators} subdirectory.
\subsection{Preparation}
The archive contains solely files modified to realise the solver.
The demonstrator folder contains solely files modified to realise the solver.
All glue code are to be generated with the toolkit.
Before we do so, we open the unzipped file \texttt{EulerFV.exahype}.
Before we do so, we open the file \texttt{EulerFV.exahype}.
This simple text file is the centerpiece of our solver.
It specifies the solver properties, the numerical schemes, and it also holds all
the mandatory pathes:
the mandatory paths:
\begin{code}
exahype-project EulerFV
......@@ -60,7 +54,7 @@ end exahype-project
\noindent
To prepare this example for the simulation, we have to generate all glue code
\begin{code}
> java -jar Toolkit/dist/ExaHyPE.jar --not-interactive \
> ./Toolkit/toolkit.sh \
Demonstrators/EulerFV/EulerFV.exahype
\end{code}
......@@ -107,7 +101,7 @@ again:
\end{code}
\noindent
A successful run yields a sequence of \texttt{vtk} files that you can open with
A successful run yields a \texttt{*.pvd} file that you can open with
Paraview\footnote{\url{www.paraview.org}} or
VisIt\footnote{\url{wci.llnl.gov/simulation/computer-codes/visit}},
e.g.
......
......@@ -114,11 +114,10 @@ Doxygen but may be quite useless without Peano documentation.
\item Your application. You might want to document this if it has grown big or
if you want to understand the generated C++ code class hierarchy.
\item The ExaHyPE toolbox, explained in detail in chapters \ref{chapter:workflow}
and appendix \ref{chapter:a-toolbox}. The toolbox is written in Java. It's code
is also documented and can render to standalone webpages using the \texttt{javadoc}
program. However, this documentation will not help you when programming ExaHyPE
in C++. Thus we don't go into detail about this part of ExaHyPE.
\item The ExaHyPE toolkit, explained in detail in chapters \ref{chapter:workflow}.
The toolkit is written in Python 3. It's code is also documented. However, this
documentation will not help you when programming ExaHyPE in C++. Thus we don't go
into detail about this part of ExaHyPE.
\item Further ExaHyPE code generators such as the Python3 code which generates the
optimized kernels, cf. section \ref{sec:optimized-kernels}. This is one of the
......
......@@ -32,12 +32,12 @@ An \exahype\ specification is a text file where you
specify exactly what you want to solve in which way.
This file\footnote{Some examples can be found in the Toolkit directory or
on the \exahype\ webpage. They have the extension \texttt{.exahype}.}
is handed over to our \exahype\ toolkit, a small Java application generating all
is handed over to our \exahype\ toolkit, a small python 3 application generating all
required code.
This code (also linking to all other required resources such as parameter
sets or input files) then is handed over to a compiler.
You end up with an executable that may run without the
Java toolkit or any additional sources from \exahype.
Depending on the option used, see \ref{chapter:a-toolkit}, you end up with an executable that
may run without the python toolkit or any additional sources from \exahype.
It however rereads the specification file again for input files or some
parameters, e.g.
We could have worked with two different files, a specification file used to
......@@ -94,7 +94,7 @@ setups.
We hand the file over to the toolkit
\begin{code}
java -jar ExaHyPE.jar Demonstrators/TrivialProject.exahype
./Toolkit/toolkit.sh Demonstrators/TrivialProject.exahype
\end{code}
\noindent
......@@ -233,10 +233,8 @@ For \texttt{type}, the supported values are given in table \ref{table:solver-typ
\hline
Finite Volumes & \\
\hline
\texttt{user} & Instructs the toolkit that you want to implement all
the Finite Volume steps (notably the Riemann solver) yourself.
\\
\texttt{musclhancock} & Use a MUSCL-Hancock Riemann solver. \\
\texttt{robustmusclhancock} & Use a slightly more robust version of the MUSCL-Hancock Riemann solver. \\
\texttt{godunov} & Use a standard Godunov Riemann solver. \\
\hline
\end{tabular}
......@@ -256,7 +254,7 @@ For \texttt{terms}, the supported values are given in table \ref{table:solver-pd
\begin{center}
\begin{tabular}{lp{10cm}}
\hline
\texttt{materialmatrix} & If this PDE term is present, \exahype\ allows the
\texttt{materialparameters} & If this PDE term is present, \exahype\ allows the
user to specify a spd matrix $P$. If it is not present, \exahype\ uses $P=id$.
\\
\texttt{fluxes} & Informs \exahype\ that you want to use a standard,
......
......@@ -91,8 +91,7 @@ setup is
\begin{code}
exahype-project Euler2d
peano-path const = ./Peano/peano
tarch-path const = ./Peano/tarch
peano-kernel-path const = ./Peano/
exahype-path const = ./ExaHyPE
output-directory const = ./ApplicationExamples/EulerFlow
......@@ -113,11 +112,11 @@ exahype-project Euler2d
optimisation const = generic
language const = C
plot vtk::binary MyPlotter
variables const = 5
time = 0.0
repeat = 0.05
output = ./solution
plot vtu::Cartesian::cells::ascii EulerWriter
variables const = 5
time = 0.0
repeat = 0.5E-1
output = ./variables
end plot
end solver
end exahype-project
......@@ -149,7 +148,7 @@ allows you to alter the plotter's behaviour.
Once we are satisfied with the parameters in our \exahype\ specification file, we hand it over to the \exahype\ toolkit:
\begin{code}
java -jar <mypath>/ExaHyPE.jar Euler2d.exahype
./Toolkit/toolkit.sh Euler2d.exahype
\end{code}
......@@ -541,19 +540,7 @@ The normal vectors that are involved in \exahype 's ADER-DG kernels always coinc
Cartesian unit vectors. Thus, the \texttt{eigenvalues} function is only supplied with the index of the single component
that is non-zero within these normal vectors.
In function \texttt{eigenvalues}, the aforementioned index corresponds to the parameter
\texttt{normalNonZeroIndex}. A rebuild and rerun should yield results similar to
figure \ref{fig:10_tevolution}.
\begin{figure}[h]
\begin{center}
\includegraphics[width=0.45\textwidth]{screenshots/10_early-stage.png}
\includegraphics[width=0.45\textwidth]{screenshots/10_later-stage.png}
\end{center}
\caption[Paraview screenshots of the EulerFlow time evolution.]{Time evolution of $Q_0$, now with the Hydrodynamics PDEs implemented.
The left figure shows an early time while the right figure shows a later time.}
\label{fig:10_tevolution}
\end{figure}
\texttt{normalNonZeroIndex}.
\section{Supplementing boundary conditions}
......@@ -582,10 +569,26 @@ void Euler::MyEulerSolver::boundaryValues(
const double* const fluxIn,const double* const stateIn,
double* fluxOut, double* stateOut)
{
...
...
}
\end{code}
For now we simply set stateOut = stateIn and fluxOut = fluxIn.
A rebuild and rerun should yield results similar to
figure \ref{fig:10_tevolution}.
\begin{figure}[h]
\begin{center}
\includegraphics[width=0.45\textwidth]{screenshots/10_early-stage.png}
\includegraphics[width=0.45\textwidth]{screenshots/10_later-stage.png}
\end{center}
\caption[Paraview screenshots of the EulerFlow time evolution.]{Time evolution of $Q_0$, now with the Hydrodynamics PDEs implemented.
The left figure shows an early time while the right figure shows a later time.}
\label{fig:10_tevolution}
\end{figure}
\begin{figure}[htb]
\begin{center}
\includegraphics[width=0.5\textwidth]{sketches/cube-names.png}
......
......@@ -108,8 +108,9 @@ void MyProject::MySolver_ADERDG::mapDiscreteMaximumPrincipleObservables(
[..]
\end{code}
Often it is further important to test the numerical solution for
physical admissibility, e.g., if a density is positive.
Furthermore, it is important to test the numerical solution for
physical admissibility, e.g., if a density is positive or if it is an actual finite number,
e.g. not "NaN" or $\pm$ "Inf".
The troubled cell indicator of {ExaHyPE's} ADER-DG scheme with Finite Volumes
limiting thus does not only rely on the DMP but
makes use of an physical admissbility detection (PAD).
......@@ -144,6 +145,14 @@ bool MyProject::MySolver_ADERDG::isPhysicallyAdmissible(
const double t, const double dt) const {
// This is an example for the compressible Euler equations.
// Modify it according to your needs.
if( !std::isfinite(observablesMin[0] ) // always check for NaNs!
return false;
if( !std::isfinite(observablesMin[4] )
return false;
if( !std::isfinite(observablesMax[0] )
return false;
if( !std::isfinite(observablesMax[4] )
return false;
if (observablesMin[0] <= 0.0) return false; // (min) density should not be
// negative
if (observablesMin[4] < 0.0) return false; return true;
......
......@@ -352,11 +352,57 @@ users to engage parts of the generic kernels while implementing other parts on
their own. For instance, in both the ADERDG and Finite Volume schemes, users can
overwrite the Riemann Solver with their own implementation.
Start with a spec file that asks for a standard Riemann solver, such as \texttt{type=godunov} and then
overwrite the Riemann solvers implementation in the abstract solver interface in the user solver.
In the ADERDG scheme, the Riemann Solver is called once per patch/cell. In the
Finite Volume schemes, the Riemann Solver is called on each point.
\todo[inline]{Supply further information how to make use of this. Provide
an example, for instance an Osher-type Riemann Solver.}
As an example we provide here an implementation of the Rusanov flux (as it is currently
implemented in \exahype) for a simple
system without non-conservative products or source terms.
\begin{code}
double riemannSolver(double* fL, double *fR,
const double* qL, const double* qR,
int direction) {
constexpr int numberOfVariables = SolverType::NumberOfVariables;
constexpr int numberOfParameters = SolverType::NumberOfParameters;
constexpr int numberOfData = numberOfVariables + numberOfParameters;
double sL[numberOfVariables];
double sR[numberOfVariables];
solver.eigenvalues(qL, normalNonZero, sL);
solver.eigenvalues(qR, normalNonZero, sR);
double s_max = -1.0;
for (int i = 0; i < numberOfVariables; i++) {
const double abs_sL_i = std::abs(sL[i]);
s_max = std::max( abs_sL_i, s_max );
}
for (int i = 0; i < numberOfVariables; i++) {
const double abs_sR_i = std::abs(sR[i]);
s_max = std::max( abs_sR_i, s_max );
}
double FL2[DIMENSIONS][numberOfVariables] = {0.0};
double FR2[DIMENSIONS][numberOfVariables] = {0.0};
double* FL[DIMENSIONS]={FL2[0], FL2[1]};
double* FR[DIMENSIONS]={FR2[0], FR2[1]};
solver.flux(qL, FL);
solver.flux(qR, FR);
for (int i = 0; i < numberOfVariables; i++) {
fL[i] = 0.5 * s_max * (qL[i] - qR[i])
+ 0.5 * (FL2[normalNonZero][i] + FR2[normalNonZero][i]);
fR[i] = fL[i];
}
return s_max;
}
\end{code}
\todo[inline]{Provide
a better example, for instance an Osher-type Riemann Solver.}
......
......@@ -208,7 +208,7 @@ the flag \linebreak
\end{remark}
\section{Optimised Kernels}
\section{Optimised Kernels}\label{sec:optimized-kernels}
\exahype\ offers optimised compute kernels. Given a specification file, the toolkit
triggers the code generator to output optimised compute kernels for this specific setup.
......
......@@ -20,7 +20,7 @@ in the following:
domain up to a specification which kind of solvers will exist and which
numerical schemes they realise.
\item This specification file is handed over to the \exahype\ toolkit which is
a Java tool. It internally relies on Python scripts and invokes the libxsmm
a Python tool. It internally relies on Python scripts and invokes the libxsmm
generator driver as well. A local build of the libxsmm's code generation driver
is therefore a prerequisite for using optimised kernels.
\item The toolkit yields a couple of files (Makefile, glue
......@@ -179,7 +179,7 @@ of generic simulations.
\subsection{Templated specification files}
As the ExaHyPE specification files are described by an unique grammar which
can in principle only be \emph{exactly} parsed by the SableCC Java tookit, it
can in principle only be \emph{exactly} parsed by the Python tookit, it
is useful to understand specification files as common text files when it comes
to batch processing. Typical attemps are therefore replacement of striking
patterns such as \texttt{@VARIABLENAME@} in a key-value manner. Such a mechanism
......
\chapter{The \exahype\ toolbox}\label{chapter:a-toolbox}
\chapter{The \exahype\ toolkit}\label{chapter:a-toolkit}
\noindent
The \exahype\ toolbox is a small standalone Java program (a single
executable JAR file). We refer to it as \emph{toolbox} or \emph{toolkit}
or sometimes just \emph{code generator}. The toolkit acts as sole interface for
users, i.e.~non-developers. We decided to realise it in Java for several
reasons:
The \exahype\ toolkit is a small standalone Python program. The toolkit acts as
sole interface for users, i.e.~non-developers. We decided to realise it in Python
for several reasons: