Line data Source code
1 : // Copyright (C) 2015 Technische Universitaet Muenchen
2 : // This file is part of the Mamico project. For conditions of distribution
3 : // and use, please see the copyright notice in Mamico's main folder, or at
4 : // www5.in.tum.de/mamico
5 : #ifndef _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_COMPUTEMASSMAPPING_H_
6 : #define _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_COMPUTEMASSMAPPING_H_
7 :
8 : #include "coupling/interface/MDSolverInterface.h"
9 : #include <iostream>
10 :
11 : namespace coupling {
12 : namespace cellmappings {
13 : template <class LinkedCell, unsigned int dim> class ComputeMassMapping;
14 : }
15 : } // namespace coupling
16 :
17 : /**
18 : * @brief This class computes the mass over certain linked cells.
19 : * @tparam LinkedCell cell type
20 : * @tparam dim Number of dimensions; it can be 1, 2 or 3
21 : * @author Philipp Neumann
22 : */
23 : template <class LinkedCell, unsigned int dim> class coupling::cellmappings::ComputeMassMapping {
24 : public:
25 : /** Constructor
26 : * @param mdSolverInterface
27 : */
28 8 : ComputeMassMapping(coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
29 8 : : _mdSolverInterface(mdSolverInterface), _mass(0.0), _particleCounter(0) {}
30 :
31 : /** Destructor */
32 0 : ~ComputeMassMapping() {}
33 :
34 : /** sets the mass and the particlee counter to zero, before the iteration
35 : * process begins.
36 : */
37 0 : void beginCellIteration() {
38 0 : _mass = 0.0;
39 0 : _particleCounter = 0;
40 : }
41 :
42 : /** computes the mass in a linked cell, by multiplying the number of particles
43 : * inside the cell with the particel mass(which is assuemd to be constant).
44 : */
45 0 : void endCellIteration() { _mass = _mdSolverInterface->getMoleculeMass() * _particleCounter; }
46 :
47 : /** counts the molecules inside a linked cell.
48 : * @param cell
49 : */
50 0 : void handleCell(LinkedCell& cell) {
51 0 : coupling::interface::MoleculeIterator<LinkedCell, dim>* it = _mdSolverInterface->getMoleculeIterator(cell);
52 0 : it->begin();
53 0 : while (it->continueIteration()) {
54 0 : _particleCounter++;
55 0 : it->next();
56 : }
57 0 : delete it;
58 0 : }
59 :
60 : /** returns the mass inside a linked cell
61 : * @return _mass
62 : */
63 0 : double getMass() const { return _mass; }
64 : /** returns the number of particles inside a linked cell
65 : * @return _particleCounter
66 : */
67 0 : unsigned int getNumberOfParticles() const { return _particleCounter; }
68 :
69 : private:
70 : coupling::interface::MDSolverInterface<LinkedCell, dim>* const _mdSolverInterface;
71 : double _mass;
72 : unsigned int _particleCounter;
73 : };
74 : #endif // _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_COMPUTEMASSMAPPING_H_
|