File fftlibraryinterface.h
File List > code_source > templat > include > TempLat > fft > fftlibraryinterface.h
Go to the documentation of this file
#ifndef TEMPLAT_FFT_FFTLIBRARYINTERFACE_H
#define TEMPLAT_FFT_FFTLIBRARYINTERFACE_H
/* This file is part of TempLat, available at https://cosmolattice.github.io/templat .
Copyright 2021-2026 The TempLat authors, see AUTHORS.md.
Released under the MIT license, see LICENSE.md. */
// File info: Main contributor(s): Wessel Valkenburg, Year: 2019
#include "TempLat/lattice/memory/memorylayouts/fftlayoutstruct.h"
#include "TempLat/lattice/memory/memoryblock.h"
#include "TempLat/parallel/mpi/cartesian/mpicartesiangroup.h"
namespace TempLat
{
class FFTSessionGuard
{
public:
virtual ~FFTSessionGuard() = default;
};
template <typename T, size_t NDim> class FFTPlanInterface
{
public:
/* virtual desctructor can not be abstract: https://stackoverflow.com/a/13444839/2295722 */
virtual ~FFTPlanInterface() = default;
virtual void c2r(MemoryBlock<T, NDim> &mBlock) = 0;
virtual void r2c(MemoryBlock<T, NDim> &mBlock) = 0;
};
template <size_t NDim> class FFTLibraryInterface
{
public:
// Put public methods here. These should change very little over time.
FFTLibraryInterface() = default;
virtual ~FFTLibraryInterface() = default;
virtual device::Idx getMaximumNumberOfDimensionsToDivide(device::Idx nDimensions) = 0;
virtual IntrinsicScales getIntrinsicRescaleToGetUnnormalizedFFT(device::Idx nGridPoints) = 0;
virtual FFTLayoutStruct<NDim> computeLocalSizes(MPICartesianGroup group, device::IdxArray<NDim> nGridPoints,
bool forbidTransposition = false) = 0;
virtual void setPlannerPatience(int level) = 0;
virtual std::shared_ptr<FFTPlanInterface<float, NDim>> getPlans_float(const MPICartesianGroup &group,
const FFTLayoutStruct<NDim> &layout) = 0;
virtual std::shared_ptr<FFTPlanInterface<double, NDim>> getPlans_double(const MPICartesianGroup &group,
const FFTLayoutStruct<NDim> &layout) = 0;
};
} // namespace TempLat
#endif