{"id":18925628,"url":"https://github.com/jm1/hbrs-mpl","last_synced_at":"2026-03-14T15:30:18.277Z","repository":{"id":33786912,"uuid":"156375722","full_name":"JM1/hbrs-mpl","owner":"JM1","description":"Generic C++17 library for distributed scientific computing (HPC)","archived":false,"fork":false,"pushed_at":"2021-11-25T14:10:54.000Z","size":1649,"stargazers_count":0,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-31T17:48:17.306Z","etag":null,"topics":["cpp","decomposition","dmd","generic","hbrs-mpl","linear-algebra","pca","svd"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JM1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING-CMAKE-SCRIPTS","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-06T11:49:10.000Z","updated_at":"2021-09-20T09:13:24.000Z","dependencies_parsed_at":"2022-08-07T23:01:08.562Z","dependency_job_id":null,"html_url":"https://github.com/JM1/hbrs-mpl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JM1%2Fhbrs-mpl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JM1%2Fhbrs-mpl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JM1%2Fhbrs-mpl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JM1%2Fhbrs-mpl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JM1","download_url":"https://codeload.github.com/JM1/hbrs-mpl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239921844,"owners_count":19718844,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","decomposition","dmd","generic","hbrs-mpl","linear-algebra","pca","svd"],"created_at":"2024-11-08T11:12:39.001Z","updated_at":"2026-03-14T15:30:18.205Z","avatar_url":"https://github.com/JM1.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Generic C++ library `hbrs-mpl` for scientific computing at HPC clusters\n\n`hbrs-mpl` is a experimental generic [C++17][wiki-cpp17] library ([GitHub.com][hbrs-mpl],\n[H-BRS GitLab][hbrs-gitlab-hbrs-mpl]) for distributed scientific computing at HPC clusters.\nOur research goal is to be able to codify complex algorithms like [singular value decomposition (SVD)][wiki-svd]\nusing abstract, mathematical notation without sacrificing space and time efficiency.\nWe use meta programming to [evaluate expressions at compile-time][hbrs-mpl-core-evaluate] and \nthus avoid any negative performance impact on run-time.\nWe apply generic techniques with the help of C++ templates to write reusable and robust components.\n\nIts development started in 2015 as a research project at [Bonn-Rhein-Sieg University of Applied Sciences][hbrs],\nfrom 2016-2019 it was funded partly by BMBF project [AErOmAt][aeromat].\n\nPrimary use cases for `hbrs-mpl` are:\n* [`hbrs-theta_utils`][hbrs-theta-utils] ([GitHub.com][hbrs-theta-utils], [H-BRS GitLab][hbrs-gitlab-hbrs-theta-utils]),\n  a postprocessing tool to CFD solvers [TAU and THETA][tau] for data-driven modal decompositions\n* [`python-edamer`][py-edamer] ([GitHub.com][py-edamer], [H-BRS GitLab][hbrs-gitlab-py-edamer]),\n  a Python 3 library for exascale data analysis and machine learning applications\n\n:warning: **WARNING:**\nThis code is still under development and is not ready for production yet.\nCode might change or break at any time and is missing proper documentation.\n:warning:\n\n:warning: **DEPRECATION NOTICE:**\nApparently, this code meets the inevitable fate of many state-funded research projects. It has not been actively worked\non since 2020. **Software consists of teams of people. If you want people to continue developing a project after it ceases\nto be their personal interest, fund them for it.**\n:warning:\n\n## Under the hood\n\n`hbrs-mpl` provides algorithms for\n* linear algebra, e.g. matrix operations like \n  [`hbrs::mpl::fn::multiply`][hbrs-mpl-fn-multiply] and [`hbrs::mpl::fn::transpose`][hbrs-mpl-fn-transpose]\n* numerical linear algebra, e.g.\n  [eigenvalue decomposition][hbrs-mpl-fn-eig], [singular value decomposition (SVD)][hbrs-mpl-fn-svd]\n* statistics, e.g. [Principal Component Analysis (PCA) / Proper Orthogonal Decomposition (POD)][hbrs-mpl-fn-pca]\n* time-dependent statistics, e.g. [Dynamic Mode Decomposition (DMD)][hbrs-mpl-fn-dmd]\n\n`hbrs-mpl`'s [functions][hbrs-mpl-fn] are mostly geared towards compatibility with [MATLAB's API][matlab-help], because\nthe latter has a strong focus on mathematical notations, is properly documented and useful for rapid prototyping.\n\n`hbrs-mpl` provides local and distributed [data structures][hbrs-mpl-dt] for matrices, vectors and sequences.\n\n`hbrs-mpl` builds heavily on [`Elemental`][elemental] for distributed data structures and linear algebra algorithms and\n[`Boost.Hana`][boost-hana-ref] for [meta programming][hbrs-mpl-core-evaluate] and generic coding.\n\nThe full tech stack consists of:\n* [`C++17`][cpp-ref] for generic, functional and efficient library code\n* C++ library [`Elemental`][elemental]\n* C++ metaprogramming library [`Boost.Hana`][boost-hana-ref]\n* [MATLAB Coder][matlab-coder] to generate C code from [MATLAB code][hbrs-mpl-detail-matlab-cxn] which we then use\n  exclusively in unit tests to compare results of `hbrs-mpl`'s algorithms to MATLAB or rather its LAPACK libraries.\n  Note, `hbrs-mpl` compiles just fine without MATLAB!\n* [MPI][wiki-mpi] for [distributed][hbrs-theta-utils-detail-vtk] [computations][hbrs-theta-utils-detail-scatter]\n* [`Boost.Test`][boost-test] for unit tests, e.g. \n  [`hbrs::mpl::fn::svd`][hbrs-mpl-fn-svd-test-hbrs-mpl] and [`hbrs::mpl::fn::pca`][hbrs-mpl-fn-pca-test-hbrs-mpl]\n* [CMake 3][cmake3-tut] and [`hbrs-cmake`][hbrs-cmake] to [build, export and install our library](CMakeLists.txt)\n* [GitLab CI][hbrs-gitlab-hbrs-mpl-ci] to continuously build and test our code against different compilers\n* [`Python 3`][python3-ref] to [generate missing headers][hbrs-mpl-misc-generate]\n\n## How to build, install and run code using `Docker` or `Podman`\n\nFor a quick and easy start into developing with C++, a set of ready-to-use `Docker`/`Podman` images\n`jm1337/debian-dev-hbrs` and `jm1337/debian-dev-full` (supports more languages) has been created. They contain a full\ndevelopment system including all tools and libraries necessary to hack on distributed decomposition algorithms and more\n([Docker Hub][docker-hub-jm1337], [source files for Docker images][docker-artifacts]).\n\n### Install `Docker` or `Podman`\n\n* On `Debian 10 (Buster)` or `Debian 11 (Bullseye)` just run `sudo apt install docker.io`\n  or follow the [official install guide][docker-install-debian] for Docker Engine on Debian\n* On `Ubuntu 18.04 LTS (Bionic Beaver)` and `Ubuntu 20.04 LTS (Focal Fossa)` just run `sudo apt install docker.io`\n  (from `bionic/universe` and `focal/universe` repositories)\n  or follow the [official install guide][docker-install-ubuntu] for Docker Engine on Ubuntu\n* On `Windows 10` follow the [official install guide][docker-install-windows] for Docker Desktop on Windows\n* On `Mac` follow the [official install guide][docker-install-mac] for Docker Desktop on Mac\n* On `Fedora`, `Red Hat Enterprise Linux (RHEL)` and `CentOS` follow the [official install guide][podman-install] for\n  Podman\n\n### Setup and run container\n\n```sh\n# docker version 18.06.0-ce or later is recommended\ndocker --version\n\n# fetch docker image\ndocker pull jm1337/debian-dev-hbrs:bullseye\n\n# log into docker container\ndocker run -ti jm1337/debian-dev-hbrs:bullseye\n# or using a persistent home directory, e.g.\ndocker run -ti -v /HOST_DIR:/home/devil/ jm1337/debian-dev-hbrs:bullseye\n# or using a persistent home directory on Windows hosts, e.g.\ndocker run -ti -v C:\\YOUR_DIR:/home/devil/ jm1337/debian-dev-hbrs:bullseye\n```\n\nPodman strives for complete CLI compatibility with Docker, hence\n[you may use the `alias` command to create a `docker` alias for Podman][docker-to-podman-transition]:\n```sh\nalias docker=podman\n```\n\n### Build and run code inside container\n\nExecute the following commands within the `Docker`/`Podman` container:\n\n```sh\n# choose a compiler\nexport CC=clang-10\nexport CXX=clang++-10\n# or\nexport CC=gcc-10\nexport CXX=g++-10\n\n# fetch, compile and install prerequisites\ngit clone --depth 1 https://github.com/JM1/hbrs-cmake.git\ncd hbrs-cmake\nmkdir build \u0026\u0026 cd build/\n# install to non-system directory because sudo is not allowed in this docker container\ncmake \\\n    -DCMAKE_INSTALL_PREFIX=$HOME/.local \\\n    ..\nmake -j$(nproc)\nmake install\ncd ../../\n\n# fetch, compile and install hbrs-mpl\ngit clone --depth 1 https://github.com/JM1/hbrs-mpl.git\ncd hbrs-mpl\nmkdir build \u0026\u0026 cd build/\ncmake \\\n -DCMAKE_INSTALL_PREFIX=$HOME/.local \\\n -DHBRS_MPL_ENABLE_ELEMENTAL=ON \\\n -DHBRS_MPL_ENABLE_MATLAB=OFF \\\n -DHBRS_MPL_ENABLE_TESTS=ON \\\n -DHBRS_MPL_ENABLE_BENCHMARKS=ON \\\n ..\nmake -j$(nproc)\nctest --verbose --output-on-failure\nmake install\n```\n\nFor more examples on how to build and test this code see [`.gitlab-ci.yml`](.gitlab-ci.yml).\n\n## License\n\nGNU General Public License v3.0 or later\n\nSee [LICENSE.md](LICENSE.md) to see the full text.\n\n## Author\n\nJakob Meng\n@jm1 ([GitHub.com][github-jm1], [Web][jm])\n\n[//]: # (References)\n\n[aeromat]: https://www.h-brs.de/de/aeromat\n[boost-hana]: https://github.com/boostorg/hana\n[boost-hana-ref]: https://boostorg.github.io/hana/\n[boost-test]: https://www.boost.org/doc/libs/release/libs/test/\n[cmake3-tut]: https://cmake.org/cmake/help/latest/guide/tutorial/index.html\n[cpp-ref]: https://en.cppreference.com/w/cpp\n[docker-artifacts]: https://github.com/JM1/docker-artifacts\n[docker-hub-jm1337]: https://hub.docker.com/r/jm1337/\n[docker-install-debian]: https://docs.docker.com/engine/install/debian/\n[docker-install-mac]: https://docs.docker.com/docker-for-mac/install/\n[docker-install-ubuntu]: https://docs.docker.com/engine/install/ubuntu/\n[docker-install-windows]: https://docs.docker.com/docker-for-windows/install/\n[docker-to-podman-transition]: https://developers.redhat.com/blog/2020/11/19/transitioning-from-docker-to-podman/\n[elemental]: https://github.com/elemental/Elemental\n[github-jm1]: https://github.com/jm1\n[hbrs]: https://www.h-brs.de\n[hbrs-gitlab-hbrs-mpl]: https://git.inf.h-brs.de/jmeng2m/hbrs-mpl/\n[hbrs-gitlab-hbrs-mpl-ci]: https://git.inf.h-brs.de/jmeng2m/hbrs-mpl/-/pipelines\n[hbrs-gitlab-py-edamer]: https://git.inf.h-brs.de/jmeng2m/python-edamer\n[hbrs-gitlab-hbrs-theta-utils]: https://git.inf.h-brs.de/jmeng2m/hbrs-theta_utils/\n[hbrs-cmake]: https://github.com/JM1/hbrs-cmake/\n[hbrs-mpl]: https://github.com/JM1/hbrs-mpl/\n[hbrs-mpl-core-evaluate]: https://github.com/JM1/hbrs-mpl/blob/expression_evaluation_framework_2/src/hbrs/mpl/core/evaluate/impl.hpp\n[hbrs-mpl-detail-matlab-cxn]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/detail/matlab_cxn\n[hbrs-mpl-dt]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/dt\n[hbrs-mpl-fn]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn\n[hbrs-mpl-fn-eig]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/eig\n[hbrs-mpl-fn-dmd]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/dmd\n[hbrs-mpl-fn-multiply]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/multiply\n[hbrs-mpl-fn-pca]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/pca\n[hbrs-mpl-fn-pca-test-hbrs-mpl]: https://github.com/JM1/hbrs-mpl/blob/master/src/hbrs/mpl/fn/pca/test/hbrs_mpl.cpp\n[hbrs-mpl-fn-svd]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/svd\n[hbrs-mpl-fn-svd-test-hbrs-mpl]: https://github.com/JM1/hbrs-mpl/blob/master/src/hbrs/mpl/fn/svd/test/hbrs_mpl.cpp\n[hbrs-mpl-fn-transpose]: https://github.com/JM1/hbrs-mpl/tree/master/src/hbrs/mpl/fn/transpose\n[hbrs-mpl-misc-generate]: https://github.com/JM1/hbrs-mpl/blob/master/misc/generate.py\n[hbrs-theta-utils]: https://github.com/JM1/hbrs-theta_utils/\n[hbrs-theta-utils-detail-scatter]: https://github.com/JM1/hbrs-theta_utils/blob/master/src/hbrs/theta_utils/detail/scatter/impl.cpp\n[hbrs-theta-utils-detail-vtk]: https://github.com/JM1/hbrs-theta_utils/blob/master/src/hbrs/theta_utils/detail/vtk/impl.cpp\n[jm]: http://www.jakobmeng.de\n[matlab-coder]: https://de.mathworks.com/products/matlab-coder.html\n[matlab-help]: https://de.mathworks.com/help/\n[podman-install]: https://podman.io/getting-started/installation\n[py-edamer]: https://github.com/JM1/python-edamer\n[pytest-doc]: https://docs.pytest.org/\n[python3-ref]: https://docs.python.org/3/reference/\n[tau]: http://tau.dlr.de/\n[wiki-cpp17]: https://en.wikipedia.org/wiki/C++17\n[wiki-mpi]: https://en.wikipedia.org/wiki/Message_Passing_Interface\n[wiki-svd]: https://en.wikipedia.org/wiki/Singular_value_decomposition\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjm1%2Fhbrs-mpl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjm1%2Fhbrs-mpl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjm1%2Fhbrs-mpl/lists"}