17#include <Cabana_Core.hpp>
27template <
class DEVICE_TYPE = DeviceType,
bool DEVICE = true>
48 using MoleculesT = Cabana::AoSoA<DataTypes, typename DEVICE_TYPE::memory_space, VECTOR_LENGTH>;
64 return modulatedLambda;
72 pos = Cabana::slice<POS>(molecules_);
73 force = Cabana::slice<FORCE>(molecules_);
74 lambda = Cabana::slice<LAMBDA>(molecules_);
75 modulatedLambda = Cabana::slice<MODULATED_LAMBDA>(molecules_);
76 gradLambda = Cabana::slice<GRAD_LAMBDA>(molecules_);
77 atomsOffset = Cabana::slice<ATOMS_OFFSET>(molecules_);
78 numAtoms = Cabana::slice<NUM_ATOMS>(molecules_);
87 molecules_.resize(
size);
106 lambda(
dst) = lambda(
src);
107 modulatedLambda(
dst) = modulatedLambda(
src);
108 atomsOffset(
dst) = atomsOffset(
src);
109 numAtoms(
dst) = numAtoms(
src);
126 Cabana::deep_copy(pos, 0
_r);
127 Cabana::deep_copy(force, 0
_r);
128 Cabana::deep_copy(lambda, 0
_r);
129 Cabana::deep_copy(modulatedLambda, 0
_r);
130 Cabana::deep_copy(gradLambda, 0
_r);
131 Cabana::deep_copy(atomsOffset, 0);
132 Cabana::deep_copy(numAtoms, 0);
135 template <
class DEVICE_TYPE_SRC,
bool DEVICE_SRC>
151template <
class DEVICE_TYPE_A,
bool DEVICE_A,
class DEVICE_TYPE_B,
bool DEVICE_B>
155 dst.numLocalMolecules =
src.numLocalMolecules;
156 dst.numGhostMolecules =
src.numGhostMolecules;
158 Cabana::deep_copy(
dst.getAoSoA(),
src.getAoSoA());
164template <
class DEVICE_TYPE,
bool DEVICE>
165template <
class DEVICE_TYPE_SRC,
bool DEVICE_SRC>
168 : molecules_(
"molecules", molecules.size())
Definition Molecules.hpp:29
typename MoleculesT::template member_slice_type< GRAD_LAMBDA > grad_lambda_t
Definition Molecules.hpp:54
KOKKOS_INLINE_FUNCTION auto numSoA() const
Definition Molecules.hpp:82
void setForce(const real_t &val) const
Definition Molecules.hpp:60
KOKKOS_FORCEINLINE_FUNCTION atoms_offset_t getAtomsOffset() const
Definition Molecules.hpp:67
KOKKOS_FORCEINLINE_FUNCTION num_atoms_t getNumAtoms() const
Definition Molecules.hpp:68
Cabana::AoSoA< DataTypes, typename DEVICE_TYPE::memory_space, VECTOR_LENGTH > MoleculesT
Definition Molecules.hpp:48
typename MoleculesT::template member_slice_type< MODULATED_LAMBDA > modulated_lambda_t
Definition Molecules.hpp:53
KOKKOS_FORCEINLINE_FUNCTION force_t getForce() const
Definition Molecules.hpp:59
void sliceAll()
Definition Molecules.hpp:70
KOKKOS_INLINE_FUNCTION void copy(const idx_t dst, const idx_t src) const
Definition Molecules.hpp:98
void resize(size_t size)
Definition Molecules.hpp:85
KOKKOS_INLINE_FUNCTION auto arraySize(size_t s) const
Definition Molecules.hpp:83
KOKKOS_FORCEINLINE_FUNCTION pos_t getPos() const
Definition Molecules.hpp:58
typename MoleculesT::template member_slice_type< FORCE > force_t
Definition Molecules.hpp:51
typename MoleculesT::template member_slice_type< LAMBDA > lambda_t
Definition Molecules.hpp:52
KOKKOS_INLINE_FUNCTION idx_t size() const
Definition Molecules.hpp:81
KOKKOS_FORCEINLINE_FUNCTION modulated_lambda_t getModulatedLambda() const
Definition Molecules.hpp:62
typename MoleculesT::template member_slice_type< NUM_ATOMS > num_atoms_t
Definition Molecules.hpp:56
Cabana::MemberTypes< real_t[DIMENSIONS], real_t[DIMENSIONS], real_t, real_t, real_t[DIMENSIONS], idx_t, idx_t > DataTypes
Definition Molecules.hpp:47
GeneralMolecules(const idx_t numMolecules)
Definition Molecules.hpp:123
idx_t numGhostMolecules
Definition Molecules.hpp:121
KOKKOS_FORCEINLINE_FUNCTION lambda_t getLambda() const
Definition Molecules.hpp:61
typename MoleculesT::template member_slice_type< ATOMS_OFFSET > atoms_offset_t
Definition Molecules.hpp:55
idx_t numLocalMolecules
Definition Molecules.hpp:120
KOKKOS_INLINE_FUNCTION void permute(LinkedCellList &linkedCellList) const
Definition Molecules.hpp:92
auto & getAoSoA() const
Definition Molecules.hpp:118
KOKKOS_FORCEINLINE_FUNCTION grad_lambda_t getGradLambda() const
Definition Molecules.hpp:66
Props
Definition Molecules.hpp:32
@ FORCE
Definition Molecules.hpp:34
@ NUM_ATOMS
number of atoms for this molecule
Definition Molecules.hpp:39
@ GRAD_LAMBDA
Definition Molecules.hpp:37
@ ATOMS_OFFSET
offset into atoms array
Definition Molecules.hpp:38
@ MODULATED_LAMBDA
Definition Molecules.hpp:36
@ LAMBDA
Definition Molecules.hpp:35
@ POS
Definition Molecules.hpp:33
void removeGhostMolecules()
Definition Molecules.hpp:112
typename MoleculesT::template member_slice_type< POS > pos_t
Definition Molecules.hpp:50
impl::GeneralMolecules< DeviceType, true > DeviceMolecules
Definition Molecules.hpp:175
void deep_copy(impl::GeneralAtoms< DEVICE_TYPE_A, DEVICE_A > &dst, const impl::GeneralAtoms< DEVICE_TYPE_B, DEVICE_B > &src)
Definition Atoms.hpp:151
KOKKOS_INLINE_FUNCTION constexpr idx_t idx_c(const T &val)
Definition datatypes.hpp:93
static constexpr int DIMENSIONS
number of spatial dimensions
Definition constants.hpp:24
Cabana::LinkedCellList< typename DeviceType::memory_space > LinkedCellList
Definition datatypes.hpp:179
int64_t idx_t
Definition datatypes.hpp:91
double real_t
Definition datatypes.hpp:99