https://github.com/CExA-project/ddc
DDC is a discrete domain computation library.
https://github.com/CExA-project/ddc
cpp ddc discretization domain-decomposition hpc kokkos modern-cpp
Last synced: 7 months ago
JSON representation
DDC is a discrete domain computation library.
- Host: GitHub
- URL: https://github.com/CExA-project/ddc
- Owner: CExA-project
- License: other
- Created: 2021-11-27T11:50:14.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-10-29T13:57:38.000Z (11 months ago)
- Last Synced: 2024-10-29T15:55:19.333Z (11 months ago)
- Topics: cpp, ddc, discretization, domain-decomposition, hpc, kokkos, modern-cpp
- Language: C++
- Homepage: https://ddc.mdls.fr
- Size: 19.6 MB
- Stars: 33
- Watchers: 2
- Forks: 4
- Open Issues: 57
-
Metadata Files:
- Readme: README.md
- License: LICENSES/CECILL-C.txt
- Authors: AUTHORS
Awesome Lists containing this project
README
# The discrete domain computation library (DDC)
[](https://opensource.org/licenses/MIT)
[](https://github.com/CExA-project/ddc/actions/workflows/early_integration.yml)
[](https://github.com/CExA-project/ddc/actions/workflows/tests-ubuntu.yml)
[](https://github.com/CExA-project/ddc/actions/workflows/tests-macos.yml)
[](https://github.com/CExA-project/ddc/actions/workflows/pages.yml)See
[DDC](https://ddc.mdls.fr/), is a C++-17 library that aims to offer to the C++/MPI world an equivalent to the [`xarray.DataArray`](https://xarray.pydata.org/en/stable/generated/xarray.DataArray.html)/[`dask.Array`](https://docs.dask.org/en/stable/array.html) python environment.
Where these two libraries are based on [numpy](https://numpy.org/), DDC relies on [Kokkos](https://github.com/kokkos/kokkos) and [mdspan](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0009r10.html) 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...](https://ddc.mdls.fr/)
If you like the project, please leave us a github star.
If you want to know more, join un on [Slack](https://join.slack.com/t/ddc-lib/shared_invite/zt-14b6rjcrn-AwSfM6_arEamAKk_VgQPhg)
## Prerequisites
To use DDC core, one needs the following dependencies:
* a C++17-compliant compiler
* CMake 3.22...<4
* Kokkos 4.4...<5
* (optional, micro benchmarking) Benchmark 1.8...<2
* (optional, documentation) Doxygen 1.8.13...<2
* (optional, unit-testing) GoogleTest 1.14...<2To use DDC components, one needs the following dependencies:
* (optional, fft interface) DDC::fft
* Kokkos-fft 0.2.1...<1
* (optional, IO interface) DDC::pdi
* PDI 1.6...<2
* (optional, spline interpolation) DDC::splines
* Ginkgo 1.8...<2
* Kokkos Kernels 4.5.1...<5## Getting the code and basic configuration
```bash
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](https://clang.llvm.org/docs/ClangFormat.html)) and cmake ([gersemi](https://github.com/BlankSpruce/gersemi)) files. The formatting must be applied for a PR to be accepted.
To format a cmake file, please apply the command
```bash
gersemi -i the-cmake-file
```One can find the formatting style in the file `.gersemirc`.
To format a C++ file, please apply the command
```bash
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.## Known issues
* Kokkos 4.5.0 embeds a version of mdspan that is not compatible with DDC, see . This issue has been fixed in Kokkos 4.5.1.