7 #ifndef NIHU_FMM_PRECOMPUTE_HPP_INCLUDED
8 #define NIHU_FMM_PRECOMPUTE_HPP_INCLUDED
16 #include <type_traits>
23 template <class Op, class FmmTag = typename std::decay<Op>::type::fmm_tag>
30 template <
class ClusterDerived>
33 std::cout <<
"Precomputing M2L" << std::endl;
34 return create_x2x_precompute(std::forward<Op>(op), lists.
get_list(lists.M2L));
43 template <
class ClusterDerived>
46 std::cout <<
"Precomputing M2M" << std::endl;
47 return create_x2x_precompute(std::forward<Op>(op), lists.
get_list(lists.M2M));
56 template <
class ClusterDerived>
59 std::cout <<
"Precomputing L2L" << std::endl;
60 return create_x2x_precompute(std::forward<Op>(op), lists.
get_list(lists.L2L));
69 template <
class ClusterDerived>
72 std::cout <<
"Precomputing P2M" << std::endl;
73 return create_p2x_precompute(std::forward<Op>(op), tree);
82 template <
class ClusterDerived>
85 std::cout <<
"Precomputing P2L" << std::endl;
86 return create_p2x_precompute(std::forward<Op>(op), tree, lists.
get_list(lists.P2L));
95 template <
class ClusterDerived>
98 std::cout <<
"Precomputing M2M" << std::endl;
99 return create_x2p_precompute(std::forward<Op>(op), tree, lists.
get_list(lists.M2P));
108 template <
class ClusterDerived>
111 std::cout <<
"Precomputing L2P" << std::endl;
112 return create_x2p_precompute(std::forward<Op>(op), tree);
121 template <
class ClusterDerived>
124 std::cout <<
"Precomputing P2P" << std::endl;
130 template <
class Op,
class Tree>
131 auto create_precompute(Op &&op, Tree
const &tree,
interaction_lists const &lists)
136 template <
class ClusterDerived>
146 auto operator()(Op &&op)
const
148 return create_precompute(std::forward<Op>(op), m_tree, m_lists);
155 template <
class ClusterDerived>