24#ifdef ESPRESSO_SCAFACOS_DIPOLES
31#include "communication.hpp"
32#include "system/System.hpp"
43std::shared_ptr<DipolarScafacos>
51 auto const &box_geo = *
system.box_geo;
52 auto const &cell_structure = *
system.cell_structure;
57 for (
auto const &p : cell_structure.local_particles()) {
58 auto const pos = box_geo.folded_position(p.pos());
59 positions.push_back(pos[0]);
60 positions.push_back(pos[1]);
61 positions.push_back(pos[2]);
62 auto const dip = p.calc_dip();
63 dipoles.push_back(dip[0]);
64 dipoles.push_back(dip[1]);
65 dipoles.push_back(dip[2]);
70 if (positions.empty())
73 auto const &cell_structure = *
get_system().cell_structure;
76 auto index = std::size_t{0
ul};
77 for (
auto &p : cell_structure.local_particles()) {
80 auto const dip = p.calc_dip();
90 {fields[index + 0
ul], fields[index + 1ul], fields[index + 2ul]},
91 {fields[index + 1ul], fields[index + 3ul], fields[index + 4ul]},
92 {fields[index + 2ul], fields[index + 4ul], fields[index + 5ul]}};
93 auto const f =
G * dip;
Vector implementation and trait types for boost qvm interoperability.
double prefactor
Magnetostatics prefactor.
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
boost::mpi::communicator comm_cart
The communicator.
__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.