All Projects → mriesch-tum → mbsolve

mriesch-tum / mbsolve

Licence: GPL-3.0 License
An open-source solver tool for the Maxwell-Bloch equations.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
shell
77523 projects
matlab
3953 projects
python
139335 projects - #7 most used programming language
SWIG
194 projects
Cuda
1817 projects

Projects that are alternatives of or similar to mbsolve

Ctranslate2
Fast inference engine for OpenNMT models
Stars: ✭ 140 (+900%)
Mutual labels:  openmp, parallel-computing, cuda
allgebra
Base container for developing C++ and Fortran HPC applications
Stars: ✭ 14 (+0%)
Mutual labels:  hpc, openmp, cuda
Arraymancer
A fast, ergonomic and portable tensor library in Nim with a deep learning focus for CPU, GPU and embedded devices via OpenMP, Cuda and OpenCL backends
Stars: ✭ 793 (+5564.29%)
Mutual labels:  openmp, parallel-computing, cuda
Parenchyma
An extensible HPC framework for CUDA, OpenCL and native CPU.
Stars: ✭ 71 (+407.14%)
Mutual labels:  hpc, parallel-computing, cuda
Onemkl
oneAPI Math Kernel Library (oneMKL) Interfaces
Stars: ✭ 122 (+771.43%)
Mutual labels:  hpc, parallel-computing, cuda
Occa
JIT Compilation for Multiple Architectures: C++, OpenMP, CUDA, HIP, OpenCL, Metal
Stars: ✭ 230 (+1542.86%)
Mutual labels:  hpc, openmp, cuda
gpubootcamp
This repository consists for gpu bootcamp material for HPC and AI
Stars: ✭ 227 (+1521.43%)
Mutual labels:  hpc, openmp, cuda
Hiop
HPC solver for nonlinear optimization problems
Stars: ✭ 75 (+435.71%)
Mutual labels:  hpc, solver, cuda
monolish
monolish: MONOlithic LInear equation Solvers for Highly-parallel architecture
Stars: ✭ 166 (+1085.71%)
Mutual labels:  hpc, openmp, cuda
Sundials
SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. This is a mirror of current releases, and development will move here eventually. Pull requests are welcome for bug fixes and minor changes.
Stars: ✭ 194 (+1285.71%)
Mutual labels:  hpc, solver, parallel-computing
Foundations of HPC 2021
This repository collects the materials from the course "Foundations of HPC", 2021, at the Data Science and Scientific Computing Department, University of Trieste
Stars: ✭ 22 (+57.14%)
Mutual labels:  hpc, openmp, parallel-computing
yask
YASK--Yet Another Stencil Kit: a domain-specific language and framework to create high-performance stencil code for implementing finite-difference methods and similar applications.
Stars: ✭ 81 (+478.57%)
Mutual labels:  hpc, openmp
HeCBench
software.intel.com/content/www/us/en/develop/articles/repo-evaluating-performance-productivity-oneapi.html
Stars: ✭ 85 (+507.14%)
Mutual labels:  openmp, cuda
euler2d kokkos
Simple 2d finite volume solver for Euler equations using c++ kokkos library
Stars: ✭ 27 (+92.86%)
Mutual labels:  openmp, cuda
HiSpatialCluster
Clustering spatial points with algorithm of Fast Search, high performace computing implements of CUDA or parallel in CPU, and runnable implements on python standalone or arcgis.
Stars: ✭ 31 (+121.43%)
Mutual labels:  hpc, cuda
cruise
User space POSIX-like file system in main memory
Stars: ✭ 27 (+92.86%)
Mutual labels:  hpc, parallel-computing
dbcsr
DBCSR: Distributed Block Compressed Sparse Row matrix library
Stars: ✭ 65 (+364.29%)
Mutual labels:  hpc, cuda
wxparaver
wxParaver is a trace-based visualization and analysis tool designed to study quantitative detailed metrics and obtain qualitative knowledge of the performance of applications, libraries, processors and whole architectures.
Stars: ✭ 23 (+64.29%)
Mutual labels:  hpc, openmp
matrix multiplication
Parallel Matrix Multiplication Using OpenMP, Phtreads, and MPI
Stars: ✭ 41 (+192.86%)
Mutual labels:  openmp, parallel-computing
FGPU
No description or website provided.
Stars: ✭ 30 (+114.29%)
Mutual labels:  openmp, cuda

mbsolve

An open-source solver tool for the full wave 1D Maxwell-Bloch equations.

Build Status

Overview

Overview of the mbsolve project.

