PortHamiltonianBenchmarkSystems
About
PortHamiltonianBenchmarkSystems is a collection of port-Hamiltonian systems, that can be used as benchmarks for simulation, control, and model-order reduction algorithms. We feature constructors for a wide range of linear, nonlinear, ODE, and DAE systems, as well as several default parameter sets for each.
This package is currently developed in Julia. If you want to take advantage of this benchmark collection in other programming languages, you can:
- Generate any desired system in Julia and save the matrices in a format of your choosing (see JuliaIO),
- Generate MAT-files for any default parameter set, using our Command-Line Interface.
Installation and Usage
To install PortHamiltonianBenchmarkSystems, run the following commands in the Julia REPL:
using Pkg
Pkg.add(url="https://github.com/Algopaul/PortHamiltonianBenchmarkSystems.jl/")
To generate one of the systems, e.g. a mass-spring-damper chain with the parameters from Gugercin2012, type:
using PortHamiltonianBenchmarkSystems
config = SingleMSDConfig("Gugercin")
J, R, Q, B = construct_system(config)
Naturally, we may also specify the parameters ourselves:
config = SingleMSDConfig(n_cells=10, io_dim=2, c=1.0, m=4.0, k=5.0)
If you need the system matrices in standard port-Hamiltonian form, type:
system = PHSystem(config)
E, J, R, Q, G, P, S, N = @unpack system
Docstrings for the types and methods shown above can be accessed in the Julia REPL by typing ?
and then name of the type or method.
How to Contribute
This benchmark collection is driven by the active support of the port-Hamiltonian community. If your research has lead to port-Hamiltonian models that may be relevant for this collection, we would be happy to include them. If you wish to contribute to the project directly, please consult our Contribution page, fork our Git repository and issue a pull request. Alternatively, feel free to contact us via e-mail to discuss our potential collaboration. We are happy to receive reference implementations in other languages and reimplement them in Julia for this package.