ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
Loading...
Searching...
No Matches
fft.hpp File Reference

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>
+ Include dependency graph for fft.hpp:
+ This graph shows which files directly or indirectly include this file:

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.
 

Detailed Description

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.