An open API service indexing awesome lists of open source software.

https://github.com/qzed/ws17-numsim-final

Final project for the 2017/2018 Numerical Simulations course at the University of Stuttgart.
https://github.com/qzed/ws17-numsim-final

Last synced: 11 months ago
JSON representation

Final project for the 2017/2018 Numerical Simulations course at the University of Stuttgart.

Awesome Lists containing this project

README

          

# Numerical Simulations Course: Final Project

Our final project for the 2017/2018 numerical simulations course at the University of Stuttgart.

The objective of this project is the implementation of our previously CPU-based flow solver in OpenCL to exploit the massively parallel architecture of the GPU, ultimatively acheiving a speed-up over the CPU-implementation.

To acheive this, multiple kernels have been created, including kernels for
- the initialization of boundary values,
- calculation of the preliminary velocities `F` and `G`,
- the solver for the pressure equation (including the calculation of its right-hand-side),
- calculation of the residual,
- calculation of the new velocities,
- and multiple reduction kernels, used, for example, for the calculation of the residual and the visualization.

Furthermore we re-implemented the visualization using OpenGL.
This lets us use the data directly available on the GPU, thus we can reduce the amount of data copied between device and host.

## Dependencies

This project has the following dependencies:
- OpenCL (calculation)
- OpenGL (visualization)
- SDL2 (window- and OpenGL context-creation)
- GLEW (OpenGL function loading)

As well as dependencies to the following third-party header-only libraries that are included:
- `cl2.hpp` (https://github.com/KhronosGroup/OpenCL-CLHPP) the official OpenCL C++ wrapper
- `json.hpp` (https://github.com/nlohmann/json) to write json files for performance-testing

## Compile and Execute

The program can be compiled using `cmake`, i.e.
```sh
mkdir build && cd build # create build directory
ccmake .. # configure using ccmake
cmake --build .
```

And then executed (in the build directory) using `./main`.
Run `./main -h` for a short info about the available command line options.

## Keyboard Shortcuts

### Interpolation Modifier

| Shortcut | Effect |
|:-------------:|:--------------------------------------|
| l | Linear interpolation of between cells |
| n | Cell values (no interpolation) |

### Selection of Visualization Data

| Shortcut | Effect |
|:-------------:|:---------------------------------|
| 1 | Display magnitude of velocity |
| 2 | Display x-velocity (u, centered) |
| 3 | Display y-velocity (v, centered) |
| 4 | Display pressure |
| 5 | Display vorticity |
| 6 | Display stream function |

### Selection of Intermediate Data for Visualization

| Shortcut | Effect |
|:--------------:|:------------------------------------------------------|
| F1 | Display cell x-velocity (u, non-centered) |
| F2 | Display cell y-velocity (v, non-centered) |
| F3 | Display preliminary cell x-velocity (f, non-centered) |
| F4 | Display preliminary cell y-velocity (g, non-centered) |
| F5 | Display right-hand-side of pressure equation |
| F6 | Display boundary types |

## Parameter Files and Geometry Files

The default parameters and geometry are left unchanged from previous exercise-sheets.
Additionally one can load a parameter and geometry files using

```
./path/to/build/main -p -g
```

The syntax of parameter and geometry-files is also left unchanged from the previous exercises, and can, for example, be generated by the `Magrathea` program provided to us in exercise three.