ls1-MarDyn
ls1-MarDyn molecular dynamics code
ParticlePairs2LoadCalcAdapter.h
1#ifndef PARTICLEPAIRS2LOADCALCADAPTER_H_
2#define PARTICLEPAIRS2LOADCALCADAPTER_H_
3
4#include "particleContainer/handlerInterfaces/ParticlePairsHandler.h"
5#include "utils/Logger.h"
6
11public:
14 }
15
16 ParticlePairs2LoadCalcAdapter(int globalCellsPerDim[3], int lowCorner[3], double cellSize[3], ParticleContainer* moleculeContainer) {
17 for (int dim = 0; dim < 3; dim++) {
18 _globalCellsPerDim[dim] = globalCellsPerDim[dim];
19 _lowCorner[dim] = lowCorner[dim];
20 _cellSize[dim] = cellSize[dim];
21 }
22 _globalNumCells = _globalCellsPerDim[0] * _globalCellsPerDim[1] * _globalCellsPerDim[2];
23 _globalLoadPerCell = new float[_globalNumCells];
24
25 for (int dim = 0; dim < 3; dim++) {
26 _bBMin[dim] = moleculeContainer->getBoundingBoxMin(dim);
27 }
28 for (unsigned int i = 0; i < _globalNumCells; i++) {
29 _globalLoadPerCell[i] = 0.0;
30 }
31 _localLoad = 0.0;
32 }
33
36 delete[] _globalLoadPerCell;
37 }
38
40 void init() {
41 }
42
44 void finish() {
45 float* temp = new float[_globalNumCells];
46 MPI_CHECK( MPI_Allreduce(_globalLoadPerCell, temp, _globalNumCells, MPI_FLOAT, MPI_SUM, MPI_COMM_WORLD) );
47 delete[] _globalLoadPerCell;
48 _globalLoadPerCell = temp;
49 //cout << "LocalLoad: " << _localLoad << endl;
50 }
51
57 double processPair(Molecule& particle1, Molecule& particle2, double distanceVector[3],
58 PairType pairType, double dd, bool calculateLJ, double* force = NULL) {
59 if (pairType == MOLECULE_MOLECULE) {
60 int cellIndex[3]; // 3D Cell index (local)
61 int globalCellIdx[3]; // 3D Cell index (global)
62
63 for (int dim = 0; dim < 3; dim++) {
64 cellIndex[dim] = (int) floor((particle1.r(dim) - _bBMin[dim]) / _cellSize[dim]);
65 globalCellIdx[dim] = _lowCorner[dim] + cellIndex[dim];
66 }
67 unsigned long cellid = _globalCellsPerDim[0] * (globalCellIdx[2] * _globalCellsPerDim[1] + globalCellIdx[1]) + globalCellIdx[0];
68 _globalLoadPerCell[cellid] += 1.0;
69 _localLoad += 1.0;
70 }
71 return 0.0;
72 }
73
74 double processPair(Molecule& particle1, Molecule& particle2, double distanceVector[3], PairType pairType, double dd, bool calculateLJ)
75 {
76 return this->processPair(particle1, particle2, distanceVector, pairType, dd, calculateLJ, NULL);
77 }
78
79// void recordRDF() {
80// return;
81// }
82
83 void giveStatus() {
84 std::cout << "Adapter: ParticlePairs2LoadCalcAdapter" << std::endl;
85 }
86
87 float* getLoad() {
88 return _globalLoadPerCell;
89 }
90
91private:
92 int _globalCellsPerDim[3];
93 unsigned long _globalNumCells;
94 float* _globalLoadPerCell;
95 KDDecomposition* _kddecomp;
96 double _bBMin[3];
97 int _lowCorner[3];
98 double _cellSize[3];
99 float _localLoad;
100};
101
102#endif /*PARTICLEPAIRS2LOADCALCADAPTER_H_*/
FullMolecule modeled as LJ sphere with point polarities.
Definition: FullMolecule.h:18
double r(unsigned short d) const override
Definition: FullMolecule.h:51
KD tree based domain decomposition for better load balancing.
Definition: KDDecomposition.h:37
This Interface is used to get access to particles and pairs of particles.
Definition: ParticleContainer.h:69
virtual double getBoundingBoxMin(int dimension) const
returns one coordinate of the lower corner of the bounding box
Definition: ParticleContainer.cpp:29
used for guessing load
Definition: ParticlePairs2LoadCalcAdapter.h:10
ParticlePairs2LoadCalcAdapter()
Constructor.
Definition: ParticlePairs2LoadCalcAdapter.h:13
~ParticlePairs2LoadCalcAdapter()
Destructor.
Definition: ParticlePairs2LoadCalcAdapter.h:35
void finish()
finish
Definition: ParticlePairs2LoadCalcAdapter.h:44
double processPair(Molecule &particle1, Molecule &particle2, double distanceVector[3], PairType pairType, double dd, bool calculateLJ)
things to be done for each particle pair
Definition: ParticlePairs2LoadCalcAdapter.h:74
double processPair(Molecule &particle1, Molecule &particle2, double distanceVector[3], PairType pairType, double dd, bool calculateLJ, double *force=NULL)
calculate force between pairs and collect macroscopic contribution
Definition: ParticlePairs2LoadCalcAdapter.h:57
void init()
initialize
Definition: ParticlePairs2LoadCalcAdapter.h:40
interface for defining the action performed when processing a pair
Definition: ParticlePairsHandler.h:38