ls1-MarDyn
ls1-MarDyn molecular dynamics code
HalfShellTraversal.h
1/*
2 * HalfShellTraversal.h
3 *
4 * Created on: 08.06.2017
5 * Author: sauermann
6 */
7
8#ifndef SRC_PARTICLECONTAINER_LINKEDCELLTRAVERSALS_HALFSHELLTRAVERSAL_H_
9#define SRC_PARTICLECONTAINER_LINKEDCELLTRAVERSALS_HALFSHELLTRAVERSAL_H_
10
11#include "particleContainer/LinkedCellTraversals/OriginalCellPairTraversal.h"
12
14};
15
16template <class CellTemplate>
17class HalfShellTraversal: public OriginalCellPairTraversal<CellTemplate> {
19
20 bool requiresForceExchange() const override {return true;}
21public:
22
23 void processBaseCell(CellProcessor& cellProcessor, unsigned long cellIndex) const override;
24};
25
26template<class CellTemplate>
27inline void HalfShellTraversal<CellTemplate>::processBaseCell(CellProcessor& cellProcessor, unsigned long cellIndex) const{
28
29 CellTemplate& currentCell = this->_cells->at(cellIndex);
30 if (!currentCell.isHaloCell()) {
31 cellProcessor.processCell(currentCell);
32 // loop over all forward neighbours
33 for (auto& neighbourOffset : this->_forwardNeighbourOffsets) {
34 CellTemplate& neighbourCell = this->_cells->at(cellIndex + neighbourOffset);
35
36 const bool sumAllMacroscopic = true;
37 cellProcessor.processCellPair(currentCell, neighbourCell, sumAllMacroscopic);
38 }
39 }
40}
41
42#endif /* SRC_PARTICLECONTAINER_LINKEDCELLTRAVERSALS_HALFSHELLTRAVERSAL_H_ */
Definition: CellProcessor.h:29
virtual void processCell(ParticleCell &cell)=0
virtual void processCellPair(ParticleCell &cell1, ParticleCell &cell2, bool sumAll=false)=0
Definition: HalfShellTraversal.h:17
Definition: OriginalCellPairTraversal.h:21
Definition: HalfShellTraversal.h:13
Definition: OriginalCellPairTraversal.h:17