The project consists of the following components:

  • mbsolve-lib: Contains the common base classes for solvers and writers (which are subsequently derived and implemented in the other subprojects). As the name suggests, the solver class is responsible for solving the Maxwell-Bloch equations while the writer class writes the results to a file of the respective format. It also provides classes to describe a device setup (materials, dimensions, ...) and a simulation scenario (simulation settings, sources, ...).

  • mbsolve-tool: A C++ test application that implements various simulation setups.

  • solver-cpu: Uses the OpenMP standard to efficiently solve the equation system on multi-core CPUs or Intel's Xeon Phi.

  • solver-cuda: Uses NVIDIA's CUDA framework to efficiently solve the equation system on graphics processing units (GPUs). Different solvers are implemented in this subproject.

  • tools: Various scripts in different scripting languages.

  • writer-hdf5: Writes the results into the HDF5 format.

All libraries feature a Python interface and can be used conveniently from Python scripts, Jupyter notebooks etc. See tools/python for examples.

Install via conda

If you have a conda distribution installed, you can install mbsolve using

$ conda install -c conda-forge mbsolve

from the conda-forge channel.

Get the code

Make sure to clone using

git clone --recurse-submodules [...]

in order to clone third-party libraries recursively. Alternatively, issue

git submodule update --init --recursive

in the repository if it already exists.

Build instructions

The project is built using the CMake build system. The typical commands under Linux are

$ cd mbsolve
$ mkdir build
$ cd build
$ cmake ..
$ make -j 8
$ ./mbsolve [--options]

By default, the build type is set to release with debug information, which enables debugging but features the optimization necessary for reasonable performance. Adjust the -j command line parameter of the make command in order to speed up the compilation.

In order to enable/disable a component, an extra option has to be passed to CMake:

$ cmake -DWITH_CUDA=ON/OFF ..

The project has been successfully compiled with the GNU compiler collection (gcc) and the Intel compiler (icc). gcc is used as default, the Intel compiler may be used with the following command:

$ CC=path_to_intel/icc CXX=path_to_intel/icpc cmake -DWITH_CUDA=OFF ..

Note that CUDA does not support all versions of the Intel compiler, hence the CUDA support is disabled.

The target architecture may be set using the ARCH option. By default, compiler optimizations suitable for the host machine are applied. However, when building for another machine the architecture can be set with e.g.

$ cmake -DARCH=AVX2 ..

The Doxygen documentation can be build with

$ make doc

If you want to use Eclipse, use the appropriate generator flag -G and (if desired) set the build type to Debug. (Note that Eclipse yields a warning if the build directory is a child of the source directory. Adjust path_src.)

$ cmake -DCMAKE_BUILD_TYPE=Debug -G"Eclipse CDT4 - Unix Makefiles" path_src

Tools

  • Python scripts: Example scripts that define simulation setups and run the solver. Execute from build directory. See tools/python.

  • MATLAB scripts: The examples read the simulation results and plot them. See tools/matlab.

  • Slurm scripts: Example scripts for the Slurm Workload Manager. See tools/slurm.

Dependencies

The following software packages are required to build the project:

  • C++ compiler
    • GNU Compiler Collection (gcc) >= 4.9.2
    • Intel C++ Compiler, any recent version
    • Clang >= v7.0.0 (Note: AppleClang lacks OpenMP support)
    • Microsoft Visual C++ (MSVC), any recent version (Note: MSVC only supports OpenMP 2.0)
  • cxxopts (any recent version) for mbsolve-tool
  • CMake >= 3.9
  • Eigen library >= 3.3.4
  • HDF5 (any recent version) for the writer-hdf5
  • Python >= 2.7 and SWIG >= 2.0.12 for Python support
  • CUDA >= 7.0 for solver-cuda
  • OpenMP (see supported compilers) for solver-cpu
  • Doxygen (any recent version) for the documentation

If the required dependencies are not met, the components may be disabled by the build system. Consider the minimum version given in the brackets.

The runtime dependencies are a reduced set of the list above. Namely, those are:

  • C/C++ standard libraries including OpenMP support
  • Python runtime
  • HDF5

Naturally, the same versions as used during compilation must be available.

Contributing to mbsolve

Feel free to use the code and do not hesitate to contact me or to create an issue on GitHub. Any contributions are welcome.

If you found the code helpful and used it in your research, you can cite the following paper:
Riesch, Michael and Jirauschek, Christian, "mbsolve: An open-source solver tool for the Maxwell-Bloch equations," Comp. Phys. Comm. 268, 108097 (2021). arXiv:2005.05412 doi:10.1016/j.cpc.2021.108097

If desired, you can cite the project web page directly:
Riesch, Michael and Jirauschek, Christian, "mbsolve: An open-source solver tool for the Maxwell-Bloch equations," https://github.com/mriesch-tum/mbsolve [Online], (2017).

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].