Skip to content

CExA-project/ddc

Repository files navigation

The discrete domain computation library (DDC)

License: MIT test

See https://ddc.mdls.fr/

DDC, is a C++-17 library that aims to offer to the C++/MPI world an equivalent to the xarray.DataArray/dask.Array python environment. Where these two libraries are based on numpy, DDC relies on Kokkos and mdspan to offer CPU/GPU performance-portable multi-dimensional arrays and iterators.

DDC aims to offer abstractions to represent:

  • tagged continuous dimensions,
  • discretizations of these (multiple kinds of meshes, function spaces, Fourier, etc.),
  • domains in these discretized dimensions,
  • associating data to the elements of these discrete domains,
  • efficient distribution and iteration over this data.

All these abstractions are handled at compilation using C++ template meta-programming to ensure zero overhead at execution and enable developers to change their design choices (e.g. from a regular mesh to a non-uniform one) with performance portability.

Find out more...

If you like the project, please leave us a github star.

If you want to know more, join un on Slack

Getting the code and basic configuration

git clone --recurse-submodules -j4 https://github.com/CExA-project/ddc.git
cd ddc
cmake -B build -D DDC_BUILD_KERNELS_FFT=OFF -D DDC_BUILD_KERNELS_SPLINES=OFF -D DDC_BUILD_PDI_WRAPPER=OFF
cmake --build build

Contributing

Formatting

The project makes use of formatting tools for the C++ (clang-format) and cmake (gersemi) files. The formatting must be applied for a PR to be accepted.

To format a cmake file, please apply the command

gersemi -i the-cmake-file

One can find the formatting style in the file .gersemirc.

To format a C++ file, please apply the command

clang-format -i the-cpp-file

One can find the formatting style in the file .clang-format.

Warning

The formatting might not give the same result with different versions of a tool.