43#include <Cabana_Core.hpp>
94 return off_bonded +
static_cast<std::size_t
>(b);
137 auto const dist = d.norm();
149#ifdef ESPRESSO_EXCLUSIONS
158#ifdef ESPRESSO_GAY_BERNE
177 for (std::size_t k = 0; k < 9; ++k)
185 auto const dist2 = d.
norm2();
192 for (std::size_t k = 0; k < 9; ++k)
200#ifdef ESPRESSO_ELECTROSTATICS
205 for (std::size_t k = 0; k < 9; ++k)
215 Kokkos::View<double **, Kokkos::LayoutRight>
const &local_pressure,
218 auto const nthreads = local_pressure.extent(0);
220 Kokkos::create_mirror_view_and_copy(Kokkos::HostSpace{}, local_pressure);
223 for (std::size_t k = 0; k < 9; ++k) {
225 for (std::size_t t = 0; t <
nthreads; ++t)
234 for (
int t1 = 0;
t1 < n_types; ++
t1)
237 obs.non_bonded_inter_contribution(
t1,
t2));
239 for (
int t1 = 0;
t1 < n_types; ++
t1)
242 obs.non_bonded_intra_contribution(
t1,
t2));
244 if (!
obs.coulomb.empty())
246 if (!
obs.dipolar.empty())
248 if (!
obs.dpd.empty())
Vector implementation and trait types for boost qvm interoperability.
Data structures for bonded interactions.
container for bonded interactions.
ESPRESSO_ATTR_ALWAYS_INLINE Utils::Vector3< T > get_mi_vector(Utils::Vector3< T > const &a, Utils::Vector3< T > const &b) const
Get the minimum-image vector between two coordinates.
Utils::Vector3d velocity_difference(Utils::Vector3d const &x, Utils::Vector3d const &y, Utils::Vector3d const &u, Utils::Vector3d const &v) const
Calculate the velocity difference including the Lees-Edwards velocity.
auto & get_ia_param(int i, int j)
Get interaction parameters between particle types i and j.
Observable for the pressure and energy.
constexpr T norm2() const
cudaStream_t stream[1]
CUDA streams for parallel computing on CPU and GPU.
Utils::Vector3d dpd_pair_force(Utils::Vector3d const &p1_position, Utils::Vector3d const &p1_velocity, int p1_id, Utils::Vector3d const &p2_position, Utils::Vector3d const &p2_velocity, int p2_id, DPDThermostat const &dpd, BoxGeometry const &box_geo, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist, double dist2)
Routines to use DPD as thermostat or pair force .
bool do_nonbonded(Particle const &p1, Particle const &p2)
Determine if the non-bonded interactions between p1 and p2 should be calculated.
ParticleForce calc_non_central_force(Particle const &p1, Particle const &p2, IA_parameters const &ia_params, Utils::Vector3d const &d, double const dist)
ESPRESSO_ATTR_ALWAYS_INLINE Utils::Vector3d calc_central_radial_force(IA_parameters const &ia_params, Utils::Vector3d const &d, double const dist)
void flatten(Range const &v, OutputIterator out)
Flatten a range of ranges.
T lower_triangular(T i, T j)
Linear index into a lower triangular matrix.
Matrix< T, N, M > tensor_product(const Vector< T, N > &x, const Vector< T, M > &y)
Various procedures concerning interactions between particles.
static void reduce_cabana_pressure(Kokkos::View< double **, Kokkos::LayoutRight > const &local_pressure, PressureBinLayout const &layout, Observable_stat &obs, BondedInteractionsMap const &bonded_ias, int n_types)
ESPRESSO_ATTR_ALWAYS_INLINE KOKKOS_INLINE_FUNCTION bool gay_berne_active(double dist, IA_parameters const &ia_params)
KOKKOS_INLINE_FUNCTION bool thole_active(IA_parameters const &ia_params, bool has_coulomb_kernel)
ESPRESSO_ATTR_ALWAYS_INLINE KOKKOS_INLINE_FUNCTION bool dpd_active(IA_parameters const &ia_params, int thermo_switch)
bool has_exclusion(std::size_t i) const
PositionViewType position
Utils::Vector< T, N > get_vector_at(Kokkos::View< T *[N], array_layout, Kokkos::HostSpace > const &view, std::size_t i) const
DirectorViewType director
VelocityViewType velocity
Solver::ShortRangeForceKernel kernel_type
Solver::ShortRangePressureKernel kernel_type
KOKKOS_INLINE_FUNCTION std::size_t dpd_idx() const
KOKKOS_INLINE_FUNCTION std::size_t tensor_offset(std::size_t bin, std::size_t k) const
KOKKOS_INLINE_FUNCTION std::size_t coulomb_idx() const
KOKKOS_INLINE_FUNCTION std::size_t nb_intra_idx(int t1, int t2) const
KOKKOS_INLINE_FUNCTION std::size_t bonded_idx(int b) const
PressureBinLayout(std::size_t n_bonded_, std::size_t n_types_)
KOKKOS_INLINE_FUNCTION std::size_t dipolar_idx() const
KOKKOS_INLINE_FUNCTION std::size_t nb_inter_idx(int t1, int t2) const
Coulomb::ShortRangePressureKernel::kernel_type const * coulomb_p_kernel
Coulomb::Solver const & coulomb
Kokkos::View< int * > mol_id_view
InteractionsNonBonded const & nonbonded_ias
Kokkos::View< double **, Kokkos::LayoutRight > local_pressure
KOKKOS_INLINE_FUNCTION void operator()(std::size_t i, std::size_t j) const
std::vector< Particle * > const & unique_particles
BondedInteractionsMap const & bonded_ias
Coulomb::ShortRangeForceKernel::kernel_type const * coulomb_f_kernel
PressureKernel(BondedInteractionsMap const &bonded_ias_, InteractionsNonBonded const &nonbonded_ias_, Coulomb::Solver const &coulomb_, Coulomb::ShortRangeForceKernel::kernel_type const *coulomb_f_kernel_, Coulomb::ShortRangePressureKernel::kernel_type const *coulomb_p_kernel_, BoxGeometry const &box_geo_, std::vector< Particle * > const &unique_particles_, Kokkos::View< double **, Kokkos::LayoutRight > const &local_pressure_, PressureBinLayout layout_, CellStructure::AoSoA_pack const &aosoa_, Kokkos::View< int * > mol_id_view_, double system_max_cutoff_, int thermo_switch_)
CellStructure::AoSoA_pack const & aosoa
BoxGeometry const & box_geo
Utils::Vector3d thole_pair_force(Particle const &p1, Particle const &p2, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist, BondedInteractionsMap const &bonded_ias, Coulomb::ShortRangeForceKernel::kernel_type const *kernel)
Calculate Thole force.