Loading [MathJax]/extensions/TeX/AMSmath.js
ESPResSo
Extensible Simulation Package for Research on Soft Matter Systems
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages Concepts
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.