6#ifndef CONCATENATEDSITES_H
7#define CONCATENATEDSITES_H
9#include "AlignedArrayTriplet.h"
10#include "utils/mardyn_assert.h"
11#include "../particleContainer/adapter/vectorization/SIMD_TYPES.h"
26 LJC, CHARGE, DIPOLE, QUADRUPOLE
44 size_t dipoles_num = 0,
size_t quadrupoles_num = 0) {
45 resize(ljc_num, charges_num, dipoles_num, quadrupoles_num);
56 T* returnPointer =
nullptr;
59 case ConcSites::CoordinateType::X:
60 returnPointer = _data.xBegin();
62 case ConcSites::CoordinateType::Y:
63 returnPointer = _data.yBegin();
65 case ConcSites::CoordinateType::Z:
66 returnPointer = _data.zBegin();
70 mardyn_assert(returnPointer !=
nullptr);
73 case ConcSites::SiteType::QUADRUPOLE:
76 case ConcSites::SiteType::DIPOLE:
79 case ConcSites::SiteType::CHARGE:
82 case ConcSites::SiteType::LJC:
90 const T* returnPointer =
nullptr;
94 case ConcSites::SiteType::QUADRUPOLE:
97 case ConcSites::SiteType::DIPOLE:
100 case ConcSites::SiteType::CHARGE:
103 case ConcSites::SiteType::LJC:
108 case ConcSites::CoordinateType::X:
109 returnPointer = _data.xBegin() + offset;
111 case ConcSites::CoordinateType::Y:
112 returnPointer = _data.yBegin() + offset;
114 case ConcSites::CoordinateType::Z:
115 returnPointer = _data.zBegin() + offset;
119 mardyn_assert(returnPointer !=
nullptr);
121 return returnPointer;
128 std::array<T, 3> retArray;
129 retArray[0] =
getBeginPointer(st, ConcSites::CoordinateType::X)[index];
130 retArray[1] =
getBeginPointer(st, ConcSites::CoordinateType::Y)[index];
131 retArray[2] =
getBeginPointer(st, ConcSites::CoordinateType::Z)[index];
151 void resize(
size_t ljc_num,
size_t charges_num,
size_t dipoles_num,
size_t quadrupoles_num) {
153 _charges_num = charges_num;
154 _dipoles_num = dipoles_num;
155 _quadrupoles_num = quadrupoles_num;
163 _data.resize_zero_shrink(num_centers);
164 setPaddingToZero(_data);
183 size_t _quadrupoles_num;
189 size_t ljc_size = t._round_up(_ljc_num);
190 size_t charges_size = t._round_up(_charges_num);
191 size_t dipoles_size = t._round_up(_dipoles_num);
194 t.zero(ljc_size + _charges_num);
195 t.zero(ljc_size + charges_size + _dipoles_num);
196 t.zero(ljc_size + charges_size + dipoles_size + _quadrupoles_num);
Definition: AlignedArrayTriplet.h:15
An aligned array.
Definition: AlignedArray.h:75
Class to manage the storage of ljc-, charge-, dipole- and quadrupole-data in one single AlignedArrayT...
Definition: ConcatenatedSites.h:37
void resize(size_t ljc_num, size_t charges_num, size_t dipoles_num, size_t quadrupoles_num)
Resize the ConcatenatedSites to have enough space for the given number of elements.
Definition: ConcatenatedSites.h:151
vcp_inline void setTriplet(std::array< T, 3 > values, ConcSites::SiteType st, size_t index)
Set the value triplet X,Y,Z of ConcSites::SiteType st at position index to given values.
Definition: ConcatenatedSites.h:138
vcp_inline T * getBeginPointer(ConcSites::SiteType st, ConcSites::CoordinateType coord)
Get a Pointer to the beginning of the specified data.
Definition: ConcatenatedSites.h:55
vcp_inline std::array< T, 3 > getTriplet(ConcSites::SiteType st, size_t index) const
Get the value triplet X,Y,Z of ConcSites::SiteType st at position index.
Definition: ConcatenatedSites.h:127
size_t get_dynamic_memory() const
Get the size of currently occupied memory.
Definition: ConcatenatedSites.h:171
Definition: ConcatenatedSites.h:14
SiteType
Specify which of the 4 data-categories is needed.
Definition: ConcatenatedSites.h:25
CoordinateType
What coordinate would you like to have?
Definition: ConcatenatedSites.h:18