This library contains a parallelized implementation of the Discrete Fourier Transform on SO(3) and its inverse. This library uses some base types that are also included. PFSOFTlib contains an implementation of real and complex matrices, real and complex vectors as well a complex three dimensional grid. The implementation of those types contains enough functionality to perform the DSOFT/iDSOFT and can be easily extended. All those types were implemented to reduce the number of dependencies as much as possible. To perform the discrete Fourier Transform as efficiently as possible the FFTW Library as the only dependency was used.
The API documentation was automatically generated by doxygen. Some of the methods itself are described in a mathematical way to illustrate the implementation methods that were used. Often there are several ways to express specific functions or polynomials. In this cases the comment explains which of the possible methods was taken to implement these functions or polynomials.
PFSOFTlib uses OpenMP for DSOFT and iDSOFT calculations to significantly reduce runtime through parallel execution. Therefore make sure to build this library with a compiler that supports OpenMP. If your compiler does not support OpenMP all parallelized parts of the implementation will automatically be executed sequentially without the need of configuration.
-
The first thing that is needed is the FFTW library. This library is written and testet with FFTW3.3.4. Therefore we recommend to install this version of the FFTW library to ensure that no special side effects occurring.
-
If the FFTW is installed on the system CMake can create either a unix makefile or a project file for the IDE of your choice.
On macOS you have to make sure the g++ compiler is used for compiling the library, otherwise the OpenMP support is not provided. To change the compiler for the project, clone the PFSOFTlib from the repository and create a new directory for the project files. Navigate to the project folder and change the CXX environment variable via
export CXX=/path/to/g++
The g++ compiler should have version 4.8 or greater to provide the OpenMP interface. Be careful: The standard C++ compiler provided by Apple does not fully support OpenMP. To get g++ on macOS we recommend to use Homebrew.