32#include <Kokkos_Core.hpp>
72 auto const thread_id = omp_get_thread_num();
76 auto const &iaparams = *bonded_ias.at(bond_id);
78 auto const pos1 = aosoa.get_vector_at(aosoa.position, i);
79 auto const pos2 = aosoa.get_vector_at(aosoa.position, j);
80 auto const dx = box_geo.get_mi_vector(pos1, pos2);
83 iaparams, dx, pos1, pos2,
84#ifdef ESPRESSO_ELECTROSTATICS
92 local_energy(thread_id, layout.bonded_idx(bond_id)) += energy.value();
94 auto partner_id = aosoa.id(j);
122 auto const thread_id = omp_get_thread_num();
127 auto const &iaparams = *bonded_ias.at(bond_id);
129 auto const pos1 = aosoa.get_vector_at(aosoa.position, i);
130 auto const pos2 = aosoa.get_vector_at(aosoa.position, j);
131 auto const pos3 = aosoa.get_vector_at(aosoa.position, k);
132 auto const vec1 = box_geo.get_mi_vector(pos2, pos1);
133 auto const vec2 = box_geo.get_mi_vector(pos3, pos1);
135 std::optional<double> energy =
139 local_energy(thread_id, layout.bonded_idx(bond_id)) += energy.value();
141 std::array<int, 2> pids = {aosoa.id(j), aosoa.id(k)};
169 auto const thread_id = omp_get_thread_num();
175 auto const &iaparams = *bonded_ias.at(bond_id);
177 auto const pos1 = aosoa.get_vector_at(aosoa.position, i);
178 auto const pos2 = aosoa.get_vector_at(aosoa.position, j);
179 auto const pos3 = aosoa.get_vector_at(aosoa.position, k);
180 auto const pos4 = aosoa.get_vector_at(aosoa.position, m);
181 auto const v12 = box_geo.get_mi_vector(pos1, pos2);
182 auto const v23 = box_geo.get_mi_vector(pos3, pos1);
183 auto const v34 = box_geo.get_mi_vector(pos4, pos3);
185 std::optional<double> energy =
189 local_energy(thread_id, layout.bonded_idx(bond_id)) += energy.value();
191 std::array<int, 3> pids = {aosoa.id(j), aosoa.id(k), aosoa.id(m)};
Vector implementation and trait types for boost qvm interoperability.
#define ESPRESSO_ATTR_ALWAYS_INLINE
void bond_broken_error(int id, std::span< const int > partner_ids)
container for bonded interactions.
std::optional< double > calc_dihedral_bonded_energy(Bonded_IA_Parameters const &iaparams, Utils::Vector3d const &v12, Utils::Vector3d const &v23, Utils::Vector3d const &v34)
std::optional< double > calc_pair_bonded_energy(Bonded_IA_Parameters const &iaparams, Utils::Vector3d const &dx, Utils::Vector3d const &pos1, Utils::Vector3d const &pos2, double q1q2, Coulomb::ShortRangeEnergyKernel::kernel_type const *kernel)
std::optional< double > calc_angle_bonded_energy(Bonded_IA_Parameters const &iaparams, Utils::Vector3d const &vec1, Utils::Vector3d const &vec2)
ESPRESSO_ATTR_ALWAYS_INLINE KOKKOS_INLINE_FUNCTION void operator()(std::size_t idx) const
BondsEnergyKernelData data
AngleBondsEnergyKernel(BondsEnergyKernelData data_, LocalBondState::AngleBondlistType bond_list_, LocalBondState::AngleBondIDType bond_ids_)
LocalBondState::AngleBondlistType bond_list
LocalBondState::AngleBondIDType bond_ids
BondedInteractionsMap const & bonded_ias
Kokkos::View< double **, Kokkos::LayoutRight > local_energy
BoxGeometry const & box_geo
CellStructure::AoSoA_pack const & aosoa
Solver::ShortRangeEnergyKernel kernel_type
DihedralBondsEnergyKernel(BondsEnergyKernelData data_, LocalBondState::DihedralBondlistType bond_list_, LocalBondState::DihedralBondIDType bond_ids_)
LocalBondState::DihedralBondlistType bond_list
BondsEnergyKernelData data
ESPRESSO_ATTR_ALWAYS_INLINE KOKKOS_INLINE_FUNCTION void operator()(std::size_t idx) const
LocalBondState::DihedralBondIDType bond_ids
ESPRESSO_ATTR_ALWAYS_INLINE KOKKOS_INLINE_FUNCTION void operator()(std::size_t idx) const
Coulomb::ShortRangeEnergyKernel::kernel_type const *const coulomb_u_kernel
BondsEnergyKernelData data
LocalBondState::PairBondIDType bond_ids
PairBondsEnergyKernel(BondsEnergyKernelData data_, LocalBondState::PairBondlistType bond_list_, LocalBondState::PairBondIDType bond_ids_, Coulomb::ShortRangeEnergyKernel::kernel_type const *coulomb_u_kernel_)
LocalBondState::PairBondlistType bond_list