7#ifndef VECTORIZEDCELLPROCESSOR_H_
8#define VECTORIZEDCELLPROCESSOR_H_
10#include "CellProcessor.h"
16#include "vectorization/SIMD_VectorizedCellProcessorHelpers.h"
17#include "WrapOpenMP.h"
19#include "molecules/MoleculeForwardDeclaration.h"
30 friend class VCP1CLJRMMTest;
32 typedef std::vector<Component> ComponentList;
78 typedef std::vector<Molecule *> MoleculeList;
97 const double _epsRFInvrc3;
112 std::vector<AlignedArray<vcp_real_calc> > _eps_sig;
118 std::vector<AlignedArray<vcp_real_calc> > _shift6;
140 struct VLJCPThreadData {
142 VLJCPThreadData(): _ljc_dist_lookup(nullptr), _charges_dist_lookup(nullptr), _dipoles_dist_lookup(nullptr), _quadrupoles_dist_lookup(nullptr){
143 _upot6ljV.resize(_numVectorElements);
144 _upotXpolesV.resize(_numVectorElements);
145 _virialV.resize(_numVectorElements);
146 _myRFV.resize(_numVectorElements);
148 for (
size_t j = 0; j < _numVectorElements; ++j) {
150 _upotXpolesV[j] = 0.0;
166 vcp_lookupOrMask_single* _ljc_dist_lookup;
171 vcp_lookupOrMask_single* _charges_dist_lookup;
176 vcp_lookupOrMask_single* _dipoles_dist_lookup;
181 vcp_lookupOrMask_single* _quadrupoles_dist_lookup;
186 std::vector<VLJCPThreadData *> _threadData;
188 static const size_t _numVectorElements = VCP_VEC_SIZE;
191 template<
bool calculateMacroscopic>
192 inline void _loopBodyLJ(
204 template<
bool calculateMacroscopic>
205 inline void _loopBodyCharge(
217 template<
bool calculateMacroscopic>
218 inline void _loopBodyChargeDipole(
232 template<
bool calculateMacroscopic>
233 inline void _loopBodyDipole(
250 template<
bool calculateMacroscopic>
251 inline void _loopBodyChargeQuadrupole(
265 template<
bool calculateMacroscopic>
266 inline void _loopBodyDipoleQuadrupole(
282 template<
bool calculateMacroscopic>
283 inline void _loopBodyQuadrupole(
318 template<
class ForcePolicy,
bool CalculateMacroscopic,
class MaskGatherChooser>
Defines the length of the vectors and the corresponding functions.
An aligned array.
Definition: AlignedArray.h:75
Structure of Arrays for vectorized force calculation.
Definition: CellDataSoA.h:22
Definition: CellProcessor.h:29
Definition: Comp2Param.h:15
Class implementing molecules as rigid rotators consisting out of different interaction sites (LJcente...
Definition: Component.h:14
This class is used to read in the phasespace and to handle macroscopic values.
Definition: Domain.h:47
FullMolecule modeled as LJ sphere with point polarities.
Definition: FullMolecule.h:18
FullParticleCell data structure. Renamed from ParticleCell.
Definition: FullParticleCell.h:49
Vectorized calculation of the force.
Definition: VectorizedCellProcessor.h:29
void preprocessCell(ParticleCell &)
Load the CellDataSoA for cell.
Definition: VectorizedCellProcessor.h:51
void postprocessCell(ParticleCell &)
Free the LennardJonesSoA for cell.
Definition: VectorizedCellProcessor.h:67
void processCellPair(ParticleCell &cell1, ParticleCell &cell2, bool sumAll=false)
Definition: VectorizedCellProcessor.cpp:2746
void endTraversal()
Store macroscopic values in the Domain.
Definition: VectorizedCellProcessor.cpp:124
void processCell(ParticleCell &cell)
Calculate forces between pairs of Molecules in cell.
Definition: VectorizedCellProcessor.cpp:2734
void initTraversal()
Reset macroscopic values to 0.0.
Definition: VectorizedCellProcessor.cpp:111
VectorizedCellProcessor(Domain &domain, double cutoffRadius, double LJcutoffRadius)
Construct and set up the internal parameter table.
Definition: VectorizedCellProcessor.cpp:21