ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
|
Routines, row decomposition, data structures and communication for the 3D-FFT. More...
#include "vector.hpp"
#include <utils/Vector.hpp>
#include <array>
#include <cstddef>
#include <memory>
#include <optional>
#include <span>
#include <type_traits>
#include <utility>
#include <vector>
Go to the source code of this file.
Classes | |
struct | fft::fft_plan< FloatType > |
struct | fft::fft_forw_plan< FloatType > |
Plan for a forward 1D FFT of a flattened 3D array. More... | |
struct | fft::fft_back_plan< FloatType > |
Plan for a backward 1D FFT of a flattened 3D array. More... | |
struct | fft::fft_data_struct< FloatType > |
Information about the three one dimensional FFTs and how the nodes have to communicate inbetween. More... | |
Namespaces | |
namespace | boost |
namespace | boost::mpi |
namespace | fft |
Functions | |
int | fft::map_3don2d_grid (int const g3d[3], int g2d[3]) |
Calculate 'best' mapping between a 2D and 3D grid. | |
std::optional< std::vector< int > > | fft::find_comm_groups (Utils::Vector3i const &grid1, Utils::Vector3i const &grid2, std::span< int const > node_list1, std::span< int > node_list2, std::span< int > pos, std::span< int > my_pos, int rank) |
This ugly function does the bookkeeping: which nodes have to communicate to each other, when you change the node grid. | |
Routines, row decomposition, data structures and communication for the 3D-FFT.
The 3D-FFT is split into three 1D-FFTs. The data is distributed in such a way, that for the actual direction of the FFT each node has a certain number of rows for which it performs a 1D-FFT. After performing the FFT on that direction the data is redistributed.
For simplicity, a full complex-to-complex FFT is implemented, even though a real-to-complex FFT would be sufficient.
Definition in file fft.hpp.