33 VectorAttribute>::solve() {
34 static IpplTimings::TimerRef solveTimer =
35 IpplTimings::getTimer(
"TruncatedGreenParticleInteraction::solve()");
36 IpplTimings::startTimer(solveTimer);
38 auto&
Field = Field_m;
40 const auto& QM = QM_m;
43 const auto rcut2 = std::pow<Scalar_t>(this->params_m.template get<Scalar_t>(
"rcut"), 2);
44 const auto alpha = this->params_m.template get<Scalar_t>(
"alpha");
45 const auto forceConstant = this->params_m.template get<Scalar_t>(
"force_constant");
47 const auto& particleLayout = this->pc_m.getLayout();
49 particleLayout.template forEachPair<execution_space>(
50 KOKKOS_LAMBDA(
const size_t& i,
const size_t& j) {
51 const Vector_t dist_ij = R(i) - R(j);
52 const Scalar_t rsq_ij = dist_ij.dot(dist_ij);
54 if (rsq_ij >= rcut2) {
58 const auto F_ij = fieldFromPair(dist_ij, rsq_ij, alpha, forceConstant, QM(j));
62 Kokkos::atomic_sub(&
Field(i), F_ij);
64 IpplTimings::stopTimer(solveTimer);