ginkgo/core/matrix/fft.hpp Source File

ginkgo/core/matrix/fft.hpp Source File#

Reference API: ginkgo/core/matrix/fft.hpp Source File
Reference API
fft.hpp
1// SPDX-FileCopyrightText: 2017 - 2025 The Ginkgo authors
2//
3// SPDX-License-Identifier: BSD-3-Clause
4
5#ifndef GKO_PUBLIC_CORE_MATRIX_FFT_HPP_
6#define GKO_PUBLIC_CORE_MATRIX_FFT_HPP_
7
8
9#include <ginkgo/core/base/array.hpp>
10#include <ginkgo/core/base/lin_op.hpp>
11
12
13namespace gko {
14namespace matrix {
15
16
43class Fft : public EnableLinOp<Fft>,
44 public WritableToMatrixData<std::complex<float>, int32>,
45 public WritableToMatrixData<std::complex<float>, int64>,
46 public WritableToMatrixData<std::complex<double>, int32>,
47 public WritableToMatrixData<std::complex<double>, int64>,
48 public Transposable {
49 friend class EnablePolymorphicObject<Fft, LinOp>;
50
51public:
54
55 using value_type = std::complex<double>;
56 using index_type = int64;
57 using transposed_type = Fft;
58
59 std::unique_ptr<LinOp> transpose() const override;
60
61 std::unique_ptr<LinOp> conj_transpose() const override;
62
63 void write(matrix_data<std::complex<float>, int32>& data) const override;
64
65 void write(matrix_data<std::complex<float>, int64>& data) const override;
66
67 void write(matrix_data<std::complex<double>, int32>& data) const override;
68
69 void write(matrix_data<std::complex<double>, int64>& data) const override;
70
71 dim<1> get_fft_size() const;
72
73 bool is_inverse() const;
74
82 static std::unique_ptr<Fft> create(std::shared_ptr<const Executor> exec);
83
92 static std::unique_ptr<Fft> create(std::shared_ptr<const Executor> exec,
93 size_type size = 0,
94 bool inverse = false);
95
96protected:
97 Fft(std::shared_ptr<const Executor> exec, size_type size = 0,
98 bool inverse = false);
99
100 void apply_impl(const LinOp* b, LinOp* x) const override;
101
102 void apply_impl(const LinOp* alpha, const LinOp* b, const LinOp* beta,
103 LinOp* x) const override;
104
105private:
106 mutable array<char> buffer_;
107 bool inverse_;
108};
109
110
139class Fft2 : public EnableLinOp<Fft2>,
140 public WritableToMatrixData<std::complex<float>, int32>,
141 public WritableToMatrixData<std::complex<float>, int64>,
142 public WritableToMatrixData<std::complex<double>, int32>,
143 public WritableToMatrixData<std::complex<double>, int64>,
144 public Transposable {
145 friend class EnablePolymorphicObject<Fft2, LinOp>;
146
147public:
150
151 using value_type = std::complex<double>;
152 using index_type = int64;
153 using transposed_type = Fft2;
154
155 std::unique_ptr<LinOp> transpose() const override;
156
157 std::unique_ptr<LinOp> conj_transpose() const override;
158
159 void write(matrix_data<std::complex<float>, int32>& data) const override;
160
161 void write(matrix_data<std::complex<float>, int64>& data) const override;
162
163 void write(matrix_data<std::complex<double>, int32>& data) const override;
164
165 void write(matrix_data<std::complex<double>, int64>& data) const override;
166
167 dim<2> get_fft_size() const;
168
169 bool is_inverse() const;
170
178 static std::unique_ptr<Fft2> create(std::shared_ptr<const Executor> exec);
179
187 static std::unique_ptr<Fft2> create(std::shared_ptr<const Executor> exec,
188 size_type size);
189
199 static std::unique_ptr<Fft2> create(std::shared_ptr<const Executor> exec,
200 size_type size1, size_type size2,
201 bool inverse = false);
202
203protected:
204 Fft2(std::shared_ptr<const Executor> exec, size_type size1 = 0,
205 size_type size2 = 0, bool inverse = false);
206
207 void apply_impl(const LinOp* b, LinOp* x) const override;
208
209 void apply_impl(const LinOp* alpha, const LinOp* b, const LinOp* beta,
210 LinOp* x) const override;
211
212private:
213 mutable array<char> buffer_;
214 dim<2> fft_size_;
215 bool inverse_;
216};
217
218
249class Fft3 : public EnableLinOp<Fft3>,
250 public WritableToMatrixData<std::complex<float>, int32>,
251 public WritableToMatrixData<std::complex<float>, int64>,
252 public WritableToMatrixData<std::complex<double>, int32>,
253 public WritableToMatrixData<std::complex<double>, int64>,
254 public Transposable {
255 friend class EnablePolymorphicObject<Fft3, LinOp>;
256
257public:
260
261 using value_type = std::complex<double>;
262 using index_type = int64;
263 using transposed_type = Fft3;
264
265 std::unique_ptr<LinOp> transpose() const override;
266
267 std::unique_ptr<LinOp> conj_transpose() const override;
268
269 void write(matrix_data<std::complex<float>, int32>& data) const override;
270
271 void write(matrix_data<std::complex<float>, int64>& data) const override;
272
273 void write(matrix_data<std::complex<double>, int32>& data) const override;
274
275 void write(matrix_data<std::complex<double>, int64>& data) const override;
276
277 dim<3> get_fft_size() const;
278
279 bool is_inverse() const;
280
288 static std::unique_ptr<Fft3> create(std::shared_ptr<const Executor> exec);
289
297 static std::unique_ptr<Fft3> create(std::shared_ptr<const Executor> exec,
298 size_type size);
299
310 static std::unique_ptr<Fft3> create(std::shared_ptr<const Executor> exec,
311 size_type size1, size_type size2,
312 size_type size3, bool inverse = false);
313
314protected:
315 Fft3(std::shared_ptr<const Executor> exec, size_type size1 = 0,
316 size_type size2 = 0, size_type size3 = 0, bool inverse = false);
317
318 void apply_impl(const LinOp* b, LinOp* x) const override;
319
320 void apply_impl(const LinOp* alpha, const LinOp* b, const LinOp* beta,
321 LinOp* x) const override;
322
323private:
324 mutable array<char> buffer_;
325 dim<3> fft_size_;
326 bool inverse_;
327};
328
329
330} // namespace matrix
331} // namespace gko
332
333
334#endif // GKO_PUBLIC_CORE_MATRIX_FFT_HPP_
Definition lin_op.hpp:878
void move_to(result_type *result) override
Definition polymorphic_object.hpp:751
void convert_to(result_type *result) const override
Definition polymorphic_object.hpp:749
Definition polymorphic_object.hpp:668
Definition lin_op.hpp:117
Definition lin_op.hpp:433
Definition lin_op.hpp:660
Definition array.hpp:166
Definition fft.hpp:144
static std::unique_ptr< Fft2 > create(std::shared_ptr< const Executor > exec)
static std::unique_ptr< Fft2 > create(std::shared_ptr< const Executor > exec, size_type size1, size_type size2, bool inverse=false)
static std::unique_ptr< Fft2 > create(std::shared_ptr< const Executor > exec, size_type size)
std::unique_ptr< LinOp > conj_transpose() const override
std::unique_ptr< LinOp > transpose() const override
Definition fft.hpp:254
static std::unique_ptr< Fft3 > create(std::shared_ptr< const Executor > exec, size_type size1, size_type size2, size_type size3, bool inverse=false)
std::unique_ptr< LinOp > conj_transpose() const override
static std::unique_ptr< Fft3 > create(std::shared_ptr< const Executor > exec, size_type size)
std::unique_ptr< LinOp > transpose() const override
static std::unique_ptr< Fft3 > create(std::shared_ptr< const Executor > exec)
Definition fft.hpp:48
std::unique_ptr< LinOp > transpose() const override
std::unique_ptr< LinOp > conj_transpose() const override
static std::unique_ptr< Fft > create(std::shared_ptr< const Executor > exec)
static std::unique_ptr< Fft > create(std::shared_ptr< const Executor > exec, size_type size=0, bool inverse=false)
The Ginkgo namespace.
Definition abstract_factory.hpp:20
std::int32_t int32
Definition types.hpp:106
std::int64_t int64
Definition types.hpp:112
std::size_t size_type
Definition types.hpp:89
Definition dim.hpp:26
Definition matrix_data.hpp:126