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_MOMENTUMINSERTION_H_
6 : #define _MOLECULARDYNAMICS_COUPLING_MOMENTUMINSERTION_H_
7 :
8 : #include "coupling/datastructures/CouplingCell.h"
9 : #include "tarch/la/Vector.h"
10 :
11 : namespace coupling {
12 : template <class LinkedCell, unsigned int dim> class MomentumInsertion;
13 : }
14 :
15 : /** @brief used to manipulate the momentum/ velocity of the molecules contained
16 : * in a coupling cell.
17 : * @author Philipp Neumann
18 : * @tparam LinkedCell the LinkedCell class is given by the implementation of
19 : * linked cells in the molecular dynamics simulation
20 : * @tparam dim refers to the spacial dimension of the simulation, can be 1, 2,
21 : * or 3
22 : */
23 : template <class LinkedCell, unsigned int dim> class coupling::MomentumInsertion {
24 : public:
25 : /** @brief a simple constructor
26 : * @param mdSolverInterface interface to the md solver*/
27 4 : MomentumInsertion(coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface) : _mdSolverInterface(mdSolverInterface) {}
28 : /** @brief a simple destructor*/
29 0 : virtual ~MomentumInsertion() {}
30 :
31 : /** @brief returns the number of MD steps between subsequent momentum
32 : * insertions
33 : * @returns the time step interval for momentum insertion */
34 : virtual unsigned int getTimeIntervalPerMomentumInsertion() const = 0;
35 :
36 : /** This method does not conserve the kinetic energy of the respective
37 : * coupling cell. To conserve the energy as well, see the description of
38 : * MomentumController on details how to do that.
39 : * @brief inserts a fraction from the momentum of the coupling cell and
40 : * distributes is over all molecules.
41 : * @param cell the coupling cell to insert the momentum
42 : * @param fraction the fraction of momentum to use */
43 : virtual void insertMomentum(coupling::datastructures::CouplingCellWithLinkedCells<LinkedCell, dim>& cell, I02 idx) const = 0;
44 :
45 : /** Used to activate / deactivate momentum insertion also on inner cell layers */
46 : virtual void setInnerImposition(bool enable) = 0;
47 :
48 : protected:
49 : /** interface to the md solver */
50 : coupling::interface::MDSolverInterface<LinkedCell, dim>* const _mdSolverInterface;
51 : };
52 :
53 : #endif // _MOLECULARDYNAMICS_COUPLING_MOMENTUMINSERTION_H_
|