LCOV - code coverage report
Current view: top level - coupling/cell-mappings - ComputeTemperatureMapping.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 22 0.0 %
Date: 2025-06-25 11:26:37 Functions: 0 2 0.0 %

          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_COMPUTETEMPERATUREMAPPING_H_
       6             : #define _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_COMPUTETEMPERATUREMAPPING_H_
       7             : 
       8             : #include "coupling/interface/MDSolverInterface.h"
       9             : #include "coupling/interface/Molecule.h"
      10             : #include <iostream>
      11             : 
      12             : namespace coupling {
      13             : namespace cellmappings {
      14             : template <class LinkedCell, unsigned int dim> class ComputeTemperatureMapping;
      15             : }
      16             : } // namespace coupling
      17             : 
      18             : /**
      19             :  *      @brief This class computes the temperature in a certain (coupling)
      20             :  *cell.
      21             :  *      @tparam LinkedCell cell type
      22             :  *      @tparam dim Number of dimensions; it can be 1, 2 or 3
      23             :  *  @author Philipp Neumann
      24             :  */
      25             : template <class LinkedCell, unsigned int dim> class coupling::cellmappings::ComputeTemperatureMapping {
      26             : public:
      27             :   /** Constructor
      28             :    *    @param meanVelocity
      29             :    *    @param mdSolverInterface
      30             :    */
      31           0 :   ComputeTemperatureMapping(const tarch::la::Vector<dim, double>& meanVelocity,
      32             :                             coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
      33           0 :       : _mdSolverInterface(mdSolverInterface), _meanVelocity(meanVelocity), _temperature(0.0), _particleCounter(0) {}
      34             : 
      35             :   /** Destructor */
      36           0 :   ~ComputeTemperatureMapping() {}
      37             : 
      38             :   /** sets the temperature and the particle counter to zero, before the
      39             :    * iteration process begins.
      40             :    */
      41           0 :   void beginCellIteration() {
      42           0 :     _temperature = 0.0;
      43           0 :     _particleCounter = 0;
      44             :   }
      45             : 
      46             :   /** computes the temperature in a linked cell, based on equilibrium
      47             :    * statistical mechanics.
      48             :    */
      49           0 :   void endCellIteration() {
      50           0 :     _temperature = _temperature * _mdSolverInterface->getMoleculeMass();
      51           0 :     if (_particleCounter != 0) {
      52           0 :       _temperature = _temperature / (dim * _mdSolverInterface->getKB() * _particleCounter);
      53             :     }
      54           0 :   }
      55             : 
      56             :   /** sums up the velocity fluctuation (from the mean flow velocity) of all
      57             :    *particles
      58             :    *    @param cell
      59             :    */
      60           0 :   void handleCell(LinkedCell& cell) {
      61           0 :     coupling::interface::MoleculeIterator<LinkedCell, dim>* it = _mdSolverInterface->getMoleculeIterator(cell);
      62           0 :     it->begin();
      63           0 :     while (it->continueIteration()) {
      64           0 :       const coupling::interface::Molecule<dim>& wrapper(it->getConst());
      65           0 :       _temperature += tarch::la::dot((wrapper.getVelocity() - _meanVelocity), (wrapper.getVelocity() - _meanVelocity));
      66           0 :       _particleCounter++;
      67             : 
      68           0 :       it->next();
      69             :     }
      70           0 :     delete it;
      71           0 :   }
      72             : 
      73             :   /** returns the temperature inside a linked cell
      74             :    *    @return _temperature
      75             :    */
      76           0 :   double getTemperature() const { return _temperature; }
      77             : 
      78             : private:
      79             :   coupling::interface::MDSolverInterface<LinkedCell, dim>* const _mdSolverInterface;
      80             :   const tarch::la::Vector<dim, double> _meanVelocity;
      81             :   double _temperature;
      82             :   unsigned int _particleCounter;
      83             : };
      84             : #endif // _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_COMPUTETEMPERATUREMAPPING_H_

Generated by: LCOV version 1.14