LCOV - code coverage report
Current view: top level - coupling/cell-mappings - SetTemperatureMapping.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 17 0
Test Date: 2026-08-21 15:14:06 Functions: 0.0 % 2 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_SETTEMPERATUREMAPPING_H_
       6              : #define _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_SETTEMPERATUREMAPPING_H_
       7              : 
       8              : #include "coupling/interface/MDSolverInterface.h"
       9              : #include "coupling/interface/Molecule.h"
      10              : #include <cmath>
      11              : #include <iostream>
      12              : 
      13              : namespace coupling {
      14              : namespace cellmappings {
      15              : template <class LinkedCell, unsigned int dim> class SetTemperatureMapping;
      16              : }
      17              : } // namespace coupling
      18              : 
      19              : /**
      20              :  *      @brief This class sets a certain temperature over several linked cells.
      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::SetTemperatureMapping {
      26              : public:
      27              :   /** Constructor: obtains the old temperature over the region of interest.
      28              :    *Besides, obtains the new temperature.
      29              :    *    @param oldTemperature
      30              :    *    @param newTemperature
      31              :    *    @param meanVelocity
      32              :    *    @param mdSolverInterface
      33              :    */
      34            0 :   SetTemperatureMapping(const double& oldTemperature, const double& newTemperature, const tarch::la::Vector<dim, double>& meanVelocity,
      35              :                         coupling::interface::MDSolverInterface<LinkedCell, dim>* const mdSolverInterface)
      36            0 :       : _mdSolverInterface(mdSolverInterface), _factor(getScalingFactor(oldTemperature, newTemperature)), _meanVelocity(meanVelocity) {}
      37              : 
      38              :   /** Destructor */
      39            0 :   ~SetTemperatureMapping() {}
      40              : 
      41              :   /** empty function
      42              :    */
      43              :   void beginCellIteration() {}
      44              : 
      45              :   /** empty function
      46              :    */
      47              :   void endCellIteration() {}
      48              : 
      49              :   /** applies a certain temperature over several linked cells, by changing the
      50              :    *velocity (velocity fluctuation).
      51              :    *    @param cell
      52              :    */
      53            0 :   void handleCell(LinkedCell& cell) {
      54            0 :     coupling::interface::MoleculeIterator<LinkedCell, dim>* it = _mdSolverInterface->getMoleculeIterator(cell);
      55            0 :     it->begin();
      56            0 :     while (it->continueIteration()) {
      57            0 :       coupling::interface::Molecule<dim>& wrapper(it->get());
      58            0 :       tarch::la::Vector<dim, double> velocity = wrapper.getVelocity();
      59              :       // scale velocity
      60            0 :       velocity = _meanVelocity + _factor * (velocity - _meanVelocity);
      61            0 :       wrapper.setVelocity(velocity);
      62            0 :       it->next();
      63              :     }
      64            0 :     delete it;
      65            0 :   }
      66              : 
      67              : private:
      68              :   /** calculates the scaling factor between the old and new temperatures.
      69              :    *    @param oldTemperature
      70              :    *    @param newTemperature
      71              :    *    @return newTemperature
      72              :    *    @remark only allow re-scaling if the original temperature was not zero
      73              :    *(can happen in empty cells that just became populated)
      74              :    */
      75            0 :   double getScalingFactor(const double& oldTemperature, const double& newTemperature) const {
      76              : 
      77            0 :     if (oldTemperature != 0.0) {
      78            0 :       return sqrt(newTemperature / oldTemperature);
      79              :     } else {
      80              :       return 1.0;
      81              :     }
      82              :   }
      83              : 
      84              :   coupling::interface::MDSolverInterface<LinkedCell, dim>* const _mdSolverInterface;
      85              :   const double _factor;
      86              :   const tarch::la::Vector<dim, double> _meanVelocity;
      87              : };
      88              : #endif // _MOLECULARDYNAMICS_COUPLING_CELLMAPPINGS_SETTEMPERATUREMAPPING_H_
        

Generated by: LCOV version 2.0-1