54 auto const &actor = *ptr;
58 return actor.pair_force(p1, p2, d, dist2, dist);
64 operator()(std::shared_ptr<DipolarLayerCorrection>
const &ptr)
const {
65 return std::visit(*
this, ptr->base_solver);
83 auto const &actor = *ptr;
87 return actor.pair_energy(p1, p2, d, dist2, dist);
93 operator()(std::shared_ptr<DipolarLayerCorrection>
const &ptr)
const {
94 return std::visit(*
this, ptr->base_solver);
99inline std::optional<Solver::ShortRangeForceKernel>
102 if (
auto &solver =
impl->solver; solver.has_value()) {
104 return std::visit(visitor, *solver);
110inline std::optional<Solver::ShortRangeEnergyKernel>
113 if (
auto &solver =
impl->solver; solver.has_value()) {
115 return std::visit(visitor, *solver);
Vector implementation and trait types for boost qvm interoperability.
This file contains the defaults for ESPResSo.
P3M algorithm for long-range magnetic dipole-dipole interaction.
result_type operator()(std::shared_ptr< T > const &) const
std::optional< kernel_type > result_type
result_type operator()(std::shared_ptr< DipolarLayerCorrection > const &ptr) const
Solver::ShortRangeEnergyKernel kernel_type
result_type operator()(std::shared_ptr< DipolarP3M > const &ptr) const
result_type operator()(std::shared_ptr< DipolarLayerCorrection > const &ptr) const
std::optional< kernel_type > result_type
result_type operator()(std::shared_ptr< T > const &) const
Solver::ShortRangeForceKernel kernel_type
result_type operator()(std::shared_ptr< DipolarP3M > const &ptr) const
std::optional< ShortRangeForceKernel > pair_force_kernel() const
std::unique_ptr< Implementation > impl
Pointer-to-implementation.
std::function< double(Particle const &, Particle const &, Utils::Vector3d const &, double, double)> ShortRangeEnergyKernel
std::function< ParticleForce(Particle const &, Particle const &, Utils::Vector3d const &, double, double)> ShortRangeForceKernel
std::optional< ShortRangeEnergyKernel > pair_energy_kernel() const
Struct holding all information for one particle.