34template <
typename FloatType, Arch Architecture>
35std::shared_ptr<DipolarP3M>
38 using DefaultFFTConfig =
41 auto obj = std::make_shared<
43 std::make_unique<DipolarP3MState<FloatType, DefaultFFTConfig>>(
45 tuning_params, prefactor);
46 obj->dp3m.template make_mesh_instance<FFTBuffersLegacy<FloatType>>();
47 obj->dp3m.template make_fft_instance<FFTBackendLegacy<FloatType>>();
51std::shared_ptr<DipolarP3M>
54 bool single_precision,
Arch arch) {
55 auto fptr = &new_dipolar_p3m_impl<float, Arch::CPU>;
56 if (single_precision) {
57 fptr = new_dipolar_p3m_impl<float, Arch::CPU>;
59 fptr = new_dipolar_p3m_impl<double, Arch::CPU>;
61 return fptr(std::move(p3m_params), tuning_params, prefactor);
std::shared_ptr< DipolarP3M > new_dipolar_p3m_heffte(P3MParameters &&p3m_params, TuningParameters const &tuning_params, double prefactor, bool single_precision, Arch arch)
std::shared_ptr< DipolarP3M > new_dipolar_p3m_impl(P3MParameters &&p3m, TuningParameters const &tuning_params, double prefactor)
Arch
P3M kernel architecture.
Structure to hold P3M parameters and some dependent variables.