Delta Documentation

HomeCopyrightDashboardDocumentationDownload

Source code documentation

We provide an autogenerated source code documentation here. It is rebuilt every night. As Delta is written in a really minimalistic way, I do not provide more information than this source code docu and the text below.

Installation/usage

Delta relies on the autotools and makefiles. I only support Linux systems. To build it, change into the project directory.

If you have not downloaded a working tarball/distribution but took the sources directly from the repository, you will have to call

libtoolize; aclocal; autoconf; autoheader; cp src/config.h.in .; automake --add-missing

The actual installation is done by calling ./configure. Pass in –help to see a list of available options. Once configure has passed successfully, you can type in make and then make install (if you wish to install Delta on your system).

Components

Delta currently consistent of three parts/components. (1) There is a unit test suite. You find it as single executable in the tests subdirectory. (2) The Delta library which is available in both a release version and a debug version. The latter dumps quite a lot of text info to the terminal and it runs regular checks (assertions) on all input data.

To use Delta, you will have to add the Delta sources to your compiler path via

-I/mydeltadir/src

After that, you have to add Delta to your linker path as well and add the Delta lib:

-L/mydeltadir/dir-holding-la-files -lDelta

Alternatively, you might want to link against -lDelta_debug.

Getting started

To use Delta, you usually create one or multiple meshes. A mesh always is a subclass of delta/Mesh. See the autogenerated documentation for details. The two traditional ways to create an instance of Mesh is to use the premanufactured primitives (containing stuff alike a cube or a cylinder) or to load a mesh through one of the routines from the namespace io.

Once you have a mesh, you can either query how far away a point this mesh, or you can collide two meshes with each other. Before you do so, you have to decide which collision model you are interested in. There’s very simple checks which only compare bounding spheres which each other (those are the fastest approaches but obvious are not accurate unless you work with spheres only) or complex routines which compare points/spheres to triangles or triangles to triangles. You find these algorithms in the subdirectory contactdetection. Once you found the approach of your choice, the procedure is the same: (1) You ask you meshes to give you back the data representation you need. Depending on the algorithm of your choice you might want to know the bounding sphere or all triangles. (2) You pass the outcome to the contact detection routine. You receive a vector of contact points.

As we work with triangulated meshes, we always handle vectors of contact points. There can be many. There are some filter routines to, well, filter contact points and select those of interest. All of my contact routines work with a magic epsilon ratio: By default, I assume that all meshes are separated from each other. With epsilon, I wrap them up in an epsilon environment. If two epsilon environment of two objects overlap with each other, I consider the objects to be in contact. I create a contact point.

Literature/details

@article{doi:10.1002/cpe.4935,
author = {Krestenitis, Konstantinos and Weinzierl, Tobias},
title = {A multi-core ready discrete element method with triangles using dynamically adaptive multiscale grids},
journal = {Concurrency and Computation: Practice and Experience},
pages = {e4935},
keywords = {computational geometry, discrete element method, dynamically adaptive cartesian grids, shared memory parallelisation, vectorisation},
doi = {10.1002/cpe.4935},
url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/cpe.4935},
eprint = {https://onlinelibrary.wiley.com/doi/pdf/10.1002/cpe.4935},
note = {e4935 cpe.4935},
}
@InProceedings{10.1007/978-3-319-78024-5_12,
author="Krestenitis, Konstantinos and Weinzierl, Tobias and Koziara, Tomasz",
editor="Wyrzykowski, Roman and Dongarra, Jack and Deelman, Ewa
and Karczewski, Konrad",
title="Fast DEM Collision Checks on Multicore Nodes",
booktitle="Parallel Processing and Applied Mathematics",
series="Lecture Notes in Computer Science",
volume = "10777",
year="2018",
publisher="Springer International Publishing",
address="Cham",
pages="123--132"
}