8#ifndef IPPL_FFT_PERIODIC_POISSON_SOLVER_H
9#define IPPL_FFT_PERIODIC_POISSON_SOLVER_H
11#include <Kokkos_MathematicalConstants.hpp>
22 template <
typename FieldLHS,
typename FieldRHS>
24 constexpr static unsigned Dim = FieldLHS::dim;
25 using Trhs =
typename FieldRHS::value_type;
43 using T =
typename FieldLHS::value_type::value_type;
44 static_assert(std::is_floating_point<T>::value,
"Not a floating point type");
51 using T =
typename FieldLHS::value_type::value_type;
52 static_assert(std::is_floating_point<T>::value,
"Not a floating point type");
61 void solve()
override;
74 using heffteBackend =
typename FFT_t::heffteBackend;
75 heffte::plan_options opts = heffte::default_options<heffteBackend>();
76 this->
params_m.add(
"use_pencils", opts.use_pencils);
77 this->
params_m.add(
"use_reorder", opts.use_reorder);
78 this->
params_m.add(
"use_gpu_aware", opts.use_gpu_aware);
79 this->
params_m.add(
"r2c_direction", 0);
81 switch (opts.algorithm) {
82 case heffte::reshape_algorithm::alltoall:
85 case heffte::reshape_algorithm::alltoallv:
88 case heffte::reshape_algorithm::p2p:
91 case heffte::reshape_algorithm::p2p_plined:
95 throw IpplException(
"FFTPeriodicPoissonSolver::setDefaultParameters",
96 "Unrecognized heffte communication type");
Poisson< FieldLHS, FieldRHS > Base
CxField_t tempFieldComplex_m
typename FieldLHS::Mesh_t::vector_type vector_type
virtual void setDefaultParameters() override
typename FieldRHS::value_type Trhs
std::shared_ptr< FFT_t > fft_mp
typename FFT_t::Complex_t Complex_t
Vector< Trhs, Dim > Vector_t
void setRhs(rhs_type &rhs) override
std::shared_ptr< Layout_t > layoutComplex_mp
FieldLayout< Dim > Layout_t
FFTPeriodicPoissonSolver(lhs_type &lhs, rhs_type &rhs)
typename FFT_t::ComplexField CxField_t
typename FieldRHS::Mesh_t mesh_type
FFTPeriodicPoissonSolver()
typename FieldLHS::Mesh_t::value_type scalar_type
static constexpr unsigned Dim
FFT< RCTransform, FieldRHS > FFT_t