49 bool single_precision,
Arch arch) {
50 auto fptr = &new_coulomb_p3m_impl<float, Arch::CPU>;
51 if (single_precision) {
53 fptr = new_coulomb_p3m_impl<float, Arch::CPU>;
55 fptr = new_coulomb_p3m_impl<float, Arch::CUDA>;
59 fptr = new_coulomb_p3m_impl<double, Arch::CPU>;
61 throw std::invalid_argument(
62 "P3M GPU only implemented in single-precision mode");
65 return fptr(std::move(p3m_params), tuning_params, prefactor);
std::shared_ptr< CoulombP3M > new_coulomb_p3m_heffte(P3MParameters &&p3m_params, TuningParameters const &tuning_params, double prefactor, bool single_precision, Arch arch)