GrassmannCG  1.1.0
created from b58ad42 on deploy-documenation
GrassmannCG

This repo contains the implementation of the conjugate gradient method on the Grassmann manifold. It produces three outputs

  • the actual library to statically link against, e.g. libGrassmannCG.a
  • its documentation
  • the file GrassmannCG.cmake that exports two targets: GrassmannCG::GrassmannCG and GrassmannCG::MatlabBindings

Assuming that you are in the repo's directory, the quick start is

cmake -B build -S .
cmake --build build --target all

Note that you have to activate optimized compilation with -DCMAKE_BUILD_TYPE=Release when configuring the project with cmake. See the sections Configurations and Targets below to build the Matlab or Python interface, and generate the documentation with doxygen. Then, you can make thia library available in your cmake project via

# in your project's CMakeLists.txt:
include(Grassmann.cmake)
add_executable(<YOUR_TARGET> YOUR_SRC_FILE.cpp)
target_link_libraries(<YOUR_TARGET> PUBLIC GrassmannCG::GrassmannCG)

You may simply copy the GrassmannCG.cmake from this repo's build directory to your project's folder.

Citing our Work

If you found this code useful in your scientific work, we encourage you to cite our original paper:

@inproceedings{mieg2025omdc,
author = {Mieg, Lucas and M\"onnigmann, Martin},
booktitle = {2025 European Control Conference (ECC)},
title = {Optimal Mode Decomposition for control},
year = {2025},
volume = {},
number = {},
pages = {2709-2714},
keywords={Manifolds;Linear systems;Interpolation;Autonomous systems;Computational modeling;Neural networks;Aerospace electronics;Control systems;Reduced order systems;Optimization},
doi = {10.23919/ECC65951.2025.11186846}
}

Documentation

This project is documented with doxygen within the source code. The documentation can be compiled with

cmake -S . -B <YOUR_BUILD_DIR> -DGENERATE_DOCS=Yes
cmake --build <YOUR_BUILD_DIR> --target documentation

Ensure that doxygen is available to cmake. The documenation is also available on Gitlab-Pages under NOT CONFIGURED.

You may use Awesome Doxygen by specifying

cmake -S . -B <YOUR_BUILD_DIR> -DAwesome_CSS_DIR=<PATH_TO_AWESOME_DOXYGEN>

Configuration Options

The cmake project supplies several options for building interfaces

Key Info required cmake-packages Default
USE_BLAS links to external BLAS lib. BLAS Off
USE_OPEN_MP multi-threading with OpenMP OpenMP Off
GENERATE_DOCS generate html documentation Doxygen Off
USE_UTF8_FMT print iter. with UT8 formatting n/a Off

The default configuration only requires the Eigen3 library. The project only specifies static libraries to be linked with, see below.

It only requires Eigen3 to be accessible to cmake. A list of all user-defined variables can be queried with

cmake -S . -B <YOUR_BUILD_DIR> -LH

Automatic Control and Systems Theory, Ruhr-Univeristy Bochum