1#ifndef PARTICLEPAIRS2LOADCALCADAPTER_H_
2#define PARTICLEPAIRS2LOADCALCADAPTER_H_
4#include "particleContainer/handlerInterfaces/ParticlePairsHandler.h"
5#include "utils/Logger.h"
17 for (
int dim = 0; dim < 3; dim++) {
18 _globalCellsPerDim[dim] = globalCellsPerDim[dim];
19 _lowCorner[dim] = lowCorner[dim];
20 _cellSize[dim] = cellSize[dim];
22 _globalNumCells = _globalCellsPerDim[0] * _globalCellsPerDim[1] * _globalCellsPerDim[2];
23 _globalLoadPerCell =
new float[_globalNumCells];
25 for (
int dim = 0; dim < 3; dim++) {
28 for (
unsigned int i = 0; i < _globalNumCells; i++) {
29 _globalLoadPerCell[i] = 0.0;
36 delete[] _globalLoadPerCell;
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;
58 PairType pairType,
double dd,
bool calculateLJ,
double* force = NULL) {
59 if (pairType == MOLECULE_MOLECULE) {
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];
67 unsigned long cellid = _globalCellsPerDim[0] * (globalCellIdx[2] * _globalCellsPerDim[1] + globalCellIdx[1]) + globalCellIdx[0];
68 _globalLoadPerCell[cellid] += 1.0;
76 return this->
processPair(particle1, particle2, distanceVector, pairType, dd, calculateLJ, NULL);
84 std::cout <<
"Adapter: ParticlePairs2LoadCalcAdapter" << std::endl;
88 return _globalLoadPerCell;
92 int _globalCellsPerDim[3];
93 unsigned long _globalNumCells;
94 float* _globalLoadPerCell;
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