24#ifdef SCAFACOS_DIPOLES
31#include "communication.hpp"
32#include "system/System.hpp"
42std::shared_ptr<DipolarScafacos>
44 std::string
const ¶meters) {
45 return std::make_shared<DipolarScafacosImpl>(
comm_cart, method, parameters);
50 auto const &box_geo = *system.box_geo;
51 auto const &cell_structure = *system.cell_structure;
56 for (
auto const &p : cell_structure.local_particles()) {
57 auto const pos = box_geo.folded_position(p.pos());
58 positions.push_back(
pos[0]);
59 positions.push_back(
pos[1]);
60 positions.push_back(
pos[2]);
61 auto const dip = p.calc_dip();
62 dipoles.push_back(dip[0]);
63 dipoles.push_back(dip[1]);
64 dipoles.push_back(dip[2]);
69 if (positions.empty())
72 auto const &cell_structure = *
get_system().cell_structure;
74 auto it_potentials = potentials.begin();
75 auto it_f = std::size_t{0ul};
76 for (
auto &p : cell_structure.local_particles()) {
79 auto const dip = p.calc_dip();
89 {fields[it_f + 0ul], fields[it_f + 1ul], fields[it_f + 2ul]},
90 {fields[it_f + 1ul], fields[it_f + 3ul], fields[it_f + 4ul]},
91 {fields[it_f + 2ul], fields[it_f + 4ul], fields[it_f + 5ul]}};
92 auto const f = G * dip;
102 assert(it_potentials == potentials.end());
Vector implementation and trait types for boost qvm interoperability.
__shared__ int pos[MAXDEPTH *THREADS5/WARPSIZE]
double prefactor
Magnetostatics prefactor.
A stripped-down version of std::span from C++17.
boost::mpi::communicator comm_cart
The communicator.
This file contains the defaults for ESPResSo.
__device__ void vector_product(float const *a, float const *b, float *out)
std::shared_ptr< DipolarScafacos > make_dipolar_scafacos(std::string const &method, std::string const ¶meters)
Matrix implementation and trait types for boost qvm interoperability.
void update_particle_data() override
void update_particle_forces() const override
Matrix representation with static size.